<?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>204624</bug_id>
          
          <creation_ts>2019-11-26 09:43:26 -0800</creation_ts>
          <short_desc>[GStreamer] Move GL video sink to its own GstBin sub-class</short_desc>
          <delta_ts>2019-11-28 02:10:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>204669</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>annulen</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jbedard</cc>
    
    <cc>jer.noble</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1593693</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-11-26 09:43:26 -0800</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593695</commentid>
    <comment_count>1</comment_count>
      <attachid>384363</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-11-26 09:51:05 -0800</bug_when>
    <thetext>Created attachment 384363
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593699</commentid>
    <comment_count>2</comment_count>
      <attachid>384364</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-11-26 10:02:29 -0800</bug_when>
    <thetext>Created attachment 384364
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593812</commentid>
    <comment_count>3</comment_count>
      <attachid>384364</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-11-27 01:41:43 -0800</bug_when>
    <thetext>Comment on attachment 384364
Patch

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

This is just moving code, but I have a few comments, feel free to apply them before landing, or in a follow up patch.

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:57
&gt; +#include &lt;gst/app/gstappsink.h&gt;

This should be before the conditional includes, in the main includes block.

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:80
&gt; +G_DEFINE_TYPE_WITH_CODE(WebKitGLVideoSink, webkit_gl_video_sink, GST_TYPE_BIN, WEBKIT_GL_VIDEO_SINK_CATEGORY_INIT);

You could use WTF_DEFINE_TYPE

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:85
&gt; +    sink-&gt;priv = WEBKIT_GL_VIDEO_SINK_GET_PRIVATE(sink);
&gt; +    new (sink-&gt;priv) WebKitGLVideoSinkPrivate();

And then you don&apos;t need to do this.

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:127
&gt; +    ASSERT(WTF::isMainThread());

WTF:: is not needed here.

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:136
&gt; +    // We used a placement new for construction, the destructor won&apos;t be called automatically.
&gt; +    priv-&gt;~_WebKitGLVideoSinkPrivate();

You don&apos;t need to do this either if using WTF_DEFINE_TYPE

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:151
&gt; +    // The floating ref removal support was added in https://bugzilla.gnome.org/show_bug.cgi?id=743062.
&gt; +    bool shouldAdoptRef = webkitGstCheckVersion(1, 14, 0);

I think we could simplify the code by adding adoptGLRef() or something like that, similar to ensureGRef, that only accepts GstGLDisplay org GstGLContext and adopts the returned ref or not depending on the GST version.

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:196
&gt; +    GLContext* webkitContext = sharedDisplay.sharingGLContext();

webkitContext -&gt; sharedContext ?

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:210
&gt; +    PlatformGraphicsContext3D contextHandle = webkitContext-&gt;platformContext();
&gt; +    if (!contextHandle)
&gt; +        return false;

This could be moved above, right after setting webkitContext

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:218
&gt; +    auto previousActiveContext = GLContext::current();

auto*

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:59
&gt; +#if USE(GSTREAMER_GL)
&gt; +#include &quot;GLVideoSinkGStreamer.h&quot;
&gt; +#endif

No need for the #if here, because GLVideoSinkGStreamer.h is already guarded</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593823</commentid>
    <comment_count>4</comment_count>
      <attachid>384364</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-11-27 02:48:20 -0800</bug_when>
    <thetext>Comment on attachment 384364
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:52
&gt; +// defines None, breaking MediaPlayer::None enum

.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:151
&gt;&gt; +    bool shouldAdoptRef = webkitGstCheckVersion(1, 14, 0);
&gt; 
&gt; I think we could simplify the code by adding adoptGLRef() or something like that, similar to ensureGRef, that only accepts GstGLDisplay org GstGLContext and adopts the returned ref or not depending on the GST version.

I already said this in another patch review. I&apos;m sure he would like to do it in a follow up, right?

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:233
&gt; +static GstContext* requestGLContext(WebKitGLVideoSink* sink, const char* contextType)

Follow up or not, I observed that we always adopt the result of this function. I think we could make this return a GRefPtr&lt;GstContext&gt; and make the adoption inside, then we return the pointer and let the copy elision make wonders.

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:252
&gt; +#if GST_CHECK_VERSION(1, 12, 0)
&gt; +        gst_structure_set(structure, &quot;context&quot;, GST_TYPE_GL_CONTEXT, priv-&gt;glContext.get(), nullptr);
&gt; +#else
&gt; +        gst_structure_set(structure, &quot;context&quot;, GST_GL_TYPE_CONTEXT, priv-&gt;glContext.get(), nullptr);
&gt; +#endif

Follow up or not, I think we could #define this above and have just one line here.

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:349
&gt; +    auto sink = adoptGRef(gst_element_factory_make(&quot;appsink&quot;, nullptr));

This is transfer floating, we can&apos;t adopt or it will crash.

IMHO, this should be valid for transfer floating and I suggested to make the appropriate changes long ago but sadly nobody (mea culpa as well) made the change.

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:356
&gt; +    auto colorconvert = adoptGRef(gst_element_factory_make(&quot;glcolorconvert&quot;, nullptr));
&gt; +    auto upload = adoptGRef(gst_element_factory_make(&quot;glupload&quot;, nullptr));

Ditto

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:360
&gt; +
&gt; +    auto colorconvert = adoptGRef(gst_element_factory_make(&quot;glcolorconvert&quot;, nullptr));
&gt; +    auto upload = adoptGRef(gst_element_factory_make(&quot;glupload&quot;, nullptr));
&gt; +    if (!colorconvert || !upload) {
&gt; +        GST_WARNING(&quot;GstGL elements unavailable. Please check your GStreamer installation&quot;);
&gt; +        return false;
&gt; +    }

And regarding these checks and the checks above, I would create a small function, maybe in GStreamerCommon, to test the existance of a plugin, return true if it exists, and GST_WARNING if it does not. Then this function would be &quot;return test &amp;&amp; test &amp;&amp; test&quot;;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593861</commentid>
    <comment_count>5</comment_count>
      <attachid>384364</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-11-27 07:06:38 -0800</bug_when>
    <thetext>Comment on attachment 384364
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:80
&gt;&gt; +G_DEFINE_TYPE_WITH_CODE(WebKitGLVideoSink, webkit_gl_video_sink, GST_TYPE_BIN, WEBKIT_GL_VIDEO_SINK_CATEGORY_INIT);
&gt; 
&gt; You could use WTF_DEFINE_TYPE

It&apos;s not the first time WEBKIT_DEFINE_TYPE is suggested for a GStreamer element. The problem is that macro tries to do too much magic and doesn&apos;t allow a custom instance_init() function. So we can&apos;t use that macro.

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:151
&gt;&gt;&gt; +    bool shouldAdoptRef = webkitGstCheckVersion(1, 14, 0);
&gt;&gt; 
&gt;&gt; I think we could simplify the code by adding adoptGLRef() or something like that, similar to ensureGRef, that only accepts GstGLDisplay org GstGLContext and adopts the returned ref or not depending on the GST version.
&gt; 
&gt; I already said this in another patch review. I&apos;m sure he would like to do it in a follow up, right?

This snark wasn&apos;t needed here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593865</commentid>
    <comment_count>6</comment_count>
      <attachid>384364</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-11-27 07:38:18 -0800</bug_when>
    <thetext>Comment on attachment 384364
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:360
&gt;&gt; +    }
&gt; 
&gt; And regarding these checks and the checks above, I would create a small function, maybe in GStreamerCommon, to test the existance of a plugin, return true if it exists, and GST_WARNING if it does not. Then this function would be &quot;return test &amp;&amp; test &amp;&amp; test&quot;;

Good idea!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593869</commentid>
    <comment_count>7</comment_count>
      <attachid>384413</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-11-27 08:30:47 -0800</bug_when>
    <thetext>Created attachment 384413
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593971</commentid>
    <comment_count>8</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-11-28 00:59:00 -0800</bug_when>
    <thetext>Please, the changes you left, create a follow up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593980</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-11-28 02:03:40 -0800</bug_when>
    <thetext>(In reply to Philippe Normand from comment #5)
&gt; Comment on attachment 384364 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=384364&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:80
&gt; &gt;&gt; +G_DEFINE_TYPE_WITH_CODE(WebKitGLVideoSink, webkit_gl_video_sink, GST_TYPE_BIN, WEBKIT_GL_VIDEO_SINK_CATEGORY_INIT);
&gt; &gt; 
&gt; &gt; You could use WTF_DEFINE_TYPE
&gt; 
&gt; It&apos;s not the first time WEBKIT_DEFINE_TYPE is suggested for a GStreamer
&gt; element. The problem is that macro tries to do too much magic and doesn&apos;t
&gt; allow a custom instance_init() function. So we can&apos;t use that macro.

You are expected to use constructed() instead of init().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593983</commentid>
    <comment_count>10</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-11-28 02:09:24 -0800</bug_when>
    <thetext>Committed r252917: &lt;https://trac.webkit.org/changeset/252917&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593984</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-28 02:10:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/57517440&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384363</attachid>
            <date>2019-11-26 09:51:05 -0800</date>
            <delta_ts>2019-11-26 10:02:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204624-20191126175103.patch</filename>
            <type>text/plain</type>
            <size>41470</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyODg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODgzOGQzZTEzODZjYzlm
MmYxOTc4NDhjMTZkYWZkOTJlZTI1NWIxOS4uZjE5NDVjYzI3MjAzNDA2YTJlNTk2OGZjZWU4OGFh
YWFlNWU0NGRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE5LTExLTI2ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBNb3ZlIEdMIHZpZGVvIHNpbmsgdG8gaXRzIG93biBHc3RCaW4gc3ViLWNsYXNzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ2MjQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHJlZHVjZXMgdGhl
IE1lZGlhUGxheWVyUHJpdmF0ZSBjb2RlLWJhc2UgYW5kIGFkZHMgYSBnb29kCisgICAgICAgIHNl
cGFyYXRpb24gb2YgcmVzcG9uc2liaWxpdHkgcmVnYXJkaW5nIEdMIHZpZGVvIHJlbmRlcmluZy4g
VGhlCisgICAgICAgIFRleHR1cmVDb3BpZXIgcmVtYWlucyBpbiB0aGUgcGxheWVyIGJlY2F1c2Ug
aXQncyB0b28gc3BlY2lmaWMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2U6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVh
bWVyLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRfZ2xfdmlkZW9fc2lua19pbml0KToKKyAg
ICAgICAgKHdlYktpdEdMVmlkZW9TaW5rRmluYWxpemUpOgorICAgICAgICAoZW5zdXJlR3N0R0xD
b250ZXh0KToKKyAgICAgICAgKHJlcXVlc3RHTENvbnRleHQpOgorICAgICAgICAod2ViS2l0R0xW
aWRlb1NpbmtDaGFuZ2VTdGF0ZSk6CisgICAgICAgICh3ZWJraXRfZ2xfdmlkZW9fc2lua19jbGFz
c19pbml0KToKKyAgICAgICAgKHdlYktpdEdMVmlkZW9TaW5rU2V0TWVkaWFQbGF5ZXJQcml2YXRl
KToKKyAgICAgICAgKHdlYktpdEdMVmlkZW9TaW5rUHJvYmVQbGF0Zm9ybSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmg6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2Vi
S2l0RWxlbWVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlVmlkZW9TaW5r
R0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaDoKKwogMjAxOS0xMS0yNiAgTWFudWVsIFJlZ28gQ2FzYXNub3ZhcyAg
PHJlZ29AaWdhbGlhLmNvbT4KIAogICAgICAgICBbY3NzLWdyaWRdIEF2b2lkIHNlcmlhbGl6aW5n
IFtdIGluIGdyaWQtdGVtcGxhdGUtKiBzcGVjaWZpZWQgdmFsdWVzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXggMmM5NDFmMGNiNGFlOGFhODYwZDVlNTcxNjViYTJi
NTYzOGIwMjFhOS4uODc0ZDQ5YWYxZTQxOWFjYzg0YTQ2NmQyOGNhMDIzYzZiYzlhZjlmOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtNyw2ICs3LDcgQEAgaWYg
KEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQogCiAgICAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9BdWRpb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dzdEFsbG9jYXRvckZhc3RNYWxsb2MuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9T
aW5rR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZDk4MDM0N2Q0NGVhZmQ0MDFhMDliMGI5OGEz
MjA0YjllZjQ4YTg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDM2
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkdMVmlkZW9TaW5rR1N0cmVhbWVyLmgiCisKKyNpZiBFTkFCTEUoVklE
RU8pICYmIFVTRShHU1RSRUFNRVJfR0wpCisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKyNpbmNs
dWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIuaCIKKworI2lmIFVTRShHTFgpCisjaW5jbHVkZSAiR0xDb250ZXh0R0xYLmgiCisjaW5j
bHVkZSA8Z3N0L2dsL3gxMS9nc3RnbGRpc3BsYXlfeDExLmg+CisjZW5kaWYKKworI2lmIFVTRShF
R0wpCisjaW5jbHVkZSAiR0xDb250ZXh0RUdMLmgiCisjaW5jbHVkZSA8Z3N0L2dsL2VnbC9nc3Rn
bGRpc3BsYXlfZWdsLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFgxMSkKKyNpbmNsdWRlICJQ
bGF0Zm9ybURpc3BsYXlYMTEuaCIKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0FZTEFORCkKKyNp
bmNsdWRlICJQbGF0Zm9ybURpc3BsYXlXYXlsYW5kLmgiCisjZW5kaWYKKworI2lmIFVTRShXUEVf
UkVOREVSRVIpCisjaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5TGliV1BFLmgiCisjZW5kaWYKKwor
Ly8gZ3N0Z2xhcGkuaCBtYXkgaW5jbHVkZSBlZ2xwbGF0Zm9ybS5oIGFuZCBpdCBpbmNsdWRlcyBY
LmgsIHdoaWNoCisvLyBkZWZpbmVzIE5vbmUsIGJyZWFraW5nIE1lZGlhUGxheWVyOjpOb25lIGVu
dW0KKyNpZiBQTEFURk9STShYMTEpICYmIEdTVF9HTF9IQVZFX1BMQVRGT1JNX0VHTAorI3VuZGVm
IE5vbmUKKyNlbmRpZiAvLyBQTEFURk9STShYMTEpICYmIEdTVF9HTF9IQVZFX1BMQVRGT1JNX0VH
TAorCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCitzdHJ1Y3QgX1dlYktpdEdMVmlkZW9TaW5rUHJpdmF0ZSB7CisgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBhcHBTaW5rOworICAgIEdSZWZQdHI8R3N0R0xDb250ZXh0PiBnbENvbnRl
eHQ7CisgICAgR1JlZlB0cjxHc3RHTERpc3BsYXk+IGdsRGlzcGxheTsKKyAgICBHUmVmUHRyPEdz
dENvbnRleHQ+IGdsRGlzcGxheUVsZW1lbnRDb250ZXh0OworICAgIEdSZWZQdHI8R3N0Q29udGV4
dD4gZ2xBcHBFbGVtZW50Q29udGV4dDsKK307CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMo
d2Via2l0X2dsX3ZpZGVvX3NpbmtfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Vi
a2l0X2dsX3ZpZGVvX3NpbmtfZGVidWcKKworI2RlZmluZSBHU1RfR0xfQ0FQU19GT1JNQVQgInsg
UkdCeCwgUkdCQSwgSTQyMCwgWTQ0NCwgWVYxMiwgWTQxQiwgWTQyQiwgTlYxMiwgTlYyMSwgVlVZ
QSB9Igorc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtUZW1wbGF0ZSA9IEdTVF9TVEFU
SUNfUEFEX1RFTVBMQVRFKCJzaW5rIiwgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX0FMV0FZUywgR1NU
X1NUQVRJQ19DQVBTX0FOWSk7CisKKyNkZWZpbmUgV0VCS0lUX0dMX1ZJREVPX1NJTktfR0VUX1BS
SVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQ
RV9HTF9WSURFT19TSU5LLCBXZWJLaXRHTFZpZGVvU2lua1ByaXZhdGUpKQorCisjZGVmaW5lIHdl
YmtpdF9nbF92aWRlb19zaW5rX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKKyNkZWZpbmUgV0VC
S0lUX0dMX1ZJREVPX1NJTktfQ0FURUdPUllfSU5JVCBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3
ZWJraXRfZ2xfdmlkZW9fc2lua19kZWJ1ZywgIndlYmtpdGdsdmlkZW9zaW5rIiwgMCwgIkdMIHZp
ZGVvIHNpbmsgZWxlbWVudCIpOworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0R0xWaWRl
b1NpbmssIHdlYmtpdF9nbF92aWRlb19zaW5rLCBHU1RfVFlQRV9CSU4sIFdFQktJVF9HTF9WSURF
T19TSU5LX0NBVEVHT1JZX0lOSVQpOworCitzdGF0aWMgdm9pZCB3ZWJraXRfZ2xfdmlkZW9fc2lu
a19pbml0KFdlYktpdEdMVmlkZW9TaW5rKiBzaW5rKQoreworICAgIHNpbmstPnByaXYgPSBXRUJL
SVRfR0xfVklERU9fU0lOS19HRVRfUFJJVkFURShzaW5rKTsKKyAgICBuZXcgKHNpbmstPnByaXYp
IFdlYktpdEdMVmlkZW9TaW5rUHJpdmF0ZSgpOworCisgICAgc2luay0+cHJpdi0+YXBwU2luayA9
IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc2luayIsICJ3ZWJraXQtZ2wtdmlkZW8tYXBw
c2luayIpOworICAgIEFTU0VSVChzaW5rLT5wcml2LT5hcHBTaW5rKTsKKyAgICBnX29iamVjdF9z
ZXQoc2luay0+cHJpdi0+YXBwU2luay5nZXQoKSwgImVuYWJsZS1sYXN0LXNhbXBsZSIsIEZBTFNF
LCAiZW1pdC1zaWduYWxzIiwgVFJVRSwgIm1heC1idWZmZXJzIiwgMSwgbnVsbHB0cik7CisKKyAg
ICBHc3RFbGVtZW50KiB1cGxvYWQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImdsdXBsb2Fk
IiwgbnVsbHB0cik7CisgICAgR3N0RWxlbWVudCogY29sb3Jjb252ZXJ0ID0gZ3N0X2VsZW1lbnRf
ZmFjdG9yeV9tYWtlKCJnbGNvbG9yY29udmVydCIsIG51bGxwdHIpOworICAgIEFTU0VSVCh1cGxv
YWQpOworICAgIEFTU0VSVChjb2xvcmNvbnZlcnQpOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NU
X0JJTl9DQVNUKHNpbmspLCB1cGxvYWQsIGNvbG9yY29udmVydCwgc2luay0+cHJpdi0+YXBwU2lu
ay5nZXQoKSwgbnVsbHB0cik7CisKKyAgICAvLyBXb3JrYXJvdW5kIHVudGlsIHdlIGNhbiBkZXBl
bmQgb24gR1N0cmVhbWVyIDEuMTYuMi4KKyAgICAvLyBodHRwczovL2dpdGxhYi5mcmVlZGVza3Rv
cC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhc2UvY29tbWl0LzhkMzJkZTA5MDU1NGNmMjlm
ZTM1OWY4M2FhNDYwMDBiYTY1OGE2OTMKKyAgICAvLyBGb3JjaW5nIGEgY29sb3IgY29udmVyc2lv
biB0byBSR0JBIGhlcmUgYWxsb3dzIGdsdXBsb2FkIHRvIGludGVybmFsbHkgdXNlCisgICAgLy8g
YW4gdXBsb2FkZXIgdGhhdCBhZGRzIGEgVmlkZW9NZXRhLCB0aHJvdWdoIHRoZSBUZXh0dXJlVXBs
b2FkTWV0YSBjYXBzCisgICAgLy8gZmVhdHVyZSwgd2l0aG91dCBuZWVkaW5nIHRoZSBwYXRjaCBh
Ym92ZS4gSG93ZXZlciB0aGlzIHNwZWNpZmljIGNhcHMKKyAgICAvLyBmZWF0dXJlIGlzIGdvaW5n
IHRvIGJlIHJlbW92ZWQgZnJvbSBHU3RyZWFtZXIgc28gaXQgaXMgY29uc2lkZXJlZCBhCisgICAg
Ly8gc2hvcnQtdGVybSB3b3JrYXJvdW5kLiBUaGlzIGNvZGUgcGF0aCBtb3N0IGxpa2VseSB3aWxs
IGhhdmUgYSBuZWdhdGl2ZQorICAgIC8vIHBlcmZvcm1hbmNlIGltcGFjdCBvbiBlbWJlZGRlZCBw
bGF0Zm9ybXMgYXMgd2VsbC4gRG93bnN0cmVhbSBlbWJlZGRlcnMKKyAgICAvLyBhcmUgaGlnaGx5
IGVuY291cmFnZWQgdG8gY2hlcnJ5LXBpY2sgdGhlIHBhdGNoIGxpbmtlZCBhYm92ZSBpbiB0aGVp
ciBCU1AKKyAgICAvLyBhbmQgc2V0IHRoZSBXRUJLSVRfR1NUX05PX1JHQkFfQ09OVkVSU0lPTiBl
bnZpcm9ubWVudCB2YXJpYWJsZSB1bnRpbAorICAgIC8vIEdTdHJlYW1lciAxLjE2LjIgaXMgcmVs
ZWFzZWQuCisgICAgLy8gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMTQyMgorICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwczsKKyAgICBpZiAod2Via2l0
R3N0Q2hlY2tWZXJzaW9uKDEsIDE2LCAyKSB8fCBnZXRlbnYoIldFQktJVF9HU1RfTk9fUkdCQV9D
T05WRVJTSU9OIikpCisgICAgICAgIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJp
bmcoInZpZGVvL3gtcmF3LCBmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9HTF9DQVBTX0ZPUk1BVCkp
OworICAgIGVsc2UgeworICAgICAgICBHU1RfSU5GT19PQkpFQ1Qoc2luaywgIkZvcmNpbmcgUkdC
QSBhcyBHU3RyZWFtZXIgaXMgbm90IG5ldyBlbm91Z2guIik7CisgICAgICAgIGNhcHMgPSBhZG9w
dEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJpbmcoInZpZGVvL3gtcmF3LCBmb3JtYXQgPSAoc3RyaW5n
KSBSR0JBIikpOworICAgIH0KKyAgICBnc3RfY2Fwc19zZXRfZmVhdHVyZXMoY2Fwcy5nZXQoKSwg
MCwgZ3N0X2NhcHNfZmVhdHVyZXNfbmV3KEdTVF9DQVBTX0ZFQVRVUkVfTUVNT1JZX0dMX01FTU9S
WSwgbnVsbHB0cikpOworICAgIGdfb2JqZWN0X3NldChzaW5rLT5wcml2LT5hcHBTaW5rLmdldCgp
LCAiY2FwcyIsIGNhcHMuZ2V0KCksIG51bGxwdHIpOworCisgICAgZ3N0X2VsZW1lbnRfbGlua19t
YW55KHVwbG9hZCwgY29sb3Jjb252ZXJ0LCBzaW5rLT5wcml2LT5hcHBTaW5rLmdldCgpLCBudWxs
cHRyKTsKKworICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQodXBsb2FkLCAic2luayIpKTsKKyAgICBnc3RfZWxlbWVudF9hZGRfcGFk
KEdTVF9FTEVNRU5UX0NBU1Qoc2luayksIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgcGFkLmdl
dCgpKSk7Cit9CisKK3ZvaWQgd2ViS2l0R0xWaWRlb1NpbmtGaW5hbGl6ZShHT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgV2ViS2l0R0xW
aWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfR0xfVklERU9fU0lOSyhvYmplY3QpOworICAgIFdlYktp
dEdMVmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CisKKyAgICAvLyBXZSB1c2Vk
IGEgcGxhY2VtZW50IG5ldyBmb3IgY29uc3RydWN0aW9uLCB0aGUgZGVzdHJ1Y3RvciB3b24ndCBi
ZSBjYWxsZWQgYXV0b21hdGljYWxseS4KKyAgICBwcml2LT5+X1dlYktpdEdMVmlkZW9TaW5rUHJp
dmF0ZSgpOworCisgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6ZSwg
KG9iamVjdCkpOworfQorCitzdGF0aWMgYm9vbCBlbnN1cmVHc3RHTENvbnRleHQoV2ViS2l0R0xW
aWRlb1NpbmsqIHNpbmspCit7CisgICAgV2ViS2l0R0xWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0g
c2luay0+cHJpdjsKKworICAgIGlmIChwcml2LT5nbENvbnRleHQpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgYXV0byYgc2hhcmVkRGlzcGxheSA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVk
RGlzcGxheUZvckNvbXBvc2l0aW5nKCk7CisKKyAgICAvLyBUaGUgZmxvYXRpbmcgcmVmIHJlbW92
YWwgc3VwcG9ydCB3YXMgYWRkZWQgaW4gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19i
dWcuY2dpP2lkPTc0MzA2Mi4KKyAgICBib29sIHNob3VsZEFkb3B0UmVmID0gd2Via2l0R3N0Q2hl
Y2tWZXJzaW9uKDEsIDE0LCAwKTsKKyAgICBpZiAoIXByaXYtPmdsRGlzcGxheSkgeworI2lmIFBM
QVRGT1JNKFgxMSkKKyNpZiBVU0UoR0xYKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5
WDExPihzaGFyZWREaXNwbGF5KSkgeworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzaW5r
LCAiQ3JlYXRpbmcgWDExIHNoYXJlZCBHTCBkaXNwbGF5Iik7CisgICAgICAgICAgICBpZiAoc2hv
dWxkQWRvcHRSZWYpCisgICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gYWRvcHRHUmVm
KEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNwbGF5KGRvd25j
YXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkubmF0aXZlKCkpKSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gR1NUX0dMX0RJ
U1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZv
cm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRpdmUoKSkpOworICAgICAgICB9CisjZWxp
ZiBVU0UoRUdMKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNw
bGF5KSkgeworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzaW5rLCAiQ3JlYXRpbmcgWDEx
IHNoYXJlZCBFR0wgZGlzcGxheSIpOworICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQor
ICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExB
WShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZv
cm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVko
Z3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3Jt
RGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSk7CisgICAgICAgIH0KKyNl
bmRpZgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXQVlMQU5EKQorICAgICAgICBpZiAoaXM8UGxh
dGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxheSkpIHsKKyAgICAgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc2luaywgIkNyZWF0aW5nIFdheWxhbmQgc2hhcmVkIGRpc3BsYXkiKTsKKyAg
ICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAgICAgICAgICBwcml2LT5nbERp
c3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193
aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERp
c3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBwcml2LT5nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3
X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVk
RGlzcGxheSkuZWdsRGlzcGxheSgpKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisjaWYgVVNFKFdQ
RV9SRU5ERVJFUikKKyAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheUxpYldQRT4oc2hhcmVk
RGlzcGxheSkpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2luaywgIkNyZWF0aW5n
IFdQRSBzaGFyZWQgRUdMIGRpc3BsYXkiKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJl
ZikKKyAgICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJ
U1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBs
YXRmb3JtRGlzcGxheUxpYldQRT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSkpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9IEdTVF9HTF9E
SVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQ
bGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpOworICAg
ICAgICB9CisjZW5kaWYKKworICAgICAgICBBU1NFUlQocHJpdi0+Z2xEaXNwbGF5KTsKKyAgICB9
CisKKyAgICBHTENvbnRleHQqIHdlYmtpdENvbnRleHQgPSBzaGFyZWREaXNwbGF5LnNoYXJpbmdH
TENvbnRleHQoKTsKKyAgICAvLyBFR0wgYW5kIEdMWCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBu
byBuZWVkIGZvciBpZmRlZnMgaGVyZS4KKyAgICBHc3RHTFBsYXRmb3JtIGdsUGxhdGZvcm0gPSB3
ZWJraXRDb250ZXh0LT5pc0VHTENvbnRleHQoKSA/IEdTVF9HTF9QTEFURk9STV9FR0wgOiBHU1Rf
R0xfUExBVEZPUk1fR0xYOworCisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICBHc3RHTEFQSSBnbEFQ
SSA9IEdTVF9HTF9BUElfR0xFUzI7CisjZWxpZiBVU0UoT1BFTkdMKQorICAgIEdzdEdMQVBJIGds
QVBJID0gR1NUX0dMX0FQSV9PUEVOR0w7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworI2VuZGlmCisKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIGNvbnRleHRIYW5kbGUg
PSB3ZWJraXRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHRIYW5k
bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAg
ICAgICAgcHJpdi0+Z2xDb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9nbF9jb250ZXh0X25ld193cmFw
cGVkKHByaXYtPmdsRGlzcGxheS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29u
dGV4dEhhbmRsZSksIGdsUGxhdGZvcm0sIGdsQVBJKSk7CisgICAgZWxzZQorICAgICAgICBwcml2
LT5nbENvbnRleHQgPSBnc3RfZ2xfY29udGV4dF9uZXdfd3JhcHBlZChwcml2LT5nbERpc3BsYXku
Z2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+KGNvbnRleHRIYW5kbGUpLCBnbFBsYXRm
b3JtLCBnbEFQSSk7CisKKyAgICAvLyBBY3RpdmF0ZSBhbmQgZmlsbCB0aGUgR1N0cmVhbWVyIHdy
YXBwZWQgY29udGV4dCB3aXRoIHRoZSBXZWJraXQncyBzaGFyZWQgb25lLgorICAgIGF1dG8gcHJl
dmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7CisgICAgd2Via2l0Q29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKGdzdF9nbF9jb250ZXh0X2FjdGl2
YXRlKHByaXYtPmdsQ29udGV4dC5nZXQoKSwgVFJVRSkpIHsKKyAgICAgICAgR1VuaXF1ZU91dFB0
cjxHRXJyb3I+IGVycm9yOworICAgICAgICBpZiAoIWdzdF9nbF9jb250ZXh0X2ZpbGxfaW5mbyhw
cml2LT5nbENvbnRleHQuZ2V0KCksICZlcnJvci5vdXRQdHIoKSkpCisgICAgICAgICAgICBHU1Rf
V0FSTklORygiRmFpbGVkIHRvIGZpbGwgaW4gR1N0cmVhbWVyIGNvbnRleHQ6ICVzIiwgZXJyb3It
Pm1lc3NhZ2UpOworICAgICAgICBnc3RfZ2xfY29udGV4dF9hY3RpdmF0ZShwcml2LT5nbENvbnRl
eHQuZ2V0KCksIEZBTFNFKTsKKyAgICB9IGVsc2UKKyAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxl
ZCB0byBhY3RpdmF0ZSBHU3RyZWFtZXIgY29udGV4dCAlIiBHU1RfUFRSX0ZPUk1BVCwgcHJpdi0+
Z2xDb250ZXh0LmdldCgpKTsKKyAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAg
ICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyBHc3RDb250ZXh0KiByZXF1ZXN0R0xDb250ZXh0KFdlYktp
dEdMVmlkZW9TaW5rKiBzaW5rLCBjb25zdCBjaGFyKiBjb250ZXh0VHlwZSkKK3sKKyAgICBXZWJL
aXRHTFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworICAgIGlmICghZW5zdXJl
R3N0R0xDb250ZXh0KHNpbmspKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICgh
Z19zdHJjbXAwKGNvbnRleHRUeXBlLCBHU1RfR0xfRElTUExBWV9DT05URVhUX1RZUEUpKSB7Cisg
ICAgICAgIEdzdENvbnRleHQqIGRpc3BsYXlDb250ZXh0ID0gZ3N0X2NvbnRleHRfbmV3KEdTVF9H
TF9ESVNQTEFZX0NPTlRFWFRfVFlQRSwgVFJVRSk7CisgICAgICAgIGdzdF9jb250ZXh0X3NldF9n
bF9kaXNwbGF5KGRpc3BsYXlDb250ZXh0LCBwcml2LT5nbERpc3BsYXkuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gZGlzcGxheUNvbnRleHQ7CisgICAgfQorCisgICAgaWYgKCFnX3N0cmNtcDAoY29u
dGV4dFR5cGUsICJnc3QuZ2wuYXBwX2NvbnRleHQiKSkgeworICAgICAgICBHc3RDb250ZXh0KiBh
cHBDb250ZXh0ID0gZ3N0X2NvbnRleHRfbmV3KCJnc3QuZ2wuYXBwX2NvbnRleHQiLCBUUlVFKTsK
KyAgICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9z
dHJ1Y3R1cmUoYXBwQ29udGV4dCk7CisjaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTIsIDApCisg
ICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQiLCBHU1RfVFlQRV9H
TF9DT05URVhULCBwcml2LT5nbENvbnRleHQuZ2V0KCksIG51bGxwdHIpOworI2Vsc2UKKyAgICAg
ICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJlLCAiY29udGV4dCIsIEdTVF9HTF9UWVBFX0NP
TlRFWFQsIHByaXYtPmdsQ29udGV4dC5nZXQoKSwgbnVsbHB0cik7CisjZW5kaWYKKyAgICAgICAg
cmV0dXJuIGFwcENvbnRleHQ7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0
YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRHTFZpZGVvU2lua0NoYW5nZVN0YXRlKEdz
dEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCit7CisgICAgV2Vi
S2l0R0xWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfR0xfVklERU9fU0lOSyhlbGVtZW50KTsKKyAg
ICBXZWJLaXRHTFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworCisjaWYgR1NU
X0NIRUNLX1ZFUlNJT04oMSwgMTQsIDApCisgICAgR1NUX0RFQlVHX09CSkVDVChlbGVtZW50LCAi
JXMiLCBnc3Rfc3RhdGVfY2hhbmdlX2dldF9uYW1lKHRyYW5zaXRpb24pKTsKKyNlbmRpZgorCisg
ICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExf
VE9fUkVBRFk6CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1JFQURZOgorICAg
IGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6IHsKKyAgICAgICAgaWYgKCFw
cml2LT5nbERpc3BsYXlFbGVtZW50Q29udGV4dCkKKyAgICAgICAgICAgIHByaXYtPmdsRGlzcGxh
eUVsZW1lbnRDb250ZXh0ID0gYWRvcHRHUmVmKHJlcXVlc3RHTENvbnRleHQoc2luaywgR1NUX0dM
X0RJU1BMQVlfQ09OVEVYVF9UWVBFKSk7CisKKyAgICAgICAgaWYgKHByaXYtPmdsRGlzcGxheUVs
ZW1lbnRDb250ZXh0KQorICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VM
RU1FTlRfQ0FTVChzaW5rKSwgcHJpdi0+Z2xEaXNwbGF5RWxlbWVudENvbnRleHQuZ2V0KCkpOwor
CisgICAgICAgIGlmICghcHJpdi0+Z2xBcHBFbGVtZW50Q29udGV4dCkKKyAgICAgICAgICAgIHBy
aXYtPmdsQXBwRWxlbWVudENvbnRleHQgPSBhZG9wdEdSZWYocmVxdWVzdEdMQ29udGV4dChzaW5r
LCAiZ3N0LmdsLmFwcF9jb250ZXh0IikpOworCisgICAgICAgIGlmIChwcml2LT5nbEFwcEVsZW1l
bnRDb250ZXh0KQorICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1F
TlRfQ0FTVChzaW5rKSwgcHJpdi0+Z2xBcHBFbGVtZW50Q29udGV4dC5nZXQoKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICByZXR1cm4gR1NUX0VMRU1FTlRfQ0xBU1MocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlKGVs
ZW1lbnQsIHRyYW5zaXRpb24pOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZ2xfdmlkZW9fc2lu
a19jbGFzc19pbml0KFdlYktpdEdMVmlkZW9TaW5rQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmpl
Y3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgR3N0RWxl
bWVudENsYXNzKiBlbGVtZW50Q2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7CisKKyAg
ICBvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJLaXRHTFZpZGVvU2lua0ZpbmFsaXplOworCisg
ICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9z
dGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc2lua1RlbXBsYXRlKSk7CisKKyAgICBnc3RfZWxlbWVu
dF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhKGVsZW1lbnRDbGFzcywgIldlYktpdCBHTCB2aWRl
byBzaW5rIiwgIlNpbmsvVmlkZW8iLCAiUmVuZGVycyB2aWRlbyIsICJQaGlsaXBwZSBOb3JtYW5k
IDxwaGlsbkBpZ2FsaWEuY29tPiIpOworCisgICAgZWxlbWVudENsYXNzLT5jaGFuZ2Vfc3RhdGUg
PSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRHTFZpZGVvU2lua0NoYW5nZVN0YXRlKTsKKyAgICBn
X3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRHTFZpZGVvU2lua1By
aXZhdGUpKTsKK30KKwordm9pZCB3ZWJLaXRHTFZpZGVvU2lua1NldE1lZGlhUGxheWVyUHJpdmF0
ZShXZWJLaXRHTFZpZGVvU2luayogc2luaywgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBw
bGF5ZXIpCit7CisgICAgV2ViS2l0R0xWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2luay0+cHJp
djsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+YXBwU2luay5nZXQoKSwgIm5ldy1zYW1w
bGUiLCBHX0NBTExCQUNLKCtbXShHc3RFbGVtZW50KiBzaW5rLCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIqIHBsYXllcikgLT4gR3N0Rmxvd1JldHVybiB7CisgICAgICAgIEdSZWZQdHI8R3N0
U2FtcGxlPiBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxlKEdTVF9B
UFBfU0lOSyhzaW5rKSkpOworICAgICAgICBwbGF5ZXItPnRyaWdnZXJSZXBhaW50KHNhbXBsZS5n
ZXQoKSk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKKyAgICB9KSwgcGxheWVyKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KHByaXYtPmFwcFNpbmsuZ2V0KCksICJuZXctcHJlcm9sbCIsIEdf
Q0FMTEJBQ0soK1tdKEdzdEVsZW1lbnQqIHNpbmssIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ciogcGxheWVyKSAtPiBHc3RGbG93UmV0dXJuIHsKKyAgICAgICAgR1JlZlB0cjxHc3RTYW1wbGU+
IHNhbXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3NpbmtfcHVsbF9wcmVyb2xsKEdTVF9BUFBfU0lO
SyhzaW5rKSkpOworICAgICAgICBwbGF5ZXItPnRyaWdnZXJSZXBhaW50KHNhbXBsZS5nZXQoKSk7
CisgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKKyAgICB9KSwgcGxheWVyKTsKKworICAgIEdS
ZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQo
cHJpdi0+YXBwU2luay5nZXQoKSwgInNpbmsiKSk7CisgICAgZ3N0X3BhZF9hZGRfcHJvYmUocGFk
LmdldCgpLCBzdGF0aWNfY2FzdDxHc3RQYWRQcm9iZVR5cGU+KEdTVF9QQURfUFJPQkVfVFlQRV9Q
VVNIIHwgR1NUX1BBRF9QUk9CRV9UWVBFX1FVRVJZX0RPV05TVFJFQU0gfCBHU1RfUEFEX1BST0JF
X1RZUEVfRVZFTlRfRkxVU0gpLCBbXSAoR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiBpbmZvLCAg
Z3BvaW50ZXIgdXNlckRhdGEpIC0+IEdzdFBhZFByb2JlUmV0dXJuIHsKKyAgICAgICAgLy8gSW4g
c29tZSBwbGF0Zm9ybXMgKGUuZy4gT3Blbk1BWCBvbiB0aGUgUmFzcGJlcnJ5IFBpKSB3aGVuIGEg
cmVzb2x1dGlvbiBjaGFuZ2Ugb2NjdXJzIHRoZQorICAgICAgICAvLyBwaXBlbGluZSBoYXMgdG8g
YmUgZHJhaW5lZCBiZWZvcmUgYSBmcmFtZSB3aXRoIHRoZSBuZXcgcmVzb2x1dGlvbiBjYW4gYmUg
ZGVjb2RlZC4KKyAgICAgICAgLy8gSW4gdGhpcyBjb250ZXh0LCBpdCdzIGltcG9ydGFudCB0aGF0
IHdlIGRvbid0IGhvbGQgcmVmZXJlbmNlcyB0byBhbnkgcHJldmlvdXMgZnJhbWUKKyAgICAgICAg
Ly8gKGUuZy4gbV9zYW1wbGUpIHNvIHRoYXQgZGVjb2RpbmcgY2FuIGNvbnRpbnVlLgorICAgICAg
ICAvLyBXZSBhcmUgYWxzbyBub3Qgc3VwcG9zZWQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgZnJhbWUg
YWZ0ZXIgYSBmbHVzaC4KKyAgICAgICAgaWYgKGluZm8tPnR5cGUgJiBHU1RfUEFEX1BST0JFX1RZ
UEVfUVVFUllfRE9XTlNUUkVBTSkgeworICAgICAgICAgICAgaWYgKEdTVF9RVUVSWV9UWVBFKEdT
VF9QQURfUFJPQkVfSU5GT19RVUVSWShpbmZvKSkgIT0gR1NUX1FVRVJZX0RSQUlOKQorICAgICAg
ICAgICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09LOworICAgICAgICAgICAgR1NUX0RFQlVH
KCJBY3RpbmcgdXBvbiBEUkFJTiBxdWVyeSIpOworICAgICAgICB9CisgICAgICAgIGlmIChpbmZv
LT50eXBlICYgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0ZMVVNIKSB7CisgICAgICAgICAgICBp
ZiAoR1NUX0VWRU5UX1RZUEUoR1NUX1BBRF9QUk9CRV9JTkZPX0VWRU5UKGluZm8pKSAhPSBHU1Rf
RVZFTlRfRkxVU0hfU1RBUlQpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdTVF9QQURfUFJPQkVf
T0s7CisgICAgICAgICAgICBHU1RfREVCVUcoIkFjdGluZyB1cG9uIGZsdXNoLXN0YXJ0IGV2ZW50
Iik7CisgICAgICAgIH0KKworICAgICAgICBhdXRvKiBwbGF5ZXIgPSBzdGF0aWNfY2FzdDxNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIqPih1c2VyRGF0YSk7CisgICAgICAgIHBsYXllci0+Zmx1
c2hDdXJyZW50QnVmZmVyKCk7CisgICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09LOworICAg
IH0sIHBsYXllciwgbnVsbHB0cik7Cit9CisKK2Jvb2wgd2ViS2l0R0xWaWRlb1NpbmtQcm9iZVBs
YXRmb3JtKCkKK3sKKyAgICBhdXRvIHNpbmsgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZmFjdG9y
eV9tYWtlKCJhcHBzaW5rIiwgbnVsbHB0cikpOworICAgIGlmICghc2luaykgeworICAgICAgICBH
U1RfV0FSTklORygiYXBwc2luayBlbGVtZW50IHVuYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgeW91
ciBnc3QtcGx1Z2lucy1iYXNlIGluc3RhbGxhdGlvbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgYXV0byBjb2xvcmNvbnZlcnQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
ZmFjdG9yeV9tYWtlKCJnbGNvbG9yY29udmVydCIsIG51bGxwdHIpKTsKKyAgICBhdXRvIHVwbG9h
ZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImdsdXBsb2FkIiwgbnVsbHB0
cikpOworICAgIGlmICghY29sb3Jjb252ZXJ0IHx8ICF1cGxvYWQpIHsKKyAgICAgICAgR1NUX1dB
Uk5JTkcoIkdzdEdMIGVsZW1lbnRzIHVuYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgeW91ciBHU3Ry
ZWFtZXIgaW5zdGFsbGF0aW9uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1l
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQ1NmJjY2FjYjNmOGRlODc2MDdjNjQ1N2YyYjFhNDM3MDM5N2EwZDEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAxOSBJZ2FsaWEsIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVJf
R0wpCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjsKK30KKworR19CRUdJTl9ERUNMUworCisjZGVm
aW5lIFdFQktJVF9UWVBFX0dMX1ZJREVPX1NJTksgICAgICAgICAgICAod2Via2l0X2dsX3ZpZGVv
X3NpbmtfZ2V0X3R5cGUgKCkpCisjZGVmaW5lIFdFQktJVF9HTF9WSURFT19TSU5LKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBXRUJLSVRfVFlQRV9H
TF9WSURFT19TSU5LLCBXZWJLaXRHTFZpZGVvU2luaykpCisjZGVmaW5lIFdFQktJVF9HTF9WSURF
T19TSU5LX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyks
IFdFQktJVF9UWVBFX0dMX1ZJREVPX1NJTkssIFdlYktpdEdMVmlkZW9TaW5rQ2xhc3MpKQorI2Rl
ZmluZSBXRUJLSVRfSVNfR0xfVklERU9fU0lOSyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfR0xfVklERU9fU0lOSykpCisjZGVmaW5l
IFdFQktJVF9JU19HTF9WSURFT19TSU5LX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUgKChrbGFzcyksIFdFQktJVF9UWVBFX0dMX1ZJREVPX1NJTkspKQorCit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0R0xWaWRlb1NpbmsgICAgICAgIFdlYktpdEdMVmlkZW9TaW5rOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdEdMVmlkZW9TaW5rQ2xhc3MgICBXZWJLaXRHTFZpZGVvU2lua0NsYXNz
OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEdMVmlkZW9TaW5rUHJpdmF0ZSBXZWJLaXRHTFZpZGVv
U2lua1ByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0R0xWaWRlb1NpbmsgeworICAgIEdzdEJpbiBw
YXJlbnQ7CisKKyAgICBXZWJLaXRHTFZpZGVvU2lua1ByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1
Y3QgX1dlYktpdEdMVmlkZW9TaW5rQ2xhc3MgeworICAgIEdzdEJpbkNsYXNzIHBhcmVudENsYXNz
OworfTsKKworR1R5cGUgd2Via2l0X2dsX3ZpZGVvX3NpbmtfZ2V0X3R5cGUodm9pZCk7CisKK2Jv
b2wgd2ViS2l0R0xWaWRlb1NpbmtQcm9iZVBsYXRmb3JtKCk7Cit2b2lkIHdlYktpdEdMVmlkZW9T
aW5rU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdlYktpdEdMVmlkZW9TaW5rKiwgV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBF
TkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVJfR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
Y3BwCmluZGV4IDIwOTE3NzYwM2E5ODc0NWI1ZWQ5ZWIyODJlOGMxMTRhMjAxOTNiMTQuLjllOTZh
ZjIyZGI4ZWMzZTA4OTVhY2E3ZGU1OTcwZmQwYWJlODJlYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJD
b21tb24uY3BwCkBAIC01Myw2ICs1MywxMCBAQAogCiAjaWYgRU5BQkxFKFZJREVPKQogI2luY2x1
ZGUgIldlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9HTCkK
KyNpbmNsdWRlICJHTFZpZGVvU2lua0dTdHJlYW1lci5oIgorI2VuZGlmCiAjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMjk2LDYgKzMwMCw5IEBAIGJvb2wgaW5pdGlhbGl6ZUdTdHJl
YW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKQogCiAjaWYgRU5BQkxFKFZJREVPKQogICAg
ICAgICBnc3RfZWxlbWVudF9yZWdpc3RlcigwLCAid2Via2l0d2Vic3JjIiwgR1NUX1JBTktfUFJJ
TUFSWSArIDEwMCwgV0VCS0lUX1RZUEVfV0VCX1NSQyk7CisjaWYgVVNFKEdTVFJFQU1FUl9HTCkK
KyAgICAgICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIoMCwgIndlYmtpdGdsdmlkZW9zaW5rIiwgR1NU
X1JBTktfUFJJTUFSWSwgV0VCS0lUX1RZUEVfR0xfVklERU9fU0lOSyk7CisjZW5kaWYKICNlbmRp
ZgogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCBlMjI0OWNkYzk2NzRjNzUxMmUyZWM3YjEyZmIx
NmI5YjQyYmY5NzdiLi5mZWM1OWFmZWZiZWMyYmRiOWQ0NThhYmFiNmMyNmExNjliN2Y2NzdmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAt
MTIzLDQwICsxMjMsMTAgQEAKICNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCiAKICNpZiBV
U0UoR1NUUkVBTUVSX0dMKQotI2RlZmluZSBURVhUVVJFX0NPUElFUl9DT0xPUl9DT05WRVJUX0ZM
QUcgVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyOjpDb2xvckNvbnZlcnNpb246Ok5vQ29udmVy
dAotI2RlZmluZSBHU1RfR0xfQ0FQU19GT1JNQVQgInsgUkdCeCwgUkdCQSwgSTQyMCwgWTQ0NCwg
WVYxMiwgWTQxQiwgWTQyQiwgTlYxMiwgTlYyMSwgVlVZQSB9IgotCi0jaW5jbHVkZSA8Z3N0L2Fw
cC9nc3RhcHBzaW5rLmg+Ci0KLSNpbmNsdWRlICJHTENvbnRleHQuaCIKLSNpZiBVU0UoR0xYKQot
I2luY2x1ZGUgIkdMQ29udGV4dEdMWC5oIgotI2luY2x1ZGUgPGdzdC9nbC94MTEvZ3N0Z2xkaXNw
bGF5X3gxMS5oPgotI2VuZGlmCi0KLSNpZiBVU0UoRUdMKQotI2luY2x1ZGUgIkdMQ29udGV4dEVH
TC5oIgotI2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0Z2xkaXNwbGF5X2VnbC5oPgotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShYMTEpCi0jaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5WDExLmgiCi0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKFdBWUxBTkQpCi0jaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5V2F5
bGFuZC5oIgotI2VuZGlmCi0KLSNpZiBVU0UoV1BFX1JFTkRFUkVSKQotI2luY2x1ZGUgIlBsYXRm
b3JtRGlzcGxheUxpYldQRS5oIgotI2VuZGlmCi0KLS8vIGdzdGdsYXBpLmggbWF5IGluY2x1ZGUg
ZWdscGxhdGZvcm0uaCBhbmQgaXQgaW5jbHVkZXMgWC5oLCB3aGljaAotLy8gZGVmaW5lcyBOb25l
LCBicmVha2luZyBNZWRpYVBsYXllcjo6Tm9uZSBlbnVtCi0jaWYgUExBVEZPUk0oWDExKSAmJiBH
U1RfR0xfSEFWRV9QTEFURk9STV9FR0wKLSN1bmRlZiBOb25lCi0jZW5kaWYgLy8gUExBVEZPUk0o
WDExKSAmJiBHU1RfR0xfSEFWRV9QTEFURk9STV9FR0wKKyNpbmNsdWRlICJHTFZpZGVvU2lua0dT
dHJlYW1lci5oIgogI2luY2x1ZGUgIlZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lci5oIgorCisj
ZGVmaW5lIFRFWFRVUkVfQ09QSUVSX0NPTE9SX0NPTlZFUlRfRkxBRyBWaWRlb1RleHR1cmVDb3Bp
ZXJHU3RyZWFtZXI6OkNvbG9yQ29udmVyc2lvbjo6Tm9Db252ZXJ0CiAjZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUl9HTCkKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKQEAgLTU3NCw5ICs1NDQs
NiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZChNZWRpYVN0cmVhbVBy
aXZhdGUmIHN0cmVhbSkKICAgICBsb2FkRnVsbChTdHJpbmcoIm1lZGlhc3RyZWFtOi8vIikgKyBz
dHJlYW0uaWQoKSwgcGlwZWxpbmVOYW1lKTsKICAgICBzeW5jT25DbG9jayhmYWxzZSk7CiAKLSNp
ZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIGVuc3VyZUdMVmlkZW9TaW5rQ29udGV4dCgpOwotI2Vu
ZGlmCiAgICAgbV9wbGF5ZXItPnBsYXkoKTsKIH0KICNlbmRpZgpAQCAtMTE4MiwxMSArMTE0OSw2
IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjaGFuZ2VQaXBlbGluZVN0YXRl
KEdzdFN0YXRlIG5ld1N0YXRlKQogICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkNo
YW5naW5nIHN0YXRlIGNoYW5nZSB0byAlcyBmcm9tICVzIHdpdGggJXMgcGVuZGluZyIsIGdzdF9l
bGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRlKSwKICAgICAgICAgZ3N0X2VsZW1lbnRfc3Rh
dGVfZ2V0X25hbWUoY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVu
ZGluZykpOwogCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICBpZiAoY3VycmVudFN0YXRlIDw9
IEdTVF9TVEFURV9SRUFEWSAmJiBuZXdTdGF0ZSA+PSBHU1RfU1RBVEVfUEFVU0VEKQotICAgICAg
ICBlbnN1cmVHTFZpZGVvU2lua0NvbnRleHQoKTsKLSNlbmRpZgotCiAgICAgR3N0U3RhdGVDaGFu
Z2VSZXR1cm4gc2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGlu
ZS5nZXQoKSwgbmV3U3RhdGUpOwogICAgIEdzdFN0YXRlIHBhdXNlZE9yUGxheWluZyA9IG5ld1N0
YXRlID09IEdTVF9TVEFURV9QTEFZSU5HID8gR1NUX1NUQVRFX1BBVVNFRCA6IEdTVF9TVEFURV9Q
TEFZSU5HOwogICAgIGlmIChjdXJyZW50U3RhdGUgIT0gcGF1c2VkT3JQbGF5aW5nICYmIHNldFN0
YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKQEAgLTE3NzgsMTQgKzE3NDAs
NiBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2Uo
R3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0jaWYg
VVNFKEdTVFJFQU1FUl9HTCkKLSAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGVsZW1lbnRDb250ZXh0
ID0gYWRvcHRHUmVmKHJlcXVlc3RHTENvbnRleHQoY29udGV4dFR5cGUpKTsKLSAgICBpZiAoZWxl
bWVudENvbnRleHQpIHsKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1F
TlQobWVzc2FnZS0+c3JjKSwgZWxlbWVudENvbnRleHQuZ2V0KCkpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0jZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKLQogI2lmIEVOQUJMRShF
TkNSWVBURURfTUVESUEpCiAgICAgaWYgKCFnX3N0cmNtcDAoY29udGV4dFR5cGUsICJkcm0tcHJl
ZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIikpIHsKICAgICAgICAgaWYgKGlzTWFpblRocmVh
ZCgpKSB7CkBAIC0xODI5LDEyNSArMTc4MywxMCBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLUdzdENvbnRleHQq
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVxdWVzdEdMQ29udGV4dChjb25zdCBjaGFy
KiBjb250ZXh0VHlwZSkKLXsKLSAgICBpZiAoIWVuc3VyZUdzdEdMQ29udGV4dCgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRUeXBlLCBHU1Rf
R0xfRElTUExBWV9DT05URVhUX1RZUEUpKSB7Ci0gICAgICAgIEdzdENvbnRleHQqIGRpc3BsYXlD
b250ZXh0ID0gZ3N0X2NvbnRleHRfbmV3KEdTVF9HTF9ESVNQTEFZX0NPTlRFWFRfVFlQRSwgVFJV
RSk7Ci0gICAgICAgIGdzdF9jb250ZXh0X3NldF9nbF9kaXNwbGF5KGRpc3BsYXlDb250ZXh0LCBn
c3RHTERpc3BsYXkoKSk7Ci0gICAgICAgIHJldHVybiBkaXNwbGF5Q29udGV4dDsKLSAgICB9Ci0K
LSAgICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgImdzdC5nbC5hcHBfY29udGV4dCIpKSB7
Ci0gICAgICAgIEdzdENvbnRleHQqIGFwcENvbnRleHQgPSBnc3RfY29udGV4dF9uZXcoImdzdC5n
bC5hcHBfY29udGV4dCIsIFRSVUUpOwotICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShhcHBDb250ZXh0KTsKLSNpZiBHU1RfQ0hF
Q0tfVkVSU0lPTigxLCAxMiwgMCkKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJl
LCAiY29udGV4dCIsIEdTVF9UWVBFX0dMX0NPTlRFWFQsIGdzdEdMQ29udGV4dCgpLCBudWxscHRy
KTsKLSNlbHNlCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQi
LCBHU1RfR0xfVFlQRV9DT05URVhULCBnc3RHTENvbnRleHQoKSwgbnVsbHB0cik7Ci0jZW5kaWYK
LSAgICAgICAgcmV0dXJuIGFwcENvbnRleHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7
Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbnN1cmVHc3RHTENvbnRl
eHQoKQotewotICAgIGlmIChtX2dsQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBhdXRvJiBzaGFyZWREaXNwbGF5ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9y
Q29tcG9zaXRpbmcoKTsKLQotICAgIC8vIFRoZSBmbG9hdGluZyByZWYgcmVtb3ZhbCBzdXBwb3J0
IHdhcyBhZGRlZCBpbiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzQzMDYyLgotICAgIGJvb2wgc2hvdWxkQWRvcHRSZWYgPSB3ZWJraXRHc3RDaGVja1ZlcnNpb24o
MSwgMTQsIDApOwotICAgIGlmICghbV9nbERpc3BsYXkpIHsKLSNpZiBQTEFURk9STShYMTEpCi0j
aWYgVVNFKEdMWCkKLSAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlz
cGxheSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkNyZWF0
aW5nIFgxMSBzaGFyZWQgR0wgZGlzcGxheSIpOwotICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0
UmVmKQotICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQ
TEFZKGdzdF9nbF9kaXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3Jt
RGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkubmF0aXZlKCkpKSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlz
cGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNo
YXJlZERpc3BsYXkpLm5hdGl2ZSgpKSk7Ci0gICAgICAgIH0KLSNlbGlmIFVTRShFR0wpCi0gICAg
ICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpKSB7Ci0gICAgICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGluZyBYMTEgc2hhcmVkIEVH
TCBkaXNwbGF5Iik7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAgICAgICAg
ICAgICAgbV9nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3Bs
YXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4o
c2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWds
X25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVk
RGlzcGxheSkuZWdsRGlzcGxheSgpKSk7Ci0gICAgICAgIH0KLSNlbmRpZgotI2VuZGlmCi0KLSNp
ZiBQTEFURk9STShXQVlMQU5EKQotICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5V2F5bGFu
ZD4oc2hhcmVkRGlzcGxheSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxp
bmUoKSwgIkNyZWF0aW5nIFdheWxhbmQgc2hhcmVkIGRpc3BsYXkiKTsKLSAgICAgICAgICAgIGlm
IChzaG91bGRBZG9wdFJlZikKLSAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IGFkb3B0R1Jl
ZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXko
ZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxh
eSgpKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0g
R1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRv
d25jYXN0PFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXko
KSkpOwotICAgICAgICB9Ci0jZW5kaWYKIAotI2lmIFVTRShXUEVfUkVOREVSRVIpCi0gICAgICAg
IGlmIChpczxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpKSB7Ci0gICAgICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGluZyBXUEUgc2hhcmVkIEVH
TCBkaXNwbGF5Iik7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAgICAgICAg
ICAgICAgbV9nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3Bs
YXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheUxpYldQ
RT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSkpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlf
ZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheUxpYldQRT4o
c2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSk7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAg
ICAgIEFTU0VSVChtX2dsRGlzcGxheSk7Ci0gICAgfQotCi0gICAgR0xDb250ZXh0KiB3ZWJraXRD
b250ZXh0ID0gc2hhcmVkRGlzcGxheS5zaGFyaW5nR0xDb250ZXh0KCk7Ci0gICAgLy8gRUdMIGFu
ZCBHTFggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgbm8gbmVlZCBmb3IgaWZkZWZzIGhlcmUuCi0g
ICAgR3N0R0xQbGF0Zm9ybSBnbFBsYXRmb3JtID0gd2Via2l0Q29udGV4dC0+aXNFR0xDb250ZXh0
KCkgPyBHU1RfR0xfUExBVEZPUk1fRUdMIDogR1NUX0dMX1BMQVRGT1JNX0dMWDsKLQotI2lmIFVT
RShPUEVOR0xfRVMpCi0gICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1RfR0xfQVBJX0dMRVMyOwotI2Vs
aWYgVVNFKE9QRU5HTCkKLSAgICBHc3RHTEFQSSBnbEFQSSA9IEdTVF9HTF9BUElfT1BFTkdMOwot
I2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotCi0gICAgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCBjb250ZXh0SGFuZGxlID0gd2Via2l0Q29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0SGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAgICAgIG1fZ2xDb250ZXh0ID0gYWRvcHRH
UmVmKGdzdF9nbF9jb250ZXh0X25ld193cmFwcGVkKG1fZ2xEaXNwbGF5LmdldCgpLCByZWludGVy
cHJldF9jYXN0PGd1aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQbGF0Zm9ybSwgZ2xBUEkpKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fZ2xDb250ZXh0ID0gZ3N0X2dsX2NvbnRleHRfbmV3X3dyYXBw
ZWQobV9nbERpc3BsYXkuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+KGNvbnRleHRI
YW5kbGUpLCBnbFBsYXRmb3JtLCBnbEFQSSk7Ci0KLSAgICAvLyBBY3RpdmF0ZSBhbmQgZmlsbCB0
aGUgR1N0cmVhbWVyIHdyYXBwZWQgY29udGV4dCB3aXRoIHRoZSBXZWJraXQncyBzaGFyZWQgb25l
LgotICAgIGF1dG8gcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7
Ci0gICAgd2Via2l0Q29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKGdzdF9n
bF9jb250ZXh0X2FjdGl2YXRlKG1fZ2xDb250ZXh0LmdldCgpLCBUUlVFKSkgewotICAgICAgICBH
VW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgIGlmICghZ3N0X2dsX2NvbnRleHRf
ZmlsbF9pbmZvKG1fZ2xDb250ZXh0LmdldCgpLCAmZXJyb3Iub3V0UHRyKCkpKQotICAgICAgICAg
ICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBmaWxsIGluIEdTdHJlYW1lciBjb250ZXh0OiAlcyIs
IGVycm9yLT5tZXNzYWdlKTsKLSAgICAgICAgZ3N0X2dsX2NvbnRleHRfYWN0aXZhdGUobV9nbENv
bnRleHQuZ2V0KCksIEZBTFNFKTsKLSAgICB9IGVsc2UKLSAgICAgICAgR1NUX1dBUk5JTkcoIkZh
aWxlZCB0byBhY3RpdmF0ZSBHU3RyZWFtZXIgY29udGV4dCAlIiBHU1RfUFRSX0ZPUk1BVCwgbV9n
bENvbnRleHQuZ2V0KCkpOwotICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCi0gICAgICAg
IHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJVbmhhbmRsZWQgJXMg
bmVlZC1jb250ZXh0IG1lc3NhZ2UgZm9yICVzIiwgY29udGV4dFR5cGUsIEdTVF9NRVNTQUdFX1NS
Q19OQU1FKG1lc3NhZ2UpKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9Ci0jZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUl9HTCkKIAogLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8KIEZsb2F0U2l6
ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKQEAgLTMz
NTksMjAgKzMxOTgsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVwYWlu
dENhbmNlbGxlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdAogfQogCiAjaWYgVVNFKEdT
VFJFQU1FUl9HTCkKLUdzdEZsb3dSZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpu
ZXdTYW1wbGVDYWxsYmFjayhHc3RFbGVtZW50KiBzaW5rLCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIqIHBsYXllcikKLXsKLSAgICBHUmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlID0gYWRvcHRH
UmVmKGdzdF9hcHBfc2lua19wdWxsX3NhbXBsZShHU1RfQVBQX1NJTksoc2luaykpKTsKLSAgICBw
bGF5ZXItPnRyaWdnZXJSZXBhaW50KHNhbXBsZS5nZXQoKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9X
X09LOwotfQotCi1Hc3RGbG93UmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3
UHJlcm9sbENhbGxiYWNrKEdzdEVsZW1lbnQqIHNpbmssIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lciogcGxheWVyKQotewotICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1wbGUgPSBhZG9wdEdS
ZWYoZ3N0X2FwcF9zaW5rX3B1bGxfcHJlcm9sbChHU1RfQVBQX1NJTksoc2luaykpKTsKLSAgICBw
bGF5ZXItPnRyaWdnZXJSZXBhaW50KHNhbXBsZS5nZXQoKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9X
X09LOwotfQotCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Zmx1c2hDdXJyZW50
QnVmZmVyKCkKIHsKICAgICBhdXRvIHNhbXBsZUxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0
ZXgpOwpAQCAtMzU5NSwxMTggKzM0MjAsMTcgQEAgTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptb3ZpZUxvYWRUeXBlKCkgY29uc3QKIH0KIAog
I2lmIFVTRShHU1RSRUFNRVJfR0wpCi1Hc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmNyZWF0ZUdMQXBwU2luaygpCi17Ci0gICAgR3N0RWxlbWVudCogYXBwc2luayA9IGdz
dF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc2luayIsICJ3ZWJraXQtZ2wtdmlkZW8tc2luayIp
OwotICAgIGlmICghYXBwc2luaykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBnX29i
amVjdF9zZXQoYXBwc2luaywgImVuYWJsZS1sYXN0LXNhbXBsZSIsIEZBTFNFLCAiZW1pdC1zaWdu
YWxzIiwgVFJVRSwgIm1heC1idWZmZXJzIiwgMSwgbnVsbHB0cik7Ci0gICAgZ19zaWduYWxfY29u
bmVjdChhcHBzaW5rLCAibmV3LXNhbXBsZSIsIEdfQ0FMTEJBQ0sobmV3U2FtcGxlQ2FsbGJhY2sp
LCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGFwcHNpbmssICJuZXctcHJlcm9sbCIsIEdf
Q0FMTEJBQ0sobmV3UHJlcm9sbENhbGxiYWNrKSwgdGhpcyk7Ci0KLSAgICBHUmVmUHRyPEdzdFBh
ZD4gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGFwcHNpbmssICJz
aW5rIikpOwotICAgIGdzdF9wYWRfYWRkX3Byb2JlKHBhZC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0
UGFkUHJvYmVUeXBlPihHU1RfUEFEX1BST0JFX1RZUEVfUFVTSCB8IEdTVF9QQURfUFJPQkVfVFlQ
RV9RVUVSWV9ET1dOU1RSRUFNIHwgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0ZMVVNIKSwgW10g
KEdzdFBhZCosIEdzdFBhZFByb2JlSW5mbyogaW5mbywgIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBH
c3RQYWRQcm9iZVJldHVybiB7Ci0gICAgICAgIC8vIEluIHNvbWUgcGxhdGZvcm1zIChlLmcuIE9w
ZW5NQVggb24gdGhlIFJhc3BiZXJyeSBQaSkgd2hlbiBhIHJlc29sdXRpb24gY2hhbmdlIG9jY3Vy
cyB0aGUKLSAgICAgICAgLy8gcGlwZWxpbmUgaGFzIHRvIGJlIGRyYWluZWQgYmVmb3JlIGEgZnJh
bWUgd2l0aCB0aGUgbmV3IHJlc29sdXRpb24gY2FuIGJlIGRlY29kZWQuCi0gICAgICAgIC8vIElu
IHRoaXMgY29udGV4dCwgaXQncyBpbXBvcnRhbnQgdGhhdCB3ZSBkb24ndCBob2xkIHJlZmVyZW5j
ZXMgdG8gYW55IHByZXZpb3VzIGZyYW1lCi0gICAgICAgIC8vIChlLmcuIG1fc2FtcGxlKSBzbyB0
aGF0IGRlY29kaW5nIGNhbiBjb250aW51ZS4KLSAgICAgICAgLy8gV2UgYXJlIGFsc28gbm90IHN1
cHBvc2VkIHRvIGtlZXAgdGhlIG9yaWdpbmFsIGZyYW1lIGFmdGVyIGEgZmx1c2guCi0gICAgICAg
IGlmIChpbmZvLT50eXBlICYgR1NUX1BBRF9QUk9CRV9UWVBFX1FVRVJZX0RPV05TVFJFQU0pIHsK
LSAgICAgICAgICAgIGlmIChHU1RfUVVFUllfVFlQRShHU1RfUEFEX1BST0JFX0lORk9fUVVFUlko
aW5mbykpICE9IEdTVF9RVUVSWV9EUkFJTikKLSAgICAgICAgICAgICAgICByZXR1cm4gR1NUX1BB
RF9QUk9CRV9PSzsKLSAgICAgICAgICAgIEdTVF9ERUJVRygiQWN0aW5nIHVwb24gRFJBSU4gcXVl
cnkiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5mby0+dHlwZSAmIEdTVF9QQURfUFJPQkVf
VFlQRV9FVkVOVF9GTFVTSCkgewotICAgICAgICAgICAgaWYgKEdTVF9FVkVOVF9UWVBFKEdTVF9Q
QURfUFJPQkVfSU5GT19FVkVOVChpbmZvKSkgIT0gR1NUX0VWRU5UX0ZMVVNIX1NUQVJUKQotICAg
ICAgICAgICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotICAgICAgICAgICAgR1NUX0RF
QlVHKCJBY3RpbmcgdXBvbiBmbHVzaC1zdGFydCBldmVudCIpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgYXV0byogcGxheWVyID0gc3RhdGljX2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Kj4odXNlckRhdGEpOwotICAgICAgICBwbGF5ZXItPmZsdXNoQ3VycmVudEJ1ZmZlcigpOwotICAg
ICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLSAgICB9LCB0aGlzLCBudWxscHRyKTsKLQot
ICAgIHJldHVybiBhcHBzaW5rOwotfQotCiBHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmNyZWF0ZVZpZGVvU2lua0dMKCkKIHsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBU
UlVFOwotICAgIEdzdEVsZW1lbnQqIHZpZGVvU2luayA9IGdzdF9iaW5fbmV3KG51bGxwdHIpOwot
ICAgIEdzdEVsZW1lbnQqIHVwbG9hZCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZ2x1cGxv
YWQiLCBudWxscHRyKTsKLSAgICBHc3RFbGVtZW50KiBjb2xvcmNvbnZlcnQgPSBnc3RfZWxlbWVu
dF9mYWN0b3J5X21ha2UoImdsY29sb3Jjb252ZXJ0IiwgbnVsbHB0cik7Ci0gICAgR3N0RWxlbWVu
dCogYXBwc2luayA9IGNyZWF0ZUdMQXBwU2luaygpOwotCi0gICAgLy8gZ2xzaW5rYmluIGlzIG5v
dCB1c2VkIGJlY2F1c2UgaXQgaW5jbHVkZXMgZ2xjb2xvcmNvbnZlcnQgd2hpY2ggb25seSBwcm9j
ZXNzIFJHQkEsCi0gICAgLy8gYnV0IHdlIGNhbiBkaXNwbGF5IFlVViBmb3JtYXRzIHRvby4KLQot
ICAgIGlmICghYXBwc2luayB8fCAhdXBsb2FkIHx8ICFjb2xvcmNvbnZlcnQpIHsKLSAgICAgICAg
R1NUX1dBUk5JTkcoIkZhaWxlZCB0byBjcmVhdGUgR3N0R0wgZWxlbWVudHMiKTsKLSAgICAgICAg
Z3N0X29iamVjdF91bnJlZih2aWRlb1NpbmspOwotCi0gICAgICAgIGlmICh1cGxvYWQpCi0gICAg
ICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHVwbG9hZCk7Ci0gICAgICAgIGlmIChjb2xvcmNvbnZl
cnQpCi0gICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKGNvbG9yY29udmVydCk7Ci0gICAgICAg
IGlmIChhcHBzaW5rKQotICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZihhcHBzaW5rKTsKLQot
ICAgICAgICBnX3dhcm5pbmcoIldlYktpdCB3YXNuJ3QgYWJsZSB0byBmaW5kIHRoZSBHU3RyZWFt
ZXIgb3BlbmdsIHBsdWdpbi4gSGFyZHdhcmUtYWNjZWxlcmF0ZWQgemVyby1jb3B5IHZpZGVvIHJl
bmRlcmluZyBjYW4ndCBiZSBlbmFibGVkIHdpdGhvdXQgdGhpcyBwbHVnaW4uIik7CisgICAgaWYg
KCF3ZWJLaXRHTFZpZGVvU2lua1Byb2JlUGxhdGZvcm0oKSkgeworICAgICAgICBnX3dhcm5pbmco
IldlYktpdCB3YXNuJ3QgYWJsZSB0byBmaW5kIHRoZSBHTCB2aWRlbyBzaW5rIGRlcGVuZGVuY2ll
cy4gSGFyZHdhcmUtYWNjZWxlcmF0ZWQgemVyby1jb3B5IHZpZGVvIHJlbmRlcmluZyBjYW4ndCBi
ZSBlbmFibGVkIHdpdGhvdXQgdGhpcyBwbHVnaW4uIik7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTih2aWRlb1NpbmspLCB1cGxv
YWQsIGNvbG9yY29udmVydCwgYXBwc2luaywgbnVsbHB0cik7Ci0KLSAgICAvLyBXb3JrYXJvdW5k
IHVudGlsIHdlIGNhbiBkZXBlbmQgb24gR1N0cmVhbWVyIDEuMTYuMi4KLSAgICAvLyBodHRwczov
L2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhc2UvY29tbWl0
LzhkMzJkZTA5MDU1NGNmMjlmZTM1OWY4M2FhNDYwMDBiYTY1OGE2OTMKLSAgICAvLyBGb3JjaW5n
IGEgY29sb3IgY29udmVyc2lvbiB0byBSR0JBIGhlcmUgYWxsb3dzIGdsdXBsb2FkIHRvIGludGVy
bmFsbHkgdXNlCi0gICAgLy8gYW4gdXBsb2FkZXIgdGhhdCBhZGRzIGEgVmlkZW9NZXRhLCB0aHJv
dWdoIHRoZSBUZXh0dXJlVXBsb2FkTWV0YSBjYXBzCi0gICAgLy8gZmVhdHVyZSwgd2l0aG91dCBu
ZWVkaW5nIHRoZSBwYXRjaCBhYm92ZS4gSG93ZXZlciB0aGlzIHNwZWNpZmljIGNhcHMKLSAgICAv
LyBmZWF0dXJlIGlzIGdvaW5nIHRvIGJlIHJlbW92ZWQgZnJvbSBHU3RyZWFtZXIgc28gaXQgaXMg
Y29uc2lkZXJlZCBhCi0gICAgLy8gc2hvcnQtdGVybSB3b3JrYXJvdW5kLiBUaGlzIGNvZGUgcGF0
aCBtb3N0IGxpa2VseSB3aWxsIGhhdmUgYSBuZWdhdGl2ZQotICAgIC8vIHBlcmZvcm1hbmNlIGlt
cGFjdCBvbiBlbWJlZGRlZCBwbGF0Zm9ybXMgYXMgd2VsbC4gRG93bnN0cmVhbSBlbWJlZGRlcnMK
LSAgICAvLyBhcmUgaGlnaGx5IGVuY291cmFnZWQgdG8gY2hlcnJ5LXBpY2sgdGhlIHBhdGNoIGxp
bmtlZCBhYm92ZSBpbiB0aGVpciBCU1AKLSAgICAvLyBhbmQgc2V0IHRoZSBXRUJLSVRfR1NUX05P
X1JHQkFfQ09OVkVSU0lPTiBlbnZpcm9ubWVudCB2YXJpYWJsZSB1bnRpbAotICAgIC8vIEdTdHJl
YW1lciAxLjE2LjIgaXMgcmVsZWFzZWQuCi0gICAgLy8gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTQyMgotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2Fw
czsKLSAgICBpZiAod2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE2LCAyKSB8fCBnZXRlbnYoIldF
QktJVF9HU1RfTk9fUkdCQV9DT05WRVJTSU9OIikpCi0gICAgICAgIGNhcHMgPSBhZG9wdEdSZWYo
Z3N0X2NhcHNfZnJvbV9zdHJpbmcoInZpZGVvL3gtcmF3LCBmb3JtYXQgPSAoc3RyaW5nKSAiIEdT
VF9HTF9DQVBTX0ZPUk1BVCkpOwotICAgIGVsc2UgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIkZvcmNpbmcgUkdCQSBhcyBHU3RyZWFtZXIgaXMgbm90IG5ldyBlbm91Z2gu
Iik7Ci0gICAgICAgIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJpbmcoInZpZGVv
L3gtcmF3LCBmb3JtYXQgPSAoc3RyaW5nKSBSR0JBIikpOwotICAgIH0KLSAgICBnc3RfY2Fwc19z
ZXRfZmVhdHVyZXMoY2Fwcy5nZXQoKSwgMCwgZ3N0X2NhcHNfZmVhdHVyZXNfbmV3KEdTVF9DQVBT
X0ZFQVRVUkVfTUVNT1JZX0dMX01FTU9SWSwgbnVsbHB0cikpOwotICAgIGdfb2JqZWN0X3NldChh
cHBzaW5rLCAiY2FwcyIsIGNhcHMuZ2V0KCksIG51bGxwdHIpOwotCi0gICAgcmVzdWx0ICY9IGdz
dF9lbGVtZW50X2xpbmtfbWFueSh1cGxvYWQsIGNvbG9yY29udmVydCwgYXBwc2luaywgbnVsbHB0
cik7Ci0KLSAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dl
dF9zdGF0aWNfcGFkKHVwbG9hZCwgInNpbmsiKSk7Ci0gICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCh2
aWRlb1NpbmssIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgcGFkLmdldCgpKSk7Ci0KLSAgICBp
ZiAoIXJlc3VsdCkgewotICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGxpbmsgR3N0R0wg
ZWxlbWVudHMiKTsKLSAgICAgICAgZ3N0X29iamVjdF91bnJlZih2aWRlb1NpbmspOwotICAgICAg
ICB2aWRlb1NpbmsgPSBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gdmlkZW9TaW5rOwotfQot
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5zdXJlR0xWaWRlb1NpbmtDb250
ZXh0KCkKLXsKLSAgICBpZiAoIW1fZ2xEaXNwbGF5RWxlbWVudENvbnRleHQpCi0gICAgICAgIG1f
Z2xEaXNwbGF5RWxlbWVudENvbnRleHQgPSBhZG9wdEdSZWYocmVxdWVzdEdMQ29udGV4dChHU1Rf
R0xfRElTUExBWV9DT05URVhUX1RZUEUpKTsKLQotICAgIGlmIChtX2dsRGlzcGxheUVsZW1lbnRD
b250ZXh0KQotICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChtX3ZpZGVvU2luay5nZXQo
KSwgbV9nbERpc3BsYXlFbGVtZW50Q29udGV4dC5nZXQoKSk7Ci0KLSAgICBpZiAoIW1fZ2xBcHBF
bGVtZW50Q29udGV4dCkKLSAgICAgICAgbV9nbEFwcEVsZW1lbnRDb250ZXh0ID0gYWRvcHRHUmVm
KHJlcXVlc3RHTENvbnRleHQoImdzdC5nbC5hcHBfY29udGV4dCIpKTsKLQotICAgIGlmIChtX2ds
QXBwRWxlbWVudENvbnRleHQpCi0gICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KG1fdmlk
ZW9TaW5rLmdldCgpLCBtX2dsQXBwRWxlbWVudENvbnRleHQuZ2V0KCkpOworICAgIEdzdEVsZW1l
bnQqIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIndlYmtpdGdsdmlkZW9zaW5rIiwg
bnVsbHB0cik7CisgICAgQVNTRVJUKHNpbmspOworICAgIHdlYktpdEdMVmlkZW9TaW5rU2V0TWVk
aWFQbGF5ZXJQcml2YXRlKFdFQktJVF9HTF9WSURFT19TSU5LKHNpbmspLCB0aGlzKTsKKyAgICBy
ZXR1cm4gc2luazsKIH0KICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggMmFkYjBmZjAyMmRhMzUz
M2RlNmFiOTZjMDY4OGE5M2NkYjAwYWNlMi4uMjc5MGVjM2RiNWRhOTNjZDY4OWUyM2JjMjljMmQ1
M2YxN2E4ZTNiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuaApAQCAtMTYwLDEwICsxNjAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWb2x1bWUoZmxv
YXQpIG92ZXJyaWRlOwogICAgIGZsb2F0IHZvbHVtZSgpIGNvbnN0IG92ZXJyaWRlOwogCi0jaWYg
VVNFKEdTVFJFQU1FUl9HTCkKLSAgICBib29sIGVuc3VyZUdzdEdMQ29udGV4dCgpOwotICAgIEdz
dENvbnRleHQqIHJlcXVlc3RHTENvbnRleHQoY29uc3QgY2hhciogY29udGV4dFR5cGUpOwotI2Vu
ZGlmCiAgICAgdm9pZCBzZXRNdXRlZChib29sKSBvdmVycmlkZTsKICAgICBib29sIG11dGVkKCkg
Y29uc3Q7CiAKQEAgLTI1NSw2ICsyNTEsMTEgQEAgcHVibGljOgogICAgIGJvb2wgaGFuZGxlU3lu
Y01lc3NhZ2UoR3N0TWVzc2FnZSopOwogICAgIHZvaWQgaGFuZGxlTWVzc2FnZShHc3RNZXNzYWdl
Kik7CiAKKyAgICB2b2lkIHRyaWdnZXJSZXBhaW50KEdzdFNhbXBsZSopOworI2lmIFVTRShHU1RS
RUFNRVJfR0wpCisgICAgdm9pZCBmbHVzaEN1cnJlbnRCdWZmZXIoKTsKKyNlbmRpZgorCiBwcm90
ZWN0ZWQ6CiAgICAgZW51bSBNYWluVGhyZWFkTm90aWZpY2F0aW9uIHsKICAgICAgICAgVmlkZW9D
aGFuZ2VkID0gMSA8PCAwLApAQCAtMjg1LDE0ICsyODYsNyBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYK
IAogI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgc3RhdGljIEdzdEZsb3dSZXR1cm4gbmV3U2Ft
cGxlQ2FsbGJhY2soR3N0RWxlbWVudCosIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOwot
ICAgIHN0YXRpYyBHc3RGbG93UmV0dXJuIG5ld1ByZXJvbGxDYWxsYmFjayhHc3RFbGVtZW50Kiwg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7Ci0gICAgdm9pZCBmbHVzaEN1cnJlbnRCdWZm
ZXIoKTsKLSAgICBHc3RFbGVtZW50KiBjcmVhdGVHTEFwcFNpbmsoKTsKICAgICBHc3RFbGVtZW50
KiBjcmVhdGVWaWRlb1NpbmtHTCgpOwotICAgIEdzdEdMQ29udGV4dCogZ3N0R0xDb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9nbENvbnRleHQuZ2V0KCk7IH0KLSAgICBHc3RHTERpc3BsYXkqIGdz
dEdMRGlzcGxheSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xEaXNwbGF5LmdldCgpOyB9Ci0gICAgdm9p
ZCBlbnN1cmVHTFZpZGVvU2lua0NvbnRleHQoKTsKICNlbmRpZgogCiAjaWYgVVNFKFRFWFRVUkVf
TUFQUEVSX0dMKQpAQCAtMzExLDcgKzMwNSw2IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgc2V0
UGlwZWxpbmUoR3N0RWxlbWVudCopOwogCi0gICAgdm9pZCB0cmlnZ2VyUmVwYWludChHc3RTYW1w
bGUqKTsKICAgICB2b2lkIHJlcGFpbnQoKTsKICAgICB2b2lkIGNhbmNlbFJlcGFpbnQoYm9vbCBk
ZXN0cm95aW5nID0gZmFsc2UpOwogCkBAIC00MDQsMTIgKzM5Nyw3IEBAIHByb3RlY3RlZDoKICAg
ICBib29sIG1fZGVzdHJveWluZyB7IGZhbHNlIH07CiAKICNpZiBVU0UoR1NUUkVBTUVSX0dMKQot
ICAgIEdSZWZQdHI8R3N0R0xDb250ZXh0PiBtX2dsQ29udGV4dDsKLSAgICBHUmVmUHRyPEdzdEdM
RGlzcGxheT4gbV9nbERpc3BsYXk7Ci0gICAgR1JlZlB0cjxHc3RDb250ZXh0PiBtX2dsRGlzcGxh
eUVsZW1lbnRDb250ZXh0OwotICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gbV9nbEFwcEVsZW1lbnRD
b250ZXh0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxWaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXI+
IG1fdmlkZW9UZXh0dXJlQ29waWVyOwotCiAgICAgR1JlZlB0cjxHc3RHTENvbG9yQ29udmVydD4g
bV9jb2xvckNvbnZlcnQ7CiAgICAgR1JlZlB0cjxHc3RDYXBzPiBtX2NvbG9yQ29udmVydElucHV0
Q2FwczsKICAgICBHUmVmUHRyPEdzdENhcHM+IG1fY29sb3JDb252ZXJ0T3V0cHV0Q2FwczsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2NDgzODFk
Zjg2NDZmNTcyYWFjMmM5YjFhYjEyYWNhNmZlZDMzZGQxLi5mYmZiODdhMTljYWNlMjUzZGVlOWY4
NDIyYzYxMDhhZWQ1M2YxY2MyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTktMTEtMjYgIFBoaWxpcHBlIE5vcm1h
bmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIE1vdmUgR0wg
dmlkZW8gc2luayB0byBpdHMgb3duIEdzdEJpbiBzdWItY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDYyNAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9j
aGVja2VyLnB5OiBXaGl0ZS1saXN0IHRoZSBuZXcgR0xWaWRlb1NpbmtHU3RyZWFtZXIgR09iamVj
dCBpbXBsZW1lbnRhdGlvbi4KKwogMjAxOS0xMS0yNSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHRrZW50QCBmcm9tIHdhdGNobGlzdApkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CmluZGV4IDQzNGE2MWVjYjFmMDlhNzAzMGMw
ODg1NTcxZDVmMGM5ZjQ1NTU1YmUuLjEzZDFkNDhlMmU2NDU3MjBkMjc5MWY0OTIxZTdjOWZkMTFi
M2VjYTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKQEAgLTIxNyw2
ICsyMTcsOCBAQCBfUEFUSF9SVUxFU19TUEVDSUZJRVIgPSBbCiAgICAgKFsKICAgICAgICMgVGhl
c2UgZmlsZXMgZGVmaW5lIEdPYmplY3RzLCB3aGljaCBpbXBsaWVzIHNvbWUgZGVmaW5pdGlvbnMg
b2YKICAgICAgICMgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgY29udGFpbmluZyB1bmRlcnNjb3Jl
cy4KKyAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAn
Z3JhcGhpY3MnLCAnZ3N0cmVhbWVyJywgJ0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCcpLAorICAg
ICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdncmFwaGlj
cycsICdnc3RyZWFtZXInLCAnR0xWaWRlb1NpbmtHU3RyZWFtZXIuaCcpLAogICAgICAgb3MucGF0
aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdncmFwaGljcycsICdnc3Ry
ZWFtZXInLCAnVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCcpLAogICAgICAgb3MucGF0aC5qb2luKCdT
b3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdncmFwaGljcycsICdnc3RyZWFtZXInLCAn
V2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCcpLAogICAgICAgb3MucGF0aC5qb2luKCdTb3Vy
Y2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdhdWRpbycsICdnc3RyZWFtZXInLCAnV2ViS2l0
V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwJyksCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384364</attachid>
            <date>2019-11-26 10:02:29 -0800</date>
            <delta_ts>2019-11-27 08:30:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204624-20191126180227.patch</filename>
            <type>text/plain</type>
            <size>42422</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyODg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODgzOGQzZTEzODZjYzlm
MmYxOTc4NDhjMTZkYWZkOTJlZTI1NWIxOS4uZjE5NDVjYzI3MjAzNDA2YTJlNTk2OGZjZWU4OGFh
YWFlNWU0NGRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE5LTExLTI2ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBNb3ZlIEdMIHZpZGVvIHNpbmsgdG8gaXRzIG93biBHc3RCaW4gc3ViLWNsYXNzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ2MjQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHJlZHVjZXMgdGhl
IE1lZGlhUGxheWVyUHJpdmF0ZSBjb2RlLWJhc2UgYW5kIGFkZHMgYSBnb29kCisgICAgICAgIHNl
cGFyYXRpb24gb2YgcmVzcG9uc2liaWxpdHkgcmVnYXJkaW5nIEdMIHZpZGVvIHJlbmRlcmluZy4g
VGhlCisgICAgICAgIFRleHR1cmVDb3BpZXIgcmVtYWlucyBpbiB0aGUgcGxheWVyIGJlY2F1c2Ug
aXQncyB0b28gc3BlY2lmaWMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2U6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVh
bWVyLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRfZ2xfdmlkZW9fc2lua19pbml0KToKKyAg
ICAgICAgKHdlYktpdEdMVmlkZW9TaW5rRmluYWxpemUpOgorICAgICAgICAoZW5zdXJlR3N0R0xD
b250ZXh0KToKKyAgICAgICAgKHJlcXVlc3RHTENvbnRleHQpOgorICAgICAgICAod2ViS2l0R0xW
aWRlb1NpbmtDaGFuZ2VTdGF0ZSk6CisgICAgICAgICh3ZWJraXRfZ2xfdmlkZW9fc2lua19jbGFz
c19pbml0KToKKyAgICAgICAgKHdlYktpdEdMVmlkZW9TaW5rU2V0TWVkaWFQbGF5ZXJQcml2YXRl
KToKKyAgICAgICAgKHdlYktpdEdMVmlkZW9TaW5rUHJvYmVQbGF0Zm9ybSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmg6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2Vi
S2l0RWxlbWVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlVmlkZW9TaW5r
R0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaDoKKwogMjAxOS0xMS0yNiAgTWFudWVsIFJlZ28gQ2FzYXNub3ZhcyAg
PHJlZ29AaWdhbGlhLmNvbT4KIAogICAgICAgICBbY3NzLWdyaWRdIEF2b2lkIHNlcmlhbGl6aW5n
IFtdIGluIGdyaWQtdGVtcGxhdGUtKiBzcGVjaWZpZWQgdmFsdWVzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXggMmM5NDFmMGNiNGFlOGFhODYwZDVlNTcxNjViYTJi
NTYzOGIwMjFhOS4uODc0ZDQ5YWYxZTQxOWFjYzg0YTQ2NmQyOGNhMDIzYzZiYzlhZjlmOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtNyw2ICs3LDcgQEAgaWYg
KEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQogCiAgICAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9BdWRpb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dzdEFsbG9jYXRvckZhc3RNYWxsb2MuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9T
aW5rR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MzUxY2I2NzRiYTA0MjI1YjNmMDViNjVkYmRl
ZjJkZTlkYzViMWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDM2
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkdMVmlkZW9TaW5rR1N0cmVhbWVyLmgiCisKKyNpZiBFTkFCTEUoVklE
RU8pICYmIFVTRShHU1RSRUFNRVJfR0wpCisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKyNpbmNs
dWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIuaCIKKworI2lmIFVTRShHTFgpCisjaW5jbHVkZSAiR0xDb250ZXh0R0xYLmgiCisjaW5j
bHVkZSA8Z3N0L2dsL3gxMS9nc3RnbGRpc3BsYXlfeDExLmg+CisjZW5kaWYKKworI2lmIFVTRShF
R0wpCisjaW5jbHVkZSAiR0xDb250ZXh0RUdMLmgiCisjaW5jbHVkZSA8Z3N0L2dsL2VnbC9nc3Rn
bGRpc3BsYXlfZWdsLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFgxMSkKKyNpbmNsdWRlICJQ
bGF0Zm9ybURpc3BsYXlYMTEuaCIKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0FZTEFORCkKKyNp
bmNsdWRlICJQbGF0Zm9ybURpc3BsYXlXYXlsYW5kLmgiCisjZW5kaWYKKworI2lmIFVTRShXUEVf
UkVOREVSRVIpCisjaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5TGliV1BFLmgiCisjZW5kaWYKKwor
Ly8gZ3N0Z2xhcGkuaCBtYXkgaW5jbHVkZSBlZ2xwbGF0Zm9ybS5oIGFuZCBpdCBpbmNsdWRlcyBY
LmgsIHdoaWNoCisvLyBkZWZpbmVzIE5vbmUsIGJyZWFraW5nIE1lZGlhUGxheWVyOjpOb25lIGVu
dW0KKyNpZiBQTEFURk9STShYMTEpICYmIEdTVF9HTF9IQVZFX1BMQVRGT1JNX0VHTAorI3VuZGVm
IE5vbmUKKyNlbmRpZiAvLyBQTEFURk9STShYMTEpICYmIEdTVF9HTF9IQVZFX1BMQVRGT1JNX0VH
TAorCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCitzdHJ1Y3QgX1dlYktpdEdMVmlkZW9TaW5rUHJpdmF0ZSB7CisgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBhcHBTaW5rOworICAgIEdSZWZQdHI8R3N0R0xDb250ZXh0PiBnbENvbnRl
eHQ7CisgICAgR1JlZlB0cjxHc3RHTERpc3BsYXk+IGdsRGlzcGxheTsKKyAgICBHUmVmUHRyPEdz
dENvbnRleHQ+IGdsRGlzcGxheUVsZW1lbnRDb250ZXh0OworICAgIEdSZWZQdHI8R3N0Q29udGV4
dD4gZ2xBcHBFbGVtZW50Q29udGV4dDsKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIq
IG1lZGlhUGxheWVyUHJpdmF0ZTsKK307CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Vi
a2l0X2dsX3ZpZGVvX3NpbmtfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0
X2dsX3ZpZGVvX3NpbmtfZGVidWcKKworI2RlZmluZSBHU1RfR0xfQ0FQU19GT1JNQVQgInsgUkdC
eCwgUkdCQSwgSTQyMCwgWTQ0NCwgWVYxMiwgWTQxQiwgWTQyQiwgTlYxMiwgTlYyMSwgVlVZQSB9
Igorc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtUZW1wbGF0ZSA9IEdTVF9TVEFUSUNf
UEFEX1RFTVBMQVRFKCJzaW5rIiwgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX0FMV0FZUywgR1NUX1NU
QVRJQ19DQVBTX0FOWSk7CisKKyNkZWZpbmUgV0VCS0lUX0dMX1ZJREVPX1NJTktfR0VUX1BSSVZB
VEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9H
TF9WSURFT19TSU5LLCBXZWJLaXRHTFZpZGVvU2lua1ByaXZhdGUpKQorCisjZGVmaW5lIHdlYmtp
dF9nbF92aWRlb19zaW5rX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKKyNkZWZpbmUgV0VCS0lU
X0dMX1ZJREVPX1NJTktfQ0FURUdPUllfSU5JVCBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJr
aXRfZ2xfdmlkZW9fc2lua19kZWJ1ZywgIndlYmtpdGdsdmlkZW9zaW5rIiwgMCwgIkdMIHZpZGVv
IHNpbmsgZWxlbWVudCIpOworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0R0xWaWRlb1Np
bmssIHdlYmtpdF9nbF92aWRlb19zaW5rLCBHU1RfVFlQRV9CSU4sIFdFQktJVF9HTF9WSURFT19T
SU5LX0NBVEVHT1JZX0lOSVQpOworCitzdGF0aWMgdm9pZCB3ZWJraXRfZ2xfdmlkZW9fc2lua19p
bml0KFdlYktpdEdMVmlkZW9TaW5rKiBzaW5rKQoreworICAgIHNpbmstPnByaXYgPSBXRUJLSVRf
R0xfVklERU9fU0lOS19HRVRfUFJJVkFURShzaW5rKTsKKyAgICBuZXcgKHNpbmstPnByaXYpIFdl
YktpdEdMVmlkZW9TaW5rUHJpdmF0ZSgpOworCisgICAgc2luay0+cHJpdi0+YXBwU2luayA9IGdz
dF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc2luayIsICJ3ZWJraXQtZ2wtdmlkZW8tYXBwc2lu
ayIpOworICAgIEFTU0VSVChzaW5rLT5wcml2LT5hcHBTaW5rKTsKKyAgICBnX29iamVjdF9zZXQo
c2luay0+cHJpdi0+YXBwU2luay5nZXQoKSwgImVuYWJsZS1sYXN0LXNhbXBsZSIsIEZBTFNFLCAi
ZW1pdC1zaWduYWxzIiwgVFJVRSwgIm1heC1idWZmZXJzIiwgMSwgbnVsbHB0cik7CisKKyAgICBH
c3RFbGVtZW50KiB1cGxvYWQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImdsdXBsb2FkIiwg
bnVsbHB0cik7CisgICAgR3N0RWxlbWVudCogY29sb3Jjb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCJnbGNvbG9yY29udmVydCIsIG51bGxwdHIpOworICAgIEFTU0VSVCh1cGxvYWQp
OworICAgIEFTU0VSVChjb2xvcmNvbnZlcnQpOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJ
Tl9DQVNUKHNpbmspLCB1cGxvYWQsIGNvbG9yY29udmVydCwgc2luay0+cHJpdi0+YXBwU2luay5n
ZXQoKSwgbnVsbHB0cik7CisKKyAgICAvLyBXb3JrYXJvdW5kIHVudGlsIHdlIGNhbiBkZXBlbmQg
b24gR1N0cmVhbWVyIDEuMTYuMi4KKyAgICAvLyBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5v
cmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhc2UvY29tbWl0LzhkMzJkZTA5MDU1NGNmMjlmZTM1
OWY4M2FhNDYwMDBiYTY1OGE2OTMKKyAgICAvLyBGb3JjaW5nIGEgY29sb3IgY29udmVyc2lvbiB0
byBSR0JBIGhlcmUgYWxsb3dzIGdsdXBsb2FkIHRvIGludGVybmFsbHkgdXNlCisgICAgLy8gYW4g
dXBsb2FkZXIgdGhhdCBhZGRzIGEgVmlkZW9NZXRhLCB0aHJvdWdoIHRoZSBUZXh0dXJlVXBsb2Fk
TWV0YSBjYXBzCisgICAgLy8gZmVhdHVyZSwgd2l0aG91dCBuZWVkaW5nIHRoZSBwYXRjaCBhYm92
ZS4gSG93ZXZlciB0aGlzIHNwZWNpZmljIGNhcHMKKyAgICAvLyBmZWF0dXJlIGlzIGdvaW5nIHRv
IGJlIHJlbW92ZWQgZnJvbSBHU3RyZWFtZXIgc28gaXQgaXMgY29uc2lkZXJlZCBhCisgICAgLy8g
c2hvcnQtdGVybSB3b3JrYXJvdW5kLiBUaGlzIGNvZGUgcGF0aCBtb3N0IGxpa2VseSB3aWxsIGhh
dmUgYSBuZWdhdGl2ZQorICAgIC8vIHBlcmZvcm1hbmNlIGltcGFjdCBvbiBlbWJlZGRlZCBwbGF0
Zm9ybXMgYXMgd2VsbC4gRG93bnN0cmVhbSBlbWJlZGRlcnMKKyAgICAvLyBhcmUgaGlnaGx5IGVu
Y291cmFnZWQgdG8gY2hlcnJ5LXBpY2sgdGhlIHBhdGNoIGxpbmtlZCBhYm92ZSBpbiB0aGVpciBC
U1AKKyAgICAvLyBhbmQgc2V0IHRoZSBXRUJLSVRfR1NUX05PX1JHQkFfQ09OVkVSU0lPTiBlbnZp
cm9ubWVudCB2YXJpYWJsZSB1bnRpbAorICAgIC8vIEdTdHJlYW1lciAxLjE2LjIgaXMgcmVsZWFz
ZWQuCisgICAgLy8gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMTQyMgorICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwczsKKyAgICBpZiAod2Via2l0R3N0
Q2hlY2tWZXJzaW9uKDEsIDE2LCAyKSB8fCBnZXRlbnYoIldFQktJVF9HU1RfTk9fUkdCQV9DT05W
RVJTSU9OIikpCisgICAgICAgIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJpbmco
InZpZGVvL3gtcmF3LCBmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9HTF9DQVBTX0ZPUk1BVCkpOwor
ICAgIGVsc2UgeworICAgICAgICBHU1RfSU5GT19PQkpFQ1Qoc2luaywgIkZvcmNpbmcgUkdCQSBh
cyBHU3RyZWFtZXIgaXMgbm90IG5ldyBlbm91Z2guIik7CisgICAgICAgIGNhcHMgPSBhZG9wdEdS
ZWYoZ3N0X2NhcHNfZnJvbV9zdHJpbmcoInZpZGVvL3gtcmF3LCBmb3JtYXQgPSAoc3RyaW5nKSBS
R0JBIikpOworICAgIH0KKyAgICBnc3RfY2Fwc19zZXRfZmVhdHVyZXMoY2Fwcy5nZXQoKSwgMCwg
Z3N0X2NhcHNfZmVhdHVyZXNfbmV3KEdTVF9DQVBTX0ZFQVRVUkVfTUVNT1JZX0dMX01FTU9SWSwg
bnVsbHB0cikpOworICAgIGdfb2JqZWN0X3NldChzaW5rLT5wcml2LT5hcHBTaW5rLmdldCgpLCAi
Y2FwcyIsIGNhcHMuZ2V0KCksIG51bGxwdHIpOworCisgICAgZ3N0X2VsZW1lbnRfbGlua19tYW55
KHVwbG9hZCwgY29sb3Jjb252ZXJ0LCBzaW5rLT5wcml2LT5hcHBTaW5rLmdldCgpLCBudWxscHRy
KTsKKworICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRpY19wYWQodXBsb2FkLCAic2luayIpKTsKKyAgICBnc3RfZWxlbWVudF9hZGRfcGFkKEdT
VF9FTEVNRU5UX0NBU1Qoc2luayksIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgcGFkLmdldCgp
KSk7Cit9CisKK3ZvaWQgd2ViS2l0R0xWaWRlb1NpbmtGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgV2ViS2l0R0xWaWRl
b1NpbmsqIHNpbmsgPSBXRUJLSVRfR0xfVklERU9fU0lOSyhvYmplY3QpOworICAgIFdlYktpdEdM
VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CisKKyAgICBpZiAocHJpdi0+bWVk
aWFQbGF5ZXJQcml2YXRlKQorICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5
X2RhdGEocHJpdi0+YXBwU2luay5nZXQoKSwgcHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlKTsKKwor
ICAgIC8vIFdlIHVzZWQgYSBwbGFjZW1lbnQgbmV3IGZvciBjb25zdHJ1Y3Rpb24sIHRoZSBkZXN0
cnVjdG9yIHdvbid0IGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5LgorICAgIHByaXYtPn5fV2ViS2l0
R0xWaWRlb1NpbmtQcml2YXRlKCk7CisKKyAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xB
U1MsIGZpbmFsaXplLCAob2JqZWN0KSk7Cit9CisKK3N0YXRpYyBib29sIGVuc3VyZUdzdEdMQ29u
dGV4dChXZWJLaXRHTFZpZGVvU2luayogc2luaykKK3sKKyAgICBXZWJLaXRHTFZpZGVvU2lua1By
aXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworCisgICAgaWYgKHByaXYtPmdsQ29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBhdXRvJiBzaGFyZWREaXNwbGF5ID0gUGxhdGZvcm1E
aXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKTsKKworICAgIC8vIFRoZSBmbG9h
dGluZyByZWYgcmVtb3ZhbCBzdXBwb3J0IHdhcyBhZGRlZCBpbiBodHRwczovL2J1Z3ppbGxhLmdu
b21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQzMDYyLgorICAgIGJvb2wgc2hvdWxkQWRvcHRSZWYg
PSB3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTQsIDApOworICAgIGlmICghcHJpdi0+Z2xEaXNw
bGF5KSB7CisjaWYgUExBVEZPUk0oWDExKQorI2lmIFVTRShHTFgpCisgICAgICAgIGlmIChpczxQ
bGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpKSB7CisgICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHNpbmssICJDcmVhdGluZyBYMTEgc2hhcmVkIEdMIGRpc3BsYXkiKTsKKyAgICAg
ICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAgICAgICAgICBwcml2LT5nbERpc3Bs
YXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRo
X2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRp
dmUoKSkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcml2LT5nbERpc3Bs
YXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShk
b3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLm5hdGl2ZSgpKSk7Cisg
ICAgICAgIH0KKyNlbGlmIFVTRShFR0wpCisgICAgICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlY
MTE+KHNoYXJlZERpc3BsYXkpKSB7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNpbmss
ICJDcmVhdGluZyBYMTEgc2hhcmVkIEVHTCBkaXNwbGF5Iik7CisgICAgICAgICAgICBpZiAoc2hv
dWxkQWRvcHRSZWYpCisgICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gYWRvcHRHUmVm
KEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShk
b3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkp
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBH
U1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93
bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsK
KyAgICAgICAgfQorI2VuZGlmCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdBWUxBTkQpCisgICAg
ICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNwbGF5KSkgeworICAg
ICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzaW5rLCAiQ3JlYXRpbmcgV2F5bGFuZCBzaGFyZWQg
ZGlzcGxheSIpOworICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQorICAgICAgICAgICAg
ICAgIHByaXYtPmdsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlz
cGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5
bGFuZD4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSkpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9k
aXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlX
YXlsYW5kPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKKyAgICAgICAgfQorI2VuZGlm
CisKKyNpZiBVU0UoV1BFX1JFTkRFUkVSKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5
TGliV1BFPihzaGFyZWREaXNwbGF5KSkgeworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChz
aW5rLCAiQ3JlYXRpbmcgV1BFIHNoYXJlZCBFR0wgZGlzcGxheSIpOworICAgICAgICAgICAgaWYg
KHNob3VsZEFkb3B0UmVmKQorICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9IGFkb3B0
R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3Bs
YXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5TGliV1BFPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNw
bGF5KCkpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNw
bGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNw
bGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheUxpYldQRT4oc2hhcmVkRGlzcGxheSkuZWdsRGlz
cGxheSgpKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIEFTU0VSVChwcml2LT5nbERp
c3BsYXkpOworICAgIH0KKworICAgIEdMQ29udGV4dCogd2Via2l0Q29udGV4dCA9IHNoYXJlZERp
c3BsYXkuc2hhcmluZ0dMQ29udGV4dCgpOworICAgIC8vIEVHTCBhbmQgR0xYIGFyZSBtdXR1YWxs
eSBleGNsdXNpdmUsIG5vIG5lZWQgZm9yIGlmZGVmcyBoZXJlLgorICAgIEdzdEdMUGxhdGZvcm0g
Z2xQbGF0Zm9ybSA9IHdlYmtpdENvbnRleHQtPmlzRUdMQ29udGV4dCgpID8gR1NUX0dMX1BMQVRG
T1JNX0VHTCA6IEdTVF9HTF9QTEFURk9STV9HTFg7CisKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAg
IEdzdEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQSV9HTEVTMjsKKyNlbGlmIFVTRShPUEVOR0wpCisg
ICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1RfR0xfQVBJX09QRU5HTDsKKyNlbHNlCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
Y29udGV4dEhhbmRsZSA9IHdlYmtpdENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGlm
ICghY29udGV4dEhhbmRsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNob3Vs
ZEFkb3B0UmVmKQorICAgICAgICBwcml2LT5nbENvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2dsX2Nv
bnRleHRfbmV3X3dyYXBwZWQocHJpdi0+Z2xEaXNwbGF5LmdldCgpLCByZWludGVycHJldF9jYXN0
PGd1aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQbGF0Zm9ybSwgZ2xBUEkpKTsKKyAgICBlbHNl
CisgICAgICAgIHByaXYtPmdsQ29udGV4dCA9IGdzdF9nbF9jb250ZXh0X25ld193cmFwcGVkKHBy
aXYtPmdsRGlzcGxheS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29udGV4dEhh
bmRsZSksIGdsUGxhdGZvcm0sIGdsQVBJKTsKKworICAgIC8vIEFjdGl2YXRlIGFuZCBmaWxsIHRo
ZSBHU3RyZWFtZXIgd3JhcHBlZCBjb250ZXh0IHdpdGggdGhlIFdlYmtpdCdzIHNoYXJlZCBvbmUu
CisgICAgYXV0byBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsK
KyAgICB3ZWJraXRDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoZ3N0X2ds
X2NvbnRleHRfYWN0aXZhdGUocHJpdi0+Z2xDb250ZXh0LmdldCgpLCBUUlVFKSkgeworICAgICAg
ICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIGlmICghZ3N0X2dsX2NvbnRl
eHRfZmlsbF9pbmZvKHByaXYtPmdsQ29udGV4dC5nZXQoKSwgJmVycm9yLm91dFB0cigpKSkKKyAg
ICAgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gZmlsbCBpbiBHU3RyZWFtZXIgY29udGV4
dDogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgIGdzdF9nbF9jb250ZXh0X2FjdGl2YXRl
KHByaXYtPmdsQ29udGV4dC5nZXQoKSwgRkFMU0UpOworICAgIH0gZWxzZQorICAgICAgICBHU1Rf
V0FSTklORygiRmFpbGVkIHRvIGFjdGl2YXRlIEdTdHJlYW1lciBjb250ZXh0ICUiIEdTVF9QVFJf
Rk9STUFULCBwcml2LT5nbENvbnRleHQuZ2V0KCkpOworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNv
bnRleHQpCisgICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIEdzdENvbnRleHQqIHJlcXVlc3RH
TENvbnRleHQoV2ViS2l0R0xWaWRlb1NpbmsqIHNpbmssIGNvbnN0IGNoYXIqIGNvbnRleHRUeXBl
KQoreworICAgIFdlYktpdEdMVmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7Cisg
ICAgaWYgKCFlbnN1cmVHc3RHTENvbnRleHQoc2luaykpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgaWYgKCFnX3N0cmNtcDAoY29udGV4dFR5cGUsIEdTVF9HTF9ESVNQTEFZX0NPTlRF
WFRfVFlQRSkpIHsKKyAgICAgICAgR3N0Q29udGV4dCogZGlzcGxheUNvbnRleHQgPSBnc3RfY29u
dGV4dF9uZXcoR1NUX0dMX0RJU1BMQVlfQ09OVEVYVF9UWVBFLCBUUlVFKTsKKyAgICAgICAgZ3N0
X2NvbnRleHRfc2V0X2dsX2Rpc3BsYXkoZGlzcGxheUNvbnRleHQsIHByaXYtPmdsRGlzcGxheS5n
ZXQoKSk7CisgICAgICAgIHJldHVybiBkaXNwbGF5Q29udGV4dDsKKyAgICB9CisKKyAgICBpZiAo
IWdfc3RyY21wMChjb250ZXh0VHlwZSwgImdzdC5nbC5hcHBfY29udGV4dCIpKSB7CisgICAgICAg
IEdzdENvbnRleHQqIGFwcENvbnRleHQgPSBnc3RfY29udGV4dF9uZXcoImdzdC5nbC5hcHBfY29u
dGV4dCIsIFRSVUUpOworICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9jb250
ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShhcHBDb250ZXh0KTsKKyNpZiBHU1RfQ0hFQ0tfVkVSU0lP
TigxLCAxMiwgMCkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJlLCAiY29udGV4
dCIsIEdTVF9UWVBFX0dMX0NPTlRFWFQsIHByaXYtPmdsQ29udGV4dC5nZXQoKSwgbnVsbHB0cik7
CisjZWxzZQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChzdHJ1Y3R1cmUsICJjb250ZXh0Iiwg
R1NUX0dMX1RZUEVfQ09OVEVYVCwgcHJpdi0+Z2xDb250ZXh0LmdldCgpLCBudWxscHRyKTsKKyNl
bmRpZgorICAgICAgICByZXR1cm4gYXBwQ29udGV4dDsKKyAgICB9CisKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdEdMVmlkZW9TaW5r
Q2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlv
bikKK3sKKyAgICBXZWJLaXRHTFZpZGVvU2luayogc2luayA9IFdFQktJVF9HTF9WSURFT19TSU5L
KGVsZW1lbnQpOworICAgIFdlYktpdEdMVmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnBy
aXY7CisKKyNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNCwgMCkKKyAgICBHU1RfREVCVUdfT0JK
RUNUKGVsZW1lbnQsICIlcyIsIGdzdF9zdGF0ZV9jaGFuZ2VfZ2V0X25hbWUodHJhbnNpdGlvbikp
OworI2VuZGlmCisKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEdTVF9TVEFU
RV9DSEFOR0VfTlVMTF9UT19SRUFEWToKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlf
VE9fUkVBRFk6CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDogewor
ICAgICAgICBpZiAoIXByaXYtPmdsRGlzcGxheUVsZW1lbnRDb250ZXh0KQorICAgICAgICAgICAg
cHJpdi0+Z2xEaXNwbGF5RWxlbWVudENvbnRleHQgPSBhZG9wdEdSZWYocmVxdWVzdEdMQ29udGV4
dChzaW5rLCBHU1RfR0xfRElTUExBWV9DT05URVhUX1RZUEUpKTsKKworICAgICAgICBpZiAocHJp
di0+Z2xEaXNwbGF5RWxlbWVudENvbnRleHQpCisgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRf
Y29udGV4dChHU1RfRUxFTUVOVF9DQVNUKHNpbmspLCBwcml2LT5nbERpc3BsYXlFbGVtZW50Q29u
dGV4dC5nZXQoKSk7CisKKyAgICAgICAgaWYgKCFwcml2LT5nbEFwcEVsZW1lbnRDb250ZXh0KQor
ICAgICAgICAgICAgcHJpdi0+Z2xBcHBFbGVtZW50Q29udGV4dCA9IGFkb3B0R1JlZihyZXF1ZXN0
R0xDb250ZXh0KHNpbmssICJnc3QuZ2wuYXBwX2NvbnRleHQiKSk7CisKKyAgICAgICAgaWYgKHBy
aXYtPmdsQXBwRWxlbWVudENvbnRleHQpCisgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29u
dGV4dChHU1RfRUxFTUVOVF9DQVNUKHNpbmspLCBwcml2LT5nbEFwcEVsZW1lbnRDb250ZXh0Lmdl
dCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIHJldHVybiBHU1RfRUxFTUVOVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5j
aGFuZ2Vfc3RhdGUoZWxlbWVudCwgdHJhbnNpdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9nbF92aWRlb19zaW5rX2NsYXNzX2luaXQoV2ViS2l0R0xWaWRlb1NpbmtDbGFzcyoga2xhc3Mp
Cit7CisgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNz
KTsKKyAgICBHc3RFbGVtZW50Q2xhc3MqIGVsZW1lbnRDbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNT
KGtsYXNzKTsKKworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYktpdEdMVmlkZW9TaW5r
RmluYWxpemU7CisKKyAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVsZW1l
bnRDbGFzcywgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZzaW5rVGVtcGxhdGUpKTsKKwor
ICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEoZWxlbWVudENsYXNzLCAi
V2ViS2l0IEdMIHZpZGVvIHNpbmsiLCAiU2luay9WaWRlbyIsICJSZW5kZXJzIHZpZGVvIiwgIlBo
aWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+Iik7CisKKyAgICBlbGVtZW50Q2xhc3Mt
PmNoYW5nZV9zdGF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdEdMVmlkZW9TaW5rQ2hhbmdl
U3RhdGUpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktp
dEdMVmlkZW9TaW5rUHJpdmF0ZSkpOworfQorCit2b2lkIHdlYktpdEdMVmlkZW9TaW5rU2V0TWVk
aWFQbGF5ZXJQcml2YXRlKFdlYktpdEdMVmlkZW9TaW5rKiBzaW5rLCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIqIHBsYXllcikKK3sKKyAgICBXZWJLaXRHTFZpZGVvU2lua1ByaXZhdGUqIHBy
aXYgPSBzaW5rLT5wcml2OworCisgICAgcHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlID0gcGxheWVy
OworICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+YXBwU2luay5nZXQoKSwgIm5ldy1zYW1wbGUi
LCBHX0NBTExCQUNLKCtbXShHc3RFbGVtZW50KiBzaW5rLCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIqIHBsYXllcikgLT4gR3N0Rmxvd1JldHVybiB7CisgICAgICAgIEdSZWZQdHI8R3N0U2Ft
cGxlPiBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxlKEdTVF9BUFBf
U0lOSyhzaW5rKSkpOworICAgICAgICBwbGF5ZXItPnRyaWdnZXJSZXBhaW50KHNhbXBsZS5nZXQo
KSk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKKyAgICB9KSwgcGxheWVyKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0KHByaXYtPmFwcFNpbmsuZ2V0KCksICJuZXctcHJlcm9sbCIsIEdfQ0FM
TEJBQ0soK1tdKEdzdEVsZW1lbnQqIHNpbmssIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciog
cGxheWVyKSAtPiBHc3RGbG93UmV0dXJuIHsKKyAgICAgICAgR1JlZlB0cjxHc3RTYW1wbGU+IHNh
bXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3NpbmtfcHVsbF9wcmVyb2xsKEdTVF9BUFBfU0lOSyhz
aW5rKSkpOworICAgICAgICBwbGF5ZXItPnRyaWdnZXJSZXBhaW50KHNhbXBsZS5nZXQoKSk7Cisg
ICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKKyAgICB9KSwgcGxheWVyKTsKKworICAgIEdSZWZQ
dHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocHJp
di0+YXBwU2luay5nZXQoKSwgInNpbmsiKSk7CisgICAgZ3N0X3BhZF9hZGRfcHJvYmUocGFkLmdl
dCgpLCBzdGF0aWNfY2FzdDxHc3RQYWRQcm9iZVR5cGU+KEdTVF9QQURfUFJPQkVfVFlQRV9QVVNI
IHwgR1NUX1BBRF9QUk9CRV9UWVBFX1FVRVJZX0RPV05TVFJFQU0gfCBHU1RfUEFEX1BST0JFX1RZ
UEVfRVZFTlRfRkxVU0gpLCBbXSAoR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiBpbmZvLCAgZ3Bv
aW50ZXIgdXNlckRhdGEpIC0+IEdzdFBhZFByb2JlUmV0dXJuIHsKKyAgICAgICAgLy8gSW4gc29t
ZSBwbGF0Zm9ybXMgKGUuZy4gT3Blbk1BWCBvbiB0aGUgUmFzcGJlcnJ5IFBpKSB3aGVuIGEgcmVz
b2x1dGlvbiBjaGFuZ2Ugb2NjdXJzIHRoZQorICAgICAgICAvLyBwaXBlbGluZSBoYXMgdG8gYmUg
ZHJhaW5lZCBiZWZvcmUgYSBmcmFtZSB3aXRoIHRoZSBuZXcgcmVzb2x1dGlvbiBjYW4gYmUgZGVj
b2RlZC4KKyAgICAgICAgLy8gSW4gdGhpcyBjb250ZXh0LCBpdCdzIGltcG9ydGFudCB0aGF0IHdl
IGRvbid0IGhvbGQgcmVmZXJlbmNlcyB0byBhbnkgcHJldmlvdXMgZnJhbWUKKyAgICAgICAgLy8g
KGUuZy4gbV9zYW1wbGUpIHNvIHRoYXQgZGVjb2RpbmcgY2FuIGNvbnRpbnVlLgorICAgICAgICAv
LyBXZSBhcmUgYWxzbyBub3Qgc3VwcG9zZWQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgZnJhbWUgYWZ0
ZXIgYSBmbHVzaC4KKyAgICAgICAgaWYgKGluZm8tPnR5cGUgJiBHU1RfUEFEX1BST0JFX1RZUEVf
UVVFUllfRE9XTlNUUkVBTSkgeworICAgICAgICAgICAgaWYgKEdTVF9RVUVSWV9UWVBFKEdTVF9Q
QURfUFJPQkVfSU5GT19RVUVSWShpbmZvKSkgIT0gR1NUX1FVRVJZX0RSQUlOKQorICAgICAgICAg
ICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09LOworICAgICAgICAgICAgR1NUX0RFQlVHKCJB
Y3RpbmcgdXBvbiBEUkFJTiBxdWVyeSIpOworICAgICAgICB9CisgICAgICAgIGlmIChpbmZvLT50
eXBlICYgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0ZMVVNIKSB7CisgICAgICAgICAgICBpZiAo
R1NUX0VWRU5UX1RZUEUoR1NUX1BBRF9QUk9CRV9JTkZPX0VWRU5UKGluZm8pKSAhPSBHU1RfRVZF
TlRfRkxVU0hfU1RBUlQpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7
CisgICAgICAgICAgICBHU1RfREVCVUcoIkFjdGluZyB1cG9uIGZsdXNoLXN0YXJ0IGV2ZW50Iik7
CisgICAgICAgIH0KKworICAgICAgICBhdXRvKiBwbGF5ZXIgPSBzdGF0aWNfY2FzdDxNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIqPih1c2VyRGF0YSk7CisgICAgICAgIHBsYXllci0+Zmx1c2hD
dXJyZW50QnVmZmVyKCk7CisgICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09LOworICAgIH0s
IHBsYXllciwgbnVsbHB0cik7Cit9CisKK2Jvb2wgd2ViS2l0R0xWaWRlb1NpbmtQcm9iZVBsYXRm
b3JtKCkKK3sKKyAgICBhdXRvIHNpbmsgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJhcHBzaW5rIiwgbnVsbHB0cikpOworICAgIGlmICghc2luaykgeworICAgICAgICBHU1Rf
V0FSTklORygiYXBwc2luayBlbGVtZW50IHVuYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgeW91ciBn
c3QtcGx1Z2lucy1iYXNlIGluc3RhbGxhdGlvbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgYXV0byBjb2xvcmNvbnZlcnQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCJnbGNvbG9yY29udmVydCIsIG51bGxwdHIpKTsKKyAgICBhdXRvIHVwbG9hZCA9
IGFkb3B0R1JlZihnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImdsdXBsb2FkIiwgbnVsbHB0cikp
OworICAgIGlmICghY29sb3Jjb252ZXJ0IHx8ICF1cGxvYWQpIHsKKyAgICAgICAgR1NUX1dBUk5J
TkcoIkdzdEdMIGVsZW1lbnRzIHVuYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgeW91ciBHU3RyZWFt
ZXIgaW5zdGFsbGF0aW9uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQ1NmJjY2FjYjNmOGRlODc2MDdjNjQ1N2YyYjFhNDM3MDM5N2EwZDEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogIENvcHly
aWdodCAoQykgMjAxOSBJZ2FsaWEsIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVJfR0wp
CisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjsKK30KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFdFQktJVF9UWVBFX0dMX1ZJREVPX1NJTksgICAgICAgICAgICAod2Via2l0X2dsX3ZpZGVvX3Np
bmtfZ2V0X3R5cGUgKCkpCisjZGVmaW5lIFdFQktJVF9HTF9WSURFT19TSU5LKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBXRUJLSVRfVFlQRV9HTF9W
SURFT19TSU5LLCBXZWJLaXRHTFZpZGVvU2luaykpCisjZGVmaW5lIFdFQktJVF9HTF9WSURFT19T
SU5LX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdF
QktJVF9UWVBFX0dMX1ZJREVPX1NJTkssIFdlYktpdEdMVmlkZW9TaW5rQ2xhc3MpKQorI2RlZmlu
ZSBXRUJLSVRfSVNfR0xfVklERU9fU0lOSyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfR0xfVklERU9fU0lOSykpCisjZGVmaW5lIFdF
QktJVF9JU19HTF9WSURFT19TSU5LX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUgKChrbGFzcyksIFdFQktJVF9UWVBFX0dMX1ZJREVPX1NJTkspKQorCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0R0xWaWRlb1NpbmsgICAgICAgIFdlYktpdEdMVmlkZW9TaW5rOwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdEdMVmlkZW9TaW5rQ2xhc3MgICBXZWJLaXRHTFZpZGVvU2lua0NsYXNzOwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEdMVmlkZW9TaW5rUHJpdmF0ZSBXZWJLaXRHTFZpZGVvU2lu
a1ByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0R0xWaWRlb1NpbmsgeworICAgIEdzdEJpbiBwYXJl
bnQ7CisKKyAgICBXZWJLaXRHTFZpZGVvU2lua1ByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdEdMVmlkZW9TaW5rQ2xhc3MgeworICAgIEdzdEJpbkNsYXNzIHBhcmVudENsYXNzOwor
fTsKKworR1R5cGUgd2Via2l0X2dsX3ZpZGVvX3NpbmtfZ2V0X3R5cGUodm9pZCk7CisKK2Jvb2wg
d2ViS2l0R0xWaWRlb1NpbmtQcm9iZVBsYXRmb3JtKCk7Cit2b2lkIHdlYktpdEdMVmlkZW9TaW5r
U2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdlYktpdEdMVmlkZW9TaW5rKiwgV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBFTkFC
TEUoVklERU8pICYmIFVTRShHU1RSRUFNRVJfR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3Bw
CmluZGV4IDIwOTE3NzYwM2E5ODc0NWI1ZWQ5ZWIyODJlOGMxMTRhMjAxOTNiMTQuLjllOTZhZjIy
ZGI4ZWMzZTA4OTVhY2E3ZGU1OTcwZmQwYWJlODJlYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21t
b24uY3BwCkBAIC01Myw2ICs1MywxMCBAQAogCiAjaWYgRU5BQkxFKFZJREVPKQogI2luY2x1ZGUg
IldlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyNp
bmNsdWRlICJHTFZpZGVvU2lua0dTdHJlYW1lci5oIgorI2VuZGlmCiAjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMjk2LDYgKzMwMCw5IEBAIGJvb2wgaW5pdGlhbGl6ZUdTdHJlYW1l
ckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKQogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgICAg
ICBnc3RfZWxlbWVudF9yZWdpc3RlcigwLCAid2Via2l0d2Vic3JjIiwgR1NUX1JBTktfUFJJTUFS
WSArIDEwMCwgV0VCS0lUX1RZUEVfV0VCX1NSQyk7CisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAg
ICAgICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIoMCwgIndlYmtpdGdsdmlkZW9zaW5rIiwgR1NUX1JB
TktfUFJJTUFSWSwgV0VCS0lUX1RZUEVfR0xfVklERU9fU0lOSyk7CisjZW5kaWYKICNlbmRpZgog
ICAgIH0pOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCBlMjI0OWNkYzk2NzRjNzUxMmUyZWM3YjEyZmIxNmI5
YjQyYmY5NzdiLi41NzllZDk5ZjE3MzNkMmQ4MWQ3MDM3YzMwOTUwNWFkZTFmZDU3MjIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMTIz
LDQwICsxMjMsMTAgQEAKICNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCiAKICNpZiBVU0Uo
R1NUUkVBTUVSX0dMKQotI2RlZmluZSBURVhUVVJFX0NPUElFUl9DT0xPUl9DT05WRVJUX0ZMQUcg
VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyOjpDb2xvckNvbnZlcnNpb246Ok5vQ29udmVydAot
I2RlZmluZSBHU1RfR0xfQ0FQU19GT1JNQVQgInsgUkdCeCwgUkdCQSwgSTQyMCwgWTQ0NCwgWVYx
MiwgWTQxQiwgWTQyQiwgTlYxMiwgTlYyMSwgVlVZQSB9IgotCi0jaW5jbHVkZSA8Z3N0L2FwcC9n
c3RhcHBzaW5rLmg+Ci0KLSNpbmNsdWRlICJHTENvbnRleHQuaCIKLSNpZiBVU0UoR0xYKQotI2lu
Y2x1ZGUgIkdMQ29udGV4dEdMWC5oIgotI2luY2x1ZGUgPGdzdC9nbC94MTEvZ3N0Z2xkaXNwbGF5
X3gxMS5oPgotI2VuZGlmCi0KLSNpZiBVU0UoRUdMKQotI2luY2x1ZGUgIkdMQ29udGV4dEVHTC5o
IgotI2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0Z2xkaXNwbGF5X2VnbC5oPgotI2VuZGlmCi0KLSNp
ZiBQTEFURk9STShYMTEpCi0jaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5WDExLmgiCi0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKFdBWUxBTkQpCi0jaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5V2F5bGFu
ZC5oIgotI2VuZGlmCi0KLSNpZiBVU0UoV1BFX1JFTkRFUkVSKQotI2luY2x1ZGUgIlBsYXRmb3Jt
RGlzcGxheUxpYldQRS5oIgotI2VuZGlmCi0KLS8vIGdzdGdsYXBpLmggbWF5IGluY2x1ZGUgZWds
cGxhdGZvcm0uaCBhbmQgaXQgaW5jbHVkZXMgWC5oLCB3aGljaAotLy8gZGVmaW5lcyBOb25lLCBi
cmVha2luZyBNZWRpYVBsYXllcjo6Tm9uZSBlbnVtCi0jaWYgUExBVEZPUk0oWDExKSAmJiBHU1Rf
R0xfSEFWRV9QTEFURk9STV9FR0wKLSN1bmRlZiBOb25lCi0jZW5kaWYgLy8gUExBVEZPUk0oWDEx
KSAmJiBHU1RfR0xfSEFWRV9QTEFURk9STV9FR0wKKyNpbmNsdWRlICJHTFZpZGVvU2lua0dTdHJl
YW1lci5oIgogI2luY2x1ZGUgIlZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lci5oIgorCisjZGVm
aW5lIFRFWFRVUkVfQ09QSUVSX0NPTE9SX0NPTlZFUlRfRkxBRyBWaWRlb1RleHR1cmVDb3BpZXJH
U3RyZWFtZXI6OkNvbG9yQ29udmVyc2lvbjo6Tm9Db252ZXJ0CiAjZW5kaWYgLy8gVVNFKEdTVFJF
QU1FUl9HTCkKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKQEAgLTQ1OSwxNSArNDI5LDgg
QEAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyKCkKIAogICAgIG1fbm90aWZpZXItPmludmFsaWRhdGUoKTsKIAotICAgIGlmIChtX3ZpZGVv
U2luaykgeworICAgIGlmIChtX3ZpZGVvU2luaykKICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9tYXRjaGVkKG1fdmlkZW9TaW5rLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRB
LCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQot
ICAgICAgICBpZiAoR1NUX0lTX0JJTihtX3ZpZGVvU2luay5nZXQoKSkpIHsKLSAgICAgICAgICAg
IEdSZWZQdHI8R3N0RWxlbWVudD4gYXBwc2luayA9IGFkb3B0R1JlZihnc3RfYmluX2dldF9ieV9u
YW1lKEdTVF9CSU5fQ0FTVChtX3ZpZGVvU2luay5nZXQoKSksICJ3ZWJraXQtZ2wtdmlkZW8tc2lu
ayIpKTsKLSAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShh
cHBzaW5rLmdldCgpLCB0aGlzKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQogCiAgICAgaWYg
KG1fdm9sdW1lRWxlbWVudCkKICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9t
YXRjaGVkKG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwg
bnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7CkBAIC01NzQsOSArNTM3LDYgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlJiBzdHJlYW0pCiAg
ICAgbG9hZEZ1bGwoU3RyaW5nKCJtZWRpYXN0cmVhbTovLyIpICsgc3RyZWFtLmlkKCksIHBpcGVs
aW5lTmFtZSk7CiAgICAgc3luY09uQ2xvY2soZmFsc2UpOwogCi0jaWYgVVNFKEdTVFJFQU1FUl9H
TCkKLSAgICBlbnN1cmVHTFZpZGVvU2lua0NvbnRleHQoKTsKLSNlbmRpZgogICAgIG1fcGxheWVy
LT5wbGF5KCk7CiB9CiAjZW5kaWYKQEAgLTExODIsMTEgKzExNDIsNiBAQCBib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVTdGF0ZShHc3RTdGF0ZSBuZXdTdGF0
ZSkKICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDaGFuZ2luZyBzdGF0ZSBjaGFu
Z2UgdG8gJXMgZnJvbSAlcyB3aXRoICVzIHBlbmRpbmciLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRf
bmFtZShuZXdTdGF0ZSksCiAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKGN1cnJl
bnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKIAotI2lmIFVT
RShHU1RSRUFNRVJfR0wpCi0gICAgaWYgKGN1cnJlbnRTdGF0ZSA8PSBHU1RfU1RBVEVfUkVBRFkg
JiYgbmV3U3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkKLSAgICAgICAgZW5zdXJlR0xWaWRlb1Np
bmtDb250ZXh0KCk7Ci0jZW5kaWYKLQogICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHNldFN0YXRl
UmVzdWx0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIG5ld1N0YXRl
KTsKICAgICBHc3RTdGF0ZSBwYXVzZWRPclBsYXlpbmcgPSBuZXdTdGF0ZSA9PSBHU1RfU1RBVEVf
UExBWUlORyA/IEdTVF9TVEFURV9QQVVTRUQgOiBHU1RfU1RBVEVfUExBWUlORzsKICAgICBpZiAo
Y3VycmVudFN0YXRlICE9IHBhdXNlZE9yUGxheWluZyAmJiBzZXRTdGF0ZVJlc3VsdCA9PSBHU1Rf
U1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCkBAIC0xNzc4LDE0ICsxNzMzLDYgQEAgYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3Nh
Z2UpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotI2lmIFVTRShHU1RSRUFNRVJfR0wp
Ci0gICAgR1JlZlB0cjxHc3RDb250ZXh0PiBlbGVtZW50Q29udGV4dCA9IGFkb3B0R1JlZihyZXF1
ZXN0R0xDb250ZXh0KGNvbnRleHRUeXBlKSk7Ci0gICAgaWYgKGVsZW1lbnRDb250ZXh0KSB7Ci0g
ICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1lc3NhZ2UtPnNyYyks
IGVsZW1lbnRDb250ZXh0LmdldCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotI2Vu
ZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCi0KICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQog
ICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRUeXBlLCAiZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9u
LXN5c3RlbS1pZCIpKSB7CiAgICAgICAgIGlmIChpc01haW5UaHJlYWQoKSkgewpAQCAtMTgyOSwx
MjUgKzE3NzYsMTAgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5
bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi1Hc3RDb250ZXh0KiBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnJlcXVlc3RHTENvbnRleHQoY29uc3QgY2hhciogY29udGV4dFR5cGUpCi17
Ci0gICAgaWYgKCFlbnN1cmVHc3RHTENvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgR1NUX0dMX0RJU1BMQVlfQ09OVEVY
VF9UWVBFKSkgewotICAgICAgICBHc3RDb250ZXh0KiBkaXNwbGF5Q29udGV4dCA9IGdzdF9jb250
ZXh0X25ldyhHU1RfR0xfRElTUExBWV9DT05URVhUX1RZUEUsIFRSVUUpOwotICAgICAgICBnc3Rf
Y29udGV4dF9zZXRfZ2xfZGlzcGxheShkaXNwbGF5Q29udGV4dCwgZ3N0R0xEaXNwbGF5KCkpOwot
ICAgICAgICByZXR1cm4gZGlzcGxheUNvbnRleHQ7Ci0gICAgfQotCi0gICAgaWYgKCFnX3N0cmNt
cDAoY29udGV4dFR5cGUsICJnc3QuZ2wuYXBwX2NvbnRleHQiKSkgewotICAgICAgICBHc3RDb250
ZXh0KiBhcHBDb250ZXh0ID0gZ3N0X2NvbnRleHRfbmV3KCJnc3QuZ2wuYXBwX2NvbnRleHQiLCBU
UlVFKTsKLSAgICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93cml0
YWJsZV9zdHJ1Y3R1cmUoYXBwQ29udGV4dCk7Ci0jaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTIs
IDApCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQiLCBHU1Rf
VFlQRV9HTF9DT05URVhULCBnc3RHTENvbnRleHQoKSwgbnVsbHB0cik7Ci0jZWxzZQotICAgICAg
ICBnc3Rfc3RydWN0dXJlX3NldChzdHJ1Y3R1cmUsICJjb250ZXh0IiwgR1NUX0dMX1RZUEVfQ09O
VEVYVCwgZ3N0R0xDb250ZXh0KCksIG51bGxwdHIpOwotI2VuZGlmCi0gICAgICAgIHJldHVybiBh
cHBDb250ZXh0OwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5zdXJlR3N0R0xDb250ZXh0KCkKLXsKLSAgICBpZiAo
bV9nbENvbnRleHQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byYgc2hhcmVkRGlz
cGxheSA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCk7Ci0K
LSAgICAvLyBUaGUgZmxvYXRpbmcgcmVmIHJlbW92YWwgc3VwcG9ydCB3YXMgYWRkZWQgaW4gaHR0
cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzA2Mi4KLSAgICBib29s
IHNob3VsZEFkb3B0UmVmID0gd2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE0LCAwKTsKLSAgICBp
ZiAoIW1fZ2xEaXNwbGF5KSB7Ci0jaWYgUExBVEZPUk0oWDExKQotI2lmIFVTRShHTFgpCi0gICAg
ICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpKSB7Ci0gICAgICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGluZyBYMTEgc2hhcmVkIEdM
IGRpc3BsYXkiKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKLSAgICAgICAgICAg
ICAgICBtX2dsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxh
eV94MTFfbmV3X3dpdGhfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJl
ZERpc3BsYXkpLm5hdGl2ZSgpKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1fZ2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRo
X2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRp
dmUoKSkpOwotICAgICAgICB9Ci0jZWxpZiBVU0UoRUdMKQotICAgICAgICBpZiAoaXM8UGxhdGZv
cm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiQ3JlYXRpbmcgWDExIHNoYXJlZCBFR0wgZGlzcGxheSIpOwotICAg
ICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQotICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5
ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9l
Z2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVn
bERpc3BsYXkoKSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2dsRGlz
cGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlz
cGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVnbERpc3Bs
YXkoKSkpOwotICAgICAgICB9Ci0jZW5kaWYKLSNlbmRpZgogCi0jaWYgUExBVEZPUk0oV0FZTEFO
RCkKLSAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkp
KSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGluZyBX
YXlsYW5kIHNoYXJlZCBkaXNwbGF5Iik7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYp
Ci0gICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVko
Z3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3Jt
RGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdz
dF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURp
c3BsYXlXYXlsYW5kPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKLSAgICAgICAgfQot
I2VuZGlmCi0KLSNpZiBVU0UoV1BFX1JFTkRFUkVSKQotICAgICAgICBpZiAoaXM8UGxhdGZvcm1E
aXNwbGF5TGliV1BFPihzaGFyZWREaXNwbGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiQ3JlYXRpbmcgV1BFIHNoYXJlZCBFR0wgZGlzcGxheSIpOwotICAg
ICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQotICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5
ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9l
Z2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkp
LmVnbERpc3BsYXkoKSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2ds
RGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xf
ZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpLmVn
bERpc3BsYXkoKSkpOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBBU1NFUlQobV9nbERp
c3BsYXkpOwotICAgIH0KLQotICAgIEdMQ29udGV4dCogd2Via2l0Q29udGV4dCA9IHNoYXJlZERp
c3BsYXkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIC8vIEVHTCBhbmQgR0xYIGFyZSBtdXR1YWxs
eSBleGNsdXNpdmUsIG5vIG5lZWQgZm9yIGlmZGVmcyBoZXJlLgotICAgIEdzdEdMUGxhdGZvcm0g
Z2xQbGF0Zm9ybSA9IHdlYmtpdENvbnRleHQtPmlzRUdMQ29udGV4dCgpID8gR1NUX0dMX1BMQVRG
T1JNX0VHTCA6IEdTVF9HTF9QTEFURk9STV9HTFg7Ci0KLSNpZiBVU0UoT1BFTkdMX0VTKQotICAg
IEdzdEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQSV9HTEVTMjsKLSNlbGlmIFVTRShPUEVOR0wpCi0g
ICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1RfR0xfQVBJX09QRU5HTDsKLSNlbHNlCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
Y29udGV4dEhhbmRsZSA9IHdlYmtpdENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGlm
ICghY29udGV4dEhhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHNob3Vs
ZEFkb3B0UmVmKQotICAgICAgICBtX2dsQ29udGV4dCA9IGFkb3B0R1JlZihnc3RfZ2xfY29udGV4
dF9uZXdfd3JhcHBlZChtX2dsRGlzcGxheS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0
cj4oY29udGV4dEhhbmRsZSksIGdsUGxhdGZvcm0sIGdsQVBJKSk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2dsQ29udGV4dCA9IGdzdF9nbF9jb250ZXh0X25ld193cmFwcGVkKG1fZ2xEaXNwbGF5Lmdl
dCgpLCByZWludGVycHJldF9jYXN0PGd1aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQbGF0Zm9y
bSwgZ2xBUEkpOwotCi0gICAgLy8gQWN0aXZhdGUgYW5kIGZpbGwgdGhlIEdTdHJlYW1lciB3cmFw
cGVkIGNvbnRleHQgd2l0aCB0aGUgV2Via2l0J3Mgc2hhcmVkIG9uZS4KLSAgICBhdXRvIHByZXZp
b3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwotICAgIHdlYmtpdENvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChnc3RfZ2xfY29udGV4dF9hY3RpdmF0
ZShtX2dsQ29udGV4dC5nZXQoKSwgVFJVRSkpIHsKLSAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJy
b3I+IGVycm9yOwotICAgICAgICBpZiAoIWdzdF9nbF9jb250ZXh0X2ZpbGxfaW5mbyhtX2dsQ29u
dGV4dC5nZXQoKSwgJmVycm9yLm91dFB0cigpKSkKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJG
YWlsZWQgdG8gZmlsbCBpbiBHU3RyZWFtZXIgY29udGV4dDogJXMiLCBlcnJvci0+bWVzc2FnZSk7
Ci0gICAgICAgIGdzdF9nbF9jb250ZXh0X2FjdGl2YXRlKG1fZ2xDb250ZXh0LmdldCgpLCBGQUxT
RSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gYWN0aXZhdGUg
R1N0cmVhbWVyIGNvbnRleHQgJSIgR1NUX1BUUl9GT1JNQVQsIG1fZ2xDb250ZXh0LmdldCgpKTsK
LSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgR1NU
X0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiVW5oYW5kbGVkICVzIG5lZWQtY29udGV4dCBtZXNz
YWdlIGZvciAlcyIsIGNvbnRleHRUeXBlLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7
CisgICAgcmV0dXJuIGZhbHNlOwogfQotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCiAKIC8v
IFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHZpZGVvCiBGbG9hdFNpemUgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSgpIGNvbnN0CkBAIC0zMzU5LDIwICszMTkxLDYgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlcGFpbnRDYW5jZWxsZWRDYWxsYmFj
ayhNZWRpYVBsYXllclByaXZhdGVHU3QKIH0KIAogI2lmIFVTRShHU1RSRUFNRVJfR0wpCi1Hc3RG
bG93UmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3U2FtcGxlQ2FsbGJhY2so
R3N0RWxlbWVudCogc2luaywgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCi17
Ci0gICAgR1JlZlB0cjxHc3RTYW1wbGU+IHNhbXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3Npbmtf
cHVsbF9zYW1wbGUoR1NUX0FQUF9TSU5LKHNpbmspKSk7Ci0gICAgcGxheWVyLT50cmlnZ2VyUmVw
YWludChzYW1wbGUuZ2V0KCkpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotR3N0Rmxv
d1JldHVybiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1ByZXJvbGxDYWxsYmFjayhH
c3RFbGVtZW50KiBzaW5rLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKLXsK
LSAgICBHUmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua19w
dWxsX3ByZXJvbGwoR1NUX0FQUF9TSU5LKHNpbmspKSk7Ci0gICAgcGxheWVyLT50cmlnZ2VyUmVw
YWludChzYW1wbGUuZ2V0KCkpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmZsdXNoQ3VycmVudEJ1ZmZlcigpCiB7CiAgICAg
YXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4KTsKQEAgLTM1OTUsMTE4
ICszNDEzLDE3IEBAIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6bW92aWVMb2FkVHlwZSgpIGNvbnN0CiB9CiAKICNpZiBVU0UoR1NUUkVBTUVS
X0dMKQotR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHTEFw
cFNpbmsoKQotewotICAgIEdzdEVsZW1lbnQqIGFwcHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5
X21ha2UoImFwcHNpbmsiLCAid2Via2l0LWdsLXZpZGVvLXNpbmsiKTsKLSAgICBpZiAoIWFwcHNp
bmspCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZ19vYmplY3Rfc2V0KGFwcHNpbmss
ICJlbmFibGUtbGFzdC1zYW1wbGUiLCBGQUxTRSwgImVtaXQtc2lnbmFscyIsIFRSVUUsICJtYXgt
YnVmZmVycyIsIDEsIG51bGxwdHIpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoYXBwc2luaywgIm5l
dy1zYW1wbGUiLCBHX0NBTExCQUNLKG5ld1NhbXBsZUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19z
aWduYWxfY29ubmVjdChhcHBzaW5rLCAibmV3LXByZXJvbGwiLCBHX0NBTExCQUNLKG5ld1ByZXJv
bGxDYWxsYmFjayksIHRoaXMpOwotCi0gICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1Jl
Zihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChhcHBzaW5rLCAic2luayIpKTsKLSAgICBnc3Rf
cGFkX2FkZF9wcm9iZShwYWQuZ2V0KCksIHN0YXRpY19jYXN0PEdzdFBhZFByb2JlVHlwZT4oR1NU
X1BBRF9QUk9CRV9UWVBFX1BVU0ggfCBHU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfRE9XTlNUUkVB
TSB8IEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9GTFVTSCksIFtdIChHc3RQYWQqLCBHc3RQYWRQ
cm9iZUluZm8qIGluZm8sICBncG9pbnRlciB1c2VyRGF0YSkgLT4gR3N0UGFkUHJvYmVSZXR1cm4g
ewotICAgICAgICAvLyBJbiBzb21lIHBsYXRmb3JtcyAoZS5nLiBPcGVuTUFYIG9uIHRoZSBSYXNw
YmVycnkgUGkpIHdoZW4gYSByZXNvbHV0aW9uIGNoYW5nZSBvY2N1cnMgdGhlCi0gICAgICAgIC8v
IHBpcGVsaW5lIGhhcyB0byBiZSBkcmFpbmVkIGJlZm9yZSBhIGZyYW1lIHdpdGggdGhlIG5ldyBy
ZXNvbHV0aW9uIGNhbiBiZSBkZWNvZGVkLgotICAgICAgICAvLyBJbiB0aGlzIGNvbnRleHQsIGl0
J3MgaW1wb3J0YW50IHRoYXQgd2UgZG9uJ3QgaG9sZCByZWZlcmVuY2VzIHRvIGFueSBwcmV2aW91
cyBmcmFtZQotICAgICAgICAvLyAoZS5nLiBtX3NhbXBsZSkgc28gdGhhdCBkZWNvZGluZyBjYW4g
Y29udGludWUuCi0gICAgICAgIC8vIFdlIGFyZSBhbHNvIG5vdCBzdXBwb3NlZCB0byBrZWVwIHRo
ZSBvcmlnaW5hbCBmcmFtZSBhZnRlciBhIGZsdXNoLgotICAgICAgICBpZiAoaW5mby0+dHlwZSAm
IEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9ET1dOU1RSRUFNKSB7Ci0gICAgICAgICAgICBpZiAo
R1NUX1FVRVJZX1RZUEUoR1NUX1BBRF9QUk9CRV9JTkZPX1FVRVJZKGluZm8pKSAhPSBHU1RfUVVF
UllfRFJBSU4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci0gICAg
ICAgICAgICBHU1RfREVCVUcoIkFjdGluZyB1cG9uIERSQUlOIHF1ZXJ5Iik7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGluZm8tPnR5cGUgJiBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRkxVU0gp
IHsKLSAgICAgICAgICAgIGlmIChHU1RfRVZFTlRfVFlQRShHU1RfUEFEX1BST0JFX0lORk9fRVZF
TlQoaW5mbykpICE9IEdTVF9FVkVOVF9GTFVTSF9TVEFSVCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gR1NUX1BBRF9QUk9CRV9PSzsKLSAgICAgICAgICAgIEdTVF9ERUJVRygiQWN0aW5nIHVwb24g
Zmx1c2gtc3RhcnQgZXZlbnQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIHBsYXllciA9
IHN0YXRpY19jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcio+KHVzZXJEYXRhKTsKLSAg
ICAgICAgcGxheWVyLT5mbHVzaEN1cnJlbnRCdWZmZXIoKTsKLSAgICAgICAgcmV0dXJuIEdTVF9Q
QURfUFJPQkVfT0s7Ci0gICAgfSwgdGhpcywgbnVsbHB0cik7Ci0KLSAgICByZXR1cm4gYXBwc2lu
azsKLX0KLQogR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVW
aWRlb1NpbmtHTCgpCiB7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gVFJVRTsKLSAgICBHc3RFbGVt
ZW50KiB2aWRlb1NpbmsgPSBnc3RfYmluX25ldyhudWxscHRyKTsKLSAgICBHc3RFbGVtZW50KiB1
cGxvYWQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImdsdXBsb2FkIiwgbnVsbHB0cik7Ci0g
ICAgR3N0RWxlbWVudCogY29sb3Jjb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJn
bGNvbG9yY29udmVydCIsIG51bGxwdHIpOwotICAgIEdzdEVsZW1lbnQqIGFwcHNpbmsgPSBjcmVh
dGVHTEFwcFNpbmsoKTsKLQotICAgIC8vIGdsc2lua2JpbiBpcyBub3QgdXNlZCBiZWNhdXNlIGl0
IGluY2x1ZGVzIGdsY29sb3Jjb252ZXJ0IHdoaWNoIG9ubHkgcHJvY2VzcyBSR0JBLAotICAgIC8v
IGJ1dCB3ZSBjYW4gZGlzcGxheSBZVVYgZm9ybWF0cyB0b28uCi0KLSAgICBpZiAoIWFwcHNpbmsg
fHwgIXVwbG9hZCB8fCAhY29sb3Jjb252ZXJ0KSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HKCJGYWls
ZWQgdG8gY3JlYXRlIEdzdEdMIGVsZW1lbnRzIik7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYo
dmlkZW9TaW5rKTsKLQotICAgICAgICBpZiAodXBsb2FkKQotICAgICAgICAgICAgZ3N0X29iamVj
dF91bnJlZih1cGxvYWQpOwotICAgICAgICBpZiAoY29sb3Jjb252ZXJ0KQotICAgICAgICAgICAg
Z3N0X29iamVjdF91bnJlZihjb2xvcmNvbnZlcnQpOwotICAgICAgICBpZiAoYXBwc2luaykKLSAg
ICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoYXBwc2luayk7Ci0KLSAgICAgICAgZ193YXJuaW5n
KCJXZWJLaXQgd2Fzbid0IGFibGUgdG8gZmluZCB0aGUgR1N0cmVhbWVyIG9wZW5nbCBwbHVnaW4u
IEhhcmR3YXJlLWFjY2VsZXJhdGVkIHplcm8tY29weSB2aWRlbyByZW5kZXJpbmcgY2FuJ3QgYmUg
ZW5hYmxlZCB3aXRob3V0IHRoaXMgcGx1Z2luLiIpOworICAgIGlmICghd2ViS2l0R0xWaWRlb1Np
bmtQcm9iZVBsYXRmb3JtKCkpIHsKKyAgICAgICAgZ193YXJuaW5nKCJXZWJLaXQgd2Fzbid0IGFi
bGUgdG8gZmluZCB0aGUgR0wgdmlkZW8gc2luayBkZXBlbmRlbmNpZXMuIEhhcmR3YXJlLWFjY2Vs
ZXJhdGVkIHplcm8tY29weSB2aWRlbyByZW5kZXJpbmcgY2FuJ3QgYmUgZW5hYmxlZCB3aXRob3V0
IHRoaXMgcGx1Z2luLiIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBn
c3RfYmluX2FkZF9tYW55KEdTVF9CSU4odmlkZW9TaW5rKSwgdXBsb2FkLCBjb2xvcmNvbnZlcnQs
IGFwcHNpbmssIG51bGxwdHIpOwotCi0gICAgLy8gV29ya2Fyb3VuZCB1bnRpbCB3ZSBjYW4gZGVw
ZW5kIG9uIEdTdHJlYW1lciAxLjE2LjIuCi0gICAgLy8gaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0
b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYXNlL2NvbW1pdC84ZDMyZGUwOTA1NTRjZjI5
ZmUzNTlmODNhYTQ2MDAwYmE2NThhNjkzCi0gICAgLy8gRm9yY2luZyBhIGNvbG9yIGNvbnZlcnNp
b24gdG8gUkdCQSBoZXJlIGFsbG93cyBnbHVwbG9hZCB0byBpbnRlcm5hbGx5IHVzZQotICAgIC8v
IGFuIHVwbG9hZGVyIHRoYXQgYWRkcyBhIFZpZGVvTWV0YSwgdGhyb3VnaCB0aGUgVGV4dHVyZVVw
bG9hZE1ldGEgY2FwcwotICAgIC8vIGZlYXR1cmUsIHdpdGhvdXQgbmVlZGluZyB0aGUgcGF0Y2gg
YWJvdmUuIEhvd2V2ZXIgdGhpcyBzcGVjaWZpYyBjYXBzCi0gICAgLy8gZmVhdHVyZSBpcyBnb2lu
ZyB0byBiZSByZW1vdmVkIGZyb20gR1N0cmVhbWVyIHNvIGl0IGlzIGNvbnNpZGVyZWQgYQotICAg
IC8vIHNob3J0LXRlcm0gd29ya2Fyb3VuZC4gVGhpcyBjb2RlIHBhdGggbW9zdCBsaWtlbHkgd2ls
bCBoYXZlIGEgbmVnYXRpdmUKLSAgICAvLyBwZXJmb3JtYW5jZSBpbXBhY3Qgb24gZW1iZWRkZWQg
cGxhdGZvcm1zIGFzIHdlbGwuIERvd25zdHJlYW0gZW1iZWRkZXJzCi0gICAgLy8gYXJlIGhpZ2hs
eSBlbmNvdXJhZ2VkIHRvIGNoZXJyeS1waWNrIHRoZSBwYXRjaCBsaW5rZWQgYWJvdmUgaW4gdGhl
aXIgQlNQCi0gICAgLy8gYW5kIHNldCB0aGUgV0VCS0lUX0dTVF9OT19SR0JBX0NPTlZFUlNJT04g
ZW52aXJvbm1lbnQgdmFyaWFibGUgdW50aWwKLSAgICAvLyBHU3RyZWFtZXIgMS4xNi4yIGlzIHJl
bGVhc2VkLgotICAgIC8vIFNlZSBhbHNvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDE0MjIKLSAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHM7Ci0gICAgaWYgKHdlYmtp
dEdzdENoZWNrVmVyc2lvbigxLCAxNiwgMikgfHwgZ2V0ZW52KCJXRUJLSVRfR1NUX05PX1JHQkFf
Q09OVkVSU0lPTiIpKQotICAgICAgICBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2Zyb21fc3Ry
aW5nKCJ2aWRlby94LXJhdywgZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfR0xfQ0FQU19GT1JNQVQp
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJGb3Jj
aW5nIFJHQkEgYXMgR1N0cmVhbWVyIGlzIG5vdCBuZXcgZW5vdWdoLiIpOwotICAgICAgICBjYXBz
ID0gYWRvcHRHUmVmKGdzdF9jYXBzX2Zyb21fc3RyaW5nKCJ2aWRlby94LXJhdywgZm9ybWF0ID0g
KHN0cmluZykgUkdCQSIpKTsKLSAgICB9Ci0gICAgZ3N0X2NhcHNfc2V0X2ZlYXR1cmVzKGNhcHMu
Z2V0KCksIDAsIGdzdF9jYXBzX2ZlYXR1cmVzX25ldyhHU1RfQ0FQU19GRUFUVVJFX01FTU9SWV9H
TF9NRU1PUlksIG51bGxwdHIpKTsKLSAgICBnX29iamVjdF9zZXQoYXBwc2luaywgImNhcHMiLCBj
YXBzLmdldCgpLCBudWxscHRyKTsKLQotICAgIHJlc3VsdCAmPSBnc3RfZWxlbWVudF9saW5rX21h
bnkodXBsb2FkLCBjb2xvcmNvbnZlcnQsIGFwcHNpbmssIG51bGxwdHIpOwotCi0gICAgR1JlZlB0
cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCh1cGxv
YWQsICJzaW5rIikpOwotICAgIGdzdF9lbGVtZW50X2FkZF9wYWQodmlkZW9TaW5rLCBnc3RfZ2hv
c3RfcGFkX25ldygic2luayIsIHBhZC5nZXQoKSkpOwotCi0gICAgaWYgKCFyZXN1bHQpIHsKLSAg
ICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBsaW5rIEdzdEdMIGVsZW1lbnRzIik7Ci0gICAg
ICAgIGdzdF9vYmplY3RfdW5yZWYodmlkZW9TaW5rKTsKLSAgICAgICAgdmlkZW9TaW5rID0gbnVs
bHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIHZpZGVvU2luazsKLX0KLQotdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmVuc3VyZUdMVmlkZW9TaW5rQ29udGV4dCgpCi17Ci0gICAgaWYg
KCFtX2dsRGlzcGxheUVsZW1lbnRDb250ZXh0KQotICAgICAgICBtX2dsRGlzcGxheUVsZW1lbnRD
b250ZXh0ID0gYWRvcHRHUmVmKHJlcXVlc3RHTENvbnRleHQoR1NUX0dMX0RJU1BMQVlfQ09OVEVY
VF9UWVBFKSk7Ci0KLSAgICBpZiAobV9nbERpc3BsYXlFbGVtZW50Q29udGV4dCkKLSAgICAgICAg
Z3N0X2VsZW1lbnRfc2V0X2NvbnRleHQobV92aWRlb1NpbmsuZ2V0KCksIG1fZ2xEaXNwbGF5RWxl
bWVudENvbnRleHQuZ2V0KCkpOwotCi0gICAgaWYgKCFtX2dsQXBwRWxlbWVudENvbnRleHQpCi0g
ICAgICAgIG1fZ2xBcHBFbGVtZW50Q29udGV4dCA9IGFkb3B0R1JlZihyZXF1ZXN0R0xDb250ZXh0
KCJnc3QuZ2wuYXBwX2NvbnRleHQiKSk7Ci0KLSAgICBpZiAobV9nbEFwcEVsZW1lbnRDb250ZXh0
KQotICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChtX3ZpZGVvU2luay5nZXQoKSwgbV9n
bEFwcEVsZW1lbnRDb250ZXh0LmdldCgpKTsKKyAgICBHc3RFbGVtZW50KiBzaW5rID0gZ3N0X2Vs
ZW1lbnRfZmFjdG9yeV9tYWtlKCJ3ZWJraXRnbHZpZGVvc2luayIsIG51bGxwdHIpOworICAgIEFT
U0VSVChzaW5rKTsKKyAgICB3ZWJLaXRHTFZpZGVvU2lua1NldE1lZGlhUGxheWVyUHJpdmF0ZShX
RUJLSVRfR0xfVklERU9fU0lOSyhzaW5rKSwgdGhpcyk7CisgICAgcmV0dXJuIHNpbms7CiB9CiAj
ZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDJhZGIwZmYwMjJkYTM1MzNkZTZhYjk2YzA2ODhhOTNj
ZGIwMGFjZTIuLjI3OTBlYzNkYjVkYTkzY2Q2ODllMjNiYzI5YzJkNTNmMTdhOGUzYmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTE2MCwxMCAr
MTYwLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KSBvdmVycmlkZTsKICAg
ICBmbG9hdCB2b2x1bWUoKSBjb25zdCBvdmVycmlkZTsKIAotI2lmIFVTRShHU1RSRUFNRVJfR0wp
Ci0gICAgYm9vbCBlbnN1cmVHc3RHTENvbnRleHQoKTsKLSAgICBHc3RDb250ZXh0KiByZXF1ZXN0
R0xDb250ZXh0KGNvbnN0IGNoYXIqIGNvbnRleHRUeXBlKTsKLSNlbmRpZgogICAgIHZvaWQgc2V0
TXV0ZWQoYm9vbCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBtdXRlZCgpIGNvbnN0OwogCkBAIC0yNTUs
NiArMjUxLDExIEBAIHB1YmxpYzoKICAgICBib29sIGhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3Nh
Z2UqKTsKICAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSopOwogCisgICAgdm9pZCB0
cmlnZ2VyUmVwYWludChHc3RTYW1wbGUqKTsKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorICAgIHZv
aWQgZmx1c2hDdXJyZW50QnVmZmVyKCk7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIGVudW0g
TWFpblRocmVhZE5vdGlmaWNhdGlvbiB7CiAgICAgICAgIFZpZGVvQ2hhbmdlZCA9IDEgPDwgMCwK
QEAgLTI4NSwxNCArMjg2LDcgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKICNpZiBVU0UoR1NUUkVB
TUVSX0dMKQotICAgIHN0YXRpYyBHc3RGbG93UmV0dXJuIG5ld1NhbXBsZUNhbGxiYWNrKEdzdEVs
ZW1lbnQqLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKLSAgICBzdGF0aWMgR3N0Rmxv
d1JldHVybiBuZXdQcmVyb2xsQ2FsbGJhY2soR3N0RWxlbWVudCosIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lciopOwotICAgIHZvaWQgZmx1c2hDdXJyZW50QnVmZmVyKCk7Ci0gICAgR3N0RWxl
bWVudCogY3JlYXRlR0xBcHBTaW5rKCk7CiAgICAgR3N0RWxlbWVudCogY3JlYXRlVmlkZW9TaW5r
R0woKTsKLSAgICBHc3RHTENvbnRleHQqIGdzdEdMQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
Z2xDb250ZXh0LmdldCgpOyB9Ci0gICAgR3N0R0xEaXNwbGF5KiBnc3RHTERpc3BsYXkoKSBjb25z
dCB7IHJldHVybiBtX2dsRGlzcGxheS5nZXQoKTsgfQotICAgIHZvaWQgZW5zdXJlR0xWaWRlb1Np
bmtDb250ZXh0KCk7CiAjZW5kaWYKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKQEAgLTMx
MSw3ICszMDUsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIHNldFBpcGVsaW5lKEdzdEVsZW1l
bnQqKTsKIAotICAgIHZvaWQgdHJpZ2dlclJlcGFpbnQoR3N0U2FtcGxlKik7CiAgICAgdm9pZCBy
ZXBhaW50KCk7CiAgICAgdm9pZCBjYW5jZWxSZXBhaW50KGJvb2wgZGVzdHJveWluZyA9IGZhbHNl
KTsKIApAQCAtNDA0LDEyICszOTcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2Rlc3Ryb3lp
bmcgeyBmYWxzZSB9OwogCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICBHUmVmUHRyPEdzdEdM
Q29udGV4dD4gbV9nbENvbnRleHQ7Ci0gICAgR1JlZlB0cjxHc3RHTERpc3BsYXk+IG1fZ2xEaXNw
bGF5OwotICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gbV9nbERpc3BsYXlFbGVtZW50Q29udGV4dDsK
LSAgICBHUmVmUHRyPEdzdENvbnRleHQ+IG1fZ2xBcHBFbGVtZW50Q29udGV4dDsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyPiBtX3ZpZGVvVGV4dHVyZUNv
cGllcjsKLQogICAgIEdSZWZQdHI8R3N0R0xDb2xvckNvbnZlcnQ+IG1fY29sb3JDb252ZXJ0Owog
ICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9jb2xvckNvbnZlcnRJbnB1dENhcHM7CiAgICAgR1JlZlB0
cjxHc3RDYXBzPiBtX2NvbG9yQ29udmVydE91dHB1dENhcHM7CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjQ4MzgxZGY4NjQ2ZjU3MmFhYzJjOWIx
YWIxMmFjYTZmZWQzM2RkMS4uZmJmYjg3YTE5Y2FjZTI1M2RlZTlmODQyMmM2MTA4YWVkNTNmMWNj
MiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEyIEBACisyMDE5LTExLTI2ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBNb3ZlIEdMIHZpZGVvIHNpbmsgdG8gaXRz
IG93biBHc3RCaW4gc3ViLWNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDQ2MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weTogV2hpdGUt
bGlzdCB0aGUgbmV3IEdMVmlkZW9TaW5rR1N0cmVhbWVyIEdPYmplY3QgaW1wbGVtZW50YXRpb24u
CisKIDIwMTktMTEtMjUgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJlbW92ZSB0a2VudEAgZnJvbSB3YXRjaGxpc3QKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvY2hlY2tlci5weQppbmRleCA0MzRhNjFlY2IxZjA5YTcwMzBjMDg4NTU3MWQ1ZjBjOWY0NTU1
NWJlLi4xM2QxZDQ4ZTJlNjQ1NzIwZDI3OTFmNDkyMWU3YzlmZDExYjNlY2EyIDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CkBAIC0yMTcsNiArMjE3LDggQEAgX1BBVEhf
UlVMRVNfU1BFQ0lGSUVSID0gWwogICAgIChbCiAgICAgICAjIFRoZXNlIGZpbGVzIGRlZmluZSBH
T2JqZWN0cywgd2hpY2ggaW1wbGllcyBzb21lIGRlZmluaXRpb25zIG9mCiAgICAgICAjIHZhcmlh
YmxlcyBhbmQgZnVuY3Rpb25zIGNvbnRhaW5pbmcgdW5kZXJzY29yZXMuCisgICAgICBvcy5wYXRo
LmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJl
YW1lcicsICdHTFZpZGVvU2lua0dTdHJlYW1lci5jcHAnKSwKKyAgICAgIG9zLnBhdGguam9pbign
U291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnZ3JhcGhpY3MnLCAnZ3N0cmVhbWVyJywg
J0dMVmlkZW9TaW5rR1N0cmVhbWVyLmgnKSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywg
J1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnZ3JhcGhpY3MnLCAnZ3N0cmVhbWVyJywgJ1ZpZGVvU2lu
a0dTdHJlYW1lci5jcHAnKSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUn
LCAncGxhdGZvcm0nLCAnZ3JhcGhpY3MnLCAnZ3N0cmVhbWVyJywgJ1dlYktpdFdlYlNvdXJjZUdT
dHJlYW1lci5jcHAnKSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAn
cGxhdGZvcm0nLCAnYXVkaW8nLCAnZ3N0cmVhbWVyJywgJ1dlYktpdFdlYkF1ZGlvU291cmNlR1N0
cmVhbWVyLmNwcCcpLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384413</attachid>
            <date>2019-11-27 08:30:47 -0800</date>
            <delta_ts>2019-11-28 00:58:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204624-20191127163045.patch</filename>
            <type>text/plain</type>
            <size>44880</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyOTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDFiNWVkMTBiYjQwZDky
YzcyYmJkNTFmODMyMWRjMWMyMWRkMzIzNC4uMTBlNjgyOWUwZjg1ODYwNTAwYmUyNGM3YjNmMDk3
MWY3ZjE2ZjkzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE5LTExLTI2ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBNb3ZlIEdMIHZpZGVvIHNpbmsgdG8gaXRzIG93biBHc3RCaW4gc3ViLWNsYXNzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ2MjQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHJlZHVjZXMgdGhl
IE1lZGlhUGxheWVyUHJpdmF0ZSBjb2RlLWJhc2UgYW5kIGFkZHMgYSBnb29kCisgICAgICAgIHNl
cGFyYXRpb24gb2YgcmVzcG9uc2liaWxpdHkgcmVnYXJkaW5nIEdMIHZpZGVvIHJlbmRlcmluZy4g
VGhlCisgICAgICAgIFRleHR1cmVDb3BpZXIgcmVtYWlucyBpbiB0aGUgcGxheWVyIGJlY2F1c2Ug
aXQncyB0b28gc3BlY2lmaWMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2U6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVh
bWVyLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRfZ2xfdmlkZW9fc2lua19pbml0KToKKyAg
ICAgICAgKHdlYktpdEdMVmlkZW9TaW5rRmluYWxpemUpOgorICAgICAgICAoZW5zdXJlR3N0R0xD
b250ZXh0KToKKyAgICAgICAgKHJlcXVlc3RHTENvbnRleHQpOgorICAgICAgICAod2ViS2l0R0xW
aWRlb1NpbmtDaGFuZ2VTdGF0ZSk6CisgICAgICAgICh3ZWJraXRfZ2xfdmlkZW9fc2lua19jbGFz
c19pbml0KToKKyAgICAgICAgKHdlYktpdEdMVmlkZW9TaW5rU2V0TWVkaWFQbGF5ZXJQcml2YXRl
KToKKyAgICAgICAgKHdlYktpdEdMVmlkZW9TaW5rUHJvYmVQbGF0Zm9ybSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmg6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2Vi
S2l0RWxlbWVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlVmlkZW9TaW5r
R0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaDoKKwogMjAxOS0xMS0yNyAgTWFudWVsIFJlZ28gQ2FzYXNub3ZhcyAg
PHJlZ29AaWdhbGlhLmNvbT4KIAogICAgICAgICBbY3NzLWdyaWRdIFNlcmlhbGl6YXRpb24gb2Yg
Z3JpZC1hcmVhLCBncmlkLXJvdyBhbmQgZ3JpZC1jb2x1bW4gc2hvdWxkIGluY2x1ZGUgIi8iIHNl
cGFyYXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNt
YWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCmluZGV4IDJjOTQx
ZjBjYjRhZThhYTg2MGQ1ZTU3MTY1YmEyYjU2MzhiMDIxYTkuLjg3NGQ0OWFmMWU0MTlhY2M4NGE0
NjZkMjhjYTAyM2M2YmM5YWY5ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0dTdHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIu
Y21ha2UKQEAgLTcsNiArNyw3IEBAIGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJ
TykKIAogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RBbGxvY2F0b3JGYXN0TWFsbG9j
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGIw
MDE2MjIzOTA1MjI4Y2E4OWNlYzE3M2IxMDRmMTE1Y2ExNjRjOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dT
dHJlYW1lci5jcHAKQEAgLTAsMCArMSwzNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
SWdhbGlhIFMuTAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHTFZpZGVvU2lua0dTdHJl
YW1lci5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSX0dMKQorCisjaW5j
bHVkZSAiR0xDb250ZXh0LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCisKKyNpZiBVU0UoR0xYKQorI2luY2x1
ZGUgIkdMQ29udGV4dEdMWC5oIgorI2luY2x1ZGUgPGdzdC9nbC94MTEvZ3N0Z2xkaXNwbGF5X3gx
MS5oPgorI2VuZGlmCisKKyNpZiBVU0UoRUdMKQorI2luY2x1ZGUgIkdMQ29udGV4dEVHTC5oIgor
I2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0Z2xkaXNwbGF5X2VnbC5oPgorI2VuZGlmCisKKyNpZiBQ
TEFURk9STShYMTEpCisjaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5WDExLmgiCisjZW5kaWYKKwor
I2lmIFBMQVRGT1JNKFdBWUxBTkQpCisjaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5V2F5bGFuZC5o
IgorI2VuZGlmCisKKyNpZiBVU0UoV1BFX1JFTkRFUkVSKQorI2luY2x1ZGUgIlBsYXRmb3JtRGlz
cGxheUxpYldQRS5oIgorI2VuZGlmCisKKy8vIGdzdGdsYXBpLmggbWF5IGluY2x1ZGUgZWdscGxh
dGZvcm0uaCBhbmQgaXQgaW5jbHVkZXMgWC5oLCB3aGljaAorLy8gZGVmaW5lcyBOb25lLCBicmVh
a2luZyBNZWRpYVBsYXllcjo6Tm9uZSBlbnVtCisjaWYgUExBVEZPUk0oWDExKSAmJiBHU1RfR0xf
SEFWRV9QTEFURk9STV9FR0wKKyN1bmRlZiBOb25lCisjZW5kaWYgLy8gUExBVEZPUk0oWDExKSAm
JiBHU1RfR0xfSEFWRV9QTEFURk9STV9FR0wKKworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2lu
ay5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RydWN0IF9XZWJLaXRHTFZpZGVv
U2lua1ByaXZhdGUgeworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gYXBwU2luazsKKyAgICBHUmVm
UHRyPEdzdEdMQ29udGV4dD4gZ2xDb250ZXh0OworICAgIEdSZWZQdHI8R3N0R0xEaXNwbGF5PiBn
bERpc3BsYXk7CisgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBnbERpc3BsYXlFbGVtZW50Q29udGV4
dDsKKyAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGdsQXBwRWxlbWVudENvbnRleHQ7CisgICAgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBtZWRpYVBsYXllclByaXZhdGU7Cit9OworCitHU1Rf
REVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9nbF92aWRlb19zaW5rX2RlYnVnKTsKKyNkZWZp
bmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9nbF92aWRlb19zaW5rX2RlYnVnCisKKyNkZWZpbmUg
R1NUX0dMX0NBUFNfRk9STUFUICJ7IFJHQngsIFJHQkEsIEk0MjAsIFk0NDQsIFlWMTIsIFk0MUIs
IFk0MkIsIE5WMTIsIE5WMjEsIFZVWUEgfSIKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBz
aW5rVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic2luayIsIEdTVF9QQURfU0lO
SywgR1NUX1BBRF9BTFdBWVMsIEdTVF9TVEFUSUNfQ0FQU19BTlkpOworCisjZGVmaW5lIFdFQktJ
VF9HTF9WSURFT19TSU5LX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJ
VkFURSgob2JqKSwgV0VCS0lUX1RZUEVfR0xfVklERU9fU0lOSywgV2ViS2l0R0xWaWRlb1NpbmtQ
cml2YXRlKSkKKworI2RlZmluZSB3ZWJraXRfZ2xfdmlkZW9fc2lua19wYXJlbnRfY2xhc3MgcGFy
ZW50X2NsYXNzCisjZGVmaW5lIFdFQktJVF9HTF9WSURFT19TSU5LX0NBVEVHT1JZX0lOSVQgR1NU
X0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X2dsX3ZpZGVvX3NpbmtfZGVidWcsICJ3ZWJraXRn
bHZpZGVvc2luayIsIDAsICJHTCB2aWRlbyBzaW5rIGVsZW1lbnQiKTsKK0dfREVGSU5FX1RZUEVf
V0lUSF9DT0RFKFdlYktpdEdMVmlkZW9TaW5rLCB3ZWJraXRfZ2xfdmlkZW9fc2luaywgR1NUX1RZ
UEVfQklOLCBXRUJLSVRfR0xfVklERU9fU0lOS19DQVRFR09SWV9JTklUKTsKKworc3RhdGljIHZv
aWQgd2Via2l0X2dsX3ZpZGVvX3NpbmtfaW5pdChXZWJLaXRHTFZpZGVvU2luayogc2luaykKK3sK
KyAgICBzaW5rLT5wcml2ID0gV0VCS0lUX0dMX1ZJREVPX1NJTktfR0VUX1BSSVZBVEUoc2luayk7
CisgICAgbmV3IChzaW5rLT5wcml2KSBXZWJLaXRHTFZpZGVvU2lua1ByaXZhdGUoKTsKKworICAg
IHNpbmstPnByaXYtPmFwcFNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNpbmsi
LCAid2Via2l0LWdsLXZpZGVvLWFwcHNpbmsiKTsKKyAgICBBU1NFUlQoc2luay0+cHJpdi0+YXBw
U2luayk7CisgICAgZ19vYmplY3Rfc2V0KHNpbmstPnByaXYtPmFwcFNpbmsuZ2V0KCksICJlbmFi
bGUtbGFzdC1zYW1wbGUiLCBGQUxTRSwgImVtaXQtc2lnbmFscyIsIFRSVUUsICJtYXgtYnVmZmVy
cyIsIDEsIG51bGxwdHIpOworCisgICAgR3N0RWxlbWVudCogdXBsb2FkID0gZ3N0X2VsZW1lbnRf
ZmFjdG9yeV9tYWtlKCJnbHVwbG9hZCIsIG51bGxwdHIpOworICAgIEdzdEVsZW1lbnQqIGNvbG9y
Y29udmVydCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZ2xjb2xvcmNvbnZlcnQiLCBudWxs
cHRyKTsKKyAgICBBU1NFUlQodXBsb2FkKTsKKyAgICBBU1NFUlQoY29sb3Jjb252ZXJ0KTsKKyAg
ICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChzaW5rKSwgdXBsb2FkLCBjb2xvcmNvbnZl
cnQsIHNpbmstPnByaXYtPmFwcFNpbmsuZ2V0KCksIG51bGxwdHIpOworCisgICAgLy8gV29ya2Fy
b3VuZCB1bnRpbCB3ZSBjYW4gZGVwZW5kIG9uIEdTdHJlYW1lciAxLjE2LjIuCisgICAgLy8gaHR0
cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYXNlL2Nv
bW1pdC84ZDMyZGUwOTA1NTRjZjI5ZmUzNTlmODNhYTQ2MDAwYmE2NThhNjkzCisgICAgLy8gRm9y
Y2luZyBhIGNvbG9yIGNvbnZlcnNpb24gdG8gUkdCQSBoZXJlIGFsbG93cyBnbHVwbG9hZCB0byBp
bnRlcm5hbGx5IHVzZQorICAgIC8vIGFuIHVwbG9hZGVyIHRoYXQgYWRkcyBhIFZpZGVvTWV0YSwg
dGhyb3VnaCB0aGUgVGV4dHVyZVVwbG9hZE1ldGEgY2FwcworICAgIC8vIGZlYXR1cmUsIHdpdGhv
dXQgbmVlZGluZyB0aGUgcGF0Y2ggYWJvdmUuIEhvd2V2ZXIgdGhpcyBzcGVjaWZpYyBjYXBzCisg
ICAgLy8gZmVhdHVyZSBpcyBnb2luZyB0byBiZSByZW1vdmVkIGZyb20gR1N0cmVhbWVyIHNvIGl0
IGlzIGNvbnNpZGVyZWQgYQorICAgIC8vIHNob3J0LXRlcm0gd29ya2Fyb3VuZC4gVGhpcyBjb2Rl
IHBhdGggbW9zdCBsaWtlbHkgd2lsbCBoYXZlIGEgbmVnYXRpdmUKKyAgICAvLyBwZXJmb3JtYW5j
ZSBpbXBhY3Qgb24gZW1iZWRkZWQgcGxhdGZvcm1zIGFzIHdlbGwuIERvd25zdHJlYW0gZW1iZWRk
ZXJzCisgICAgLy8gYXJlIGhpZ2hseSBlbmNvdXJhZ2VkIHRvIGNoZXJyeS1waWNrIHRoZSBwYXRj
aCBsaW5rZWQgYWJvdmUgaW4gdGhlaXIgQlNQCisgICAgLy8gYW5kIHNldCB0aGUgV0VCS0lUX0dT
VF9OT19SR0JBX0NPTlZFUlNJT04gZW52aXJvbm1lbnQgdmFyaWFibGUgdW50aWwKKyAgICAvLyBH
U3RyZWFtZXIgMS4xNi4yIGlzIHJlbGVhc2VkLgorICAgIC8vIFNlZSBhbHNvIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE0MjIKKyAgICBHUmVmUHRyPEdzdENhcHM+
IGNhcHM7CisgICAgaWYgKHdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCAxNiwgMikgfHwgZ2V0ZW52
KCJXRUJLSVRfR1NUX05PX1JHQkFfQ09OVkVSU0lPTiIpKQorICAgICAgICBjYXBzID0gYWRvcHRH
UmVmKGdzdF9jYXBzX2Zyb21fc3RyaW5nKCJ2aWRlby94LXJhdywgZm9ybWF0ID0gKHN0cmluZykg
IiBHU1RfR0xfQ0FQU19GT1JNQVQpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgR1NUX0lORk9fT0JK
RUNUKHNpbmssICJGb3JjaW5nIFJHQkEgYXMgR1N0cmVhbWVyIGlzIG5vdCBuZXcgZW5vdWdoLiIp
OworICAgICAgICBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2Zyb21fc3RyaW5nKCJ2aWRlby94
LXJhdywgZm9ybWF0ID0gKHN0cmluZykgUkdCQSIpKTsKKyAgICB9CisgICAgZ3N0X2NhcHNfc2V0
X2ZlYXR1cmVzKGNhcHMuZ2V0KCksIDAsIGdzdF9jYXBzX2ZlYXR1cmVzX25ldyhHU1RfQ0FQU19G
RUFUVVJFX01FTU9SWV9HTF9NRU1PUlksIG51bGxwdHIpKTsKKyAgICBnX29iamVjdF9zZXQoc2lu
ay0+cHJpdi0+YXBwU2luay5nZXQoKSwgImNhcHMiLCBjYXBzLmdldCgpLCBudWxscHRyKTsKKwor
ICAgIGdzdF9lbGVtZW50X2xpbmtfbWFueSh1cGxvYWQsIGNvbG9yY29udmVydCwgc2luay0+cHJp
di0+YXBwU2luay5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0g
YWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHVwbG9hZCwgInNpbmsiKSk7Cisg
ICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVOVF9DQVNUKHNpbmspLCBnc3RfZ2hvc3Rf
cGFkX25ldygic2luayIsIHBhZC5nZXQoKSkpOworfQorCit2b2lkIHdlYktpdEdMVmlkZW9TaW5r
RmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVh
ZCgpKTsKKworICAgIFdlYktpdEdMVmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX0dMX1ZJREVPX1NJ
Tksob2JqZWN0KTsKKyAgICBXZWJLaXRHTFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5w
cml2OworCisgICAgaWYgKHByaXYtPm1lZGlhUGxheWVyUHJpdmF0ZSkKKyAgICAgICAgZ19zaWdu
YWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKHByaXYtPmFwcFNpbmsuZ2V0KCksIHByaXYt
Pm1lZGlhUGxheWVyUHJpdmF0ZSk7CisKKyAgICAvLyBXZSB1c2VkIGEgcGxhY2VtZW50IG5ldyBm
b3IgY29uc3RydWN0aW9uLCB0aGUgZGVzdHJ1Y3RvciB3b24ndCBiZSBjYWxsZWQgYXV0b21hdGlj
YWxseS4KKyAgICBwcml2LT5+X1dlYktpdEdMVmlkZW9TaW5rUHJpdmF0ZSgpOworCisgICAgR1NU
X0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6ZSwgKG9iamVjdCkpOworfQorCitz
dGF0aWMgYm9vbCBlbnN1cmVHc3RHTENvbnRleHQoV2ViS2l0R0xWaWRlb1NpbmsqIHNpbmspCit7
CisgICAgV2ViS2l0R0xWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2luay0+cHJpdjsKKworICAg
IGlmIChwcml2LT5nbENvbnRleHQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYXV0byYg
c2hhcmVkRGlzcGxheSA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0
aW5nKCk7CisKKyAgICAvLyBUaGUgZmxvYXRpbmcgcmVmIHJlbW92YWwgc3VwcG9ydCB3YXMgYWRk
ZWQgaW4gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzA2Mi4K
KyAgICBib29sIHNob3VsZEFkb3B0UmVmID0gd2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE0LCAw
KTsKKyAgICBpZiAoIXByaXYtPmdsRGlzcGxheSkgeworI2lmIFBMQVRGT1JNKFgxMSkKKyNpZiBV
U0UoR0xYKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5
KSkgeworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzaW5rLCAiQ3JlYXRpbmcgWDExIHNo
YXJlZCBHTCBkaXNwbGF5Iik7CisgICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCisgICAg
ICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdz
dF9nbF9kaXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxh
eVgxMT4oc2hhcmVkRGlzcGxheSkubmF0aXZlKCkpKSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3Bs
YXlfeDExX25ld193aXRoX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFy
ZWREaXNwbGF5KS5uYXRpdmUoKSkpOworICAgICAgICB9CisjZWxpZiBVU0UoRUdMKQorICAgICAg
ICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KSkgeworICAgICAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChzaW5rLCAiQ3JlYXRpbmcgWDExIHNoYXJlZCBFR0wgZGlzcGxh
eSIpOworICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQorICAgICAgICAgICAgICAgIHBy
aXYtPmdsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9l
Z2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFy
ZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWds
X25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVk
RGlzcGxheSkuZWdsRGlzcGxheSgpKSk7CisgICAgICAgIH0KKyNlbmRpZgorI2VuZGlmCisKKyNp
ZiBQTEFURk9STShXQVlMQU5EKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5V2F5bGFu
ZD4oc2hhcmVkRGlzcGxheSkpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2luaywg
IkNyZWF0aW5nIFdheWxhbmQgc2hhcmVkIGRpc3BsYXkiKTsKKyAgICAgICAgICAgIGlmIChzaG91
bGRBZG9wdFJlZikKKyAgICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBhZG9wdEdSZWYo
R1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRv
d25jYXN0PFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXko
KSkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkg
PSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXko
ZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxh
eSgpKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisjaWYgVVNFKFdQRV9SRU5ERVJFUikKKyAgICAg
ICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheUxpYldQRT4oc2hhcmVkRGlzcGxheSkpIHsKKyAgICAg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2luaywgIkNyZWF0aW5nIFdQRSBzaGFyZWQgRUdMIGRp
c3BsYXkiKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAgICAgICAg
ICBwcml2LT5nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3Bs
YXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheUxpYldQ
RT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNw
bGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJX
UEU+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpOworICAgICAgICB9CisjZW5kaWYKKwor
ICAgICAgICBBU1NFUlQocHJpdi0+Z2xEaXNwbGF5KTsKKyAgICB9CisKKyAgICBHTENvbnRleHQq
IHNoYXJlZENvbnRleHQgPSBzaGFyZWREaXNwbGF5LnNoYXJpbmdHTENvbnRleHQoKTsKKyAgICAv
LyBFR0wgYW5kIEdMWCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBubyBuZWVkIGZvciBpZmRlZnMg
aGVyZS4KKyAgICBHc3RHTFBsYXRmb3JtIGdsUGxhdGZvcm0gPSBzaGFyZWRDb250ZXh0LT5pc0VH
TENvbnRleHQoKSA/IEdTVF9HTF9QTEFURk9STV9FR0wgOiBHU1RfR0xfUExBVEZPUk1fR0xYOwor
CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICBHc3RHTEFQSSBnbEFQSSA9IEdTVF9HTF9BUElfR0xF
UzI7CisjZWxpZiBVU0UoT1BFTkdMKQorICAgIEdzdEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQSV9P
UEVOR0w7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisKKyAgICBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIGNvbnRleHRIYW5kbGUgPSBzaGFyZWRDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHRIYW5kbGUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAgcHJpdi0+Z2xDb250
ZXh0ID0gYWRvcHRHUmVmKGdzdF9nbF9jb250ZXh0X25ld193cmFwcGVkKHByaXYtPmdsRGlzcGxh
eS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29udGV4dEhhbmRsZSksIGdsUGxh
dGZvcm0sIGdsQVBJKSk7CisgICAgZWxzZQorICAgICAgICBwcml2LT5nbENvbnRleHQgPSBnc3Rf
Z2xfY29udGV4dF9uZXdfd3JhcHBlZChwcml2LT5nbERpc3BsYXkuZ2V0KCksIHJlaW50ZXJwcmV0
X2Nhc3Q8Z3VpbnRwdHI+KGNvbnRleHRIYW5kbGUpLCBnbFBsYXRmb3JtLCBnbEFQSSk7CisKKyAg
ICAvLyBBY3RpdmF0ZSBhbmQgZmlsbCB0aGUgR1N0cmVhbWVyIHdyYXBwZWQgY29udGV4dCB3aXRo
IHRoZSBXZWJraXQncyBzaGFyZWQgb25lLgorICAgIGF1dG8qIHByZXZpb3VzQWN0aXZlQ29udGV4
dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAgIHNoYXJlZENvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmIChnc3RfZ2xfY29udGV4dF9hY3RpdmF0ZShwcml2LT5nbENvbnRl
eHQuZ2V0KCksIFRSVUUpKSB7CisgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsK
KyAgICAgICAgaWYgKCFnc3RfZ2xfY29udGV4dF9maWxsX2luZm8ocHJpdi0+Z2xDb250ZXh0Lmdl
dCgpLCAmZXJyb3Iub3V0UHRyKCkpKQorICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0
byBmaWxsIGluIEdTdHJlYW1lciBjb250ZXh0OiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAg
ICAgZ3N0X2dsX2NvbnRleHRfYWN0aXZhdGUocHJpdi0+Z2xDb250ZXh0LmdldCgpLCBGQUxTRSk7
CisgICAgfSBlbHNlCisgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gYWN0aXZhdGUgR1N0
cmVhbWVyIGNvbnRleHQgJSIgR1NUX1BUUl9GT1JNQVQsIHByaXYtPmdsQ29udGV4dC5nZXQoKSk7
CisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAgICAgICAgcHJldmlvdXNBY3RpdmVD
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitH
UmVmUHRyPEdzdENvbnRleHQ+IHJlcXVlc3RHTENvbnRleHQoV2ViS2l0R0xWaWRlb1NpbmsqIHNp
bmssIGNvbnN0IGNoYXIqIGNvbnRleHRUeXBlKQoreworICAgIFdlYktpdEdMVmlkZW9TaW5rUHJp
dmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CisgICAgaWYgKCFlbnN1cmVHc3RHTENvbnRleHQoc2lu
aykpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFnX3N0cmNtcDAoY29udGV4
dFR5cGUsIEdTVF9HTF9ESVNQTEFZX0NPTlRFWFRfVFlQRSkpIHsKKyAgICAgICAgR3N0Q29udGV4
dCogZGlzcGxheUNvbnRleHQgPSBnc3RfY29udGV4dF9uZXcoR1NUX0dMX0RJU1BMQVlfQ09OVEVY
VF9UWVBFLCBUUlVFKTsKKyAgICAgICAgZ3N0X2NvbnRleHRfc2V0X2dsX2Rpc3BsYXkoZGlzcGxh
eUNvbnRleHQsIHByaXYtPmdsRGlzcGxheS5nZXQoKSk7CisgICAgICAgIHJldHVybiBhZG9wdEdS
ZWYoZGlzcGxheUNvbnRleHQpOworICAgIH0KKworICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRU
eXBlLCAiZ3N0LmdsLmFwcF9jb250ZXh0IikpIHsKKyAgICAgICAgR3N0Q29udGV4dCogYXBwQ29u
dGV4dCA9IGdzdF9jb250ZXh0X25ldygiZ3N0LmdsLmFwcF9jb250ZXh0IiwgVFJVRSk7CisgICAg
ICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0
dXJlKGFwcENvbnRleHQpOworI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEyLCAwKQorICAgICAg
ICBnc3Rfc3RydWN0dXJlX3NldChzdHJ1Y3R1cmUsICJjb250ZXh0IiwgR1NUX1RZUEVfR0xfQ09O
VEVYVCwgcHJpdi0+Z2xDb250ZXh0LmdldCgpLCBudWxscHRyKTsKKyNlbHNlCisgICAgICAgIGdz
dF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQiLCBHU1RfR0xfVFlQRV9DT05URVhU
LCBwcml2LT5nbENvbnRleHQuZ2V0KCksIG51bGxwdHIpOworI2VuZGlmCisgICAgICAgIHJldHVy
biBhZG9wdEdSZWYoYXBwQ29udGV4dCk7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRHTFZpZGVvU2lua0NoYW5nZVN0
YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCit7Cisg
ICAgV2ViS2l0R0xWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfR0xfVklERU9fU0lOSyhlbGVtZW50
KTsKKyAgICBXZWJLaXRHTFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworCisj
aWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTQsIDApCisgICAgR1NUX0RFQlVHX09CSkVDVChlbGVt
ZW50LCAiJXMiLCBnc3Rfc3RhdGVfY2hhbmdlX2dldF9uYW1lKHRyYW5zaXRpb24pKTsKKyNlbmRp
ZgorCisgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdF
X05VTExfVE9fUkVBRFk6CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1JFQURZ
OgorICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6IHsKKyAgICAgICAg
aWYgKCFwcml2LT5nbERpc3BsYXlFbGVtZW50Q29udGV4dCkKKyAgICAgICAgICAgIHByaXYtPmds
RGlzcGxheUVsZW1lbnRDb250ZXh0ID0gcmVxdWVzdEdMQ29udGV4dChzaW5rLCBHU1RfR0xfRElT
UExBWV9DT05URVhUX1RZUEUpOworCisgICAgICAgIGlmIChwcml2LT5nbERpc3BsYXlFbGVtZW50
Q29udGV4dCkKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5U
X0NBU1Qoc2luayksIHByaXYtPmdsRGlzcGxheUVsZW1lbnRDb250ZXh0LmdldCgpKTsKKworICAg
ICAgICBpZiAoIXByaXYtPmdsQXBwRWxlbWVudENvbnRleHQpCisgICAgICAgICAgICBwcml2LT5n
bEFwcEVsZW1lbnRDb250ZXh0ID0gcmVxdWVzdEdMQ29udGV4dChzaW5rLCAiZ3N0LmdsLmFwcF9j
b250ZXh0Iik7CisKKyAgICAgICAgaWYgKHByaXYtPmdsQXBwRWxlbWVudENvbnRleHQpCisgICAg
ICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVF9DQVNUKHNpbmspLCBw
cml2LT5nbEFwcEVsZW1lbnRDb250ZXh0LmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBHU1RfRUxF
TUVOVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUoZWxlbWVudCwgdHJhbnNpdGlv
bik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9nbF92aWRlb19zaW5rX2NsYXNzX2luaXQoV2Vi
S2l0R0xWaWRlb1NpbmtDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RFbGVtZW50Q2xhc3MqIGVsZW1l
bnRDbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKTsKKworICAgIG9iamVjdENsYXNzLT5m
aW5hbGl6ZSA9IHdlYktpdEdMVmlkZW9TaW5rRmluYWxpemU7CisKKyAgICBnc3RfZWxlbWVudF9j
bGFzc19hZGRfcGFkX3RlbXBsYXRlKGVsZW1lbnRDbGFzcywgZ3N0X3N0YXRpY19wYWRfdGVtcGxh
dGVfZ2V0KCZzaW5rVGVtcGxhdGUpKTsKKworICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0
aWNfbWV0YWRhdGEoZWxlbWVudENsYXNzLCAiV2ViS2l0IEdMIHZpZGVvIHNpbmsiLCAiU2luay9W
aWRlbyIsICJSZW5kZXJzIHZpZGVvIiwgIlBoaWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5j
b20+Iik7CisKKyAgICBlbGVtZW50Q2xhc3MtPmNoYW5nZV9zdGF0ZSA9IEdTVF9ERUJVR19GVU5D
UFRSKHdlYktpdEdMVmlkZW9TaW5rQ2hhbmdlU3RhdGUpOworICAgIGdfdHlwZV9jbGFzc19hZGRf
cHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdEdMVmlkZW9TaW5rUHJpdmF0ZSkpOworfQorCit2
b2lkIHdlYktpdEdMVmlkZW9TaW5rU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdlYktpdEdMVmlkZW9T
aW5rKiBzaW5rLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKK3sKKyAgICBX
ZWJLaXRHTFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworCisgICAgcHJpdi0+
bWVkaWFQbGF5ZXJQcml2YXRlID0gcGxheWVyOworICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+
YXBwU2luay5nZXQoKSwgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKCtbXShHc3RFbGVtZW50KiBz
aW5rLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikgLT4gR3N0Rmxvd1JldHVy
biB7CisgICAgICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2Fw
cF9zaW5rX3B1bGxfc2FtcGxlKEdTVF9BUFBfU0lOSyhzaW5rKSkpOworICAgICAgICBwbGF5ZXIt
PnRyaWdnZXJSZXBhaW50KHNhbXBsZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19P
SzsKKyAgICB9KSwgcGxheWVyKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHByaXYtPmFwcFNpbmsu
Z2V0KCksICJuZXctcHJlcm9sbCIsIEdfQ0FMTEJBQ0soK1tdKEdzdEVsZW1lbnQqIHNpbmssIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKSAtPiBHc3RGbG93UmV0dXJuIHsKKyAg
ICAgICAgR1JlZlB0cjxHc3RTYW1wbGU+IHNhbXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3Npbmtf
cHVsbF9wcmVyb2xsKEdTVF9BUFBfU0lOSyhzaW5rKSkpOworICAgICAgICBwbGF5ZXItPnRyaWdn
ZXJSZXBhaW50KHNhbXBsZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKKyAg
ICB9KSwgcGxheWVyKTsKKworICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0
X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocHJpdi0+YXBwU2luay5nZXQoKSwgInNpbmsiKSk7Cisg
ICAgZ3N0X3BhZF9hZGRfcHJvYmUocGFkLmdldCgpLCBzdGF0aWNfY2FzdDxHc3RQYWRQcm9iZVR5
cGU+KEdTVF9QQURfUFJPQkVfVFlQRV9QVVNIIHwgR1NUX1BBRF9QUk9CRV9UWVBFX1FVRVJZX0RP
V05TVFJFQU0gfCBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRkxVU0gpLCBbXSAoR3N0UGFkKiwg
R3N0UGFkUHJvYmVJbmZvKiBpbmZvLCAgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IEdzdFBhZFByb2Jl
UmV0dXJuIHsKKyAgICAgICAgLy8gSW4gc29tZSBwbGF0Zm9ybXMgKGUuZy4gT3Blbk1BWCBvbiB0
aGUgUmFzcGJlcnJ5IFBpKSB3aGVuIGEgcmVzb2x1dGlvbiBjaGFuZ2Ugb2NjdXJzIHRoZQorICAg
ICAgICAvLyBwaXBlbGluZSBoYXMgdG8gYmUgZHJhaW5lZCBiZWZvcmUgYSBmcmFtZSB3aXRoIHRo
ZSBuZXcgcmVzb2x1dGlvbiBjYW4gYmUgZGVjb2RlZC4KKyAgICAgICAgLy8gSW4gdGhpcyBjb250
ZXh0LCBpdCdzIGltcG9ydGFudCB0aGF0IHdlIGRvbid0IGhvbGQgcmVmZXJlbmNlcyB0byBhbnkg
cHJldmlvdXMgZnJhbWUKKyAgICAgICAgLy8gKGUuZy4gbV9zYW1wbGUpIHNvIHRoYXQgZGVjb2Rp
bmcgY2FuIGNvbnRpbnVlLgorICAgICAgICAvLyBXZSBhcmUgYWxzbyBub3Qgc3VwcG9zZWQgdG8g
a2VlcCB0aGUgb3JpZ2luYWwgZnJhbWUgYWZ0ZXIgYSBmbHVzaC4KKyAgICAgICAgaWYgKGluZm8t
PnR5cGUgJiBHU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfRE9XTlNUUkVBTSkgeworICAgICAgICAg
ICAgaWYgKEdTVF9RVUVSWV9UWVBFKEdTVF9QQURfUFJPQkVfSU5GT19RVUVSWShpbmZvKSkgIT0g
R1NUX1FVRVJZX0RSQUlOKQorICAgICAgICAgICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09L
OworICAgICAgICAgICAgR1NUX0RFQlVHKCJBY3RpbmcgdXBvbiBEUkFJTiBxdWVyeSIpOworICAg
ICAgICB9CisgICAgICAgIGlmIChpbmZvLT50eXBlICYgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5U
X0ZMVVNIKSB7CisgICAgICAgICAgICBpZiAoR1NUX0VWRU5UX1RZUEUoR1NUX1BBRF9QUk9CRV9J
TkZPX0VWRU5UKGluZm8pKSAhPSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7CisgICAgICAgICAgICBHU1RfREVCVUcoIkFjdGlu
ZyB1cG9uIGZsdXNoLXN0YXJ0IGV2ZW50Iik7CisgICAgICAgIH0KKworICAgICAgICBhdXRvKiBw
bGF5ZXIgPSBzdGF0aWNfY2FzdDxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqPih1c2VyRGF0
YSk7CisgICAgICAgIHBsYXllci0+Zmx1c2hDdXJyZW50QnVmZmVyKCk7CisgICAgICAgIHJldHVy
biBHU1RfUEFEX1BST0JFX09LOworICAgIH0sIHBsYXllciwgbnVsbHB0cik7Cit9CisKK2Jvb2wg
d2ViS2l0R0xWaWRlb1NpbmtQcm9iZVBsYXRmb3JtKCkKK3sKKyAgICByZXR1cm4gaXNHU3RyZWFt
ZXJQbHVnaW5BdmFpbGFibGUoImFwcCIpICYmIGlzR1N0cmVhbWVyUGx1Z2luQXZhaWxhYmxlKCJv
cGVuZ2wiKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ1NmJjY2FjYjNmOGRlODc2MDdjNjQ1N2YyYjFhNDM3MDM5N2EwZDEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
R0xWaWRlb1NpbmtHU3RyZWFtZXIuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAxOSBJZ2FsaWEsIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVJfR0wpCisK
KyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjsKK30KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdF
QktJVF9UWVBFX0dMX1ZJREVPX1NJTksgICAgICAgICAgICAod2Via2l0X2dsX3ZpZGVvX3Npbmtf
Z2V0X3R5cGUgKCkpCisjZGVmaW5lIFdFQktJVF9HTF9WSURFT19TSU5LKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBXRUJLSVRfVFlQRV9HTF9WSURF
T19TSU5LLCBXZWJLaXRHTFZpZGVvU2luaykpCisjZGVmaW5lIFdFQktJVF9HTF9WSURFT19TSU5L
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJ
VF9UWVBFX0dMX1ZJREVPX1NJTkssIFdlYktpdEdMVmlkZW9TaW5rQ2xhc3MpKQorI2RlZmluZSBX
RUJLSVRfSVNfR0xfVklERU9fU0lOSyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfR0xfVklERU9fU0lOSykpCisjZGVmaW5lIFdFQktJ
VF9JU19HTF9WSURFT19TSU5LX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUg
KChrbGFzcyksIFdFQktJVF9UWVBFX0dMX1ZJREVPX1NJTkspKQorCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0R0xWaWRlb1NpbmsgICAgICAgIFdlYktpdEdMVmlkZW9TaW5rOwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdEdMVmlkZW9TaW5rQ2xhc3MgICBXZWJLaXRHTFZpZGVvU2lua0NsYXNzOwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdEdMVmlkZW9TaW5rUHJpdmF0ZSBXZWJLaXRHTFZpZGVvU2lua1By
aXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0R0xWaWRlb1NpbmsgeworICAgIEdzdEJpbiBwYXJlbnQ7
CisKKyAgICBXZWJLaXRHTFZpZGVvU2lua1ByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dl
YktpdEdMVmlkZW9TaW5rQ2xhc3MgeworICAgIEdzdEJpbkNsYXNzIHBhcmVudENsYXNzOworfTsK
KworR1R5cGUgd2Via2l0X2dsX3ZpZGVvX3NpbmtfZ2V0X3R5cGUodm9pZCk7CisKK2Jvb2wgd2Vi
S2l0R0xWaWRlb1NpbmtQcm9iZVBsYXRmb3JtKCk7Cit2b2lkIHdlYktpdEdMVmlkZW9TaW5rU2V0
TWVkaWFQbGF5ZXJQcml2YXRlKFdlYktpdEdMVmlkZW9TaW5rKiwgV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyKik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBFTkFCTEUo
VklERU8pICYmIFVTRShHU1RSRUFNRVJfR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAK
aW5kZXggYjE1ZjdmMzI4MDE5MTBjOGQ0NmE5MjA4MjYyYTlkMzhkMTZhMzgyNy4uZGE1MDI2Mjk2
MTFiMzNjMjc3NTk5ZjEzMDg1YjRhYTE5OGNkNmM0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVh
bWVyLmNwcApAQCAtNDUsNiArNDUsMjcgQEAgdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0
RWxlbWVudD4oR3N0RWxlbWVudCogcHRyKQogICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7
CiB9CiAKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RQbHVnaW4+IGFkb3B0R1JlZihHc3RQbHVn
aW4qIHB0cikKK3sKKyAgICBBU1NFUlQoIXB0ciB8fCAhZ19vYmplY3RfaXNfZmxvYXRpbmcocHRy
KSk7CisgICAgcmV0dXJuIEdSZWZQdHI8R3N0UGx1Z2luPihwdHIsIEdSZWZQdHJBZG9wdCk7Cit9
CisKK3RlbXBsYXRlIDw+IEdzdFBsdWdpbiogcmVmR1B0cjxHc3RQbHVnaW4+KEdzdFBsdWdpbiog
cHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfcmVmX3NpbmsoR1NUX09C
SkVDVChwdHIpKTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVy
ZWZHUHRyPEdzdFBsdWdpbj4oR3N0UGx1Z2luKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAg
ICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQorCiB0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFBh
ZD4gYWRvcHRHUmVmKEdzdFBhZCogcHRyKQogewogICAgIEFTU0VSVCghcHRyIHx8ICFnX29iamVj
dF9pc19mbG9hdGluZyhwdHIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oCmluZGV4IGExOTY1
ZDQ1ODQyYWExYmEzODAyNDYyODljMjFkN2VkMWE2MjJmZTUuLjFkYzA1MjlhMTFhNDE1MjljZDY4
NWQwMDZhODBhMTdjMmE4N2YxMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaApAQCAtMzQs
NiArMzQsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMQ29udGV4dCBHc3RHTENvbnRleHQ7CiAK
IG5hbWVzcGFjZSBXVEYgewogCit0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0UGx1Z2luPiBhZG9wdEdS
ZWYoR3N0UGx1Z2luKiBwdHIpOwordGVtcGxhdGU8PiBHc3RQbHVnaW4qIHJlZkdQdHI8R3N0UGx1
Z2luPihHc3RQbHVnaW4qIHB0cik7Cit0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPEdzdFBsdWdp
bj4oR3N0UGx1Z2luKiBwdHIpOworCiB0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0RWxlbWVudD4gYWRv
cHRHUmVmKEdzdEVsZW1lbnQqIHB0cik7CiB0ZW1wbGF0ZTw+IEdzdEVsZW1lbnQqIHJlZkdQdHI8
R3N0RWxlbWVudD4oR3N0RWxlbWVudCogcHRyKTsKIHRlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8
R3N0RWxlbWVudD4oR3N0RWxlbWVudCogcHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAK
aW5kZXggMjA5MTc3NjAzYTk4NzQ1YjVlZDllYjI4MmU4YzExNGEyMDE5M2IxNC4uMDg5YmY3NGY3
NGVjNjRhNmY4MDQ0NWMzNTNkZGEzNTEyYWIzNTRkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1v
bi5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2lmIFVTRShHU1RSRUFNRVIpCiAKKyNpbmNsdWRl
ICJHTFZpZGVvU2lua0dTdHJlYW1lci5oIgogI2luY2x1ZGUgIkdzdEFsbG9jYXRvckZhc3RNYWxs
b2MuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBA
IC0yOTYsNiArMjk3LDkgQEAgYm9vbCBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJL
aXRFbGVtZW50cygpCiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAgICAgIGdzdF9lbGVtZW50X3Jl
Z2lzdGVyKDAsICJ3ZWJraXR3ZWJzcmMiLCBHU1RfUkFOS19QUklNQVJZICsgMTAwLCBXRUJLSVRf
VFlQRV9XRUJfU1JDKTsKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorICAgICAgICBnc3RfZWxlbWVu
dF9yZWdpc3RlcigwLCAid2Via2l0Z2x2aWRlb3NpbmsiLCBHU1RfUkFOS19QUklNQVJZLCBXRUJL
SVRfVFlQRV9HTF9WSURFT19TSU5LKTsKKyNlbmRpZgogI2VuZGlmCiAgICAgfSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC0zNzksNiArMzgzLDE0IEBAIFJlZjxTaGFyZWRCdWZmZXI+IEdzdE1hcHBl
ZEJ1ZmZlcjo6Y3JlYXRlU2hhcmVkQnVmZmVyKCkKICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpj
cmVhdGUoKnRoaXMpOwogfQogCitib29sIGlzR1N0cmVhbWVyUGx1Z2luQXZhaWxhYmxlKGNvbnN0
IGNoYXIqIG5hbWUpCit7CisgICAgR1JlZlB0cjxHc3RQbHVnaW4+IHBsdWdpbiA9IGFkb3B0R1Jl
Zihnc3RfcmVnaXN0cnlfZmluZF9wbHVnaW4oZ3N0X3JlZ2lzdHJ5X2dldCgpLCBuYW1lKSk7Cisg
ICAgaWYgKCFwbHVnaW4pCisgICAgICAgIEdTVF9XQVJOSU5HKCJQbHVnaW4gJXMgbm90IGZvdW5k
LiBQbGVhc2UgY2hlY2sgeW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIiwgbmFtZSk7CisgICAg
cmV0dXJuIHBsdWdpbjsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFt
ZXJDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9H
U3RyZWFtZXJDb21tb24uaAppbmRleCBjODEzYjc4YzMyMjlmOTg0ZWU5NDVmMDRiNGRiYTkwY2Fl
MmMwMzVjLi45NjljN2MzMzRiOTUwM2EyMWE3MmUzNzlmMTM3YzI3YTZiOTE4MTI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dTdHJlYW1lckNvbW1vbi5oCkBAIC0yMjEsNiArMjIxLDggQEAgdm9pZCBkaXNjb25uZWN0U2lt
cGxlQnVzTWVzc2FnZUNhbGxiYWNrKEdzdEVsZW1lbnQqIHBpcGVsaW5lKTsKIAogZW51bSBjbGFz
cyBHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybSB7IElteFZQVSwgVmlkZW80TGludXggfTsKIAorYm9v
bCBpc0dTdHJlYW1lclBsdWdpbkF2YWlsYWJsZShjb25zdCBjaGFyKiBuYW1lKTsKKwogfQogCiAj
aWZuZGVmIEdTVF9CVUZGRVJfRFRTX09SX1BUUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCBlMjI0OWNkYzk2NzRjNzUxMmUyZWM3YjEyZmIx
NmI5YjQyYmY5NzdiLi41NzllZDk5ZjE3MzNkMmQ4MWQ3MDM3YzMwOTUwNWFkZTFmZDU3MjIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAt
MTIzLDQwICsxMjMsMTAgQEAKICNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCiAKICNpZiBV
U0UoR1NUUkVBTUVSX0dMKQotI2RlZmluZSBURVhUVVJFX0NPUElFUl9DT0xPUl9DT05WRVJUX0ZM
QUcgVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyOjpDb2xvckNvbnZlcnNpb246Ok5vQ29udmVy
dAotI2RlZmluZSBHU1RfR0xfQ0FQU19GT1JNQVQgInsgUkdCeCwgUkdCQSwgSTQyMCwgWTQ0NCwg
WVYxMiwgWTQxQiwgWTQyQiwgTlYxMiwgTlYyMSwgVlVZQSB9IgotCi0jaW5jbHVkZSA8Z3N0L2Fw
cC9nc3RhcHBzaW5rLmg+Ci0KLSNpbmNsdWRlICJHTENvbnRleHQuaCIKLSNpZiBVU0UoR0xYKQot
I2luY2x1ZGUgIkdMQ29udGV4dEdMWC5oIgotI2luY2x1ZGUgPGdzdC9nbC94MTEvZ3N0Z2xkaXNw
bGF5X3gxMS5oPgotI2VuZGlmCi0KLSNpZiBVU0UoRUdMKQotI2luY2x1ZGUgIkdMQ29udGV4dEVH
TC5oIgotI2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0Z2xkaXNwbGF5X2VnbC5oPgotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShYMTEpCi0jaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5WDExLmgiCi0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKFdBWUxBTkQpCi0jaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5V2F5
bGFuZC5oIgotI2VuZGlmCi0KLSNpZiBVU0UoV1BFX1JFTkRFUkVSKQotI2luY2x1ZGUgIlBsYXRm
b3JtRGlzcGxheUxpYldQRS5oIgotI2VuZGlmCi0KLS8vIGdzdGdsYXBpLmggbWF5IGluY2x1ZGUg
ZWdscGxhdGZvcm0uaCBhbmQgaXQgaW5jbHVkZXMgWC5oLCB3aGljaAotLy8gZGVmaW5lcyBOb25l
LCBicmVha2luZyBNZWRpYVBsYXllcjo6Tm9uZSBlbnVtCi0jaWYgUExBVEZPUk0oWDExKSAmJiBH
U1RfR0xfSEFWRV9QTEFURk9STV9FR0wKLSN1bmRlZiBOb25lCi0jZW5kaWYgLy8gUExBVEZPUk0o
WDExKSAmJiBHU1RfR0xfSEFWRV9QTEFURk9STV9FR0wKKyNpbmNsdWRlICJHTFZpZGVvU2lua0dT
dHJlYW1lci5oIgogI2luY2x1ZGUgIlZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lci5oIgorCisj
ZGVmaW5lIFRFWFRVUkVfQ09QSUVSX0NPTE9SX0NPTlZFUlRfRkxBRyBWaWRlb1RleHR1cmVDb3Bp
ZXJHU3RyZWFtZXI6OkNvbG9yQ29udmVyc2lvbjo6Tm9Db252ZXJ0CiAjZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUl9HTCkKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKQEAgLTQ1OSwxNSArNDI5
LDggQEAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyKCkKIAogICAgIG1fbm90aWZpZXItPmludmFsaWRhdGUoKTsKIAotICAgIGlmIChtX3Zp
ZGVvU2luaykgeworICAgIGlmIChtX3ZpZGVvU2luaykKICAgICAgICAgZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fdmlkZW9TaW5rLmdldCgpLCBHX1NJR05BTF9NQVRDSF9E
QVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKLSNpZiBVU0UoR1NUUkVBTUVSX0dM
KQotICAgICAgICBpZiAoR1NUX0lTX0JJTihtX3ZpZGVvU2luay5nZXQoKSkpIHsKLSAgICAgICAg
ICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gYXBwc2luayA9IGFkb3B0R1JlZihnc3RfYmluX2dldF9i
eV9uYW1lKEdTVF9CSU5fQ0FTVChtX3ZpZGVvU2luay5nZXQoKSksICJ3ZWJraXQtZ2wtdmlkZW8t
c2luayIpKTsKLSAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0
YShhcHBzaW5rLmdldCgpLCB0aGlzKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQogCiAgICAg
aWYgKG1fdm9sdW1lRWxlbWVudCkKICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9tYXRjaGVkKG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwg
MCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7CkBAIC01NzQsOSArNTM3LDYgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlJiBzdHJlYW0p
CiAgICAgbG9hZEZ1bGwoU3RyaW5nKCJtZWRpYXN0cmVhbTovLyIpICsgc3RyZWFtLmlkKCksIHBp
cGVsaW5lTmFtZSk7CiAgICAgc3luY09uQ2xvY2soZmFsc2UpOwogCi0jaWYgVVNFKEdTVFJFQU1F
Ul9HTCkKLSAgICBlbnN1cmVHTFZpZGVvU2lua0NvbnRleHQoKTsKLSNlbmRpZgogICAgIG1fcGxh
eWVyLT5wbGF5KCk7CiB9CiAjZW5kaWYKQEAgLTExODIsMTEgKzExNDIsNiBAQCBib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVTdGF0ZShHc3RTdGF0ZSBuZXdT
dGF0ZSkKICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDaGFuZ2luZyBzdGF0ZSBj
aGFuZ2UgdG8gJXMgZnJvbSAlcyB3aXRoICVzIHBlbmRpbmciLCBnc3RfZWxlbWVudF9zdGF0ZV9n
ZXRfbmFtZShuZXdTdGF0ZSksCiAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKGN1
cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKIAotI2lm
IFVTRShHU1RSRUFNRVJfR0wpCi0gICAgaWYgKGN1cnJlbnRTdGF0ZSA8PSBHU1RfU1RBVEVfUkVB
RFkgJiYgbmV3U3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkKLSAgICAgICAgZW5zdXJlR0xWaWRl
b1NpbmtDb250ZXh0KCk7Ci0jZW5kaWYKLQogICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHNldFN0
YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIG5ld1N0
YXRlKTsKICAgICBHc3RTdGF0ZSBwYXVzZWRPclBsYXlpbmcgPSBuZXdTdGF0ZSA9PSBHU1RfU1RB
VEVfUExBWUlORyA/IEdTVF9TVEFURV9QQVVTRUQgOiBHU1RfU1RBVEVfUExBWUlORzsKICAgICBp
ZiAoY3VycmVudFN0YXRlICE9IHBhdXNlZE9yUGxheWluZyAmJiBzZXRTdGF0ZVJlc3VsdCA9PSBH
U1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCkBAIC0xNzc4LDE0ICsxNzMzLDYgQEAgYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1l
c3NhZ2UpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotI2lmIFVTRShHU1RSRUFNRVJf
R0wpCi0gICAgR1JlZlB0cjxHc3RDb250ZXh0PiBlbGVtZW50Q29udGV4dCA9IGFkb3B0R1JlZihy
ZXF1ZXN0R0xDb250ZXh0KGNvbnRleHRUeXBlKSk7Ci0gICAgaWYgKGVsZW1lbnRDb250ZXh0KSB7
Ci0gICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1lc3NhZ2UtPnNy
YyksIGVsZW1lbnRDb250ZXh0LmdldCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
I2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCi0KICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElB
KQogICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRUeXBlLCAiZHJtLXByZWZlcnJlZC1kZWNyeXB0
aW9uLXN5c3RlbS1pZCIpKSB7CiAgICAgICAgIGlmIChpc01haW5UaHJlYWQoKSkgewpAQCAtMTgy
OSwxMjUgKzE3NzYsMTAgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRs
ZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi1Hc3RDb250ZXh0KiBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnJlcXVlc3RHTENvbnRleHQoY29uc3QgY2hhciogY29udGV4dFR5cGUp
Ci17Ci0gICAgaWYgKCFlbnN1cmVHc3RHTENvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgR1NUX0dMX0RJU1BMQVlfQ09O
VEVYVF9UWVBFKSkgewotICAgICAgICBHc3RDb250ZXh0KiBkaXNwbGF5Q29udGV4dCA9IGdzdF9j
b250ZXh0X25ldyhHU1RfR0xfRElTUExBWV9DT05URVhUX1RZUEUsIFRSVUUpOwotICAgICAgICBn
c3RfY29udGV4dF9zZXRfZ2xfZGlzcGxheShkaXNwbGF5Q29udGV4dCwgZ3N0R0xEaXNwbGF5KCkp
OwotICAgICAgICByZXR1cm4gZGlzcGxheUNvbnRleHQ7Ci0gICAgfQotCi0gICAgaWYgKCFnX3N0
cmNtcDAoY29udGV4dFR5cGUsICJnc3QuZ2wuYXBwX2NvbnRleHQiKSkgewotICAgICAgICBHc3RD
b250ZXh0KiBhcHBDb250ZXh0ID0gZ3N0X2NvbnRleHRfbmV3KCJnc3QuZ2wuYXBwX2NvbnRleHQi
LCBUUlVFKTsKLSAgICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93
cml0YWJsZV9zdHJ1Y3R1cmUoYXBwQ29udGV4dCk7Ci0jaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwg
MTIsIDApCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQiLCBH
U1RfVFlQRV9HTF9DT05URVhULCBnc3RHTENvbnRleHQoKSwgbnVsbHB0cik7Ci0jZWxzZQotICAg
ICAgICBnc3Rfc3RydWN0dXJlX3NldChzdHJ1Y3R1cmUsICJjb250ZXh0IiwgR1NUX0dMX1RZUEVf
Q09OVEVYVCwgZ3N0R0xDb250ZXh0KCksIG51bGxwdHIpOwotI2VuZGlmCi0gICAgICAgIHJldHVy
biBhcHBDb250ZXh0OwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5zdXJlR3N0R0xDb250ZXh0KCkKLXsKLSAgICBp
ZiAobV9nbENvbnRleHQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byYgc2hhcmVk
RGlzcGxheSA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCk7
Ci0KLSAgICAvLyBUaGUgZmxvYXRpbmcgcmVmIHJlbW92YWwgc3VwcG9ydCB3YXMgYWRkZWQgaW4g
aHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzA2Mi4KLSAgICBi
b29sIHNob3VsZEFkb3B0UmVmID0gd2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE0LCAwKTsKLSAg
ICBpZiAoIW1fZ2xEaXNwbGF5KSB7Ci0jaWYgUExBVEZPUk0oWDExKQotI2lmIFVTRShHTFgpCi0g
ICAgICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpKSB7Ci0gICAg
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGluZyBYMTEgc2hhcmVk
IEdMIGRpc3BsYXkiKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKLSAgICAgICAg
ICAgICAgICBtX2dsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlz
cGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNo
YXJlZERpc3BsYXkpLm5hdGl2ZSgpKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIG1fZ2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193
aXRoX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5u
YXRpdmUoKSkpOwotICAgICAgICB9Ci0jZWxpZiBVU0UoRUdMKQotICAgICAgICBpZiAoaXM8UGxh
dGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiQ3JlYXRpbmcgWDExIHNoYXJlZCBFR0wgZGlzcGxheSIpOwot
ICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQotICAgICAgICAgICAgICAgIG1fZ2xEaXNw
bGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0
aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkp
LmVnbERpc3BsYXkoKSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2ds
RGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xf
ZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVnbERp
c3BsYXkoKSkpOwotICAgICAgICB9Ci0jZW5kaWYKLSNlbmRpZgogCi0jaWYgUExBVEZPUk0oV0FZ
TEFORCkKLSAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3Bs
YXkpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGlu
ZyBXYXlsYW5kIHNoYXJlZCBkaXNwbGF5Iik7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRS
ZWYpCi0gICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BM
QVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRm
b3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZ
KGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9y
bURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKLSAgICAgICAg
fQotI2VuZGlmCi0KLSNpZiBVU0UoV1BFX1JFTkRFUkVSKQotICAgICAgICBpZiAoaXM8UGxhdGZv
cm1EaXNwbGF5TGliV1BFPihzaGFyZWREaXNwbGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiQ3JlYXRpbmcgV1BFIHNoYXJlZCBFR0wgZGlzcGxheSIpOwot
ICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQotICAgICAgICAgICAgICAgIG1fZ2xEaXNw
bGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0
aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3Bs
YXkpLmVnbERpc3BsYXkoKSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBt
X2dsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9l
Z2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkp
LmVnbERpc3BsYXkoKSkpOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBBU1NFUlQobV9n
bERpc3BsYXkpOwotICAgIH0KLQotICAgIEdMQ29udGV4dCogd2Via2l0Q29udGV4dCA9IHNoYXJl
ZERpc3BsYXkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIC8vIEVHTCBhbmQgR0xYIGFyZSBtdXR1
YWxseSBleGNsdXNpdmUsIG5vIG5lZWQgZm9yIGlmZGVmcyBoZXJlLgotICAgIEdzdEdMUGxhdGZv
cm0gZ2xQbGF0Zm9ybSA9IHdlYmtpdENvbnRleHQtPmlzRUdMQ29udGV4dCgpID8gR1NUX0dMX1BM
QVRGT1JNX0VHTCA6IEdTVF9HTF9QTEFURk9STV9HTFg7Ci0KLSNpZiBVU0UoT1BFTkdMX0VTKQot
ICAgIEdzdEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQSV9HTEVTMjsKLSNlbGlmIFVTRShPUEVOR0wp
Ci0gICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1RfR0xfQVBJX09QRU5HTDsKLSNlbHNlCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QgY29udGV4dEhhbmRsZSA9IHdlYmtpdENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAg
IGlmICghY29udGV4dEhhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHNo
b3VsZEFkb3B0UmVmKQotICAgICAgICBtX2dsQ29udGV4dCA9IGFkb3B0R1JlZihnc3RfZ2xfY29u
dGV4dF9uZXdfd3JhcHBlZChtX2dsRGlzcGxheS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWlu
dHB0cj4oY29udGV4dEhhbmRsZSksIGdsUGxhdGZvcm0sIGdsQVBJKSk7Ci0gICAgZWxzZQotICAg
ICAgICBtX2dsQ29udGV4dCA9IGdzdF9nbF9jb250ZXh0X25ld193cmFwcGVkKG1fZ2xEaXNwbGF5
LmdldCgpLCByZWludGVycHJldF9jYXN0PGd1aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQbGF0
Zm9ybSwgZ2xBUEkpOwotCi0gICAgLy8gQWN0aXZhdGUgYW5kIGZpbGwgdGhlIEdTdHJlYW1lciB3
cmFwcGVkIGNvbnRleHQgd2l0aCB0aGUgV2Via2l0J3Mgc2hhcmVkIG9uZS4KLSAgICBhdXRvIHBy
ZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwotICAgIHdlYmtpdENv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChnc3RfZ2xfY29udGV4dF9hY3Rp
dmF0ZShtX2dsQ29udGV4dC5nZXQoKSwgVFJVRSkpIHsKLSAgICAgICAgR1VuaXF1ZU91dFB0cjxH
RXJyb3I+IGVycm9yOwotICAgICAgICBpZiAoIWdzdF9nbF9jb250ZXh0X2ZpbGxfaW5mbyhtX2ds
Q29udGV4dC5nZXQoKSwgJmVycm9yLm91dFB0cigpKSkKLSAgICAgICAgICAgIEdTVF9XQVJOSU5H
KCJGYWlsZWQgdG8gZmlsbCBpbiBHU3RyZWFtZXIgY29udGV4dDogJXMiLCBlcnJvci0+bWVzc2Fn
ZSk7Ci0gICAgICAgIGdzdF9nbF9jb250ZXh0X2FjdGl2YXRlKG1fZ2xDb250ZXh0LmdldCgpLCBG
QUxTRSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gYWN0aXZh
dGUgR1N0cmVhbWVyIGNvbnRleHQgJSIgR1NUX1BUUl9GT1JNQVQsIG1fZ2xDb250ZXh0LmdldCgp
KTsKLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2
ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAg
R1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiVW5oYW5kbGVkICVzIG5lZWQtY29udGV4dCBt
ZXNzYWdlIGZvciAlcyIsIGNvbnRleHRUeXBlLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdl
KSk7CisgICAgcmV0dXJuIGZhbHNlOwogfQotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCiAK
IC8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHZpZGVvCiBGbG9hdFNpemUgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSgpIGNvbnN0CkBAIC0zMzU5LDIwICszMTkxLDYg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlcGFpbnRDYW5jZWxsZWRDYWxs
YmFjayhNZWRpYVBsYXllclByaXZhdGVHU3QKIH0KIAogI2lmIFVTRShHU1RSRUFNRVJfR0wpCi1H
c3RGbG93UmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3U2FtcGxlQ2FsbGJh
Y2soR3N0RWxlbWVudCogc2luaywgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIp
Ci17Ci0gICAgR1JlZlB0cjxHc3RTYW1wbGU+IHNhbXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3Np
bmtfcHVsbF9zYW1wbGUoR1NUX0FQUF9TSU5LKHNpbmspKSk7Ci0gICAgcGxheWVyLT50cmlnZ2Vy
UmVwYWludChzYW1wbGUuZ2V0KCkpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotR3N0
Rmxvd1JldHVybiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1ByZXJvbGxDYWxsYmFj
ayhHc3RFbGVtZW50KiBzaW5rLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikK
LXsKLSAgICBHUmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lu
a19wdWxsX3ByZXJvbGwoR1NUX0FQUF9TSU5LKHNpbmspKSk7Ci0gICAgcGxheWVyLT50cmlnZ2Vy
UmVwYWludChzYW1wbGUuZ2V0KCkpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQogdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmZsdXNoQ3VycmVudEJ1ZmZlcigpCiB7CiAg
ICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4KTsKQEAgLTM1OTUs
MTE4ICszNDEzLDE3IEBAIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6bW92aWVMb2FkVHlwZSgpIGNvbnN0CiB9CiAKICNpZiBVU0UoR1NUUkVB
TUVSX0dMKQotR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVH
TEFwcFNpbmsoKQotewotICAgIEdzdEVsZW1lbnQqIGFwcHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UoImFwcHNpbmsiLCAid2Via2l0LWdsLXZpZGVvLXNpbmsiKTsKLSAgICBpZiAoIWFw
cHNpbmspCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZ19vYmplY3Rfc2V0KGFwcHNp
bmssICJlbmFibGUtbGFzdC1zYW1wbGUiLCBGQUxTRSwgImVtaXQtc2lnbmFscyIsIFRSVUUsICJt
YXgtYnVmZmVycyIsIDEsIG51bGxwdHIpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoYXBwc2luaywg
Im5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKG5ld1NhbXBsZUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAg
Z19zaWduYWxfY29ubmVjdChhcHBzaW5rLCAibmV3LXByZXJvbGwiLCBHX0NBTExCQUNLKG5ld1By
ZXJvbGxDYWxsYmFjayksIHRoaXMpOwotCi0gICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0
R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChhcHBzaW5rLCAic2luayIpKTsKLSAgICBn
c3RfcGFkX2FkZF9wcm9iZShwYWQuZ2V0KCksIHN0YXRpY19jYXN0PEdzdFBhZFByb2JlVHlwZT4o
R1NUX1BBRF9QUk9CRV9UWVBFX1BVU0ggfCBHU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfRE9XTlNU
UkVBTSB8IEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9GTFVTSCksIFtdIChHc3RQYWQqLCBHc3RQ
YWRQcm9iZUluZm8qIGluZm8sICBncG9pbnRlciB1c2VyRGF0YSkgLT4gR3N0UGFkUHJvYmVSZXR1
cm4gewotICAgICAgICAvLyBJbiBzb21lIHBsYXRmb3JtcyAoZS5nLiBPcGVuTUFYIG9uIHRoZSBS
YXNwYmVycnkgUGkpIHdoZW4gYSByZXNvbHV0aW9uIGNoYW5nZSBvY2N1cnMgdGhlCi0gICAgICAg
IC8vIHBpcGVsaW5lIGhhcyB0byBiZSBkcmFpbmVkIGJlZm9yZSBhIGZyYW1lIHdpdGggdGhlIG5l
dyByZXNvbHV0aW9uIGNhbiBiZSBkZWNvZGVkLgotICAgICAgICAvLyBJbiB0aGlzIGNvbnRleHQs
IGl0J3MgaW1wb3J0YW50IHRoYXQgd2UgZG9uJ3QgaG9sZCByZWZlcmVuY2VzIHRvIGFueSBwcmV2
aW91cyBmcmFtZQotICAgICAgICAvLyAoZS5nLiBtX3NhbXBsZSkgc28gdGhhdCBkZWNvZGluZyBj
YW4gY29udGludWUuCi0gICAgICAgIC8vIFdlIGFyZSBhbHNvIG5vdCBzdXBwb3NlZCB0byBrZWVw
IHRoZSBvcmlnaW5hbCBmcmFtZSBhZnRlciBhIGZsdXNoLgotICAgICAgICBpZiAoaW5mby0+dHlw
ZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9ET1dOU1RSRUFNKSB7Ci0gICAgICAgICAgICBp
ZiAoR1NUX1FVRVJZX1RZUEUoR1NUX1BBRF9QUk9CRV9JTkZPX1FVRVJZKGluZm8pKSAhPSBHU1Rf
UVVFUllfRFJBSU4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci0g
ICAgICAgICAgICBHU1RfREVCVUcoIkFjdGluZyB1cG9uIERSQUlOIHF1ZXJ5Iik7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGluZm8tPnR5cGUgJiBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRkxV
U0gpIHsKLSAgICAgICAgICAgIGlmIChHU1RfRVZFTlRfVFlQRShHU1RfUEFEX1BST0JFX0lORk9f
RVZFTlQoaW5mbykpICE9IEdTVF9FVkVOVF9GTFVTSF9TVEFSVCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLSAgICAgICAgICAgIEdTVF9ERUJVRygiQWN0aW5nIHVw
b24gZmx1c2gtc3RhcnQgZXZlbnQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIHBsYXll
ciA9IHN0YXRpY19jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcio+KHVzZXJEYXRhKTsK
LSAgICAgICAgcGxheWVyLT5mbHVzaEN1cnJlbnRCdWZmZXIoKTsKLSAgICAgICAgcmV0dXJuIEdT
VF9QQURfUFJPQkVfT0s7Ci0gICAgfSwgdGhpcywgbnVsbHB0cik7Ci0KLSAgICByZXR1cm4gYXBw
c2luazsKLX0KLQogR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVh
dGVWaWRlb1NpbmtHTCgpCiB7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gVFJVRTsKLSAgICBHc3RF
bGVtZW50KiB2aWRlb1NpbmsgPSBnc3RfYmluX25ldyhudWxscHRyKTsKLSAgICBHc3RFbGVtZW50
KiB1cGxvYWQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImdsdXBsb2FkIiwgbnVsbHB0cik7
Ci0gICAgR3N0RWxlbWVudCogY29sb3Jjb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtl
KCJnbGNvbG9yY29udmVydCIsIG51bGxwdHIpOwotICAgIEdzdEVsZW1lbnQqIGFwcHNpbmsgPSBj
cmVhdGVHTEFwcFNpbmsoKTsKLQotICAgIC8vIGdsc2lua2JpbiBpcyBub3QgdXNlZCBiZWNhdXNl
IGl0IGluY2x1ZGVzIGdsY29sb3Jjb252ZXJ0IHdoaWNoIG9ubHkgcHJvY2VzcyBSR0JBLAotICAg
IC8vIGJ1dCB3ZSBjYW4gZGlzcGxheSBZVVYgZm9ybWF0cyB0b28uCi0KLSAgICBpZiAoIWFwcHNp
bmsgfHwgIXVwbG9hZCB8fCAhY29sb3Jjb252ZXJ0KSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HKCJG
YWlsZWQgdG8gY3JlYXRlIEdzdEdMIGVsZW1lbnRzIik7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5y
ZWYodmlkZW9TaW5rKTsKLQotICAgICAgICBpZiAodXBsb2FkKQotICAgICAgICAgICAgZ3N0X29i
amVjdF91bnJlZih1cGxvYWQpOwotICAgICAgICBpZiAoY29sb3Jjb252ZXJ0KQotICAgICAgICAg
ICAgZ3N0X29iamVjdF91bnJlZihjb2xvcmNvbnZlcnQpOwotICAgICAgICBpZiAoYXBwc2luaykK
LSAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoYXBwc2luayk7Ci0KLSAgICAgICAgZ193YXJu
aW5nKCJXZWJLaXQgd2Fzbid0IGFibGUgdG8gZmluZCB0aGUgR1N0cmVhbWVyIG9wZW5nbCBwbHVn
aW4uIEhhcmR3YXJlLWFjY2VsZXJhdGVkIHplcm8tY29weSB2aWRlbyByZW5kZXJpbmcgY2FuJ3Qg
YmUgZW5hYmxlZCB3aXRob3V0IHRoaXMgcGx1Z2luLiIpOworICAgIGlmICghd2ViS2l0R0xWaWRl
b1NpbmtQcm9iZVBsYXRmb3JtKCkpIHsKKyAgICAgICAgZ193YXJuaW5nKCJXZWJLaXQgd2Fzbid0
IGFibGUgdG8gZmluZCB0aGUgR0wgdmlkZW8gc2luayBkZXBlbmRlbmNpZXMuIEhhcmR3YXJlLWFj
Y2VsZXJhdGVkIHplcm8tY29weSB2aWRlbyByZW5kZXJpbmcgY2FuJ3QgYmUgZW5hYmxlZCB3aXRo
b3V0IHRoaXMgcGx1Z2luLiIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAg
ICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4odmlkZW9TaW5rKSwgdXBsb2FkLCBjb2xvcmNvbnZl
cnQsIGFwcHNpbmssIG51bGxwdHIpOwotCi0gICAgLy8gV29ya2Fyb3VuZCB1bnRpbCB3ZSBjYW4g
ZGVwZW5kIG9uIEdTdHJlYW1lciAxLjE2LjIuCi0gICAgLy8gaHR0cHM6Ly9naXRsYWIuZnJlZWRl
c2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYXNlL2NvbW1pdC84ZDMyZGUwOTA1NTRj
ZjI5ZmUzNTlmODNhYTQ2MDAwYmE2NThhNjkzCi0gICAgLy8gRm9yY2luZyBhIGNvbG9yIGNvbnZl
cnNpb24gdG8gUkdCQSBoZXJlIGFsbG93cyBnbHVwbG9hZCB0byBpbnRlcm5hbGx5IHVzZQotICAg
IC8vIGFuIHVwbG9hZGVyIHRoYXQgYWRkcyBhIFZpZGVvTWV0YSwgdGhyb3VnaCB0aGUgVGV4dHVy
ZVVwbG9hZE1ldGEgY2FwcwotICAgIC8vIGZlYXR1cmUsIHdpdGhvdXQgbmVlZGluZyB0aGUgcGF0
Y2ggYWJvdmUuIEhvd2V2ZXIgdGhpcyBzcGVjaWZpYyBjYXBzCi0gICAgLy8gZmVhdHVyZSBpcyBn
b2luZyB0byBiZSByZW1vdmVkIGZyb20gR1N0cmVhbWVyIHNvIGl0IGlzIGNvbnNpZGVyZWQgYQot
ICAgIC8vIHNob3J0LXRlcm0gd29ya2Fyb3VuZC4gVGhpcyBjb2RlIHBhdGggbW9zdCBsaWtlbHkg
d2lsbCBoYXZlIGEgbmVnYXRpdmUKLSAgICAvLyBwZXJmb3JtYW5jZSBpbXBhY3Qgb24gZW1iZWRk
ZWQgcGxhdGZvcm1zIGFzIHdlbGwuIERvd25zdHJlYW0gZW1iZWRkZXJzCi0gICAgLy8gYXJlIGhp
Z2hseSBlbmNvdXJhZ2VkIHRvIGNoZXJyeS1waWNrIHRoZSBwYXRjaCBsaW5rZWQgYWJvdmUgaW4g
dGhlaXIgQlNQCi0gICAgLy8gYW5kIHNldCB0aGUgV0VCS0lUX0dTVF9OT19SR0JBX0NPTlZFUlNJ
T04gZW52aXJvbm1lbnQgdmFyaWFibGUgdW50aWwKLSAgICAvLyBHU3RyZWFtZXIgMS4xNi4yIGlz
IHJlbGVhc2VkLgotICAgIC8vIFNlZSBhbHNvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDE0MjIKLSAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHM7Ci0gICAgaWYgKHdl
YmtpdEdzdENoZWNrVmVyc2lvbigxLCAxNiwgMikgfHwgZ2V0ZW52KCJXRUJLSVRfR1NUX05PX1JH
QkFfQ09OVkVSU0lPTiIpKQotICAgICAgICBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2Zyb21f
c3RyaW5nKCJ2aWRlby94LXJhdywgZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfR0xfQ0FQU19GT1JN
QVQpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJG
b3JjaW5nIFJHQkEgYXMgR1N0cmVhbWVyIGlzIG5vdCBuZXcgZW5vdWdoLiIpOwotICAgICAgICBj
YXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2Zyb21fc3RyaW5nKCJ2aWRlby94LXJhdywgZm9ybWF0
ID0gKHN0cmluZykgUkdCQSIpKTsKLSAgICB9Ci0gICAgZ3N0X2NhcHNfc2V0X2ZlYXR1cmVzKGNh
cHMuZ2V0KCksIDAsIGdzdF9jYXBzX2ZlYXR1cmVzX25ldyhHU1RfQ0FQU19GRUFUVVJFX01FTU9S
WV9HTF9NRU1PUlksIG51bGxwdHIpKTsKLSAgICBnX29iamVjdF9zZXQoYXBwc2luaywgImNhcHMi
LCBjYXBzLmdldCgpLCBudWxscHRyKTsKLQotICAgIHJlc3VsdCAmPSBnc3RfZWxlbWVudF9saW5r
X21hbnkodXBsb2FkLCBjb2xvcmNvbnZlcnQsIGFwcHNpbmssIG51bGxwdHIpOwotCi0gICAgR1Jl
ZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCh1
cGxvYWQsICJzaW5rIikpOwotICAgIGdzdF9lbGVtZW50X2FkZF9wYWQodmlkZW9TaW5rLCBnc3Rf
Z2hvc3RfcGFkX25ldygic2luayIsIHBhZC5nZXQoKSkpOwotCi0gICAgaWYgKCFyZXN1bHQpIHsK
LSAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBsaW5rIEdzdEdMIGVsZW1lbnRzIik7Ci0g
ICAgICAgIGdzdF9vYmplY3RfdW5yZWYodmlkZW9TaW5rKTsKLSAgICAgICAgdmlkZW9TaW5rID0g
bnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIHZpZGVvU2luazsKLX0KLQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmVuc3VyZUdMVmlkZW9TaW5rQ29udGV4dCgpCi17Ci0gICAg
aWYgKCFtX2dsRGlzcGxheUVsZW1lbnRDb250ZXh0KQotICAgICAgICBtX2dsRGlzcGxheUVsZW1l
bnRDb250ZXh0ID0gYWRvcHRHUmVmKHJlcXVlc3RHTENvbnRleHQoR1NUX0dMX0RJU1BMQVlfQ09O
VEVYVF9UWVBFKSk7Ci0KLSAgICBpZiAobV9nbERpc3BsYXlFbGVtZW50Q29udGV4dCkKLSAgICAg
ICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQobV92aWRlb1NpbmsuZ2V0KCksIG1fZ2xEaXNwbGF5
RWxlbWVudENvbnRleHQuZ2V0KCkpOwotCi0gICAgaWYgKCFtX2dsQXBwRWxlbWVudENvbnRleHQp
Ci0gICAgICAgIG1fZ2xBcHBFbGVtZW50Q29udGV4dCA9IGFkb3B0R1JlZihyZXF1ZXN0R0xDb250
ZXh0KCJnc3QuZ2wuYXBwX2NvbnRleHQiKSk7Ci0KLSAgICBpZiAobV9nbEFwcEVsZW1lbnRDb250
ZXh0KQotICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChtX3ZpZGVvU2luay5nZXQoKSwg
bV9nbEFwcEVsZW1lbnRDb250ZXh0LmdldCgpKTsKKyAgICBHc3RFbGVtZW50KiBzaW5rID0gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ3ZWJraXRnbHZpZGVvc2luayIsIG51bGxwdHIpOworICAg
IEFTU0VSVChzaW5rKTsKKyAgICB3ZWJLaXRHTFZpZGVvU2lua1NldE1lZGlhUGxheWVyUHJpdmF0
ZShXRUJLSVRfR0xfVklERU9fU0lOSyhzaW5rKSwgdGhpcyk7CisgICAgcmV0dXJuIHNpbms7CiB9
CiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDJhZGIwZmYwMjJkYTM1MzNkZTZhYjk2YzA2ODhh
OTNjZGIwMGFjZTIuLjI3OTBlYzNkYjVkYTkzY2Q2ODllMjNiYzI5YzJkNTNmMTdhOGUzYmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTE2MCwx
MCArMTYwLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KSBvdmVycmlkZTsK
ICAgICBmbG9hdCB2b2x1bWUoKSBjb25zdCBvdmVycmlkZTsKIAotI2lmIFVTRShHU1RSRUFNRVJf
R0wpCi0gICAgYm9vbCBlbnN1cmVHc3RHTENvbnRleHQoKTsKLSAgICBHc3RDb250ZXh0KiByZXF1
ZXN0R0xDb250ZXh0KGNvbnN0IGNoYXIqIGNvbnRleHRUeXBlKTsKLSNlbmRpZgogICAgIHZvaWQg
c2V0TXV0ZWQoYm9vbCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBtdXRlZCgpIGNvbnN0OwogCkBAIC0y
NTUsNiArMjUxLDExIEBAIHB1YmxpYzoKICAgICBib29sIGhhbmRsZVN5bmNNZXNzYWdlKEdzdE1l
c3NhZ2UqKTsKICAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSopOwogCisgICAgdm9p
ZCB0cmlnZ2VyUmVwYWludChHc3RTYW1wbGUqKTsKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorICAg
IHZvaWQgZmx1c2hDdXJyZW50QnVmZmVyKCk7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIGVu
dW0gTWFpblRocmVhZE5vdGlmaWNhdGlvbiB7CiAgICAgICAgIFZpZGVvQ2hhbmdlZCA9IDEgPDwg
MCwKQEAgLTI4NSwxNCArMjg2LDcgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKICNpZiBVU0UoR1NU
UkVBTUVSX0dMKQotICAgIHN0YXRpYyBHc3RGbG93UmV0dXJuIG5ld1NhbXBsZUNhbGxiYWNrKEdz
dEVsZW1lbnQqLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKLSAgICBzdGF0aWMgR3N0
Rmxvd1JldHVybiBuZXdQcmVyb2xsQ2FsbGJhY2soR3N0RWxlbWVudCosIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lciopOwotICAgIHZvaWQgZmx1c2hDdXJyZW50QnVmZmVyKCk7Ci0gICAgR3N0
RWxlbWVudCogY3JlYXRlR0xBcHBTaW5rKCk7CiAgICAgR3N0RWxlbWVudCogY3JlYXRlVmlkZW9T
aW5rR0woKTsKLSAgICBHc3RHTENvbnRleHQqIGdzdEdMQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fZ2xDb250ZXh0LmdldCgpOyB9Ci0gICAgR3N0R0xEaXNwbGF5KiBnc3RHTERpc3BsYXkoKSBj
b25zdCB7IHJldHVybiBtX2dsRGlzcGxheS5nZXQoKTsgfQotICAgIHZvaWQgZW5zdXJlR0xWaWRl
b1NpbmtDb250ZXh0KCk7CiAjZW5kaWYKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKQEAg
LTMxMSw3ICszMDUsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIHNldFBpcGVsaW5lKEdzdEVs
ZW1lbnQqKTsKIAotICAgIHZvaWQgdHJpZ2dlclJlcGFpbnQoR3N0U2FtcGxlKik7CiAgICAgdm9p
ZCByZXBhaW50KCk7CiAgICAgdm9pZCBjYW5jZWxSZXBhaW50KGJvb2wgZGVzdHJveWluZyA9IGZh
bHNlKTsKIApAQCAtNDA0LDEyICszOTcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2Rlc3Ry
b3lpbmcgeyBmYWxzZSB9OwogCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICBHUmVmUHRyPEdz
dEdMQ29udGV4dD4gbV9nbENvbnRleHQ7Ci0gICAgR1JlZlB0cjxHc3RHTERpc3BsYXk+IG1fZ2xE
aXNwbGF5OwotICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gbV9nbERpc3BsYXlFbGVtZW50Q29udGV4
dDsKLSAgICBHUmVmUHRyPEdzdENvbnRleHQ+IG1fZ2xBcHBFbGVtZW50Q29udGV4dDsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyPiBtX3ZpZGVvVGV4dHVy
ZUNvcGllcjsKLQogICAgIEdSZWZQdHI8R3N0R0xDb2xvckNvbnZlcnQ+IG1fY29sb3JDb252ZXJ0
OwogICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9jb2xvckNvbnZlcnRJbnB1dENhcHM7CiAgICAgR1Jl
ZlB0cjxHc3RDYXBzPiBtX2NvbG9yQ29udmVydE91dHB1dENhcHM7CmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDFjNTMwNTUxMTI2NDY4YWZlNmRj
NDkzZTM3YTM5Y2I4ZTQwNzgyYy4uYzhlYzY2ODUxZGZkNmIyMThkZjc5Yjk5NzVmYjU5MmYyNjlm
ZTVhZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEyIEBACisyMDE5LTExLTI2ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBNb3ZlIEdMIHZpZGVvIHNpbmsgdG8g
aXRzIG93biBHc3RCaW4gc3ViLWNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDQ2MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weTogV2hp
dGUtbGlzdCB0aGUgbmV3IEdMVmlkZW9TaW5rR1N0cmVhbWVyIEdPYmplY3QgaW1wbGVtZW50YXRp
b24uCisKIDIwMTktMTEtMjYgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5j
b20+CiAKICAgICAgICAgW0FwcGxlV2luXSBydW4td2Via2l0LXRlc3RzIGlzIGZhaWxpbmcgdG8g
ZmluZCBiaW4zMi9EdW1wUmVuZGVyVHJlZSBzaW5jZSByMjUyODM0CmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggNDM0YTYxZWNiMWYwOWE3MDMwYzA4ODU1NzFkNWYw
YzlmNDU1NTViZS4uMTNkMWQ0OGUyZTY0NTcyMGQyNzkxZjQ5MjFlN2M5ZmQxMWIzZWNhMiAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMjE3LDYgKzIxNyw4IEBA
IF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9IFsKICAgICAoWwogICAgICAgIyBUaGVzZSBmaWxlcyBk
ZWZpbmUgR09iamVjdHMsIHdoaWNoIGltcGxpZXMgc29tZSBkZWZpbml0aW9ucyBvZgogICAgICAg
IyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBjb250YWluaW5nIHVuZGVyc2NvcmVzLgorICAgICAg
b3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdncmFwaGljcycs
ICdnc3RyZWFtZXInLCAnR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwJyksCisgICAgICBvcy5wYXRo
LmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJl
YW1lcicsICdHTFZpZGVvU2lua0dTdHJlYW1lci5oJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1Nv
dXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdW
aWRlb1NpbmtHU3RyZWFtZXIuY3BwJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdX
ZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdXZWJLaXRXZWJT
b3VyY2VHU3RyZWFtZXIuY3BwJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJD
b3JlJywgJ3BsYXRmb3JtJywgJ2F1ZGlvJywgJ2dzdHJlYW1lcicsICdXZWJLaXRXZWJBdWRpb1Nv
dXJjZUdTdHJlYW1lci5jcHAnKSwK
</data>
<flag name="review"
          id="400213"
          type_id="1"
          status="+"
          setter="calvaris"
    />
          </attachment>
      

    </bug>

</bugzilla>