<?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>199094</bug_id>
          
          <creation_ts>2019-06-20 17:41:33 -0700</creation_ts>
          <short_desc>[WPE][GTK] Bump minimum versions of GLib, GTK, libsoup, ATK, GStreamer, and Cairo</short_desc>
          <delta_ts>2019-06-21 07:20:04 -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>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Michael Catanzaro">mcatanzaro</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>pnormand</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1546759</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-06-20 17:41:33 -0700</bug_when>
    <thetext>We can remove a lot of preprocessor guards in our code if we bump the minimum required versions of certain dependencies:

GStreamer 1.8 -&gt; 1.10
GTK 3.6 -&gt; 3.22
ATK 2.16
libsoup 2.42 -&gt; 2.54
glib 2.40 -&gt; 2.44
cairo 1.14

I&apos;m being extremely conservative with all these dependency bumps. All of these versions are already available in Debian Stretch, which we no longer support building on anyway due to GCC 7 requirement.

We still have a few preprocessor guards remaining for everything here except glib and cairo, but this removes the vast majority of them. Deleting code is fun!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546761</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-06-20 17:44:47 -0700</bug_when>
    <thetext>Also there were some fallthroughs in the a11y code that seemed plainly incorrect, which this fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546781</commentid>
    <comment_count>2</comment_count>
      <attachid>372607</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-06-20 18:30:40 -0700</bug_when>
    <thetext>Created attachment 372607
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546809</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-20 22:30:34 -0700</bug_when>
    <thetext>Could yopu explain in the ChangeLog where the new numbers come from? Are those the versions of the deps in Debian stretch? what about other distros?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546831</commentid>
    <comment_count>4</comment_count>
      <attachid>372607</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-06-21 00:50:36 -0700</bug_when>
    <thetext>Comment on attachment 372607
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:-406
&gt; -#if GST_CHECK_VERSION(1, 11, 0)
&gt;          gst_structure_set(structure, &quot;context&quot;, GST_TYPE_GL_CONTEXT, gstGLContext(), nullptr);
&gt; -#else
&gt; -        gst_structure_set(structure, &quot;context&quot;, GST_GL_TYPE_CONTEXT, gstGLContext(), nullptr);
&gt; -#endif

This one needs to remain, and s/11/12/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546866</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-06-21 07:08:03 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #3)
&gt; Could yopu explain in the ChangeLog where the new numbers come from? Are
&gt; those the versions of the deps in Debian stretch? what about other distros?

The new versions are MIN(whatever&apos;s available in Stretch, whatever we have a CHECK_VERSION for). E.g. we have ATK_CHECK_VERSIONs looking for very recent ATKs like 2.30 or whatever, but only ATK 2.22 is available in Stretch, and the highest CHECK_VERSION we have below 2.22 is 2.16, so I set the minimum to 2.16.

Other distros should all be at least as new as Stretch or they will no longer be able to update.

(In reply to Philippe Normand from comment #4) 
&gt; This one needs to remain, and s/11/12/

Oops, good catch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546868</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-06-21 07:16:34 -0700</bug_when>
    <thetext>&gt; (In reply to Philippe Normand from comment #4) 
&gt; &gt; This one needs to remain, and s/11/12/
&gt; 
&gt; Oops, good catch!

I also missed removing runtime checks for 1.8 and 1.10 using webkitGstCheckVersion().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546869</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-06-21 07:20:04 -0700</bug_when>
    <thetext>Committed r246677: &lt;https://trac.webkit.org/changeset/246677&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372607</attachid>
            <date>2019-06-20 18:30:40 -0700</date>
            <delta_ts>2019-06-21 00:50:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199094-20190620203039.patch</filename>
            <type>text/plain</type>
            <size>211659</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2FiMDQ5ZDgxODQ1ZmM3
NTAyY2RkMjNkZDJmYjYzYTZhMGNkNmViNy4uYzFhMmYwZmQ2YTgwYWUyZWI3NzdhNWFjNGRjODc0
Y2YxYzlmMGM4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMyBAQAorMjAxOS0wNi0yMCAgTWlj
aGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1dQRV1b
R1RLXSBCdW1wIG1pbmltdW0gdmVyc2lvbnMgb2YgR0xpYiwgR1RLLCBsaWJzb3VwLCBBVEssIEdT
dHJlYW1lciwgYW5kIENhaXJvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTkwOTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlLmNwcDoKKyAgICAg
ICAgKGF0a1JvbGUpOgorICAgICAgICAoc2V0QXRrU3RhdGVTZXRGcm9tQ29yZU9iamVjdCk6Cisg
ICAgICAgIChpbnRlcmZhY2VNYXNrRnJvbU9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlQ2VsbC5jcHA6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlQ2VsbC5oOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0
LmNwcDoKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0U3RyaW5nQXRPZmZzZXQpOgor
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRJbnRlcmZhY2VJbml0KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVmFsdWUuY3BwOgorICAg
ICAgICAod2Via2l0QWNjZXNzaWJsZVZhbHVlSW50ZXJmYWNlSW5pdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpraW5kIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZh
dGVHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1Jl
ZlB0ckdTdHJlYW1lci5jcHA6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RTdHJlYW1Db2xs
ZWN0aW9uPik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJH
U3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVh
bWVyQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVHU3RyZWFtZXJBbmRS
ZWdpc3RlcldlYktpdEVsZW1lbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpJbmJhbmRUZXh0VHJhY2tQcml2
YXRlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRyYWNrcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmVuYWJsZVRyYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxl
TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnNvdXJjZVNldHVwKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6aGFuZGxlU3luY01lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6cmVxdWVzdEdMQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1By
aXZhdGVCYXNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VH
U3RyZWFtZXI6OmRpc2Nvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lcjo6dGFnc0NoYW5nZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpU
cmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpzdHJlYW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6a2luZCBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVh
bWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtS2V5Ym9hcmRFdmVudEd0ay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpldmVudFR5cGVGb3JHZGtLZXlFdmVudCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtTW91c2VFdmVudEd0ay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNj
cmVlblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVuQXZhaWxhYmxlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpzY3JlZW5IYXNUb3VjaERldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpz
Y3JlZW5Jc1RvdWNoUHJpbWFyeUlucHV0RGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFNj
cmVlbik6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
aXNUb3VjaERldmljZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VBZGRlZENh
bGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRldmljZVJlbW92ZWRDYWxsYmFj
ayk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hl
ZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR2FkZ2V0LmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHYWRnZXQuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVXaWRnZXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2d0
ay9SZW5kZXJUaGVtZVdpZGdldC5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9TY3JvbGxiYXJU
aGVtZUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6U2Nyb2xs
YmFyVGhlbWVHdGspOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnRoZW1l
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6dXBkYXRlVGhl
bWVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjp0cmFj
a1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OmZvcndhcmRCdXR0
b25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6c2Nyb2xsYmFyVGhpY2tuZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVN0eWxlQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVDaGlsZFN0eWxlQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpwYWludFN0ZXBwZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0
UmVjdEFjY29yZGluZ1RvTWFyZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHA6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6dG9Tb3VwTWVzc2FnZVByaW9yaXR5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXBOZXR3b3JrU2Vzc2lvbjo6U291cE5ldHdvcmtTZXNzaW9uKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGhlbWVQYXJ0U3Rh
dGVGbGFncyk6CisgICAgICAgIChXZWJDb3JlOjpwYWludFRvZ2dsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6bWVu
dUxpc3RDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQp
OgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVGh1bWIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50SW5uZXJTcGluQnV0dG9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OnN0eWxlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVHdGs6OnN5c3RlbUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
R3RrOjpwYWludE1lZGlhQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVN0eWxlQ29u
dGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsb2FkVGhlbWVkSWNvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpndGtUZXh0RGlyZWN0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Omd0a0ljb25TdGF0ZUZsYWdzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmFkanVzdFJlY3RGb3JGb2N1cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyZW5k
ZXJCdXR0b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0SWNvblNpemVGb3JQaXhl
bFNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRJY29uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OnBhaW50RW50cnlJY29uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNlbnRlclJlY3RWZXJ0aWNhbGx5SW5QYXJlbnRJbnB1dEVsZW1lbnQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6c3BpbkJ1dHRvbkFycm93U2l6ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpwYWludFNwaW5BcnJvd0J1dHRvbik6IERlbGV0ZWQuCisKIDIwMTktMDYt
MjAgIEdyZWcgRG9vbGl0dGxlICA8Z3IzZ0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogQVhJOiBBdWRpdDogaW1hZ2UgbGFiZWwgdGVzdCBpcyB0aHJvd2luZyBzcHVyaW91cyBl
cnJvcnMgb24gZWxlbWVudHMgd2l0aCBleGlzdGluZyBhbHQgYXR0ciwgYnV0IG5vIHZhbHVlOiA8
aW1nIGFsdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKaW5kZXggNzU5Yzc1ZjNkMWEwNjdjNzNkZTY1NDllNjJjZDJjMjY0OTVh
MGQyZS4uYTZhZTY1N2ZmN2NkMWI1NmQzMDE2OTE1YmUzMmZmYWVkYjdlM2I0MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw4NiBAQAorMjAxOS0wNi0yMCAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56
YXJvQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1dQRV1bR1RLXSBCdW1wIG1pbmltdW0gdmVyc2lv
bnMgb2YgR0xpYiwgR1RLLCBsaWJzb3VwLCBBVEssIEdTdHJlYW1lciwgYW5kIENhaXJvCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTkwOTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtEYXRhVGFza1NvdXA6OmNyZWF0ZVJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
RGF0YVRhc2tTb3VwOjp3cml0ZURvd25sb2FkQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2tTb3VwOjp3cml0ZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0RhdGFUYXNrU291cDo6c3RhcnRpbmdDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtEYXRhVGFza1NvdXA6OnJlcXVlc3RTdGFydGVkQ2FsbGJhY2spOiBEZWxldGVkLgorICAg
ICAgICAqIFNoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
YnV0dG9uRm9yRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rvcnk6OmNyZWF0
ZVdlYk1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rvcnk6OmNyZWF0
ZVdlYldoZWVsRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rvcnk6OmNyZWF0
ZVdlYktleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rvcnk6OmNy
ZWF0ZVdlYlRvdWNoRXZlbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGll
bnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRvbmVXaXRoVG91
Y2hFdmVudCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwOgorICAgICAgICAoQ2xpY2tDb3VudGVyOjpjdXJyZW50Q2xpY2tDb3VudEZvckdka0J1dHRv
bkV2ZW50KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlUmVhbGl6ZSk6CisgICAgICAgICh3
ZWJraXRXZWJWaWV3QmFzZUhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAod2Via2l0V2ViVmll
d0Jhc2VHZXRUb3VjaFBvaW50c0ZvckV2ZW50KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNl
VG91Y2hFdmVudCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVDb250cm9sbGVy
KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRXZlbnQpOgorICAgICAgICAoZGV2aWNlU2Nh
bGVGYWN0b3JDaGFuZ2VkKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlV2ViUGFn
ZSk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVRha2VWaWV3U25hcHNob3QpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdEaWFsb2cuY3BwOgorICAgICAgICAo
d2Via2l0V2ViVmlld0RpYWxvZ0RyYXcpOgorICAgICAgICAod2Via2l0V2ViVmlld0RpYWxvZ0Nv
bnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19kaWFsb2dfY2xhc3NfaW5pdCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0d0ay5jcHA6CisgICAg
ICAgIChmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2spOgorICAgICAgICAod2Via2l0
V2ViVmlld1J1bkZpbGVDaG9vc2VyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9n
dGsvV2ViQXV0b21hdGlvblNlc3Npb25HdGsuY3BwOgorICAgICAgICAoV2ViS2l0Ojpkb01vdXNl
RXZlbnQpOgorICAgICAgICAoV2ViS2l0Ojpkb01vdGlvbkV2ZW50KToKKyAgICAgICAgKFdlYktp
dDo6ZG9LZXlTdHJva2VFdmVudCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXlsYW5k
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXlsYW5kOjp+
QWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXlsYW5kKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxl
cmF0ZWRCYWNraW5nU3RvcmVXYXlsYW5kOjp0cnlFbnN1cmVHTENvbnRleHQpOgorICAgICAgICAo
V2ViS2l0OjpBY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVdheWxhbmQ6Om1ha2VDb250ZXh0Q3VycmVu
dCk6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkQmFja2luZ1N0b3JlV2F5bGFuZDo6cGFp
bnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXls
YW5kLmg6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9EcmFnQW5kRHJvcEhhbmRsZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpEcmFnQW5kRHJvcEhhbmRsZXI6OnN0YXJ0RHJhZyk6CisgICAgICAg
IChXZWJLaXQ6OkRyYWdBbmREcm9wSGFuZGxlcjo6ZmlsbERyYWdEYXRhKToKKyAgICAgICAgKFdl
YktpdDo6RHJhZ0FuZERyb3BIYW5kbGVyOjpmaW5pc2hEcmFnKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvZ3RrL0RyYWdBbmREcm9wSGFuZGxlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvR2Vz
dHVyZUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6
aGFuZGxlRXZlbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OmZpbHRlcktleUV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OmxvZ0hhbmRsZUtleWJvYXJkRXZlbnRGb3JUZXN0
aW5nKToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OmxvZ0hhbmRsZUtleWJv
YXJkRXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzRm9yVGVzdGluZyk6CisgICAgICAgICogVUlQ
cm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoV2ViS2l0
Ojppc0V2ZW50U3RvcCk6CisgICAgICAgIChXZWJLaXQ6OmNyZWF0ZVNjcm9sbEV2ZW50KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5R3RrOjphcHBlbmQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb250ZXh0TWVudVByb3h5R3RrOjpXZWJDb250ZXh0TWVudVByb3h5R3RrKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eUd0azo6fldlYkNvbnRleHRNZW51UHJv
eHlHdGspOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmNw
cDoKKyAgICAgICAgKHdlYmtpdF9pbnNwZWN0b3Jfd2luZG93X2luaXQpOgorICAgICAgICAod2Vi
a2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsv
V2ViUGFnZVByb3h5R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRD
ZW50ZXJGb3Jab29tR2VzdHVyZSk6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1l
bnVQcm94eUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5R3RrOjpz
aG93UG9wdXBNZW51KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlHdGs6Omhp
ZGVQb3B1cE1lbnUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6Z2V0Q2VudGVyRm9yWm9vbUdlc3R1cmUpOgorCiAyMDE5LTA2LTIwICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJVUkxTY2hlbWVIYW5k
bGVyUHJveHk6OmxvYWRTeW5jaHJvbm91c2x5IGNyYXNoIHdpdGggc3luYyByZXF1ZXN0LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRr
LmNwcAppbmRleCBhMDVlYzE3OTcwYWQxZWY2NzU5ZjU0YTU0ZmUxNWQ4NzUyYjYyYTI3Li42YzY1
MmY0NzYxMDA3MGQ0YmE5NzZiOThjYjc1YzhlNjI0ODYxNzE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcApAQCAtMjQw
LDEzICsyNDAsMTAgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZvcm1Ob3RpZmljYXRp
b24oQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgQVgKICAgICAgICAgICAgIHByb3Bl
cnR5VmFsdWVzLnByb3BlcnR5X25hbWUgPSAiYWNjZXNzaWJsZS12YWx1ZSI7CiAKICAgICAgICAg
ICAgIG1lbXNldCgmcHJvcGVydHlWYWx1ZXMubmV3X3ZhbHVlLCAgMCwgc2l6ZW9mKEdWYWx1ZSkp
OwotI2lmIEFUS19DSEVDS19WRVJTSU9OKDIsMTEsOTIpCisKICAgICAgICAgICAgIGRvdWJsZSB2
YWx1ZTsKICAgICAgICAgICAgIGF0a192YWx1ZV9nZXRfdmFsdWVfYW5kX3RleHQoQVRLX1ZBTFVF
KGF4T2JqZWN0KSwgJnZhbHVlLCBudWxscHRyKTsKICAgICAgICAgICAgIGdfdmFsdWVfc2V0X2Rv
dWJsZShnX3ZhbHVlX2luaXQoJnByb3BlcnR5VmFsdWVzLm5ld192YWx1ZSwgR19UWVBFX0RPVUJM
RSksIHZhbHVlKTsKLSNlbHNlCi0gICAgICAgICAgICBhdGtfdmFsdWVfZ2V0X2N1cnJlbnRfdmFs
dWUoQVRLX1ZBTFVFKGF4T2JqZWN0KSwgJnByb3BlcnR5VmFsdWVzLm5ld192YWx1ZSk7Ci0jZW5k
aWYKIAogICAgICAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGF4T2JqZWN0LCAicHJvcGVy
dHktY2hhbmdlOjphY2Nlc3NpYmxlLXZhbHVlIiwgJnByb3BlcnR5VmFsdWVzLCBOVUxMKTsKICAg
ICAgICAgfQpAQCAtMjg4LDkgKzI4NSw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFBsYXRm
b3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIEFYCiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBBWFJlYWRPbmx5U3RhdHVzQ2hhbmdlZDoKLSNpZiBBVEtf
Q0hFQ0tfVkVSU0lPTigyLDE1LDMpCiAgICAgICAgIGF0a19vYmplY3Rfbm90aWZ5X3N0YXRlX2No
YW5nZShheE9iamVjdCwgQVRLX1NUQVRFX1JFQURfT05MWSwgIWNvcmVPYmplY3QtPmNhblNldFZh
bHVlQXR0cmlidXRlKCkpOwotI2VuZGlmCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBBWFJl
cXVpcmVkU3RhdHVzQ2hhbmdlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZS5jcHAKaW5kZXggOWM3N2EwNGE0Y2U5YTA0NDBkYWFh
MDAzNjc4NmMwZDE5NTAzZDBhMi4uZjQ3ZWZjNTJmNzY1NmRkMjA4MWE0Zjc2YzJiYzZiNWQyZmE2
Mzk0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZS5jcHAKQEAgLTU4NiwxNCArNTg2LDkgQEAgc3RhdGljIEF0a1JvbGUgYXRr
Um9sZShBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0KQogICAgIGNhc2UgQWNjZXNzaWJp
bGl0eVJvbGU6OlVua25vd246CiAgICAgICAgIHJldHVybiBBVEtfUk9MRV9VTktOT1dOOwogICAg
IGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkF1ZGlvOgotI2lmIEFUS19DSEVDS19WRVJTSU9OKDIs
IDExLCAzKQogICAgICAgICByZXR1cm4gQVRLX1JPTEVfQVVESU87Ci0jZW5kaWYKICAgICBjYXNl
IEFjY2Vzc2liaWxpdHlSb2xlOjpWaWRlbzoKLSNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigyLCAxMSwg
MykKICAgICAgICAgcmV0dXJuIEFUS19ST0xFX1ZJREVPOwotI2VuZGlmCi0gICAgICAgIHJldHVy
biBBVEtfUk9MRV9FTUJFRERFRDsKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpCdXR0b246
CiAgICAgICAgIHJldHVybiBBVEtfUk9MRV9QVVNIX0JVVFRPTjsKICAgICBjYXNlIEFjY2Vzc2li
aWxpdHlSb2xlOjpTd2l0Y2g6CkBAIC02MTMsMTEgKzYwOCw3IEBAIHN0YXRpYyBBdGtSb2xlIGF0
a1JvbGUoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKICAgICBjYXNlIEFjY2Vzc2li
aWxpdHlSb2xlOjpTZWFyY2hGaWVsZDoKICAgICAgICAgcmV0dXJuIEFUS19ST0xFX0VOVFJZOwog
ICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlN0YXRpY1RleHQ6Ci0jaWYgQVRLX0NIRUNLX1ZF
UlNJT04oMiwgMTUsIDIpCiAgICAgICAgIHJldHVybiBBVEtfUk9MRV9TVEFUSUM7Ci0jZWxzZQot
ICAgICAgICByZXR1cm4gQVRLX1JPTEVfVEVYVDsKLSNlbmRpZgogICAgIGNhc2UgQWNjZXNzaWJp
bGl0eVJvbGU6Ok91dGxpbmU6CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VHJlZToKICAg
ICAgICAgcmV0dXJuIEFUS19ST0xFX1RSRUU7CkBAIC02NTgsOCArNjQ5LDggQEAgc3RhdGljIEF0
a1JvbGUgYXRrUm9sZShBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0KQogICAgICAgICBy
ZXR1cm4gQVRLX1JPTEVfU1BMSVRfUEFORTsKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpT
cGxpdHRlcjoKICAgICAgICAgcmV0dXJuIEFUS19ST0xFX1NFUEFSQVRPUjsKLSAgICBjYXNlIEFj
Y2Vzc2liaWxpdHlSb2xlOjpDb2xvcldlbGw6CiAjaWYgUExBVEZPUk0oR1RLKQorICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eVJvbGU6OkNvbG9yV2VsbDoKICAgICAgICAgLy8gQVRLX1JPTEVfQ09MT1Jf
Q0hPT1NFUiBpcyBkZWZpbmVkIGFzIGEgZGlhbG9nIChpLmUuIGl0J3Mgd2hhdCBhcHBlYXJzIHdo
ZW4geW91IHB1c2ggdGhlIGJ1dHRvbikuCiAgICAgICAgIHJldHVybiBBVEtfUk9MRV9QVVNIX0JV
VFRPTjsKICNlbmRpZgpAQCAtNzA2LDkgKzY5Nyw3IEBAIHN0YXRpYyBBdGtSb2xlIGF0a1JvbGUo
QWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlS
b2xlOjpMaXN0TWFya2VyOgogICAgICAgICByZXR1cm4gQVRLX1JPTEVfVEVYVDsKICAgICBjYXNl
IEFjY2Vzc2liaWxpdHlSb2xlOjpEb2N1bWVudEFydGljbGU6Ci0jaWYgQVRLX0NIRUNLX1ZFUlNJ
T04oMiwgMTEsIDMpCiAgICAgICAgIHJldHVybiBBVEtfUk9MRV9BUlRJQ0xFOwotI2VuZGlmCiAg
ICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6RG9jdW1lbnQ6CiAgICAgY2FzZSBBY2Nlc3NpYmls
aXR5Um9sZTo6R3JhcGhpY3NEb2N1bWVudDoKICAgICAgICAgcmV0dXJuIEFUS19ST0xFX0RPQ1VN
RU5UX0ZSQU1FOwpAQCAtNzI5LDExICs3MTgsOSBAQCBzdGF0aWMgQXRrUm9sZSBhdGtSb2xlKEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9s
ZTo6TGVnZW5kOgogICAgICAgICByZXR1cm4gQVRLX1JPTEVfTEFCRUw7CiAgICAgY2FzZSBBY2Nl
c3NpYmlsaXR5Um9sZTo6QmxvY2txdW90ZToKLSNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigyLCAxMSwg
MykKICAgICAgICAgcmV0dXJuIEFUS19ST0xFX0JMT0NLX1FVT1RFOwotI2VuZGlmCi0gICAgY2Fz
ZSBBY2Nlc3NpYmlsaXR5Um9sZTo6Rm9vdG5vdGU6CiAjaWYgQVRLX0NIRUNLX1ZFUlNJT04oMiwg
MjUsIDIpCisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6Rm9vdG5vdGU6CiAgICAgICAgIHJl
dHVybiBBVEtfUk9MRV9GT09UTk9URTsKICNlbmRpZgogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJv
bGU6OkFwcGxpY2F0aW9uVGV4dEdyb3VwOgpAQCAtNzQ1LDEwICs3MzIsOCBAQCBzdGF0aWMgQXRr
Um9sZSBhdGtSb2xlKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCiAgICAgY2FzZSBB
Y2Nlc3NpYmlsaXR5Um9sZTo6Rm9vdGVyOgogICAgICAgICByZXR1cm4gQVRLX1JPTEVfRk9PVEVS
OwogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkZvcm06Ci0jaWYgQVRLX0NIRUNLX1ZFUlNJ
T04oMiwgMTEsIDMpCiAgICAgICAgIGlmIChjb3JlT2JqZWN0LT5hcmlhUm9sZUF0dHJpYnV0ZSgp
ICE9IEFjY2Vzc2liaWxpdHlSb2xlOjpVbmtub3duKQogICAgICAgICAgICAgcmV0dXJuIEFUS19S
T0xFX0xBTkRNQVJLOwotI2VuZGlmCiAgICAgICAgIHJldHVybiBBVEtfUk9MRV9GT1JNOwogICAg
IGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkNhbnZhczoKICAgICAgICAgcmV0dXJuIEFUS19ST0xF
X0NBTlZBUzsKQEAgLTc2NCw3ICs3NDksNiBAQCBzdGF0aWMgQXRrUm9sZSBhdGtSb2xlKEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCiAgICAgICAgIHJldHVybiBBVEtfUk9MRV9ET0NV
TUVOVF9XRUI7CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6V2ViQXBwbGljYXRpb246CiAg
ICAgICAgIHJldHVybiBBVEtfUk9MRV9FTUJFRERFRDsKLSNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigy
LCAxMSwgMykKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpBcHBsaWNhdGlvbkxvZzoKICAg
ICAgICAgcmV0dXJuIEFUS19ST0xFX0xPRzsKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpB
cHBsaWNhdGlvbk1hcnF1ZWU6CkBAIC03ODYsNyArNzcwLDYgQEAgc3RhdGljIEF0a1JvbGUgYXRr
Um9sZShBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJu
IEFUS19ST0xFX1RBQkxFX0NFTEw7CiAgICAgICAgIGlmIChjb3JlT2JqZWN0LT5pc01hdGhTdWJz
Y3JpcHRTdXBlcnNjcmlwdCgpIHx8IGNvcmVPYmplY3QtPmlzTWF0aE11bHRpc2NyaXB0KCkpCiAg
ICAgICAgICAgICByZXR1cm4gQVRLX1JPTEVfU0VDVElPTjsKLSNpZiBBVEtfQ0hFQ0tfVkVSU0lP
TigyLCAxNSwgNCkKICAgICAgICAgaWYgKGNvcmVPYmplY3QtPmlzTWF0aEZyYWN0aW9uKCkpCiAg
ICAgICAgICAgICByZXR1cm4gQVRLX1JPTEVfTUFUSF9GUkFDVElPTjsKICAgICAgICAgaWYgKGNv
cmVPYmplY3QtPmlzTWF0aFNxdWFyZVJvb3QoKSB8fCBjb3JlT2JqZWN0LT5pc01hdGhSb290KCkp
CkBAIC03OTcsMTEgKzc4MCw4IEBAIHN0YXRpYyBBdGtSb2xlIGF0a1JvbGUoQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZU9iamVjdCkKICAgICAgICAgaWYgKGNvcmVPYmplY3QtPmlzTWF0aFNjcmlw
dE9iamVjdChBY2Nlc3NpYmlsaXR5TWF0aFNjcmlwdE9iamVjdFR5cGU6OlN1cGVyc2NyaXB0KQog
ICAgICAgICAgICAgfHwgY29yZU9iamVjdC0+aXNNYXRoTXVsdGlzY3JpcHRPYmplY3QoQWNjZXNz
aWJpbGl0eU1hdGhNdWx0aXNjcmlwdE9iamVjdFR5cGU6OlByZVN1cGVyc2NyaXB0KSB8fCBjb3Jl
T2JqZWN0LT5pc01hdGhNdWx0aXNjcmlwdE9iamVjdChBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2Ny
aXB0T2JqZWN0VHlwZTo6UG9zdFN1cGVyc2NyaXB0KSkKICAgICAgICAgICAgIHJldHVybiBBVEtf
Uk9MRV9TVVBFUlNDUklQVDsKLSNlbmRpZgotI2lmIEFUS19DSEVDS19WRVJTSU9OKDIsIDE1LCAy
KQogICAgICAgICBpZiAoY29yZU9iamVjdC0+aXNNYXRoVG9rZW4oKSkKICAgICAgICAgICAgIHJl
dHVybiBBVEtfUk9MRV9TVEFUSUM7Ci0jZW5kaWYKICAgICAgICAgcmV0dXJuIEFUS19ST0xFX1VO
S05PV047CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGFuZG1hcmtCYW5uZXI6CiAgICAg
Y2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGFuZG1hcmtDb21wbGVtZW50YXJ5OgpAQCAtODEyLDgg
Kzc5Miw2IEBAIHN0YXRpYyBBdGtSb2xlIGF0a1JvbGUoQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZU9iamVjdCkKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpMYW5kbWFya1JlZ2lvbjoKICAg
ICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpMYW5kbWFya1NlYXJjaDoKICAgICAgICAgcmV0dXJu
IEFUS19ST0xFX0xBTkRNQVJLOwotI2VuZGlmCi0jaWYgQVRLX0NIRUNLX1ZFUlNJT04oMiwgMTEs
IDQpCiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6RGVzY3JpcHRpb25MaXN0OgogICAgICAg
ICByZXR1cm4gQVRLX1JPTEVfREVTQ1JJUFRJT05fTElTVDsKICAgICBjYXNlIEFjY2Vzc2liaWxp
dHlSb2xlOjpUZXJtOgpAQCAtODIxLDIxICs3OTksMTYgQEAgc3RhdGljIEF0a1JvbGUgYXRrUm9s
ZShBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0KQogICAgICAgICByZXR1cm4gQVRLX1JP
TEVfREVTQ1JJUFRJT05fVEVSTTsKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpEZXNjcmlw
dGlvbkxpc3REZXRhaWw6CiAgICAgICAgIHJldHVybiBBVEtfUk9MRV9ERVNDUklQVElPTl9WQUxV
RTsKLSNlbmRpZgogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OklubGluZToKLSNpZiBBVEtf
Q0hFQ0tfVkVSU0lPTigyLCAxNSwgNCkKICAgICAgICAgaWYgKGNvcmVPYmplY3QtPmlzU3Vic2Ny
aXB0U3R5bGVHcm91cCgpKQogICAgICAgICAgICAgcmV0dXJuIEFUS19ST0xFX1NVQlNDUklQVDsK
ICAgICAgICAgaWYgKGNvcmVPYmplY3QtPmlzU3VwZXJzY3JpcHRTdHlsZUdyb3VwKCkpCiAgICAg
ICAgICAgICByZXR1cm4gQVRLX1JPTEVfU1VQRVJTQ1JJUFQ7Ci0jZW5kaWYKLSNpZiBBVEtfQ0hF
Q0tfVkVSU0lPTigyLCAxNSwgMikKICAgICAgICAgcmV0dXJuIEFUS19ST0xFX1NUQVRJQzsKICAg
ICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpTVkdUZXh0UGF0aDoKICAgICBjYXNlIEFjY2Vzc2li
aWxpdHlSb2xlOjpTVkdUU3BhbjoKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpUaW1lOgog
ICAgICAgICByZXR1cm4gQVRLX1JPTEVfU1RBVElDOwotI2VuZGlmCiAgICAgZGVmYXVsdDoKICAg
ICAgICAgcmV0dXJuIEFUS19ST0xFX1VOS05PV047CiAgICAgfQpAQCAtODk4LDEwICs4NzEsOCBA
QCBzdGF0aWMgdm9pZCBzZXRBdGtTdGF0ZVNldEZyb21Db3JlT2JqZWN0KEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmVPYmplY3QsIEF0a1N0YQogICAgIGlmIChjb3JlT2JqZWN0LT5pc0J1c3koKSkK
ICAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9CVVNZ
KTsKIAotI2lmIEFUS19DSEVDS19WRVJTSU9OKDIsMTEsMikKICAgICBpZiAoY29yZU9iamVjdC0+
c3VwcG9ydHNDaGVja2VkKCkgJiYgY29yZU9iamVjdC0+Y2FuU2V0VmFsdWVBdHRyaWJ1dGUoKSkK
ICAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9DSEVD
S0FCTEUpOwotI2VuZGlmCiAKICAgICBpZiAoY29yZU9iamVjdC0+aXNDaGVja2VkKCkpCiAgICAg
ICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfQ0hFQ0tFRCk7
CkBAIC05NjMsMTAgKzkzNCw4IEBAIHN0YXRpYyB2b2lkIHNldEF0a1N0YXRlU2V0RnJvbUNvcmVP
YmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgQXRrU3RhCiAgICAgaWYgKGNv
cmVPYmplY3QtPmlzUHJlc3NlZCgpKQogICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShz
dGF0ZVNldCwgQVRLX1NUQVRFX1BSRVNTRUQpOwogCi0jaWYgQVRLX0NIRUNLX1ZFUlNJT04oMiwx
NSwzKQogICAgIGlmICghY29yZU9iamVjdC0+Y2FuU2V0VmFsdWVBdHRyaWJ1dGUoKSAmJiAoY29y
ZU9iamVjdC0+c3VwcG9ydHNSZWFkT25seSgpKSkKICAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRf
c3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9SRUFEX09OTFkpOwotI2VuZGlmCiAKICAgICBpZiAo
Y29yZU9iamVjdC0+aXNSZXF1aXJlZCgpKQogICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0
ZShzdGF0ZVNldCwgQVRLX1NUQVRFX1JFUVVJUkVEKTsKQEAgLTExMTIsOSArMTA4MSw3IEBAIHN0
YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBhdGtJbnRlcmZhY2VzSW5pdEZ1bmN0aW9uc1tdID0g
ewogICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJbml0RnVuYz4ocmVpbnRlcnByZXRf
Y2FzdDxHQ2FsbGJhY2s+KHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRJbnRlcmZhY2VJbml0KSks
IG51bGxwdHIsIG51bGxwdHJ9LAogICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJbml0
RnVuYz4ocmVpbnRlcnByZXRfY2FzdDxHQ2FsbGJhY2s+KHdlYmtpdEFjY2Vzc2libGVJbWFnZUlu
dGVyZmFjZUluaXQpKSwgbnVsbHB0ciwgbnVsbHB0cn0sCiAgICAge3JlaW50ZXJwcmV0X2Nhc3Q8
R0ludGVyZmFjZUluaXRGdW5jPihyZWludGVycHJldF9jYXN0PEdDYWxsYmFjaz4od2Via2l0QWNj
ZXNzaWJsZVRhYmxlSW50ZXJmYWNlSW5pdCkpLCBudWxscHRyLCBudWxscHRyfSwKLSNpZiBBVEtf
Q0hFQ0tfVkVSU0lPTigyLDExLDkwKQogICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJ
bml0RnVuYz4ocmVpbnRlcnByZXRfY2FzdDxHQ2FsbGJhY2s+KHdlYmtpdEFjY2Vzc2libGVUYWJs
ZUNlbGxJbnRlcmZhY2VJbml0KSksIG51bGxwdHIsIG51bGxwdHJ9LAotI2VuZGlmCiAgICAge3Jl
aW50ZXJwcmV0X2Nhc3Q8R0ludGVyZmFjZUluaXRGdW5jPihyZWludGVycHJldF9jYXN0PEdDYWxs
YmFjaz4od2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEludGVyZmFjZUluaXQpKSwgbnVsbHB0ciwg
bnVsbHB0cn0sCiAgICAge3JlaW50ZXJwcmV0X2Nhc3Q8R0ludGVyZmFjZUluaXRGdW5jPihyZWlu
dGVycHJldF9jYXN0PEdDYWxsYmFjaz4od2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0ltcGxJbnRl
cmZhY2VJbml0KSksIG51bGxwdHIsIG51bGxwdHJ9LAogICAgIHtyZWludGVycHJldF9jYXN0PEdJ
bnRlcmZhY2VJbml0RnVuYz4ocmVpbnRlcnByZXRfY2FzdDxHQ2FsbGJhY2s+KHdlYmtpdEFjY2Vz
c2libGVEb2N1bWVudEludGVyZmFjZUluaXQpKSwgbnVsbHB0ciwgbnVsbHB0cn0sCkBAIC0xMTI5
LDkgKzEwOTYsNyBAQCBlbnVtIFdBSVR5cGUgewogICAgIFdBSUNvbXBvbmVudCwKICAgICBXQUlJ
bWFnZSwKICAgICBXQUlUYWJsZSwKLSNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigyLDExLDkwKQogICAg
IFdBSVRhYmxlQ2VsbCwKLSNlbmRpZgogICAgIFdBSUh5cGVydGV4dCwKICAgICBXQUlIeXBlcmxp
bmssCiAgICAgV0FJRG9jdW1lbnQsCkBAIC0xMTU1LDEwICsxMTIwLDggQEAgc3RhdGljIEdUeXBl
IGF0a0ludGVyZmFjZVR5cGVGcm9tV0FJVHlwZShXQUlUeXBlIHR5cGUpCiAgICAgICAgIHJldHVy
biBBVEtfVFlQRV9JTUFHRTsKICAgICBjYXNlIFdBSVRhYmxlOgogICAgICAgICByZXR1cm4gQVRL
X1RZUEVfVEFCTEU7Ci0jaWYgQVRLX0NIRUNLX1ZFUlNJT04oMiwxMSw5MCkKICAgICBjYXNlIFdB
SVRhYmxlQ2VsbDoKICAgICAgICAgcmV0dXJuIEFUS19UWVBFX1RBQkxFX0NFTEw7Ci0jZW5kaWYK
ICAgICBjYXNlIFdBSUh5cGVydGV4dDoKICAgICAgICAgcmV0dXJuIEFUS19UWVBFX0hZUEVSVEVY
VDsKICAgICBjYXNlIFdBSUh5cGVybGluazoKQEAgLTEyNDksMTAgKzEyMTIsOCBAQCBzdGF0aWMg
Z3VpbnQxNiBpbnRlcmZhY2VNYXNrRnJvbU9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3Jl
T2JqZWN0KQogICAgIGlmIChjb3JlT2JqZWN0LT5pc1RhYmxlKCkpCiAgICAgICAgIGludGVyZmFj
ZU1hc2sgfD0gMSA8PCBXQUlUYWJsZTsKIAotI2lmIEFUS19DSEVDS19WRVJTSU9OKDIsMTEsOTAp
CiAgICAgaWYgKHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkNlbGwgfHwgcm9sZSA9PSBBY2Nl
c3NpYmlsaXR5Um9sZTo6R3JpZENlbGwgfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q29s
dW1uSGVhZGVyIHx8IHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlJvd0hlYWRlcikKICAgICAg
ICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSVRhYmxlQ2VsbDsKLSNlbmRpZgogCiAgICAgLy8g
RG9jdW1lbnQKICAgICBpZiAocm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6V2ViQXJlYSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VUYWJsZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlQ2VsbC5jcHAKaW5kZXggZTM0MWRjMjk4
ZjI5NjFlZmNjMDdjNDc3YzEzODQwNzVlMmE4Njk5Yy4uOThlMzYxMTA5YmIxZWMzY2ViNjZhNGU3
NWY2NWU1ZjIzY2VmMDA1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlQ2VsbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxl
Q2VsbC5jcHAKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGFibGVDZWxsLmgiCiAKICNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCi0jaWYgQVRLX0NI
RUNLX1ZFUlNJT04oMiwxMSw5MCkKKwogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIK
ICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
VGFibGVDZWxsLmgiCkBAIC0xNjYsNSArMTY2LDQgQEAgdm9pZCB3ZWJraXRBY2Nlc3NpYmxlVGFi
bGVDZWxsSW50ZXJmYWNlSW5pdChBdGtUYWJsZUNlbGxJZmFjZSogaWZhY2UpCiAgICAgaWZhY2Ut
PmdldF90YWJsZSA9IHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxHZXRUYWJsZTsKIH0KIAotI2Vu
ZGlmIC8vIEFUS19DSEVDS19WRVJTSU9OKDIsMTEsOTApCiAjZW5kaWYgLy8gSEFWRShBQ0NFU1NJ
QklMSVRZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlQ2VsbC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlQ2VsbC5oCmluZGV4IGQy
ZjU4YzZmYjUxOWY4MGYzZjA5ODRjYTc1MDExMzI4MjEwMzEzNjQuLjlkMjg5NTdlN2QxZjhlMWMz
NWU0ZTU2NTFiMTBmOTE3ODQxN2MwYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZUNlbGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
VGFibGVDZWxsLmgKQEAgLTI1LDggKzI1LDYgQEAKIAogI2luY2x1ZGUgPGF0ay9hdGsuaD4KIAot
I2lmIEFUS19DSEVDS19WRVJTSU9OKDIsMTEsOTApCiB2b2lkIHdlYmtpdEFjY2Vzc2libGVUYWJs
ZUNlbGxJbnRlcmZhY2VJbml0KEF0a1RhYmxlQ2VsbElmYWNlKik7Ci0jZW5kaWYKIAogI2VuZGlm
IC8vIEhBVkUoQUNDRVNTSUJJTElUWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cAppbmRleCAzNjllOTZlMTk0ODRmN2E4MWZiOTQ5ODdkNThhMjQ0ZjY3NWFlZjZkLi4wODRlMmY2
N2IyZDcxNjU4YzAzYzkyNDNhNGRjMmNmMTRjNzE0ZTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCkBAIC0xMjA3LDcgKzEyMDcsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0QWNjZXNzaWJsZVRleHRTZXRDYXJldE9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNl
dCkKICAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZVRleHRTZXRTZWxlY3Rpb24odGV4dCwgMCwg
b2Zmc2V0LCBvZmZzZXQpOwogfQogCi0jaWYgQVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAsIDApCiBz
dGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0U3RyaW5nQXRPZmZzZXQoQXRrVGV4
dCogdGV4dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgZ2lu
dCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKIHsKICAgICAvLyBUaGlzIG5ldyBBUEkg
aGFzIGJlZW4gZGVzaWduZWQgdG8gc2ltcGxpZnkgdGhlIEF0a1RleHQgaW50ZXJmYWNlIGFuZCBp
dCBoYXMgYmVlbgpAQCAtMTI0Nyw3ICsxMjQ2LDYgQEAgc3RhdGljIGdjaGFyKiB3ZWJraXRBY2Nl
c3NpYmxlVGV4dEdldFN0cmluZ0F0T2Zmc2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LAog
CiAgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEZvck9mZnNldCh0ZXh0LCBv
ZmZzZXQsIGJvdW5kYXJ5VHlwZSwgR2V0VGV4dFBvc2l0aW9uQXQsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQpOwogfQotI2VuZGlmCiAKIHZvaWQgd2Via2l0QWNjZXNzaWJsZVRleHRJbnRlcmZhY2VJ
bml0KEF0a1RleHRJZmFjZSogaWZhY2UpCiB7CkBAIC0xMjY5LDEwICsxMjY3LDcgQEAgdm9pZCB3
ZWJraXRBY2Nlc3NpYmxlVGV4dEludGVyZmFjZUluaXQoQXRrVGV4dElmYWNlKiBpZmFjZSkKICAg
ICBpZmFjZS0+cmVtb3ZlX3NlbGVjdGlvbiA9IHdlYmtpdEFjY2Vzc2libGVUZXh0UmVtb3ZlU2Vs
ZWN0aW9uOwogICAgIGlmYWNlLT5zZXRfc2VsZWN0aW9uID0gd2Via2l0QWNjZXNzaWJsZVRleHRT
ZXRTZWxlY3Rpb247CiAgICAgaWZhY2UtPnNldF9jYXJldF9vZmZzZXQgPSB3ZWJraXRBY2Nlc3Np
YmxlVGV4dFNldENhcmV0T2Zmc2V0OwotCi0jaWYgQVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAsIDAp
CiAgICAgaWZhY2UtPmdldF9zdHJpbmdfYXRfb2Zmc2V0ID0gd2Via2l0QWNjZXNzaWJsZVRleHRH
ZXRTdHJpbmdBdE9mZnNldDsKLSNlbmRpZgogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VWYWx1
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVmFsdWUuY3BwCmluZGV4IGE2YjE1ZjhmOWJmNWQ5MDMxMzg3NzMxMGVkZDZjYmZh
MTdkMTY0M2QuLjczMDc3Mzg0YTU3Zjk2YWIyYWRkYmEzMzFjMzM1MzkyMTYwZTViZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVlLmNwcApAQCAtNjQsNyArNjQsNiBAQCBzdGF0
aWMgZmxvYXQgd2Via2l0QWNjZXNzaWJsZUdldEluY3JlbWVudFZhbHVlKEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmVPYmplY3QpCiAgICAgcmV0dXJuIHN0ZXAgPCAxID8gMSA6IHN0ZXA7CiB9CiAK
LSNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigyLDExLDkyKQogc3RhdGljIHZvaWQgd2Via2l0QWNjZXNz
aWJsZUdldFZhbHVlQW5kVGV4dChBdGtWYWx1ZSogdmFsdWUsIGdkb3VibGUqIGN1cnJlbnRWYWx1
ZSwgZ2NoYXIqKiBhbHRlcm5hdGl2ZVRleHQpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChBVEtf
VkFMVUUodmFsdWUpKTsKQEAgLTExNCw3ICsxMTMsNyBAQCBzdGF0aWMgQXRrUmFuZ2UqIHdlYmtp
dEFjY2Vzc2libGVHZXRSYW5nZShBdGtWYWx1ZSogdmFsdWUpCiAgICAgZ2NoYXIqIHZhbHVlRGVz
Y3JpcHRpb24gPSBnX3N0cmR1cF9wcmludGYoIiVzIiwgY29yZU9iamVjdC0+dmFsdWVEZXNjcmlw
dGlvbigpLnV0ZjgoKS5kYXRhKCkpOwogICAgIHJldHVybiBhdGtfcmFuZ2VfbmV3KG1pblZhbHVl
LCBtYXhWYWx1ZSwgdmFsdWVEZXNjcmlwdGlvbik7CiB9Ci0jZW5kaWYKKwogc3RhdGljIHZvaWQg
d2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0Q3VycmVudFZhbHVlKEF0a1ZhbHVlKiB2YWx1ZSwgR1Zh
bHVlKiBnVmFsdWUpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChBVEtfVkFMVUUodmFsdWUpKTsK
QEAgLTE4NywxMiArMTg2LDEwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdl
dE1pbmltdW1JbmNyZW1lbnQoQXRrVmFsdWUqIHZhbHVlLCBHVmFsdWUqIGdWCiAKIHZvaWQgd2Vi
a2l0QWNjZXNzaWJsZVZhbHVlSW50ZXJmYWNlSW5pdChBdGtWYWx1ZUlmYWNlKiBpZmFjZSkKIHsK
LSNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigyLDExLDkyKQogICAgIGlmYWNlLT5nZXRfdmFsdWVfYW5k
X3RleHQgPSB3ZWJraXRBY2Nlc3NpYmxlR2V0VmFsdWVBbmRUZXh0OwogICAgIGlmYWNlLT5nZXRf
aW5jcmVtZW50ID0gd2Via2l0QWNjZXNzaWJsZUdldEluY3JlbWVudDsKICAgICBpZmFjZS0+c2V0
X3ZhbHVlID0gd2Via2l0QWNjZXNzaWJsZVNldFZhbHVlOwogICAgIGlmYWNlLT5nZXRfcmFuZ2Ug
PSB3ZWJraXRBY2Nlc3NpYmxlR2V0UmFuZ2U7Ci0jZW5kaWYKICAgICBpZmFjZS0+Z2V0X2N1cnJl
bnRfdmFsdWUgPSB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRDdXJyZW50VmFsdWU7CiAgICAgaWZh
Y2UtPmdldF9tYXhpbXVtX3ZhbHVlID0gd2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0TWF4aW11bVZh
bHVlOwogICAgIGlmYWNlLT5nZXRfbWluaW11bV92YWx1ZSA9IHdlYmtpdEFjY2Vzc2libGVWYWx1
ZUdldE1pbmltdW1WYWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9BdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXIuY3BwCmluZGV4IDA1MWQzYmU0MjNjMjVlMWY0ZmY0NGEwNDA0MmY0MTRiZTkwMDVmZTYu
LmE0NTZhZjY0YWYxM2JhMTAwN2ZiNDhkM2VmYTI0MmE1N2NhZjZhZTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9BdWRpb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNDMsNyArNDMsNiBAQCBB
dWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIoV2Vh
a1B0cjxNZWRpYVBsYXllclByaXZhdAogICAgIG5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFuZ2VkKCk7
CiB9CiAKLSNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKIEF1ZGlvVHJhY2tQcml2YXRl
R1N0cmVhbWVyOjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihXZWFrUHRyPE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcj4gcGxheWVyLCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFN0cmVhbT4g
c3RyZWFtKQogICAgIDogVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcih0aGlzLCBpbmRleCwgc3Ry
ZWFtKQogICAgICwgbV9wbGF5ZXIocGxheWVyKQpAQCAtNzAsNyArNjksNiBAQCBBdWRpb1RyYWNr
UHJpdmF0ZTo6S2luZCBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6a2luZCgpIGNvbnN0CiAK
ICAgICByZXR1cm4gQXVkaW9UcmFja1ByaXZhdGU6OmtpbmQoKTsKIH0KLSNlbmRpZgogCiB2b2lk
IEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpkaXNjb25uZWN0KCkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9BdWRpb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggNGQ5OGRkNDhiMTlhNDM1ZDcz
ZmFjMGNmOTllZDZkMmYyNWU3ZTg1Ny4uNzBiNmIwMmZlOTlhYjFjYjA0NmZiZGYzNzY1MWJkMDgz
M2U3ZWIxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgK
QEAgLTQzLDE0ICs0MywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyKHBsYXllciwgaW5kZXgsIHBhZCkpOwogICAgIH0K
IAotI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQogICAgIHN0YXRpYyBSZWZQdHI8QXVk
aW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IGNyZWF0ZShXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcj4gcGxheWVyLCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFN0cmVhbT4gc3RyZWFt
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXVkaW9UcmFja1ByaXZhdGVH
U3RyZWFtZXIocGxheWVyLCBpbmRleCwgc3RyZWFtKSk7CiAgICAgfQogCiAgICAgS2luZCBraW5k
KCkgY29uc3QgZmluYWw7Ci0jZW5kaWYKIAogICAgIHZvaWQgZGlzY29ubmVjdCgpIG92ZXJyaWRl
OwogCkBAIC02Niw5ICs2NCw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBBdWRpb1RyYWNr
UHJpdmF0ZUdTdHJlYW1lcihXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4sIGdp
bnQgaW5kZXgsIEdSZWZQdHI8R3N0UGFkPik7Ci0jaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAs
IDApCiAgICAgQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIoV2Vha1B0cjxNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI+LCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFN0cmVhbT4pOwotI2VuZGlm
CiAKICAgICBBdG9tU3RyaW5nIG1faWQ7CiAgICAgV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI+IG1fcGxheWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCmluZGV4IDI2
MDE0ZDJlYzE5YjZmYmI2ZGFmMTUwYzhmNjFkM2MzOTM2Nzc4MGQuLmIxNWY3ZjMyODAxOTEwYzhk
NDZhOTIwODI2MmE5ZDM4ZDE2YTM4MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAK
QEAgLTM1Myw3ICszNTMsNiBAQCB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RRdWVyeT4o
R3N0UXVlcnkqIHB0cikKICAgICAgICAgZ3N0X3F1ZXJ5X3VucmVmKHB0cik7CiB9CiAKLSNpZiBH
U1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKIHRlbXBsYXRlIDw+IEdSZWZQdHI8R3N0U3RyZWFt
PiBhZG9wdEdSZWYoR3N0U3RyZWFtKiBwdHIpCiB7CiAgICAgcmV0dXJuIEdSZWZQdHI8R3N0U3Ry
ZWFtPihwdHIsIEdSZWZQdHJBZG9wdCk7CkBAIC0zOTEsNyArMzkwLDYgQEAgdGVtcGxhdGUgPD4g
dm9pZCBkZXJlZkdQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4oR3N0U3RyZWFtQ29sbGVjdGlvbiog
cHRyKQogICAgIGlmIChwdHIpCiAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsKIH0KLSNl
bmRpZgogCiB0ZW1wbGF0ZSA8PiBHUmVmUHRyPFdlYktpdFZpZGVvU2luaz4gYWRvcHRHUmVmKFdl
YktpdFZpZGVvU2luayogcHRyKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmgKaW5kZXggYjJk
ZWU0NzJkNzM2MjI5YzJiYzU4M2QxY2Q4NTk5NTFiODZjYTk3Ny4uYTE5NjVkNDU4NDJhYTFiYTM4
MDI0NjI4OWMyMWQ3ZWQxYTYyMmZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oCkBAIC0x
MTEsNyArMTExLDYgQEAgR1JlZlB0cjxXZWJLaXRXZWJTcmM+IGVuc3VyZUdSZWYoV2ViS2l0V2Vi
U3JjKiBwdHIpOwogdGVtcGxhdGU8PiBXZWJLaXRXZWJTcmMqIHJlZkdQdHI8V2ViS2l0V2ViU3Jj
PihXZWJLaXRXZWJTcmMqIHB0cik7CiB0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPFdlYktpdFdl
YlNyYz4oV2ViS2l0V2ViU3JjKiBwdHIpOwogCi0jaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAs
IDApCiB0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0U3RyZWFtPiBhZG9wdEdSZWYoR3N0U3RyZWFtKik7
CiB0ZW1wbGF0ZTw+IEdzdFN0cmVhbSogcmVmR1B0cjxHc3RTdHJlYW0+KEdzdFN0cmVhbSopOwog
dGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxHc3RTdHJlYW0+KEdzdFN0cmVhbSopOwpAQCAtMTE5
LDcgKzExOCw2IEBAIHRlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0U3RyZWFtPihHc3RTdHJl
YW0qKTsKIHRlbXBsYXRlPD4gR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBhZG9wdEdSZWYo
R3N0U3RyZWFtQ29sbGVjdGlvbiopOwogdGVtcGxhdGU8PiBHc3RTdHJlYW1Db2xsZWN0aW9uKiBy
ZWZHUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+KEdzdFN0cmVhbUNvbGxlY3Rpb24qKTsKIHRlbXBs
YXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4oR3N0U3RyZWFtQ29sbGVj
dGlvbiopOwotI2VuZGlmCiAKICNpZiBVU0UoR1NUUkVBTUVSX0dMKQogdGVtcGxhdGU8PiBHUmVm
UHRyPEdzdEdMRGlzcGxheT4gYWRvcHRHUmVmKEdzdEdMRGlzcGxheSogcHRyKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJD
b21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dT
dHJlYW1lckNvbW1vbi5jcHAKaW5kZXggY2UzOGQ1MGM4OTA0MWQ3NGE3YTdlNWJiNWZiMzZhYmQ0
NzRmNTRlZi4uYTVjYzcwNmE0NDIyODU4NDZiMWY0OWRjMDJkYzUyMzNmMThlNWQ1NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1l
ckNvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dTdHJlYW1lckNvbW1vbi5jcHAKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlICJXZWJL
aXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgogI2VuZGlmCiAKLSNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKSAmJiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKKyNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQogI2luY2x1ZGUgIkdTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmgiCiAjZW5kaWYKIApA
QCAtMjY5LDcgKzI2OSw3IEBAIGJvb2wgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2Vi
S2l0RWxlbWVudHMoKQogICAgICAgICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAid2Vi
a2l0Y2xlYXJrZXkiLCBHU1RfUkFOS19QUklNQVJZICsgMTAwLCBXRUJLSVRfVFlQRV9NRURJQV9D
S19ERUNSWVBUKTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgR1NUX0NI
RUNLX1ZFUlNJT04oMSwgMTAsIDApCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICAgICAg
aWYgKHdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCAxMCwgMCkpCiAgICAgICAgICAgICBnc3RfZWxl
bWVudF9yZWdpc3RlcihudWxscHRyLCAibWVkaWFzdHJlYW1zcmMiLCBHU1RfUkFOS19QUklNQVJZ
LCBXRUJLSVRfVFlQRV9NRURJQV9TVFJFQU1fU1JDKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1By
aXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IGZiZmZlZTYw
MWNmOTM2ZTcxZmQyODU3NzU5ZGQzNGJiMzkzY2I4MjUuLjYzNDg1ODk2YjY2YTNhYzkzMzE3YjVi
ZDVmNjAzODJiYzg5YjgyNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTU4LDcgKzU4LDYgQEAgSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUdTdHJlYW1lcjo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcihnaW50IGlu
ZGV4LCBHUmUKICAgICBub3RpZnlUcmFja09mU3RyZWFtQ2hhbmdlZCgpOwogfQogCi0jaWYgR1NU
X0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
OjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyKGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0
U3RyZWFtPiBzdHJlYW0pCiAgICAgOiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlKFdlYlZUVCkKICAg
ICAsIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIodGhpcywgaW5kZXgsIHN0cmVhbSkKQEAgLTY2
LDcgKzY1LDYgQEAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6SW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUdTdHJlYW1lcihnaW50IGluZGV4LCBHUmUKICAgICBtX3N0cmVhbUlkID0gZ3N0
X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQoKSk7CiAgICAgR1NUX0lORk8oIlRyYWNr
ICVkIGdvdCBzdHJlYW0gc3RhcnQgZm9yIHN0cmVhbSAlcy4iLCBtX2luZGV4LCBtX3N0cmVhbUlk
LnV0ZjgoKS5kYXRhKCkpOwogfQotI2VuZGlmCiAKIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUdTdHJlYW1lcjo6ZGlzY29ubmVjdCgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRl
eHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaAppbmRleCBmNGUyYTk3ODlkYjA3NjFjYWFkNDBhMWM1
YjYzZjYzMmU5YjE1YTEwLi4yMDBkNTQyZWUyZjRhZDBkMDY5MzA2OGM2Yzg0ZTM4ZDMyNWRlNmQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
LmgKQEAgLTQ0LDEyICs0NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIoaW5kZXgsIHBhZCkpOwogICAgIH0K
IAotI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQogICAgIHN0YXRpYyBSZWY8SW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gY3JlYXRlKGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0
U3RyZWFtPiBzdHJlYW0pCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbmJh
bmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyKGluZGV4LCBzdHJlYW0pKTsKICAgICB9Ci0jZW5k
aWYKIAogICAgIHZvaWQgZGlzY29ubmVjdCgpIG92ZXJyaWRlOwogCkBAIC02Myw5ICs2MSw3IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
KGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0UGFkPik7Ci0jaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwg
MTAsIDApCiAgICAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcihnaW50IGluZGV4LCBH
UmVmUHRyPEdzdFN0cmVhbT4pOwotI2VuZGlmCiAKICAgICB2b2lkIHN0cmVhbUNoYW5nZWQoKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRl
eCAxNWNkZDRiZTUwYTEzNDkyYWYxMzIyNjEyNGNjZTFlYzU1MjY2MzY3Li5jNTQwZDNkNjYyNmM3
YjJlODc5ZTYwMzhjMzZkYWQ3ZGZlNTI0NmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNTMsNyArNTMsNyBAQAogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51
bWJlcnMuaD4KIAotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIEdTVF9DSEVDS19WRVJTSU9O
KDEsIDEwLCAwKQorI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAjaW5jbHVkZSAiR1N0cmVhbWVy
TWVkaWFTdHJlYW1Tb3VyY2UuaCIKICNlbmRpZgogCkBAIC0zMjQsNyArMzI0LDYgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWQoY29uc3QgU3RyaW5nJiwgTWVkaWFTb3Vy
Y2VQcml2YXRlQ2xpZW50KikKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlJiBzdHJlYW0pCiB7
Ci0jaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCiAgICAgbV9zdHJlYW1Qcml2YXRlID0g
JnN0cmVhbTsKICAgICBzdGF0aWMgQXRvbWljPHVpbnQzMl90PiBwaXBlbGluZUlkOwogICAgIGF1
dG8gcGlwZWxpbmVOYW1lID0gbWFrZVN0cmluZygibWVkaWFzdHJlYW0tIiwKQEAgLTMzOCwxMiAr
MzM3LDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWQoTWVkaWFTdHJl
YW1Qcml2YXRlJiBzdHJlYW0pCiAgICAgZW5zdXJlR0xWaWRlb1NpbmtDb250ZXh0KCk7CiAjZW5k
aWYKICAgICBtX3BsYXllci0+cGxheSgpOwotI2Vsc2UKLSAgICAvLyBQcm9wZXJseSBmYWlsIHNv
IHRoZSBnbG9iYWwgTWVkaWFQbGF5ZXIgdHJpZXMgdG8gZmFsbGJhY2sgdG8gdGhlIG5leHQgTWVk
aWFQbGF5ZXJQcml2YXRlLgotICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkZvcm1h
dEVycm9yOwotICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSNlbmRpZgogfQogI2VuZGlmCiAKQEAgLTY3Miw3ICs2NjUsNiBAQCBib29s
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2Vla2luZygpIGNvbnN0CiAgICAgcmV0dXJu
IG1fc2Vla2luZzsKIH0KIAotI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQogI2RlZmlu
ZSBDTEVBUl9UUkFDS1ModHJhY2tzLCBtZXRob2QpIFwKICAgICBmb3IgKGF1dG8mIHRyYWNrIDog
dHJhY2tzLnZhbHVlcygpKVwKICAgICAgICAgbWV0aG9kKCp0cmFjayk7XApAQCAtNzYyLDcgKzc1
NCw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFja3MoKQog
CiAgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyRW5naW5lVXBkYXRlZChtX3BsYXll
cik7CiB9Ci0jZW5kaWYgLy8gR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCiAKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbmFibGVUcmFjayhUcmFja1ByaXZhdGVCYXNlR1N0
cmVhbWVyOjpUcmFja1R5cGUgdHJhY2tUeXBlLCB1bnNpZ25lZCBpbmRleCkKIHsKQEAgLTc3Nyw3
ICs3NjgsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5hYmxlVHJhY2so
VHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeQogICAgIFZlY3RvcjxTdHJpbmc+IHNl
bGVjdGVkU3RyZWFtczsKICAgICBTdHJpbmcgc2VsZWN0ZWRTdHJlYW1JZDsKIAotI2lmIEdTVF9D
SEVDS19WRVJTSU9OKDEsIDEwLCAwKQogICAgIEdzdFN0cmVhbSogc3RyZWFtID0gbnVsbHB0cjsK
IAogICAgIGlmICghbV9pc0xlZ2FjeVBsYXliaW4pIHsKQEAgLTc4OSw3ICs3NzksNiBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5hYmxlVHJhY2soVHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lcjo6VHJhY2tUeQogICAgICAgICBzZWxlY3RlZFN0cmVhbUlkID0gU3RyaW5nOjpm
cm9tVVRGOChnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtKSk7CiAgICAgICAgIHNlbGVj
dGVkU3RyZWFtcy5hcHBlbmQoc2VsZWN0ZWRTdHJlYW1JZCk7CiAgICAgfQotI2VuZGlmIC8vIEdT
VF9DSEVDS19WRVJTSU9OKDEsMCwwKQogCiAgICAgc3dpdGNoICh0cmFja1R5cGUpIHsKICAgICBj
YXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6QXVkaW86CkBAIC04Mzks
NyArODI4LDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmVuYWJsZVRyYWNr
KFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHkKICAgICBHU1RfSU5GT19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIkVuYWJsaW5nICVzIHRyYWNrIHdpdGggaW5kZXg6ICV1IiwgdHJhY2tUeXBl
QXNTdHJpbmcsIGluZGV4KTsKICAgICBpZiAobV9pc0xlZ2FjeVBsYXliaW4pCiAgICAgICAgIGdf
b2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBudWxscHRy
KTsKLSNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKICAgICBlbHNlIHsKICAgICAgICAg
R0xpc3QqIHNlbGVjdGVkU3RyZWFtc0xpc3QgPSBudWxscHRyOwogCkBAIC04NTAsNyArODM4LDYg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmVuYWJsZVRyYWNrKFRyYWNrUHJp
dmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHkKICAgICAgICAgZ3N0X2VsZW1lbnRfc2VuZF9ldmVu
dChtX3BpcGVsaW5lLmdldCgpLCBnc3RfZXZlbnRfbmV3X3NlbGVjdF9zdHJlYW1zKHNlbGVjdGVk
U3RyZWFtc0xpc3QpKTsKICAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChzZWxlY3RlZFN0cmVhbXNM
aXN0LCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihnX2ZyZWUpKTsKICAgICB9Ci0j
ZW5kaWYKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZpZGVvQ2hhbmdl
ZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQpAQCAtMTQxMyw3
ICsxNDAwLDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3Nh
Z2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgZ3N0X3RhZ19saXN0X3VucmVmKHRhZ3Mp
OwogICAgICAgICBicmVhazsKICAgICB9Ci0jaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDAp
CiAgICAgY2FzZSBHU1RfTUVTU0FHRV9TVFJFQU1TX1NFTEVDVEVEOiB7CiAgICAgICAgIEdSZWZQ
dHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gY29sbGVjdGlvbjsKICAgICAgICAgZ3N0X21lc3NhZ2Vf
cGFyc2Vfc3RyZWFtc19zZWxlY3RlZChtZXNzYWdlLCAmY29sbGVjdGlvbi5vdXRQdHIoKSk7CkBA
IC0xNDU2LDcgKzE0NDIsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFu
ZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIlVuaGFuZGxlZCBHU3RyZWFtZXIgbWVzc2FnZSB0eXBlOiAlcyIsIEdTVF9N
RVNTQUdFX1RZUEVfTkFNRShtZXNzYWdlKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTgyNyw3ICsx
ODEyLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZVNldHVwKEdz
dEVsZW1lbnQqIHNvdXJjZUVsZW1lbnQpCiAgICAgaWYgKFdFQktJVF9JU19XRUJfU1JDKG1fc291
cmNlLmdldCgpKSkgewogICAgICAgICB3ZWJLaXRXZWJTcmNTZXRNZWRpYVBsYXllcihXRUJLSVRf
V0VCX1NSQyhtX3NvdXJjZS5nZXQoKSksIG1fcGxheWVyKTsKICAgICAgICAgZ19zaWduYWxfY29u
bmVjdChHU1RfRUxFTUVOVF9QQVJFTlQobV9zb3VyY2UuZ2V0KCkpLCAiZWxlbWVudC1hZGRlZCIs
IEdfQ0FMTEJBQ0sodXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2FsbGJhY2spLCB0aGlzKTsKLSNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKKyNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIH0gZWxzZSBpZiAoV0VCS0lUX0lTX01FRElBX1NU
UkVBTV9TUkMoc291cmNlRWxlbWVudCkpIHsKICAgICAgICAgYXV0byBzdHJlYW0gPSBtX3N0cmVh
bVByaXZhdGUuZ2V0KCk7CiAgICAgICAgIEFTU0VSVChzdHJlYW0pOwpAQCAtMjA2Niw3ICsyMDUx
LDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcygpCiAK
IGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RN
ZXNzYWdlKiBtZXNzYWdlKQogewotI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQogICAg
IGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1NUUkVBTV9DT0xM
RUNUSU9OICYmICFtX2lzTGVnYWN5UGxheWJpbikgewogICAgICAgICBHUmVmUHRyPEdzdFN0cmVh
bUNvbGxlY3Rpb24+IGNvbGxlY3Rpb247CiAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVh
bV9jb2xsZWN0aW9uKG1lc3NhZ2UsICZjb2xsZWN0aW9uLm91dFB0cigpKTsKQEAgLTIwNzgsNyAr
MjA2Miw2IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVz
c2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAg
ICB9Ci0jZW5kaWYKIAogICAgIHJldHVybiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
OjpoYW5kbGVTeW5jTWVzc2FnZShtZXNzYWdlKTsKIH0KQEAgLTIyNTEsNyArMjIzNCw3IEBAIE1l
ZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBw
b3J0c1R5cGUoY29uc3QgTWVkaWFFCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAjZW5kaWYKIAot
I2lmICFFTkFCTEUoTUVESUFfU1RSRUFNKSB8fCAhR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDAp
CisjaWYgIUVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgaWYgKHBhcmFtZXRlcnMuaXNNZWRpYVN0
cmVhbSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICNlbmRpZgpAQCAtMjM2NCwxMCArMjM0Nyw4
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmCiAgICAgLy8gTVNFIGRvZXNuJ3Qgc3VwcG9ydCBw
bGF5YmluMy4gTWVkaWFzdHJlYW0gcmVxdWlyZXMgcGxheWJpbjMuIFJlZ3VsYXIKICAgICAvLyBw
bGF5YmFjayBjYW4gdXNlIHBsYXliaW4zIG9uLWRlbWFuZCB3aXRoIHRoZSBXRUJLSVRfR1NUX1VT
RV9QTEFZQklOMwogICAgIC8vIGVudmlyb25tZW50IHZhcmlhYmxlLgotI2lmIEdTVF9DSEVDS19W
RVJTSU9OKDEsIDEwLCAwKQogICAgIGlmICgoIWlzTWVkaWFTb3VyY2UoKSAmJiBnX2dldGVudigi
V0VCS0lUX0dTVF9VU0VfUExBWUJJTjMiKSkgfHwgdXJsLnByb3RvY29sSXMoIm1lZGlhc3RyZWFt
IikpCiAgICAgICAgIHBsYXliaW5OYW1lID0gInBsYXliaW4zIjsKLSNlbmRpZgogCiAgICAgaWYg
KG1fcGlwZWxpbmUpIHsKICAgICAgICAgaWYgKCFnX3N0cmNtcDAoR1NUX09CSkVDVF9OQU1FKGdz
dF9lbGVtZW50X2dldF9mYWN0b3J5KG1fcGlwZWxpbmUuZ2V0KCkpKSwgcGxheWJpbk5hbWUpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggMmVk
N2M4OTg5NTc1ZWVkYTJmNmE3YWNmY2YxYmMwMTYwYTM3NjgyNy4uOGUyNTdlNjIzMDMyMGI5M2Ji
YWNkYzgyNmY5MGYxMWMzMjVlYjQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaApAQCAtMTgyLDEwICsxODIsOCBAQCBwcml2YXRlOgogICAgIHZvaWQg
c2V0UGxheWJpblVSTChjb25zdCBVUkwmIHVybFN0cmluZyk7CiAgICAgdm9pZCBsb2FkRnVsbChj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBwaXBlbGluZU5hbWUpOwogCi0jaWYgR1NU
X0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCiAgICAgdm9pZCB1cGRhdGVUcmFja3MoKTsKICAgICB2
b2lkIGNsZWFyVHJhY2tzKCk7Ci0jZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIGJvb2wgbV9idWZm
ZXJpbmc7CkBAIC0yNjAsMTMgKzI1OCwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wcmVzZXJ2
ZXNQaXRjaDsKICAgICBtdXRhYmxlIE9wdGlvbmFsPFNlY29uZHM+IG1fbGFzdFF1ZXJ5VGltZTsK
ICAgICBib29sIG1faXNMZWdhY3lQbGF5YmluOwotI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEw
LCAwKQogICAgIEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gbV9zdHJlYW1Db2xsZWN0aW9u
OwogICAgIEZsb2F0U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0IGZpbmFsOwogI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtUHJpdmF0ZT4gbV9zdHJlYW1Qcml2
YXRlOwotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCi0jZW5kaWYgLy8gR1NUX0NIRUNL
X1ZFUlNJT04oMSwgMTAsIDApCisjZW5kaWYKICAgICBTdHJpbmcgbV9jdXJyZW50QXVkaW9TdHJl
YW1JZDsKICAgICBTdHJpbmcgbV9jdXJyZW50VmlkZW9TdHJlYW1JZDsKICAgICBTdHJpbmcgbV9j
dXJyZW50VGV4dFN0cmVhbUlkOwpAQCAtMjg0LDcgKzI4MCw3IEBAIHByaXZhdGU6CiAjaWYgVVNF
KEdTVFJFQU1FUl9NUEVHVFMpCiAgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQdHI8SW5iYW5k
TWV0YWRhdGFUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyPj4gbV9tZXRhZGF0YVRyYWNrczsKICNl
bmRpZgotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIHZpcnR1YWwg
Ym9vbCBpc01lZGlhU291cmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHVpbnQ2
NF90IG1faHR0cFJlc3BvbnNlVG90YWxTaXplIHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCmluZGV4IDZlYTM2NTgwZjJkNTBl
OGIzODBmN2Q1MTVjNmE0MDE3MzQzYWE4ZmQuLjNhMzQ2NzlkZmQxOGViOGZlMjA1MDEyMGNmZGI1
MjYwMTdhYzBjZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZS5jcHAKQEAgLTM5OSwxMSArMzk5LDcgQEAgR3N0Q29udGV4dCogTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cmVxdWVzdEdMQ29udGV4dChjb25zdCBjaGFyKiBj
b250ZXgKICAgICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgImdzdC5nbC5hcHBfY29udGV4
dCIpKSB7CiAgICAgICAgIEdzdENvbnRleHQqIGFwcENvbnRleHQgPSBnc3RfY29udGV4dF9uZXco
ImdzdC5nbC5hcHBfY29udGV4dCIsIFRSVUUpOwogICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShhcHBDb250ZXh0KTsKLSNpZiBH
U1RfQ0hFQ0tfVkVSU0lPTigxLCAxMSwgMCkKICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3Ry
dWN0dXJlLCAiY29udGV4dCIsIEdTVF9UWVBFX0dMX0NPTlRFWFQsIGdzdEdMQ29udGV4dCgpLCBu
dWxscHRyKTsKLSNlbHNlCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNv
bnRleHQiLCBHU1RfR0xfVFlQRV9DT05URVhULCBnc3RHTENvbnRleHQoKSwgbnVsbHB0cik7Ci0j
ZW5kaWYKICAgICAgICAgcmV0dXJuIGFwcENvbnRleHQ7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaAppbmRleCA0N2JjNDI3ODk2
Y2ZkNDA1MmY3OWYxMDRiZmRhNjQwMWQxMmI3MWI1Li41OWFmZGZjYzAxYjYwOWI1YzU5NTQ4NGZk
MGZjNzY1NzVlOTBjOWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlLmgKQEAgLTIzNyw5ICsyMzcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAg
IFRleHRDaGFuZ2VkID0gMSA8PCA1LAogI2VuZGlmCiAgICAgICAgIFNpemVDaGFuZ2VkID0gMSA8
PCA2LAotI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQogICAgICAgICBTdHJlYW1Db2xs
ZWN0aW9uQ2hhbmdlZCA9IDEgPDwgNwotI2VuZGlmCiAgICAgfTsKIAogICAgIFJlZjxNYWluVGhy
ZWFkTm90aWZpZXI8TWFpblRocmVhZE5vdGlmaWNhdGlvbj4+IG1fbm90aWZpZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2
YXRlQmFzZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5jcHAKaW5kZXggNmRhNDk1MThiZGEx
MWM0NzBjYTBhYjQ3MjkzZjA5MTIwYTRlYjk2Ny4uZGY3MDViOTQ5NzFkMDI2MDBlYWMyMDE3YjFi
MTUwZWFiMzA4NDY5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVh
bWVyLmNwcApAQCAtNTgsNyArNTgsNiBAQCBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFj
a1ByaXZhdGVCYXNlR1N0cmVhbWVyKFRyYWNrUHJpdmF0ZUJhc2UqIG93bmVyLCBnaQogICAgIHRh
Z3NDaGFuZ2VkKCk7CiB9CiAKLSNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKIFRyYWNr
UHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIoVHJhY2tQcml2
YXRlQmFzZSogb3duZXIsIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW0pCiAg
ICAgOiBtX25vdGlmaWVyKE1haW5UaHJlYWROb3RpZmllcjxNYWluVGhyZWFkTm90aWZpY2F0aW9u
Pjo6Y3JlYXRlKCkpCiAgICAgLCBtX2luZGV4KGluZGV4KQpAQCAtNzAsNyArNjksNiBAQCBUcmFj
a1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKFRyYWNrUHJp
dmF0ZUJhc2UqIG93bmVyLCBnaQogICAgIC8vIFdlIGNhbid0IGNhbGwgbm90aWZ5VHJhY2tPZlRh
Z3NDaGFuZ2VkKCkgZGlyZWN0bHksIGJlY2F1c2Ugd2UgbmVlZCB0YWdzQ2hhbmdlZCgpIHRvIHNl
dHVwIG1fdGFncy4KICAgICB0YWdzQ2hhbmdlZCgpOwogfQotI2VuZGlmCiAKIFRyYWNrUHJpdmF0
ZUJhc2VHU3RyZWFtZXI6On5UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKCkKIHsKQEAgLTgyLDEw
ICs4MCw4IEBAIHZvaWQgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6ZGlzY29ubmVjdCgpCiB7
CiAgICAgbV90YWdzLmNsZWFyKCk7CiAKLSNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkK
ICAgICBpZiAobV9zdHJlYW0pCiAgICAgICAgIG1fc3RyZWFtLmNsZWFyKCk7Ci0jZW5kaWYKIAog
ICAgIG1fbm90aWZpZXItPmNhbmNlbFBlbmRpbmdOb3RpZmljYXRpb25zKCk7CiAKQEAgLTExNSwx
MCArMTExLDggQEAgdm9pZCBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjp0YWdzQ2hhbmdlZCgp
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRhZ3MgPSBhZG9wdEdSZWYoZ3N0X3RhZ19saXN0
X25ld19lbXB0eSgpKTsKICAgICB9Ci0jaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCiAg
ICAgZWxzZSBpZiAobV9zdHJlYW0pCiAgICAgICAgIHRhZ3MgPSBhZG9wdEdSZWYoZ3N0X3N0cmVh
bV9nZXRfdGFncyhtX3N0cmVhbS5nZXQoKSkpOwotI2VuZGlmCiAgICAgZWxzZQogICAgICAgICB0
YWdzID0gYWRvcHRHUmVmKGdzdF90YWdfbGlzdF9uZXdfZW1wdHkoKSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVC
YXNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oCmluZGV4IGM4Y2ZlYjU0MzU4NTEwZmExYjNj
NTdmOTE5YzM3NDhiZTllN2Q0NjYuLmRjZDhiMzU0NzQyNDQ5OTQwODRhNGJlOGIxZWExODY2YzY4
NjllZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuaApAQCAt
NTYsMTggKzU2LDE1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0SW5kZXgoaW50IGluZGV4KSB7
IG1faW5kZXggPSAgaW5kZXg7IH0KIAotI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQog
ICAgIEdzdFN0cmVhbSogc3RyZWFtKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3N0cmVhbS5n
ZXQoKTsKICAgICB9Ci0jZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIFRyYWNrUHJpdmF0ZUJhc2VH
U3RyZWFtZXIoVHJhY2tQcml2YXRlQmFzZSogb3duZXIsIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0
UGFkPik7Ci0jaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCiAgICAgVHJhY2tQcml2YXRl
QmFzZUdTdHJlYW1lcihUcmFja1ByaXZhdGVCYXNlKiBvd25lciwgZ2ludCBpbmRleCwgR1JlZlB0
cjxHc3RTdHJlYW0+KTsKLSNlbmRpZgorCiAgICAgdm9pZCBub3RpZnlUcmFja09mQWN0aXZlQ2hh
bmdlZCgpOwogICAgIHZvaWQgbm90aWZ5VHJhY2tPZlRhZ3NDaGFuZ2VkKCk7CiAKQEAgLTgzLDkg
KzgwLDcgQEAgcHJvdGVjdGVkOgogICAgIEF0b21TdHJpbmcgbV9sYWJlbDsKICAgICBBdG9tU3Ry
aW5nIG1fbGFuZ3VhZ2U7CiAgICAgR1JlZlB0cjxHc3RQYWQ+IG1fcGFkOwotI2lmIEdTVF9DSEVD
S19WRVJTSU9OKDEsIDEwLCAwKQogICAgIEdSZWZQdHI8R3N0U3RyZWFtPiBtX3N0cmVhbTsKLSNl
bmRpZgogCiBwcml2YXRlOgogICAgIGJvb2wgZ2V0TGFuZ3VhZ2VDb2RlKEdzdFRhZ0xpc3QqIHRh
Z3MsIEF0b21TdHJpbmcmIHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UcmFja1ByaXZh
dGVHU3RyZWFtZXIuY3BwCmluZGV4IGUxZjA5OTY0ZGI2MWI3NWZlMDJhZjc5NjFiYTNmOTE1ODIz
NGViMzEuLjY3NjZhYjVmOTU1ZTE2NGEzYTUxOWMzZWJlZDcwN2YxMmIzMjdmMDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNr
UHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNDMsNyArNDMs
NiBAQCBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFt
ZXIoV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdAogICAgIG5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFu
Z2VkKCk7CiB9CiAKLSNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKIFZpZGVvVHJhY2tQ
cml2YXRlR1N0cmVhbWVyOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihXZWFrUHRyPE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4gcGxheWVyLCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFN0
cmVhbT4gc3RyZWFtKQogICAgIDogVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcih0aGlzLCBpbmRl
eCwgc3RyZWFtKQogICAgICwgbV9wbGF5ZXIocGxheWVyKQpAQCAtNjksNyArNjgsNiBAQCBWaWRl
b1RyYWNrUHJpdmF0ZTo6S2luZCBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6a2luZCgpIGNv
bnN0CiAKICAgICByZXR1cm4gVmlkZW9UcmFja1ByaXZhdGU6OmtpbmQoKTsKIH0KLSNlbmRpZgog
CiB2b2lkIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpkaXNjb25uZWN0KCkKIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggNmU3MTg4YjM0NTM3
MWJkNDQ5Y2I5MGVhMjA1ZjdiZDBiZjViYzI0Zi4uNGFmMmU4YTg3ZTQzOWE2M2RiZmM4ZmI2NGY4
OTU4YjM2YWU0Y2I0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVh
bWVyLmgKQEAgLTQzLDEzICs0MywxMyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihwbGF5ZXIsIGluZGV4LCBw
YWQpKTsKICAgICB9Ci0jaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCisKICAgICBzdGF0
aWMgUmVmPFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiBjcmVhdGUoV2Vha1B0cjxNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI+IHBsYXllciwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RTdHJl
YW0+IHN0cmVhbSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZGVvVHJh
Y2tQcml2YXRlR1N0cmVhbWVyKHBsYXllciwgaW5kZXgsIHN0cmVhbSkpOwogICAgIH0KKwogICAg
IEtpbmQga2luZCgpIGNvbnN0IGZpbmFsOwotI2VuZGlmCiAKICAgICB2b2lkIGRpc2Nvbm5lY3Qo
KSBvdmVycmlkZTsKIApAQCAtNjUsOSArNjUsOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAg
VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIoV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI+LCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFBhZD4pOwotI2lmIEdTVF9DSEVDS19WRVJT
SU9OKDEsIDEwLCAwKQogICAgIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyKFdlYWtQdHI8TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyPiwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RTdHJlYW0+
KTsKLSNlbmRpZgorCiAgICAgQXRvbVN0cmluZyBtX2lkOwogICAgIFdlYWtQdHI8TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyPiBtX3BsYXllcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3BwCmluZGV4IGZi
OTM3NjY4MDUwMzMwYmRkYTgwNWM1NDhiYWNiZDBkMzEzMzQ3NjAuLjVjNTJkZmRhMzgwOTdiZTNm
MmIwNThlNmU1MWFiYjc0ZjUzZjFkY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3BwCkBAIC0xMzIzLDExICsx
MzIzLDcgQEAgU3RyaW5nIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6c2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKHVuc2lnbmVkIHZhbCkKIAogc3RhdGljIFBsYXRmb3JtRXZlbnQ6OlR5cGUgZXZlbnRUeXBl
Rm9yR2RrS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQogewotI2lmIEdUS19DSEVDS19WRVJT
SU9OKDMsIDEwLCAwKQogICAgIHJldHVybiBnZGtfZXZlbnRfZ2V0X2V2ZW50X3R5cGUocmVpbnRl
cnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSkgPT0gR0RLX0tFWV9SRUxFQVNFID8gUGxhdGZv
cm1FdmVudDo6S2V5VXAgOiBQbGF0Zm9ybUV2ZW50OjpLZXlEb3duOwotI2Vsc2UKLSAgICByZXR1
cm4gZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFID8gUGxhdGZvcm1FdmVudDo6S2V5VXAg
OiBQbGF0Zm9ybUV2ZW50OjpLZXlEb3duOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBPcHRpb25TZXQ8
UGxhdGZvcm1FdmVudDo6TW9kaWZpZXI+IG1vZGlmaWVyc0Zvckdka0tleUV2ZW50KEdka0V2ZW50
S2V5KiBldmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0
Zm9ybU1vdXNlRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRm
b3JtTW91c2VFdmVudEd0ay5jcHAKaW5kZXggZGUxYThkYzIzZTFhMTIzMjgxMzdhMjg5YWM3Y2I2
NzAwYTQzNDA0Mi4uZTk0MDE0MmVmMDU3OGE2ZjM1NDdjM2M1NDhlMTNmZDQ2MTI4ZTU5NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtTW91c2VFdmVudEd0
ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtTW91c2VFdmVu
dEd0ay5jcHAKQEAgLTY2LDEyICs2Niw3IEBAIFBsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1N
b3VzZUV2ZW50KEdka0V2ZW50QnV0dG9uKiBldmVudCkKICAgICBpZiAoUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50Ojptb2RpZmllcnNDb250YWluQ2Fwc0xvY2soc3RhdGUpKQogICAgICAgICBtX21vZGlm
aWVycy5hZGQoUGxhdGZvcm1FdmVudDo6TW9kaWZpZXI6OkNhcHNMb2NrS2V5KTsKIAotI2lmIEdU
S19DSEVDS19WRVJTSU9OKDMsIDEwLCAwKQogICAgIEdka0V2ZW50VHlwZSB0eXBlID0gZ2RrX2V2
ZW50X2dldF9ldmVudF90eXBlKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCkpOwot
I2Vsc2UKLSAgICBHZGtFdmVudFR5cGUgdHlwZSA9IGV2ZW50LT50eXBlOwotI2VuZGlmCi0KICAg
ICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEdES19CVVRUT05fUFJFU1M6CiAgICAgY2FzZSBH
REtfMkJVVFRPTl9QUkVTUzoKQEAgLTEyNiwxMiArMTIxLDcgQEAgUGxhdGZvcm1Nb3VzZUV2ZW50
OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRNb3Rpb24qIG1vdGlvbikKICAgICBpZiAoUGxh
dGZvcm1LZXlib2FyZEV2ZW50Ojptb2RpZmllcnNDb250YWluQ2Fwc0xvY2soc3RhdGUpKQogICAg
ICAgICBtX21vZGlmaWVycy5hZGQoUGxhdGZvcm1FdmVudDo6TW9kaWZpZXI6OkNhcHNMb2NrS2V5
KTsKIAotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDEwLCAwKQogICAgIEdka0V2ZW50VHlwZSB0
eXBlID0gZ2RrX2V2ZW50X2dldF9ldmVudF90eXBlKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQq
Pihtb3Rpb24pKTsKLSNlbHNlCi0gICAgR2RrRXZlbnRUeXBlIHR5cGUgPSBtb3Rpb24tPnR5cGU7
Ci0jZW5kaWYKLQogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgR0RLX01PVElPTl9OT1RJ
Rlk6CiAgICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNwcAppbmRleCBi
ZDQ3YjczOTY2NzQzNjM1OTFlMWRlMjBjNTNkYWY4NzFjMWVlNmFhLi41NTdlODA2ODI5MzVmMzBk
NDZjZTVjNjEwNDljNTE5YjhiMjk0N2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHAKQEAgLTE0OSwxMyArMTQ5LDYgQEAgdm9pZCBz
ZXRTY3JlZW5EUElPYnNlcnZlckhhbmRsZXIoRnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZXIsIHZv
aWQqIGNvbnRleHQpCiAgICAgfQogfQogCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDIyLCAw
KQotc3RhdGljIEdka1NjcmVlbiogZ2V0U2NyZWVuKEd0a1dpZGdldCogd2lkZ2V0KQotewotICAg
IHJldHVybiBndGtfd2lkZ2V0X2hhc19zY3JlZW4od2lkZ2V0KSA/IGd0a193aWRnZXRfZ2V0X3Nj
cmVlbih3aWRnZXQpIDogZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpOwotfQotI2VuZGlmCi0KIEZs
b2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQogewogICAgIEd0a1dpZGdldCogY29u
dGFpbmVyID0gd2lkZ2V0ID8gR1RLX1dJREdFVCh3aWRnZXQtPnJvb3QoKS0+aG9zdFdpbmRvdygp
LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkgOiAwOwpAQCAtMTYzLDI0ICsxNTYsMTIgQEAgRmxvYXRS
ZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCiAgICAgICAgIGNvbnRhaW5lciA9IGdldFRv
cGxldmVsKGNvbnRhaW5lcik7CiAKICAgICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnk7Ci0jaWYgR1RL
X0NIRUNLX1ZFUlNJT04oMywgMjIsIDApCiAgICAgR2RrRGlzcGxheSogZGlzcGxheSA9IGNvbnRh
aW5lciA/IGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkoY29udGFpbmVyKSA6IGdka19kaXNwbGF5X2dl
dF9kZWZhdWx0KCk7CiAgICAgaWYgKCFkaXNwbGF5KQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0
KCk7CiAKICAgICBHZGtNb25pdG9yKiBtb25pdG9yID0gY29udGFpbmVyID8gZ2RrX2Rpc3BsYXlf
Z2V0X21vbml0b3JfYXRfd2luZG93KGRpc3BsYXksIGd0a193aWRnZXRfZ2V0X3dpbmRvdyhjb250
YWluZXIpKSA6IGdka19kaXNwbGF5X2dldF9tb25pdG9yKGRpc3BsYXksIDApOwotCiAgICAgZ2Rr
X21vbml0b3JfZ2V0X2dlb21ldHJ5KG1vbml0b3IsICZnZW9tZXRyeSk7Ci0jZWxzZQotICAgIEdk
a1NjcmVlbiogc2NyZWVuID0gY29udGFpbmVyID8gZ2V0U2NyZWVuKGNvbnRhaW5lcikgOiBnZGtf
c2NyZWVuX2dldF9kZWZhdWx0KCk7Ci0gICAgaWYgKCFzY3JlZW4pCi0gICAgICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKLQotICAgIGdpbnQgbW9uaXRvciA9IGNvbnRhaW5lciA/IGdka19zY3JlZW5f
Z2V0X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgZ3RrX3dpZGdldF9nZXRfd2luZG93KGNvbnRh
aW5lcikpIDogMDsKLQotICAgIGdka19zY3JlZW5fZ2V0X21vbml0b3JfZ2VvbWV0cnkoc2NyZWVu
LCBtb25pdG9yLCAmZ2VvbWV0cnkpOwotI2VuZGlmIC8vICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCAy
MiwgMCkKLQogICAgIHJldHVybiBGbG9hdFJlY3QoZ2VvbWV0cnkueCwgZ2VvbWV0cnkueSwgZ2Vv
bWV0cnkud2lkdGgsIGdlb21ldHJ5LmhlaWdodCk7CiB9CiAKQEAgLTE5MSwyNCArMTcyLDEyIEBA
IEZsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQogICAgICAgICBy
ZXR1cm4gc2NyZWVuUmVjdCh3aWRnZXQpOwogCiAgICAgR2RrUmVjdGFuZ2xlIHdvcmtBcmVhOwot
I2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIyLCAwKQogICAgIEdka0Rpc3BsYXkqIGRpc3BsYXkg
PSBjb250YWluZXIgPyBndGtfd2lkZ2V0X2dldF9kaXNwbGF5KGNvbnRhaW5lcikgOiBnZGtfZGlz
cGxheV9nZXRfZGVmYXVsdCgpOwogICAgIGlmICghZGlzcGxheSkKICAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdCgpOwogCiAgICAgR2RrTW9uaXRvciogbW9uaXRvciA9IGNvbnRhaW5lciA/IGdka19k
aXNwbGF5X2dldF9tb25pdG9yX2F0X3dpbmRvdyhkaXNwbGF5LCBndGtfd2lkZ2V0X2dldF93aW5k
b3coY29udGFpbmVyKSkgOiBnZGtfZGlzcGxheV9nZXRfbW9uaXRvcihkaXNwbGF5LCAwKTsKLQog
ICAgIGdka19tb25pdG9yX2dldF93b3JrYXJlYShtb25pdG9yLCAmd29ya0FyZWEpOwotI2Vsc2UK
LSAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGNvbnRhaW5lciA/IGdldFNjcmVlbihjb250YWluZXIp
IDogZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpOwotICAgIGlmICghc2NyZWVuKQotICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBnaW50IG1vbml0b3IgPSBjb250YWluZXIgPyBnZGtf
c2NyZWVuX2dldF9tb25pdG9yX2F0X3dpbmRvdyhzY3JlZW4sIGd0a193aWRnZXRfZ2V0X3dpbmRv
dyhjb250YWluZXIpKSA6IDA7Ci0KLSAgICBnZGtfc2NyZWVuX2dldF9tb25pdG9yX3dvcmthcmVh
KHNjcmVlbiwgbW9uaXRvciwgJndvcmtBcmVhKTsKLSNlbmRpZiAvLyAhR1RLX0NIRUNLX1ZFUlNJ
T04oMywgMjIsIDApCi0KICAgICByZXR1cm4gRmxvYXRSZWN0KHdvcmtBcmVhLngsIHdvcmtBcmVh
LnksIHdvcmtBcmVhLndpZHRoLCB3b3JrQXJlYS5oZWlnaHQpOwogCiB9CkBAIC0yMTksNzUgKzE4
OCwxNCBAQCBib29sIHNjcmVlblN1cHBvcnRzRXh0ZW5kZWRDb2xvcihXaWRnZXQqKQogfQogCiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDAp
Ci1zdGF0aWMgdm9pZCBkZXZpY2VBZGRlZENhbGxiYWNrKEdka0RldmljZU1hbmFnZXIqLCBHZGtE
ZXZpY2UqKTsKLXN0YXRpYyB2b2lkIGRldmljZVJlbW92ZWRDYWxsYmFjayhHZGtEZXZpY2VNYW5h
Z2VyKiwgR2RrRGV2aWNlKik7Ci0KLXN0YXRpYyBIYXNoU2V0PEdka0RldmljZSo+JiB0b3VjaERl
dmljZXMoKQotewotICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxHZGtEZXZp
Y2UqPj4gdG91Y2hEZXZpY2VTZXQ7Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7
Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10gewotICAgICAgICB0b3VjaERldmljZVNl
dC5jb25zdHJ1Y3QoKTsKLQotICAgICAgICBhdXRvKiBkaXNwbGF5ID0gZ2RrX2Rpc3BsYXlfZ2V0
X2RlZmF1bHQoKTsKLSAgICAgICAgaWYgKCFkaXNwbGF5KQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGF1dG8qIGRldmljZU1hbmFnZXIgPSBnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21h
bmFnZXIoZGlzcGxheSk7Ci0gICAgICAgIGlmICghZGV2aWNlTWFuYWdlcikKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBHVW5pcXVlUHRyPEdMaXN0PiBkZXZpY2VzKGdka19kZXZpY2Vf
bWFuYWdlcl9saXN0X2RldmljZXMoZGV2aWNlTWFuYWdlciwgR0RLX0RFVklDRV9UWVBFX1NMQVZF
KSk7Ci0gICAgICAgIGZvciAoR0xpc3QqIGl0ID0gZGV2aWNlcy5nZXQoKTsgaXQ7IGl0ID0gZ19s
aXN0X25leHQoaXQpKSB7Ci0gICAgICAgICAgICBhdXRvKiBkZXZpY2UgPSBHREtfREVWSUNFKGl0
LT5kYXRhKTsKLSAgICAgICAgICAgIGlmIChnZGtfZGV2aWNlX2dldF9zb3VyY2UoZGV2aWNlKSA9
PSBHREtfU09VUkNFX1RPVUNIU0NSRUVOKQotICAgICAgICAgICAgICAgIHRvdWNoRGV2aWNlU2V0
LT5hZGQoZGV2aWNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZGV2
aWNlTWFuYWdlciwgImRldmljZS1hZGRlZCIsIEdfQ0FMTEJBQ0soZGV2aWNlQWRkZWRDYWxsYmFj
ayksIG51bGxwdHIpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRldmljZU1hbmFnZXIsICJk
ZXZpY2UtcmVtb3ZlZCIsIEdfQ0FMTEJBQ0soZGV2aWNlUmVtb3ZlZENhbGxiYWNrKSwgbnVsbHB0
cik7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gdG91Y2hEZXZpY2VTZXQ7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgYm9vbCBpc1RvdWNoRGV2aWNlKEdka0RldmljZSogZGV2aWNlKQotewotICAgIHJldHVy
biBnZGtfZGV2aWNlX2dldF9kZXZpY2VfdHlwZShkZXZpY2UpID09IEdES19ERVZJQ0VfVFlQRV9T
TEFWRSAmJiBnZGtfZGV2aWNlX2dldF9zb3VyY2UoZGV2aWNlKSA9PSBHREtfU09VUkNFX1RPVUNI
U0NSRUVOOwotfQotCi1zdGF0aWMgdm9pZCBkZXZpY2VBZGRlZENhbGxiYWNrKEdka0RldmljZU1h
bmFnZXIqLCBHZGtEZXZpY2UqIGRldmljZSkKLXsKLSAgICBpZiAoIWlzVG91Y2hEZXZpY2UoZGV2
aWNlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCF0b3VjaERldmljZXMoKS5jb250
YWlucyhkZXZpY2UpKTsKLSAgICB0b3VjaERldmljZXMoKS5hZGQoZGV2aWNlKTsKLX0KLQotc3Rh
dGljIHZvaWQgZGV2aWNlUmVtb3ZlZENhbGxiYWNrKEdka0RldmljZU1hbmFnZXIqLCBHZGtEZXZp
Y2UqIGRldmljZSkKLXsKLSAgICBpZiAoIWlzVG91Y2hEZXZpY2UoZGV2aWNlKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKHRvdWNoRGV2aWNlcygpLmNvbnRhaW5zKGRldmljZSkpOwot
ICAgIHRvdWNoRGV2aWNlcygpLnJlbW92ZShkZXZpY2UpOwotfQotI2VuZGlmIC8vICFHVEtfQ0hF
Q0tfVkVSU0lPTigzLCAyMCwgMCkKLQogYm9vbCBzY3JlZW5IYXNUb3VjaERldmljZSgpCiB7Ci0j
aWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCiAgICAgYXV0byogZGlzcGxheSA9IGdka19k
aXNwbGF5X2dldF9kZWZhdWx0KCk7CiAgICAgaWYgKCFkaXNwbGF5KQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIGF1dG8qIHNlYXQgPSBnZGtfZGlzcGxheV9nZXRfZGVmYXVsdF9zZWF0KGRp
c3BsYXkpOwogICAgIHJldHVybiBzZWF0ID8gZ2RrX3NlYXRfZ2V0X2NhcGFiaWxpdGllcyhzZWF0
KSAmIEdES19TRUFUX0NBUEFCSUxJVFlfVE9VQ0ggOiB0cnVlOwotI2Vsc2UKLSAgICByZXR1cm4g
IXRvdWNoRGV2aWNlcygpLmlzRW1wdHkoKTsKLSNlbmRpZgogfQogCiBib29sIHNjcmVlbklzVG91
Y2hQcmltYXJ5SW5wdXREZXZpY2UoKQpAQCAtMjk2LDIwICsyMDQsMTEgQEAgYm9vbCBzY3JlZW5J
c1RvdWNoUHJpbWFyeUlucHV0RGV2aWNlKCkKICAgICBpZiAoIWRpc3BsYXkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCiAgICAgYXV0byog
c2VhdCA9IGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3NlYXQoZGlzcGxheSk7CiAgICAgaWYgKCFz
ZWF0KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGF1dG8qIGRldmljZSA9IGdka19zZWF0
X2dldF9wb2ludGVyKHNlYXQpOwotI2Vsc2UKLSAgICBhdXRvKiBkZXZpY2VNYW5hZ2VyID0gZ2Rr
X2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2VyKGRpc3BsYXkpOwotICAgIGlmICghZGV2aWNlTWFu
YWdlcikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBhdXRvKiBkZXZpY2UgPSBnZGtfZGV2
aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGRldmljZU1hbmFnZXIpOwotI2VuZGlmCi0K
ICAgICByZXR1cm4gZGV2aWNlID8gZ2RrX2RldmljZV9nZXRfc291cmNlKGRldmljZSkgPT0gR0RL
X1NPVVJDRV9UT1VDSFNDUkVFTiA6IHRydWU7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFRPVUNIX0VW
RU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdo
ZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hl
ZWxFdmVudEd0ay5jcHAKaW5kZXggOTNlZmJjNjUxNDcwMTllYzVjZjFjMjExYjdjOTJlMTBjNzhi
OWQ3NS4uMGMwMTg3NDNlZDY5YWI3YzMwODU0YjBiNjlhZGEwYjMxZDBhYjY1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5j
cHAKQEAgLTkzLDE1ICs5Myw5IEBAIFBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2
ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKICAgICBtX3doZWVsVGlja3NZID0gbV9kZWx0YVk7
CiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMs
IDIwLCAwKQogICAgIG1fcGhhc2UgPSBnZGtfZXZlbnRfaXNfc2Nyb2xsX3N0b3BfZXZlbnQocmVp
bnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSkgPwogICAgICAgICBQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZUVuZGVkIDoKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2Vk
OwotI2Vsc2UKLSAgICBtX3BoYXNlID0gZGlyZWN0aW9uID09IEdES19TQ1JPTExfU01PT1RIICYm
ICFtX2RlbHRhWCAmJiAhbV9kZWx0YVkgPwotICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZUVuZGVkIDoKLSAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkOwotI2VuZGlm
CiAjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKIAogICAgIGdkb3VibGUgeCwgeSwg
cm9vdFgsIHJvb3RZOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lR2FkZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJU
aGVtZUdhZGdldC5jcHAKaW5kZXggZDRlNWUwYWQ5ZGY1NzdjZWVjOTljMzE0MTYwYjU1MDBmNDkx
ZmI5NS4uYmRjYzk5ZTg1OWQ0OTc1MDc4ZmYzYzVlMmViYzM4NWQ5Yjk1Yjk1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR2FkZ2V0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHYWRnZXQuY3BwCkBAIC0y
Niw4ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWVH
YWRnZXQuaCIKIAotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQotCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgogCkBAIC00MDAsNSArMzk4LDMg
QEAgSW50U2l6ZSBSZW5kZXJUaGVtZUJ1dHRvbkdhZGdldDo6bWluaW11bVNpemUoKSBjb25zdAog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lP
TigzLCAyMCwgMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5k
ZXJUaGVtZUdhZGdldC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1l
R2FkZ2V0LmgKaW5kZXggMzJmMjYwMmMxZGRmOTM4YTI1MjAyNjNiMDEyN2IyNDg1N2FhN2Q4MC4u
Y2MxOGY4OWQ2ZWIyMTRlYTdlMjAyNmQwZjVkNjc2MDkwOGZhNDVjNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR2FkZ2V0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR2FkZ2V0LmgKQEAgLTI1LDEyICsyNSw5
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi0jaWYgR1RLX0NI
RUNLX1ZFUlNJT04oMywgMjAsIDApCi0KICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIklu
dFNpemUuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+
CkBAIC0xNzgsNSArMTc1LDMgQEAgcHVibGljOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVXaWRnZXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lV2lkZ2V0LmNwcAppbmRleCAwZDE3MjZk
NTUxMjJiNjdmZTlhNTdhMjhjMTU1NzRkYmMyY2MxMzRmLi4wNWQxMmRkOWVhZmJlZjAyYTQ1OWNh
NTI3NjQxN2E1YjliMGU4OTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUmVuZGVyVGhlbWVXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9SZW5kZXJUaGVtZVdpZGdldC5jcHAKQEAgLTI2LDggKzI2LDYgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZVdpZGdldC5oIgogCi0jaWYgR1RLX0NIRUNLX1ZF
UlNJT04oMywgMjAsIDApCi0KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgogCkBAIC0zMDEsNSArMjk5LDMgQEAgUmVuZGVyVGhlbWVXaW5k
b3c6OlJlbmRlclRoZW1lV2luZG93KCkKIH0KIAogfSAvLyBuYW1lcHNhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVXaWRnZXQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZVdpZGdldC5oCmluZGV4IGE2Njg2ZGIzMDJhMGI4MThl
OTFhMDhkNzVlMGU0MTUyYjg3NzBkNjMuLjQzM2UwMDQ4ZjFlZmZlY2FiZDc1NmFhNGZiZWZhN2Nh
ZTU5ZWIzNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJU
aGVtZVdpZGdldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZVdpZGdldC5oCkBAIC0yNyw4ICsyNyw2IEBACiAKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAKLSNp
ZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKLQogI2luY2x1ZGUgIlJlbmRlclRoZW1lR2Fk
Z2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI0Nyw1ICsyNDUsMyBAQCBwcml2YXRl
OgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZF
UlNJT04oMywgMjAsIDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
U2Nyb2xsYmFyVGhlbWVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9s
bGJhclRoZW1lR3RrLmNwcAppbmRleCAzZTZhZjQ5YzFiNjc4OTAyNzVkZjUxZWI1OWQwNzNmYTJm
MzM1NDFhLi40MDhiMWI5ZjU3OTljOTM0MGEwMDA4ZWQ3MDE1NzNiMTRhMWEzNTg5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKQEAg
LTUzLDkgKzUzLDggQEAgc3RhdGljIHZvaWQgdGhlbWVDaGFuZ2VkQ2FsbGJhY2soKQogCiBTY3Jv
bGxiYXJUaGVtZUd0azo6U2Nyb2xsYmFyVGhlbWVHdGsoKQogewotI2lmIEdUS19DSEVDS19WRVJT
SU9OKDMsIDIwLCAwKQogICAgIG1fdXNlc092ZXJsYXlTY3JvbGxiYXJzID0gZ19zdHJjbXAwKGdf
Z2V0ZW52KCJHVEtfT1ZFUkxBWV9TQ1JPTExJTkciKSwgIjAiKTsKLSNlbmRpZgorCiAgICAgc3Rh
dGljIGJvb2wgdGhlbWVNb25pdG9ySW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICBpZiAoIXRoZW1l
TW9uaXRvckluaXRpYWxpemVkKSB7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZ3RrX3NldHRp
bmdzX2dldF9kZWZhdWx0KCksICJub3RpZnk6Omd0ay10aGVtZS1uYW1lIiwgR19DQUxMQkFDSyh0
aGVtZUNoYW5nZWRDYWxsYmFjayksIG51bGxwdHIpOwpAQCAtNjQsNDIgKzYzLDEyIEBAIFNjcm9s
bGJhclRoZW1lR3RrOjpTY3JvbGxiYXJUaGVtZUd0aygpCiAgICAgfQogfQogCi0jaWYgIUdUS19D
SEVDS19WRVJTSU9OKDMsIDIwLCAwKQotc3RhdGljIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBj
cmVhdGVTdHlsZUNvbnRleHQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBudWxscHRyKQotewotICAg
IEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBhZG9wdEdSZWYoZ3RrX3N0
eWxlX2NvbnRleHRfbmV3KCkpOwotICAgIEdSZWZQdHI8R3RrV2lkZ2V0UGF0aD4gcGF0aCA9IGFk
b3B0R1JlZihndGtfd2lkZ2V0X3BhdGhfbmV3KCkpOwotICAgIGd0a193aWRnZXRfcGF0aF9hcHBl
bmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9TQ1JPTExCQVIpOwotICAgIGd0a193aWRnZXRf
cGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwgR1RLX1NUWUxFX0NMQVNTX1NDUk9M
TEJBUik7Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIC0x
LCBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXIgPyAiaG9yaXpvbnRhbCIgOiAidmVydGljYWwiKTsKLSAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfcGF0aChzdHlsZUNvbnRleHQuZ2V0KCksIHBhdGguZ2V0KCkpOwotICAgIHJldHVybiBz
dHlsZUNvbnRleHQ7Ci19Ci0KLXN0YXRpYyBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY3JlYXRl
Q2hpbGRTdHlsZUNvbnRleHQoR3RrU3R5bGVDb250ZXh0KiBwYXJlbnQsIGNvbnN0IGNoYXIqIGNs
YXNzTmFtZSkKLXsKLSAgICBBU1NFUlQocGFyZW50KTsKLSAgICBHUmVmUHRyPEd0a1dpZGdldFBh
dGg+IHBhdGggPSBhZG9wdEdSZWYoZ3RrX3dpZGdldF9wYXRoX2NvcHkoZ3RrX3N0eWxlX2NvbnRl
eHRfZ2V0X3BhdGgocGFyZW50KSkpOwotICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShw
YXRoLmdldCgpLCBHVEtfVFlQRV9TQ1JPTExCQVIpOwotICAgIGd0a193aWRnZXRfcGF0aF9pdGVy
X2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwgR1RLX1NUWUxFX0NMQVNTX1NDUk9MTEJBUik7Ci0g
ICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCBjbGFzc05h
bWUpOwotCi0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dCA9IGFkb3B0
R1JlZihndGtfc3R5bGVfY29udGV4dF9uZXcoKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0
X3BhdGgoc3R5bGVDb250ZXh0LmdldCgpLCBwYXRoLmdldCgpKTsKLSAgICBndGtfc3R5bGVfY29u
dGV4dF9zZXRfcGFyZW50KHN0eWxlQ29udGV4dC5nZXQoKSwgcGFyZW50KTsKLSAgICByZXR1cm4g
c3R5bGVDb250ZXh0OwotfQotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQot
CiB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp0aGVtZUNoYW5nZWQoKQogewotI2lmIEdUS19DSEVD
S19WRVJTSU9OKDMsIDIwLCAwKQogICAgIFJlbmRlclRoZW1lV2lkZ2V0OjpjbGVhckNhY2hlKCk7
Ci0jZW5kaWYKICAgICB1cGRhdGVUaGVtZVByb3BlcnRpZXMoKTsKIH0KIAotI2lmIEdUS19DSEVD
S19WRVJTSU9OKDMsIDIwLCAwKQogdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6dXBkYXRlVGhlbWVQ
cm9wZXJ0aWVzKCkKIHsKICAgICBhdXRvJiBzY3JvbGxiYXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJU
aGVtZVNjcm9sbGJhciY+KFJlbmRlclRoZW1lV2lkZ2V0OjpnZXRPckNyZWF0ZShSZW5kZXJUaGVt
ZVdpZGdldDo6VHlwZTo6VmVydGljYWxTY3JvbGxiYXJSaWdodCkpOwpAQCAtMTA4LDI5ICs3Nywx
MiBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1cGRhdGVUaGVtZVByb3BlcnRpZXMoKQogICAg
IG1faGFzQmFja0J1dHRvbkVuZFBhcnQgPSBzY3JvbGxiYXIuc3RlcHBlcihSZW5kZXJUaGVtZVNj
cm9sbGJhckdhZGdldDo6U3RlcHBlcnM6OlNlY29uZGFyeUJhY2t3YXJkKTsKICAgICBtX2hhc0Zv
cndhcmRCdXR0b25TdGFydFBhcnQgPSBzY3JvbGxiYXIuc3RlcHBlcihSZW5kZXJUaGVtZVNjcm9s
bGJhckdhZGdldDo6U3RlcHBlcnM6OlNlY29uZGFyeUZvcndhcmQpOwogfQotI2Vsc2UKLXZvaWQg
U2Nyb2xsYmFyVGhlbWVHdGs6OnVwZGF0ZVRoZW1lUHJvcGVydGllcygpCi17Ci0gICAgZ2Jvb2xl
YW4gaGFzQmFja0J1dHRvblN0YXJ0UGFydCwgaGFzRm9yd2FyZEJ1dHRvbkVuZFBhcnQsIGhhc0Jh
Y2tCdXR0b25FbmRQYXJ0LCBoYXNGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0OwotICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9zdHlsZShjcmVhdGVTdHlsZUNvbnRleHQoKS5nZXQoKSwKLSAgICAgICAg
Imhhcy1iYWNrd2FyZC1zdGVwcGVyIiwgJmhhc0JhY2tCdXR0b25TdGFydFBhcnQsCi0gICAgICAg
ICJoYXMtZm9yd2FyZC1zdGVwcGVyIiwgJmhhc0ZvcndhcmRCdXR0b25FbmRQYXJ0LAotICAgICAg
ICAiaGFzLXNlY29uZGFyeS1iYWNrd2FyZC1zdGVwcGVyIiwgJmhhc0JhY2tCdXR0b25FbmRQYXJ0
LAotICAgICAgICAiaGFzLXNlY29uZGFyeS1mb3J3YXJkLXN0ZXBwZXIiLCAmaGFzRm9yd2FyZEJ1
dHRvblN0YXJ0UGFydCwKLSAgICAgICAgbnVsbHB0cik7Ci0gICAgbV9oYXNCYWNrQnV0dG9uU3Rh
cnRQYXJ0ID0gaGFzQmFja0J1dHRvblN0YXJ0UGFydDsKLSAgICBtX2hhc0ZvcndhcmRCdXR0b25F
bmRQYXJ0ID0gaGFzRm9yd2FyZEJ1dHRvbkVuZFBhcnQ7Ci0gICAgbV9oYXNCYWNrQnV0dG9uRW5k
UGFydCA9IGhhc0JhY2tCdXR0b25FbmRQYXJ0OwotICAgIG1faGFzRm9yd2FyZEJ1dHRvblN0YXJ0
UGFydCA9IGhhc0ZvcndhcmRCdXR0b25TdGFydFBhcnQ7Ci19Ci0jZW5kaWYgLy8gR1RLX0NIRUNL
X1ZFUlNJT04oMywgMjAsIDApCiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6Omhhc0J1dHRvbnMo
U2Nyb2xsYmFyJiBzY3JvbGxiYXIpCiB7CiAgICAgcmV0dXJuIHNjcm9sbGJhci5lbmFibGVkKCkg
JiYgKG1faGFzQmFja0J1dHRvblN0YXJ0UGFydCB8fCBtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0
IHx8IG1faGFzQmFja0J1dHRvbkVuZFBhcnQgfHwgbV9oYXNGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0
KTsKIH0KIAotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQogc3RhdGljIEd0a1N0YXRl
RmxhZ3Mgc2Nyb2xsYmFyUGFydFN0YXRlRmxhZ3MoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIFNjcm9s
bGJhclBhcnQgcGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKQogewogICAgIHVuc2lnbmVkIHN0
YXRlRmxhZ3MgPSAwOwpAQCAtMjQyLDQ5ICsxOTQsNiBAQCBJbnRSZWN0IFNjcm9sbGJhclRoZW1l
R3RrOjp0cmFja1JlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGJvb2wgLypwYWludGluZyovKQog
CiAgICAgcmV0dXJuIHNjcm9sbGJhci53aWR0aCgpIDwgcmVjdC53aWR0aCgpID8gSW50UmVjdCgp
IDogcmVjdDsKIH0KLSNlbHNlCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0cmFja1JlY3Qo
U2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGJvb2wgLypwYWludGluZyovKQotewotICAgIEdSZWZQdHI8
R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoJnNjcm9s
bGJhcik7Ci0gICAgLy8gVGhlIHBhZGRpbmcgYWxvbmcgdGhlIHRodW1iIG1vdmVtZW50IGF4aXMg
aW5jbHVkZXMgdGhlIHRyb3VnaCBib3JkZXIKLSAgICAvLyBwbHVzIHRoZSBzaXplIG9mIHN0ZXBw
ZXIgc3BhY2luZyAodGhlIHNwYWNlIGJldHdlZW4gdGhlIHN0ZXBwZXIgYW5kCi0gICAgLy8gdGhl
IHBsYWNlIHdoZXJlIHRoZSB0aHVtYiBzdG9wcykuIFRoZXJlIGlzIG9mdGVuIG5vIHN0ZXBwZXIg
c3BhY2luZy4KLSAgICBpbnQgc3RlcHBlclNwYWNpbmcsIHN0ZXBwZXJTaXplLCB0cm91Z2hCb3Jk
ZXJXaWR0aCwgdGh1bWJGYXQ7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKHN0eWxl
Q29udGV4dC5nZXQoKSwgInN0ZXBwZXItc3BhY2luZyIsICZzdGVwcGVyU3BhY2luZywgInN0ZXBw
ZXItc2l6ZSIsICZzdGVwcGVyU2l6ZSwgInRyb3VnaC1ib3JkZXIiLAotICAgICAgICAmdHJvdWdo
Qm9yZGVyV2lkdGgsICJzbGlkZXItd2lkdGgiLCAmdGh1bWJGYXQsIG51bGxwdHIpOwotCi0gICAg
Ly8gVGhlIGZhdG5lc3Mgb2YgdGhlIHNjcm9sbGJhciBvbiB0aGUgbm9uLW1vdmVtZW50IGF4aXMu
Ci0gICAgaW50IHRoaWNrbmVzcyA9IHRodW1iRmF0ICsgMiAqIHRyb3VnaEJvcmRlcldpZHRoOwot
Ci0gICAgaW50IHN0YXJ0QnV0dG9uc09mZnNldCA9IDA7Ci0gICAgaW50IGJ1dHRvbnNXaWR0aCA9
IDA7Ci0gICAgaWYgKG1faGFzRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkgewotICAgICAgICBzdGFy
dEJ1dHRvbnNPZmZzZXQgKz0gc3RlcHBlclNpemU7Ci0gICAgICAgIGJ1dHRvbnNXaWR0aCArPSBz
dGVwcGVyU2l6ZTsKLSAgICB9Ci0gICAgaWYgKG1faGFzQmFja0J1dHRvblN0YXJ0UGFydCkgewot
ICAgICAgICBzdGFydEJ1dHRvbnNPZmZzZXQgKz0gc3RlcHBlclNpemU7Ci0gICAgICAgIGJ1dHRv
bnNXaWR0aCArPSBzdGVwcGVyU2l6ZTsKLSAgICB9Ci0gICAgaWYgKG1faGFzQmFja0J1dHRvbkVu
ZFBhcnQpCi0gICAgICAgIGJ1dHRvbnNXaWR0aCArPSBzdGVwcGVyU2l6ZTsKLSAgICBpZiAobV9o
YXNGb3J3YXJkQnV0dG9uRW5kUGFydCkKLSAgICAgICAgYnV0dG9uc1dpZHRoICs9IHN0ZXBwZXJT
aXplOwotCi0gICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXIpIHsKLSAgICAgICAgLy8gT25jZSB0aGUgc2Nyb2xsYmFyIGJlY29tZXMgc21hbGxlciB0
aGFuIHRoZSBuYXR1cmFsIHNpemUgb2YgdGhlIHR3byBidXR0b25zIGFuZCB0aGUgdGh1bWIsIHRo
ZSB0cmFjayBkaXNhcHBlYXJzLgotICAgICAgICBpZiAoc2Nyb2xsYmFyLndpZHRoKCkgPCBidXR0
b25zV2lkdGggKyBtaW5pbXVtVGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSkKLSAgICAgICAgICAgIHJl
dHVybiBJbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci54KCkgKyB0
cm91Z2hCb3JkZXJXaWR0aCArIHN0ZXBwZXJTcGFjaW5nICsgc3RhcnRCdXR0b25zT2Zmc2V0LCBz
Y3JvbGxiYXIueSgpLAotICAgICAgICAgICAgc2Nyb2xsYmFyLndpZHRoKCkgLSAoMiAqIHRyb3Vn
aEJvcmRlcldpZHRoKSAtICgyICogc3RlcHBlclNwYWNpbmcpIC0gYnV0dG9uc1dpZHRoLCB0aGlj
a25lc3MpOwotICAgIH0KLQotICAgIGlmIChzY3JvbGxiYXIuaGVpZ2h0KCkgPCBidXR0b25zV2lk
dGggKyBtaW5pbXVtVGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSkKLSAgICAgICAgcmV0dXJuIEludFJl
Y3QoKTsKLSAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXIueCgpLCBzY3JvbGxiYXIueSgpICsg
dHJvdWdoQm9yZGVyV2lkdGggKyBzdGVwcGVyU3BhY2luZyArIHN0YXJ0QnV0dG9uc09mZnNldCwK
LSAgICAgICAgdGhpY2tuZXNzLCBzY3JvbGxiYXIuaGVpZ2h0KCkgLSAoMiAqIHRyb3VnaEJvcmRl
cldpZHRoKSAtICgyICogc3RlcHBlclNwYWNpbmcpIC0gYnV0dG9uc1dpZHRoKTsKLX0KLSNlbmRp
ZgogCiBib29sIFNjcm9sbGJhclRoZW1lR3RrOjpoYXNUaHVtYihTY3JvbGxiYXImIHNjcm9sbGJh
cikKIHsKQEAgLTI5Myw3ICsyMDIsNiBAQCBib29sIFNjcm9sbGJhclRoZW1lR3RrOjpoYXNUaHVt
YihTY3JvbGxiYXImIHNjcm9sbGJhcikKICAgICByZXR1cm4gdGh1bWJMZW5ndGgoc2Nyb2xsYmFy
KSA+IDA7CiB9CiAKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKIEludFJlY3QgU2Ny
b2xsYmFyVGhlbWVHdGs6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBTY3Jv
bGxiYXJQYXJ0IHBhcnQsIGJvb2wgLypwYWludGluZyovKQogewogICAgIEFTU0VSVChwYXJ0ID09
IEJhY2tCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCk7CkBAIC0z
OTMsNTkgKzMwMSw3IEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmZvcndhcmRCdXR0b25S
ZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0CiAKICAgICByZXR1cm4gSW50
UmVjdChyZWN0LmxvY2F0aW9uKCksIHByZWZlcnJlZFNpemUpOwogfQotI2Vsc2UKLUludFJlY3Qg
U2Nyb2xsYmFyVGhlbWVHdGs6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBT
Y3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wgLypwYWludGluZyovKQotewotICAgIGlmICgocGFydCA9
PSBCYWNrQnV0dG9uRW5kUGFydCAmJiAhbV9oYXNCYWNrQnV0dG9uRW5kUGFydCkgfHwgKHBhcnQg
PT0gQmFja0J1dHRvblN0YXJ0UGFydCAmJiAhbV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0KSkKLSAg
ICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBz
dHlsZUNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoJnNjcm9sbGJhcik7Ci0gICAgaW50IHRy
b3VnaEJvcmRlcldpZHRoLCBzdGVwcGVyU2l6ZSwgdGh1bWJGYXQ7Ci0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0X3N0eWxlKHN0eWxlQ29udGV4dC5nZXQoKSwgInRyb3VnaC1ib3JkZXIiLCAmdHJv
dWdoQm9yZGVyV2lkdGgsICJzdGVwcGVyLXNpemUiLCAmc3RlcHBlclNpemUsICJzbGlkZXItd2lk
dGgiLCAmdGh1bWJGYXQsIG51bGxwdHIpOwotICAgIGludCB4ID0gc2Nyb2xsYmFyLngoKSArIHRy
b3VnaEJvcmRlcldpZHRoOwotICAgIGludCB5ID0gc2Nyb2xsYmFyLnkoKSArIHRyb3VnaEJvcmRl
cldpZHRoOwotICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQpIHsKLSAgICAgICAg
aWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAg
ICAgICAgICByZXR1cm4gSW50UmVjdCh4LCB5LCBzdGVwcGVyU2l6ZSwgdGh1bWJGYXQpOwotICAg
ICAgICByZXR1cm4gSW50UmVjdCh4LCB5LCB0aHVtYkZhdCwgc3RlcHBlclNpemUpOwotICAgIH0K
LQotICAgIC8vIEJhY2tCdXR0b25FbmRQYXJ0IChhbHRlcm5hdGUgYnV0dG9uKQotICAgIGlmIChz
Y3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICBy
ZXR1cm4gSW50UmVjdChzY3JvbGxiYXIueCgpICsgc2Nyb2xsYmFyLndpZHRoKCkgLSB0cm91Z2hC
b3JkZXJXaWR0aCAtICgyICogc3RlcHBlclNpemUpLCB5LCBzdGVwcGVyU2l6ZSwgdGh1bWJGYXQp
OwotCi0gICAgLy8gVmVydGljYWxTY3JvbGxiYXIgYWx0ZXJuYXRlIGJ1dHRvbgotICAgIHJldHVy
biBJbnRSZWN0KHgsIHNjcm9sbGJhci55KCkgKyBzY3JvbGxiYXIuaGVpZ2h0KCkgLSB0cm91Z2hC
b3JkZXJXaWR0aCAtICgyICogc3RlcHBlclNpemUpLCB0aHVtYkZhdCwgc3RlcHBlclNpemUpOwot
fQogCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxi
YXImIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBib29sIC8qcGFpbnRpbmcqLykKLXsK
LSAgICBpZiAoKHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAmJiAhbV9oYXNGb3J3YXJk
QnV0dG9uU3RhcnRQYXJ0KSB8fCAocGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCAmJiAhbV9o
YXNGb3J3YXJkQnV0dG9uRW5kUGFydCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAg
ICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5bGVDb250ZXh0ID0gY3JlYXRlU3R5bGVDb250
ZXh0KCZzY3JvbGxiYXIpOwotICAgIGludCB0cm91Z2hCb3JkZXJXaWR0aCwgc3RlcHBlclNpemUs
IHRodW1iRmF0OwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShzdHlsZUNvbnRleHQu
Z2V0KCksICJ0cm91Z2gtYm9yZGVyIiwgJnRyb3VnaEJvcmRlcldpZHRoLCAic3RlcHBlci1zaXpl
IiwgJnN0ZXBwZXJTaXplLCAic2xpZGVyLXdpZHRoIiwgJnRodW1iRmF0LCBudWxscHRyKTsKLSAg
ICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewot
ICAgICAgICBpbnQgeSA9IHNjcm9sbGJhci55KCkgKyB0cm91Z2hCb3JkZXJXaWR0aDsKLSAgICAg
ICAgaWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQpCi0gICAgICAgICAgICByZXR1cm4g
SW50UmVjdChzY3JvbGxiYXIueCgpICsgc2Nyb2xsYmFyLndpZHRoKCkgLSBzdGVwcGVyU2l6ZSAt
IHRyb3VnaEJvcmRlcldpZHRoLCB5LCBzdGVwcGVyU2l6ZSwgdGh1bWJGYXQpOwotCi0gICAgICAg
IC8vIEZvcndhcmRCdXR0b25TdGFydFBhcnQgKGFsdGVybmF0ZSBidXR0b24pCi0gICAgICAgIHJl
dHVybiBJbnRSZWN0KHNjcm9sbGJhci54KCkgKyB0cm91Z2hCb3JkZXJXaWR0aCArIHN0ZXBwZXJT
aXplLCB5LCBzdGVwcGVyU2l6ZSwgdGh1bWJGYXQpOwotICAgIH0KLQotICAgIC8vIFZlcnRpY2Fs
U2Nyb2xsYmFyCi0gICAgaW50IHggPSBzY3JvbGxiYXIueCgpICsgdHJvdWdoQm9yZGVyV2lkdGg7
Ci0gICAgaWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQpCi0gICAgICAgIHJldHVybiBJ
bnRSZWN0KHgsIHNjcm9sbGJhci55KCkgKyBzY3JvbGxiYXIuaGVpZ2h0KCkgLSBzdGVwcGVyU2l6
ZSAtIHRyb3VnaEJvcmRlcldpZHRoLCB0aHVtYkZhdCwgc3RlcHBlclNpemUpOwotCi0gICAgLy8g
Rm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAoYWx0ZXJuYXRlIGJ1dHRvbikKLSAgICByZXR1cm4gSW50
UmVjdCh4LCBzY3JvbGxiYXIueSgpICsgdHJvdWdoQm9yZGVyV2lkdGggKyBzdGVwcGVyU2l6ZSwg
dGh1bWJGYXQsIHN0ZXBwZXJTaXplKTsKLX0KLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigz
LCAyMCwgMCkKLQotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQogYm9vbCBTY3JvbGxi
YXJUaGVtZUd0azo6cGFpbnQoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQogewogICAgIGlmIChn
cmFwaGljc0NvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtNjA4LDE2NiArNDY0LDYgQEAg
Ym9vbCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnQoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIEdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb24KIAogICAgIHJldHVybiB0cnVlOwogfQotI2Vsc2UKLXN0
YXRpYyB2b2lkIHBhaW50U3RlcHBlcihHdGtTdHlsZUNvbnRleHQqIHBhcmVudENvbnRleHQsIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJl
Y3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydCkKLXsKLSAgICBTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbiA9IHNjcm9sbGJhci5vcmllbnRhdGlvbigpOwotICAgIEdSZWZQdHI8R3Rr
U3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQgPSBjcmVhdGVDaGlsZFN0eWxlQ29udGV4dChwYXJl
bnRDb250ZXh0LCAiYnV0dG9uIik7Ci0KLSAgICB1bnNpZ25lZCBmbGFncyA9IDA7Ci0gICAgaWYg
KChCYWNrQnV0dG9uU3RhcnRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xsYmFyLmN1cnJlbnRQb3MoKSkK
LSAgICAgICAgfHwgKEJhY2tCdXR0b25FbmRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xsYmFyLmN1cnJl
bnRQb3MoKSkKLSAgICAgICAgfHwgKEZvcndhcmRCdXR0b25FbmRQYXJ0ID09IHBhcnQgJiYgc2Ny
b2xsYmFyLmN1cnJlbnRQb3MoKSAhPSBzY3JvbGxiYXIubWF4aW11bSgpKQotICAgICAgICB8fCAo
Rm9yd2FyZEJ1dHRvblN0YXJ0UGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci5jdXJyZW50UG9zKCkg
IT0gc2Nyb2xsYmFyLm1heGltdW0oKSkpIHsKLSAgICAgICAgaWYgKHBhcnQgPT0gc2Nyb2xsYmFy
LnByZXNzZWRQYXJ0KCkpCi0gICAgICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJ
VkU7Ci0gICAgICAgIGlmIChwYXJ0ID09IHNjcm9sbGJhci5ob3ZlcmVkUGFydCgpKQotICAgICAg
ICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOwotICAgIGd0a19zdHlsZV9j
b250ZXh0X3NldF9zdGF0ZShzdHlsZUNvbnRleHQuZ2V0KCksIHN0YXRpY19jYXN0PEd0a1N0YXRl
RmxhZ3M+KGZsYWdzKSk7Ci0KLSAgICBndGtfcmVuZGVyX2JhY2tncm91bmQoc3R5bGVDb250ZXh0
LmdldCgpLCBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgZ3RrX3JlbmRlcl9mcmFtZShz
dHlsZUNvbnRleHQuZ2V0KCksIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3Qu
eCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAgIGdmbG9h
dCBhcnJvd1NjYWxpbmc7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKHN0eWxlQ29u
dGV4dC5nZXQoKSwgImFycm93LXNjYWxpbmciLCAmYXJyb3dTY2FsaW5nLCBudWxscHRyKTsKLQot
ICAgIGRvdWJsZSBhcnJvd1NpemUgPSBzdGQ6Om1pbihyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpICogYXJyb3dTY2FsaW5nOwotICAgIEZsb2F0UG9pbnQgYXJyb3dQb2ludChyZWN0LngoKSAr
IChyZWN0LndpZHRoKCkgLSBhcnJvd1NpemUpIC8gMiwgcmVjdC55KCkgKyAocmVjdC5oZWlnaHQo
KSAtIGFycm93U2l6ZSkgLyAyKTsKLQotICAgIGlmIChmbGFncyAmIEdUS19TVEFURV9GTEFHX0FD
VElWRSkgewotICAgICAgICBnaW50IGFycm93RGlzcGxhY2VtZW50WCwgYXJyb3dEaXNwbGFjZW1l
bnRZOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoc3R5bGVDb250ZXh0Lmdl
dCgpLCAiYXJyb3ctZGlzcGxhY2VtZW50LXgiLCAmYXJyb3dEaXNwbGFjZW1lbnRYLCAiYXJyb3ct
ZGlzcGxhY2VtZW50LXkiLCAmYXJyb3dEaXNwbGFjZW1lbnRZLCBudWxscHRyKTsKLSAgICAgICAg
YXJyb3dQb2ludC5tb3ZlKGFycm93RGlzcGxhY2VtZW50WCwgYXJyb3dEaXNwbGFjZW1lbnRZKTsK
LSAgICB9Ci0KLSAgICBnZG91YmxlIGFuZ2xlOwotICAgIGlmIChvcmllbnRhdGlvbiA9PSBWZXJ0
aWNhbFNjcm9sbGJhcikKLSAgICAgICAgYW5nbGUgPSAocGFydCA9PSBGb3J3YXJkQnV0dG9uRW5k
UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQpID8gR19QSSA6IDA7Ci0gICAg
ZWxzZQotICAgICAgICBhbmdsZSA9IChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0IHx8IHBh
cnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkgPyBHX1BJIC8gMiA6IDMgKiAoR19QSSAvIDIp
OwotCi0gICAgZ3RrX3JlbmRlcl9hcnJvdyhzdHlsZUNvbnRleHQuZ2V0KCksIGNvbnRleHQucGxh
dGZvcm1Db250ZXh0KCktPmNyKCksIGFuZ2xlLCBhcnJvd1BvaW50LngoKSwgYXJyb3dQb2ludC55
KCksIGFycm93U2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFkanVzdFJlY3RBY2NvcmRpbmdUb01h
cmdpbihHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIEludFJlY3QmIHJlY3QpCi17Ci0gICAgR3Rr
Qm9yZGVyIG1hcmdpbjsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfbWFyZ2luKGNvbnRleHQs
IGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShjb250ZXh0KSwgJm1hcmdpbik7Ci0gICAgcmVj
dC5tb3ZlKG1hcmdpbi5sZWZ0LCBtYXJnaW4udG9wKTsKLSAgICByZWN0LmNvbnRyYWN0KG1hcmdp
bi5sZWZ0ICsgbWFyZ2luLnJpZ2h0LCBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSk7Ci19Ci0K
LWJvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkK
LXsKLSAgICBpZiAoZ3JhcGhpY3NDb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4
dCA9IGNyZWF0ZVN0eWxlQ29udGV4dCgmc2Nyb2xsYmFyKTsKLQotICAgIC8vIENyZWF0ZSB0aGUg
U2Nyb2xsYmFyQ29udHJvbFBhcnRNYXNrIGJhc2VkIG9uIHRoZSBkYW1hZ2VSZWN0Ci0gICAgU2Ny
b2xsYmFyQ29udHJvbFBhcnRNYXNrIHNjcm9sbE1hc2sgPSBOb1BhcnQ7Ci0KLSAgICBJbnRSZWN0
IGJhY2tCdXR0b25TdGFydFBhaW50UmVjdDsKLSAgICBJbnRSZWN0IGJhY2tCdXR0b25FbmRQYWlu
dFJlY3Q7Ci0gICAgSW50UmVjdCBmb3J3YXJkQnV0dG9uU3RhcnRQYWludFJlY3Q7Ci0gICAgSW50
UmVjdCBmb3J3YXJkQnV0dG9uRW5kUGFpbnRSZWN0OwotICAgIGlmIChoYXNCdXR0b25zKHNjcm9s
bGJhcikpIHsKLSAgICAgICAgYmFja0J1dHRvblN0YXJ0UGFpbnRSZWN0ID0gYmFja0J1dHRvblJl
Y3Qoc2Nyb2xsYmFyLCBCYWNrQnV0dG9uU3RhcnRQYXJ0LCB0cnVlKTsKLSAgICAgICAgaWYgKGRh
bWFnZVJlY3QuaW50ZXJzZWN0cyhiYWNrQnV0dG9uU3RhcnRQYWludFJlY3QpKQotICAgICAgICAg
ICAgc2Nyb2xsTWFzayB8PSBCYWNrQnV0dG9uU3RhcnRQYXJ0OwotICAgICAgICBiYWNrQnV0dG9u
RW5kUGFpbnRSZWN0ID0gYmFja0J1dHRvblJlY3Qoc2Nyb2xsYmFyLCBCYWNrQnV0dG9uRW5kUGFy
dCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChkYW1hZ2VSZWN0LmludGVyc2VjdHMoYmFja0J1dHRvbkVu
ZFBhaW50UmVjdCkpCi0gICAgICAgICAgICBzY3JvbGxNYXNrIHw9IEJhY2tCdXR0b25FbmRQYXJ0
OwotICAgICAgICBmb3J3YXJkQnV0dG9uU3RhcnRQYWludFJlY3QgPSBmb3J3YXJkQnV0dG9uUmVj
dChzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25TdGFydFBhcnQsIHRydWUpOwotICAgICAgICBpZiAo
ZGFtYWdlUmVjdC5pbnRlcnNlY3RzKGZvcndhcmRCdXR0b25TdGFydFBhaW50UmVjdCkpCi0gICAg
ICAgICAgICBzY3JvbGxNYXNrIHw9IEZvcndhcmRCdXR0b25TdGFydFBhcnQ7Ci0gICAgICAgIGZv
cndhcmRCdXR0b25FbmRQYWludFJlY3QgPSBmb3J3YXJkQnV0dG9uUmVjdChzY3JvbGxiYXIsIEZv
cndhcmRCdXR0b25FbmRQYXJ0LCB0cnVlKTsKLSAgICAgICAgaWYgKGRhbWFnZVJlY3QuaW50ZXJz
ZWN0cyhmb3J3YXJkQnV0dG9uRW5kUGFpbnRSZWN0KSkKLSAgICAgICAgICAgIHNjcm9sbE1hc2sg
fD0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQ7Ci0gICAgfQotCi0gICAgSW50UmVjdCB0cmFja1BhaW50
UmVjdCA9IHRyYWNrUmVjdChzY3JvbGxiYXIsIHRydWUpOwotICAgIGlmIChkYW1hZ2VSZWN0Lmlu
dGVyc2VjdHModHJhY2tQYWludFJlY3QpKQotICAgICAgICBzY3JvbGxNYXNrIHw9IFRyYWNrQkdQ
YXJ0OwotCi0gICAgZ2Jvb2xlYW4gdHJvdWdoVW5kZXJTdGVwcGVyczsKLSAgICBndGtfc3R5bGVf
Y29udGV4dF9nZXRfc3R5bGUoc3R5bGVDb250ZXh0LmdldCgpLCAidHJvdWdoLXVuZGVyLXN0ZXBw
ZXJzIiwgJnRyb3VnaFVuZGVyU3RlcHBlcnMsIG51bGxwdHIpOwotICAgIGlmICh0cm91Z2hVbmRl
clN0ZXBwZXJzICYmIChzY3JvbGxNYXNrICYgQmFja0J1dHRvblN0YXJ0UGFydAotICAgICAgICAg
ICAgfHwgc2Nyb2xsTWFzayAmIEJhY2tCdXR0b25FbmRQYXJ0Ci0gICAgICAgICAgICB8fCBzY3Jv
bGxNYXNrICYgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydAotICAgICAgICAgICAgfHwgc2Nyb2xsTWFz
ayAmIEZvcndhcmRCdXR0b25FbmRQYXJ0KSkKLSAgICAgICAgc2Nyb2xsTWFzayB8PSBUcmFja0JH
UGFydDsKLQotICAgIEludFJlY3QgY3VycmVudFRodW1iUmVjdDsKLSAgICBpZiAoaGFzVGh1bWIo
c2Nyb2xsYmFyKSkgewotICAgICAgICBJbnRSZWN0IHRyYWNrID0gdHJhY2tSZWN0KHNjcm9sbGJh
ciwgZmFsc2UpOwotICAgICAgICBJbnRSZWN0IHRyYWNrUmVjdCA9IGNvbnN0cmFpblRyYWNrUmVj
dFRvVHJhY2tQaWVjZXMoc2Nyb2xsYmFyLCB0cmFjayk7Ci0gICAgICAgIGludCB0aHVtYkZhdDsK
LSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKHN0eWxlQ29udGV4dC5nZXQoKSwg
InNsaWRlci13aWR0aCIsICZ0aHVtYkZhdCwgbnVsbHB0cik7Ci0gICAgICAgIGlmIChzY3JvbGxi
YXIub3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICAgICAgY3Vy
cmVudFRodW1iUmVjdCA9IEludFJlY3QodHJhY2tSZWN0LngoKSArIHRodW1iUG9zaXRpb24oc2Ny
b2xsYmFyKSwgdHJhY2tSZWN0LnkoKSArICh0cmFja1JlY3QuaGVpZ2h0KCkgLSB0aHVtYkZhdCkg
LyAyLCB0aHVtYkxlbmd0aChzY3JvbGxiYXIpLCB0aHVtYkZhdCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGN1cnJlbnRUaHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCkgKyAodHJh
Y2tSZWN0LndpZHRoKCkgLSB0aHVtYkZhdCkgLyAyLCB0cmFja1JlY3QueSgpICsgdGh1bWJQb3Np
dGlvbihzY3JvbGxiYXIpLCB0aHVtYkZhdCwgdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSk7Ci0gICAg
ICAgIGlmIChkYW1hZ2VSZWN0LmludGVyc2VjdHMoY3VycmVudFRodW1iUmVjdCkpCi0gICAgICAg
ICAgICBzY3JvbGxNYXNrIHw9IFRodW1iUGFydDsKLSAgICB9Ci0KLSAgICBpZiAoc2Nyb2xsTWFz
ayA9PSBOb1BhcnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgU2Nyb2xsYmFyQ29udHJv
bFBhcnRNYXNrIGFsbEJ1dHRvbnMgPSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHwgQmFja0J1dHRvbkVu
ZFBhcnQgfCBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0IHwgRm9yd2FyZEJ1dHRvbkVuZFBhcnQ7Ci0K
LSAgICAvLyBQYWludCB0aGUgdHJhY2sgYmFja2dyb3VuZC4gSWYgdGhlIHRyb3VnaC11bmRlci1z
dGVwcGVycyBwcm9wZXJ0eSBpcyB0cnVlLCB0aGlzCi0gICAgLy8gc2hvdWxkIGJlIHRoZSBmdWxs
IHNpemUgb2YgdGhlIHNjcm9sbGJhciwgYnV0IGlmIGlzIGZhbHNlLCBpdCBzaG91bGQgb25seSBi
ZSB0aGUKLSAgICAvLyB0cmFjayByZWN0LgotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiB0
cm91Z2hTdHlsZUNvbnRleHQgPSBjcmVhdGVDaGlsZFN0eWxlQ29udGV4dChzdHlsZUNvbnRleHQu
Z2V0KCksICJ0cm91Z2giKTsKLSAgICBpZiAoc2Nyb2xsTWFzayAmIFRyYWNrQkdQYXJ0IHx8IHNj
cm9sbE1hc2sgJiBUaHVtYlBhcnQgfHwgc2Nyb2xsTWFzayAmIGFsbEJ1dHRvbnMpIHsKLSAgICAg
ICAgSW50UmVjdCBmdWxsU2Nyb2xsYmFyUmVjdCA9IHRyYWNrUGFpbnRSZWN0OwotICAgICAgICBp
ZiAodHJvdWdoVW5kZXJTdGVwcGVycykKLSAgICAgICAgICAgIGZ1bGxTY3JvbGxiYXJSZWN0ID0g
c2Nyb2xsYmFyLmZyYW1lUmVjdCgpOwotCi0gICAgICAgIEludFJlY3QgYWRqdXN0ZWRSZWN0ID0g
ZnVsbFNjcm9sbGJhclJlY3Q7Ci0gICAgICAgIGFkanVzdFJlY3RBY2NvcmRpbmdUb01hcmdpbihz
dHlsZUNvbnRleHQuZ2V0KCksIGFkanVzdGVkUmVjdCk7Ci0gICAgICAgIGd0a19yZW5kZXJfYmFj
a2dyb3VuZChzdHlsZUNvbnRleHQuZ2V0KCksIGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKSwgYWRqdXN0ZWRSZWN0LngoKSwgYWRqdXN0ZWRSZWN0LnkoKSwgYWRqdXN0ZWRS
ZWN0LndpZHRoKCksIGFkanVzdGVkUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIGd0a19yZW5kZXJf
ZnJhbWUoc3R5bGVDb250ZXh0LmdldCgpLCBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0
KCktPmNyKCksIGFkanVzdGVkUmVjdC54KCksIGFkanVzdGVkUmVjdC55KCksIGFkanVzdGVkUmVj
dC53aWR0aCgpLCBhZGp1c3RlZFJlY3QuaGVpZ2h0KCkpOwotCi0gICAgICAgIGFkanVzdGVkUmVj
dCA9IGZ1bGxTY3JvbGxiYXJSZWN0OwotICAgICAgICBhZGp1c3RSZWN0QWNjb3JkaW5nVG9NYXJn
aW4odHJvdWdoU3R5bGVDb250ZXh0LmdldCgpLCBhZGp1c3RlZFJlY3QpOwotICAgICAgICBndGtf
cmVuZGVyX2JhY2tncm91bmQodHJvdWdoU3R5bGVDb250ZXh0LmdldCgpLCBncmFwaGljc0NvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGFkanVzdGVkUmVjdC54KCksIGFkanVzdGVkUmVj
dC55KCksIGFkanVzdGVkUmVjdC53aWR0aCgpLCBhZGp1c3RlZFJlY3QuaGVpZ2h0KCkpOwotICAg
ICAgICBndGtfcmVuZGVyX2ZyYW1lKHRyb3VnaFN0eWxlQ29udGV4dC5nZXQoKSwgZ3JhcGhpY3ND
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBhZGp1c3RlZFJlY3QueCgpLCBhZGp1c3Rl
ZFJlY3QueSgpLCBhZGp1c3RlZFJlY3Qud2lkdGgoKSwgYWRqdXN0ZWRSZWN0LmhlaWdodCgpKTsK
LSAgICB9Ci0KLSAgICAvLyBQYWludCB0aGUgYmFjayBhbmQgZm9yd2FyZCBidXR0b25zLgotICAg
IGlmIChzY3JvbGxNYXNrICYgQmFja0J1dHRvblN0YXJ0UGFydCkKLSAgICAgICAgcGFpbnRTdGVw
cGVyKHN0eWxlQ29udGV4dC5nZXQoKSwgZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIsIGJhY2tC
dXR0b25TdGFydFBhaW50UmVjdCwgQmFja0J1dHRvblN0YXJ0UGFydCk7Ci0gICAgaWYgKHNjcm9s
bE1hc2sgJiBCYWNrQnV0dG9uRW5kUGFydCkKLSAgICAgICAgcGFpbnRTdGVwcGVyKHN0eWxlQ29u
dGV4dC5nZXQoKSwgZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIsIGJhY2tCdXR0b25FbmRQYWlu
dFJlY3QsIEJhY2tCdXR0b25FbmRQYXJ0KTsKLSAgICBpZiAoc2Nyb2xsTWFzayAmIEZvcndhcmRC
dXR0b25TdGFydFBhcnQpCi0gICAgICAgIHBhaW50U3RlcHBlcihzdHlsZUNvbnRleHQuZ2V0KCks
IGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyLCBmb3J3YXJkQnV0dG9uU3RhcnRQYWludFJlY3Qs
IEZvcndhcmRCdXR0b25TdGFydFBhcnQpOwotICAgIGlmIChzY3JvbGxNYXNrICYgRm9yd2FyZEJ1
dHRvbkVuZFBhcnQpCi0gICAgICAgIHBhaW50U3RlcHBlcihzdHlsZUNvbnRleHQuZ2V0KCksIGdy
YXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyLCBmb3J3YXJkQnV0dG9uRW5kUGFpbnRSZWN0LCBGb3J3
YXJkQnV0dG9uRW5kUGFydCk7Ci0KLSAgICAvLyBQYWludCB0aGUgdGh1bWIuCi0gICAgaWYgKHNj
cm9sbE1hc2sgJiBUaHVtYlBhcnQpIHsKLSAgICAgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+
IHRodW1iU3R5bGVDb250ZXh0ID0gY3JlYXRlQ2hpbGRTdHlsZUNvbnRleHQodHJvdWdoU3R5bGVD
b250ZXh0LmdldCgpLCAic2xpZGVyIik7Ci0gICAgICAgIHVuc2lnbmVkIGZsYWdzID0gMDsKLSAg
ICAgICAgaWYgKHNjcm9sbGJhci5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKLSAgICAgICAg
ICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsKLSAgICAgICAgaWYgKHNjcm9sbGJh
ci5ob3ZlcmVkUGFydCgpID09IFRodW1iUGFydCkKLSAgICAgICAgICAgIGZsYWdzIHw9IEdUS19T
VEFURV9GTEFHX1BSRUxJR0hUOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUo
dGh1bWJTdHlsZUNvbnRleHQuZ2V0KCksIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdz
KSk7Ci0KLSAgICAgICAgSW50UmVjdCB0aHVtYlJlY3QoY3VycmVudFRodW1iUmVjdCk7Ci0gICAg
ICAgIGFkanVzdFJlY3RBY2NvcmRpbmdUb01hcmdpbih0aHVtYlN0eWxlQ29udGV4dC5nZXQoKSwg
dGh1bWJSZWN0KTsKLSAgICAgICAgZ3RrX3JlbmRlcl9zbGlkZXIodGh1bWJTdHlsZUNvbnRleHQu
Z2V0KCksIGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgdGh1bWJSZWN0
LngoKSwgdGh1bWJSZWN0LnkoKSwgdGh1bWJSZWN0LndpZHRoKCksIHRodW1iUmVjdC5oZWlnaHQo
KSwKLSAgICAgICAgICAgIHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xs
YmFyID8gR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMIDogR1RLX09SSUVOVEFUSU9OX0hPUklaT05U
QUwpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmIC8vIEdUS19DSEVDS19W
RVJTSU9OKDMsIDIwLCAwKQogCiBTY3JvbGxiYXJCdXR0b25QcmVzc0FjdGlvbiBTY3JvbGxiYXJU
aGVtZUd0azo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KFNjcm9sbGJhciYsIGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYgZXZlbnQsIFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQpCiB7CkBAIC04MDAs
NyArNDk2LDYgQEAgU2Nyb2xsYmFyQnV0dG9uUHJlc3NBY3Rpb24gU2Nyb2xsYmFyVGhlbWVHdGs6
OmhhbmRsZU1vdXNlUHJlc3NFdmVudChTY3JvbGxiYXImLAogICAgIHJldHVybiBTY3JvbGxiYXJC
dXR0b25QcmVzc0FjdGlvbjo6Tm9uZTsKIH0KIAotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIw
LCAwKQogaW50IFNjcm9sbGJhclRoZW1lR3RrOjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFy
Q29udHJvbFNpemUsIFNjcm9sbGJhckV4cGFuc2lvblN0YXRlKQogewogICAgIGF1dG8mIHNjcm9s
bGJhcldpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lU2Nyb2xsYmFyJj4oUmVuZGVyVGhl
bWVXaWRnZXQ6OmdldE9yQ3JlYXRlKFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpWZXJ0aWNhbFNj
cm9sbGJhclJpZ2h0KSk7CkBAIC04MTAsMTYgKzUwNSw3IEBAIGludCBTY3JvbGxiYXJUaGVtZUd0
azo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplLCBTY3JvbGxiYXJFeHBh
bnNpCiAgICAgSW50U2l6ZSBwcmVmZXJyZWRTaXplID0gY29udGVudHNQcmVmZXJyZWRTaXplICsg
c2Nyb2xsYmFyV2lkZ2V0LnNjcm9sbGJhcigpLnByZWZlcnJlZFNpemUoKSAtIHNjcm9sbGJhcldp
ZGdldC5zY3JvbGxiYXIoKS5taW5pbXVtU2l6ZSgpOwogICAgIHJldHVybiBwcmVmZXJyZWRTaXpl
LndpZHRoKCk7CiB9Ci0jZWxzZQotaW50IFNjcm9sbGJhclRoZW1lR3RrOjpzY3JvbGxiYXJUaGlj
a25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUsIFNjcm9sbGJhckV4cGFuc2lvblN0YXRlKQotewot
ICAgIGludCB0aHVtYkZhdCwgdHJvdWdoQm9yZGVyV2lkdGg7Ci0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfZ2V0X3N0eWxlKGNyZWF0ZVN0eWxlQ29udGV4dCgpLmdldCgpLCAic2xpZGVyLXdpZHRoIiwg
JnRodW1iRmF0LCAidHJvdWdoLWJvcmRlciIsICZ0cm91Z2hCb3JkZXJXaWR0aCwgbnVsbHB0cik7
Ci0gICAgcmV0dXJuIHRodW1iRmF0ICsgMiAqIHRyb3VnaEJvcmRlcldpZHRoOwotfQotI2VuZGlm
IC8vIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQogCi0jaWYgR1RLX0NIRUNLX1ZFUlNJT04o
MywgMjAsIDApCiBpbnQgU2Nyb2xsYmFyVGhlbWVHdGs6Om1pbmltdW1UaHVtYkxlbmd0aChTY3Jv
bGxiYXImIHNjcm9sbGJhcikKIHsKICAgICBhdXRvJiBzY3JvbGxiYXJXaWRnZXQgPSBzdGF0aWNf
Y2FzdDxSZW5kZXJUaGVtZVNjcm9sbGJhciY+KFJlbmRlclRoZW1lV2lkZ2V0OjpnZXRPckNyZWF0
ZShSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6VmVydGljYWxTY3JvbGxiYXJSaWdodCkpOwpAQCAt
ODI3LDEyICs1MTMsNSBAQCBpbnQgU2Nyb2xsYmFyVGhlbWVHdGs6Om1pbmltdW1UaHVtYkxlbmd0
aChTY3JvbGxiYXImIHNjcm9sbGJhcikKICAgICBJbnRTaXplIG1pblNpemUgPSBzY3JvbGxiYXJX
aWRnZXQuc2xpZGVyKCkubWluaW11bVNpemUoKTsKICAgICByZXR1cm4gc2Nyb2xsYmFyLm9yaWVu
dGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIgPyBtaW5TaXplLmhlaWdodCgpIDogbWluU2l6
ZS53aWR0aCgpOwogfQotI2Vsc2UKLWludCBTY3JvbGxiYXJUaGVtZUd0azo6bWluaW11bVRodW1i
TGVuZ3RoKFNjcm9sbGJhciYgc2Nyb2xsYmFyKQotewotICAgIGludCBtaW5UaHVtYkxlbmd0aCA9
IDA7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNyZWF0ZVN0eWxlQ29udGV4dCgm
c2Nyb2xsYmFyKS5nZXQoKSwgIm1pbi1zbGlkZXItbGVuZ3RoIiwgJm1pblRodW1iTGVuZ3RoLCBu
dWxscHRyKTsKLSAgICByZXR1cm4gbWluVGh1bWJMZW5ndGg7Ci19Ci0jZW5kaWYKLX0KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHAK
aW5kZXggMjkzM2VlYTQ1MGMzNjVmYTNhZmNhNDg4ZTJjM2I1MTJkYmViOGYzOC4uNjE3Yjc1ZGQ4
ZjMyNmMxYmViOTdmYjI4ODhlM2UyYmFjYzdhZGFmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyQ2FwdHVyZXIuY3BwCkBAIC0yOSw4ICsyOSw2IEBACiAjaW5jbHVkZSA8bXV0ZXg+CiAjaW5j
bHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFjZS5oPgogCi0jaWYgR1NUX0NIRUNL
X1ZFUlNJT04oMSwgMTAsIDApCi0KIEdTVF9ERUJVR19DQVRFR09SWSh3ZWJraXRfY2FwdHVyZXJf
ZGVidWcpOwogI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X2NhcHR1cmVyX2RlYnVnCiAK
QEAgLTE4Niw1ICsxODQsNCBAQCB2b2lkIEdTdHJlYW1lckNhcHR1cmVyOjpzdG9wKCkKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAs
IDApCiAjZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBV
U0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291
cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKaW5kZXggYTg3ZDI2ZDI1ZGNiMjFkZGMwODQ4
ZTZkNWE1OTQ1M2MwNjY5MzQ4Mi4uYjNhZjM1YWY4MjQ4OGRkNGNmODIxY2QzZWVhZTYzZDljZjFh
Y2Q4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3Vy
Y2UuY3BwCkBAIC0zNCw4ICszNCw2IEBACiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzcmMuaD4K
ICNpbmNsdWRlIDxnc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuaD4KIAotI2lmIEdTVF9DSEVDS19W
RVJTSU9OKDEsIDEwLCAwKQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lkIHdl
YmtpdE1lZGlhU3RyZWFtU3JjUHVzaFZpZGVvU2FtcGxlKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBz
ZWxmLCBHc3RTYW1wbGUqIGdzdHNhbXBsZSk7CkBAIC02MTQsNSArNjEyLDUgQEAgR3N0RWxlbWVu
dCogd2Via2l0TWVkaWFTdHJlYW1TcmNOZXcodm9pZCkKIH0KIAogfSAvLyBXZWJDb3JlCi0jZW5k
aWYgLy8gR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCisKICNlbmRpZiAvLyBFTkFCTEUoVklE
RU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgK
aW5kZXggMDFjYzAzYTJlNWMyY2Q4ODM0NDZkMTZhMjI4NjJhZWI4ZTZhZDE3YS4uMzFjNmEwZTRl
YmFiY2E2MjJjNzllYTM2YWExN2Q4NzE1ZjVhOTc3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaApAQCAtMTY2LDgg
KzE2Niw2IEBAIGJvb2wgUmVzb3VyY2VSZXF1ZXN0OjpkZWNvZGVXaXRoUGxhdGZvcm1EYXRhKERl
Y29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLQotI2lmIFNPVVBfQ0hFQ0tf
VkVSU0lPTigyLCA0MywgMSkKIGlubGluZSBTb3VwTWVzc2FnZVByaW9yaXR5IHRvU291cE1lc3Nh
Z2VQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKIHsKICAgICBzd2l0Y2gg
KHByaW9yaXR5KSB7CkBAIC0xODYsNyArMTg0LDYgQEAgaW5saW5lIFNvdXBNZXNzYWdlUHJpb3Jp
dHkgdG9Tb3VwTWVzc2FnZVByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBTT1VQX01FU1NBR0VfUFJJT1JJ
VFlfVkVSWV9MT1c7CiB9Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtT
ZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0
d29ya1Nlc3Npb24uY3BwCmluZGV4IDA3MzQwNzMxNmUwNGQyNTY5MDhlMjU1YjM1MDA4YTU2NGNk
ZjUzZjMuLjYxMjRmNDZjMjRkMzEwMmQ2YzEzZDJjYTc3ZDQyMzhhZTAwOGViMjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Np
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0
d29ya1Nlc3Npb24uY3BwCkBAIC0xMzYsMTUgKzEzNiwxMSBAQCBTb3VwTmV0d29ya1Nlc3Npb246
OlNvdXBOZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFNvdXBDb29raWVK
YXIqCiAgICAgaWYgKCFpbml0aWFsQWNjZXB0TGFuZ3VhZ2VzKCkuaXNOdWxsKCkpCiAgICAgICAg
IHNldEFjY2VwdExhbmd1YWdlcyhpbml0aWFsQWNjZXB0TGFuZ3VhZ2VzKCkpOwogCi0jaWYgU09V
UF9DSEVDS19WRVJTSU9OKDIsIDUzLCA5MikKICAgICBpZiAoc291cF9hdXRoX25lZ290aWF0ZV9z
dXBwb3J0ZWQoKSAmJiAhc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpIHsKICAgICAgICAgZ19vYmpl
Y3Rfc2V0KG1fc291cFNlc3Npb24uZ2V0KCksCiAgICAgICAgICAgICBTT1VQX1NFU1NJT05fQURE
X0ZFQVRVUkVfQllfVFlQRSwgU09VUF9UWVBFX0FVVEhfTkVHT1RJQVRFLAogICAgICAgICAgICAg
bnVsbHB0cik7CiAgICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2Vzc2lvbklEKTsKLSNl
bmRpZgogCiAgICAgaWYgKHByb3h5U2V0dGluZ3MoKS5tb2RlICE9IFNvdXBOZXR3b3JrUHJveHlT
ZXR0aW5nczo6TW9kZTo6RGVmYXVsdCkKICAgICAgICAgc2V0dXBQcm94eSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKaW5kZXggZjQ0NGM1YTFhZDlkNmJl
YWJkYWQ0NzJjNDVmMTE0MDRjYmFkOTFmNC4uMDQ0ODdkZGI5ZjI1OGM0ODg5ODI3M2IyYzM1YjUx
YTMyZTcyYzk5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsu
Y3BwCkBAIC0xNjQsMTM3ICsxNjQsOSBAQCBlbnVtIFJlbmRlclRoZW1lUGFydCB7CiAjaWYgRU5B
QkxFKFZJREVPKQogICAgIE1lZGlhQnV0dG9uLAogI2VuZGlmCi0jaWYgR1RLX0NIRUNLX1ZFUlNJ
T04oMywgMjAsIDApCiAgICAgV2luZG93LAotI2VuZGlmCiB9OwogCi0jaWYgIUdUS19DSEVDS19W
RVJTSU9OKDMsIDIwLCAwKQotLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5
IEdUSyssIHdoZXJlIGl0IHdhcyBkZWZpbmVkIGFzIE1JTl9BUlJPV19TSVpFIGluIGd0a2Fycm93
LmMuCi1zdGF0aWMgY29uc3QgaW50IG1pbkFycm93U2l6ZSA9IDE1OwotLy8gVGhpcyBpcyB0aGUg
ZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSyssIHdoZXJlIGl0IHdhcyBkZWZpbmVkIGFzIE1J
Tl9BUlJPV19XSURUSCBpbiBndGtzcGluYnV0dG9uLmMuCi1zdGF0aWMgY29uc3QgaW50IG1pblNw
aW5CdXR0b25BcnJvd1NpemUgPSA2OwotCi1zdGF0aWMgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+
IGNyZWF0ZVN0eWxlQ29udGV4dChSZW5kZXJUaGVtZVBhcnQgdGhlbWVQYXJ0LCBHdGtTdHlsZUNv
bnRleHQqIHBhcmVudCA9IG51bGxwdHIpCi17Ci0gICAgR1JlZlB0cjxHdGtXaWRnZXRQYXRoPiBw
YXRoID0gYWRvcHRHUmVmKHBhcmVudCA/IGd0a193aWRnZXRfcGF0aF9jb3B5KGd0a19zdHlsZV9j
b250ZXh0X2dldF9wYXRoKHBhcmVudCkpIDogZ3RrX3dpZGdldF9wYXRoX25ldygpKTsKLQotICAg
IHN3aXRjaCAodGhlbWVQYXJ0KSB7Ci0gICAgY2FzZSBFbnRyeToKLSAgICBjYXNlIEVudHJ5U2Vs
ZWN0aW9uOgotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5nZXQoKSwg
R1RLX1RZUEVfRU5UUlkpOwotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3Mo
cGF0aC5nZXQoKSwgLTEsIEdUS19TVFlMRV9DTEFTU19FTlRSWSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRW50cnlJY29uTGVmdDoKLSAgICBjYXNlIEVudHJ5SWNvblJpZ2h0OgotICAgICAg
ICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfRU5UUlkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJ1dHRvbjoKLSAgICAgICAgZ3RrX3dpZGdldF9w
YXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX0JVVFRPTik7Ci0gICAgICAgIGd0
a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwgR1RLX1NUWUxFX0NM
QVNTX0JVVFRPTik7Ci0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRo
LmdldCgpLCAtMSwgInRleHQtYnV0dG9uIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2hl
Y2tCdXR0b246Ci0gICAgICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgp
LCBHVEtfVFlQRV9DSEVDS19CVVRUT04pOwotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9h
ZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdUS19TVFlMRV9DTEFTU19DSEVDSyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgUmFkaW9CdXR0b246Ci0gICAgICAgIGd0a193aWRnZXRfcGF0aF9h
cHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9SQURJT19CVVRUT04pOwotICAgICAgICBn
dGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdUS19TVFlMRV9D
TEFTU19SQURJTyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tYm9Cb3g6Ci0gICAgICAg
IGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9DT01CT19C
T1gpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbWJvQm94QnV0dG9uOgotICAgICAgICBn
dGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfQlVUVE9OKTsK
LSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCBH
VEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRk
X2NsYXNzKHBhdGguZ2V0KCksIC0xLCAidGV4dC1idXR0b24iKTsKLSAgICAgICAgZ3RrX3dpZGdl
dF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCAiY29tYm8iKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDb21ib0JveEFycm93OgotICAgICAgICBndGtfd2lkZ2V0X3BhdGhf
YXBwZW5kX3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfQVJST1cpOwotICAgICAgICBndGtfd2lk
Z2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsICJhcnJvdyIpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFNjYWxlOgotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5k
X3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfU0NBTEUpOwotICAgICAgICBndGtfd2lkZ2V0X3Bh
dGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdUS19TVFlMRV9DTEFTU19TQ0FMRSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU2NhbGVUcm91Z2g6Ci0gICAgICAgIGd0a193aWRn
ZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9TQ0FMRSk7Ci0gICAgICAg
IGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwgR1RLX1NUWUxF
X0NMQVNTX1NDQUxFKTsKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBh
dGguZ2V0KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1NfVFJPVUdIKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBTY2FsZVNsaWRlcjoKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBl
KHBhdGguZ2V0KCksIEdUS19UWVBFX1NDQUxFKTsKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0
ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1NfU0NBTEUpOwotICAg
ICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdUS19T
VFlMRV9DTEFTU19TTElERVIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFByb2dyZXNzQmFy
OgotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZ
UEVfUFJPR1JFU1NfQkFSKTsKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNz
KHBhdGguZ2V0KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1NfUFJPR1JFU1NCQVIpOwotICAgICAgICBn
dGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdUS19TVFlMRV9D
TEFTU19IT1JJWk9OVEFMKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQcm9ncmVzc0JhclRy
b3VnaDoKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdU
S19UWVBFX1BST0dSRVNTX0JBUik7Ci0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9j
bGFzcyhwYXRoLmdldCgpLCAtMSwgR1RLX1NUWUxFX0NMQVNTX1RST1VHSCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUHJvZ3Jlc3NCYXJQcm9ncmVzczoKLSAgICAgICAgZ3RrX3dpZGdldF9w
YXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX1BST0dSRVNTX0JBUik7Ci0gICAg
ICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwgR1RLX1NU
WUxFX0NMQVNTX1BST0dSRVNTQkFSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaXN0Qm94
OgotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZ
UEVfVFJFRV9WSUVXKTsKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBh
dGguZ2V0KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1NfVklFVyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgU3BpbkJ1dHRvbjoKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBh
dGguZ2V0KCksIEdUS19UWVBFX1NQSU5fQlVUVE9OKTsKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRo
X2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1NfU1BJTkJVVFRP
Tik7Ci0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAt
MSwgR1RLX1NUWUxFX0NMQVNTX0hPUklaT05UQUwpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFNwaW5CdXR0b25VcEJ1dHRvbjoKLSAgICBjYXNlIFNwaW5CdXR0b25Eb3duQnV0dG9uOgotICAg
ICAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfU1BJ
Tl9CVVRUT04pOwotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5n
ZXQoKSwgLTEsIEdUS19TVFlMRV9DTEFTU19TUElOQlVUVE9OKTsKLSAgICAgICAgZ3RrX3dpZGdl
dF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1NfQlVU
VE9OKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIGNhc2UgTWVkaWFC
dXR0b246Ci0gICAgICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBH
VEtfVFlQRV9JTUFHRSk7Ci0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhw
YXRoLmdldCgpLCAtMSwgR1RLX1NUWUxFX0NMQVNTX0lNQUdFKTsKLSAgICAgICAgYnJlYWs7Ci0j
ZW5kaWYgLy8gRU5BQkxFKFZJREVPKQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPEd0a1N0eWxl
Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihndGtfc3R5bGVfY29udGV4dF9uZXcoKSk7Ci0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3BhdGgoY29udGV4dC5nZXQoKSwgcGF0aC5nZXQoKSk7
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3BhcmVudChjb250ZXh0LmdldCgpLCBwYXJlbnQp
OwotICAgIHJldHVybiBjb250ZXh0OwotfQotCi1zdGF0aWMgR1JlZlB0cjxHZGtQaXhidWY+IGxv
YWRUaGVtZWRJY29uKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogaWNvbk5h
bWUsIEd0a0ljb25TaXplIGljb25TaXplKQotewotICAgIEdSZWZQdHI8R0ljb24+IGljb24gPSBh
ZG9wdEdSZWYoZ190aGVtZWRfaWNvbl9uZXcoaWNvbk5hbWUpKTsKLSAgICB1bnNpZ25lZCBsb29r
dXBGbGFncyA9IEdUS19JQ09OX0xPT0tVUF9VU0VfQlVJTFRJTiB8IEdUS19JQ09OX0xPT0tVUF9G
T1JDRV9TSVpFIHwgR1RLX0lDT05fTE9PS1VQX0ZPUkNFX1NWRzsKLSNpZiBHVEtfQ0hFQ0tfVkVS
U0lPTigzLCAxNCwgMCkKLSAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IGd0a19zdHls
ZV9jb250ZXh0X2dldF9kaXJlY3Rpb24oY29udGV4dCk7Ci0gICAgaWYgKGRpcmVjdGlvbiAmIEdU
S19URVhUX0RJUl9MVFIpCi0gICAgICAgIGxvb2t1cEZsYWdzIHw9IEdUS19JQ09OX0xPT0tVUF9E
SVJfTFRSOwotICAgIGVsc2UgaWYgKGRpcmVjdGlvbiAmIEdUS19URVhUX0RJUl9SVEwpCi0gICAg
ICAgIGxvb2t1cEZsYWdzIHw9IEdUS19JQ09OX0xPT0tVUF9ESVJfUlRMOwotI2VuZGlmCi0gICAg
aW50IHdpZHRoLCBoZWlnaHQ7Ci0gICAgZ3RrX2ljb25fc2l6ZV9sb29rdXAoaWNvblNpemUsICZ3
aWR0aCwgJmhlaWdodCk7Ci0gICAgR1JlZlB0cjxHdGtJY29uSW5mbz4gaWNvbkluZm8gPSBhZG9w
dEdSZWYoZ3RrX2ljb25fdGhlbWVfbG9va3VwX2J5X2dpY29uKGd0a19pY29uX3RoZW1lX2dldF9k
ZWZhdWx0KCksIGljb24uZ2V0KCksIHN0ZDo6bWluKHdpZHRoLCBoZWlnaHQpLCBzdGF0aWNfY2Fz
dDxHdGtJY29uTG9va3VwRmxhZ3M+KGxvb2t1cEZsYWdzKSkpOwotICAgIGlmICghaWNvbkluZm8p
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGFkb3B0R1JlZihndGtfaWNv
bl9pbmZvX2xvYWRfc3ltYm9saWNfZm9yX2NvbnRleHQoaWNvbkluZm8uZ2V0KCksIGNvbnRleHQs
IG51bGxwdHIsIG51bGxwdHIpKTsKLX0KLSNlbmRpZiAvLyAhR1RLX0NIRUNLX1ZFUlNJT04oMywg
MjAsIDApCi0KICNpZiBFTkFCTEUoVklERU8pCiBzdGF0aWMgYm9vbCBub2RlSGFzUHNldWRvKE5v
ZGUmIG5vZGUsIGNvbnN0IGNoYXIqIHBzZXVkbykKIHsKQEAgLTM1NCw3ICsyMjYsNiBAQCBpbnQg
UmVuZGVyVGhlbWVHdGs6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyQm94JiBib3gpIGNv
bnN0CiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpiYXNlbGluZVBvc2l0aW9uKGJveCk7CiB9CiAK
LSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFk
anVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIEZsb2F0UmVjdCYpCiB7CiB9CkBA
IC00MTgsODIgKzI4OSw2IEBAIHN0YXRpYyBHdGtTdGF0ZUZsYWdzIHRoZW1lUGFydFN0YXRlRmxh
Z3MoY29uc3QgUmVuZGVyVGhlbWVHdGsmIHRoZW1lLCBSZW5kZXJUaGVtCiAKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oc3RhdGVGbGFncyk7CiB9Ci0jZWxzZQotc3RhdGlj
IEd0a1RleHREaXJlY3Rpb24gZ3RrVGV4dERpcmVjdGlvbihUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
bikKLXsKLSAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAgIGNhc2UgVGV4dERpcmVjdGlvbjo6
UlRMOgotICAgICAgICByZXR1cm4gR1RLX1RFWFRfRElSX1JUTDsKLSAgICBjYXNlIFRleHREaXJl
Y3Rpb246OkxUUjoKLSAgICAgICAgcmV0dXJuIEdUS19URVhUX0RJUl9MVFI7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIEdUS19URVhUX0RJUl9OT05FOwotICAgIH0KLX0KLQotc3RhdGlj
IEd0a1N0YXRlRmxhZ3MgZ3RrSWNvblN0YXRlRmxhZ3MoUmVuZGVyVGhlbWUqIHRoZW1lLCBjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCkKLXsKLSAgICBpZiAoIXRoZW1lLT5pc0VuYWJs
ZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIEdUS19TVEFURV9GTEFHX0lOU0VOU0lU
SVZFOwotICAgIGlmICh0aGVtZS0+aXNQcmVzc2VkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIHJl
dHVybiBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7Ci0gICAgaWYgKHRoZW1lLT5pc0hvdmVyZWQocmVu
ZGVyT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOwotCi0g
ICAgcmV0dXJuIEdUS19TVEFURV9GTEFHX05PUk1BTDsKLX0KLQotc3RhdGljIHZvaWQgYWRqdXN0
UmVjdEZvckZvY3VzKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgRmxvYXRSZWN0JiByZWN0KQot
ewotICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
Z2V0X3N0eWxlKGNvbnRleHQsICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsICJmb2N1
cy1wYWRkaW5nIiwgJmZvY3VzUGFkLCBudWxscHRyKTsKLSAgICByZWN0LmluZmxhdGUoZm9jdXNX
aWR0aCArIGZvY3VzUGFkKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0UmVwYWlu
dFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIEZsb2F0UmVjdCYgcmVjdCkK
LXsKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4dDsKLSAgICBib29sIGNoZWNr
SW50ZXJpb3JGb2N1cyA9IGZhbHNlOwotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSByZW5kZXJPYmpl
Y3Quc3R5bGUoKS5hcHBlYXJhbmNlKCk7Ci0gICAgc3dpdGNoIChwYXJ0KSB7Ci0gICAgY2FzZSBD
aGVja2JveFBhcnQ6Ci0gICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgICAgIGNvbnRleHQgPSBjcmVh
dGVTdHlsZUNvbnRleHQocGFydCA9PSBDaGVja2JveFBhcnQgPyBDaGVja0J1dHRvbiA6IFJhZGlv
QnV0dG9uKTsKLQotICAgICAgICBnaW50IGluZGljYXRvclNwYWNpbmc7Ci0gICAgICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LmdldCgpLCAiaW5kaWNhdG9yLXNwYWNpbmci
LCAmaW5kaWNhdG9yU3BhY2luZywgbnVsbHB0cik7Ci0gICAgICAgIHJlY3QuaW5mbGF0ZShpbmRp
Y2F0b3JTcGFjaW5nKTsKLQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBTbGlkZXJWZXJ0aWNh
bFBhcnQ6Ci0gICAgY2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoKLSAgICAgICAgY29udGV4dCA9
IGNyZWF0ZVN0eWxlQ29udGV4dChTY2FsZVNsaWRlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQnV0dG9uUGFydDoKLSAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKLSAgICBjYXNlIE1l
bnVsaXN0UGFydDoKLSAgICAgICAgY29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChCdXR0b24p
OwotICAgICAgICBjaGVja0ludGVyaW9yRm9jdXMgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFRleHRGaWVsZFBhcnQ6Ci0gICAgY2FzZSBUZXh0QXJlYVBhcnQ6Ci0gICAgICAgIGNv
bnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoRW50cnkpOwotICAgICAgICBjaGVja0ludGVyaW9y
Rm9jdXMgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGNvbnRleHQpOwotICAgIGlmIChjaGVja0ludGVyaW9y
Rm9jdXMpIHsKLSAgICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1czsKLSAgICAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQuZ2V0KCksICJpbnRlcmlvci1mb2N1cyIsICZp
bnRlcmlvckZvY3VzLCBudWxscHRyKTsKLSAgICAgICAgaWYgKGludGVyaW9yRm9jdXMpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGFkanVzdFJlY3RGb3JGb2N1cyhjb250ZXh0Lmdl
dCgpLCByZWN0KTsKLX0KLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKIAog
dm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CkBAIC01MTUsNyArMzEw
LDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rVG9NaW5pbXVtU2l6ZUFuZENlbnRlclJlY3RhbmdsZShG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUKICAgICB9CiB9CiAKLSNpZiBHVEtfQ0hFQ0tf
VkVSU0lPTigzLCAyMCwgMCkKIHN0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoUmVuZGVyVGhlbWVQ
YXJ0IHRoZW1lUGFydCwgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAgIEFTU0VSVCh0aGVtZVBh
cnQgPT0gQ2hlY2tCdXR0b24gfHwgdGhlbWVQYXJ0ID09IFJhZGlvQnV0dG9uKTsKQEAgLTU2MCw3
NSArMzU0LDYgQEAgc3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoY29uc3QgUmVuZGVyVGhlbWVHdGsq
IHRoZW1lLCBSZW5kZXJUaGVtZVBhcnQgdGhlbWVQYXJ0LAogICAgIGlmICh0aGVtZS0+aXNGb2N1
c2VkKHJlbmRlck9iamVjdCkpCiAgICAgICAgIHRvZ2dsZVdpZGdldC5idXR0b24oKS5yZW5kZXJG
b2N1cyhwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0KTsK
IH0KLSNlbHNlCi1zdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKFJlbmRlclRoZW1lUGFydCB0aGVt
ZVBhcnQsIFJlbmRlclN0eWxlJiBzdHlsZSkKLXsKLSAgICAvLyBUaGUgd2lkdGggYW5kIGhlaWdo
dCBhcmUgYm90aCBzcGVjaWZpZWQsIHNvIHdlIHNob3VsZG4ndCBjaGFuZ2UgdGhlbS4KLSAgICBp
ZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCku
aXNBdXRvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0
PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KHRoZW1lUGFydCk7Ci0gICAgLy8gT3RoZXIg
cG9ydHMgaGFyZC1jb2RlIHRoaXMgdG8gMTMuIEdUSysgdXNlcnMgdGVuZCB0byBkZW1hbmQgdGhl
IG5hdGl2ZSBsb29rLgotICAgIGdpbnQgaW5kaWNhdG9yU2l6ZTsKLSAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfc3R5bGUoY29udGV4dC5nZXQoKSwgImluZGljYXRvci1zaXplIiwgJmluZGljYXRv
clNpemUsIG51bGxwdHIpOwotCi0gICAgaWYgKHN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1
dG8oKSkKLSAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVk
KSk7Ci0KLSAgICBpZiAoc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxlLnNl
dEhlaWdodChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKLX0KLQotc3RhdGljIHZvaWQg
cGFpbnRUb2dnbGUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJUaGVtZVBhcnQg
dGhlbWVQYXJ0LCBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIGZ1bGxSZWN0KQotewotICAgIEdSZWZQdHI8
R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KHRoZW1lUGFydCk7
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LmdldCgpLCBzdGF0
aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5z
dHlsZSgpLmRpcmVjdGlvbigpKSkpOwotCi0gICAgdW5zaWduZWQgZmxhZ3MgPSAwOwotICAgIGlm
ICghdGhlbWUtPmlzRW5hYmxlZChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtf
U1RBVEVfRkxBR19JTlNFTlNJVElWRTsKLSAgICBlbHNlIGlmICh0aGVtZS0+aXNIb3ZlcmVkKHJl
bmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOwot
ICAgIGlmICh0aGVtZS0+aXNJbmRldGVybWluYXRlKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZs
YWdzIHw9IEdUS19TVEFURV9GTEFHX0lOQ09OU0lTVEVOVDsKLSAgICBlbHNlIGlmICh0aGVtZS0+
aXNDaGVja2VkKHJlbmRlck9iamVjdCkpCi0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTMsIDcp
Ci0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0NIRUNLRUQ7Ci0jZWxzZQotICAgICAg
ICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7Ci0jZW5kaWYKLSAgICBpZiAodGhlbWUt
PmlzUHJlc3NlZChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxB
R19TRUxFQ1RFRDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dC5nZXQo
KSwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKLQotICAgIC8vIFNvbWUgdGhl
bWVzIGRvIG5vdCByZW5kZXIgbGFyZ2UgdG9nZ2xlIGJ1dHRvbnMgcHJvcGVybHksIHNvIHdlIHNp
bXBseQotICAgIC8vIHNocmluayB0aGUgcmVjdGFuZ2xlIGJhY2sgZG93biB0byB0aGUgZGVmYXVs
dCBzaXplIGFuZCB0aGVuIGNlbnRlciBpdAotICAgIC8vIGluIHRoZSBmdWxsIHRvZ2dsZSBidXR0
b24gcmVnaW9uLiBUaGUgcmVhc29uIGZvciBub3Qgc2ltcGx5IGZvcmNpbmcgdG9nZ2xlCi0gICAg
Ly8gYnV0dG9ucyB0byBiZSBhIHNtYWxsZXIgc2l6ZSBpcyB0aGF0IHdlIGRvbid0IHdhbnQgdG8g
YnJlYWsgc2l0ZSBsYXlvdXRzLgotICAgIEZsb2F0UmVjdCByZWN0KGZ1bGxSZWN0KTsKLSAgICBn
aW50IGluZGljYXRvclNpemU7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRl
eHQuZ2V0KCksICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXplLCBudWxscHRyKTsKLSAg
ICBJbnRTaXplIG1pblNpemUoaW5kaWNhdG9yU2l6ZSwgaW5kaWNhdG9yU2l6ZSk7Ci0gICAgc2hy
aW5rVG9NaW5pbXVtU2l6ZUFuZENlbnRlclJlY3RhbmdsZShyZWN0LCBtaW5TaXplKTsKLQotICAg
IGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LmdldCgpLCBwYWludEluZm8uY29udGV4dCgp
LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgo
KSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgZ3RrX3JlbmRlcl9mcmFtZShjb250ZXh0LmdldCgpLCBw
YWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVj
dC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBpZiAodGhlbWVQYXJ0
ID09IENoZWNrQnV0dG9uKQotICAgICAgICBndGtfcmVuZGVyX2NoZWNrKGNvbnRleHQuZ2V0KCks
IHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCBy
ZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGd0a19yZW5kZXJfb3B0aW9uKGNvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKLQotICAgIGlmICh0aGVtZS0+aXNGb2N1c2VkKHJlbmRlck9iamVjdCkp
IHsKLSAgICAgICAgSW50UmVjdCBpbmRpY2F0b3JSZWN0KHJlY3QpOwotICAgICAgICBnaW50IGlu
ZGljYXRvclNwYWNpbmc7Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250
ZXh0LmdldCgpLCAiaW5kaWNhdG9yLXNwYWNpbmciLCAmaW5kaWNhdG9yU3BhY2luZywgbnVsbHB0
cik7Ci0gICAgICAgIGluZGljYXRvclJlY3QuaW5mbGF0ZShpbmRpY2F0b3JTcGFjaW5nKTsKLSAg
ICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250ZXh0LmdldCgpLCBwYWludEluZm8uY29udGV4dCgp
LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBpbmRpY2F0b3JSZWN0LngoKSwgaW5kaWNhdG9yUmVj
dC55KCksCi0gICAgICAgICAgICBpbmRpY2F0b3JSZWN0LndpZHRoKCksIGluZGljYXRvclJlY3Qu
aGVpZ2h0KCkpOwotICAgIH0KLX0KLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwg
MCkKIAogdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJiBz
dHlsZSkgY29uc3QKIHsKQEAgLTY1Miw3ICszNzcsNiBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpw
YWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludElu
ZgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAw
KQogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBy
ZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewogICAgIGF1dG8mIGJ1dHRvbldpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1l
QnV0dG9uJj4oUmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKGlzRGVmYXVsdChyZW5kZXJP
YmplY3QpID8gUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6OkJ1dHRvbkRlZmF1bHQgOiBSZW5kZXJU
aGVtZVdpZGdldDo6VHlwZTo6QnV0dG9uKSk7CkBAIC02NjIsOTkgKzM4NiwxNCBAQCBib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVj
dCwgY29uc3QgUGFpbnRJbgogICAgICAgICBidXR0b25XaWRnZXQuYnV0dG9uKCkucmVuZGVyRm9j
dXMocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdCk7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQotI2Vsc2UKLXN0YXRpYyB2b2lkIHJlbmRlckJ1dHRvbihSZW5k
ZXJUaGVtZSogdGhlbWUsIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2Jq
ZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQotewotICAgIEludFJlY3QgYnV0dG9uUmVjdChyZWN0KTsKLQotICAgIGd1aW50
IGZsYWdzID0gMDsKLSAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSkKLSAg
ICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7Ci0gICAgZWxzZSBpZiAo
dGhlbWUtPmlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RB
VEVfRkxBR19QUkVMSUdIVDsKLSAgICBpZiAodGhlbWUtPmlzUHJlc3NlZChyZW5kZXJPYmplY3Qp
KQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7Ci0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZs
YWdzKSk7Ci0KLSAgICBpZiAodGhlbWUtPmlzRGVmYXVsdChyZW5kZXJPYmplY3QpKSB7Ci0gICAg
ICAgIEd0a0JvcmRlciogYm9yZGVyUHRyID0gMDsKLSAgICAgICAgR3RrQm9yZGVyIGJvcmRlciA9
IHsgMSwgMSwgMSwgMSB9OwotCi0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShj
b250ZXh0LCAiZGVmYXVsdC1ib3JkZXIiLCAmYm9yZGVyUHRyLCBudWxscHRyKTsKLSAgICAgICAg
aWYgKGJvcmRlclB0cikgewotICAgICAgICAgICAgYm9yZGVyID0gKmJvcmRlclB0cjsKLSAgICAg
ICAgICAgIGd0a19ib3JkZXJfZnJlZShib3JkZXJQdHIpOwotICAgICAgICB9Ci0KLSAgICAgICAg
YnV0dG9uUmVjdC5tb3ZlKGJvcmRlci5sZWZ0LCBib3JkZXIudG9wKTsKLSAgICAgICAgYnV0dG9u
UmVjdC5zZXRXaWR0aChidXR0b25SZWN0LndpZHRoKCkgLSAoYm9yZGVyLmxlZnQgKyBib3JkZXIu
cmlnaHQpKTsKLSAgICAgICAgYnV0dG9uUmVjdC5zZXRIZWlnaHQoYnV0dG9uUmVjdC5oZWlnaHQo
KSAtIChib3JkZXIudG9wICsgYm9yZGVyLmJvdHRvbSkpOwotCi0gICAgICAgIGd0a19zdHlsZV9j
b250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfREVGQVVMVCk7Ci0gICAg
fQotCi0gICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRvblJlY3QueCgpLCBidXR0b25SZWN0Lnko
KSwgYnV0dG9uUmVjdC53aWR0aCgpLCBidXR0b25SZWN0LmhlaWdodCgpKTsKLSAgICBndGtfcmVu
ZGVyX2ZyYW1lKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkt
PmNyKCksIGJ1dHRvblJlY3QueCgpLCBidXR0b25SZWN0LnkoKSwgYnV0dG9uUmVjdC53aWR0aCgp
LCBidXR0b25SZWN0LmhlaWdodCgpKTsKLQotICAgIGlmICh0aGVtZS0+aXNGb2N1c2VkKHJlbmRl
ck9iamVjdCkpIHsKLSAgICAgICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKLSAgICAgICAg
Z2Jvb2xlYW4gZGlzcGxhY2VGb2N1cywgaW50ZXJpb3JGb2N1czsKLSAgICAgICAgZ3RrX3N0eWxl
X2NvbnRleHRfZ2V0X3N0eWxlKAotICAgICAgICAgICAgY29udGV4dCwKLSAgICAgICAgICAgICJm
b2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCi0gICAgICAgICAgICAiZm9jdXMtcGFkZGlu
ZyIsICZmb2N1c1BhZCwKLSAgICAgICAgICAgICJpbnRlcmlvci1mb2N1cyIsICZpbnRlcmlvckZv
Y3VzLAotICAgICAgICAgICAgImRpc3BsYWNlLWZvY3VzIiwgJmRpc3BsYWNlRm9jdXMsCi0gICAg
ICAgICAgICBudWxscHRyKTsKLQotICAgICAgICBpZiAoaW50ZXJpb3JGb2N1cykgewotICAgICAg
ICAgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoOwotICAgICAgICAgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfZ2V0X2JvcmRlcihjb250ZXh0LCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoY29udGV4
dCksICZib3JkZXJXaWR0aCk7Ci0KLSAgICAgICAgICAgIGJ1dHRvblJlY3QgPSBJbnRSZWN0KAot
ICAgICAgICAgICAgICAgIGJ1dHRvblJlY3QueCgpICsgYm9yZGVyV2lkdGgubGVmdCArIGZvY3Vz
UGFkLAotICAgICAgICAgICAgICAgIGJ1dHRvblJlY3QueSgpICsgYm9yZGVyV2lkdGgudG9wICsg
Zm9jdXNQYWQsCi0gICAgICAgICAgICAgICAgYnV0dG9uUmVjdC53aWR0aCgpIC0gKDIgKiBmb2N1
c1BhZCArIGJvcmRlcldpZHRoLmxlZnQgKyBib3JkZXJXaWR0aC5yaWdodCksCi0gICAgICAgICAg
ICAgICAgYnV0dG9uUmVjdC5oZWlnaHQoKSAtICgyICogZm9jdXNQYWQgKyBib3JkZXJXaWR0aC50
b3AgKyBib3JkZXJXaWR0aC5ib3R0b20pKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBi
dXR0b25SZWN0LmluZmxhdGUoZm9jdXNXaWR0aCArIGZvY3VzUGFkKTsKLQotICAgICAgICBpZiAo
ZGlzcGxhY2VGb2N1cyAmJiB0aGVtZS0+aXNQcmVzc2VkKHJlbmRlck9iamVjdCkpIHsKLSAgICAg
ICAgICAgIGdpbnQgY2hpbGREaXNwbGFjZW1lbnRYOwotICAgICAgICAgICAgZ2ludCBjaGlsZERp
c3BsYWNlbWVudFk7Ci0gICAgICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29u
dGV4dCwgImNoaWxkLWRpc3BsYWNlbWVudC14IiwgJmNoaWxkRGlzcGxhY2VtZW50WCwgImNoaWxk
LWRpc3BsYWNlbWVudC15IiwgJmNoaWxkRGlzcGxhY2VtZW50WSwgbnVsbHB0cik7Ci0gICAgICAg
ICAgICBidXR0b25SZWN0Lm1vdmUoY2hpbGREaXNwbGFjZW1lbnRYLCBjaGlsZERpc3BsYWNlbWVu
dFkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250ZXh0LCBwYWlu
dEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0LngoKSwg
YnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7
Ci0gICAgfQotfQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0b24oY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0g
Y3JlYXRlU3R5bGVDb250ZXh0KEJ1dHRvbik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2Rp
cmVjdGlvbihjb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtU
ZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSkpOwotICAgIHJl
bmRlckJ1dHRvbih0aGlzLCBjb250ZXh0LmdldCgpLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywg
cmVjdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9O
KDMsIDIwLCAwKQogCiBzdGF0aWMgQ29sb3IgbWVudUxpc3RDb2xvcihjb25zdCBFbGVtZW50KiBl
bGVtZW50KQogewotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQogICAgIGF1dG8mIGNv
bWJvV2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVDb21ib0JveCY+KFJlbmRlclRoZW1l
V2lkZ2V0OjpnZXRPckNyZWF0ZShSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6Q29tYm9Cb3gpKTsK
ICAgICBHdGtTdGF0ZUZsYWdzIHN0YXRlID0gZWxlbWVudC0+aXNEaXNhYmxlZEZvcm1Db250cm9s
KCkgPyBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRSA6IEdUS19TVEFURV9GTEFHX05PUk1BTDsK
ICAgICBjb21ib1dpZGdldC5jb21ib0JveCgpLnNldFN0YXRlKHN0YXRlKTsKICAgICBjb21ib1dp
ZGdldC5idXR0b24oKS5zZXRTdGF0ZShzdGF0ZSk7CiAgICAgcmV0dXJuIGNvbWJvV2lkZ2V0LmJ1
dHRvbigpLmNvbG9yKCk7Ci0jZWxzZQotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBwYXJl
bnRTdHlsZUNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoQ29tYm9Cb3gpOwotICAgIEdSZWZQ
dHI8R3RrU3R5bGVDb250ZXh0PiBidXR0b25TdHlsZUNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRl
eHQoQ29tYm9Cb3hCdXR0b24sIHBhcmVudFN0eWxlQ29udGV4dC5nZXQoKSk7Ci0gICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2V0X3N0YXRlKGJ1dHRvblN0eWxlQ29udGV4dC5nZXQoKSwgZWxlbWVudC0+
aXNEaXNhYmxlZEZvcm1Db250cm9sKCkgPyBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRSA6IEdU
S19TVEFURV9GTEFHX05PUk1BTCk7Ci0KLSAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKLSAgICBn
dGtfc3R5bGVfY29udGV4dF9nZXRfY29sb3IoYnV0dG9uU3R5bGVDb250ZXh0LmdldCgpLCBndGtf
c3R5bGVfY29udGV4dF9nZXRfc3RhdGUoYnV0dG9uU3R5bGVDb250ZXh0LmdldCgpKSwgJmdka1JH
QkFDb2xvcik7Ci0gICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tf
VkVSU0lPTigzLCAyMCwgMCkKIH0KIAogdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVudUxp
c3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50
KiBlbGVtZW50KSBjb25zdApAQCAtNzc0LDcgKzQxMyw2IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6
OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwg
UmVuCiAgICAgYWRqdXN0TWVudUxpc3RTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiB9
CiAKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKIC8qCiAgKiBHdGtDb21ib0JveCBn
YWRnZXRzIHRyZWUKICAqCkBAIC04MzAsMTA0ICs0NjgsMTIgQEAgYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3Qg
UGFpbnQKIAogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbHNlCi1MZW5ndGhCb3ggUmVuZGVyVGhl
bWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm94KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkg
Y29uc3QKLXsKLSAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQpCi0g
ICAgICAgIHJldHVybiB7IDAsIDAsIDAsIDAgfTsKLQotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250
ZXh0PiBwYXJlbnRDb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KENvbWJvQm94KTsKLSAgICBH
UmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChDb21i
b0JveEJ1dHRvbiwgcGFyZW50Q29udGV4dC5nZXQoKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
c2V0X2RpcmVjdGlvbihjb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9u
PihndGtUZXh0RGlyZWN0aW9uKHN0eWxlLmRpcmVjdGlvbigpKSkpOwotICAgIGd0a19zdHlsZV9j
b250ZXh0X3NldF9zdGF0ZShjb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdz
PigwKSk7Ci0gICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07Ci0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihjb250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29u
dGV4dF9nZXRfc3RhdGUoY29udGV4dC5nZXQoKSksICZib3JkZXJXaWR0aCk7Ci0KLSAgICBnYm9v
bGVhbiBpbnRlcmlvckZvY3VzOwotICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7Ci0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQuZ2V0KCksICJpbnRlcmlvci1mb2N1
cyIsICZpbnRlcmlvckZvY3VzLCAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLCAiZm9j
dXMtcGFkZGluZyIsICZmb2N1c1BhZCwgbnVsbHB0cik7Ci0gICAgZm9jdXNXaWR0aCA9IGludGVy
aW9yRm9jdXMgPyBmb2N1c1dpZHRoICsgZm9jdXNQYWQgOiAwOwotCi0gICAgcmV0dXJuIHsgYm9y
ZGVyV2lkdGgudG9wICsgZm9jdXNXaWR0aCwgYm9yZGVyV2lkdGgucmlnaHQgKyBmb2N1c1dpZHRo
ICsgKHN0eWxlLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IG1pbkFycm93U2l6
ZSA6IDApLAotICAgICAgICBib3JkZXJXaWR0aC5ib3R0b20gKyBmb2N1c1dpZHRoLCBib3JkZXJX
aWR0aC5sZWZ0ICsgZm9jdXNXaWR0aCArIChzdHlsZS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0
aW9uOjpSVEwgPyBtaW5BcnJvd1NpemUgOiAwKSB9OwotfQotCi1ib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIC8vIEZJWE1F
OiBhZG9wdCBzdWJwaXhlbCB0aGVtZXMuCi0gICAgSW50UmVjdCByZWN0ID0gSW50UmVjdChyKTsK
LQotICAgIGNhaXJvX3QqIGNhaXJvQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZv
cm1Db250ZXh0KCktPmNyKCk7Ci0gICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0
aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5z
dHlsZSgpLmRpcmVjdGlvbigpKSk7Ci0KLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gcGFy
ZW50U3R5bGVDb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KENvbWJvQm94KTsKLQotICAgIC8v
IFBhaW50IHRoZSBidXR0b24uCi0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGJ1dHRvblN0
eWxlQ29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChDb21ib0JveEJ1dHRvbiwgcGFyZW50U3R5
bGVDb250ZXh0LmdldCgpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGJ1
dHRvblN0eWxlQ29udGV4dC5nZXQoKSwgZGlyZWN0aW9uKTsKLSAgICByZW5kZXJCdXR0b24odGhp
cywgYnV0dG9uU3R5bGVDb250ZXh0LmdldCgpLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVj
dCk7Ci0KLSAgICAvLyBHZXQgdGhlIGlubmVyIHJlY3RhbmdsZS4KLSAgICBnaW50IGZvY3VzV2lk
dGgsIGZvY3VzUGFkOwotICAgIEd0a0JvcmRlciogaW5uZXJCb3JkZXJQdHIgPSAwOwotICAgIEd0
a0JvcmRlciBpbm5lckJvcmRlciA9IHsgMSwgMSwgMSwgMSB9OwotICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldF9zdHlsZShidXR0b25TdHlsZUNvbnRleHQuZ2V0KCksICJpbm5lci1ib3JkZXIiLCAm
aW5uZXJCb3JkZXJQdHIsICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsICJmb2N1cy1w
YWRkaW5nIiwgJmZvY3VzUGFkLCBudWxscHRyKTsKLSAgICBpZiAoaW5uZXJCb3JkZXJQdHIpIHsK
LSAgICAgICAgaW5uZXJCb3JkZXIgPSAqaW5uZXJCb3JkZXJQdHI7Ci0gICAgICAgIGd0a19ib3Jk
ZXJfZnJlZShpbm5lckJvcmRlclB0cik7Ci0gICAgfQotCi0gICAgR3RrQm9yZGVyIGJvcmRlcldp
ZHRoOwotICAgIEd0a1N0YXRlRmxhZ3Mgc3RhdGUgPSBndGtfc3R5bGVfY29udGV4dF9nZXRfc3Rh
dGUoYnV0dG9uU3R5bGVDb250ZXh0LmdldCgpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
Ym9yZGVyKGJ1dHRvblN0eWxlQ29udGV4dC5nZXQoKSwgc3RhdGUsICZib3JkZXJXaWR0aCk7Ci0K
LSAgICBmb2N1c1dpZHRoICs9IGZvY3VzUGFkOwotICAgIEludFJlY3QgaW5uZXJSZWN0KAotICAg
ICAgICByZWN0LngoKSArIGlubmVyQm9yZGVyLmxlZnQgKyBib3JkZXJXaWR0aC5sZWZ0ICsgZm9j
dXNXaWR0aCwKLSAgICAgICAgcmVjdC55KCkgKyBpbm5lckJvcmRlci50b3AgKyBib3JkZXJXaWR0
aC50b3AgKyBmb2N1c1dpZHRoLAotICAgICAgICByZWN0LndpZHRoKCkgLSBib3JkZXJXaWR0aC5s
ZWZ0IC0gYm9yZGVyV2lkdGgucmlnaHQgLSBpbm5lckJvcmRlci5sZWZ0IC0gaW5uZXJCb3JkZXIu
cmlnaHQgLSAoMiAqIGZvY3VzV2lkdGgpLAotICAgICAgICByZWN0LmhlaWdodCgpIC0gYm9yZGVy
V2lkdGgudG9wIC0gYm9yZGVyV2lkdGguYm90dG9tIC0gaW5uZXJCb3JkZXIudG9wIC0gaW5uZXJC
b3JkZXIuYm90dG9tIC0gKDIgKiBmb2N1c1dpZHRoKSk7Ci0KLSAgICBpZiAoaXNQcmVzc2VkKHJl
bmRlck9iamVjdCkpIHsKLSAgICAgICAgZ2ludCBjaGlsZERpc3BsYWNlbWVudFg7Ci0gICAgICAg
IGdpbnQgY2hpbGREaXNwbGFjZW1lbnRZOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
c3R5bGUoYnV0dG9uU3R5bGVDb250ZXh0LmdldCgpLCAiY2hpbGQtZGlzcGxhY2VtZW50LXgiLCAm
Y2hpbGREaXNwbGFjZW1lbnRYLCAiY2hpbGQtZGlzcGxhY2VtZW50LXkiLCAmY2hpbGREaXNwbGFj
ZW1lbnRZLCBudWxscHRyKTsKLSAgICAgICAgaW5uZXJSZWN0Lm1vdmUoY2hpbGREaXNwbGFjZW1l
bnRYLCBjaGlsZERpc3BsYWNlbWVudFkpOwotICAgIH0KLSAgICBpbm5lclJlY3Quc2V0V2lkdGgo
c3RkOjptYXgoMSwgaW5uZXJSZWN0LndpZHRoKCkpKTsKLSAgICBpbm5lclJlY3Quc2V0SGVpZ2h0
KHN0ZDo6bWF4KDEsIGlubmVyUmVjdC5oZWlnaHQoKSkpOwotCi0gICAgLy8gUGFpbnQgdGhlIGFy
cm93LgotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBhcnJvd1N0eWxlQ29udGV4dCA9IGNy
ZWF0ZVN0eWxlQ29udGV4dChDb21ib0JveEFycm93LCBidXR0b25TdHlsZUNvbnRleHQuZ2V0KCkp
OwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oYXJyb3dTdHlsZUNvbnRleHQu
Z2V0KCksIGRpcmVjdGlvbik7Ci0KLSAgICBnZmxvYXQgYXJyb3dTY2FsaW5nOwotICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9zdHlsZShwYXJlbnRTdHlsZUNvbnRleHQuZ2V0KCksICJhcnJvdy1z
Y2FsaW5nIiwgJmFycm93U2NhbGluZywgbnVsbHB0cik7Ci0KLSAgICBJbnRTaXplIGFycm93U2l6
ZShtaW5BcnJvd1NpemUsIGlubmVyUmVjdC5oZWlnaHQoKSk7Ci0gICAgRmxvYXRQb2ludCBhcnJv
d1Bvc2l0aW9uKGlubmVyUmVjdC5sb2NhdGlvbigpKTsKLSAgICBpZiAoZGlyZWN0aW9uID09IEdU
S19URVhUX0RJUl9MVFIpCi0gICAgICAgIGFycm93UG9zaXRpb24ubW92ZShpbm5lclJlY3Qud2lk
dGgoKSAtIGFycm93U2l6ZS53aWR0aCgpLCAwKTsKLQotICAgIC8vIEdUSysgYWN0dWFsbHkgZmV0
Y2hlcyB0aGUgeGFsaWduIGFuZCB2YWxpZ24gdmFsdWVzIGZyb20gdGhlIHdpZGdldCwgYnV0IHNp
bmNlIHdlCi0gICAgLy8gZG9uJ3QgaGF2ZSBhIHdpZGdldCBoZXJlLCB3ZSBhcmUganVzdCB1c2lu
ZyB0aGUgZGVmYXVsdCB4YWxpZ24gYW5kIHZhbGlnbiB2YWx1ZXMgb2YgMC41LgotICAgIGdpbnQg
ZXh0ZW50ID0gc3RkOjptaW4oYXJyb3dTaXplLndpZHRoKCksIGFycm93U2l6ZS5oZWlnaHQoKSkg
KiBhcnJvd1NjYWxpbmc7Ci0gICAgYXJyb3dQb3NpdGlvbi5tb3ZlKChhcnJvd1NpemUud2lkdGgo
KSAtIGV4dGVudCkgLyAyLCAoYXJyb3dTaXplLmhlaWdodCgpIC0gZXh0ZW50KSAvIDIpOwotCi0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGFycm93U3R5bGVDb250ZXh0LmdldCgpLCBz
dGF0ZSk7Ci0gICAgZ3RrX3JlbmRlcl9hcnJvdyhhcnJvd1N0eWxlQ29udGV4dC5nZXQoKSwgY2Fp
cm9Db250ZXh0LCBHX1BJLCBhcnJvd1Bvc2l0aW9uLngoKSwgYXJyb3dQb3NpdGlvbi55KCksIGV4
dGVudCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJ
T04oMywgMjAsIDApCiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3RCdXR0b25E
ZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJCb3gmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZv
LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBhaW50TWVudUxpc3Qob2Jq
ZWN0LCBpbmZvLCByZWN0KTsKIH0KIAotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQot
CiBzdGF0aWMgSW50U2l6ZSBzcGluQnV0dG9uU2l6ZSgpCiB7CiAgICAgYXV0byYgc3BpbkJ1dHRv
bldpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lU3BpbkJ1dHRvbiY+KFJlbmRlclRoZW1l
V2lkZ2V0OjpnZXRPckNyZWF0ZShSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6U3BpbkJ1dHRvbikp
OwpAQCAtOTc3LDQyICs1MjMsNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRGaWVs
ZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbgogICAgIH0KICAg
ICByZXR1cm4gZmFsc2U7CiB9Ci0jZWxzZQotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0VGV4
dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCop
IGNvbnN0Ci17Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEZpZWxkKGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBj
b250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KEVudHJ5KTsKLSAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQuZ2V0KCksIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rp
b24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkpKSk7
Ci0KLSAgICBndWludCBmbGFncyA9IDA7Ci0gICAgaWYgKCFpc0VuYWJsZWQocmVuZGVyT2JqZWN0
KSB8fCBpc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBH
VEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKLSAgICBlbHNlIGlmIChpc0ZvY3VzZWQocmVuZGVy
T2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfRk9DVVNFRDsKLSAgICBn
dGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3Rr
U3RhdGVGbGFncz4oZmxhZ3MpKTsKLQotICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0
LmdldCgpLCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0
LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgZ3RrX3Jl
bmRlcl9mcmFtZShjb250ZXh0LmdldCgpLCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29u
dGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7Ci0KLSAgICBpZiAoaXNGb2N1c2VkKHJlbmRlck9iamVjdCkgJiYgaXNFbmFibGVkKHJl
bmRlck9iamVjdCkpIHsKLSAgICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1czsKLSAgICAgICAg
Z2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
X3N0eWxlKGNvbnRleHQuZ2V0KCksICJpbnRlcmlvci1mb2N1cyIsICZpbnRlcmlvckZvY3VzLCAi
Zm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLCAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1Bh
ZCwgbnVsbHB0cik7Ci0gICAgICAgIGlmICghaW50ZXJpb3JGb2N1cykgewotICAgICAgICAgICAg
SW50UmVjdCBmb2N1c1JlY3QocmVjdCk7Ci0gICAgICAgICAgICBmb2N1c1JlY3QuaW5mbGF0ZShm
b2N1c1dpZHRoICsgZm9jdXNQYWQpOwotICAgICAgICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250
ZXh0LmdldCgpLCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBm
b2N1c1JlY3QueCgpLCBmb2N1c1JlY3QueSgpLCBmb2N1c1JlY3Qud2lkdGgoKSwgZm9jdXNSZWN0
LmhlaWdodCgpKTsKLSAgICAgICAgfQotICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKLX0KLSNl
bmRpZgotCi0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCiBzdGF0aWMgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZEljb25TdHlsZShSZW5kZXJUaGVtZVBhcnQgdGhlbWVQYXJ0LCBSZW5kZXJT
dHlsZSYgc3R5bGUpCiB7CiAgICAgQVNTRVJUKHRoZW1lUGFydCA9PSBFbnRyeUljb25MZWZ0IHx8
IHRoZW1lUGFydCA9PSBFbnRyeUljb25SaWdodCk7CkBAIC0xMDMzLDU1ICs1NDQsNiBAQCBzdGF0
aWMgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShSZW5kZXJUaGVtZVBhcnQgdGhlbWVQ
YXJ0LCBSZW5kZXJTdHlsZSYgcwogICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChwcmVmZXJyZWRT
aXplLndpZHRoKCksIEZpeGVkKSk7CiAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChwcmVmZXJy
ZWRTaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQotI2Vsc2UKLS8vIERlZmluZWQgaW4gR1RLKyAo
Z3RrL2d0a2ljb25mYWN0b3J5LmMpCi1zdGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZU1lbnUg
PSAxNjsKLXN0YXRpYyBjb25zdCBnaW50IGd0a0ljb25TaXplU21hbGxUb29sYmFyID0gMTg7Ci1z
dGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZUJ1dHRvbiA9IDIwOwotc3RhdGljIGNvbnN0IGdp
bnQgZ3RrSWNvblNpemVMYXJnZVRvb2xiYXIgPSAyNDsKLXN0YXRpYyBjb25zdCBnaW50IGd0a0lj
b25TaXplRG5kID0gMzI7Ci1zdGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZURpYWxvZyA9IDQ4
OwotCi1zdGF0aWMgR3RrSWNvblNpemUgZ2V0SWNvblNpemVGb3JQaXhlbFNpemUoZ2ludCBwaXhl
bFNpemUpCi17Ci0gICAgaWYgKHBpeGVsU2l6ZSA8IGd0a0ljb25TaXplU21hbGxUb29sYmFyKQot
ICAgICAgICByZXR1cm4gR1RLX0lDT05fU0laRV9NRU5VOwotICAgIGlmIChwaXhlbFNpemUgPj0g
Z3RrSWNvblNpemVTbWFsbFRvb2xiYXIgJiYgcGl4ZWxTaXplIDwgZ3RrSWNvblNpemVCdXR0b24p
Ci0gICAgICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX1NNQUxMX1RPT0xCQVI7Ci0gICAgaWYgKHBp
eGVsU2l6ZSA+PSBndGtJY29uU2l6ZUJ1dHRvbiAmJiBwaXhlbFNpemUgPCBndGtJY29uU2l6ZUxh
cmdlVG9vbGJhcikKLSAgICAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfQlVUVE9OOwotICAgIGlm
IChwaXhlbFNpemUgPj0gZ3RrSWNvblNpemVMYXJnZVRvb2xiYXIgJiYgcGl4ZWxTaXplIDwgZ3Rr
SWNvblNpemVEbmQpCi0gICAgICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX0xBUkdFX1RPT0xCQVI7
Ci0gICAgaWYgKHBpeGVsU2l6ZSA+PSBndGtJY29uU2l6ZURuZCAmJiBwaXhlbFNpemUgPCBndGtJ
Y29uU2l6ZURpYWxvZykKLSAgICAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfRE5EOwotCi0gICAg
cmV0dXJuIEdUS19JQ09OX1NJWkVfRElBTE9HOwotfQotCi1zdGF0aWMgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZEljb25TdHlsZShSZW5kZXJUaGVtZVBhcnQgdGhlbWVQYXJ0LCBSZW5kZXJTdHlsZSYg
c3R5bGUpCi17Ci0gICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS5yZXNldFBhZGRp
bmcoKTsKLQotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBwYXJlbnRDb250ZXh0ID0gY3Jl
YXRlU3R5bGVDb250ZXh0KEVudHJ5KTsKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29u
dGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dCh0aGVtZVBhcnQsIHBhcmVudENvbnRleHQuZ2V0KCkp
OwotCi0gICAgR3RrQm9yZGVyIHBhZGRpbmc7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3Bh
ZGRpbmcoY29udGV4dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRlKGNvbnRleHQu
Z2V0KCkpLCAmcGFkZGluZyk7Ci0KLSAgICAvLyBHZXQgdGhlIGljb24gc2l6ZSBiYXNlZCBvbiB0
aGUgZm9udCBzaXplLgotICAgIGludCBmb250U2l6ZSA9IHN0eWxlLmNvbXB1dGVkRm9udFBpeGVs
U2l6ZSgpOwotICAgIGlmIChmb250U2l6ZSA8IGd0a0ljb25TaXplTWVudSkgewotICAgICAgICBz
dHlsZS5zZXRXaWR0aChMZW5ndGgoZm9udFNpemUgKyAocGFkZGluZy5sZWZ0ICsgcGFkZGluZy5y
aWdodCksIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoZm9udFNpemUg
KyAocGFkZGluZy50b3AgKyBwYWRkaW5nLmJvdHRvbSksIEZpeGVkKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgZ2ludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAgZ3RrX2ljb25f
c2l6ZV9sb29rdXAoZ2V0SWNvblNpemVGb3JQaXhlbFNpemUoZm9udFNpemUpLCAmd2lkdGgsICZo
ZWlnaHQpOwotICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aCh3aWR0aCArIChwYWRkaW5nLmxlZnQg
KyBwYWRkaW5nLnJpZ2h0KSwgRml4ZWQpKTsKLSAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGhl
aWdodCArIChwYWRkaW5nLnRvcCArIHBhZGRpbmcuYm90dG9tKSwgRml4ZWQpKTsKLX0KLSNlbmRp
ZgogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVj
dCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBGbG9hdFJlY3QmIHIpCiB7CkBAIC0xMTA4
LDcgKzU3MCw2IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0CiAgICAgYWRqdXN0U2VhcmNoRmll
bGRJY29uU3R5bGUoRW50cnlJY29uUmlnaHQsIHN0eWxlKTsKIH0KIAotI2lmIEdUS19DSEVDS19W
RVJTSU9OKDMsIDIwLCAwKQogc3RhdGljIGJvb2wgcGFpbnRTZWFyY2hGaWVsZEljb24oUmVuZGVy
VGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJUaGVtZVBhcnQgdGhlbWVQYXJ0LCBjb25zdCBSZW5kZXJC
b3gmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKHRoZW1lUGFydCA9PSBFbnRyeUljb25MZWZ0IHx8IHRo
ZW1lUGFydCA9PSBFbnRyeUljb25SaWdodCk7CkBAIC0xMTM1LDcyICs1OTYsNiBAQCBib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlckJv
eCYgcmVuZGVyT2JqZWN0LAogewogICAgIHJldHVybiBwYWludFNlYXJjaEZpZWxkSWNvbih0aGlz
LCBFbnRyeUljb25SaWdodCwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwogfQotI2Vs
c2UKLXN0YXRpYyBib29sIHBhaW50SWNvbihHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIEdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBj
aGFyKiBpY29uTmFtZSkKLXsKLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGxvYWRUaGVt
ZWRJY29uKGNvbnRleHQsIGljb25OYW1lLCBnZXRJY29uU2l6ZUZvclBpeGVsU2l6ZShyZWN0Lmhl
aWdodCgpKSk7Ci0gICAgaWYgKCFpY29uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoZ2RrX3BpeGJ1Zl9nZXRfd2lkdGgoaWNvbi5nZXQoKSkgPiByZWN0LndpZHRoKCkgfHwgZ2Rr
X3BpeGJ1Zl9nZXRfaGVpZ2h0KGljb24uZ2V0KCkpID4gcmVjdC5oZWlnaHQoKSkKLSAgICAgICAg
aWNvbiA9IGFkb3B0R1JlZihnZGtfcGl4YnVmX3NjYWxlX3NpbXBsZShpY29uLmdldCgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIEdES19JTlRFUlBfQklMSU5FQVIpKTsKLQotICAgIGd0
a19yZW5kZXJfaWNvbihjb250ZXh0LCBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCkt
PmNyKCksIGljb24uZ2V0KCksIHJlY3QueCgpLCByZWN0LnkoKSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXN0YXRpYyBib29sIHBhaW50RW50cnlJY29uKFJlbmRlclRoZW1lUGFydCB0aGVtZVBh
cnQsIGNvbnN0IGNoYXIqIGljb25OYW1lLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEd0a1N0
YXRlRmxhZ3Mgc3RhdGUpCi17Ci0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHBhcmVudENv
bnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoRW50cnkpOwotICAgIEdSZWZQdHI8R3RrU3R5bGVD
b250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KHRoZW1lUGFydCwgcGFyZW50Q29u
dGV4dC5nZXQoKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0
LmdldCgpLCBkaXJlY3Rpb24pOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250
ZXh0LmdldCgpLCBzdGF0ZSk7Ci0gICAgcmV0dXJuIHBhaW50SWNvbihjb250ZXh0LmdldCgpLCBn
cmFwaGljc0NvbnRleHQsIHJlY3QsIGljb25OYW1lKTsKLX0KLQotc3RhdGljIEludFJlY3QgY2Vu
dGVyUmVjdFZlcnRpY2FsbHlJblBhcmVudElucHV0RWxlbWVudChjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlck9iamVjdCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXJlbmRlck9i
amVjdC5ub2RlKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICAvLyBHZXQgdGhl
IHJlbmRlcmVyIG9mIDxpbnB1dD4gZWxlbWVudC4KLSAgICBOb2RlKiBpbnB1dCA9IHJlbmRlck9i
amVjdC5ub2RlKCktPnNoYWRvd0hvc3QoKTsKLSAgICBpZiAoIWlucHV0KQotICAgICAgICBpbnB1
dCA9IHJlbmRlck9iamVjdC5ub2RlKCk7Ci0gICAgaWYgKCFpczxSZW5kZXJCb3g+KCppbnB1dC0+
cmVuZGVyZXIoKSkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICAvLyBJZiBwb3Nz
aWJsZSBjZW50ZXIgdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgcmVjdCB2ZXJ0aWNhbGx5IGluIHRo
ZSBwYXJlbnQgaW5wdXQgZWxlbWVudC4KLSAgICAvLyBXZSBhbHNvIGFkZCBvbmUgcGl4ZWwgaGVy
ZSB0byBlbnN1cmUgdGhhdCB0aGUgeSBjb29yZGluYXRlIGlzIHJvdW5kZWQgdXAgZm9yIGJveCBo
ZWlnaHRzCi0gICAgLy8gdGhhdCBhcmUgZXZlbiwgd2hpY2ggbG9va3MgaW4gcmVsYXRpb24gdG8g
dGhlIGJveCB0ZXh0LgotICAgIEludFJlY3QgaW5wdXRDb250ZW50Qm94ID0gZG93bmNhc3Q8UmVu
ZGVyQm94PigqaW5wdXQtPnJlbmRlcmVyKCkpLmFic29sdXRlQ29udGVudEJveCgpOwotCi0gICAg
Ly8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwg
Zml0IGluIGl0cyBwYXJlbnQncyBib3guCi0gICAgaW50IGljb25TaXplID0gc3RkOjptaW4oaW5w
dXRDb250ZW50Qm94LndpZHRoKCksIHN0ZDo6bWluKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSwg
cmVjdC5oZWlnaHQoKSkpOwotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0LngoKSwgaW5wdXRD
b250ZW50Qm94LnkoKSArIChpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCkgLSBpY29uU2l6ZSArIDEp
IC8gMiwgaWNvblNpemUsIGljb25TaXplKTsKLSAgICByZXR1cm4gc2NhbGVkUmVjdDsKLX0KLQot
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFy
dChjb25zdCBSZW5kZXJCb3gmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgSW50UmVjdCBpY29uUmVjdCA9IGNlbnRl
clJlY3RWZXJ0aWNhbGx5SW5QYXJlbnRJbnB1dEVsZW1lbnQocmVuZGVyT2JqZWN0LCByZWN0KTsK
LSAgICBpZiAoaWNvblJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IHJldHVybiAhcGFpbnRFbnRyeUljb24oRW50cnlJY29uTGVmdCwgImVkaXQtZmluZC1zeW1ib2xp
YyIsIHBhaW50SW5mby5jb250ZXh0KCksIGljb25SZWN0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRl
ck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSwKLSAgICAgICAgZ3RrSWNvblN0YXRlRmxhZ3Mo
dGhpcywgcmVuZGVyT2JqZWN0KSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyQm94JiByZW5kZXJPYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEludFJl
Y3QgaWNvblJlY3QgPSBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50KHJl
bmRlck9iamVjdCwgcmVjdCk7Ci0gICAgaWYgKGljb25SZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gIXBhaW50RW50cnlJY29uKEVudHJ5SWNvblJpZ2h0
LCAiZWRpdC1jbGVhci1zeW1ib2xpYyIsIHBhaW50SW5mby5jb250ZXh0KCksIGljb25SZWN0LCBn
dGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSwKLSAgICAg
ICAgZ3RrSWNvblN0YXRlRmxhZ3ModGhpcywgcmVuZGVyT2JqZWN0KSk7Ci19Ci0jZW5kaWYgLy8g
R1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCiAKIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVz
dFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgRWxlbWVudCopIGNvbnN0CiB7CkBAIC0xMjMwLDcgKzYyNSw2IEBAIHZvaWQgUmVuZGVyVGhl
bWVHdGs6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgUmVuZGVyCiAgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi0jaWYgR1RL
X0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCiAvKgogICogR3RrU2NhbGUKICAqCkBAIC0xMzU4LDk4
ICs3NTIsNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJl
bmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYQogICAgIHNsaWRlci5yZW5kZXIocGFp
bnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgc2xpZGVyUmVjdCk7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQotI2Vsc2UKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xp
ZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIENvbnRyb2xQYXJ0IHBh
cnQgPSByZW5kZXJPYmplY3Quc3R5bGUoKS5hcHBlYXJhbmNlKCk7Ci0gICAgQVNTRVJUKHBhcnQg
PT0gU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpOwot
Ci0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHBhcmVudENvbnRleHQgPSBjcmVhdGVTdHls
ZUNvbnRleHQoU2NhbGUpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhwYXJlbnRD
b250ZXh0LmdldCgpLCBwYXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0ID8gR1RLX1NUWUxFX0NM
QVNTX0hPUklaT05UQUwgOiBHVEtfU1RZTEVfQ0xBU1NfVkVSVElDQUwpOwotICAgIEdSZWZQdHI8
R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KFNjYWxlVHJvdWdo
LCBwYXJlbnRDb250ZXh0LmdldCgpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0
aW9uKGNvbnRleHQuZ2V0KCksIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCku
ZGlyZWN0aW9uKCkpKTsKLQotICAgIGlmICghaXNFbmFibGVkKHJlbmRlck9iamVjdCkpCi0gICAg
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LmdldCgpLCBHVEtfU1RBVEVf
RkxBR19JTlNFTlNJVElWRSk7Ci0KLSAgICBJbnRSZWN0IHNsaWRlclJlY3QgPSByZWN0OwotICAg
IC8vIEdUSysgdXNlcyB0aGUgc2xpZGVyIHRodW1iIHNpemUgYW5kIG1hcmdpbnMgdG8gY2FsY3Vs
YXRlIHRoZSB0cm91Z2ggc2l6ZSwgYnV0IGluIFdlYktpdCB3ZSByZW5kZXIgdGhlIHRodW1iIGFu
ZAotICAgIC8vIHRoZSBzbGlkZXIgdHJhY2sgc2VwYXJhdGVseSBhbmQgdGhlIHRyYWNrIHJlY3Rh
bmdsZSB3ZSByZWNlaXZlIGhlcmUgY2FuJ3QgYmUgdXNlZCB0byBhcHBseSB0aGUgR1RLKyBDU1Mg
c2l6ZXMKLSAgICAvLyBhbmQgbWFyZ2lucy4gU28gd2UgdXNlIGEgbWF4aW11bSBmaXhlZCBzaXpl
IGZvciB0aGUgdHJvdWdoIHRvIG1hdGNoIGF0IGxlYXN0IEFkd2FpdGEsIGJ1dCB0aGF0IHNob3Vs
ZCBsb29rCi0gICAgLy8gZ29vZCBpbiBvdGhlciB0aGVtZXMgYXMgd2VsbC4KLSAgICBzdGF0aWMg
Y29uc3QgaW50IHNsaWRlclNpemUgPSA0OwotCi0gICAgaWYgKHBhcnQgPT0gU2xpZGVySG9yaXpv
bnRhbFBhcnQpIHsKLSAgICAgICAgc2xpZGVyUmVjdC5zZXRIZWlnaHQoc3RkOjptaW4ocmVjdC5o
ZWlnaHQoKSwgc2xpZGVyU2l6ZSkpOwotICAgICAgICBzbGlkZXJSZWN0Lm1vdmUoMCwgKHJlY3Qu
aGVpZ2h0KCkgLSBzbGlkZXJSZWN0LmhlaWdodCgpKSAvIDIpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHNsaWRlclJlY3Quc2V0V2lkdGgoc3RkOjptaW4ocmVjdC53aWR0aCgpLCBzbGlkZXJTaXpl
KSk7Ci0gICAgICAgIHNsaWRlclJlY3QubW92ZSgocmVjdC53aWR0aCgpIC0gc2xpZGVyUmVjdC53
aWR0aCgpKSAvIDIsIDApOwotICAgIH0KLQotICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250
ZXh0LmdldCgpLCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBz
bGlkZXJSZWN0LngoKSwgc2xpZGVyUmVjdC55KCksIHNsaWRlclJlY3Qud2lkdGgoKSwgc2xpZGVy
UmVjdC5oZWlnaHQoKSk7Ci0gICAgZ3RrX3JlbmRlcl9mcmFtZShjb250ZXh0LmdldCgpLCBwYWlu
dEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBzbGlkZXJSZWN0LngoKSwg
c2xpZGVyUmVjdC55KCksIHNsaWRlclJlY3Qud2lkdGgoKSwgc2xpZGVyUmVjdC5oZWlnaHQoKSk7
Ci0KLSAgICBpZiAoaXNGb2N1c2VkKHJlbmRlck9iamVjdCkpIHsKLSAgICAgICAgZ2ludCBmb2N1
c1dpZHRoLCBmb2N1c1BhZDsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNv
bnRleHQuZ2V0KCksICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsICJmb2N1cy1wYWRk
aW5nIiwgJmZvY3VzUGFkLCBudWxscHRyKTsKLSAgICAgICAgSW50UmVjdCBmb2N1c1JlY3Qoc2xp
ZGVyUmVjdCk7Ci0gICAgICAgIGZvY3VzUmVjdC5pbmZsYXRlKGZvY3VzV2lkdGggKyBmb2N1c1Bh
ZCk7Ci0gICAgICAgIGd0a19yZW5kZXJfZm9jdXMoY29udGV4dC5nZXQoKSwgcGFpbnRJbmZvLmNv
bnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgZm9jdXNSZWN0LngoKSwgZm9jdXNSZWN0
LnkoKSwgZm9jdXNSZWN0LndpZHRoKCksIGZvY3VzUmVjdC5oZWlnaHQoKSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJU
aHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKLXsKLSAg
ICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUuYXBwZWFyYW5jZSgpOwotICAgIGlmIChwYXJ0ICE9
IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgJiYgcGFydCAhPSBTbGlkZXJUaHVtYlZlcnRpY2Fs
UGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNv
bnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoU2NhbGUpOwotICAgIGdpbnQgc2xpZGVyV2lkdGgs
IHNsaWRlckxlbmd0aDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dC5n
ZXQoKSwgInNsaWRlci13aWR0aCIsICZzbGlkZXJXaWR0aCwgInNsaWRlci1sZW5ndGgiLCAmc2xp
ZGVyTGVuZ3RoLCBudWxscHRyKTsKLQotICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpv
bnRhbFBhcnQpIHsKLSAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNsaWRlckxlbmd0aCwg
Rml4ZWQpKTsKLSAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzbGlkZXJXaWR0aCwgRml4
ZWQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJU
aHVtYlZlcnRpY2FsUGFydCk7Ci0gICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNsaWRlcldpZHRo
LCBGaXhlZCkpOwotICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2xpZGVyTGVuZ3RoLCBGaXhl
ZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJl
bmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0
LnN0eWxlKCkuYXBwZWFyYW5jZSgpOwotICAgIEFTU0VSVChwYXJ0ID09IFNsaWRlclRodW1iSG9y
aXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCk7Ci0KLSAgICAv
LyBGSVhNRTogVGhlIGVudGlyZSBzbGlkZXIgaXMgdG9vIHdpZGUsIHN0cmV0Y2hpbmcgdGhlIHRo
dW1iIGludG8gYW4gb3ZhbCByYXRoZXIgdGhhbiBhIGNpcmNsZS4KLSAgICBHUmVmUHRyPEd0a1N0
eWxlQ29udGV4dD4gcGFyZW50Q29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChTY2FsZSk7Ci0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKHBhcmVudENvbnRleHQuZ2V0KCksIHBhcnQg
PT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCA/IEdUS19TVFlMRV9DTEFTU19IT1JJWk9OVEFM
IDogR1RLX1NUWUxFX0NMQVNTX1ZFUlRJQ0FMKTsKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4
dD4gdHJvdWdoQ29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChTY2FsZVRyb3VnaCwgcGFyZW50
Q29udGV4dC5nZXQoKSk7Ci0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQgPSBj
cmVhdGVTdHlsZUNvbnRleHQoU2NhbGVTbGlkZXIsIHRyb3VnaENvbnRleHQuZ2V0KCkpOwotICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dC5nZXQoKSwgZ3RrVGV4dERp
cmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwotCi0gICAgZ3VpbnQg
ZmxhZ3MgPSAwOwotICAgIGlmICghaXNFbmFibGVkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZs
YWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOwotICAgIGVsc2UgaWYgKGlzSG92ZXJl
ZChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdI
VDsKLSAgICBpZiAoaXNQcmVzc2VkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdU
S19TVEFURV9GTEFHX0FDVElWRTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29u
dGV4dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKLQotICAgIGd0
a19yZW5kZXJfc2xpZGVyKGNvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZv
cm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpLAotICAgICAgICBwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgPyBH
VEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCA6IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCk7Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKIAotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMs
IDIwLCAwKQogSW50UmVjdCBSZW5kZXJUaGVtZUd0azo6cHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRz
KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiBib3VuZHMp
IGNvbnN0CiB7CiAgICAgY29uc3QgYXV0byYgcmVuZGVyUHJvZ3Jlc3MgPSBkb3duY2FzdDxSZW5k
ZXJQcm9ncmVzcz4ocmVuZGVyT2JqZWN0KTsKQEAgLTE0NzIsNDkgKzc3NSw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVHdGs6OnBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhCiAgICAgcHJvZ3Jlc3NCYXJXaWRnZXQucHJvZ3Jlc3MoKS5yZW5kZXIo
cGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgY2FsY3VsYXRlUHJv
Z3Jlc3NSZWN0KHJlbmRlck9iamVjdCwgcmVjdCkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KLSNl
bHNlCi1JbnRSZWN0IFJlbmRlclRoZW1lR3RrOjpwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIHJl
dHVybiBib3VuZHM7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50UHJvZ3Jlc3NCYXIo
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghcmVuZGVyT2JqZWN0LmlzUHJv
Z3Jlc3MoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29u
dGV4dD4gcGFyZW50Q29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChQcm9ncmVzc0Jhcik7Ci0g
ICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHRyb3VnaENvbnRleHQgPSBjcmVhdGVTdHlsZUNv
bnRleHQoUHJvZ3Jlc3NCYXJUcm91Z2gsIHBhcmVudENvbnRleHQuZ2V0KCkpOwotICAgIEdSZWZQ
dHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KFByb2dyZXNz
QmFyUHJvZ3Jlc3MsIHRyb3VnaENvbnRleHQuZ2V0KCkpOwotCi0gICAgZ3RrX3JlbmRlcl9iYWNr
Z3JvdW5kKHRyb3VnaENvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1D
b250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKTsKLSAgICBndGtfcmVuZGVyX2ZyYW1lKHRyb3VnaENvbnRleHQuZ2V0KCksIHBhaW50
SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0Lnko
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0
X3NldF9zdGF0ZShjb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSk7
Ci0KLSAgICBHdGtCb3JkZXIgcGFkZGluZzsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFk
ZGluZyhjb250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoY29udGV4dC5n
ZXQoKSksICZwYWRkaW5nKTsKLSAgICBJbnRSZWN0IHByb2dyZXNzUmVjdCgKLSAgICAgICAgcmVj
dC54KCkgKyBwYWRkaW5nLmxlZnQsCi0gICAgICAgIHJlY3QueSgpICsgcGFkZGluZy50b3AsCi0g
ICAgICAgIHJlY3Qud2lkdGgoKSAtIChwYWRkaW5nLmxlZnQgKyBwYWRkaW5nLnJpZ2h0KSwKLSAg
ICAgICAgcmVjdC5oZWlnaHQoKSAtIChwYWRkaW5nLnRvcCArIHBhZGRpbmcuYm90dG9tKSk7Ci0g
ICAgcHJvZ3Jlc3NSZWN0ID0gUmVuZGVyVGhlbWVHdGs6OmNhbGN1bGF0ZVByb2dyZXNzUmVjdChy
ZW5kZXJPYmplY3QsIHByb2dyZXNzUmVjdCk7Ci0KLSAgICBpZiAoIXByb2dyZXNzUmVjdC5pc0Vt
cHR5KCkpIHsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxMywgNykKLSAgICAgICAgZ3RrX3Jl
bmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZv
cm1Db250ZXh0KCktPmNyKCksIHByb2dyZXNzUmVjdC54KCksIHByb2dyZXNzUmVjdC55KCksIHBy
b2dyZXNzUmVjdC53aWR0aCgpLCBwcm9ncmVzc1JlY3QuaGVpZ2h0KCkpOwotICAgICAgICBndGtf
cmVuZGVyX2ZyYW1lKGNvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1D
b250ZXh0KCktPmNyKCksIHByb2dyZXNzUmVjdC54KCksIHByb2dyZXNzUmVjdC55KCksIHByb2dy
ZXNzUmVjdC53aWR0aCgpLCBwcm9ncmVzc1JlY3QuaGVpZ2h0KCkpOwotI2Vsc2UKLSAgICAgICAg
Z3RrX3JlbmRlcl9hY3Rpdml0eShjb250ZXh0LmdldCgpLCBwYWludEluZm8uY29udGV4dCgpLnBs
YXRmb3JtQ29udGV4dCgpLT5jcigpLCBwcm9ncmVzc1JlY3QueCgpLCBwcm9ncmVzc1JlY3QueSgp
LCBwcm9ncmVzc1JlY3Qud2lkdGgoKSwgcHJvZ3Jlc3NSZWN0LmhlaWdodCgpKTsKLSNlbmRpZgot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lP
TigzLCAyMCwgMCkKIAotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQogUmVuZGVyVGhl
bWU6OklubmVyU3BpbkJ1dHRvbkxheW91dCBSZW5kZXJUaGVtZUd0azo6aW5uZXJTcGluQnV0dG9u
TGF5b3V0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0KSBjb25zdAogewogICAgIHJl
dHVybiByZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpS
VEwgPyBJbm5lclNwaW5CdXR0b25MYXlvdXQ6Okhvcml6b250YWxVcExlZnQgOiBJbm5lclNwaW5C
dXR0b25MYXlvdXQ6Okhvcml6b250YWxVcFJpZ2h0OwpAQCAtMTU1MSwxMTQgKzgxMiw2IEBAIGJv
b2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVj
dCYgcmVuZGVyT2JqZWN0LCBjb25zCiAKICAgICByZXR1cm4gZmFsc2U7CiB9Ci0jZWxzZQotUmVu
ZGVyVGhlbWU6OklubmVyU3BpbkJ1dHRvbkxheW91dCBSZW5kZXJUaGVtZUd0azo6aW5uZXJTcGlu
QnV0dG9uTGF5b3V0KGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElu
bmVyU3BpbkJ1dHRvbkxheW91dDo6VmVydGljYWw7Ci19Ci1zdGF0aWMgZ2ludCBzcGluQnV0dG9u
QXJyb3dTaXplKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBQYW5nb0ZvbnREZXNj
cmlwdGlvbiogZm9udERlc2NyaXB0aW9uOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldChjb250
ZXh0LCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoY29udGV4dCksICJmb250IiwgJmZvbnRE
ZXNjcmlwdGlvbiwgbnVsbHB0cik7Ci0gICAgZ2ludCBmb250U2l6ZSA9IHBhbmdvX2ZvbnRfZGVz
Y3JpcHRpb25fZ2V0X3NpemUoZm9udERlc2NyaXB0aW9uKTsKLSAgICBnaW50IGFycm93U2l6ZSA9
IHN0ZDo6bWF4KFBBTkdPX1BJWEVMUyhmb250U2l6ZSksIG1pblNwaW5CdXR0b25BcnJvd1NpemUp
OwotICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShmb250RGVzY3JpcHRpb24pOwotCi0g
ICAgcmV0dXJuIGFycm93U2l6ZSAtIGFycm93U2l6ZSAlIDI7IC8vIEZvcmNlIGV2ZW4uCi19Ci0K
LXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAotewotICAg
IEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KFNw
aW5CdXR0b24pOwotCi0gICAgR3RrQm9yZGVyIHBhZGRpbmc7Ci0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfZ2V0X3BhZGRpbmcoY29udGV4dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRl
KGNvbnRleHQuZ2V0KCkpLCAmcGFkZGluZyk7Ci0KLSAgICBpbnQgd2lkdGggPSBzcGluQnV0dG9u
QXJyb3dTaXplKGNvbnRleHQuZ2V0KCkpICsgcGFkZGluZy5sZWZ0ICsgcGFkZGluZy5yaWdodDsK
LSAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUuc2V0
TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotfQotCi1zdGF0aWMgdm9pZCBwYWludFNw
aW5BcnJvd0J1dHRvbihSZW5kZXJUaGVtZSogdGhlbWUsIEd0a1N0eWxlQ29udGV4dCogcGFyZW50
Q29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtBcnJvd1R5cGUgYXJyb3dUeXBl
KQotewotICAgIEFTU0VSVChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQIHx8IGFycm93VHlwZSA9
PSBHVEtfQVJST1dfRE9XTik7Ci0KLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4
dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQID8gU3BpbkJ1
dHRvblVwQnV0dG9uIDogU3BpbkJ1dHRvbkRvd25CdXR0b24sIHBhcmVudENvbnRleHQpOwotICAg
IEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2RpcmVj
dGlvbihjb250ZXh0LmdldCgpKTsKLSAgICBndWludCBzdGF0ZSA9IHN0YXRpY19jYXN0PGd1aW50
PihndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoY29udGV4dC5nZXQoKSkpOwotICAgIGlmICgh
KHN0YXRlICYgR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkUpKSB7Ci0gICAgICAgIGlmICh0aGVt
ZS0+aXNQcmVzc2VkKHJlbmRlck9iamVjdCkpIHsKLSAgICAgICAgICAgIGlmICgoYXJyb3dUeXBl
ID09IEdUS19BUlJPV19VUCAmJiB0aGVtZS0+aXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChyZW5k
ZXJPYmplY3QpKQotICAgICAgICAgICAgICAgIHx8IChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX0RP
V04gJiYgIXRoZW1lLT5pc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKHJlbmRlck9iamVjdCkpKQot
ICAgICAgICAgICAgICAgIHN0YXRlIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsKLSAgICAgICAg
fSBlbHNlIGlmICh0aGVtZS0+aXNIb3ZlcmVkKHJlbmRlck9iamVjdCkpIHsKLSAgICAgICAgICAg
IGlmICgoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCAmJiB0aGVtZS0+aXNTcGluVXBCdXR0b25Q
YXJ0SG92ZXJlZChyZW5kZXJPYmplY3QpKQotICAgICAgICAgICAgICAgIHx8IChhcnJvd1R5cGUg
PT0gR1RLX0FSUk9XX0RPV04gJiYgIXRoZW1lLT5pc1NwaW5VcEJ1dHRvblBhcnRIb3ZlcmVkKHJl
bmRlck9iamVjdCkpKQotICAgICAgICAgICAgICAgIHN0YXRlIHw9IEdUS19TVEFURV9GTEFHX1BS
RUxJR0hUOwotICAgICAgICB9Ci0gICAgfQotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0
ZShjb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihzdGF0ZSkpOwotCi0g
ICAgLy8gUGFpbnQgYnV0dG9uLgotICAgIEludFJlY3QgYnV0dG9uUmVjdChyZWN0KTsKLSAgICBn
dWludCBqdW5jdGlvbiA9IGd0a19zdHlsZV9jb250ZXh0X2dldF9qdW5jdGlvbl9zaWRlcyhjb250
ZXh0LmdldCgpKTsKLSAgICBpZiAoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCkKLSAgICAgICAg
anVuY3Rpb24gfD0gR1RLX0pVTkNUSU9OX0JPVFRPTTsKLSAgICBlbHNlIHsKLSAgICAgICAganVu
Y3Rpb24gfD0gR1RLX0pVTkNUSU9OX1RPUDsKLSAgICAgICAgYnV0dG9uUmVjdC5tb3ZlKDAsIHJl
Y3QuaGVpZ2h0KCkgLyAyKTsKLSAgICB9Ci0gICAgYnV0dG9uUmVjdC5zZXRIZWlnaHQocmVjdC5o
ZWlnaHQoKSAvIDIpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9qdW5jdGlvbl9zaWRlcyhj
b250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtKdW5jdGlvblNpZGVzPihqdW5jdGlvbikpOwot
Ci0gICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250
ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRvblJlY3QueCgpLCBidXR0b25SZWN0
LnkoKSwgYnV0dG9uUmVjdC53aWR0aCgpLCBidXR0b25SZWN0LmhlaWdodCgpKTsKLSAgICBndGtf
cmVuZGVyX2ZyYW1lKGNvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1D
b250ZXh0KCktPmNyKCksIGJ1dHRvblJlY3QueCgpLCBidXR0b25SZWN0LnkoKSwgYnV0dG9uUmVj
dC53aWR0aCgpLCBidXR0b25SZWN0LmhlaWdodCgpKTsKLQotICAgIC8vIFBhaW50IGFycm93IGNl
bnRlcmVkIGluc2lkZSBidXR0b24uCi0gICAgLy8gVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGd0a3Nw
aW5idXR0b24uYyBjb2RlLgotICAgIEludFJlY3QgYXJyb3dSZWN0OwotICAgIGdkb3VibGUgYW5n
bGU7Ci0gICAgaWYgKGFycm93VHlwZSA9PSBHVEtfQVJST1dfVVApIHsKLSAgICAgICAgYW5nbGUg
PSAwOwotICAgICAgICBhcnJvd1JlY3Quc2V0WShyZWN0LnkoKSk7Ci0gICAgICAgIGFycm93UmVj
dC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAvIDIgLSAyKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBhbmdsZSA9IEdfUEk7Ci0gICAgICAgIGFycm93UmVjdC5zZXRZKHJlY3QueSgpICsgYnV0dG9u
UmVjdC55KCkpOwotICAgICAgICBhcnJvd1JlY3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkgLSBh
cnJvd1JlY3QueSgpIC0gMik7Ci0gICAgfQotICAgIGFycm93UmVjdC5zZXRXaWR0aChyZWN0Lndp
ZHRoKCkgLSAzKTsKLSAgICBpZiAoZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIpCi0gICAg
ICAgIGFycm93UmVjdC5zZXRYKHJlY3QueCgpICsgMSk7Ci0gICAgZWxzZQotICAgICAgICBhcnJv
d1JlY3Quc2V0WChyZWN0LngoKSArIDIpOwotCi0gICAgZ2ludCB3aWR0aCA9IGFycm93UmVjdC53
aWR0aCgpIC8gMjsKLSAgICB3aWR0aCAtPSB3aWR0aCAlIDIgLSAxOyAvLyBGb3JjZSBvZGQuCi0g
ICAgZ2ludCBoZWlnaHQgPSAod2lkdGggKyAxKSAvIDI7Ci0KLSAgICBhcnJvd1JlY3QubW92ZSgo
YXJyb3dSZWN0LndpZHRoKCkgLSB3aWR0aCkgLyAyLCAoYXJyb3dSZWN0LmhlaWdodCgpIC0gaGVp
Z2h0KSAvIDIpOwotICAgIGd0a19yZW5kZXJfYXJyb3coY29udGV4dC5nZXQoKSwgcGFpbnRJbmZv
LmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYW5nbGUsIGFycm93UmVjdC54KCks
IGFycm93UmVjdC55KCksIHdpZHRoKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRJ
bm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEdSZWZQdHI8
R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KFNwaW5CdXR0b24p
OwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dC5nZXQoKSwgZ3Rr
VGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwotCi0gICAg
Z3VpbnQgZmxhZ3MgPSAwOwotICAgIGlmICghaXNFbmFibGVkKHJlbmRlck9iamVjdCkgfHwgaXNS
ZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRF
X0ZMQUdfSU5TRU5TSVRJVkU7Ci0gICAgZWxzZSBpZiAoaXNGb2N1c2VkKHJlbmRlck9iamVjdCkp
Ci0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0ZPQ1VTRUQ7Ci0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQuZ2V0KCksIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxh
Z3M+KGZsYWdzKSk7Ci0KLSAgICBwYWludFNwaW5BcnJvd0J1dHRvbih0aGlzLCBjb250ZXh0Lmdl
dCgpLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCwgR1RLX0FSUk9XX1VQKTsKLSAgICBw
YWludFNwaW5BcnJvd0J1dHRvbih0aGlzLCBjb250ZXh0LmdldCgpLCByZW5kZXJPYmplY3QsIHBh
aW50SW5mbywgcmVjdCwgR1RLX0FSUk9XX0RPV04pOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
I2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQogCiBTZWNvbmRzIFJlbmRlclRo
ZW1lR3RrOjpjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdAogewpAQCAtMTY3Nyw3ICs4MzAsNiBA
QCBTZWNvbmRzIFJlbmRlclRoZW1lR3RrOjpjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdAogCiBl
bnVtIFN0eWxlQ29sb3JUeXBlIHsgU3R5bGVDb2xvckJhY2tncm91bmQsIFN0eWxlQ29sb3JGb3Jl
Z3JvdW5kIH07CiAKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKIHN0YXRpYyBDb2xv
ciBzdHlsZUNvbG9yKFJlbmRlclRoZW1lUGFydCB0aGVtZVBhcnQsIEd0a1N0YXRlRmxhZ3Mgc3Rh
dGUsIFN0eWxlQ29sb3JUeXBlIGNvbG9yVHlwZSkKIHsKICAgICBSZW5kZXJUaGVtZUdhZGdldCog
Z2FkZ2V0ID0gbnVsbHB0cjsKQEAgLTE3MDYsMjAgKzg1OCw2IEBAIHN0YXRpYyBDb2xvciBzdHls
ZUNvbG9yKFJlbmRlclRoZW1lUGFydCB0aGVtZVBhcnQsIEd0a1N0YXRlRmxhZ3Mgc3RhdGUsIFN0
eWxlQ29sCiAgICAgZ2FkZ2V0LT5zZXRTdGF0ZShzdGF0ZSk7CiAgICAgcmV0dXJuIGNvbG9yVHlw
ZSA9PSBTdHlsZUNvbG9yQmFja2dyb3VuZCA/IGdhZGdldC0+YmFja2dyb3VuZENvbG9yKCkgOiBn
YWRnZXQtPmNvbG9yKCk7CiB9Ci0jZWxzZQotc3RhdGljIENvbG9yIHN0eWxlQ29sb3IoUmVuZGVy
VGhlbWVQYXJ0IHRoZW1lUGFydCwgR3RrU3RhdGVGbGFncyBzdGF0ZSwgU3R5bGVDb2xvclR5cGUg
Y29sb3JUeXBlKQotewotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3Jl
YXRlU3R5bGVDb250ZXh0KHRoZW1lUGFydCk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0
YXRlKGNvbnRleHQuZ2V0KCksIHN0YXRlKTsKLQotICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOwot
ICAgIGlmIChjb2xvclR5cGUgPT0gU3R5bGVDb2xvckJhY2tncm91bmQpCi0gICAgICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRleHQuZ2V0KCksIHN0YXRlLCAm
Z2RrUkdCQUNvbG9yKTsKLSAgICBlbHNlCi0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9j
b2xvcihjb250ZXh0LmdldCgpLCBzdGF0ZSwgJmdka1JHQkFDb2xvcik7Ci0gICAgcmV0dXJuIGdk
a1JHQkFDb2xvcjsKLX0KLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKIAog
Q29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QKIHsKQEAgLTE3NzksNyAr
OTE3LDYgQEAgQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnN5c3RlbUNvbG9yKENTU1ZhbHVlSUQgY3Nz
VmFsdWVJZCwgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok8KICAgICAgICAgcmV0dXJuIHN0eWxlQ29s
b3IoRW50cnksIEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFLCBTdHlsZUNvbG9yRm9yZWdyb3Vu
ZCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdENvbnRyb2xCYWNrZ3JvdW5kOgogICAgICAgICBy
ZXR1cm4gc3R5bGVDb2xvcihFbnRyeSwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFLCBTdHlsZUNvbG9y
QmFja2dyb3VuZCk7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCiAgICAgY2FzZSBD
U1NWYWx1ZVdpbmRvdzogewogICAgICAgICAvLyBPbmx5IGdldCB3aW5kb3cgY29sb3IgZnJvbSB0
aGUgdGhlbWUgaW4gZGFyayBtb2RlLgogICAgICAgICBnYm9vbGVhbiBwcmVmZXJEYXJrVGhlbWUg
PSBGQUxTRTsKQEAgLTE3ODksNyArOTI2LDYgQEAgQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnN5c3Rl
bUNvbG9yKENTU1ZhbHVlSUQgY3NzVmFsdWVJZCwgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok8KICAg
ICAgICAgICAgIHJldHVybiBzdHlsZUNvbG9yKFdpbmRvdywgR1RLX1NUQVRFX0ZMQUdfQUNUSVZF
LCBTdHlsZUNvbG9yQmFja2dyb3VuZCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSNlbmRpZgog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE4MTUsNyArOTUxLDYgQEAg
U3RyaW5nIFJlbmRlclRoZW1lR3RrOjpleHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCkKIH0KICNl
bmRpZgogCi0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCiBib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludE1lZGlhQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
c3QgY2hhciogaWNvbk5hbWUpCiB7CiAgICAgYXV0byYgaWNvbldpZGdldCA9IHN0YXRpY19jYXN0
PFJlbmRlclRoZW1lSWNvbiY+KFJlbmRlclRoZW1lV2lkZ2V0OjpnZXRPckNyZWF0ZShSZW5kZXJU
aGVtZVdpZGdldDo6VHlwZTo6SWNvbikpOwpAQCAtMTgyNSwxNyArOTYwLDYgQEAgYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRNZWRpYUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9i
amVjdCwgR3JhcGhpY3MKICAgICBpY29uLnNldEljb25OYW1lKGljb25OYW1lKTsKICAgICByZXR1
cm4gIWljb24ucmVuZGVyKGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwg
cmVjdCk7CiB9Ci0jZWxzZQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUJ1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IGNoYXIqIGljb25OYW1lKQotewot
ICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0
KE1lZGlhQnV0dG9uKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRl
eHQuZ2V0KCksIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9u
KCkpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dC5nZXQoKSwgZ3Rr
SWNvblN0YXRlRmxhZ3ModGhpcywgcmVuZGVyT2JqZWN0KSk7Ci0gICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG1lZGlhSWNvblNpemUgPSAxNjsKLSAgICBJbnRSZWN0IGljb25SZWN0KHJlY3QueCgp
ICsgKHJlY3Qud2lkdGgoKSAtIG1lZGlhSWNvblNpemUpIC8gMiwgcmVjdC55KCkgKyAocmVjdC5o
ZWlnaHQoKSAtIG1lZGlhSWNvblNpemUpIC8gMiwgbWVkaWFJY29uU2l6ZSwgbWVkaWFJY29uU2l6
ZSk7Ci0gICAgcmV0dXJuICFwYWludEljb24oY29udGV4dC5nZXQoKSwgZ3JhcGhpY3NDb250ZXh0
LCBpY29uUmVjdCwgaWNvbk5hbWUpOwotfQotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDMs
IDIwLCAwKQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpoYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxp
bmdGb3IoQ29udHJvbFBhcnQgcGFydCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcAppbmRleCAz
YmU2NDhjMDBjMTRhZDE0MDAwODI1N2RjODM2MzYxM2VmZTU0NWUzLi44ZmNmYmNhY2VlMDRkY2U5
YmVjOGI0MGE0YWIxODk1MjA0NWMzZjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCkBAIC0xNTcsMTAg
KzE1Nyw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y3JlYXRlUmVxdWVzdChSZXNvdXJj
ZVJlcXVlc3QmJiByZXF1ZXN0KQogICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfY29u
dGVudF9sZW5ndGgoc291cE1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgMCk7CiAKICAgICBzb3Vw
X21lc3NhZ2Vfc2V0X2ZsYWdzKHNvdXBNZXNzYWdlLmdldCgpLCBzdGF0aWNfY2FzdDxTb3VwTWVz
c2FnZUZsYWdzPihzb3VwX21lc3NhZ2VfZ2V0X2ZsYWdzKHNvdXBNZXNzYWdlLmdldCgpKSB8IG1l
c3NhZ2VGbGFncykpOwotCi0jaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDQzLCAxKQogICAgIHNv
dXBfbWVzc2FnZV9zZXRfcHJpb3JpdHkoc291cE1lc3NhZ2UuZ2V0KCksIHRvU291cE1lc3NhZ2VQ
cmlvcml0eShtX2N1cnJlbnRSZXF1ZXN0LnByaW9yaXR5KCkpKTsKLSNlbmRpZgogCiAgICAgbV9z
b3VwUmVxdWVzdCA9IFdURk1vdmUoc291cFJlcXVlc3QpOwogICAgIG1fc291cE1lc3NhZ2UgPSBX
VEZNb3ZlKHNvdXBNZXNzYWdlKTsKQEAgLTE3MCwxMSArMTY3LDcgQEAgdm9pZCBOZXR3b3JrRGF0
YVRhc2tTb3VwOjpjcmVhdGVSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpCiAgICAg
Z19zaWduYWxfY29ubmVjdChzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXAmPihtX3Nlc3Np
b24uZ2V0KCkpLnNvdXBTZXNzaW9uKCksICJhdXRoZW50aWNhdGUiLCAgR19DQUxMQkFDSyhhdXRo
ZW50aWNhdGVDYWxsYmFjayksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9zb3VwTWVz
c2FnZS5nZXQoKSwgIm5ldHdvcmstZXZlbnQiLCBHX0NBTExCQUNLKG5ldHdvcmtFdmVudENhbGxi
YWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAi
cmVzdGFydGVkIiwgR19DQUxMQkFDSyhyZXN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOwotI2lmIFNP
VVBfQ0hFQ0tfVkVSU0lPTigyLCA0OSwgOTEpCiAgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBN
ZXNzYWdlLmdldCgpLCAic3RhcnRpbmciLCBHX0NBTExCQUNLKHN0YXJ0aW5nQ2FsbGJhY2spLCB0
aGlzKTsKLSNlbHNlCi0gICAgZ19zaWduYWxfY29ubmVjdChzdGF0aWNfY2FzdDxOZXR3b3JrU2Vz
c2lvblNvdXAmPihtX3Nlc3Npb24uZ2V0KCkpLnNvdXBTZXNzaW9uKCksICJyZXF1ZXN0LXN0YXJ0
ZWQiLCBHX0NBTExCQUNLKHJlcXVlc3RTdGFydGVkQ2FsbGJhY2spLCB0aGlzKTsKLSNlbmRpZgog
fQogCiB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNsZWFyUmVxdWVzdCgpCkBAIC05MjEsMTMg
KzkxNCw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6d3JpdGVEb3dubG9hZENhbGxiYWNr
KEdPdXRwdXRTdHJlYW0qIG91dHB1dFN0cmVhbSwgR0FzCiAKICAgICBHVW5pcXVlT3V0UHRyPEdF
cnJvcj4gZXJyb3I7CiAgICAgZ3NpemUgYnl0ZXNXcml0dGVuOwotI2lmIEdMSUJfQ0hFQ0tfVkVS
U0lPTigyLCA0NCwgMCkKICAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsX2ZpbmlzaChvdXRw
dXRTdHJlYW0sIHJlc3VsdCwgJmJ5dGVzV3JpdHRlbiwgJmVycm9yLm91dFB0cigpKTsKLSNlbHNl
Ci0gICAgZ3NzaXplIHdyaXRlVGFza1Jlc3VsdCA9IGdfdGFza19wcm9wYWdhdGVfaW50KEdfVEFT
SyhyZXN1bHQpLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGlmICh3cml0ZVRhc2tSZXN1bHQgIT0g
LTEpCi0gICAgICAgIGJ5dGVzV3JpdHRlbiA9IHdyaXRlVGFza1Jlc3VsdDsKLSNlbmRpZgogICAg
IGlmIChlcnJvcikKICAgICAgICAgdGFzay0+ZGlkRmFpbERvd25sb2FkKGRvd25sb2FkRGVzdGlu
YXRpb25FcnJvcih0YXNrLT5tX3Jlc3BvbnNlLCBlcnJvci0+bWVzc2FnZSkpOwogICAgIGVsc2UK
QEAgLTkzNywzMSArOTI0LDggQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjp3cml0ZURvd25s
b2FkQ2FsbGJhY2soR091dHB1dFN0cmVhbSogb3V0cHV0U3RyZWFtLCBHQXMKIHZvaWQgTmV0d29y
a0RhdGFUYXNrU291cDo6d3JpdGVEb3dubG9hZCgpCiB7CiAgICAgUmVmUHRyPE5ldHdvcmtEYXRh
VGFza1NvdXA+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0jaWYgR0xJQl9DSEVDS19WRVJTSU9OKDIs
IDQ0LCAwKQogICAgIGdfb3V0cHV0X3N0cmVhbV93cml0ZV9hbGxfYXN5bmMobV9kb3dubG9hZE91
dHB1dFN0cmVhbS5nZXQoKSwgbV9yZWFkQnVmZmVyLmRhdGEoKSwgbV9yZWFkQnVmZmVyLnNpemUo
KSwgUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpBc3luY0lPTmV0d29yaywgbV9jYW5jZWxsYWJsZS5n
ZXQoKSwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPih3cml0
ZURvd25sb2FkQ2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7Ci0jZWxzZQotICAg
IEdSZWZQdHI8R1Rhc2s+IHdyaXRlVGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1fZG93bmxv
YWRPdXRwdXRTdHJlYW0uZ2V0KCksIG1fY2FuY2VsbGFibGUuZ2V0KCksCi0gICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4od3JpdGVEb3dubG9hZENhbGxiYWNrKSwg
cHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpKTsKLSAgICBnX3Rhc2tfc2V0X3Rhc2tfZGF0YSh3cml0
ZVRhc2suZ2V0KCksIHRoaXMsIG51bGxwdHIpOwotICAgIGdfdGFza19ydW5faW5fdGhyZWFkKHdy
aXRlVGFzay5nZXQoKSwgW10oR1Rhc2sqIHdyaXRlVGFzaywgZ3BvaW50ZXIgc291cmNlLCBncG9p
bnRlciB1c2VyRGF0YSwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSkgewotICAgICAgICBhdXRv
KiB0YXNrID0gc3RhdGljX2Nhc3Q8TmV0d29ya0RhdGFUYXNrU291cCo+KHVzZXJEYXRhKTsKLSAg
ICAgICAgR091dHB1dFN0cmVhbSogb3V0cHV0U3RyZWFtID0gR19PVVRQVVRfU1RSRUFNKHNvdXJj
ZSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHRhc2stPm1fZG93bmxvYWRPdXRwdXRTdHJlYW0u
Z2V0KCkgPT0gb3V0cHV0U3RyZWFtKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFzay0+bV9j
YW5jZWxsYWJsZS5nZXQoKSA9PSBjYW5jZWxsYWJsZSk7Ci0gICAgICAgIEdFcnJvciogZXJyb3Ig
PSBudWxscHRyOwotICAgICAgICBpZiAoZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2Vs
bGVkKGNhbmNlbGxhYmxlLCAmZXJyb3IpKSB7Ci0gICAgICAgICAgICBnX3Rhc2tfcmV0dXJuX2Vy
cm9yKHdyaXRlVGFzaywgZXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgZ3NpemUgYnl0ZXNXcml0dGVuOwotICAgICAgICBpZiAoZ19vdXRwdXRfc3RyZWFt
X3dyaXRlX2FsbChvdXRwdXRTdHJlYW0sIHRhc2stPm1fcmVhZEJ1ZmZlci5kYXRhKCksIHRhc2st
Pm1fcmVhZEJ1ZmZlci5zaXplKCksICZieXRlc1dyaXR0ZW4sIGNhbmNlbGxhYmxlLCAmZXJyb3Ip
KQotICAgICAgICAgICAgZ190YXNrX3JldHVybl9pbnQod3JpdGVUYXNrLCBieXRlc1dyaXR0ZW4p
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnX3Rhc2tfcmV0dXJuX2Vycm9yKHdyaXRlVGFz
aywgZXJyb3IpOwotICAgIH0pOwotI2VuZGlmCiB9CiAKIHZvaWQgTmV0d29ya0RhdGFUYXNrU291
cDo6ZGlkV3JpdGVEb3dubG9hZChnc2l6ZSBieXRlc1dyaXR0ZW4pCkBAIC0xMDg0LDcgKzEwNDgs
NiBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6Om5ldHdvcmtFdmVudChHU29ja2V0Q2xpZW50
RXZlbnQgZXZlbnQsIEdJT1N0cmVhbSogc3RyZQogICAgIH0KIH0KIAotI2lmIFNPVVBfQ0hFQ0tf
VkVSU0lPTigyLCA0OSwgOTEpCiB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnN0YXJ0aW5nQ2Fs
bGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNr
KQogewogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+
c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkKQEAgLTEwOTMs
MTkgKzEwNTYsNiBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnN0YXJ0aW5nQ2FsbGJhY2so
U291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBOZXR3b3JrRGF0YQogICAgIEFTU0VSVCh0YXNrLT5t
X3NvdXBNZXNzYWdlLmdldCgpID09IHNvdXBNZXNzYWdlKTsKICAgICB0YXNrLT5kaWRTdGFydFJl
cXVlc3QoKTsKIH0KLSNlbHNlCi12b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlcXVlc3RTdGFy
dGVkQ2FsbGJhY2soU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2Fn
ZSwgU291cFNvY2tldCosIE5ldHdvcmtEYXRhVGFza1NvdXAqIHRhc2spCi17Ci0gICAgQVNTRVJU
KHNlc3Npb24gPT0gc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4odGFzay0+bV9zZXNz
aW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpKTsKLSAgICBpZiAoc291cE1lc3NhZ2UgIT0gdGFzay0+
bV9zb3VwTWVzc2FnZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHRhc2stPnN0
YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21w
bGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICB0YXNrLT5k
aWRTdGFydFJlcXVlc3QoKTsKLX0KLSNlbmRpZgogCiB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6
OmRpZFN0YXJ0UmVxdWVzdCgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9n
dGsvV2ViRXZlbnRGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9XZWJFdmVu
dEZhY3RvcnkuY3BwCmluZGV4IGFhYjc1YTU5MDkxNTg5YTNkZTY2NWU1NTFmYTZjMzMwZDAzNzQy
Y2MuLmRhZWExNTI2ZjM4YjRjZDcyZTllZmRhY2MzN2IzMzc4ZTBmMTRhYmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCkBAIC03MiwxMSArNzIsNyBA
QCBzdGF0aWMgaW5saW5lIE9wdGlvblNldDxXZWJFdmVudDo6TW9kaWZpZXI+IG1vZGlmaWVyc0Zv
ckV2ZW50KGNvbnN0IEdka0V2ZW50KiBldgogc3RhdGljIGlubGluZSBXZWJNb3VzZUV2ZW50OjpC
dXR0b24gYnV0dG9uRm9yRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogewogICAgIHVuc2ln
bmVkIGJ1dHRvbiA9IDA7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTAsIDApCiAgICAgR2Rr
RXZlbnRUeXBlIHR5cGUgPSBnZGtfZXZlbnRfZ2V0X2V2ZW50X3R5cGUoZXZlbnQpOwotI2Vsc2UK
LSAgICBHZGtFdmVudFR5cGUgdHlwZSA9IGV2ZW50LT50eXBlOwotI2VuZGlmCiAgICAgc3dpdGNo
ICh0eXBlKSB7CiAgICAgY2FzZSBHREtfRU5URVJfTk9USUZZOgogICAgIGNhc2UgR0RLX0xFQVZF
X05PVElGWToKQEAgLTE1MywxMSArMTQ5LDcgQEAgV2ViTW91c2VFdmVudCBXZWJFdmVudEZhY3Rv
cnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBpbnQgY3UKIAog
ICAgIFdlYkV2ZW50OjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxXZWJFdmVudDo6VHlwZT4oMCk7
CiAKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxMCwgMCkKICAgICBHZGtFdmVudFR5cGUgZXZl
bnRUeXBlID0gZ2RrX2V2ZW50X2dldF9ldmVudF90eXBlKGV2ZW50KTsKLSNlbHNlCi0gICAgR2Rr
RXZlbnRUeXBlIGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlOwotI2VuZGlmCiAgICAgc3dpdGNoIChl
dmVudFR5cGUpIHsKICAgICBjYXNlIEdES19NT1RJT05fTk9USUZZOgogICAgIGNhc2UgR0RLX0VO
VEVSX05PVElGWToKQEAgLTE5NywxOCArMTg5LDkgQEAgV2ViTW91c2VFdmVudCBXZWJFdmVudEZh
Y3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBpbnQgY3UK
IAogV2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoY29u
c3QgR2RrRXZlbnQqIGV2ZW50KQogewotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQog
ICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNlID0gZ2RrX2V2ZW50X2lzX3Njcm9sbF9zdG9w
X2V2ZW50KGV2ZW50KSA/CiAgICAgICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUVuZGVk
IDoKICAgICAgICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQ2hhbmdlZDsKLSNlbHNlCi0g
ICAgZG91YmxlIGRlbHRhWCwgZGVsdGFZOwotICAgIGdka19ldmVudF9nZXRfc2Nyb2xsX2RlbHRh
cyhldmVudCwgJmRlbHRhWCwgJmRlbHRhWSk7Ci0gICAgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhh
c2UgPSBldmVudC0+c2Nyb2xsLmRpcmVjdGlvbiA9PSBHREtfU0NST0xMX1NNT09USCAmJiAhZGVs
dGFYICYmICFkZWx0YVkgPwotICAgICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VFbmRl
ZCA6Ci0gICAgICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQ7Ci0jZW5kaWYK
LQogICAgIHJldHVybiBjcmVhdGVXZWJXaGVlbEV2ZW50KGV2ZW50LCBwaGFzZSwgV2ViV2hlZWxF
dmVudDo6UGhhc2U6OlBoYXNlTm9uZSk7CiB9CiAKQEAgLTI2OSwxMiArMjUyLDcgQEAgV2ViS2V5
Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoY29uc3Qg
R2RrRXZlbnQqIGV2ZW50LAogICAgIGdka19ldmVudF9nZXRfa2V5dmFsKGV2ZW50LCAma2V5dmFs
KTsKICAgICBndWludDE2IGtleWNvZGU7CiAgICAgZ2RrX2V2ZW50X2dldF9rZXljb2RlKGV2ZW50
LCAma2V5Y29kZSk7Ci0KLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxMCwgMCkKICAgICBHZGtF
dmVudFR5cGUgdHlwZSA9IGdka19ldmVudF9nZXRfZXZlbnRfdHlwZShldmVudCk7Ci0jZWxzZQot
ICAgIEdka0V2ZW50VHlwZSB0eXBlID0gZXZlbnQtPnR5cGU7Ci0jZW5kaWYKIAogICAgIHJldHVy
biBXZWJLZXlib2FyZEV2ZW50KAogICAgICAgICB0eXBlID09IEdES19LRVlfUkVMRUFTRSA/IFdl
YkV2ZW50OjpLZXlVcCA6IFdlYkV2ZW50OjpLZXlEb3duLApAQCAtMjk1LDExICsyNzMsNyBAQCBX
ZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChj
b25zdCBHZGtFdmVudCogZXZlbnQsCiBXZWJUb3VjaEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3Jl
YXRlV2ViVG91Y2hFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIFZlY3RvcjxXZWJQbGF0Zm9y
bVRvdWNoUG9pbnQ+JiYgdG91Y2hQb2ludHMpCiB7CiAgICAgV2ViRXZlbnQ6OlR5cGUgdHlwZSA9
IFdlYkV2ZW50OjpOb1R5cGU7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTAsIDApCiAgICAg
R2RrRXZlbnRUeXBlIGV2ZW50VHlwZSA9IGdka19ldmVudF9nZXRfZXZlbnRfdHlwZShldmVudCk7
Ci0jZWxzZQotICAgIEdka0V2ZW50VHlwZSBldmVudFR5cGUgPSBldmVudC0+dHlwZTsKLSNlbmRp
ZgogICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7CiAgICAgY2FzZSBHREtfVE9VQ0hfQkVHSU46CiAg
ICAgICAgIHR5cGUgPSBXZWJFdmVudDo6VG91Y2hTdGFydDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggNjQ4MjI5OGYzN2Ix
Mzk2MTczZGU4M2IwZWMyYzk1NWMxNDJjODUyMS4uNjI4Y2QyYTcyNmE3ODJmYWFhNzI3MTZiYzJi
ZTUzOWY1YjYxMmQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0
ay9QYWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0
ay9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTM3NiwxNCArMzc2LDEyIEBAIHZvaWQgUGFnZUNsaWVu
dEltcGw6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiBldmVu
dCwgYm9vbCB3CiB7CiAgICAgY29uc3QgR2RrRXZlbnQqIHRvdWNoRXZlbnQgPSBldmVudC5uYXRp
dmVFdmVudCgpOwogCi0jaWYgSEFWRShHVEtfR0VTVFVSRVMpCiAgICAgR2VzdHVyZUNvbnRyb2xs
ZXImIGdlc3R1cmVDb250cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VHZXN0dXJlQ29udHJvbGxl
cihXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3ZpZXdXaWRnZXQpKTsKICAgICBpZiAod2FzRXZlbnRI
YW5kbGVkKSB7CiAgICAgICAgIGdlc3R1cmVDb250cm9sbGVyLnJlc2V0KCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgd2FzRXZlbnRIYW5kbGVkID0gZ2VzdHVyZUNvbnRyb2xsZXIuaGFu
ZGxlRXZlbnQoY29uc3RfY2FzdDxHZGtFdmVudCo+KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpKTsKLSNl
bmRpZgogCiAgICAgaWYgKHdhc0V2ZW50SGFuZGxlZCkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNw
cAppbmRleCA5YmU5M2NhNDlhZjg4ZjE3NjI3ZGIxOTAyZWU1NzRjOGViMGQwYzUzLi4wOTkyZjM2
M2JlNWQ1OGI0Y2FlZjQ3ZTkwZDNjMGU3ZDdkZmMzZDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtNzksMTAg
Kzc5LDYgQEAKICNpbmNsdWRlIDxnZGsvZ2RreC5oPgogI2VuZGlmCiAKLS8vIGd0a193aWRnZXRf
Z2V0X3NjYWxlX2ZhY3RvcigpIGFwcGVhcmVkIGluIEdUSyAzLjEwLCBidXQgd2UgYWxzbyBuZWVk
Ci0vLyB0byBtYWtlIHN1cmUgd2UgaGF2ZSBjYWlybyBuZXcgZW5vdWdoIHRvIHN1cHBvcnQgY2Fp
cm9fc3VyZmFjZV9zZXRfZGV2aWNlX3NjYWxlCi0jZGVmaW5lIEhBVkVfR1RLX1NDQUxFX0ZBQ1RP
UiBIQVZFX0NBSVJPX1NVUkZBQ0VfU0VUX0RFVklDRV9TQ0FMRSAmJiBHVEtfQ0hFQ0tfVkVSU0lP
TigzLCAxMCwgMCkKLQogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCkBAIC0xMjIsMTEgKzExOCw4IEBAIHB1YmxpYzoKICAgICAgICAgZG91YmxlIHgs
IHk7CiAgICAgICAgIGdka19ldmVudF9nZXRfY29vcmRzKGV2ZW50LCAmeCwgJnkpOwogICAgICAg
ICBnZGtfZXZlbnRfZ2V0X2J1dHRvbihldmVudCwgJmJ1dHRvbik7Ci0jaWYgR1RLX0NIRUNLX1ZF
UlNJT04oMywgMTAsIDApCiAgICAgICAgIHR5cGUgPSBnZGtfZXZlbnRfZ2V0X2V2ZW50X3R5cGUo
ZXZlbnQpOwotI2Vsc2UKLSAgICAgICAgdHlwZSA9IGV2ZW50LT50eXBlOwotI2VuZGlmCisKICAg
ICAgICAgaWYgKCh0eXBlID09IEdES18yQlVUVE9OX1BSRVNTIHx8IHR5cGUgPT0gR0RLXzNCVVRU
T05fUFJFU1MpCiAgICAgICAgICAgICB8fCAoKHN0ZDo6YWJzKHggLSBwcmV2aW91c0NsaWNrUG9p
bnQueCgpKSA8IGRvdWJsZUNsaWNrRGlzdGFuY2UpCiAgICAgICAgICAgICAgICAgJiYgKHN0ZDo6
YWJzKHkgLSBwcmV2aW91c0NsaWNrUG9pbnQueSgpKSA8IGRvdWJsZUNsaWNrRGlzdGFuY2UpCkBA
IC0yMjcsOSArMjIwLDcgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgewogICAg
IHN0ZDo6dW5pcXVlX3B0cjxEcmFnQW5kRHJvcEhhbmRsZXI+IGRyYWdBbmREcm9wSGFuZGxlcjsK
ICNlbmRpZgogCi0jaWYgSEFWRShHVEtfR0VTVFVSRVMpCiAgICAgc3RkOjp1bmlxdWVfcHRyPEdl
c3R1cmVDb250cm9sbGVyPiBnZXN0dXJlQ29udHJvbGxlcjsKLSNlbmRpZgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxWaWV3R2VzdHVyZUNvbnRyb2xsZXI+IHZpZXdHZXN0dXJlQ29udHJvbGxlcjsKICAg
ICBib29sIGlzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZUVuYWJsZWQgeyBmYWxzZSB9Owog
CkBAIC00MjIsOSArNDEzLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VSZWFsaXpl
KEd0a1dpZGdldCogd2lkZ2V0KQogICAgICAgICB8IEdES19CVVRUT04yX01PVElPTl9NQVNLCiAg
ICAgICAgIHwgR0RLX0JVVFRPTjNfTU9USU9OX01BU0sKICAgICAgICAgfCBHREtfVE9VQ0hfTUFT
SzsKLSNpZiBIQVZFKEdUS19HRVNUVVJFUykKICAgICBhdHRyaWJ1dGVzLmV2ZW50X21hc2sgfD0g
R0RLX1RPVUNIUEFEX0dFU1RVUkVfTUFTSzsKLSNlbmRpZgogCiAgICAgZ2ludCBhdHRyaWJ1dGVz
TWFzayA9IEdES19XQV9YIHwgR0RLX1dBX1kgfCBHREtfV0FfVklTVUFMOwogCkBAIC04MjEsMTEg
KzgxMCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlSGFuZGxlTW91c2VFdmVudChX
ZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIEdkCiAgICAgQVNTRVJUKCFwcml2LT5kaWFs
b2cpOwogCiAgICAgaW50IGNsaWNrQ291bnQgPSAwOwotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMs
IDEwLCAwKQogICAgIEdka0V2ZW50VHlwZSBldmVudFR5cGUgPSBnZGtfZXZlbnRfZ2V0X2V2ZW50
X3R5cGUoZXZlbnQpOwotI2Vsc2UKLSAgICBHZGtFdmVudFR5cGUgZXZlbnRUeXBlID0gZXZlbnQt
PnR5cGU7Ci0jZW5kaWYKICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkgewogICAgIGNhc2UgR0RLX0JV
VFRPTl9QUkVTUzoKICAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgpAQCAtMTA1NiwxMSArMTA0
MSw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBvaW50U3Rh
dGUgdG91Y2hQb2ludFN0YXRlRm9yRXZlbnRzKGNvCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3
QmFzZUdldFRvdWNoUG9pbnRzRm9yRXZlbnQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNl
LCBHZGtFdmVudCogZXZlbnQsIFZlY3RvcjxXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ+JiB0b3VjaFBv
aW50cykKIHsKICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFz
ZS0+cHJpdjsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxMCwgMCkKICAgICBHZGtFdmVudFR5
cGUgdHlwZSA9IGdka19ldmVudF9nZXRfZXZlbnRfdHlwZShldmVudCk7Ci0jZWxzZQotICAgIEdk
a0V2ZW50VHlwZSB0eXBlID0gZXZlbnQtPnR5cGU7Ci0jZW5kaWYKICAgICBib29sIHRvdWNoRW5k
ID0gKHR5cGUgPT0gR0RLX1RPVUNIX0VORCkgfHwgKHR5cGUgPT0gR0RLX1RPVUNIX0NBTkNFTCk7
CiAgICAgdG91Y2hQb2ludHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0b3VjaEVuZCA/IHByaXYt
PnRvdWNoRXZlbnRzLnNpemUoKSArIDEgOiBwcml2LT50b3VjaEV2ZW50cy5zaXplKCkpOwogCkBA
IC0xMDgzLDExICsxMDY0LDcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlVG91
Y2hFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRUb3VjaCogZXYKICAgICBHZGtFdmVu
dCogdG91Y2hFdmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCk7CiAgICAg
dWludDMyX3Qgc2VxdWVuY2UgPSBHUE9JTlRFUl9UT19VSU5UKGdka19ldmVudF9nZXRfZXZlbnRf
c2VxdWVuY2UodG91Y2hFdmVudCkpOwogCi0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTAsIDAp
CiAgICAgR2RrRXZlbnRUeXBlIHR5cGUgPSBnZGtfZXZlbnRfZ2V0X2V2ZW50X3R5cGUodG91Y2hF
dmVudCk7Ci0jZWxzZQotICAgIEdka0V2ZW50VHlwZSB0eXBlID0gdG91Y2hFdmVudC0+dHlwZQot
I2VuZGlmCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBHREtfVE9VQ0hfQkVHSU46IHsK
ICAgICAgICAgQVNTRVJUKCFwcml2LT50b3VjaEV2ZW50cy5jb250YWlucyhzZXF1ZW5jZSkpOwpA
QCAtMTExOSw3ICsxMDk2LDYgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlVG91
Y2hFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRUb3VjaCogZXYKIH0KICNlbmRpZiAv
LyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogCi0jaWYgSEFWRShHVEtfR0VTVFVSRVMpCiBjbGFzcyBU
b3VjaEdlc3R1cmVDb250cm9sbGVyIGZpbmFsIDogcHVibGljIEdlc3R1cmVDb250cm9sbGVyQ2xp
ZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIApAQCAtMTE0MiwxMSArMTExOCw3
IEBAIHByaXZhdGU6CiAgICAgICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFfeCA9IGRlbHRh
LngoKTsKICAgICAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV95ID0gZGVsdGEueSgpOwog
ICAgICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnN0YXRlID0gZXZlbnQtPnN0YXRlOwotI2lmIEdU
S19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQogICAgICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmlz
X3N0b3AgPSBpc1N0b3A7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oaXNTdG9wKTsKLSNl
bmRpZgogICAgICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLndpbmRvdyA9IGV2ZW50LT53aW5kb3cg
PyBHREtfV0lORE9XKGdfb2JqZWN0X3JlZihldmVudC0+d2luZG93KSkgOiBudWxscHRyOwogICAg
ICAgICBhdXRvKiB0b3VjaEV2ZW50ID0gcmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50
KTsKICAgICAgICAgZ2RrX2V2ZW50X3NldF9zY3JlZW4oc2Nyb2xsRXZlbnQuZ2V0KCksIGdka19l
dmVudF9nZXRfc2NyZWVuKHRvdWNoRXZlbnQpKTsKQEAgLTEyNDQsNyArMTIxNiw2IEBAIEdlc3R1
cmVDb250cm9sbGVyJiB3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVDb250cm9sbGVyKFdlYktpdFdl
YlZpZXdCYXNlKiB3ZWJWaWV3CiAgICAgICAgIHByaXYtPmdlc3R1cmVDb250cm9sbGVyID0gc3Rk
OjptYWtlX3VuaXF1ZTxHZXN0dXJlQ29udHJvbGxlcj4oR1RLX1dJREdFVCh3ZWJWaWV3QmFzZSks
IHN0ZDo6bWFrZV91bmlxdWU8VG91Y2hHZXN0dXJlQ29udHJvbGxlcj4od2ViVmlld0Jhc2UpKTsK
ICAgICByZXR1cm4gKnByaXYtPmdlc3R1cmVDb250cm9sbGVyOwogfQotI2VuZGlmCiAKIHZvaWQg
d2Via2l0V2ViVmlld0Jhc2VTZXRFbmFibGVCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlKFdl
YktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgYm9vbCBlbmFibGVkKQogewpAQCAtMTMyNSwx
NSArMTI5Niw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0RhdGFSZWNlaXZl
ZChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqCiAKIHN0YXRpYyBnYm9vbGVhbiB3
ZWJraXRXZWJWaWV3QmFzZUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudCogZXZlbnQp
CiB7Ci0jaWYgSEFWRShHVEtfR0VTVFVSRVMpCi0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTAs
IDApCiAgICAgaWYgKGdka19ldmVudF9nZXRfZXZlbnRfdHlwZShldmVudCkgPT0gR0RLX1RPVUNI
UEFEX1BJTkNIKQotI2Vsc2UKLSAgICBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX1RPVUNIUEFEX1BJ
TkNIKQotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDMsIDEwLCAwKQogICAgICAgICB3ZWJr
aXRXZWJWaWV3QmFzZUdlc3R1cmVDb250cm9sbGVyKFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdl
dCkpLmhhbmRsZUV2ZW50KGV2ZW50KTsKLSNlbmRpZiAvLyBIQVZFKEdUS19HRVNUVVJFUykKLQog
ICAgIHJldHVybiBHREtfRVZFTlRfUFJPUEFHQVRFOwogfQogCkBAIC0xNDg2LDEyICsxNDUwLDEw
IEBAIFdlYlBhZ2VQcm94eSogd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdlYktpdFdlYlZpZXdC
YXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKICAgICByZXR1cm4gd2Via2l0V2ViVmlld0Jhc2UtPnBy
aXYtPnBhZ2VQcm94eS5nZXQoKTsKIH0KIAotI2lmIEhBVkUoR1RLX1NDQUxFX0ZBQ1RPUikKIHN0
YXRpYyB2b2lkIGRldmljZVNjYWxlRmFjdG9yQ2hhbmdlZChXZWJLaXRXZWJWaWV3QmFzZSogd2Vi
a2l0V2ViVmlld0Jhc2UpCiB7CiAgICAgd2Via2l0V2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94
eS0+c2V0SW50cmluc2ljRGV2aWNlU2NhbGVGYWN0b3IoZ3RrX3dpZGdldF9nZXRfc2NhbGVfZmFj
dG9yKEdUS19XSURHRVQod2Via2l0V2ViVmlld0Jhc2UpKSk7CiB9Ci0jZW5kaWYgLy8gSEFWRShH
VEtfU0NBTEVfRkFDVE9SKQogCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlV2ViUGFnZShX
ZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UsIFJlZjxBUEk6OlBhZ2VDb25maWd1
cmF0aW9uPiYmIGNvbmZpZ3VyYXRpb24pCiB7CkBAIC0xNTAzLDExICsxNDY1LDkgQEAgdm9pZCB3
ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdl
YlZpZXdCYXNlLCBSZWY8QVAKIAogICAgIHByaXYtPmlucHV0TWV0aG9kRmlsdGVyLnNldFBhZ2Uo
cHJpdi0+cGFnZVByb3h5LmdldCgpKTsKIAotI2lmIEhBVkUoR1RLX1NDQUxFX0ZBQ1RPUikKICAg
ICAvLyBXZSBhdHRhY2ggdGhpcyBoZXJlLCBiZWNhdXNlIGNoYW5nZXMgaW4gc2NhbGUgZmFjdG9y
IGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIHBhZ2UgcHJveHkuCiAgICAgcHJpdi0+cGFnZVBy
b3h5LT5zZXRJbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3RvcihndGtfd2lkZ2V0X2dldF9zY2FsZV9m
YWN0b3IoR1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZSkpKTsKICAgICBnX3NpZ25hbF9jb25u
ZWN0KHdlYmtpdFdlYlZpZXdCYXNlLCAibm90aWZ5OjpzY2FsZS1mYWN0b3IiLCBHX0NBTExCQUNL
KGRldmljZVNjYWxlRmFjdG9yQ2hhbmdlZCksIG51bGxwdHIpOwotI2VuZGlmCiB9CiAKIHZvaWQg
d2Via2l0V2ViVmlld0Jhc2VTZXRUb29sdGlwVGV4dChXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmll
d0Jhc2UsIGNvbnN0IGNoYXIqIHRvb2x0aXApCkBAIC0xNzU0LDE2ICsxNzE0LDExIEBAIFJlZlB0
cjxXZWJLaXQ6OlZpZXdTbmFwc2hvdD4gd2Via2l0V2ViVmlld0Jhc2VUYWtlVmlld1NuYXBzaG90
KFdlYktpdFdlYlZpZXdCYXNlCiAKICAgICBJbnRTaXplIHNpemUgPSBwYWdlLT52aWV3U2l6ZSgp
OwogCi0jaWYgSEFWRV9HVEtfU0NBTEVfRkFDVE9SCiAgICAgZmxvYXQgZGV2aWNlU2NhbGUgPSBw
YWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwogICAgIHNpemUuc2NhbGUoZGV2aWNlU2NhbGUpOwot
I2VuZGlmCiAKICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gYWRvcHRSZWYo
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX1JHQjI0LCBzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCkpKTsKLQotI2lmIEhBVkVfR1RLX1NDQUxFX0ZBQ1RPUgogICAgIGNh
aXJvU3VyZmFjZVNldERldmljZVNjYWxlKHN1cmZhY2UuZ2V0KCksIGRldmljZVNjYWxlLCBkZXZp
Y2VTY2FsZSk7Ci0jZW5kaWYKIAogICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNh
aXJvX2NyZWF0ZShzdXJmYWNlLmdldCgpKSk7CiAgICAgd2Via2l0V2ViVmlld0Jhc2VEcmF3KEdU
S19XSURHRVQod2Via2l0V2ViVmlld0Jhc2UpLCBjci5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUu
aAppbmRleCAzM2NmN2M1NDM5MjBmYjNhMjVkMjdjZjQwZjk2NjkxYWRiNDlmMmI0Li5jNmJlZDNl
MzBiMzgyYmM1OWNiNmQ1MTQwZGNiZDNlYmJmMjE4MGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgK
QEAgLTgwLDkgKzgwLDcgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVBhZ2VDbG9zZWQoV2ViS2l0
V2ViVmlld0Jhc2UqKTsKIFdlYktpdDo6RHJhZ0FuZERyb3BIYW5kbGVyJiB3ZWJraXRXZWJWaWV3
QmFzZURyYWdBbmREcm9wSGFuZGxlcihXZWJLaXRXZWJWaWV3QmFzZSopOwogI2VuZGlmCiAKLSNp
ZiBIQVZFKEdUS19HRVNUVVJFUykKIFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXImIHdlYmtpdFdl
YlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIoV2ViS2l0V2ViVmlld0Jhc2UqKTsKLSNlbmRpZgog
CiBSZWZQdHI8V2ViS2l0OjpWaWV3U25hcHNob3Q+IHdlYmtpdFdlYlZpZXdCYXNlVGFrZVZpZXdT
bmFwc2hvdChXZWJLaXRXZWJWaWV3QmFzZSopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdEaWFsb2cuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3RGlhbG9nLmNwcAppbmRleCA1M2I1MWQx
ZjU2NGU5ZDI4M2UzNGQwNDRhMDQ1MzRjYThlODI4ZGU2Li43MGU2ZDM5NGIyYTE0ZWM4MDJkYWQx
NDNjZTA0MzExYzc5OGRiMjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdEaWFsb2cuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0RpYWxvZy5jcHAKQEAgLTI0LDkgKzI0LDYgQEAKICNp
bmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgogCiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdEaWFs
b2dQcml2YXRlIHsKLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCi0gICAgR1JlZlB0
cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dDsKLSNlbmRpZgogfTsKIAogV0VCS0lUX0RF
RklORV9BQlNUUkFDVF9UWVBFKFdlYktpdFdlYlZpZXdEaWFsb2csIHdlYmtpdF93ZWJfdmlld19k
aWFsb2csIEdUS19UWVBFX0VWRU5UX0JPWCkKQEAgLTQxLDExICszOCw3IEBAIHN0YXRpYyBnYm9v
bGVhbiB3ZWJraXRXZWJWaWV3RGlhbG9nRHJhdyhHdGtXaWRnZXQqIHdpZGdldCwgY2Fpcm9fdCog
Y3IpCiAgICAgICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKICAgICAgICAgZ3RrX3dpZGdl
dF9nZXRfYWxsb2NhdGlvbihjaGlsZCwgJmFsbG9jYXRpb24pOwogCi0jaWYgR1RLX0NIRUNLX1ZF
UlNJT04oMywgMjAsIDApCiAgICAgICAgIEd0a1N0eWxlQ29udGV4dCogc3R5bGVDb250ZXh0ID0g
Z3RrX3dpZGdldF9nZXRfc3R5bGVfY29udGV4dCh3aWRnZXQpOwotI2Vsc2UKLSAgICAgICAgR3Rr
U3R5bGVDb250ZXh0KiBzdHlsZUNvbnRleHQgPSBXRUJLSVRfV0VCX1ZJRVdfRElBTE9HKHdpZGdl
dCktPnByaXYtPnN0eWxlQ29udGV4dC5nZXQoKTsKLSNlbmRpZgogICAgICAgICBndGtfcmVuZGVy
X2JhY2tncm91bmQoc3R5bGVDb250ZXh0LCBjciwgYWxsb2NhdGlvbi54LCBhbGxvY2F0aW9uLnks
IGFsbG9jYXRpb24ud2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKICAgICB9CiAKQEAgLTgxLDIw
ICs3NCw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdEaWFsb2dDb25zdHJ1Y3RlZChHT2Jq
ZWN0KiBvYmplY3QpCiAKICAgICBndGtfd2lkZ2V0X3NldF9hcHBfcGFpbnRhYmxlKEdUS19XSURH
RVQob2JqZWN0KSwgVFJVRSk7CiAKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKICAg
ICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoZ3RrX3dpZGdldF9nZXRfc3R5bGVfY29udGV4
dChHVEtfV0lER0VUKG9iamVjdCkpLCBHVEtfU1RZTEVfQ0xBU1NfQ1NEKTsKICAgICBndGtfc3R5
bGVfY29udGV4dF9hZGRfY2xhc3MoZ3RrX3dpZGdldF9nZXRfc3R5bGVfY29udGV4dChHVEtfV0lE
R0VUKG9iamVjdCkpLCBHVEtfU1RZTEVfQ0xBU1NfQkFDS0dST1VORCk7Ci0jZWxzZQotICAgIFdl
YktpdFdlYlZpZXdEaWFsb2dQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9WSUVXX0RJQUxPRyhv
YmplY3QpLT5wcml2OwotICAgIHByaXYtPnN0eWxlQ29udGV4dCA9IGFkb3B0R1JlZihndGtfc3R5
bGVfY29udGV4dF9uZXcoKSk7Ci0gICAgR3RrV2lkZ2V0UGF0aCogcGF0aCA9IGd0a193aWRnZXRf
cGF0aF9uZXcoKTsKLSAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aCwgR1RLX1RZ
UEVfV0lORE9XKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MocHJpdi0+c3R5bGVD
b250ZXh0LmdldCgpLCBHVEtfU1RZTEVfQ0xBU1NfQkFDS0dST1VORCk7Ci0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfYWRkX2NsYXNzKHByaXYtPnN0eWxlQ29udGV4dC5nZXQoKSwgR1RLX1NUWUxFX0NM
QVNTX1RJVExFQkFSKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MocHJpdi0+c3R5
bGVDb250ZXh0LmdldCgpLCBHVEtfU1RZTEVfQ0xBU1NfQ1NEKTsKLSAgICBndGtfc3R5bGVfY29u
dGV4dF9zZXRfcGF0aChwcml2LT5zdHlsZUNvbnRleHQuZ2V0KCksIHBhdGgpOwotICAgIGd0a193
aWRnZXRfcGF0aF9mcmVlKHBhdGgpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfdmlld19kaWFsb2dfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3RGlhbG9nQ2xhc3MqIGtsYXNz
KQpAQCAtMTA2LDcgKzg3LDUgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2RpYWxvZ19j
bGFzc19pbml0KFdlYktpdFdlYlZpZXdEaWFsb2dDbGFzcyoga2xhc3MpCiAgICAgd2lkZ2V0Q2xh
c3MtPmRyYXcgPSB3ZWJraXRXZWJWaWV3RGlhbG9nRHJhdzsKICAgICB3aWRnZXRDbGFzcy0+c2l6
ZV9hbGxvY2F0ZSA9IHdlYmtpdFdlYlZpZXdEaWFsb2dTaXplQWxsb2NhdGU7CiAKLSNpZiBHVEtf
Q0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKICAgICBndGtfd2lkZ2V0X2NsYXNzX3NldF9jc3NfbmFt
ZSh3aWRnZXRDbGFzcywgIm1lc3NhZ2VkaWFsb2ciKTsKLSNlbmRpZgogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3R3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0d0ay5jcHAKaW5kZXgg
NGYwZTE1MWMwZGIwNDhjOTExYWJlNzI5MmMzZmJhYzdiN2I5MTVhZi4uYWY3MWUzYjRkOWUzM2Ni
MTM0YWViNDQ1NzcwODE2ODNkMjQwY2MwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdHdGsuY3BwCkBAIC02MiwxMSArNjIsNyBAQCBz
dGF0aWMgdm9pZCBmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2soR3RrRmlsZUNob29z
ZXIqIGRpYWxvZywgZ2ludCByZXNwbwogICAgIH0gZWxzZQogICAgICAgICB3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfY2FuY2VsKGFkb3B0ZWRSZXF1ZXN0LmdldCgpKTsKIAotI2lmIEdUS19D
SEVDS19WRVJTSU9OKDMsIDIwLCAwKQogICAgIGdfb2JqZWN0X3VucmVmKGRpYWxvZyk7Ci0jZWxz
ZQotICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKGRpYWxvZykpOwotI2VuZGlmCiB9
CiAKIGdib29sZWFuIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlcihXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCkBAIC03NywyMSArNzMs
MTAgQEAgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmUKIAogICAgIGdib29sZWFuIGFsbG93c011bHRp
cGxlU2VsZWN0aW9uID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVs
dGlwbGUocmVxdWVzdCk7CiAKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKICAgICBH
dGtGaWxlQ2hvb3Nlck5hdGl2ZSogZGlhbG9nID0gZ3RrX2ZpbGVfY2hvb3Nlcl9uYXRpdmVfbmV3
KGFsbG93c011bHRpcGxlU2VsZWN0aW9uID8gXygiU2VsZWN0IEZpbGVzIikgOiBfKCJTZWxlY3Qg
RmlsZSIpLAogICAgICAgICB0b3BsZXZlbCA/IEdUS19XSU5ET1codG9wbGV2ZWwpIDogbnVsbHB0
ciwgR1RLX0ZJTEVfQ0hPT1NFUl9BQ1RJT05fT1BFTiwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAg
aWYgKHRvcGxldmVsKQogICAgICAgICBndGtfbmF0aXZlX2RpYWxvZ19zZXRfbW9kYWwoR1RLX05B
VElWRV9ESUFMT0coZGlhbG9nKSwgVFJVRSk7Ci0jZWxzZQotICAgIEd0a1dpZGdldCogZGlhbG9n
ID0gZ3RrX2ZpbGVfY2hvb3Nlcl9kaWFsb2dfbmV3KGFsbG93c011bHRpcGxlU2VsZWN0aW9uID8g
XygiU2VsZWN0IEZpbGVzIikgOiBfKCJTZWxlY3QgRmlsZSIpLAotICAgICAgICB0b3BsZXZlbCA/
IEdUS19XSU5ET1codG9wbGV2ZWwpIDogbnVsbHB0ciwKLSAgICAgICAgR1RLX0ZJTEVfQ0hPT1NF
Ul9BQ1RJT05fT1BFTiwKLSAgICAgICAgR1RLX1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BPTlNFX0NB
TkNFTCwKLSAgICAgICAgR1RLX1NUT0NLX09QRU4sIEdUS19SRVNQT05TRV9BQ0NFUFQsCi0gICAg
ICAgIG51bGxwdHIpOwotICAgIGlmICh0b3BsZXZlbCkKLSAgICAgICAgZ3RrX3dpbmRvd19zZXRf
bW9kYWwoR1RLX1dJTkRPVyhkaWFsb2cpLCBUUlVFKTsKLSNlbmRpZgogCiAgICAgaWYgKEd0a0Zp
bGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90
eXBlc19maWx0ZXIocmVxdWVzdCkpCiAgICAgICAgIGd0a19maWxlX2Nob29zZXJfc2V0X2ZpbHRl
cihHVEtfRklMRV9DSE9PU0VSKGRpYWxvZyksIGZpbHRlcik7CkBAIC0xMDIsMTEgKzg3LDcgQEAg
Z2Jvb2xlYW4gd2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIFdlYktpdEZpbGVDaG9vc2VyUmUKIAogICAgIGdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCAi
cmVzcG9uc2UiLCBHX0NBTExCQUNLKGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayks
IGdfb2JqZWN0X3JlZihyZXF1ZXN0KSk7CiAKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwg
MCkKICAgICBndGtfbmF0aXZlX2RpYWxvZ19zaG93KEdUS19OQVRJVkVfRElBTE9HKGRpYWxvZykp
OwotI2Vsc2UKLSAgICBndGtfd2lkZ2V0X3Nob3coZGlhbG9nKTsKLSNlbmRpZgogCiAgICAgcmV0
dXJuIFRSVUU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0
aW9uL2d0ay9XZWJBdXRvbWF0aW9uU2Vzc2lvbkd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BdXRvbWF0aW9uL2d0ay9XZWJBdXRvbWF0aW9uU2Vzc2lvbkd0ay5jcHAKaW5kZXggY2U5
MmIwNzIyNDk5ZGJhZDUyZjVmODc4MTlkZjA4MzhkNWVlYWY2YS4uN2VhZThiMmI2ZGY2NTc4YmMz
YTY3MjEzZGQ0MThiYjZjZjc5OTA2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQXV0b21hdGlvbi9ndGsvV2ViQXV0b21hdGlvblNlc3Npb25HdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vZ3RrL1dlYkF1dG9tYXRpb25TZXNzaW9uR3Rr
LmNwcApAQCAtNzUsMTEgKzc1LDcgQEAgc3RhdGljIHZvaWQgZG9Nb3VzZUV2ZW50KEdka0V2ZW50
VHlwZSB0eXBlLCBHdGtXaWRnZXQqIHdpZGdldCwgY29uc3QgV2ViQ29yZTo6SW4KICAgICBldmVu
dC0+YnV0dG9uLmF4ZXMgPSAwOwogICAgIGV2ZW50LT5idXR0b24uc3RhdGUgPSBzdGF0ZTsKICAg
ICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigz
LCAyMCwgMCkKICAgICBldmVudC0+YnV0dG9uLmRldmljZSA9IGdka19zZWF0X2dldF9wb2ludGVy
KGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3NlYXQoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aWRn
ZXQpKSk7Ci0jZWxzZQotICAgIGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2RldmljZV9tYW5h
Z2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ3Rr
X3dpZGdldF9nZXRfZGlzcGxheSh3aWRnZXQpKSk7Ci0jZW5kaWYKICAgICBpbnQgeFJvb3QsIHlS
b290OwogICAgIGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRv
dyh3aWRnZXQpLCBsb2NhdGlvbi54KCksIGxvY2F0aW9uLnkoKSwgJnhSb290LCAmeVJvb3QpOwog
ICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0geFJvb3Q7CkBAIC05NywxMSArOTMsNyBAQCBzdGF0
aWMgdm9pZCBkb01vdGlvbkV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgbG9jYXRpb24sCiAgICAgZXZlbnQtPm1vdGlvbi55ID0gbG9jYXRpb24ueSgpOwog
ICAgIGV2ZW50LT5tb3Rpb24uYXhlcyA9IDA7CiAgICAgZXZlbnQtPm1vdGlvbi5zdGF0ZSA9IHN0
YXRlOwotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQogICAgIGV2ZW50LT5tb3Rpb24u
ZGV2aWNlID0gZ2RrX3NlYXRfZ2V0X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHRfc2Vh
dChndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHdpZGdldCkpKTsKLSNlbHNlCi0gICAgZXZlbnQtPm1v
dGlvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19k
aXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHdpZGdldCkp
KTsKLSNlbmRpZgogICAgIGludCB4Um9vdCwgeVJvb3Q7CiAgICAgZ2RrX3dpbmRvd19nZXRfcm9v
dF9jb29yZHMoZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCksIGxvY2F0aW9uLngoKSwgbG9j
YXRpb24ueSgpLCAmeFJvb3QsICZ5Um9vdCk7CiAgICAgZXZlbnQtPm1vdGlvbi54X3Jvb3QgPSB4
Um9vdDsKQEAgLTE1MSwxMSArMTQzLDcgQEAgc3RhdGljIHZvaWQgZG9LZXlTdHJva2VFdmVudChH
ZGtFdmVudFR5cGUgdHlwZSwgR3RrV2lkZ2V0KiB3aWRnZXQsIHVuc2lnbmVkIGtleVYKICAgICBl
dmVudC0+a2V5LndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpOwogICAgIGdf
b2JqZWN0X3JlZihldmVudC0+a2V5LndpbmRvdyk7CiAKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigz
LCAyMCwgMCkKICAgICBnZGtfZXZlbnRfc2V0X2RldmljZShldmVudC5nZXQoKSwgZ2RrX3NlYXRf
Z2V0X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHRfc2VhdChndGtfd2lkZ2V0X2dldF9k
aXNwbGF5KHdpZGdldCkpKSk7Ci0jZWxzZQotICAgIGdka19ldmVudF9zZXRfZGV2aWNlKGV2ZW50
LmdldCgpLCBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5
X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHdpZGdldCkpKSk7Ci0j
ZW5kaWYKICAgICBldmVudC0+a2V5LnN0YXRlID0gc3RhdGU7CiAKICAgICAvLyBXaGVuIHN5bnRo
ZXNpemluZyBhbiBldmVudCwgYW4gaW52YWxpZCBoYXJkd2FyZV9rZXljb2RlIHZhbHVlIGNhbiBj
YXVzZSBpdCB0byBiZSBiYWRseSBwcm9jZXNzZWQgYnkgR1RLKy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKaW5kZXggNWRkNjIzYjQ3MzJkMGQ1NWVkNTUzNDBkOTYzZWUxMGU2
YWZmOTgwOC4uODZlMDY1YTIwMzFiMjBjYTI5ZWZjNzg1M2Q2YmRkNDNmZWYzMjk0OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTc0OSwxMyArNzQ5LDkgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8
V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIHVpbnQ2NF90IHNlbGVj
dGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25FbmQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFu
Z2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCk7CiAgICAgdm9pZCBjb25maXJt
Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiBjb21wb3NpdGlvblN0cmluZywgaW50NjRfdCBzZWxl
Y3Rpb25TdGFydCwgaW50NjRfdCBzZWxlY3Rpb25MZW5ndGgpOwogICAgIHZvaWQgY2FuY2VsQ29t
cG9zaXRpb24oKTsKLSNlbmRpZgogCi0jaWYgUExBVEZPUk0oR1RLKQogICAgIHZvaWQgc2V0SW5w
dXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpOwotI2VuZGlmCiAKLSNpZiBQTEFURk9STSAoR1RL
KSAmJiBIQVZFKEdUS19HRVNUVVJFUykKICAgICB2b2lkIGdldENlbnRlckZvclpvb21HZXN0dXJl
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjZW50ZXJJblZpZXdDb29yZGluYXRlcywgV2ViQ29y
ZTo6SW50UG9pbnQmIGNlbnRlcik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvZ3RrL0FjY2VsZXJhdGVkQmFja2luZ1N0b3JlV2F5bGFuZC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXlsYW5kLmNw
cAppbmRleCBkMjQzYmViNTM4YjJhZGVmNDcxOWJlNmNhNWE2YjZhNWM4Y2Q5MDIxLi5jYTE4Yjgx
Y2ExM2FjNmQxYjljOWM2ZTNhZjk4OGNiMzUyMjY1Yjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXlsYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXls
YW5kLmNwcApAQCAtMTM4LDEwICsxMzgsOCBAQCBBY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVdheWxh
bmQ6On5BY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVdheWxhbmQoKQogICAgIFdheWxhbmRDb21wb3Np
dG9yOjpzaW5nbGV0b24oKS51bnJlZ2lzdGVyV2ViUGFnZShtX3dlYlBhZ2UpOwogI2VuZGlmCiAK
LSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxNiwgMCkKICAgICBpZiAobV9nZGtHTENvbnRleHQg
JiYgbV9nZGtHTENvbnRleHQuZ2V0KCkgPT0gZ2RrX2dsX2NvbnRleHRfZ2V0X2N1cnJlbnQoKSkK
ICAgICAgICAgZ2RrX2dsX2NvbnRleHRfY2xlYXJfY3VycmVudCgpOwotI2VuZGlmCiB9CiAKIHZv
aWQgQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXlsYW5kOjp0cnlFbnN1cmVHTENvbnRleHQoKQpA
QCAtMTUxLDcgKzE0OSw2IEBAIHZvaWQgQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXlsYW5kOjp0
cnlFbnN1cmVHTENvbnRleHQoKQogCiAgICAgbV9nbENvbnRleHRJbml0aWFsaXplZCA9IHRydWU7
CiAKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxNiwgMCkKICAgICBHVW5pcXVlT3V0UHRyPEdF
cnJvcj4gZXJyb3I7CiAgICAgbV9nZGtHTENvbnRleHQgPSBhZG9wdEdSZWYoZ2RrX3dpbmRvd19j
cmVhdGVfZ2xfY29udGV4dChndGtfd2lkZ2V0X2dldF93aW5kb3cobV93ZWJQYWdlLnZpZXdXaWRn
ZXQoKSksICZlcnJvci5vdXRQdHIoKSkpOwogICAgIGlmIChtX2dka0dMQ29udGV4dCkgewpAQCAt
MTYyLDcgKzE1OSw2IEBAIHZvaWQgQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXlsYW5kOjp0cnlF
bnN1cmVHTENvbnRleHQoKQogICAgIH0KIAogICAgIGdfd2FybmluZygiR0RLIGlzIG5vdCBhYmxl
IHRvIGNyZWF0ZSBhIEdMIGNvbnRleHQsIGZhbGxpbmcgYmFjayB0byBnbFJlYWRQaXhlbHMgKHNs
b3chKTogJXMiLCBlcnJvci0+bWVzc2FnZSk7Ci0jZW5kaWYKIAogICAgIG1fZ2xDb250ZXh0ID0g
R0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCk7CiB9CkBAIC0xNzEsMTMgKzE2Nywx
MCBAQCBib29sIEFjY2VsZXJhdGVkQmFja2luZ1N0b3JlV2F5bGFuZDo6bWFrZUNvbnRleHRDdXJy
ZW50KCkKIHsKICAgICB0cnlFbnN1cmVHTENvbnRleHQoKTsKIAotI2lmIEdUS19DSEVDS19WRVJT
SU9OKDMsIDE2LCAwKQogICAgIGlmIChtX2dka0dMQ29udGV4dCkgewogICAgICAgICBnZGtfZ2xf
Y29udGV4dF9tYWtlX2N1cnJlbnQobV9nZGtHTENvbnRleHQuZ2V0KCkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9Ci0jZW5kaWYKLQogICAgIHJldHVybiBtX2dsQ29udGV4dCA/IG1fZ2xD
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSA6IGZhbHNlOwogfQogCkBAIC0yNjIsMTMgKzI1
NSwxMSBAQCBib29sIEFjY2VsZXJhdGVkQmFja2luZ1N0b3JlV2F5bGFuZDo6cGFpbnQoY2Fpcm9f
dCogY3IsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogCiAgICAgY2Fpcm9fc2F2ZShjcik7CiAK
LSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxNiwgMCkKICAgICBpZiAobV9nZGtHTENvbnRleHQp
IHsKICAgICAgICAgZ2RrX2NhaXJvX2RyYXdfZnJvbV9nbChjciwgZ3RrX3dpZGdldF9nZXRfd2lu
ZG93KG1fd2ViUGFnZS52aWV3V2lkZ2V0KCkpLCB0ZXh0dXJlLCBHTF9URVhUVVJFLCBtX3dlYlBh
Z2UuZGV2aWNlU2NhbGVGYWN0b3IoKSwgMCwgMCwgdGV4dHVyZVNpemUud2lkdGgoKSwgdGV4dHVy
ZVNpemUuaGVpZ2h0KCkpOwogICAgICAgICBjYWlyb19yZXN0b3JlKGNyKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQotI2VuZGlmCiAKICAgICBBU1NFUlQobV9nbENvbnRleHQpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5n
U3RvcmVXYXlsYW5kLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRC
YWNraW5nU3RvcmVXYXlsYW5kLmgKaW5kZXggYjY5N2Q2ODNkZTA3MTM0YjY5ZTFiMWViZGUyZDUw
NGM1ZTk3NTYxMC4uNDFlODBkZTIxYmRkMWFiY2NlM2IyYWY1ZmI2M2I5NGJkNzY3ZDMxMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0FjY2VsZXJhdGVkQmFja2luZ1N0
b3JlV2F5bGFuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9BY2NlbGVyYXRl
ZEJhY2tpbmdTdG9yZVdheWxhbmQuaApAQCAtNzIsOSArNzIsNyBAQCBwcml2YXRlOgogCiAgICAg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwogICAgIGJvb2wgbV9nbENvbnRleHRJ
bml0aWFsaXplZCB7IGZhbHNlIH07Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTYsIDApCiAg
ICAgR1JlZlB0cjxHZGtHTENvbnRleHQ+IG1fZ2RrR0xDb250ZXh0OwotI2VuZGlmCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9nbENvbnRleHQ7CiAKICNpZiBVU0Uo
V1BFX1JFTkRFUkVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0Ry
YWdBbmREcm9wSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvRHJhZ0Fu
ZERyb3BIYW5kbGVyLmNwcAppbmRleCBjMjljM2ZhNzJhOTBlYjM0ZDVlNWM4NTZmMzhhMzNjMjZi
ODQ3MWI1Li5lOWFlNjU1MmE3YTJkODYyYzRiZDRlZTEwZWQyZWMzNmU5MmY4MzFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVyLmNwcApA
QCAtMTA2LDcgKzEwNiw2IEBAIHN0YXRpYyBpbmxpbmUgRHJhZ09wZXJhdGlvbiBnZGtEcmFnQWN0
aW9uVG9EcmFnT3BlcmF0aW9uKEdka0RyYWdBY3Rpb24gZ2RrQWN0aW9uCiAKIHZvaWQgRHJhZ0Fu
ZERyb3BIYW5kbGVyOjpzdGFydERyYWcoUmVmPFNlbGVjdGlvbkRhdGE+JiYgc2VsZWN0aW9uLCBE
cmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb24sIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+JiYgZHJh
Z0ltYWdlKQogewotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE2LCAwKQogICAgIC8vIFdlYkNv
cmU6OkV2ZW50SGFuZGxlciBkb2VzIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgRG5EIG9wZXJh
dGlvbiBhdCB0aGUgc2FtZSB0aW1lIGZvcgogICAgIC8vIGEgZ2l2ZW4gcGFnZSwgc28gd2Ugc2hv
dWxkIGNhbmNlbCBhbnkgcHJldmlvdXMgb3BlcmF0aW9uIHdob3NlIGNvbnRleHQgd2UgbWlnaHQg
aGF2ZQogICAgIC8vIHN0b3JlZCwgc2hvdWxkIHdlIHJlY2VpdmUgYSBuZXcgc3RhcnREcmFnIGV2
ZW50IGJlZm9yZSBmaW5pc2hpbmcgYSBwcmV2aW91cyBEbkQgb3BlcmF0aW9uLgpAQCAtMTE3LDIy
ICsxMTYsMTIgQEAgdm9pZCBEcmFnQW5kRHJvcEhhbmRsZXI6OnN0YXJ0RHJhZyhSZWY8U2VsZWN0
aW9uRGF0YT4mJiBzZWxlY3Rpb24sIERyYWdPcGVyYXRpb24KIAogICAgIG1fZHJhZ2dpbmdTZWxl
Y3Rpb25EYXRhID0gV1RGTW92ZShzZWxlY3Rpb24pOwogICAgIEdSZWZQdHI8R3RrVGFyZ2V0TGlz
dD4gdGFyZ2V0TGlzdCA9IFBhc3RlYm9hcmRIZWxwZXI6OnNpbmdsZXRvbigpLnRhcmdldExpc3RG
b3JTZWxlY3Rpb25EYXRhKCptX2RyYWdnaW5nU2VsZWN0aW9uRGF0YSk7Ci0jZWxzZQotICAgIFJl
ZlB0cjxTZWxlY3Rpb25EYXRhPiBzZWxlY3Rpb25EYXRhID0gV1RGTW92ZShzZWxlY3Rpb24pOwot
ICAgIEdSZWZQdHI8R3RrVGFyZ2V0TGlzdD4gdGFyZ2V0TGlzdCA9IFBhc3RlYm9hcmRIZWxwZXI6
OnNpbmdsZXRvbigpLnRhcmdldExpc3RGb3JTZWxlY3Rpb25EYXRhKCpzZWxlY3Rpb25EYXRhKTsK
LSNlbmRpZgogCiAgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gY3VycmVudEV2ZW50KGd0a19nZXRf
Y3VycmVudF9ldmVudCgpKTsKICAgICBHZGtEcmFnQ29udGV4dCogY29udGV4dCA9IGd0a19kcmFn
X2JlZ2luKG1fcGFnZS52aWV3V2lkZ2V0KCksIHRhcmdldExpc3QuZ2V0KCksIGRyYWdPcGVyYXRp
b25Ub0dka0RyYWdBY3Rpb25zKGRyYWdPcGVyYXRpb24pLAogICAgICAgICBHREtfQlVUVE9OX1BS
SU1BUlksIGN1cnJlbnRFdmVudC5nZXQoKSk7CiAKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAx
NiwgMCkKICAgICBtX2RyYWdDb250ZXh0ID0gY29udGV4dDsKLSNlbHNlCi0gICAgLy8gV2UgZG9u
J3QgaGF2ZSBndGtfZHJhZ19jYW5jZWwoKSBpbiBHVEsrIDwgMy4xNiwgc28gd2UgdXNlIHRoZSBv
bGQgY29kZS4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzODQ2OAotICAgIG1fZHJhZ2dpbmdTZWxlY3Rpb25EYXRhTWFwLnNldChjb250ZXh0LCBX
VEZNb3ZlKHNlbGVjdGlvbkRhdGEpKTsKLSNlbmRpZgogCiAgICAgaWYgKGRyYWdJbWFnZSkgewog
ICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZShkcmFnSW1hZ2UtPmNyZWF0ZUNh
aXJvU3VyZmFjZSgpKTsKQEAgLTE0NSw3ICsxMzQsNiBAQCB2b2lkIERyYWdBbmREcm9wSGFuZGxl
cjo6c3RhcnREcmFnKFJlZjxTZWxlY3Rpb25EYXRhPiYmIHNlbGVjdGlvbiwgRHJhZ09wZXJhdGlv
bgogCiB2b2lkIERyYWdBbmREcm9wSGFuZGxlcjo6ZmlsbERyYWdEYXRhKEdka0RyYWdDb250ZXh0
KiBjb250ZXh0LCBHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhLCB1bnNpZ25lZCBpbmZv
KQogewotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE2LCAwKQogICAgIC8vIFRoaXMgY2FuIGhh
cHBlbiB3aGVuIGF0dGVtcHRpbmcgdG8gY2FsbCBmaW5pc2ggZHJhZyBmcm9tIHdlYmtpdFdlYlZp
ZXdCYXNlRHJhZ0RhdGFHZXQoKQogICAgIC8vIGZvciBhIG9ic29sZXRlIERuRCBvcGVyYXRpb24g
dGhhdCBnb3QgcHJldmlvdXNseSBjYW5jZWxsZWQgaW4gc3RhcnREcmFnKCkuCiAgICAgaWYgKG1f
ZHJhZ0NvbnRleHQuZ2V0KCkgIT0gY29udGV4dCkKQEAgLTE1MywxNSArMTQxLDEwIEBAIHZvaWQg
RHJhZ0FuZERyb3BIYW5kbGVyOjpmaWxsRHJhZ0RhdGEoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQs
IEd0a1NlbGVjdGlvbkRhdGEqCiAKICAgICBBU1NFUlQobV9kcmFnZ2luZ1NlbGVjdGlvbkRhdGEp
OwogICAgIFBhc3RlYm9hcmRIZWxwZXI6OnNpbmdsZXRvbigpLmZpbGxTZWxlY3Rpb25EYXRhKCpt
X2RyYWdnaW5nU2VsZWN0aW9uRGF0YSwgaW5mbywgc2VsZWN0aW9uRGF0YSk7Ci0jZWxzZQotICAg
IGlmIChhdXRvKiBzZWxlY3Rpb24gPSBtX2RyYWdnaW5nU2VsZWN0aW9uRGF0YU1hcC5nZXQoY29u
dGV4dCkpCi0gICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OnNpbmdsZXRvbigpLmZpbGxTZWxlY3Rp
b25EYXRhKCpzZWxlY3Rpb24sIGluZm8sIHNlbGVjdGlvbkRhdGEpOwotI2VuZGlmCiB9CiAKIHZv
aWQgRHJhZ0FuZERyb3BIYW5kbGVyOjpmaW5pc2hEcmFnKEdka0RyYWdDb250ZXh0KiBjb250ZXh0
KQogewotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE2LCAwKQogICAgIC8vIFRoaXMgY2FuIGhh
cHBlbiB3aGVuIGF0dGVtcHRpbmcgdG8gY2FsbCBmaW5pc2ggZHJhZyBmcm9tIHdlYmtpdFdlYlZp
ZXdCYXNlRHJhZ0VuZCgpCiAgICAgLy8gZm9yIGEgb2Jzb2xldGUgRG5EIG9wZXJhdGlvbiB0aGF0
IGdvdCBwcmV2aW91c2x5IGNhbmNlbGxlZCBpbiBzdGFydERyYWcoKS4KICAgICBpZiAobV9kcmFn
Q29udGV4dC5nZXQoKSAhPSBjb250ZXh0KQpAQCAtMTcyLDEwICsxNTUsNiBAQCB2b2lkIERyYWdB
bmREcm9wSGFuZGxlcjo6ZmluaXNoRHJhZyhHZGtEcmFnQ29udGV4dCogY29udGV4dCkKIAogICAg
IG1fZHJhZ0NvbnRleHQgPSBudWxscHRyOwogICAgIG1fZHJhZ2dpbmdTZWxlY3Rpb25EYXRhID0g
bnVsbHB0cjsKLSNlbHNlCi0gICAgaWYgKCFtX2RyYWdnaW5nU2VsZWN0aW9uRGF0YU1hcC5yZW1v
dmUoY29udGV4dCkpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgogCiAgICAgR2RrRGV2aWNlKiBk
ZXZpY2UgPSBnZGtfZHJhZ19jb250ZXh0X2dldF9kZXZpY2UoY29udGV4dCk7CiAgICAgaW50IHgg
PSAwLCB5ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9EcmFn
QW5kRHJvcEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9EcmFnQW5kRHJv
cEhhbmRsZXIuaAppbmRleCAxYzFlYTNhOTNlOTkwYzIwMTM5ZWJjN2U5NTVlN2FmM2YwMGUxNzJm
Li41MjU0MjAzNzFmNjFiZDRiOGYzYzFhMzk5YjdiODI2MWI5OTRlYTEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVyLmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0RyYWdBbmREcm9wSGFuZGxlci5oCkBAIC03OCwxNSAr
NzgsOCBAQCBwcml2YXRlOgogCiAgICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7CiAgICAgSGFzaE1h
cDxHZGtEcmFnQ29udGV4dCosIHN0ZDo6dW5pcXVlX3B0cjxEcm9wcGluZ0NvbnRleHQ+PiBtX2Ry
b3BwaW5nQ29udGV4dHM7Ci0KLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxNiwgMCkKICAgICBH
UmVmUHRyPEdka0RyYWdDb250ZXh0PiBtX2RyYWdDb250ZXh0OwogICAgIFJlZlB0cjxXZWJDb3Jl
OjpTZWxlY3Rpb25EYXRhPiBtX2RyYWdnaW5nU2VsZWN0aW9uRGF0YTsKLSNlbHNlCi0gICAgLy8g
V2UgZG9uJ3QgaGF2ZSBndGtfZHJhZ19jYW5jZWwoKSBpbiBHVEsrIDwgMy4xNiwgc28gd2UgdXNl
IHRoZSBvbGQgY29kZS4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzODQ2OAotICAgIEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQqLCBSZWZQdHI8V2Vi
Q29yZTo6U2VsZWN0aW9uRGF0YT4+IG1fZHJhZ2dpbmdTZWxlY3Rpb25EYXRhTWFwOwotI2VuZGlm
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwCmluZGV4IDM5ZmE3MzdkNDBhODM4YjNjY2M3
ZWMzYTM4NDViOGZiNjM4OGE4NmUuLjllOGJlMWYzNzQ3NDkxZjQ3YjUzNjcxM2Q4MGFhMTJiNjhm
ZjdmMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250
cm9sbGVyLmNwcApAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkdlc3R1cmVDb250cm9sbGVyLmgiCiAKLSNpZiBIQVZFKEdUS19HRVNUVVJFUykKLQogI2lu
Y2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFyLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogCkBAIC01
MywxMSArNTEsNyBAQCBib29sIEdlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVFdmVudChHZGtFdmVu
dCogZXZlbnQpCiAgICAgbV9zd2lwZUdlc3R1cmUuaGFuZGxlRXZlbnQoZXZlbnQpOwogICAgIG1f
em9vbUdlc3R1cmUuaGFuZGxlRXZlbnQoZXZlbnQpOwogICAgIG1fbG9uZ3ByZXNzR2VzdHVyZS5o
YW5kbGVFdmVudChldmVudCk7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTAsIDApCiAgICAg
dG91Y2hFbmQgPSAoZ2RrX2V2ZW50X2dldF9ldmVudF90eXBlKGV2ZW50KSA9PSBHREtfVE9VQ0hf
RU5EKSB8fCAoZ2RrX2V2ZW50X2dldF9ldmVudF90eXBlKGV2ZW50KSA9PSBHREtfVE9VQ0hfQ0FO
Q0VMKTsKLSNlbHNlCi0gICAgdG91Y2hFbmQgPSAoZXZlbnQtPnR5cGUgPT0gR0RLX1RPVUNIX0VO
RCkgfHwgKGV2ZW50LT50eXBlID09IEdES19UT1VDSF9DQU5DRUwpOwotI2VuZGlmCiAgICAgcmV0
dXJuIHRvdWNoRW5kID8gd2FzUHJvY2Vzc2luZ0dlc3R1cmVzIDogaXNQcm9jZXNzaW5nR2VzdHVy
ZXMoKTsKIH0KIApAQCAtMjYzLDUgKzI1NywzIEBAIEdlc3R1cmVDb250cm9sbGVyOjpMb25nUHJl
c3NHZXN0dXJlOjpMb25nUHJlc3NHZXN0dXJlKEd0a1dpZGdldCogd2lkZ2V0LCBHZXN0dXJlCiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gSEFWRShHVEtfR0VTVFVSRVMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xs
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5oCmlu
ZGV4IGJiZDMzOGE1OTAwY2VmYTIyMzk1MTYzMzcxYjg2NTY5NWQ5MWRhN2UuLmM3MTA1YmY1MzQy
ODE2Y2UwODM3ZTA3M2ViODVjMzMyODBhMjYyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5oCkBAIC0yNSw4ICsyNSw2IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaWYgSEFWRShHVEtfR0VTVFVSRVMpCi0KICNpbmNsdWRlIDxXZWJDb3JlL0Zs
b2F0UG9pbnQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYv
UnVuTG9vcC5oPgpAQCAtMTU3LDUgKzE1NSwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEhBVkUoR1RLX0dFU1RVUkVTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5jcHAKaW5kZXggMzIzYTEx
ODViZTViMjAxNWFlZWE1ZGJjNDU3ZmJiNzJlNTk2YmYyZC4uNDg0N2U2MDIxOTQwMTQ3Y2M0MDEy
ZTgzMzlmNjFjZTg2MzkzNmFlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9n
dGsvSW5wdXRNZXRob2RGaWx0ZXIuY3BwCkBAIC0yMDAsMTEgKzIwMCw4IEBAIHZvaWQgSW5wdXRN
ZXRob2RGaWx0ZXI6OmZpbHRlcktleUV2ZW50KEdka0V2ZW50S2V5KiBldmVudCwgRmlsdGVyS2V5
RXZlbnRDb21wbGV0CiAgICAgbV9qdXN0U2VudEZha2VLZXlVcCA9IGZhbHNlOwogICAgIGd1aW50
IGtleXZhbDsKICAgICBnZGtfZXZlbnRfZ2V0X2tleXZhbChyZWludGVycHJldF9jYXN0PEdka0V2
ZW50Kj4oZXZlbnQpLCAma2V5dmFsKTsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxMCwgMCkK
ICAgICBHZGtFdmVudFR5cGUgdHlwZSA9IGdka19ldmVudF9nZXRfZXZlbnRfdHlwZShyZWludGVy
cHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKTsKLSNlbHNlCi0gICAgR2RrRXZlbnRUeXBlIHR5
cGUgPSBldmVudC0+dHlwZTsKLSNlbmRpZgorCiAgICAgaWYgKGp1c3RTZW50RmFrZUtleVVwICYm
IHR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ1MiwxMSAr
NDQ5LDcgQEAgdm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6bG9nSGFuZGxlS2V5Ym9hcmRFdmVudEZv
clRlc3RpbmcoR2RrRXZlbnRLZXkqIGV2ZW50LCBjb24KIHsKICAgICBndWludCBrZXl2YWw7CiAg
ICAgZ2RrX2V2ZW50X2dldF9rZXl2YWwocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50
KSwgJmtleXZhbCk7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTAsIDApCiAgICAgY29uc3Qg
Y2hhciogZXZlbnRUeXBlID0gZ2RrX2V2ZW50X2dldF9ldmVudF90eXBlKHJlaW50ZXJwcmV0X2Nh
c3Q8R2RrRXZlbnQqPihldmVudCkpID09IEdES19LRVlfUkVMRUFTRSA/ICJyZWxlYXNlIiA6ICJw
cmVzcyI7Ci0jZWxzZQotICAgIGNvbnN0IGNoYXIqIGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlID09
IEdES19LRVlfUkVMRUFTRSA/ICJyZWxlYXNlIiA6ICJwcmVzcyI7Ci0jZW5kaWYKICAgICBjb25z
dCBjaGFyKiBmYWtlZFN0cmluZyA9IGZha2VkID09IEV2ZW50RmFrZWQgPyAiIChmYWtlZCkiIDog
IiI7CiAgICAgaWYgKCFldmVudFN0cmluZy5pc051bGwoKSkKICAgICAgICAgbV9ldmVudHMuYXBw
ZW5kKG1ha2VTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPSIsIGV2ZW50VHlwZSwgIiBr
ZXljb2RlPSIsIGhleChrZXl2YWwpLCAiIHRleHQ9JyIsIGV2ZW50U3RyaW5nLCAnXCcnLCBmYWtl
ZFN0cmluZykpOwpAQCAtNDY4LDExICs0NjEsNyBAQCB2b2lkIElucHV0TWV0aG9kRmlsdGVyOjps
b2dIYW5kbGVLZXlib2FyZEV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0c0ZvclRlc3RpbmcoRwog
ewogICAgIGd1aW50IGtleXZhbDsKICAgICBnZGtfZXZlbnRfZ2V0X2tleXZhbChyZWludGVycHJl
dF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAma2V5dmFsKTsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lP
TigzLCAxMCwgMCkKICAgICBjb25zdCBjaGFyKiBldmVudFR5cGUgPSBnZGtfZXZlbnRfZ2V0X2V2
ZW50X3R5cGUocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSkgPT0gR0RLX0tFWV9S
RUxFQVNFID8gInJlbGVhc2UiIDogInByZXNzIjsKLSNlbHNlCi0gICAgY29uc3QgY2hhciogZXZl
bnRUeXBlID0gZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFID8gInJlbGVhc2UiIDogInBy
ZXNzIjsKLSNlbmRpZgogICAgIGNvbnN0IGNoYXIqIGZha2VkU3RyaW5nID0gZmFrZWQgPT0gRXZl
bnRGYWtlZCA/ICIgKGZha2VkKSIgOiAiIjsKICAgICBtX2V2ZW50cy5hcHBlbmQobWFrZVN0cmlu
Zygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPSIsIGV2ZW50VHlwZSwg
IiBrZXljb2RlPSIsIGhleChrZXl2YWwpLCBmYWtlZFN0cmluZykpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3Bw
CmluZGV4IGFlYWUzMmJiYmU5MTFmMjY1Y2M0YzNlNGJjOTZiYTE4MjA2NmI0Y2YuLjgyNzAyMmRm
ODk4MzU2OTE5ZDZlMDE3ZGRiYzJlODkzZDZhODE3ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCkBAIC01
NCwxMSArNTQsNyBAQCBzdGF0aWMgY29uc3QgZG91YmxlIHN3aXBlT3ZlcmxheVNoYWRvd0dyYWRp
ZW50QWxwaGFbXSA9IHsgMSwgMC45OSwgMC45OCwgMC45NSwgMAogCiBzdGF0aWMgYm9vbCBpc0V2
ZW50U3RvcChHZGtFdmVudFNjcm9sbCogZXZlbnQpCiB7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04o
MywgMjAsIDApCiAgICAgcmV0dXJuIGdka19ldmVudF9pc19zY3JvbGxfc3RvcF9ldmVudChyZWlu
dGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKTsKLSNlbHNlCi0gICAgcmV0dXJuICFldmVu
dC0+ZGVsdGFfeCAmJiAhZXZlbnQtPmRlbHRhX3k7Ci0jZW5kaWYKIH0KIAogdm9pZCBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI6OnBsYXRmb3JtVGVhcmRvd24oKQpAQCAtNDMyLDkgKzQyOCw3IEBAIHN0
YXRpYyBHVW5pcXVlUHRyPEdka0V2ZW50PiBjcmVhdGVTY3JvbGxFdmVudChHdGtXaWRnZXQqIHdp
ZGdldCwgZG91YmxlIHhEZWx0YSwKICAgICBldmVudC0+c2Nyb2xsLmRlbHRhX3ggPSB4RGVsdGE7
CiAgICAgZXZlbnQtPnNjcm9sbC5kZWx0YV95ID0geURlbHRhOwogICAgIGV2ZW50LT5zY3JvbGwu
c3RhdGUgPSAwOwotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQogICAgIGV2ZW50LT5z
Y3JvbGwuaXNfc3RvcCA9ICF4RGVsdGEgJiYgIXlEZWx0YTsKLSNlbmRpZgogICAgIGV2ZW50LT5z
Y3JvbGwud2luZG93ID0gR0RLX1dJTkRPVyhnX29iamVjdF9yZWYod2luZG93KSk7CiAgICAgZ2Rr
X2V2ZW50X3NldF9zY3JlZW4oZXZlbnQuZ2V0KCksIGdka193aW5kb3dfZ2V0X3NjcmVlbih3aW5k
b3cpKTsKICAgICBnZGtfZXZlbnRfc2V0X2RldmljZShldmVudC5nZXQoKSwgZ2RrX2RldmljZV9t
YW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIo
Z2RrX3dpbmRvd19nZXRfZGlzcGxheSh3aW5kb3cpKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwCmluZGV4IDg5YTdh
NDY0YTdhMzFmNTc4NGNlZGFhMjc4OTg0ZDYwMTgwMmVjMDkuLjVmYWQyZmY3ZjM0MWJmODg3MDVi
ZWM2MWY4NTBkZGNlZWE3ZGFiNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKQEAgLTY3LDExICs2Nyw3IEBAIHZv
aWQgV2ViQ29udGV4dE1lbnVQcm94eUd0azo6YXBwZW5kKEdNZW51KiBtZW51LCBjb25zdCBXZWJD
b250ZXh0TWVudUl0ZW1HbGliJiBtCiAgICAgR1JlZlB0cjxHTWVudUl0ZW0+IGdNZW51SXRlbTsK
ICAgICBHQWN0aW9uKiBhY3Rpb24gPSBtZW51SXRlbS5nQWN0aW9uKCk7CiAgICAgQVNTRVJUKGFj
dGlvbik7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTYsIDApCiAgICAgZ19hY3Rpb25fbWFw
X2FkZF9hY3Rpb24oR19BQ1RJT05fTUFQKGd0a193aWRnZXRfZ2V0X2FjdGlvbl9ncm91cChHVEtf
V0lER0VUKG1fbWVudSksIGdDb250ZXh0TWVudUl0ZW1Hcm91cCkpLCBhY3Rpb24pOwotI2Vsc2UK
LSAgICBnX2FjdGlvbl9tYXBfYWRkX2FjdGlvbihHX0FDVElPTl9NQVAoZ19vYmplY3RfZ2V0X2Rh
dGEoR19PQkpFQ1QobV9tZW51KSwgZ0NvbnRleHRNZW51SXRlbUdyb3VwKSksIGFjdGlvbik7Ci0j
ZW5kaWYKIAogICAgIHN3aXRjaCAobWVudUl0ZW0udHlwZSgpKSB7CiAgICAgY2FzZSBBY3Rpb25U
eXBlOgpAQCAtMjAxLDkgKzE5Nyw2IEBAIFdlYkNvbnRleHRNZW51UHJveHlHdGs6OldlYkNvbnRl
eHRNZW51UHJveHlHdGsoR3RrV2lkZ2V0KiB3ZWJWaWV3LCBXZWJQYWdlUHJveHkmCiB7CiAgICAg
R1JlZlB0cjxHU2ltcGxlQWN0aW9uR3JvdXA+IGdyb3VwID0gYWRvcHRHUmVmKGdfc2ltcGxlX2Fj
dGlvbl9ncm91cF9uZXcoKSk7CiAgICAgZ3RrX3dpZGdldF9pbnNlcnRfYWN0aW9uX2dyb3VwKEdU
S19XSURHRVQobV9tZW51KSwgZ0NvbnRleHRNZW51SXRlbUdyb3VwLCBHX0FDVElPTl9HUk9VUChn
cm91cC5nZXQoKSkpOwotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxNiwgMCkKLSAgICBnX29i
amVjdF9zZXRfZGF0YShHX09CSkVDVChtX21lbnUpLCBnQ29udGV4dE1lbnVJdGVtR3JvdXAsIGdy
b3VwLmdldCgpKTsKLSNlbmRpZgogICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0QWN0aXZlQ29udGV4
dE1lbnVQcm94eShXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3dlYlZpZXcpLCB0aGlzKTsKIH0KIApA
QCAtMjE2LDkgKzIwOSw2IEBAIFdlYkNvbnRleHRNZW51UHJveHlHdGs6On5XZWJDb250ZXh0TWVu
dVByb3h5R3RrKCkKICAgICBtX3NpZ25hbEhhbmRsZXJzLmNsZWFyKCk7CiAKICAgICBndGtfd2lk
Z2V0X2luc2VydF9hY3Rpb25fZ3JvdXAoR1RLX1dJREdFVChtX21lbnUpLCBnQ29udGV4dE1lbnVJ
dGVtR3JvdXAsIG51bGxwdHIpOwotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxNiwgMCkKLSAg
ICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChtX21lbnUpLCBnQ29udGV4dE1lbnVJdGVtR3Jv
dXAsIG51bGxwdHIpOwotI2VuZGlmCiAgICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQo
bV9tZW51KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9X
ZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dl
YktpdEluc3BlY3RvcldpbmRvdy5jcHAKaW5kZXggZWY5MzlmYWRjMWQ5M2Q3MWYxNzkyZGEzZmFm
Yzg4ZjE2OGNkNzFmMC4uMTQ5MGYwZTZmMzBmODNjYzY3NGFkODc3MTIwZDlhODlhYTc3OTVmZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3Rvcldp
bmRvdy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3Rv
cldpbmRvdy5jcHAKQEAgLTM1LDkgKzM1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIHN0
cnVjdCBfV2ViS2l0SW5zcGVjdG9yV2luZG93IHsKICAgICBHdGtXaW5kb3cgcGFyZW50OwogCi0j
aWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTAsIDApCiAgICAgR3RrV2lkZ2V0KiBoZWFkZXJCYXI7
Ci0jZW5kaWYKIH07CiAKIHN0cnVjdCBfV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3MgewpAQCAt
NTIsMTUgKzUwLDExIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9pbnNwZWN0b3Jfd2luZG93X2NsYXNz
X2luaXQoV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3MqKQogCiBzdGF0aWMgdm9pZCB3ZWJraXRf
aW5zcGVjdG9yX3dpbmRvd19pbml0KFdlYktpdEluc3BlY3RvcldpbmRvdyogd2luZG93KQogewot
I2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDEwLCAwKQogICAgIHdpbmRvdy0+aGVhZGVyQmFyID0g
Z3RrX2hlYWRlcl9iYXJfbmV3KCk7CiAgICAgZ3RrX2hlYWRlcl9iYXJfc2V0X3RpdGxlKEdUS19I
RUFERVJfQkFSKHdpbmRvdy0+aGVhZGVyQmFyKSwgXygiV2ViIEluc3BlY3RvciIpKTsKICAgICBn
dGtfaGVhZGVyX2Jhcl9zZXRfc2hvd19jbG9zZV9idXR0b24oR1RLX0hFQURFUl9CQVIod2luZG93
LT5oZWFkZXJCYXIpLCBUUlVFKTsKICAgICBndGtfd2luZG93X3NldF90aXRsZWJhcihHVEtfV0lO
RE9XKHdpbmRvdyksIHdpbmRvdy0+aGVhZGVyQmFyKTsKICAgICBndGtfd2lkZ2V0X3Nob3cod2lu
ZG93LT5oZWFkZXJCYXIpOwotI2Vsc2UKLSAgICBndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lO
RE9XKHdpbmRvdyksIF8oIldlYiBJbnNwZWN0b3IiKSk7Ci0jZW5kaWYKIH0KIAogR3RrV2lkZ2V0
KiB3ZWJraXRJbnNwZWN0b3JXaW5kb3dOZXcoR3RrV2luZG93KiBwYXJlbnQpCkBAIC03MywxNCAr
NjcsNSBAQCB2b2lkIHdlYmtpdEluc3BlY3RvcldpbmRvd1NldFN1YnRpdGxlKFdlYktpdEluc3Bl
Y3RvcldpbmRvdyogd2luZG93LCBjb25zdCBjaGFyKgogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX0lOU1BFQ1RPUl9XSU5ET1cod2luZG93KSk7CiAKLSNpZiBHVEtfQ0hFQ0tfVkVS
U0lPTigzLCAxMCwgMCkKICAgICBndGtfaGVhZGVyX2Jhcl9zZXRfc3VidGl0bGUoR1RLX0hFQURF
Ul9CQVIod2luZG93LT5oZWFkZXJCYXIpLCBzdWJ0aXRsZSk7Ci0jZWxzZQotICAgIGlmIChzdWJ0
aXRsZSkgewotICAgICAgICBHVW5pcXVlUHRyPGdjaGFyPiB0aXRsZShnX3N0cmR1cF9wcmludGYo
IiVzIC0gJXMiLCBfKCJXZWIgSW5zcGVjdG9yIiksIHN1YnRpdGxlKSk7Ci0gICAgICAgIGd0a193
aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1cod2luZG93KSwgdGl0bGUuZ2V0KCkpOwotICAgIH0g
ZWxzZQotICAgICAgICBndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHdpbmRvdyksIF8o
IldlYiBJbnNwZWN0b3IiKSk7Ci0jZW5kaWYKIH0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAppbmRleCA1MjBhYWM5MmMwMWY0ZmE4ZmM2OTA1
MzllZTkxYjNlNzE1ZjYxY2E1Li4zODkxOThhMjAzM2Q3MzdlYjAyMzQ3NTc2ODhkMjliZjI5ZjVk
ZmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5
R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3Rr
LmNwcApAQCAtMTUxLDEyICsxNTEsMTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldElucHV0TWV0
aG9kU3RhdGUoYm9vbCBlbmFibGVkKQogICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0SW5wdXRNZXRo
b2RTdGF0ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh2aWV3V2lkZ2V0KCkpLCBlbmFibGVkKTsKIH0K
IAotI2lmIEhBVkUoR1RLX0dFU1RVUkVTKQogdm9pZCBXZWJQYWdlUHJveHk6OmdldENlbnRlckZv
clpvb21HZXN0dXJlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjZW50ZXJJblZpZXdDb29yZGlu
YXRlcywgV2ViQ29yZTo6SW50UG9pbnQmIGNlbnRlcikKIHsKICAgICBwcm9jZXNzKCkuc2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkdldENlbnRlckZvclpvb21HZXN0dXJlKGNlbnRlckluVmll
d0Nvb3JkaW5hdGVzKSwgTWVzc2FnZXM6OldlYlBhZ2U6OkdldENlbnRlckZvclpvb21HZXN0dXJl
OjpSZXBseShjZW50ZXIpLCBtX3BhZ2VJRCk7CiB9Ci0jZW5kaWYKIAogYm9vbCBXZWJQYWdlUHJv
eHk6Om1ha2VHTENvbnRleHRDdXJyZW50KCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuY3BwCmluZGV4IGFmYjg2YWYyMDc1ZjVi
YTJiZDY5NzBkYjNiM2M0OTRhZWYwMDc5MzkuLmI2MTM4YmQxNzU1YjcwN2NiZDRkMWE5ZWE1MTAy
MjAwZDRiMjdhYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQ
b3B1cE1lbnVQcm94eUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dl
YlBvcHVwTWVudVByb3h5R3RrLmNwcApAQCAtMjUzLDE2ICsyNTMsOSBAQCB2b2lkIFdlYlBvcHVw
TWVudVByb3h5R3RrOjpzaG93UG9wdXBNZW51KGNvbnN0IEludFJlY3QmIHJlY3QsIFRleHREaXJl
Y3Rpb24sIGRvdQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvKiBkaXNwbGF5ID0gZ3RrX3dp
ZGdldF9nZXRfZGlzcGxheShtX3dlYlZpZXcpOwotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIy
LCAwKQogICAgIGF1dG8qIG1vbml0b3IgPSBnZGtfZGlzcGxheV9nZXRfbW9uaXRvcl9hdF93aW5k
b3coZGlzcGxheSwgZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fd2ViVmlldykpOwogICAgIEdka1Jl
Y3RhbmdsZSBhcmVhOwogICAgIGdka19tb25pdG9yX2dldF93b3JrYXJlYShtb25pdG9yLCAmYXJl
YSk7Ci0jZWxzZQotICAgIGF1dG8qIHNjcmVlbiA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbihtX3dl
YlZpZXcpOwotICAgIGdpbnQgbW9uaXRvciA9IGdka19zY3JlZW5fZ2V0X21vbml0b3JfYXRfd2lu
ZG93KHNjcmVlbiwgZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fd2ViVmlldykpOwotICAgIEdka1Jl
Y3RhbmdsZSBhcmVhOwotICAgIGdka19zY3JlZW5fZ2V0X21vbml0b3Jfd29ya2FyZWEoc2NyZWVu
LCBtb25pdG9yLCAmYXJlYSk7Ci0jZW5kaWYKICAgICBpbnQgd2lkdGggPSBzdGQ6Om1pbihyZWN0
LndpZHRoKCksIGFyZWEud2lkdGgpOwogICAgIHNpemVfdCBpdGVtQ291bnQgPSBzdGQ6Om1pbjxz
aXplX3Q+KGl0ZW1zLnNpemUoKSwgKGFyZWEuaGVpZ2h0IC8gMykgLyBpdGVtSGVpZ2h0KTsKIApA
QCAtMzA1LDI4ICsyOTgsMTYgQEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eUd0azo6c2hvd1BvcHVw
TWVudShjb25zdCBJbnRSZWN0JiByZWN0LCBUZXh0RGlyZWN0aW9uLCBkb3UKICAgICAgICAgbV9k
ZXZpY2UgPSBndGtfZ2V0X2N1cnJlbnRfZXZlbnRfZGV2aWNlKCk7CiAgICAgaWYgKG1fZGV2aWNl
ICYmIGdka19kZXZpY2VfZ2V0X2Rpc3BsYXkobV9kZXZpY2UpICE9IGRpc3BsYXkpCiAgICAgICAg
IG1fZGV2aWNlID0gbnVsbHB0cjsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKICAg
ICBpZiAoIW1fZGV2aWNlKQogICAgICAgICBtX2RldmljZSA9IGdka19zZWF0X2dldF9wb2ludGVy
KGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3NlYXQoZGlzcGxheSkpOwotI2Vsc2UKLSAgICBpZiAo
IW1fZGV2aWNlKQotICAgICAgICBtX2RldmljZSA9IGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xp
ZW50X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2VyKGRpc3BsYXkpKTsKLSNl
bmRpZgogICAgIEFTU0VSVChtX2RldmljZSk7CiAgICAgaWYgKGdka19kZXZpY2VfZ2V0X3NvdXJj
ZShtX2RldmljZSkgPT0gR0RLX1NPVVJDRV9LRVlCT0FSRCkKICAgICAgICAgbV9kZXZpY2UgPSBn
ZGtfZGV2aWNlX2dldF9hc3NvY2lhdGVkX2RldmljZShtX2RldmljZSk7CiAKLSNpZiBHVEtfQ0hF
Q0tfVkVSU0lPTigzLCAyMCwgMCkKICAgICBndGtfZ3JhYl9hZGQobV9wb3B1cCk7CiAgICAgYXV0
byBncmFiUmVzdWx0ID0gZ2RrX3NlYXRfZ3JhYihnZGtfZGV2aWNlX2dldF9zZWF0KG1fZGV2aWNl
KSwgZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fcG9wdXApLCBHREtfU0VBVF9DQVBBQklMSVRZX0FM
TCwgVFJVRSwgbnVsbHB0ciwgbnVsbHB0ciwgW10oR2RrU2VhdCosIEdka1dpbmRvdyosIGdwb2lu
dGVyIHVzZXJEYXRhKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFdlYlBvcHVwTWVudVByb3h5R3Rr
Kj4odXNlckRhdGEpLT5zaG93KCk7CiAgICAgfSwgdGhpcyk7Ci0jZWxzZQotICAgIGd0a19kZXZp
Y2VfZ3JhYl9hZGQobV9wb3B1cCwgbV9kZXZpY2UsIFRSVUUpOwotICAgIGF1dG8gZ3JhYlJlc3Vs
dCA9IGdka19kZXZpY2VfZ3JhYihtX2RldmljZSwgZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fcG9w
dXApLCBHREtfT1dORVJTSElQX1dJTkRPVywgVFJVRSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8R2Rr
RXZlbnRNYXNrPihHREtfQlVUVE9OX1BSRVNTX01BU0sgfCBHREtfQlVUVE9OX1JFTEVBU0VfTUFT
SyB8IEdES19QT0lOVEVSX01PVElPTl9NQVNLKSwgbnVsbHB0ciwgR0RLX0NVUlJFTlRfVElNRSk7
Ci0gICAgc2hvdygpOwotI2VuZGlmCiAKICAgICAvLyBQb3B1cE1lbnUgY2FuIGZhaWwgdG8gb3Bl
biB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIGdyYWIuCiAgICAgLy8gRW5zdXJlIFdlYkNvcmUgZG9l
cyBub3QgZ28gaW50byBzb21lIHBlc2t5IHN0YXRlLgpAQCAtMzQyLDEzICszMjMsOCBAQCB2b2lk
IFdlYlBvcHVwTWVudVByb3h5R3RrOjpoaWRlUG9wdXBNZW51KCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKG1fZGV2aWNlKSB7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCiAg
ICAgICAgIGdka19zZWF0X3VuZ3JhYihnZGtfZGV2aWNlX2dldF9zZWF0KG1fZGV2aWNlKSk7CiAg
ICAgICAgIGd0a19ncmFiX3JlbW92ZShtX3BvcHVwKTsKLSNlbHNlCi0gICAgICAgIGdka19kZXZp
Y2VfdW5ncmFiKG1fZGV2aWNlLCBHREtfQ1VSUkVOVF9USU1FKTsKLSAgICAgICAgZ3RrX2Rldmlj
ZV9ncmFiX3JlbW92ZShtX3BvcHVwLCBtX2RldmljZSk7Ci0jZW5kaWYKICAgICAgICAgZ3RrX3dp
bmRvd19zZXRfdHJhbnNpZW50X2ZvcihHVEtfV0lORE9XKG1fcG9wdXApLCBudWxscHRyKTsKICAg
ICAgICAgZ3RrX3dpbmRvd19zZXRfYXR0YWNoZWRfdG8oR1RLX1dJTkRPVyhtX3BvcHVwKSwgbnVs
bHB0cik7CiAgICAgICAgIG1fZGV2aWNlID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCAwYmJhOTdkZjhiNmRiNWZjZmExMTEyMWQ5YmRj
MDZjODhmODYzMTVjLi5lYTM2ODg1ZThhYjEwZWViMjI3ZDlkZWQxODFiNGEzZGUxYzFmNjExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC03NjgsOSAr
NzY4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjb2xsYXBzZVNlbGVjdGlvbkluRnJhbWUodWlu
dDY0X3QgZnJhbWVJRCk7CiAgICAgdm9pZCBzaG93RW1vamlQaWNrZXIoV2ViQ29yZTo6RnJhbWUm
KTsKLSNlbmRpZgogCi0jaWYgUExBVEZPUk0gKEdUSykgJiYgSEFWRShHVEtfR0VTVFVSRVMpCiAg
ICAgdm9pZCBnZXRDZW50ZXJGb3Jab29tR2VzdHVyZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
Y2VudGVySW5WaWV3Q29vcmRpbmF0ZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6
SW50UG9pbnQmJik+JiYpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDZmOWY5NzI0M2JhNGI1N2Jl
ZGMzYTQ4MGYwZmQxNGEyODA0OWNjOTguLmQ5ODIyZDM4ODBiODhhNWU1NTg0Njk4ZmU5NmFjY2I3
MzdiODA0NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAtNDA5LDkgKzQwOSw3IEBAIEdlbmVyYXRlU3ludGhldGlj
RWRpdGluZ0NvbW1hbmQoZW51bTp1aW50OF90IFdlYktpdDo6U3ludGhldGljRWRpdGluZ0NvbW1h
bmRUeXBlCiAgICAgQ2FuY2VsQ29tcG9zaXRpb24oKQogCiAgICAgQ29sbGFwc2VTZWxlY3Rpb25J
bkZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpCi0jZW5kaWYKIAotI2lmIFBMQVRGT1JNIChHVEspICYm
IEhBVkUoR1RLX0dFU1RVUkVTKQogICAgIEdldENlbnRlckZvclpvb21HZXN0dXJlKFdlYkNvcmU6
OkludFBvaW50IGNlbnRlckluVmlld0Nvb3JkaW5hdGVzKSAtPiAoV2ViQ29yZTo6SW50UG9pbnQg
Y2VudGVyKSBTeW5jaHJvbm91cwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcAppbmRleCA2ZWQ1YjMzZTZiMjdmNjYx
ZDUxNmQ0ZTU2MGUwNWRmNWQ3YjExZTAxLi42YTk1N2NiNzlhNzIwM2Q1YTI3MDdmNmQyN2U0NGM4
Y2JlZTBkYzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9n
dGsvV2ViUGFnZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL1dlYlBhZ2VHdGsuY3BwCkBAIC0xNjYsNyArMTY2LDYgQEAgU3RyaW5nIFdlYlBhZ2U6OnBs
YXRmb3JtVXNlckFnZW50KGNvbnN0IFVSTCYgdXJsKSBjb25zdAogICAgIHJldHVybiBXZWJDb3Jl
OjpzdGFuZGFyZFVzZXJBZ2VudEZvclVSTCh1cmwpOwogfQogCi0jaWYgSEFWRShHVEtfR0VTVFVS
RVMpCiB2b2lkIFdlYlBhZ2U6OmdldENlbnRlckZvclpvb21HZXN0dXJlKGNvbnN0IEludFBvaW50
JiBjZW50ZXJJblZpZXdDb29yZGluYXRlcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3Jl
OjpJbnRQb2ludCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBJbnRQb2ludCByZXN1
bHQgPSBtYWluRnJhbWVWaWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhjZW50ZXJJblZpZXdDb29y
ZGluYXRlcyk7CkBAIC0xNzQsNyArMTczLDYgQEAgdm9pZCBXZWJQYWdlOjpnZXRDZW50ZXJGb3Ja
b29tR2VzdHVyZShjb25zdCBJbnRQb2ludCYgY2VudGVySW5WaWV3Q29vcmRpbmF0ZXMsIEMKICAg
ICByZXN1bHQuc2NhbGUoMSAvIHNjYWxlLCAxIC8gc2NhbGUpOwogICAgIGNvbXBsZXRpb25IYW5k
bGVyKFdURk1vdmUocmVzdWx0KSk7CiB9Ci0jZW5kaWYKIAogdm9pZCBXZWJQYWdlOjpzZXRJbnB1
dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9G
aW5kR1RLMy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9GaW5kR1RLMy5jbWFrZQppbmRleCA4Y2U1NDMz
OTA2ZmZlYTFlODVmMWNhMzk4ZGEwMDU4YzVhY2Q1OWQ1Li44ODVhMGJhZDQ0Yzg3MWJlNGE1NGJi
NWE0NDJlNDI3OGZhMGYxNDdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvRmluZEdUSzMuY21h
a2UKKysrIGIvU291cmNlL2NtYWtlL0ZpbmRHVEszLmNtYWtlCkBAIC00LDcgKzQsNiBAQAogIyAg
R1RLM19GT1VORCAtIHN5c3RlbSBoYXMgR1RLKyAzLgogIyAgR1RLM19JTkNMVURFX0RJUlMgLSB0
aGUgR1RLKyAzLiBpbmNsdWRlIGRpcmVjdG9yaWVzCiAjICBHVEszX0xJQlJBUklFUyAtIGxpbmsg
dGhlc2UgdG8gdXNlIEdUSysgMy4KLSMgIEdUSzNfU1VQUE9SVFNfR0VTVFVSRVMgLSBHVEsrIHN1
cHBvcnRzIGdlc3R1cmVzIChHVEsrID49IDMuMTQpCiAjICBHVEszX1NVUFBPUlRTX1FVQVJUWiAt
IEdUSysgc3VwcG9ydHMgUXVhcnR6IGJhY2tlbmQKICMgIEdUSzNfU1VQUE9SVFNfWDExIC0gR1RL
KyBzdXBwb3J0cyBYMTEgYmFja2VuZAogIyAgR1RLM19TVVBQT1JUU19XQVlMQU5EIC0gR1RLKyBz
dXBwb3J0cyBXYXlsYW5kIGJhY2tlbmQKQEAgLTcwLDEyICs2OSw2IEBAIGlmIChHVEszX1ZFUlNJ
T04gQU5EIFZFUlNJT05fT0spCiAgICAgZWxzZSAoKQogICAgICAgICBzZXQoR1RLM19TVVBQT1JU
U19XQVlMQU5EIEZBTFNFKQogICAgIGVuZGlmICgpCi0KLSAgICBpZiAoTk9UKCIke0dUSzNfVkVS
U0lPTn0iIFZFUlNJT05fTEVTUyAiMy4xNC4wIikpCi0gICAgICAgIHNldChHVEszX1NVUFBPUlRT
X0dFU1RVUkVTIE9OKQotICAgIGVsc2UgKCkKLSAgICAgICAgc2V0KEdUSzNfU1VQUE9SVFNfR0VT
VFVSRVMgT0ZGKQotICAgIGVuZGlmICgpCiBlbmRpZiAoKQogCiBpbmNsdWRlKEZpbmRQYWNrYWdl
SGFuZGxlU3RhbmRhcmRBcmdzKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0dTdHJlYW1lckNo
ZWNrcy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2UKaW5kZXggNDM5
NDdjNjYyNThjNWM5NWFjMTZkYWU3YjZmMjAzZWM2NmVkYmY3MC4uMThiMTJmODJhOGQyOGMzNDIz
ZjNlNmYzMTQ3Mzg4OThjMWY2NDc2YyAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL0dTdHJlYW1l
ckNoZWNrcy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtlCkBA
IC0xMCw3ICsxMCw3IEBAIGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAg
ICAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX1dFQkFVRElPX0dTVFJFQU1FUiBUUlVF
KQogICAgIGVuZGlmICgpCiAKLSAgICBmaW5kX3BhY2thZ2UoR1N0cmVhbWVyIDEuOC4zIFJFUVVJ
UkVEIENPTVBPTkVOVFMgJHtHU1RSRUFNRVJfQ09NUE9ORU5UU30pCisgICAgZmluZF9wYWNrYWdl
KEdTdHJlYW1lciAxLjEwLjAgUkVRVUlSRUQgQ09NUE9ORU5UUyAke0dTVFJFQU1FUl9DT01QT05F
TlRTfSkKIAogICAgIGlmIChFTkFCTEVfV0VCX0FVRElPKQogICAgICAgICBpZiAoTk9UIFBDX0dT
VFJFQU1FUl9BVURJT19GT1VORCBPUiBOT1QgUENfR1NUUkVBTUVSX0ZGVF9GT1VORCkKQEAgLTI2
LDM5ICsyNiwyNCBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAg
ICAgIGVuZGlmICgpCiAgICAgZW5kaWYgKCkKIAotICAgIGlmIChVU0VfR1NUUkVBTUVSX01QRUdU
UykKLSAgICAgICAgaWYgKE5PVCBQQ19HU1RSRUFNRVJfTVBFR1RTX0ZPVU5EKQotICAgICAgICAg
ICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiR1N0cmVhbWVyIE1QRUctVFMgaXMgbmVlZGVkIGZvciBV
U0VfR1NUUkVBTUVSX01QRUdUUy4iKQotICAgICAgICBlbmRpZiAoKQorICAgIGlmIChVU0VfR1NU
UkVBTUVSX01QRUdUUyBBTkQgTk9UIFBDX0dTVFJFQU1FUl9NUEVHVFNfRk9VTkQpCisgICAgICAg
IG1lc3NhZ2UoRkFUQUxfRVJST1IgIkdTdHJlYW1lciBNUEVHLVRTIGlzIG5lZWRlZCBmb3IgVVNF
X0dTVFJFQU1FUl9NUEVHVFMuIikKICAgICBlbmRpZiAoKQogCi0gICAgaWYgKFVTRV9HU1RSRUFN
RVJfR0wpCi0gICAgICAgIGlmIChQQ19HU1RSRUFNRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgIjEu
MTAiKQotICAgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiR1N0cmVhbWVyIDEuMTAgaXMg
bmVlZGVkIGZvciBVU0VfR1NUUkVBTUVSX0dMLiIpCi0gICAgICAgIGVsc2UgKCkKLSAgICAgICAg
ICAgIGlmIChOT1QgUENfR1NUUkVBTUVSX0dMX0ZPVU5EKQotICAgICAgICAgICAgICAgIG1lc3Nh
Z2UoRkFUQUxfRVJST1IgIkdTdHJlYW1lckdMIGlzIG5lZWRlZCBmb3IgVVNFX0dTVFJFQU1FUl9H
TC4iKQotICAgICAgICAgICAgZW5kaWYgKCkKLSAgICAgICAgZW5kaWYgKCkKKyAgICBpZiAoVVNF
X0dTVFJFQU1FUl9HTCBBTkQgTk9UIFBDX0dTVFJFQU1FUl9HTF9GT1VORCkKKyAgICAgICAgbWVz
c2FnZShGQVRBTF9FUlJPUiAiR1N0cmVhbWVyR0wgaXMgbmVlZGVkIGZvciBVU0VfR1NUUkVBTUVS
X0dMLiIpCiAgICAgZW5kaWYgKCkKIAogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9H
U1RSRUFNRVIgVFJVRSkKIGVuZGlmICgpCiAKLWlmIChFTkFCTEVfTUVESUFfU09VUkNFKQotICAg
IGlmIChQQ19HU1RSRUFNRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgIjEuMTQiKQotICAgICAgICBt
ZXNzYWdlKEZBVEFMX0VSUk9SICJHU3RyZWFtZXIgMS4xNCBpcyBuZWVkZWQgZm9yIEVOQUJMRV9N
RURJQV9TT1VSQ0UuIikKLSAgICBlbmRpZiAoKQoraWYgKEVOQUJMRV9NRURJQV9TT1VSQ0UgQU5E
IFBDX0dTVFJFQU1FUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAiMS4xNCIpCisgICAgbWVzc2FnZShG
QVRBTF9FUlJPUiAiR1N0cmVhbWVyIDEuMTQgaXMgbmVlZGVkIGZvciBFTkFCTEVfTUVESUFfU09V
UkNFLiIpCiBlbmRpZiAoKQogCiBpZiAoRU5BQkxFX01FRElBX1NUUkVBTSBPUiBFTkFCTEVfV0VC
X1JUQykKLSAgICBpZiAoUENfR1NUUkVBTUVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIxLjEwIikK
LSAgICAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0xJQldFQlJUQyBGQUxTRSkKLSAg
ICAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoV0VCUlRDX1dFQktJVF9CVUlMRCBGQUxTRSkK
LSAgICBlbHNlICgpCi0gICAgICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9MSUJXRUJS
VEMgVFJVRSkKLSAgICAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoV0VCUlRDX1dFQktJVF9C
VUlMRCBUUlVFKQotICAgIGVuZGlmICgpCisgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNF
X0xJQldFQlJUQyBUUlVFKQorICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFdFQlJUQ19XRUJL
SVRfQlVJTEQgVFJVRSkKIGVsc2UgKCkKICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0Vf
TElCV0VCUlRDIEZBTFNFKQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFdFQlJUQ19XRUJL
SVRfQlVJTEQgRkFMU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFr
ZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IDA2YzgzYmQ0ZjNkMzhhYWUx
N2EzY2NjMjM1YzhhOWNjZmM0YWY4MzQuLmFmN2JhNjQ0ZmE1NTA0MzI2OTA2MjQxNTg4OTM1ZTQ3
ODVmMmU4Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCisrKyBi
L1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCkBAIC0xNywyMiArMTcsMjMgQEAgc2V0KFdF
QktJVEdUS19IRUFERVJfSU5TVEFMTF9ESVIgIiR7Q01BS0VfSU5TVEFMTF9JTkNMVURFRElSfS93
ZWJraXRndGstJHtXRUJLSVQKIHNldChJTlRST1NQRUNUSU9OX0lOU1RBTExfR0lSRElSICIke0NN
QUtFX0lOU1RBTExfRlVMTF9EQVRBRElSfS9naXItMS4wIikKIHNldChJTlRST1NQRUNUSU9OX0lO
U1RBTExfVFlQRUxJQkRJUiAiJHtMSUJfSU5TVEFMTF9ESVJ9L2dpcmVwb3NpdG9yeS0xLjAiKQog
Ci1maW5kX3BhY2thZ2UoQ2Fpcm8gMS4xMC4yIFJFUVVJUkVEKQorZmluZF9wYWNrYWdlKENhaXJv
IDEuMTQuMCBSRVFVSVJFRCkKIGZpbmRfcGFja2FnZShGb250Y29uZmlnIDIuOC4wIFJFUVVJUkVE
KQogZmluZF9wYWNrYWdlKEZyZWV0eXBlIDIuNC4yIFJFUVVJUkVEKQogZmluZF9wYWNrYWdlKExp
YkdjcnlwdCAxLjYuMCBSRVFVSVJFRCkKLWZpbmRfcGFja2FnZShHVEszIDMuNi4wIFJFUVVJUkVE
KQotZmluZF9wYWNrYWdlKEdESzMgMy42LjAgUkVRVUlSRUQpCitmaW5kX3BhY2thZ2UoR0xJQiAy
LjQ0LjAgUkVRVUlSRUQgQ09NUE9ORU5UUyBnaW8gZ2lvLXVuaXggZ29iamVjdCBndGhyZWFkIGdt
b2R1bGUpCitmaW5kX3BhY2thZ2UoR1RLMyAzLjIyLjAgUkVRVUlSRUQpCitmaW5kX3BhY2thZ2Uo
R0RLMyAzLjIyLjAgUkVRVUlSRUQpCiBmaW5kX3BhY2thZ2UoSGFyZkJ1enogMC45LjIgUkVRVUlS
RUQpCiBmaW5kX3BhY2thZ2UoSUNVIFJFUVVJUkVEIENPTVBPTkVOVFMgZGF0YSBpMThuIHVjKQog
ZmluZF9wYWNrYWdlKEpQRUcgUkVRVUlSRUQpCi1maW5kX3BhY2thZ2UoTGliU291cCAyLjQyLjAg
UkVRVUlSRUQpCitmaW5kX3BhY2thZ2UoTGliU291cCAyLjU0LjAgUkVRVUlSRUQpCiBmaW5kX3Bh
Y2thZ2UoTGliWG1sMiAyLjguMCBSRVFVSVJFRCkKIGZpbmRfcGFja2FnZShQTkcgUkVRVUlSRUQp
CiBmaW5kX3BhY2thZ2UoU3FsaXRlIFJFUVVJUkVEKQogZmluZF9wYWNrYWdlKFRocmVhZHMgUkVR
VUlSRUQpCiBmaW5kX3BhY2thZ2UoWkxJQiBSRVFVSVJFRCkKLWZpbmRfcGFja2FnZShBVEsgUkVR
VUlSRUQpCitmaW5kX3BhY2thZ2UoQVRLIDIuMTYuMCBSRVFVSVJFRCkKIGZpbmRfcGFja2FnZShX
ZWJQIFJFUVVJUkVEKQogZmluZF9wYWNrYWdlKEFUU1BJIDIuNS4zKQogZmluZF9wYWNrYWdlKEVH
TCkKQEAgLTcwLDcgKzcxLDcgQEAgaWYgKE5PVCBPUEVOR0xfRk9VTkQgQU5EIE9QRU5HTEVTMl9G
T1VORCkKICAgICBzZXQoRU5BQkxFX0dMRVMyX0RFRkFVTFQgT04pCiBlbmRpZiAoKQogCi0jIFB1
YmxpYyBvcHRpb25zIHNwZWNpZmljIHRvIHRoZSBHVEsrIHBvcnQuIERvIG5vdCBhZGQgYW55IG9w
dGlvbnMgaGVyZSB1bmxlc3MKKyMgUHVibGljIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIEdUSyBw
b3J0LiBEbyBub3QgYWRkIGFueSBvcHRpb25zIGhlcmUgdW5sZXNzCiAjIHRoZXJlIGlzIGEgc3Ry
b25nIHJlYXNvbiB3ZSBzaG91bGQgc3VwcG9ydCBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIG9w
dGlvbiwKICMgYW5kIHRoZSBvcHRpb24gaXMgbm90IHJlbGV2YW50IHRvIGFueSBvdGhlciBXZWJL
aXQgcG9ydHMuCiBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfR0xFUzIgIldoZXRoZXIgdG8g
ZW5hYmxlIE9wZW5HTCBFUyAyLjAuIiBQVUJMSUMgJHtFTkFCTEVfR0xFUzJfREVGQVVMVH0pCkBA
IC04Nyw3ICs4OCw3IEBAIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9PUEVOSlBFRyAiV2hldGhl
ciB0byBlbmFibGUgc3VwcG9ydCBmb3IgSlBFRzIwMDAgaW1hZ2VzCiBXRUJLSVRfT1BUSU9OX0RF
RklORShVU0VfV09GRjIgIldoZXRoZXIgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFdPRkYyIFdlYiBG
b250cy4iIFBVQkxJQyBPTikKIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9XUEVfUkVOREVSRVIg
IldoZXRoZXIgdG8gZW5hYmxlIFdQRSByZW5kZXJpbmciIFBVQkxJQyBPTikKIAotIyBQcml2YXRl
IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIEdUSysgcG9ydC4gQ2hhbmdpbmcgdGhlc2Ugb3B0aW9u
cyBpcworIyBQcml2YXRlIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIEdUSyBwb3J0LiBDaGFuZ2lu
ZyB0aGVzZSBvcHRpb25zIGlzCiAjIGNvbXBsZXRlbHkgdW5zdXBwb3J0ZWQuIFRoZXkgYXJlIGlu
dGVuZGVkIGZvciB1c2Ugb25seSBieSBXZWJLaXQgZGV2ZWxvcGVycy4KIFdFQktJVF9PUFRJT05f
REVGSU5FKFVTRV9PUEVOVlIgIldoZXRoZXIgdG8gdXNlIE9wZW5WUiBhcyBXZWJWUiBiYWNrZW5k
LiIgUFJJVkFURSBPRkYpCiAKQEAgLTEzNCw3ICsxMzUsNyBAQCBpZiAoKCIke1BDX0NBSVJPX1ZF
UlNJT059IiBWRVJTSU9OX0dSRUFURVIgIjEuMTYuMCIgT1IgIiR7UENfQ0FJUk9fVkVSU0lPTn0i
IFNUUgogZW5kaWYgKCkKIAogIyBQdWJsaWMgb3B0aW9ucyBzaGFyZWQgd2l0aCBvdGhlciBXZWJL
aXQgcG9ydHMuIERvIG5vdCBhZGQgYW55IG9wdGlvbnMgaGVyZQotIyB3aXRob3V0IGFwcHJvdmFs
IGZyb20gYSBHVEsrIHJldmlld2VyLiBUaGVyZSBtdXN0IGJlIHN0cm9uZyByZWFzb24gdG8gc3Vw
cG9ydAorIyB3aXRob3V0IGFwcHJvdmFsIGZyb20gYSBHVEsgcmV2aWV3ZXIuIFRoZXJlIG11c3Qg
YmUgc3Ryb25nIHJlYXNvbiB0byBzdXBwb3J0CiAjIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUg
b3B0aW9uLgogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FDQ0VMRVJB
VEVEXzJEX0NBTlZBUyBQVUJMSUMgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX0FTWU5DX1NDUk9MTElORyBQUklWQVRFIE9GRikKQEAgLTE5MiwxMyArMTkzLDkg
QEAgc2V0KEdUS19JTkNMVURFX0RJUlMgJHtHVEszX0lOQ0xVREVfRElSU30pCiBzZXQoR0RLX0xJ
QlJBUklFUyAke0dESzNfTElCUkFSSUVTfSkKIHNldChHREtfSU5DTFVERV9ESVJTICR7R0RLM19J
TkNMVURFX0RJUlN9KQogCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChIQVZFX0dUS19HRVNUVVJF
UyAke0dUSzNfU1VQUE9SVFNfR0VTVFVSRVN9KQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoSEFW
RV9HVEtfVU5JWF9QUklOVElORyAke0dUS1VuaXhQcmludF9GT1VORH0pCiBTRVRfQU5EX0VYUE9T
RV9UT19CVUlMRChIQVZFX09TX0RBUktfTU9ERV9TVVBQT1JUIDEpCiAKLXNldChnbGliX2NvbXBv
bmVudHMgZ2lvIGdpby11bml4IGdvYmplY3QgZ3RocmVhZCBnbW9kdWxlKQotZmluZF9wYWNrYWdl
KEdMSUIgMi4zNiBSRVFVSVJFRCBDT01QT05FTlRTICR7Z2xpYl9jb21wb25lbnRzfSkKLQogaWYg
KFVTRV9XUEVfUkVOREVSRVIpCiAgICAgZmluZF9wYWNrYWdlKFdQRSAxLjMuMCkKICAgICBpZiAo
Tk9UIFdQRV9GT1VORCkKQEAgLTI1NCwxNCArMjUxLDYgQEAgaWYgKEVOQUJMRV9XRUJfQ1JZUFRP
KQogZW5kaWYgKCkKIAogaWYgKEVOQUJMRV9XRUJEUklWRVIpCi0gICAgIyBXZWJEcml2ZXIgcmVx
dWlyZXMgbmV3ZXIgdmVyc2lvbnMgb2YgR0xpYiBhbmQgU291cC4KLSAgICBpZiAoUENfR0xJQl9W
RVJTSU9OIFZFUlNJT05fTEVTUyAiMi40MCIpCi0gICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1Ig
IkdMaWIgMi40MCBpcyByZXF1aXJlZCB0byBlbmFibGUgV2ViRHJpdmVyIHN1cHBvcnQuIikKLSAg
ICBlbmRpZiAoKQotICAgIGlmIChQQ19MSUJTT1VQX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIyLjQ4
IikKLSAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAibGlic291cCAyLjQ4IGlzIHJlcXVpcmVk
IHRvIGVuYWJsZSBXZWJEcml2ZXIgc3VwcG9ydC4iKQotICAgIGVuZGlmICgpCi0KICAgICBTRVRf
QU5EX0VYUE9TRV9UT19CVUlMRChFTkFCTEVfV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9O
UyBPTikKICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChFTkFCTEVfV0VCRFJJVkVSX01PVVNF
X0lOVEVSQUNUSU9OUyBPTikKICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChFTkFCTEVfV0VC
RFJJVkVSX1RPVUNIX0lOVEVSQUNUSU9OUyBPRkYpCkBAIC0zMTMsMTMgKzMwMiwxMyBAQCBlbmRp
ZiAoKQogCiBpZiAoRU5BQkxFX1FVQVJUWl9UQVJHRVQpCiAgICAgaWYgKE5PVCBHVEszX1NVUFBP
UlRTX1FVQVJUWikKLSAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiUmVjb21waWxlIEdUSysg
d2l0aCBRdWFydHogYmFja2VuZCB0byB1c2UgRU5BQkxFX1FVQVJUWl9UQVJHRVQiKQorICAgICAg
ICBtZXNzYWdlKEZBVEFMX0VSUk9SICJSZWNvbXBpbGUgR1RLIHdpdGggUXVhcnR6IGJhY2tlbmQg
dG8gdXNlIEVOQUJMRV9RVUFSVFpfVEFSR0VUIikKICAgICBlbmRpZiAoKQogZW5kaWYgKCkKIAog
aWYgKEVOQUJMRV9YMTFfVEFSR0VUKQogICAgIGlmIChOT1QgR1RLM19TVVBQT1JUU19YMTEpCi0g
ICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlJlY29tcGlsZSBHVEsrIHdpdGggWDExIGJhY2tl
bmQgdG8gdXNlIEVOQUJMRV9YMTFfVEFSR0VUIikKKyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJP
UiAiUmVjb21waWxlIEdUSyB3aXRoIFgxMSBiYWNrZW5kIHRvIHVzZSBFTkFCTEVfWDExX1RBUkdF
VCIpCiAgICAgZW5kaWYgKCkKIAogICAgIGZpbmRfcGFja2FnZShYMTEgUkVRVUlSRUQpCkBAIC0z
MzYsMTEgKzMyNSw3IEBAIGVuZGlmICgpCiAKIGlmIChFTkFCTEVfV0FZTEFORF9UQVJHRVQpCiAg
ICAgaWYgKE5PVCBHVEszX1NVUFBPUlRTX1dBWUxBTkQpCi0gICAgICAgIG1lc3NhZ2UoRkFUQUxf
RVJST1IgIlJlY29tcGlsZSBHVEsrIHdpdGggV2F5bGFuZCBiYWNrZW5kIHRvIHVzZSBFTkFCTEVf
V0FZTEFORF9UQVJHRVQiKQotICAgIGVuZGlmICgpCi0KLSAgICBpZiAoR1RLM19WRVJTSU9OIFZF
UlNJT05fTEVTUyAzLjEyKQotICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJHVEsrIDMuMTIg
aXMgcmVxdWlyZWQgdG8gdXNlIEVOQUJMRV9XQVlMQU5EX1RBUkdFVCIpCisgICAgICAgIG1lc3Nh
Z2UoRkFUQUxfRVJST1IgIlJlY29tcGlsZSBHVEsgd2l0aCBXYXlsYW5kIGJhY2tlbmQgdG8gdXNl
IEVOQUJMRV9XQVlMQU5EX1RBUkdFVCIpCiAgICAgZW5kaWYgKCkKIAogICAgIGlmIChOT1QgRUdM
X0ZPVU5EKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UgYi9Tb3Vy
Y2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZQppbmRleCA0OTQ5ODA2MDhmYTFkODdiZmNiZGUyMTMz
NTc2N2E3NjMxYWE2NDhiLi42Y2I4YzBjMmFmMWMyNjljMDdjMzM4ODE0M2MxOWQxZTRmYTYzODRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZQorKysgYi9Tb3VyY2Uv
Y21ha2UvT3B0aW9uc1dQRS5jbWFrZQpAQCAtMTIsMTYgKzEyLDE2IEBAIHNldChMSUJfSU5TVEFM
TF9ESVIgIiR7Q01BS0VfSU5TVEFMTF9GVUxMX0xJQkRJUn0iIENBQ0hFIFBBVEggIkFic29sdXRl
IHBhdGggdG8KIHNldChFWEVDX0lOU1RBTExfRElSICIke0NNQUtFX0lOU1RBTExfRlVMTF9CSU5E
SVJ9IiBDQUNIRSBQQVRIICJBYnNvbHV0ZSBwYXRoIHRvIGV4ZWN1dGFibGUgaW5zdGFsbGF0aW9u
IGRpcmVjdG9yeSIpCiBzZXQoTElCRVhFQ19JTlNUQUxMX0RJUiAiJHtDTUFLRV9JTlNUQUxMX0ZV
TExfTElCRVhFQ0RJUn0vd3BlLXdlYmtpdC0ke1dQRV9BUElfVkVSU0lPTn0iIENBQ0hFIFBBVEgg
IkFic29sdXRlIHBhdGggdG8gaW5zdGFsbCBleGVjdXRhYmxlcyBleGVjdXRlZCBieSB0aGUgbGli
cmFyeSIpCiAKLWZpbmRfcGFja2FnZShDYWlybyAxLjEwLjIgUkVRVUlSRUQpCitmaW5kX3BhY2th
Z2UoQ2Fpcm8gMS4xNC4wIFJFUVVJUkVEKQogZmluZF9wYWNrYWdlKEZvbnRjb25maWcgMi44LjAg
UkVRVUlSRUQpCiBmaW5kX3BhY2thZ2UoRnJlZXR5cGUgMi40LjIgUkVRVUlSRUQpCi1maW5kX3Bh
Y2thZ2UoR0xJQiAyLjQwLjAgUkVRVUlSRUQgQ09NUE9ORU5UUyBnaW8gZ2lvLXVuaXggZ29iamVj
dCBndGhyZWFkIGdtb2R1bGUpCitmaW5kX3BhY2thZ2UoR0xJQiAyLjQ0LjAgUkVRVUlSRUQgQ09N
UE9ORU5UUyBnaW8gZ2lvLXVuaXggZ29iamVjdCBndGhyZWFkIGdtb2R1bGUpCiBmaW5kX3BhY2th
Z2UoSGFyZkJ1enogMC45LjE4IFJFUVVJUkVEKQogZmluZF9wYWNrYWdlKElDVSBSRVFVSVJFRCBD
T01QT05FTlRTIGRhdGEgaTE4biB1YykKIGZpbmRfcGFja2FnZShKUEVHIFJFUVVJUkVEKQogZmlu
ZF9wYWNrYWdlKExpYkVwb3h5IDEuNC4wIFJFUVVJUkVEKQogZmluZF9wYWNrYWdlKExpYkdjcnlw
dCAxLjYuMCBSRVFVSVJFRCkKLWZpbmRfcGFja2FnZShMaWJTb3VwIDIuNDIuMCBSRVFVSVJFRCkK
K2ZpbmRfcGFja2FnZShMaWJTb3VwIDIuNTQuMCBSRVFVSVJFRCkKIGZpbmRfcGFja2FnZShMaWJY
bWwyIDIuOC4wIFJFUVVJUkVEKQogZmluZF9wYWNrYWdlKFBORyBSRVFVSVJFRCkKIGZpbmRfcGFj
a2FnZShTcWxpdGUgUkVRVUlSRUQpCkBAIC0xMDksNyArMTA5LDcgQEAgaW5jbHVkZShHU3RyZWFt
ZXJEZXBlbmRlbmNpZXMpCiBXRUJLSVRfT1BUSU9OX0VORCgpCiAKIGlmIChFTkFCTEVfQUNDRVNT
SUJJTElUWSkKLSAgICBmaW5kX3BhY2thZ2UoQVRLKQorICAgIGZpbmRfcGFja2FnZShBVEsgMi4x
Ni4wKQogICAgIGlmIChOT1QgQVRLX0ZPVU5EKQogICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9S
ICJhdGsgaXMgbmVlZGVkIGZvciBFTkFCTEVfQUNDRVNTSUJJTElUWSIpCiAgICAgZW5kaWYgKCkK
QEAgLTE1MSwxNCArMTUxLDYgQEAgaWYgKEVOQUJMRV9XRUJfQ1JZUFRPKQogZW5kaWYgKCkKIAog
aWYgKEVOQUJMRV9XRUJEUklWRVIpCi0gICAgIyBXZWJEcml2ZXIgcmVxdWlyZXMgbmV3ZXIgdmVy
c2lvbnMgb2YgR0xpYiBhbmQgU291cC4KLSAgICBpZiAoUENfR0xJQl9WRVJTSU9OIFZFUlNJT05f
TEVTUyAiMi40MCIpCi0gICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkdMaWIgMi40MCBpcyBy
ZXF1aXJlZCB0byBlbmFibGUgV2ViRHJpdmVyIHN1cHBvcnQuIikKLSAgICBlbmRpZiAoKQotICAg
IGlmIChQQ19MSUJTT1VQX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIyLjQ4IikKLSAgICAgICAgbWVz
c2FnZShGQVRBTF9FUlJPUiAibGlic291cCAyLjQ4IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBXZWJE
cml2ZXIgc3VwcG9ydC4iKQotICAgIGVuZGlmICgpCi0KICAgICBTRVRfQU5EX0VYUE9TRV9UT19C
VUlMRChFTkFCTEVfV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9OUyBPTikKICAgICBTRVRf
QU5EX0VYUE9TRV9UT19CVUlMRChFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUyBP
TikKICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChFTkFCTEVfV0VCRFJJVkVSX1RPVUNIX0lO
VEVSQUNUSU9OUyBPRkYpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFu
Z2VMb2cKaW5kZXggOTgzZWI4ZmFiMzE5MjlmYjdiNmNkZDNkYzdmNmJhYmQ5Zjc5M2ZkMS4uYjhl
ZTlkNmRkOWRhMmMzNjM0MTU2ZTkxNzg3NjE1N2IyYzljZGRiOCAxMDA2NDQKLS0tIGEvVG9vbHMv
Q2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDE5LTA2
LTIwICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KKworICAgICAg
ICBbV1BFXVtHVEtdIEJ1bXAgbWluaW11bSB2ZXJzaW9ucyBvZiBHTGliLCBHVEssIGxpYnNvdXAs
IEFUSywgR1N0cmVhbWVyLCBhbmQgQ2Fpcm8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5OTA5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJUYWIuYzoKKyAgICAg
ICAgKHJ1bkNvbG9yQ2hvb3NlckNhbGxiYWNrKToKKyAgICAgICAgKGJyb3dzZXJUYWJDb25zdHJ1
Y3RlZCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RSZXNv
dXJjZXMuY3BwOgorICAgICAgICAodGVzdFdlYlZpZXdTeW5jUmVxdWVzdE9uTWF4Q29ubnMpOgor
ICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEdMaWIvVGVzdFNTTC5jcHA6CisgICAgICAgICh0ZXN0V2ViU29ja2V0VExTRXJyb3JzKToKKyAg
ICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdM
aWIvV2ViS2l0VGVzdFNlcnZlci5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0U2VydmVyOjp+V2Vi
S2l0VGVzdFNlcnZlcik6CisgICAgICAgIChXZWJLaXRUZXN0U2VydmVyOjpnZXRXZWJTb2NrZXRV
UklGb3JQYXRoIGNvbnN0KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcDoKKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SGVhZGVycyBjb25zdCk6CisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkhlYWRlcnMgY29uc3QpOgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVNldHRhYmxlKToKKyAgICAgICAg
KFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnkpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojp3aWR0aCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlaWdodCk6
CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRYKToKKyAg
ICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFkpOgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSBjb25zdCk6CisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1pblZhbHVlKToKKyAgICAgICAgKFdUUjo6
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWF4VmFsdWUpOgorICAgICAgICAoV1RSOjpzdHJpbmdB
dE9mZnNldCk6CisKIDIwMTktMDYtMjAgIERlYW4gSm9obnNvbiAgPGRlYW5fam9obnNvbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgdGVzdC13ZWJraXRweSBpcyBicm9rZW4gb24gbWFjT1MgQ2F0YWxp
bmEKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyVGFiLmMgYi9Ub29s
cy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlclRhYi5jCmluZGV4IDI5ZWNhZTllYmZlYjU0Yjk4MmUw
NWYyODI5MmZjZjYxMDhjYmU0MmMuLjY2ZDExNWEwM2NlN2QyMmVlYWQ2NGEyN2U2ODU5MWMxYzU4
MmI3ODggMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyVGFiLmMKKysr
IGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJUYWIuYwpAQCAtMjc5LDcgKzI3OSw2IEBA
IHN0YXRpYyBnYm9vbGVhbiBkZWNpZGVQZXJtaXNzaW9uUmVxdWVzdChXZWJLaXRXZWJWaWV3ICp3
ZWJWaWV3LCBXZWJLaXRQZXJtaXNzaW9uCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKLSNpZiBHVEtf
Q0hFQ0tfVkVSU0lPTigzLCAxMiwgMCkKIHN0YXRpYyB2b2lkIGNvbG9yQ2hvb3NlclJHQkFDaGFu
Z2VkKEd0a0NvbG9yQ2hvb3NlciAqY29sb3JDaG9vc2VyLCBHUGFyYW1TcGVjICpwYXJhbVNwZWMs
IFdlYktpdENvbG9yQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpCiB7CiAgICAgR2RrUkdCQSByZ2Jh
OwpAQCAtMzIyLDcgKzMyMSw2IEBAIHN0YXRpYyBnYm9vbGVhbiBydW5Db2xvckNob29zZXJDYWxs
YmFjayhXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBXZWJLaXRDb2xvckNob29zCiAKICAgICByZXR1
cm4gVFJVRTsKIH0KLSNlbmRpZiAvKiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxMiwgMCkgKi8KIAog
c3RhdGljIGdib29sZWFuIGluc3BlY3Rvck9wZW5lZEluV2luZG93KFdlYktpdFdlYkluc3BlY3Rv
ciAqaW5zcGVjdG9yLCBCcm93c2VyVGFiICp0YWIpCiB7CkBAIC00MzEsOSArNDI5LDcgQEAgc3Rh
dGljIHZvaWQgYnJvd3NlclRhYkNvbnN0cnVjdGVkKEdPYmplY3QgKmdPYmplY3QpCiAgICAgZ19z
aWduYWxfY29ubmVjdCh0YWItPndlYlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxv
YWRDaGFuZ2VkKSwgdGFiKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHRhYi0+d2ViVmlldywgImxv
YWQtZmFpbGVkLXdpdGgtdGxzLWVycm9ycyIsIEdfQ0FMTEJBQ0sobG9hZEZhaWxlZFdpdGhUTFNl
cnJvcnMpLCB0YWIpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QodGFiLT53ZWJWaWV3LCAicGVybWlz
c2lvbi1yZXF1ZXN0IiwgR19DQUxMQkFDSyhkZWNpZGVQZXJtaXNzaW9uUmVxdWVzdCksIHRhYik7
Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTIsIDApCiAgICAgZ19zaWduYWxfY29ubmVjdCh0
YWItPndlYlZpZXcsICJydW4tY29sb3ItY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuQ29sb3JDaG9v
c2VyQ2FsbGJhY2spLCB0YWIpOwotI2VuZGlmCiAKICAgICBXZWJLaXRXZWJJbnNwZWN0b3IgKmlu
c3BlY3RvciA9IHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVjdG9yKHRhYi0+d2ViVmlldyk7CiAg
ICAgZ19zaWduYWxfY29ubmVjdChpbnNwZWN0b3IsICJvcGVuLXdpbmRvdyIsIEdfQ0FMTEJBQ0so
aW5zcGVjdG9yT3BlbmVkSW5XaW5kb3cpLCB0YWIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RSZXNvdXJjZXMuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RSZXNvdXJjZXMuY3BwCmluZGV4IGI0NzQxZTBj
NmZhZWYwYjdmZTdjZGQ0NTgxYmFhMDg2ZjgyZWQ0NGQuLjUzZDMyNWU1NDlkMjc5YjhkNjU2NjEx
OTEwYzAyOWYyNTQwMDViYzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R0xpYi9UZXN0UmVzb3VyY2VzLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEdMaWIvVGVzdFJlc291cmNlcy5jcHAKQEAgLTc1MSw3ICs3NTEsNiBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgbV9yZXNvdXJjZXNUb1N0YXJ0UGVuZGluZzsKIH07CiAKLSNpZiBT
T1VQX0NIRUNLX1ZFUlNJT04oMiwgNDksIDkxKQogc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdTeW5j
UmVxdWVzdE9uTWF4Q29ubnMoU3luY1JlcXVlc3RPbk1heENvbm5zVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKIHsKICAgICBXVEY6OkdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2soc19zZXJ2ZXJN
dXRleCk7CkBAIC03ODYsNyArNzg1LDYgQEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdTeW5jUmVx
dWVzdE9uTWF4Q29ubnMoU3luY1JlcXVlc3RPbk1heENvbm5zVGVzdCogdGVzdCwgZ2MKICAgICBp
ZiAoY29udGV4dC51bmxvY2tTZXJ2ZXJTb3VyY2VJRCkKICAgICAgICAgZ19zb3VyY2VfcmVtb3Zl
KGNvbnRleHQudW5sb2NrU2VydmVyU291cmNlSUQpOwogfQotI2VuZGlmCiAKIHN0YXRpYyB2b2lk
IGFkZENhY2hlSFRUUEhlYWRlcnNUb1Jlc3BvbnNlKFNvdXBNZXNzYWdlKiBtZXNzYWdlKQogewpA
QCAtOTIzLDkgKzkyMSw3IEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBUZXN0OjphZGQoIldlYktp
dFdlYlJlc291cmNlIiwgImdldC1kYXRhLWVtcHR5IiwgdGVzdFdlYlJlc291cmNlR2V0RGF0YUVt
cHR5KTsKICAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAi
aGlzdG9yeS1jYWNoZSIsIHRlc3RXZWJWaWV3UmVzb3VyY2VzSGlzdG9yeUNhY2hlKTsKICAgICBT
ZW5kUmVxdWVzdFRlc3Q6OmFkZCgiV2ViS2l0V2ViUGFnZSIsICJzZW5kLXJlcXVlc3QiLCB0ZXN0
V2ViUmVzb3VyY2VTZW5kUmVxdWVzdCk7Ci0jaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDQ5LCA5
MSkKICAgICBTeW5jUmVxdWVzdE9uTWF4Q29ubnNUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAi
c3luYy1yZXF1ZXN0LW9uLW1heC1jb25ucyIsIHRlc3RXZWJWaWV3U3luY1JlcXVlc3RPbk1heENv
bm5zKTsKLSNlbmRpZgogfQogCiB2b2lkIGFmdGVyQWxsKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0U1NMLmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0U1NMLmNwcAppbmRleCAyNjQ0NjgwZTE3M2UxZjNk
NzVmZGQ5NjNlYjNkZDhhZTViZjE4ZTBkLi4xMjI5MGUyZWI0ZmJlZDI3MGQxYWUzM2IwMWFhM2Mz
ZmQ0YjJjMGZkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdM
aWIvVGVzdFNTTC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGli
L1Rlc3RTU0wuY3BwCkBAIC0zMzksNyArMzM5LDYgQEAgc3RhdGljIHZvaWQgdGVzdFN1YnJlc291
cmNlTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoVExTU3VicmVzb3VyY2VUZXN0KiB0ZXN0LCBnY28K
ICAgICBhc3NlcnRJZlNTTFJlcXVlc3RQcm9jZXNzZWQgPSBmYWxzZTsKIH0KIAotI2lmIFNPVVBf
Q0hFQ0tfVkVSU0lPTigyLCA1MCwgMCkKIGNsYXNzIFdlYlNvY2tldFRlc3QgOiBwdWJsaWMgV2Vi
Vmlld1Rlc3QgewogcHVibGljOgogICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoV2ViU29ja2V0
VGVzdCk7CkBAIC00MzksNyArNDM4LDYgQEAgc3RhdGljIHZvaWQgdGVzdFdlYlNvY2tldFRMU0Vy
cm9ycyhXZWJTb2NrZXRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogCiAgICAgd2Via2l0X3dl
Yl9jb250ZXh0X3NldF90bHNfZXJyb3JzX3BvbGljeShjb250ZXh0LCBvcmlnaW5hbFBvbGljeSk7
CiB9Ci0jZW5kaWYKIAogc3RhdGljIHZvaWQgaHR0cHNTZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVy
KiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRh
YmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKIHsKQEAgLTUyNyw5ICs1MjUsNyBA
QCB2b2lkIGJlZm9yZUFsbCgpCiAgICAgU1NMVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInRs
cy1odHRwLWF1dGgiLCB0ZXN0VExTRXJyb3JzSFRUUEF1dGgpOwogICAgIFRMU1N1YnJlc291cmNl
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInRscy1zdWJyZXNvdXJjZSIsIHRlc3RTdWJyZXNv
dXJjZUxvYWRGYWlsZWRXaXRoVExTRXJyb3JzKTsKICAgICBUTFNFcnJvcnNUZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAibG9hZC1mYWlsZWQtd2l0aC10bHMtZXJyb3JzIiwgdGVzdExvYWRGYWls
ZWRXaXRoVExTRXJyb3JzKTsKLSNpZiBTT1VQX0NIRUNLX1ZFUlNJT04oMiwgNTAsIDApCiAgICAg
V2ViU29ja2V0VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIndlYi1zb2NrZXQtdGxzLWVycm9y
cyIsIHRlc3RXZWJTb2NrZXRUTFNFcnJvcnMpOwotI2VuZGlmCiB9CiAKIHZvaWQgYWZ0ZXJBbGwo
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIvV2ViS2l0
VGVzdFNlcnZlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9XZWJL
aXRUZXN0U2VydmVyLmNwcAppbmRleCA3ODJmZTM5M2M4ZjU4NGNlYjVhMDI3N2RmNTZlNGIzNThj
MWU0MTZlLi42OWFjNmM0NjAzOWU4OGM3YzQ2OTkwNzNlNGQ1ZmI4NzI3MzdlNzM4IDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9XZWJLaXRUZXN0U2VydmVy
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9XZWJLaXRUZXN0
U2VydmVyLmNwcApAQCAtNTMsMTAgKzUzLDggQEAgV2ViS2l0VGVzdFNlcnZlcjo6V2ViS2l0VGVz
dFNlcnZlcihTZXJ2ZXJPcHRpb25zIG9wdGlvbnMpCiBXZWJLaXRUZXN0U2VydmVyOjp+V2ViS2l0
VGVzdFNlcnZlcigpCiB7CiAgICAgc291cF91cmlfZnJlZShtX2Jhc2VVUkkpOwotI2lmIFNPVVBf
Q0hFQ0tfVkVSU0lPTigyLCA1MCwgMCkKICAgICBpZiAobV9iYXNlV2ViU29ja2V0VVJJKQogICAg
ICAgICBzb3VwX3VyaV9mcmVlKG1fYmFzZVdlYlNvY2tldFVSSSk7Ci0jZW5kaWYKIH0KIAogdm9p
ZCBXZWJLaXRUZXN0U2VydmVyOjpydW4oU291cFNlcnZlckNhbGxiYWNrIHNlcnZlckNhbGxiYWNr
KQpAQCAtNzIsNyArNzAsNiBAQCB2b2lkIFdlYktpdFRlc3RTZXJ2ZXI6OnJ1bihTb3VwU2VydmVy
Q2FsbGJhY2sgc2VydmVyQ2FsbGJhY2spCiAgICAgfQogfQogCi0jaWYgU09VUF9DSEVDS19WRVJT
SU9OKDIsIDUwLCAwKQogdm9pZCBXZWJLaXRUZXN0U2VydmVyOjphZGRXZWJTb2NrZXRIYW5kbGVy
KFNvdXBTZXJ2ZXJXZWJzb2NrZXRDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEp
CiB7CiAgICAgbV9iYXNlV2ViU29ja2V0VVJJID0gc291cF91cmlfbmV3X3dpdGhfYmFzZShtX2Jh
c2VVUkksICIvd2Vic29ja2V0LyIpOwpAQCAtMTA4LDcgKzEwNSw2IEBAIENTdHJpbmcgV2ViS2l0
VGVzdFNlcnZlcjo6Z2V0V2ViU29ja2V0VVJJRm9yUGF0aChjb25zdCBjaGFyKiBwYXRoKSBjb25z
dAogICAgIHNvdXBfdXJpX2ZyZWUodXJpKTsKICAgICByZXR1cm4gdXJpU3RyaW5nLmdldCgpOwog
fQotI2VuZGlmIC8vIFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA1MCwgMCkKIAogQ1N0cmluZyBXZWJL
aXRUZXN0U2VydmVyOjpnZXRVUklGb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpIGNvbnN0CiB7CmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCmluZGV4IDMyZDE2NGIw
ODEzY2YzZTMyNTRmYmJmOTUyNTJhZjYwZWU5MjBmZGIuLjRlODE3M2NlNmM0Yjk5NWE5OGViODkx
ZTE0ZWVjYzdhYjg0MjBkMTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRBdGsuY3BwCkBAIC0zNSw5ICszNSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNT
dHJpbmdSZWYuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpZiBBVEtfQ0hFQ0tfVkVSU0lP
TigyLDExLDkwKQogI2luY2x1ZGUgPFdlYktpdC9XS0J1bmRsZUZyYW1lLmg+Ci0jZW5kaWYKICNp
bmNsdWRlIDxhdGsvYXRrLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRl
IDx3dGYvZ2xpYi9HUmVmUHRyLmg+CkBAIC01MCwxMiArNDgsMTAgQEAgbmFtZXNwYWNlIFdUUiB7
CiAKIG5hbWVzcGFjZSB7CiAKLSNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigyLDExLDkyKQogZW51bSBS
YW5nZUxpbWl0IHsKICAgICBSYW5nZUxpbWl0TWluaW11bSwKICAgICBSYW5nZUxpbWl0TWF4aW11
bQogfTsKLSNlbmRpZgogCiBlbnVtIEF0a0F0dHJpYnV0ZVR5cGUgewogICAgIE9iamVjdEF0dHJp
YnV0ZVR5cGUsCkBAIC0xMjQsNyArMTIwLDYgQEAgc3RhdGljIGNvbnN0IEF0dHJpYnV0ZXMmIGF0
dHJpYnV0ZXNNYXAoKQogICAgIHJldHVybiBhdHRyaWJ1dGVzLmdldCgpOwogfQogCi0jaWYgQVRL
X0NIRUNLX1ZFUlNJT04oMiwgMTEsIDMpCiBjb25zdCBjaGFyKiBsYW5kbWFya1N0cmluZ0Jhbm5l
ciA9ICJBWExhbmRtYXJrQmFubmVyIjsKIGNvbnN0IGNoYXIqIGxhbmRtYXJrU3RyaW5nQ29tcGxl
bWVudGFyeSA9ICJBWExhbmRtYXJrQ29tcGxlbWVudGFyeSI7CiBjb25zdCBjaGFyKiBsYW5kbWFy
a1N0cmluZ0NvbnRlbnRpbmZvID0gIkFYTGFuZG1hcmtDb250ZW50SW5mbyI7CkBAIC0xMzMsNyAr
MTI4LDYgQEAgY29uc3QgY2hhciogbGFuZG1hcmtTdHJpbmdNYWluID0gIkFYTGFuZG1hcmtNYWlu
IjsKIGNvbnN0IGNoYXIqIGxhbmRtYXJrU3RyaW5nTmF2aWdhdGlvbiA9ICJBWExhbmRtYXJrTmF2
aWdhdGlvbiI7CiBjb25zdCBjaGFyKiBsYW5kbWFya1N0cmluZ1JlZ2lvbiA9ICJBWExhbmRtYXJr
UmVnaW9uIjsKIGNvbnN0IGNoYXIqIGxhbmRtYXJrU3RyaW5nU2VhcmNoID0gIkFYTGFuZG1hcmtT
ZWFyY2giOwotI2VuZGlmCiAKIFN0cmluZyBqc1N0cmluZ1RvV1RGU3RyaW5nKEpTU3RyaW5nUmVm
IGF0dHJpYnV0ZSkKIHsKQEAgLTI1NiwzNSArMjUwLDE0IEBAIGJvb2wgY2hlY2tFbGVtZW50U3Rh
dGUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgQXRrU3RhdGVUeXBlIHN0YXRlVHlwZSkKIEpT
U3RyaW5nUmVmIGluZGV4UmFuZ2VJblRhYmxlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIGJv
b2wgaXNSb3dSYW5nZSkKIHsKICAgICBHVW5pcXVlUHRyPGdjaGFyPiByYW5nZVN0cmluZyhnX3N0
cmR1cCgiezAsIDB9IikpOwotI2lmIEFUS19DSEVDS19WRVJTSU9OKDIsMTEsOTApCiAgICAgaWYg
KCFBVEtfSVNfVEFCTEVfQ0VMTChlbGVtZW50LmdldCgpKSkKICAgICAgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKLSNlbHNlCi0gICAg
aWYgKCFBVEtfSVNfT0JKRUNUKGVsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocmFuZ2VTdHJpbmcuZ2V0KCkpOwotCi0gICAgQXRrT2Jq
ZWN0KiBheFRhYmxlID0gYXRrX29iamVjdF9nZXRfcGFyZW50KEFUS19PQkpFQ1QoZWxlbWVudC5n
ZXQoKSkpOwotICAgIGlmICghYXhUYWJsZSB8fCAhQVRLX0lTX1RBQkxFKGF4VGFibGUpKQotICAg
ICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocmFuZ2VTdHJpbmcuZ2V0
KCkpOwotCi0gICAgLy8gTG9vayBmb3IgdGhlIGNlbGwgaW4gdGhlIHRhYmxlLgotICAgIGdpbnQg
aW5kZXhJblBhcmVudCA9IGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChBVEtfT0JKRUNU
KGVsZW1lbnQuZ2V0KCkpKTsKLSAgICBpZiAoaW5kZXhJblBhcmVudCA9PSAtMSkKLSAgICAgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsK
LSNlbmRpZgogCiAgICAgZ2ludCByb3cgPSAtMTsKICAgICBnaW50IGNvbHVtbiA9IC0xOwogICAg
IGdpbnQgcm93U3BhbiA9IC0xOwogICAgIGdpbnQgY29sdW1uU3BhbiA9IC0xOwotI2lmIEFUS19D
SEVDS19WRVJTSU9OKDIsMTEsOTApCiAgICAgYXRrX3RhYmxlX2NlbGxfZ2V0X3Jvd19jb2x1bW5f
c3BhbihBVEtfVEFCTEVfQ0VMTChlbGVtZW50LmdldCgpKSwgJnJvdywgJmNvbHVtbiwgJnJvd1Nw
YW4sICZjb2x1bW5TcGFuKTsKLSNlbHNlCi0gICAgcm93ID0gYXRrX3RhYmxlX2dldF9yb3dfYXRf
aW5kZXgoQVRLX1RBQkxFKGF4VGFibGUpLCBpbmRleEluUGFyZW50KTsKLSAgICBjb2x1bW4gPSBh
dGtfdGFibGVfZ2V0X2NvbHVtbl9hdF9pbmRleChBVEtfVEFCTEUoYXhUYWJsZSksIGluZGV4SW5Q
YXJlbnQpOwotICAgIHJvd1NwYW4gPSBhdGtfdGFibGVfZ2V0X3Jvd19leHRlbnRfYXQoQVRLX1RB
QkxFKGF4VGFibGUpLCByb3csIGNvbHVtbik7Ci0gICAgY29sdW1uU3BhbiA9IGF0a190YWJsZV9n
ZXRfY29sdW1uX2V4dGVudF9hdChBVEtfVEFCTEUoYXhUYWJsZSksIHJvdywgY29sdW1uKTsKLSNl
bmRpZgogCiAgICAgLy8gR2V0IHRoZSBhY3R1YWwgdmFsdWVzLCBpZiByb3cgYW5kIGNvbHVtbnMg
YXJlIHZhbGlkIHZhbHVlcy4KICAgICBpZiAocm93ICE9IC0xICYmIGNvbHVtbiAhPSAtMSkgewpA
QCAtMzA4LDI5ICsyODEsMTEgQEAgdm9pZCBhbHRlckN1cnJlbnRWYWx1ZShQbGF0Zm9ybVVJRWxl
bWVudCBlbGVtZW50LCBpbnQgZmFjdG9yKQogICAgIGlmICghQVRLX0lTX1ZBTFVFKGVsZW1lbnQu
Z2V0KCkpKQogICAgICAgICByZXR1cm47CiAKLSNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigyLDExLDky
KQogICAgIGRvdWJsZSBjdXJyZW50VmFsdWU7CiAgICAgYXRrX3ZhbHVlX2dldF92YWx1ZV9hbmRf
dGV4dChBVEtfVkFMVUUoZWxlbWVudC5nZXQoKSksICZjdXJyZW50VmFsdWUsIG51bGxwdHIpOwog
CiAgICAgZG91YmxlIGluY3JlbWVudCA9IGF0a192YWx1ZV9nZXRfaW5jcmVtZW50KEFUS19WQUxV
RShlbGVtZW50LmdldCgpKSk7CiAgICAgYXRrX3ZhbHVlX3NldF92YWx1ZShBVEtfVkFMVUUoZWxl
bWVudC5nZXQoKSksIGN1cnJlbnRWYWx1ZSArIGZhY3RvciAqIGluY3JlbWVudCk7Ci0jZWxzZQot
ICAgIEdWYWx1ZSBjdXJyZW50VmFsdWUgPSBHX1ZBTFVFX0lOSVQ7Ci0gICAgYXRrX3ZhbHVlX2dl
dF9jdXJyZW50X3ZhbHVlKEFUS19WQUxVRShlbGVtZW50LmdldCgpKSwgJmN1cnJlbnRWYWx1ZSk7
Ci0KLSAgICBHVmFsdWUgaW5jcmVtZW50ID0gR19WQUxVRV9JTklUOwotICAgIGF0a192YWx1ZV9n
ZXRfbWluaW11bV9pbmNyZW1lbnQoQVRLX1ZBTFVFKGVsZW1lbnQuZ2V0KCkpLCAmaW5jcmVtZW50
KTsKLQotICAgIEdWYWx1ZSBuZXdWYWx1ZSA9IEdfVkFMVUVfSU5JVDsKLSAgICBnX3ZhbHVlX2lu
aXQoJm5ld1ZhbHVlLCBHX1RZUEVfRkxPQVQpOwotCi0gICAgZ192YWx1ZV9zZXRfZmxvYXQoJm5l
d1ZhbHVlLCBnX3ZhbHVlX2dldF9mbG9hdCgmY3VycmVudFZhbHVlKSArIGZhY3RvciAqIGdfdmFs
dWVfZ2V0X2Zsb2F0KCZpbmNyZW1lbnQpKTsKLSAgICBhdGtfdmFsdWVfc2V0X2N1cnJlbnRfdmFs
dWUoQVRLX1ZBTFVFKGVsZW1lbnQuZ2V0KCkpLCAmbmV3VmFsdWUpOwotCi0gICAgZ192YWx1ZV91
bnNldCgmbmV3VmFsdWUpOwotICAgIGdfdmFsdWVfdW5zZXQoJmluY3JlbWVudCk7Ci0gICAgZ192
YWx1ZV91bnNldCgmY3VycmVudFZhbHVlKTsKLSNlbmRpZgogfQogCiBnY2hhciogcmVwbGFjZUNo
YXJhY3RlcnNGb3JSZXN1bHRzKGdjaGFyKiBzdHIpCkBAIC0zNTMsNyArMzA4LDYgQEAgY29uc3Qg
Z2NoYXIqIHJvbGVUb1N0cmluZyhBdGtPYmplY3QqIG9iamVjdCkKIHsKICAgICBBdGtSb2xlIHJv
bGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKG9iamVjdCk7CiAKLSNpZiBBVEtfQ0hFQ0tfVkVSU0lP
TigyLCAxMSwgMykKICAgICBpZiAocm9sZSA9PSBBVEtfUk9MRV9MQU5ETUFSSykgewogICAgICAg
ICBTdHJpbmcgeG1sUm9sZXNWYWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQob2JqZWN0
LCBPYmplY3RBdHRyaWJ1dGVUeXBlLCAieG1sLXJvbGVzIik7CiAgICAgICAgIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh4bWxSb2xlc1ZhbHVlLCAiYmFubmVyIikpCkBAIC00MTMs
NyArMzY3LDYgQEAgY29uc3QgZ2NoYXIqIHJvbGVUb1N0cmluZyhBdGtPYmplY3QqIG9iamVjdCkK
ICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHhtbFJvbGVzVmFsdWUs
ICJzZWFyY2giKSkKICAgICAgICAgICAgIHJldHVybiBsYW5kbWFya1N0cmluZ1NlYXJjaDsKICAg
ICB9Ci0jZW5kaWYKIAogICAgIHN3aXRjaCAocm9sZSkgewogICAgIGNhc2UgQVRLX1JPTEVfQUxF
UlQ6CkBAIC01MzgsNyArNDkxLDYgQEAgY29uc3QgZ2NoYXIqIHJvbGVUb1N0cmluZyhBdGtPYmpl
Y3QqIG9iamVjdCkKICAgICAgICAgcmV0dXJuICJBWFdpbmRvdyI7CiAgICAgY2FzZSBBVEtfUk9M
RV9VTktOT1dOOgogICAgICAgICByZXR1cm4gIkFYVW5rbm93biI7Ci0jaWYgQVRLX0NIRUNLX1ZF
UlNJT04oMiwgMTEsIDMpCiAgICAgY2FzZSBBVEtfUk9MRV9BUlRJQ0xFOgogICAgICAgICByZXR1
cm4gIkFYQXJ0aWNsZSI7CiAgICAgY2FzZSBBVEtfUk9MRV9BVURJTzoKQEAgLTU1NywyMCArNTA5
LDE0IEBAIGNvbnN0IGdjaGFyKiByb2xlVG9TdHJpbmcoQXRrT2JqZWN0KiBvYmplY3QpCiAgICAg
ICAgIHJldHVybiAiQVhUaW1lciI7CiAgICAgY2FzZSBBVEtfUk9MRV9WSURFTzoKICAgICAgICAg
cmV0dXJuICJBWFZpZGVvIjsKLSNlbmRpZgotI2lmIEFUS19DSEVDS19WRVJTSU9OKDIsIDExLCA0
KQogICAgIGNhc2UgQVRLX1JPTEVfREVTQ1JJUFRJT05fTElTVDoKICAgICAgICAgcmV0dXJuICJB
WERlc2NyaXB0aW9uTGlzdCI7CiAgICAgY2FzZSBBVEtfUk9MRV9ERVNDUklQVElPTl9URVJNOgog
ICAgICAgICByZXR1cm4gIkFYRGVzY3JpcHRpb25UZXJtIjsKICAgICBjYXNlIEFUS19ST0xFX0RF
U0NSSVBUSU9OX1ZBTFVFOgogICAgICAgICByZXR1cm4gIkFYRGVzY3JpcHRpb25WYWx1ZSI7Ci0j
ZW5kaWYKLSNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNSwgMikKICAgICBjYXNlIEFUS19ST0xF
X1NUQVRJQzoKICAgICAgICAgcmV0dXJuICJBWFN0YXRpYyI7Ci0jZW5kaWYKLSNpZiBBVEtfQ0hF
Q0tfVkVSU0lPTigyLCAxNSwgNCkKICAgICBjYXNlIEFUS19ST0xFX01BVEhfRlJBQ1RJT046CiAg
ICAgICAgIHJldHVybiAiQVhNYXRoRnJhY3Rpb24iOwogICAgIGNhc2UgQVRLX1JPTEVfTUFUSF9S
T09UOgpAQCAtNTc5LDcgKzUyNSw2IEBAIGNvbnN0IGdjaGFyKiByb2xlVG9TdHJpbmcoQXRrT2Jq
ZWN0KiBvYmplY3QpCiAgICAgICAgIHJldHVybiAiQVhTdWJzY3JpcHQiOwogICAgIGNhc2UgQVRL
X1JPTEVfU1VQRVJTQ1JJUFQ6CiAgICAgICAgIHJldHVybiAiQVhTdXBlcnNjcmlwdCI7Ci0jZW5k
aWYKICNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigyLCAyNSwgMikKICAgICBjYXNlIEFUS19ST0xFX0ZP
T1ROT1RFOgogICAgICAgICByZXR1cm4gIkFYRm9vdG5vdGUiOwpAQCAtNzYzLDcgKzcwOCw2IEBA
IHN0YXRpYyBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID4gZ2V0VmlzaWJs
ZUNlbGxzKEFjY2Vzc2liaWxpdHlVSUVsCiAgICAgcmV0dXJuIHZpc2libGVDZWxsczsKIH0KIAot
I2lmIEFUS19DSEVDS19WRVJTSU9OKDIsMTEsOTApCiBzdGF0aWMgVmVjdG9yPFJlZlB0cjxBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Pj4gY29udmVydEdQdHJBcnJheVRvVmVjdG9yKGNvbnN0IEdQdHJB
cnJheSogYXJyYXkpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Pj4gY2VsbHM7CkBAIC03ODYsOSArNzMwLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgY29udmVydFRv
SlNPYmplY3RBcnJheShjb25zdCBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW0KIAog
ICAgIHJldHVybiBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCBlbGVtZW50Q291bnQsIHZhbHVl
RWxlbWVudHMuZ2V0KCksIG51bGxwdHIpOwogfQotI2VuZGlmCiAKLSNpZiBBVEtfQ0hFQ0tfVkVS
U0lPTigyLDExLDkyKQogc3RhdGljIGRvdWJsZSByYW5nZU1pbk1heFZhbHVlKEF0a1ZhbHVlKiBh
dGtWYWx1ZSwgUmFuZ2VMaW1pdCByYW5nZUxpbWl0KQogewogICAgIEF0a1JhbmdlKiByYW5nZSA9
IGF0a192YWx1ZV9nZXRfcmFuZ2UoYXRrVmFsdWUpOwpAQCAtODA4LDcgKzc1MCw2IEBAIHN0YXRp
YyBkb3VibGUgcmFuZ2VNaW5NYXhWYWx1ZShBdGtWYWx1ZSogYXRrVmFsdWUsIFJhbmdlTGltaXQg
cmFuZ2VMaW1pdCkKICAgICBhdGtfcmFuZ2VfZnJlZShyYW5nZSk7CiAgICAgcmV0dXJuIHJhbmdl
VmFsdWU7CiB9Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UKIApAQCAtMTIxMCwxMCArMTE1MSw4
IEBAIEpTVmFsdWVSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SGVhZGVycygpIGNvbnN0
CiAgICAgaWYgKCFBVEtfSVNfVEFCTEVfQ0VMTChtX2VsZW1lbnQuZ2V0KCkpKQogICAgICAgICBy
ZXR1cm4gY29udmVydFRvSlNPYmplY3RBcnJheShoZWFkZXJzKTsKIAotI2lmIEFUS19DSEVDS19W
RVJTSU9OKDIsMTEsOTApCiAgICAgaWYgKEdSZWZQdHI8R1B0ckFycmF5PiBhcnJheSA9IGFkb3B0
R1JlZihhdGtfdGFibGVfY2VsbF9nZXRfcm93X2hlYWRlcl9jZWxscyhBVEtfVEFCTEVfQ0VMTCht
X2VsZW1lbnQuZ2V0KCkpKSkpCiAgICAgICAgIGhlYWRlcnMgPSBjb252ZXJ0R1B0ckFycmF5VG9W
ZWN0b3IoYXJyYXkuZ2V0KCkpOwotI2VuZGlmCiAgICAgcmV0dXJuIGNvbnZlcnRUb0pTT2JqZWN0
QXJyYXkoaGVhZGVycyk7CiB9CiAKQEAgLTEyMjYsMTAgKzExNjUsOCBAQCBKU1ZhbHVlUmVmIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkhlYWRlcnMoKSBjb25zdAogICAgIGlmICghQVRL
X0lTX1RBQkxFX0NFTEwobV9lbGVtZW50LmdldCgpKSkKICAgICAgICAgcmV0dXJuIGNvbnZlcnRU
b0pTT2JqZWN0QXJyYXkoaGVhZGVycyk7CiAKLSNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigyLDExLDkw
KQogICAgIGlmIChHUmVmUHRyPEdQdHJBcnJheT4gYXJyYXkgPSBhZG9wdEdSZWYoYXRrX3RhYmxl
X2NlbGxfZ2V0X2NvbHVtbl9oZWFkZXJfY2VsbHMoQVRLX1RBQkxFX0NFTEwobV9lbGVtZW50Lmdl
dCgpKSkpKQogICAgICAgICBoZWFkZXJzID0gY29udmVydEdQdHJBcnJheVRvVmVjdG9yKGFycmF5
LmdldCgpKTsKLSNlbmRpZgogICAgIHJldHVybiBjb252ZXJ0VG9KU09iamVjdEFycmF5KGhlYWRl
cnMpOwogfQogCkBAIC0xMzEzLDE3ICsxMjUwLDEzIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNBdHRyaWJ1dGVTZXR0YWJsZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiAgICAgaWYg
KGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgQVRLX1NUQVRFX0VESVRBQkxFKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigyLDExLDIpCiAg
ICAgLy8gVGhpcyBzdGF0ZSBpcyBhcHBsaWNhYmxlIHRvIGNoZWNrYm94ZXMsIHJhZGlvYnV0dG9u
cywgc3dpdGNoZXMsIGV0Yy4KICAgICBpZiAoY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50Lmdl
dCgpLCBBVEtfU1RBVEVfQ0hFQ0tBQkxFKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYK
IAotI2lmIEFUS19DSEVDS19WRVJTSU9OKDIsMTUsMykKICAgICAvLyBUaGlzIHN0YXRlIGlzIGV4
cGVjdGVkIHRvIGJlIHByZXNlbnQgb25seSBmb3IgY29udHJvbHMgYW5kIG9ubHkgaWYgZXhwbGlj
aXRseSBzZXQuCiAgICAgaWYgKGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgQVRL
X1NUQVRFX1JFQURfT05MWSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgogCiAgICAg
Ly8gV2UgZXhwb3NlIGFuIG9iamVjdCBhdHRyaWJ1dGUgdG8gQVRzIHdoZW4gdGhlcmUgaXMgYW4g
YXV0aG9yLXByb3ZpZGVkIEFSSUEgcHJvcGVydHkKICAgICAvLyBhbmQgYWxzbyB3aGVuIHRoZXJl
IGlzIGEgc3VwcG9ydGVkIEFSSUEgcm9sZSBidXQgbm8gYXV0aG9yLXByb3ZpZGVkIHZhbHVlLgpA
QCAtMTUxOSwxMSArMTQ1Miw3IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp4KCkK
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpbnQgeDsKLSNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigy
LDExLDkwKQogICAgIGF0a19jb21wb25lbnRfZ2V0X2V4dGVudHMoQVRLX0NPTVBPTkVOVChtX2Vs
ZW1lbnQuZ2V0KCkpLCAmeCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQVRLX1hZX1NDUkVF
Tik7Ci0jZWxzZQotICAgIGF0a19jb21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUS19DT01QT05FTlQo
bV9lbGVtZW50LmdldCgpKSwgJngsIG51bGxwdHIsIEFUS19YWV9TQ1JFRU4pOwotI2VuZGlmCiAg
ICAgcmV0dXJuIHg7CiB9CiAKQEAgLTE1MzMsMTEgKzE0NjIsNyBAQCBkb3VibGUgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6eSgpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaW50IHk7Ci0jaWYg
QVRLX0NIRUNLX1ZFUlNJT04oMiwxMSw5MCkKICAgICBhdGtfY29tcG9uZW50X2dldF9leHRlbnRz
KEFUS19DT01QT05FTlQobV9lbGVtZW50LmdldCgpKSwgbnVsbHB0ciwgJnksIG51bGxwdHIsIG51
bGxwdHIsIEFUS19YWV9TQ1JFRU4pOwotI2Vsc2UKLSAgICBhdGtfY29tcG9uZW50X2dldF9wb3Np
dGlvbihBVEtfQ09NUE9ORU5UKG1fZWxlbWVudC5nZXQoKSksIG51bGxwdHIsICZ5LCBBVEtfWFlf
U0NSRUVOKTsKLSNlbmRpZgogICAgIHJldHVybiB5OwogfQogCkBAIC0xNTQ3LDExICsxNDcyLDcg
QEAgZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OndpZHRoKCkKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICBpbnQgd2lkdGg7Ci0jaWYgQVRLX0NIRUNLX1ZFUlNJT04oMiwxMSw5MCkKICAg
ICBhdGtfY29tcG9uZW50X2dldF9leHRlbnRzKEFUS19DT01QT05FTlQobV9lbGVtZW50LmdldCgp
KSwgbnVsbHB0ciwgbnVsbHB0ciwgJndpZHRoLCBudWxscHRyLCBBVEtfWFlfV0lORE9XKTsKLSNl
bHNlCi0gICAgYXRrX2NvbXBvbmVudF9nZXRfc2l6ZShBVEtfQ09NUE9ORU5UKG1fZWxlbWVudC5n
ZXQoKSksICZ3aWR0aCwgbnVsbHB0cik7Ci0jZW5kaWYKICAgICByZXR1cm4gd2lkdGg7CiB9CiAK
QEAgLTE1NjEsMTEgKzE0ODIsNyBAQCBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVp
Z2h0KCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpbnQgaGVpZ2h0OwotI2lmIEFUS19DSEVD
S19WRVJTSU9OKDIsMTEsOTApCiAgICAgYXRrX2NvbXBvbmVudF9nZXRfZXh0ZW50cyhBVEtfQ09N
UE9ORU5UKG1fZWxlbWVudC5nZXQoKSksIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsICZoZWln
aHQsIEFUS19YWV9XSU5ET1cpOwotI2Vsc2UKLSAgICBhdGtfY29tcG9uZW50X2dldF9zaXplKEFU
S19DT01QT05FTlQobV9lbGVtZW50LmdldCgpKSwgbnVsbHB0ciwgJmhlaWdodCk7Ci0jZW5kaWYK
ICAgICByZXR1cm4gaGVpZ2h0OwogfQogCkBAIC0xNTc1LDEzICsxNDkyLDcgQEAgZG91YmxlIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRYKCkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICBpbnQgeCwgd2lkdGg7Ci0jaWYgQVRLX0NIRUNLX1ZFUlNJT04oMiwxMSw5MCkKICAgICBh
dGtfY29tcG9uZW50X2dldF9leHRlbnRzKEFUS19DT01QT05FTlQobV9lbGVtZW50LmdldCgpKSwg
JngsIG51bGxwdHIsICZ3aWR0aCwgbnVsbHB0ciwgQVRLX1hZX1dJTkRPVyk7Ci0jZWxzZQotICAg
IGF0a19jb21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUS19DT01QT05FTlQobV9lbGVtZW50LmdldCgp
KSwgJngsIG51bGxwdHIsIEFUS19YWV9XSU5ET1cpOwotICAgIGF0a19jb21wb25lbnRfZ2V0X3Np
emUoQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQuZ2V0KCkpLCAmd2lkdGgsIG51bGxwdHIpOwotI2Vu
ZGlmCi0KICAgICByZXR1cm4geCArIHdpZHRoIC8gMi4wOwogfQogCkBAIC0xNTkxLDEzICsxNTAy
LDcgQEAgZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRZKCkKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBpbnQgeSwgaGVpZ2h0OwotI2lmIEFUS19DSEVDS19WRVJTSU9O
KDIsMTEsOTApCiAgICAgYXRrX2NvbXBvbmVudF9nZXRfZXh0ZW50cyhBVEtfQ09NUE9ORU5UKG1f
ZWxlbWVudC5nZXQoKSksIG51bGxwdHIsICZ5LCBudWxscHRyLCAmaGVpZ2h0LCBBVEtfWFlfV0lO
RE9XKTsKLSNlbHNlCi0gICAgYXRrX2NvbXBvbmVudF9nZXRfcG9zaXRpb24oQVRLX0NPTVBPTkVO
VChtX2VsZW1lbnQuZ2V0KCkpLCBudWxscHRyLCAmeSwgQVRLX1hZX1dJTkRPVyk7Ci0gICAgYXRr
X2NvbXBvbmVudF9nZXRfc2l6ZShBVEtfQ09NUE9ORU5UKG1fZWxlbWVudC5nZXQoKSksIG51bGxw
dHIsICZoZWlnaHQpOwotI2VuZGlmCi0KICAgICByZXR1cm4geSArIGhlaWdodCAvIDIuMDsKIH0K
IApAQCAtMTYwNywxNyArMTUxMiw5IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
bnRWYWx1ZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKEFUS19JU19WQUxV
RShtX2VsZW1lbnQuZ2V0KCkpKSB7Ci0jaWYgQVRLX0NIRUNLX1ZFUlNJT04oMiwxMSw5MikKICAg
ICAgICAgZG91YmxlIHZhbHVlOwogICAgICAgICBhdGtfdmFsdWVfZ2V0X3ZhbHVlX2FuZF90ZXh0
KEFUS19WQUxVRShtX2VsZW1lbnQuZ2V0KCkpLCAmdmFsdWUsIG51bGxwdHIpOwogICAgICAgICBy
ZXR1cm4gdmFsdWU7Ci0jZWxzZQotICAgICAgICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lOSVQ7
Ci0gICAgICAgIGF0a192YWx1ZV9nZXRfY3VycmVudF92YWx1ZShBVEtfVkFMVUUobV9lbGVtZW50
LmdldCgpKSwgJnZhbHVlKTsKLSAgICAgICAgaWYgKCFHX1ZBTFVFX0hPTERTX0ZMT0FUKCZ2YWx1
ZSkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2Zs
b2F0KCZ2YWx1ZSk7Ci0jZW5kaWYKICAgICB9CiAKICAgICAvLyBDb25zaWRlciBoZWFkaW5ncyBh
cyBhbiBzcGVjaWFsIGNhc2Ugd2hlbiByZXR1cm5pbmcgdGhlICJpbnQgdmFsdWUiIG9mCkBAIC0x
NjM4LDE2ICsxNTM1LDggQEAgZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1pblZhbHVl
KCkKIHsKICAgICBpZiAoIUFUS19JU19WQUxVRShtX2VsZW1lbnQuZ2V0KCkpKQogICAgICAgICBy
ZXR1cm4gMDsKLSNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigyLDExLDkyKQotICAgIHJldHVybiByYW5n
ZU1pbk1heFZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQuZ2V0KCkpLCBSYW5nZUxpbWl0TWluaW11
bSk7Ci0jZWxzZQotICAgIEdWYWx1ZSB2YWx1ZSA9IEdfVkFMVUVfSU5JVDsKLSAgICBhdGtfdmFs
dWVfZ2V0X21pbmltdW1fdmFsdWUoQVRLX1ZBTFVFKG1fZWxlbWVudC5nZXQoKSksICZ2YWx1ZSk7
Ci0gICAgaWYgKCFHX1ZBTFVFX0hPTERTX0ZMT0FUKCZ2YWx1ZSkpCi0gICAgICAgIHJldHVybiAw
OwogCi0gICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2Zsb2F0KCZ2YWx1ZSk7Ci0jZW5kaWYKKyAgICBy
ZXR1cm4gcmFuZ2VNaW5NYXhWYWx1ZShBVEtfVkFMVUUobV9lbGVtZW50LmdldCgpKSwgUmFuZ2VM
aW1pdE1pbmltdW0pOwogfQogCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWF4VmFs
dWUoKQpAQCAtMTY1NSwxNiArMTU0NCw3IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjptYXhWYWx1ZSgpCiAgICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50LmdldCgpKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigyLDExLDkyKQogICAgIHJl
dHVybiByYW5nZU1pbk1heFZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQuZ2V0KCkpLCBSYW5nZUxp
bWl0TWF4aW11bSk7Ci0jZWxzZQotICAgIEdWYWx1ZSB2YWx1ZSA9IEdfVkFMVUVfSU5JVDsKLSAg
ICBhdGtfdmFsdWVfZ2V0X21heGltdW1fdmFsdWUoQVRLX1ZBTFVFKG1fZWxlbWVudC5nZXQoKSks
ICZ2YWx1ZSk7Ci0gICAgaWYgKCFHX1ZBTFVFX0hPTERTX0ZMT0FUKCZ2YWx1ZSkpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2Zsb2F0KCZ2YWx1ZSk7Ci0jZW5k
aWYKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnZhbHVlRGVzY3JpcHRpb24oKQpAQCAtMjM5Myw3ICsyMjczLDYgQEAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHN0cmluZ0F0T2Zmc2V0KFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIEF0a1Rl
eHRCb3VuZGEKICAgICBnaW50IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQ7CiAgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOwogCi0jaWYgQVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAsIDApCiAgICAgQXRr
VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5OwogICAgIHN3aXRjaCAoYm91bmRhcnkpIHsKICAg
ICBjYXNlIEFUS19URVhUX0JPVU5EQVJZX0NIQVI6CkBAIC0yNDEzLDkgKzIyOTIsNyBAQCBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nQXRPZmZzZXQoUGxhdGZvcm1VSUVsZW1lbnQgZWxl
bWVudCwgQXRrVGV4dEJvdW5kYQogICAgIH0KIAogICAgIGJ1aWxkZXIuYXBwZW5kKGF0a190ZXh0
X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUS19URVhUKGVsZW1lbnQuZ2V0KCkpLCBvZmZzZXQsIGdy
YW51bGFyaXR5LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpKTsKLSNlbHNlCi0gICAgYnVpbGRl
ci5hcHBlbmQoYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KEFUS19URVhUKGVsZW1lbnQuZ2V0
KCkpLCBvZmZzZXQsIGJvdW5kYXJ5LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpKTsKLSNlbmRp
ZgorCiAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwogICAgIGJ1aWxkZXIuYXBwZW5k
TnVtYmVyKHN0YXJ0T2Zmc2V0KTsKICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7CmRp
ZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggZDBmMDc5ZmUyNmJhOGE2OGM1
ZmVmOTFhZTMxMmNmNTUwMzUzNjNiOS4uZmY0ZWFiYmYzM2YwNWNjZDM0N2VkOWRkNzE0ZGViMGE2
ODI0MGIyOCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE1IEBACisyMDE5LTA2LTIwICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlh
LmNvbT4KKworICAgICAgICBbV1BFXVtHVEtdIEJ1bXAgbWluaW11bSB2ZXJzaW9ucyBvZiBHTGli
LCBHVEssIGxpYnNvdXAsIEFUSywgR1N0cmVhbWVyLCBhbmQgQ2Fpcm8KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTA5NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlL2NtYWtlL0ZpbmRHVEsz
LmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2U6Cisg
ICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2U6CisgICAgICAgICogU291cmNl
L2NtYWtlL09wdGlvbnNXUEUuY21ha2U6CisKIDIwMTktMDYtMjAgIENhcmxvcyBHYXJjaWEgQ2Ft
cG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFJlbW92ZSBzdXBwb3J0
IGZvciBHVEsyIHBsdWdpbnMK
</data>
<flag name="review"
          id="388404"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
    <flag name="commit-queue"
          id="388420"
          type_id="3"
          status="-"
          setter="pnormand"
    />
          </attachment>
      

    </bug>

</bugzilla>