<?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>30648</bug_id>
          
          <creation_ts>2009-10-21 16:04:21 -0700</creation_ts>
          <short_desc>[V8] Change event listeners to not hold context.</short_desc>
          <delta_ts>2009-10-23 02:10:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>29077</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>abarth</cc>
    
    <cc>christian.plesner.hansen</cc>
    
    <cc>vitalyr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>156681</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-10-21 16:04:21 -0700</bug_when>
    <thetext>This change largely just aligns V8 bindings with http://trac.webkit.org/changeset/48884.

In the process, most of bug 29077&apos;s work is demolished, because we no longer need to persist v8::Context in listeners. I left it for isolated worlds, but only because I don&apos;t know much about them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156714</commentid>
    <comment_count>1</comment_count>
      <attachid>41620</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-10-21 16:46:14 -0700</bug_when>
    <thetext>Created attachment 41620
Change event listeners to not hold context, v1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156790</commentid>
    <comment_count>2</comment_count>
      <attachid>41620</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-21 22:53:49 -0700</bug_when>
    <thetext>Comment on attachment 41620
Change event listeners to not hold context, v1.

In v8::Local&lt;v8::Context&gt; V8Proxy::context() we seem to have lost this code:

if (frame != V8Proxy::retrieveFrame(context-&gt;get()))

Can you add it back before landing this?  I know there isn&apos;t a test that explains this code.  The behavior is &quot;wrong&quot; but missing the code is worse.

Also, this patch as a subtle bug with isolated worlds and event handlers and I must be tested properly.  I think because we&apos;re testing it with JS events, not native events.  I think we should land this patch anyway and deal with that issue separately (if it isn&apos;t a figment of my imagination).

Other than that *this patch is awesome*.  In my ideal world, the bindings would have little or no knowledge of Frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156952</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-10-22 11:36:54 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/49949.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157114</commentid>
    <comment_count>4</comment_count>
    <who name="Christian Plesner Hansen">christian.plesner.hansen</who>
    <bug_when>2009-10-23 00:00:55 -0700</bug_when>
    <thetext>&gt; -    v8::Handle&lt;v8::Context&gt; v8Context = v8::Local&lt;v8::Context&gt;::New(m_context-&gt;get());
&gt; +    v8::Local&lt;v8::Context&gt; v8Context = toV8Context(context);

I&apos;m not too familiar with this code so I may be wrong, but doesn&apos;t this switch event execution from occurring in the context where the event was defined to the current context?

&gt; -    context()-&gt;Global()-&gt;ForceSet(v8::String::New(&quot;document&quot;), documentWrapper, static_cast&lt;v8::PropertyAttribute&gt;(v8::ReadOnly | v8::DontDelete));
&gt; +    m_context-&gt;Global()-&gt;ForceSet(v8::String::New(&quot;document&quot;), documentWrapper, static_cast&lt;v8::PropertyAttribute&gt;(v8::ReadOnly | v8::DontDelete));
&gt;  }

As a general principle you should not do operations that involve allocation directly on persistent handles, since persistent handles may be disposed during gc.  This change (and the other similar changes) may be safe but there are other places where we do extra work to wrap contexts in Locals to avoid this issue so it does seem a little suspect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157124</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-23 01:45:11 -0700</bug_when>
    <thetext>&gt; As a general principle you should not do operations that involve allocation
&gt; directly on persistent handles, since persistent handles may be disposed during
&gt; gc.

How can the handle be disposed if we&apos;re holding it persistently?  Isn&apos;t the point of a persistent handle that we don&apos;t want it to be GCed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157127</commentid>
    <comment_count>6</comment_count>
    <who name="Christian Plesner Hansen">christian.plesner.hansen</who>
    <bug_when>2009-10-23 02:10:27 -0700</bug_when>
    <thetext>&gt; How can the handle be disposed if we&apos;re holding it persistently?  Isn&apos;t the
&gt; point of a persistent handle that we don&apos;t want it to be GCed?

The object stored in the handle will be kept alive but if the handle itself is weak the weak callback may cause it to be disposed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41620</attachid>
            <date>2009-10-21 16:46:14 -0700</date>
            <delta_ts>2009-10-21 22:53:48 -0700</delta_ts>
            <desc>Change event listeners to not hold context, v1.</desc>
            <filename>bug-30648-20091021164611.patch</filename>
            <type>text/plain</type>
            <size>55942</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzAzNDdmNi4uM2NmYjJmOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NiBAQAorMjAwOS0xMC0yMSAgRGltaXRyaSBHbGF6
a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtWOF0gUmV3b3JrIGV2ZW50IGxpc3RlbmVycyB0byBub3Qg
aG9sZCByZWZlcmVuY2VzIHRvIGZyYW1lIG9yIFY4IGNvbnRleHQuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwNjQ4CisKKyAgICAgICAgQ292ZXJl
ZCBieSBleGlzdGluZyBsYXlvdXQgdGVzdHM6CisgICAgICAgICAgZmFzdC9ldmVudHMvYXR0cmli
dXRlLWxpc3RlbmVyKgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG06IEFkZGVkIHBhc3NpbmcgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCoKKyAgICAgICAgICAg
IHRvIGV2ZW50IGxpc3RlbmVyIGhhbmRsaW5nIGNvZGUuCisgICAgICAgICogYmluZGluZ3Mvdjgv
RGF0ZUV4dGVuc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRlRXh0ZW5zaW9uOjpzZXRB
bGxvd1NsZWVwKTogQ2hhbmdlZCB0byB1c2UgY3VycmVudENvbnRleHQoKS4KKyAgICAgICAgKiBi
aW5kaW5ncy92OC9TY3JpcHRFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIpOiBSZXdvcmtlZCB0byBtYXRjaCBKU0MgbG9naWMu
CisgICAgICAgIChXZWJDb3JlOjpnZXRFdmVudExpc3RlbmVySGFuZGxlckJvZHkpOiBBZGRlZCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBwYXJhbS4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEFi
c3RyYWN0RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZl
bnRMaXN0ZW5lcjo6VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIpOiBSZW1vdmVkIEZyYW1lKiBwYXJh
bQorICAgICAgICAgICAgYW5kIHVzYWdlLgorICAgICAgICAoV2ViQ29yZTo6VjhBYnN0cmFjdEV2
ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KTogQ2hhZ2VkIHRvIHVzZSBTY3JpcHRFeGVjdXRpb25D
b250ZXh0Ki4KKyAgICAgICAgKFdlYkNvcmU6OlY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjppbnZv
a2VFdmVudEhhbmRsZXIpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEFic3RyYWN0
RXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhBYnN0cmFjdEV2ZW50TGlzdGVu
ZXI6OmdldExpc3RlbmVyT2JqZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpWOEFic3Ry
YWN0RXZlbnRMaXN0ZW5lcjo6cHJlcGFyZUxpc3RlbmVyT2JqZWN0KTogRGl0dG8uCisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V3JhcHBlcjo6Y29udmVydEV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KTogIEFkZGVkIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHBhcmFtLgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpn
ZXRFdmVudExpc3RlbmVyKTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFw
cGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudExpc3Rl
bmVyVG9WOE9iamVjdCk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RXZlbnRMaXN0
ZW5lckxpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRP
ckNyZWF0ZVdyYXBwZXIpOiBSZW1vdmVkIENvbnRleHRUeXBlKiB0ZW1wbGF0ZSBwYXJhbSwKKyAg
ICAgICAgICAgIGJlY2F1c2UgaXQncyBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5oOgorICAgICAgICAoV2ViQ29yZTo6VjhJc29sYXRlZFdv
cmxkOjpzaGFyZWRDb250ZXh0KTogUmVuYW1lZCBmcm9tIHNoYXJlZF9jb250ZXh0LgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VjhMYXp5RXZlbnRMaXN0ZW5lcjo6VjhMYXp5RXZlbnRMaXN0ZW5lcik6IFJlbW92ZWQgRnJh
bWUqIHBhcmFtIGFuZCB1c2FnZS4KKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2ZW50TGlzdGVu
ZXI6OmNhbGxMaXN0ZW5lckZ1bmN0aW9uKTogQWRkZWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
cGFyYW0uCisgICAgICAgIChXZWJDb3JlOjpWOExhenlFdmVudExpc3RlbmVyOjpwcmVwYXJlTGlz
dGVuZXJPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOExhenlFdmVudExp
c3RlbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpWOExhenlFdmVudExpc3RlbmVyOjpjcmVhdGUp
OiBSZW9yZGVyZWQgcGFyYW1zIHRvIG1hdGNoIEpTQyBpbXBsLgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4UHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6VjhQcm94eSk6IEFk
anVzdGVkIGZvcm1hdHRpbmcgdG8gbWF0Y2ggV2ViS2l0IHN0eWxlLgorICAgICAgICAoV2ViQ29y
ZTo6VjhQcm94eTo6ZXZhbHVhdGVJbk5ld0NvbnRleHQpOiBDaGFuZ2VkIHRvIHVzZSBtX2NvbnRl
eHQgZGlyZWN0bHkuCisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpzZXRJbmplY3RlZFNjcmlw
dENvbnRleHREZWJ1Z0lkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpjcmVh
dGVXcmFwcGVyRnJvbUNhY2hlU2xvd0Nhc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlY4
UHJveHk6OmlzQ29udGV4dEluaXRpYWxpemVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpW
OFByb3h5Ojp1cGRhdGVEb2N1bWVudFdyYXBwZXJDYWNoZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6VjhQcm94eTo6Y2xlYXJEb2N1bWVudFdyYXBwZXJDYWNoZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6VjhQcm94eTo6ZGlzcG9zZUNvbnRleHRIYW5kbGVzKTogQWRkZWQgZXhwbGlj
aXQgZGlzcG9zaW5nIG9mIG1fY29udGV4dC4gCisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojpj
bGVhckZvckNsb3NlKTogQ2hhbmdlZCB0byB1c2UgbV9jb250ZXh0IGRpcmVjdGx5LgorICAgICAg
ICAoV2ViQ29yZTo6VjhQcm94eTo6Y2xlYXJGb3JOYXZpZ2F0aW9uKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpWOFByb3h5OjpzZXRTZWN1cml0eVRva2VuKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpWOFByb3h5Ojp1cGRhdGVEb2N1bWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6VjhQcm94eTo6aW5pdENvbnRleHRJZk5lZWRlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6VjhQcm94eTo6Y29udGV4dCk6IENoYW5nZWQgdG8gdXNlIHY4OjpMb2NhbC4KKyAgICAgICAg
KFdlYkNvcmU6OlY4UHJveHk6Om1haW5Xb3JsZENvbnRleHQpOiBDaGFuZ2VkIHRvIHVzZSBtX2Nv
bnRleHQgZGlyZWN0bHkuIAorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6c2V0Q29udGV4dERl
YnVnSWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnRvVjhDb250ZXh0KToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOFByb3h5Lmg6IFJlbW92ZWQgc2hhcmVkX2NvbnRleHQgZGVjbCwgY2hh
bmdlZCB0byB1c2Ugc3RyYWlnaHQKKyAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50IGZvciBtX2Nv
bnRleHQuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5l
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3b3JrZXJQcm94eSk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6VjhXb3JrZXJDb250ZXh0RXZl
bnRMaXN0ZW5lcik6IFJlbW92ZWQKKyAgICAgICAgICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eSogcGFyYW0uCisgICAgICAgIChXZWJDb3JlOjpWOFdvcmtlckNvbnRleHRFdmVudExpc3Rl
bmVyOjpoYW5kbGVFdmVudCk6IFN0YXJ0ZWQgdXNpbmcgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCou
CisgICAgICAgIChXZWJDb3JlOjpWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyOjpyZXBvcnRF
cnJvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0
ZW5lcjo6Y2FsbExpc3RlbmVyRnVuY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlY4
V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXI6OmdldFJlY2VpdmVyT2JqZWN0KTogRGl0dG8uCisg
ICAgICAgICogYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5oOgorICAg
ICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKTogUmVt
b3ZlZAorICAgICAgICAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBwYXJhbS4KKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpmaW5kT3JDcmVhdGVF
dmVudExpc3RlbmVyKTogUmVtb3ZlZCBDb250ZXh0VHlwZSoKKyAgICAgICAgICAgIHRlbXBsYXRl
IHBhcmFtLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUV2ZW50TGlzdGVu
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVyOjpWOEV2ZW50TGlzdGVu
ZXIpOiBSZW1vdmVkIEZyYW1lKiBwYXJhbS4KKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0
ZW5lcjo6Z2V0TGlzdGVuZXJGdW5jdGlvbik6IFN0YXJ0ZWQgdXNpbmcgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCouCisgICAgICAgIChXZWJDb3JlOjpWOEV2ZW50TGlzdGVuZXI6OmNhbGxMaXN0ZW5l
ckZ1bmN0aW9uKTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9t
RXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVyOjpjcmVh
dGUpOiBSZW1vdmVkIEZyYW1lKiBwYXJhbS4KKwogMjAwOS0xMC0yMCAgTWFyayBSb3dlICA8bXJv
d2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggMjg1NjJmMS4uMGFk
N2FjMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBA
IC0yMTU5LDcgKzIxNTksNyBAQCBzdWIgUmV0dXJuTmF0aXZlVG9KU1ZhbHVlCiAgICAgfQogCiAg
ICAgaWYgKCR0eXBlIGVxICJFdmVudExpc3RlbmVyIikgewotICAgICAgICByZXR1cm4gInJldHVy
biBWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudExpc3RlbmVyVG9WOE9iamVjdCgkdmFsdWUpIjsK
KyAgICAgICAgcmV0dXJuICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRMaXN0ZW5l
clRvVjhPYmplY3QoaW1wLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICR2YWx1ZSkiOwogICAg
IH0KIAogICAgIGlmICgkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgewpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9EYXRlRXh0ZW5zaW9uLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRGF0ZUV4dGVuc2lvbi5jcHAKaW5kZXggNzc4YTE1YS4uN2Q4YjliZSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9EYXRlRXh0ZW5zaW9uLmNwcAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L0RhdGVFeHRlbnNpb24uY3BwCkBAIC03NSw3ICs3NSw3IEBAIERhdGVFeHRl
bnNpb24qIERhdGVFeHRlbnNpb246OmdldCgpCiAKIHZvaWQgRGF0ZUV4dGVuc2lvbjo6c2V0QWxs
b3dTbGVlcChib29sIGFsbG93KQogewotICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHJlc3VsdCA9
IFY4UHJveHk6OnJldHJpZXZlKCktPmNvbnRleHQoKS0+R2xvYmFsKCktPkdldCh2ODo6U3RyaW5n
OjpOZXcoIkRhdGUiKSk7CisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcmVzdWx0ID0gVjhQcm94
eTo6Y3VycmVudENvbnRleHQoKS0+R2xvYmFsKCktPkdldCh2ODo6U3RyaW5nOjpOZXcoIkRhdGUi
KSk7CiAgICAgaWYgKHJlc3VsdC5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRFdmVudExpc3RlbmVyLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggMTZjYTcwZi4uMDM3
MTNiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRFdmVudExpc3RlbmVy
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiU2NyaXB0U2NvcGUuaCIKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIK
ICNpbmNsdWRlICJWOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4QmluZGlu
Zy5oIgogI2luY2x1ZGUgIlhTU0F1ZGl0b3IuaCIKQEAgLTQ1LDE4ICs0NiwyOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBQYXNzUmVmUHRyPFY4TGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUF0dHJp
YnV0ZUV2ZW50TGlzdGVuZXIoTm9kZSogbm9kZSwgQXR0cmlidXRlKiBhdHRyKQogewogICAgIEFT
U0VSVChub2RlKTsKKyAgICBpbnQgbGluZU51bWJlciA9IDE7CisgICAgaW50IGNvbHVtbk51bWJl
ciA9IDA7CisgICAgU3RyaW5nIHNvdXJjZVVSTDsKIAotICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUt
PmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3Vt
ZW50KCktPmZyYW1lKCkpIHsKKyAgICAgICAgU2NyaXB0Q29udHJvbGxlciogc2NyaXB0Q29udHJv
bGxlciA9IGZyYW1lLT5zY3JpcHQoKTsKKyAgICAgICAgaWYgKCFzY3JpcHRDb250cm9sbGVyLT5p
c0VuYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICghc2NyaXB0Q29udHJvbGxlci0+eHNzQXVkaXRv
cigpLT5jYW5DcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKGF0dHItPmxvY2FsTmFtZSgpLnN0cmlu
ZygpLCBhdHRyLT52YWx1ZSgpKSkgeworICAgICAgICAgICAgLy8gVGhpcyBzY3JpcHQgaXMgbm90
IHNhZmUgdG8gZXhlY3V0ZS4KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAKLSAg
ICBpZiAoIWZyYW1lLT5zY3JpcHQoKS0+eHNzQXVkaXRvcigpLT5jYW5DcmVhdGVJbmxpbmVFdmVu
dExpc3RlbmVyKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygpLCBhdHRyLT52YWx1ZSgpKSkgewot
ICAgICAgICAvLyBUaGlzIHNjcmlwdCBpcyBub3Qgc2FmZSB0byBleGVjdXRlLgotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT50b2tlbml6ZXIoKSkgewor
ICAgICAgICAgICAgLy8gRklYTUU6IENoYW5nZSB0byB1c2Ugc2NyaXB0LT5ldmVudEhhbmRsZXJM
aW5lTnVtYmVyKCkgd2hlbiBpbXBsZW1lbnRlZC4KKyAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBm
cmFtZS0+ZG9jdW1lbnQoKS0+dG9rZW5pemVyKCktPmxpbmVOdW1iZXIoKTsKKyAgICAgICAgICAg
IGNvbHVtbk51bWJlciA9IGZyYW1lLT5kb2N1bWVudCgpLT50b2tlbml6ZXIoKS0+Y29sdW1uTnVt
YmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgc291cmNlVVJMID0gbm9kZS0+ZG9jdW1lbnQoKS0+
dXJsKCkuc3RyaW5nKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFY4TGF6eUV2ZW50TGlzdGVuZXI6
OmNyZWF0ZShmcmFtZSwgYXR0ci0+dmFsdWUoKSwgYXR0ci0+bG9jYWxOYW1lKCkuc3RyaW5nKCks
IG5vZGUtPmlzU1ZHRWxlbWVudCgpKTsKKyAgICByZXR1cm4gVjhMYXp5RXZlbnRMaXN0ZW5lcjo6
Y3JlYXRlKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygpLCBub2RlLT5pc1NWR0VsZW1lbnQoKSwg
YXR0ci0+dmFsdWUoKSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwogfQog
CiBQYXNzUmVmUHRyPFY4TGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoRnJhbWUqIGZyYW1lLCBBdHRyaWJ1dGUqIGF0dHIpCkBAIC02NCwyMiArNzYsMzYgQEAg
UGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKEZyYW1lKiBmcmFtZSwgQXR0cmkKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIGlmICghZnJhbWUtPnNjcmlwdCgpLT54c3NBdWRpdG9yKCktPmNhbkNyZWF0ZUlu
bGluZUV2ZW50TGlzdGVuZXIoYXR0ci0+bG9jYWxOYW1lKCkuc3RyaW5nKCksIGF0dHItPnZhbHVl
KCkpKSB7CisgICAgaW50IGxpbmVOdW1iZXIgPSAxOworICAgIGludCBjb2x1bW5OdW1iZXIgPSAw
OworICAgIFN0cmluZyBzb3VyY2VVUkw7CisKKyAgICBTY3JpcHRDb250cm9sbGVyKiBzY3JpcHRD
b250cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOworICAgIGlmICghc2NyaXB0Q29udHJvbGxlci0+
aXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFzY3JpcHRDb250cm9s
bGVyLT54c3NBdWRpdG9yKCktPmNhbkNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIoYXR0ci0+bG9j
YWxOYW1lKCkuc3RyaW5nKCksIGF0dHItPnZhbHVlKCkpKSB7CiAgICAgICAgIC8vIFRoaXMgc2Ny
aXB0IGlzIG5vdCBzYWZlIHRvIGV4ZWN1dGUuCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAot
ICAgIHJldHVybiBWOExhenlFdmVudExpc3RlbmVyOjpjcmVhdGUoZnJhbWUsIGF0dHItPnZhbHVl
KCksIGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygpLCBmcmFtZS0+ZG9jdW1lbnQoKS0+aXNTVkdE
b2N1bWVudCgpKTsKKyAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPnRva2VuaXplcigpKSB7Cisg
ICAgICAgIC8vIEZJWE1FOiBDaGFuZ2UgdG8gdXNlIHNjcmlwdC0+ZXZlbnRIYW5kbGVyTGluZU51
bWJlcigpIHdoZW4gaW1wbGVtZW50ZWQuCisgICAgICAgIGxpbmVOdW1iZXIgPSBmcmFtZS0+ZG9j
dW1lbnQoKS0+dG9rZW5pemVyKCktPmxpbmVOdW1iZXIoKTsKKyAgICAgICAgY29sdW1uTnVtYmVy
ID0gZnJhbWUtPmRvY3VtZW50KCktPnRva2VuaXplcigpLT5jb2x1bW5OdW1iZXIoKTsKKyAgICB9
CisgICAgc291cmNlVVJMID0gZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpOworICAg
IHJldHVybiBWOExhenlFdmVudExpc3RlbmVyOjpjcmVhdGUoYXR0ci0+bG9jYWxOYW1lKCkuc3Ry
aW5nKCksIGZyYW1lLT5kb2N1bWVudCgpLT5pc1NWR0RvY3VtZW50KCksIGF0dHItPnZhbHVlKCks
IHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKIH0KIAotU3RyaW5nIGdldEV2
ZW50TGlzdGVuZXJIYW5kbGVyQm9keShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0U3Rh
dGUqIHNjcmlwdFN0YXRlLCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKK1N0cmluZyBnZXRFdmVu
dExpc3RlbmVySGFuZGxlckJvZHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2Ny
aXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICBp
ZiAobGlzdGVuZXItPnR5cGUoKSAhPSBFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXJUeXBl
KQogICAgICAgICByZXR1cm4gIiI7CiAKICAgICBTY3JpcHRTY29wZSBzY29wZShzY3JpcHRTdGF0
ZSk7CiAgICAgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIqIHY4TGlzdGVuZXIgPSBzdGF0aWNfY2Fz
dDxWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KGxpc3RlbmVyKTsKLSAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGZ1bmN0aW9uID0gdjhMaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGZ1bmN0aW9uID0gdjhMaXN0ZW5lci0+Z2V0TGlzdGVu
ZXJPYmplY3QoY29udGV4dCk7CiAgICAgaWYgKGZ1bmN0aW9uLklzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuICIiOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RF
dmVudExpc3RlbmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlz
dGVuZXIuY3BwCmluZGV4IDc5NTM1OGUuLmYyN2M2MTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCkBAIC0zNSwxMSArMzUsMTIgQEAKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKLSNpbmNsdWRlICJUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNs
dWRlICJWOEV2ZW50TGlzdGVuZXJMaXN0LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1
ZGUgIlY4VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUg
IldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQ5LDI4ICs1MCwxMiBAQCBzdGF0aWMgdm9pZCB3ZWFrRXZlbnRMaXN0ZW5lckNhbGxiYWNr
KHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4sIHZvaWQqIHBhcmFtZXRlcgogICAgIGxpc3RlbmVy
LT5kaXNwb3NlTGlzdGVuZXJPYmplY3QoKTsKIH0KIAotVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6
OlY4QWJzdHJhY3RFdmVudExpc3RlbmVyKEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxWOExpc3Rl
bmVyR3VhcmQ+IGd1YXJkLCBib29sIGlzQXR0cmlidXRlKQorVjhBYnN0cmFjdEV2ZW50TGlzdGVu
ZXI6OlY4QWJzdHJhY3RFdmVudExpc3RlbmVyKFBhc3NSZWZQdHI8VjhMaXN0ZW5lckd1YXJkPiBn
dWFyZCwgYm9vbCBpc0F0dHJpYnV0ZSkKICAgICA6IEV2ZW50TGlzdGVuZXIoSlNFdmVudExpc3Rl
bmVyVHlwZSkKICAgICAsIG1faXNXZWFrKHRydWUpCiAgICAgLCBtX2lzQXR0cmlidXRlKGlzQXR0
cmlidXRlKQotICAgICwgbV9mcmFtZShmcmFtZSkKICAgICAsIG1fZ3VhcmQoZ3VhcmQpCi0gICAg
LCBtX2xpbmVOdW1iZXIoMCkKLSAgICAsIG1fY29sdW1uTnVtYmVyKDApCiB7Ci0gICAgaWYgKCFt
X2ZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBtaWdodCBiZSBjYWxsZWQgZGly
ZWN0bHkgZnJvbSB0aGUgcGFyc2VyLgotICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsK
LQotICAgIG1fY29udGV4dCA9IFY4UHJveHk6OnNoYXJlZF9jb250ZXh0KG1fZnJhbWUpOwotCi0g
ICAgLy8gR2V0IHRoZSBwb3NpdGlvbiBpbiB0aGUgc291cmNlIGlmIGFueS4KLSAgICBpZiAobV9p
c0F0dHJpYnV0ZSAmJiBtX2ZyYW1lLT5kb2N1bWVudCgpLT50b2tlbml6ZXIoKSkgewotICAgICAg
ICBtX2xpbmVOdW1iZXIgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT50b2tlbml6ZXIoKS0+bGluZU51
bWJlcigpOwotICAgICAgICBtX2NvbHVtbk51bWJlciA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnRv
a2VuaXplcigpLT5jb2x1bW5OdW1iZXIoKTsKLSAgICB9CiB9CiAKIFY4QWJzdHJhY3RFdmVudExp
c3RlbmVyOjp+VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIoKQpAQCAtODMsNyArNjgsNyBAQCBWOEFi
c3RyYWN0RXZlbnRMaXN0ZW5lcjo6flY4QWJzdHJhY3RFdmVudExpc3RlbmVyKCkKICAgICBkaXNw
b3NlTGlzdGVuZXJPYmplY3QoKTsKIH0KIAotdm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6
aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgRXZlbnQqIGV2ZW50KQordm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZl
bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXZlbnQqIGV2ZW50KQogewogICAg
IC8vIEV2ZW50TGlzdGVuZXIgY291bGQgYmUgZGlzY29ubmVjdGVkIGZyb20gdGhlIGZyYW1lLgog
ICAgIGlmIChkaXNjb25uZWN0ZWQoKSkKQEAgLTk1LDI1ICs4MCwxNyBAQCB2b2lkIFY4QWJzdHJh
Y3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpbwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogCi0gICAgaWYg
KCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENyZWF0ZSBhIG5ldyBsb2Nh
bCBoYW5kbGUgc2luY2UgdGhlIHBlcnNpc3RlbnQgaGFuZGxlIHN0b3JlZCBpbgotICAgIC8vIG1f
Y29udGV4dCBtYXkgYmUgZGlzcG9zZWQgYmVmb3JlIHdlJ3JlIGRvbmUuCi0gICAgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1f
Y29udGV4dC0+Z2V0KCkpOworICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0g
dG9WOENvbnRleHQoY29udGV4dCk7CiAgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIC8vIG1fZnJhbWUgY2FuIHJlbW92ZWQgYnkgdGhlIGNhbGxiYWNr
IGZ1bmN0aW9uLCBwcm90ZWN0IGl0IHVudGlsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiByZXR1cm5z
LgotICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdEZyYW1lKG1fZnJhbWUpOwotCiAgICAgLy8gRW50
ZXIgdGhlIFY4IGNvbnRleHQgaW4gd2hpY2ggdG8gcGVyZm9ybSB0aGUgZXZlbnQgaGFuZGxpbmcu
CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CiAKICAgICAvLyBHZXQg
dGhlIFY4IHdyYXBwZXIgZm9yIHRoZSBldmVudCBvYmplY3QuCiAgICAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGpzRXZlbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRvVjhPYmplY3QoZXZl
bnQpOwogCi0gICAgaW52b2tlRXZlbnRIYW5kbGVyKHY4Q29udGV4dCwgZXZlbnQsIGpzRXZlbnQp
OworICAgIGludm9rZUV2ZW50SGFuZGxlcihjb250ZXh0LCBldmVudCwganNFdmVudCk7CiAKICAg
ICBEb2N1bWVudDo6dXBkYXRlU3R5bGVGb3JBbGxEb2N1bWVudHMoKTsKIH0KQEAgLTE0MCw4ICsx
MTcsMTMgQEAgdm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6c2V0TGlzdGVuZXJPYmplY3Qo
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBsaXN0ZW5lcikKICAgICAgICAgbV9saXN0ZW5lci5NYWtl
V2Vhayh0aGlzLCAmd2Vha0V2ZW50TGlzdGVuZXJDYWxsYmFjayk7CiB9CiAKLXZvaWQgVjhBYnN0
cmFjdEV2ZW50TGlzdGVuZXI6Omludm9rZUV2ZW50SGFuZGxlcih2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiB2OENvbnRleHQsIEV2ZW50KiBldmVudCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZl
bnQpCit2b2lkIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjppbnZva2VFdmVudEhhbmRsZXIoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXZlbnQqIGV2ZW50LCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4ganNFdmVudCkKIHsKKworICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gdjhDb250
ZXh0ID0gdG9WOENvbnRleHQoY29udGV4dCk7CisgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIC8vIFdlIHB1c2ggdGhlIGV2ZW50IGJlaW5nIHByb2Nl
c3NlZCBpbnRvIHRoZSBnbG9iYWwgb2JqZWN0LCBzbyB0aGF0IGl0IGNhbiBiZSBleHBvc2VkIGJ5
IERPTVdpbmRvdydzIGJpbmRpbmdzLgogICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBldmVudFN5
bWJvbCA9IHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgiZXZlbnQiKTsKICAgICB2ODo6TG9jYWw8djg6
OlZhbHVlPiByZXR1cm5WYWx1ZTsKQEAgLTE2NSw3ICsxNDcsNyBAQCB2b2lkIFY4QWJzdHJhY3RF
dmVudExpc3RlbmVyOjppbnZva2VFdmVudEhhbmRsZXIodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
djhDb250ZQogCiAgICAgICAgIC8vIENhbGwgdGhlIGV2ZW50IGhhbmRsZXIuCiAgICAgICAgIHRy
eUNhdGNoLlNldFZlcmJvc2UoZmFsc2UpOyAvLyBXZSBkbyBub3Qgd2FudCB0byByZXBvcnQgdGhl
IGV4Y2VwdGlvbiB0byB0aGUgaW5zcGVjdG9yIGNvbnNvbGUuCi0gICAgICAgIHJldHVyblZhbHVl
ID0gY2FsbExpc3RlbmVyRnVuY3Rpb24oanNFdmVudCwgZXZlbnQpOworICAgICAgICByZXR1cm5W
YWx1ZSA9IGNhbGxMaXN0ZW5lckZ1bmN0aW9uKGNvbnRleHQsIGpzRXZlbnQsIGV2ZW50KTsKICAg
ICAgICAgaWYgKCF0cnlDYXRjaC5DYW5Db250aW51ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVy
LmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgKaW5kZXgg
Yzc3MzZiZS4uY2VmZjAwMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3Ry
YWN0RXZlbnRMaXN0ZW5lci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2
ZW50TGlzdGVuZXIuaApAQCAtOTcsMTUgKzk3LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IEV2ZW50Kik7CiAKLSAgICAgICAgLy8gUmV0dXJucyB0aGUgb3duZXIgZnJhbWUgb2YgdGhlIGxp
c3RlbmVyLgotICAgICAgICBGcmFtZSogZnJhbWUoKSB7IHJldHVybiBtX2ZyYW1lOyB9Ci0KICAg
ICAgICAgdmlydHVhbCBib29sIGlzTGF6eSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAg
ICAgICAgLy8gUmV0dXJucyB0aGUgbGlzdGVuZXIgb2JqZWN0LCBlaXRoZXIgYSBmdW5jdGlvbiBv
ciBhbiBvYmplY3QuCi0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBnZXRMaXN0ZW5lck9i
amVjdCgpCisgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBnZXRMaXN0ZW5lck9iamVjdChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBw
cmVwYXJlTGlzdGVuZXJPYmplY3QoKTsKKyAgICAgICAgICAgIHByZXBhcmVMaXN0ZW5lck9iamVj
dChjb250ZXh0KTsKICAgICAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD46Ok5l
dyhtX2xpc3RlbmVyKTsKICAgICAgICAgfQogCkBAIC0xMjIsMzAgKzExOSwyNCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIERpc3Bvc2UgbGlzdGVuZXIgb2JqZWN0IGFuZCBjbGVh
ciB0aGUgaGFuZGxlLgogICAgICAgICB2b2lkIGRpc3Bvc2VMaXN0ZW5lck9iamVjdCgpOwogCi0g
ICAgICAgIC8vIERldGFjaCB0aGUgbGlzdGVuZXIgZnJvbSBpdHMgb3duZXIgZnJhbWUuCi0gICAg
ICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCkgeyBtX2ZyYW1lID0gMDsgfQotCiAgICAgICAgIHZp
cnR1YWwgYm9vbCBkaXNjb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2d1YXJkICYmIG1fZ3Vh
cmQtPmlzRGlzY29ubmVjdGVkKCk7IH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgVjhBYnN0
cmFjdEV2ZW50TGlzdGVuZXIoRnJhbWUqLCBQYXNzUmVmUHRyPFY4TGlzdGVuZXJHdWFyZD4sIGJv
b2wgaXNBdHRyaWJ1dGUpOworICAgICAgICBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcihQYXNzUmVm
UHRyPFY4TGlzdGVuZXJHdWFyZD4sIGJvb2wgaXNBdHRyaWJ1dGUpOwogCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBwcmVwYXJlTGlzdGVuZXJPYmplY3QoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lk
IHByZXBhcmVMaXN0ZW5lck9iamVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgeyB9CiAKICAg
ICAgICAgdm9pZCBzZXRMaXN0ZW5lck9iamVjdCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGxpc3Rl
bmVyKTsKIAotICAgICAgICB2b2lkIGludm9rZUV2ZW50SGFuZGxlcih2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PiwgRXZlbnQqLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCk7CisgICAgICAg
IHZvaWQgaW52b2tlRXZlbnRIYW5kbGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCos
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50KTsKIAogICAgICAgICAvLyBHZXQgdGhlIHJl
Y2VpdmVyIG9iamVjdCB0byB1c2UgZm9yIGV2ZW50IGxpc3RlbmVyIGNhbGwuCiAgICAgICAgIHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiBnZXRSZWNlaXZlck9iamVjdChFdmVudCopOwotCi0gICAgICAg
IGludCBsaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9Ci0KICAgICBw
cml2YXRlOgogICAgICAgICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBFdmVudExpc3RlbmVyIGZ1bmN0
aW9uLgogICAgICAgICB2aXJ0dWFsIGJvb2wgdmlydHVhbGlzQXR0cmlidXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0F0dHJpYnV0ZTsgfQogCi0gICAgICAgIHZpcnR1YWwgdjg6OkxvY2FsPHY4OjpW
YWx1ZT4gY2FsbExpc3RlbmVyRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzZXZlbnQs
IEV2ZW50KikgPSAwOworICAgICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNhbGxM
aXN0ZW5lckZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4ganNldmVudCwgRXZlbnQqKSA9IDA7CiAKICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6
Ok9iamVjdD4gbV9saXN0ZW5lcjsKIApAQCAtMTU1LDE2ICsxNDYsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIC8vIEluZGljYXRlcyBpZiB0aGlzIGlzIGFuIEhUTUwgdHlwZSBsaXN0
ZW5lci4KICAgICAgICAgYm9vbCBtX2lzQXR0cmlidXRlOwogCi0gICAgICAgIC8vIEZyYW1lIHRv
IHdoaWNoIHRoZSBldmVudCBsaXN0ZW5lciBpcyBhdHRhY2hlZCB0by4gQW4gZXZlbnQgbGlzdGVu
ZXIgbXVzdCBiZSBkZXN0cm95ZWQgYmVmb3JlIGl0cyBvd25lciBmcmFtZSBpcwotICAgICAgICAv
LyBkZWxldGVkLiBTZWUgZmFzdC9kb20vcmVwbGFjZUNoaWxkLmh0bWwKLSAgICAgICAgLy8gRklY
TUU6IHRoaXMgY291bGQgaG9sZCBtX2ZyYW1lIGxpdmUgdW50aWwgdGhlIGV2ZW50IGxpc3RlbmVy
IGlzIGRlbGV0ZWQuCi0gICAgICAgIEZyYW1lKiBtX2ZyYW1lOwotICAgICAgICBSZWZQdHI8U2hh
cmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBtX2NvbnRleHQ7CiAgICAgICAgIFJlZlB0cjxW
OExpc3RlbmVyR3VhcmQ+IG1fZ3VhcmQ7Ci0KLSAgICAgICAgLy8gUG9zaXRpb24gaW4gdGhlIEhU
TUwgc291cmNlIGZvciBIVE1MIGV2ZW50IGxpc3RlbmVycy4KLSAgICAgICAgaW50IG1fbGluZU51
bWJlcjsKLSAgICAgICAgaW50IG1fY29sdW1uTnVtYmVyOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVy
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAppbmRleCAzNzdmMjc5
Li5lMDkwNTliIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5j
cHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCkBAIC0xMzg2LDE0
ICsxMzg2LDE0IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnRF
dmVudFRhcmdldFRvVjhPYmplY3QoRXZlbnRUYXJnZXQqIHRhCiAgICAgcmV0dXJuIG5vdEhhbmRs
ZWRCeUludGVyY2VwdG9yKCk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRFdmVudExpc3RlbmVyVG9WOE9iamVjdChFdmVudExpc3RlbmVyKiBsaXN0ZW5l
cikKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudExpc3Rl
bmVyVG9WOE9iamVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFdmVudExpc3Rl
bmVyKiBsaXN0ZW5lcikKIHsKICAgICBpZiAoIWxpc3RlbmVyKQogICAgICAgICByZXR1cm4gdjg6
Ok51bGwoKTsKIAogICAgIC8vIEZJWE1FOiBjYW4gYSB1c2VyIHRha2UgYSBsYXp5IGV2ZW50IGxp
c3RlbmVyIGFuZCBzZXQgdG8gb3RoZXIgcGxhY2VzPwogICAgIFY4QWJzdHJhY3RFdmVudExpc3Rl
bmVyKiB2OGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIqPihs
aXN0ZW5lcik7Ci0gICAgcmV0dXJuIHY4bGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Cisg
ICAgcmV0dXJuIHY4bGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KGNvbnRleHQpOwogfQogCiBQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihO
b2RlKiBub2RlLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwg
TGlzdGVuZXJMb29rdXBUeXBlIGxvb2t1cCkKQEAgLTE0MDksNyArMTQwOSw3IEBAIFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKE5vZGUqIG5v
ZGUsIHY4OjpMb2NhbDx2CiAgICAgICAgIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoVjhQcm94
eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCkpOwogCiAgICAgaWYgKHByb3h5KQot
ICAgICAgICByZXR1cm4gKGxvb2t1cCA9PSBMaXN0ZW5lckZpbmRPbmx5KSA/IFY4RXZlbnRMaXN0
ZW5lckxpc3Q6OmZpbmRXcmFwcGVyKHZhbHVlLCBpc0F0dHJpYnV0ZSkgOiBWOEV2ZW50TGlzdGVu
ZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyPFY4RXZlbnRMaXN0ZW5lcj4ocHJveHktPmZyYW1l
KCksIHByb3h5LT5saXN0ZW5lckd1YXJkKCksIHZhbHVlLCBpc0F0dHJpYnV0ZSk7CisgICAgICAg
IHJldHVybiAobG9va3VwID09IExpc3RlbmVyRmluZE9ubHkpID8gVjhFdmVudExpc3RlbmVyTGlz
dDo6ZmluZFdyYXBwZXIodmFsdWUsIGlzQXR0cmlidXRlKSA6IFY4RXZlbnRMaXN0ZW5lckxpc3Q6
OmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhFdmVudExpc3RlbmVyPihwcm94eS0+bGlzdGVuZXJHdWFy
ZCgpLCB2YWx1ZSwgaXNBdHRyaWJ1dGUpOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xNDI5LDcg
KzE0MjksNyBAQCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IFY4RE9NV3JhcHBlcjo6Z2V0RXZl
bnRMaXN0ZW5lcihBYnN0cmFjdFdvcmtlciogd29ya2VyLAogCiAgICAgVjhQcm94eSogcHJveHkg
PSBWOFByb3h5OjpyZXRyaWV2ZSh3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAg
ICAgaWYgKHByb3h5KQotICAgICAgICByZXR1cm4gKGxvb2t1cCA9PSBMaXN0ZW5lckZpbmRPbmx5
KSA/IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRXcmFwcGVyKHZhbHVlLCBpc0F0dHJpYnV0ZSkg
OiBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyPFY4RXZlbnRMaXN0ZW5l
cj4ocHJveHktPmZyYW1lKCksIHByb3h5LT5saXN0ZW5lckd1YXJkKCksIHZhbHVlLCBpc0F0dHJp
YnV0ZSk7CisgICAgICAgIHJldHVybiAobG9va3VwID09IExpc3RlbmVyRmluZE9ubHkpID8gVjhF
dmVudExpc3RlbmVyTGlzdDo6ZmluZFdyYXBwZXIodmFsdWUsIGlzQXR0cmlidXRlKSA6IFY4RXZl
bnRMaXN0ZW5lckxpc3Q6OmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhFdmVudExpc3RlbmVyPihwcm94
eS0+bGlzdGVuZXJHdWFyZCgpLCB2YWx1ZSwgaXNBdHRyaWJ1dGUpOwogCiAgICAgcmV0dXJuIDA7
CiB9CkBAIC0xNDQ1LDcgKzE0NDUsNyBAQCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IFY4RE9N
V3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihOb3RpZmljYXRpb24qIG5vdGlmaWNhdAogCiAgICAg
VjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShub3RpZmljYXRpb24tPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgaWYgKHByb3h5KQotICAgICAgICByZXR1cm4gKGxvb2t1
cCA9PSBMaXN0ZW5lckZpbmRPbmx5KSA/IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRXcmFwcGVy
KHZhbHVlLCBpc0F0dHJpYnV0ZSkgOiBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kT3JDcmVhdGVX
cmFwcGVyPFY4RXZlbnRMaXN0ZW5lcj4ocHJveHktPmZyYW1lKCksIHByb3h5LT5saXN0ZW5lckd1
YXJkKCksIHZhbHVlLCBpc0F0dHJpYnV0ZSk7CisgICAgICAgIHJldHVybiAobG9va3VwID09IExp
c3RlbmVyRmluZE9ubHkpID8gVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZFdyYXBwZXIodmFsdWUs
IGlzQXR0cmlidXRlKSA6IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRPckNyZWF0ZVdyYXBwZXI8
VjhFdmVudExpc3RlbmVyPihwcm94eS0+bGlzdGVuZXJHdWFyZCgpLCB2YWx1ZSwgaXNBdHRyaWJ1
dGUpOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xNDY5LDcgKzE0NjksNyBAQCBQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihFdmVudFRhcmdl
dCogZXZlbnRUYXJnZQogewogICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUo
ZXZlbnRUYXJnZXQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgaWYgKHByb3h5KQot
ICAgICAgICByZXR1cm4gKGxvb2t1cCA9PSBMaXN0ZW5lckZpbmRPbmx5KSA/IFY4RXZlbnRMaXN0
ZW5lckxpc3Q6OmZpbmRXcmFwcGVyKHZhbHVlLCBpc0F0dHJpYnV0ZSkgOiBWOEV2ZW50TGlzdGVu
ZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyPFY4RXZlbnRMaXN0ZW5lcj4ocHJveHktPmZyYW1l
KCksIHByb3h5LT5saXN0ZW5lckd1YXJkKCksIHZhbHVlLCBpc0F0dHJpYnV0ZSk7CisgICAgICAg
IHJldHVybiAobG9va3VwID09IExpc3RlbmVyRmluZE9ubHkpID8gVjhFdmVudExpc3RlbmVyTGlz
dDo6ZmluZFdyYXBwZXIodmFsdWUsIGlzQXR0cmlidXRlKSA6IFY4RXZlbnRMaXN0ZW5lckxpc3Q6
OmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhFdmVudExpc3RlbmVyPihwcm94eS0+bGlzdGVuZXJHdWFy
ZCgpLCB2YWx1ZSwgaXNBdHRyaWJ1dGUpOwogCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiB3b3JrZXJDb250ZXh0UHJveHkgPSBXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHk6OnJldHJpZXZlKCk7CkBAIC0xNDgzLDcgKzE0ODMsNyBAQCBQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihFdmVu
dFRhcmdldCogZXZlbnRUYXJnZQogUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBWOERPTVdyYXBw
ZXI6OmdldEV2ZW50TGlzdGVuZXIoVjhQcm94eSogcHJveHksIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBMaXN0ZW5lckxvb2t1cFR5cGUgbG9va3VwKQogewog
ICAgIGlmIChwcm94eSkKLSAgICAgICAgcmV0dXJuIChsb29rdXAgPT0gTGlzdGVuZXJGaW5kT25s
eSkgPyBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kV3JhcHBlcih2YWx1ZSwgaXNBdHRyaWJ1dGUp
IDogVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOEV2ZW50TGlzdGVu
ZXI+KHByb3h5LT5mcmFtZSgpLCBwcm94eS0+bGlzdGVuZXJHdWFyZCgpLCB2YWx1ZSwgaXNBdHRy
aWJ1dGUpOworICAgICAgICByZXR1cm4gKGxvb2t1cCA9PSBMaXN0ZW5lckZpbmRPbmx5KSA/IFY4
RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRXcmFwcGVyKHZhbHVlLCBpc0F0dHJpYnV0ZSkgOiBWOEV2
ZW50TGlzdGVuZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyPFY4RXZlbnRMaXN0ZW5lcj4ocHJv
eHktPmxpc3RlbmVyR3VhcmQoKSwgdmFsdWUsIGlzQXR0cmlidXRlKTsKIAogICAgIHJldHVybiAw
OwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaCBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKaW5kZXggMjI1NzY4OC4uNGMzYjAxOCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCkBAIC0yMTYsMTIgKzIxNiwxMiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29u
dmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdChFdmVudFRhcmdldCopOwogCiAgICAgICAgIC8vIFdy
YXAgYW5kIHVud3JhcCBKUyBldmVudCBsaXN0ZW5lcnMuCi0gICAgICAgIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydEV2ZW50TGlzdGVuZXJUb1Y4
T2JqZWN0KGV2ZW50TGlzdGVuZXIuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRF
dmVudExpc3RlbmVyVG9WOE9iamVjdChjb250ZXh0LCBldmVudExpc3RlbmVyLmdldCgpKTsKICAg
ICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2
ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KEV2ZW50TGlzdGVuZXIqKTsKKyAgICAgICAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50TGlzdGVuZXIqKTsKIAogICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBnZXRFdmVudExpc3RlbmVyKE5vZGUqIG5vZGUsIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBMaXN0ZW5lckxvb2t1cFR5
cGUgbG9va3VwKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEV2ZW50TGlz
dGVuZXJMaXN0LmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5lckxpc3QuaApp
bmRleCA1MDZlNWRjLi4yOWI0ODc0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RXZlbnRMaXN0ZW5lckxpc3QuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RXZlbnRMaXN0
ZW5lckxpc3QuaApAQCAtNTQsOCArNTQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
ICAgICByZXR1cm4gZG9GaW5kV3JhcHBlcih2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QodmFs
dWUpLCB3cmFwcGVyUHJvcGVydHkpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgV3JhcHBlclR5cGUsIHR5cGVuYW1lIENvbnRleHRUeXBlPgotICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IGZpbmRPckNyZWF0ZVdyYXBwZXIoQ29udGV4dFR5
cGUqLCBQYXNzUmVmUHRyPFY4TGlzdGVuZXJHdWFyZD4sIHY4OjpMb2NhbDx2ODo6VmFsdWU+LCBi
b29sIGlzQXR0cmlidXRlKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlclR5cGU+
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gZmluZE9yQ3JlYXRl
V3JhcHBlcihQYXNzUmVmUHRyPFY4TGlzdGVuZXJHdWFyZD4sIHY4OjpMb2NhbDx2ODo6VmFsdWU+
LCBib29sIGlzQXR0cmlidXRlKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBjbGVhcldyYXBwZXIo
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBsaXN0ZW5lck9iamVjdCwgYm9vbCBpc0F0dHJpYnV0ZSkK
ICAgICAgICAgewpAQCAtODAsOCArODAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IH0KICAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlclR5cGUsIHR5cGVuYW1l
IENvbnRleHRUeXBlPgotICAgIFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBWOEV2ZW50TGlz
dGVuZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyKENvbnRleHRUeXBlKiBjb250ZXh0LCBQYXNz
UmVmUHRyPFY4TGlzdGVuZXJHdWFyZD4gZ3VhcmQsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
LCBib29sIGlzQXR0cmlidXRlKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJUeXBlPgor
ICAgIFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5k
T3JDcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8VjhMaXN0ZW5lckd1YXJkPiBndWFyZCwgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUpCiAgICAgewogICAgICAgICBB
U1NFUlQodjg6OkNvbnRleHQ6OkluQ29udGV4dCgpKTsKICAgICAgICAgaWYgKCF2YWx1ZS0+SXNP
YmplY3QoKSkKQEAgLTk0LDcgKzk0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBp
ZiAod3JhcHBlcikKICAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOwogCi0gICAgICAgIFBhc3NS
ZWZQdHI8VjhFdmVudExpc3RlbmVyPiB3cmFwcGVyUHRyID0gV3JhcHBlclR5cGU6OmNyZWF0ZShj
b250ZXh0LCBndWFyZCwgb2JqZWN0LCBpc0F0dHJpYnV0ZSk7CisgICAgICAgIFBhc3NSZWZQdHI8
VjhFdmVudExpc3RlbmVyPiB3cmFwcGVyUHRyID0gV3JhcHBlclR5cGU6OmNyZWF0ZShndWFyZCwg
b2JqZWN0LCBpc0F0dHJpYnV0ZSk7CiAgICAgICAgIGlmICh3cmFwcGVyUHRyKQogICAgICAgICAg
ICAgb2JqZWN0LT5TZXRIaWRkZW5WYWx1ZSh3cmFwcGVyUHJvcGVydHksIHY4OjpFeHRlcm5hbDo6
V3JhcCh3cmFwcGVyUHRyLmdldCgpKSk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhJc29sYXRlZFdvcmxkLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3Js
ZC5oCmluZGV4IDE1ZDg3MTEuLjY2M2Y0YmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhJc29sYXRlZFdvcmxkLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVk
V29ybGQuaApAQCAtODgsNyArODgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0K
IAogICAgICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KCkgeyByZXR1cm4gbV9j
b250ZXh0LT5nZXQoKTsgfQotICAgICAgICBQYXNzUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6
OkNvbnRleHQ+ID4gc2hhcmVkX2NvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KKyAgICAg
ICAgUGFzc1JlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IHNoYXJlZENvbnRl
eHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAogICAgICAgICBET01EYXRhU3RvcmUqIGdldERP
TURhdGFTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fZG9tRGF0YVN0b3JlLmdldFN0b3JlKCk7IH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggOWI1
ODU3MS4uNjEyNWYxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVu
dExpc3RlbmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVu
ZXIuY3BwCkBAIC00MCwyNSArNDAsMjkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WOExh
enlFdmVudExpc3RlbmVyOjpWOExhenlFdmVudExpc3RlbmVyKEZyYW1lKiBmcmFtZSwgY29uc3Qg
U3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50
KQotICAgIDogVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIoZnJhbWUsIDAsIHRydWUpCi0gICAgLCBt
X2NvZGUoY29kZSkKK1Y4TGF6eUV2ZW50TGlzdGVuZXI6OlY4TGF6eUV2ZW50TGlzdGVuZXIoY29u
c3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBj
b2RlLCBjb25zdCBTdHJpbmcgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51
bWJlcikKKyAgICA6IFY4QWJzdHJhY3RFdmVudExpc3RlbmVyKDAsIHRydWUpCiAgICAgLCBtX2Z1
bmN0aW9uTmFtZShmdW5jdGlvbk5hbWUpCiAgICAgLCBtX2lzU1ZHRXZlbnQoaXNTVkdFdmVudCkK
KyAgICAsIG1fY29kZShjb2RlKQorICAgICwgbV9saW5lTnVtYmVyKGxpbmVOdW1iZXIpCisgICAg
LCBtX2NvbHVtbk51bWJlcihjb2x1bW5OdW1iZXIpCiB7CiB9CiAKLXY4OjpMb2NhbDx2ODo6VmFs
dWU+IFY4TGF6eUV2ZW50TGlzdGVuZXI6OmNhbGxMaXN0ZW5lckZ1bmN0aW9uKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBqc0V2ZW50LCBFdmVudCogZXZlbnQpCit2ODo6TG9jYWw8djg6OlZhbHVlPiBW
OExhenlFdmVudExpc3RlbmVyOjpjYWxsTGlzdGVuZXJGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCwgRXZlbnQqIGV2
ZW50KQogewotICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGhhbmRsZXJGdW5jdGlvbiA9IHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KGdldExpc3RlbmVyT2JqZWN0KCkpOworICAgIHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGhhbmRsZXJGdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVu
Y3Rpb24+OjpDYXN0KGdldExpc3RlbmVyT2JqZWN0KGNvbnRleHQpKTsKICAgICB2ODo6TG9jYWw8
djg6Ok9iamVjdD4gcmVjZWl2ZXIgPSBnZXRSZWNlaXZlck9iamVjdChldmVudCk7CiAgICAgaWYg
KGhhbmRsZXJGdW5jdGlvbi5Jc0VtcHR5KCkgfHwgcmVjZWl2ZXIuSXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gdjg6OkxvY2FsPHY4OjpWYWx1ZT4oKTsKIAogICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBwYXJhbWV0ZXJzWzFdID0geyBqc0V2ZW50IH07CiAKLSAgICBWOFByb3h5KiBwcm94eSA9
IFY4UHJveHk6OnJldHJpZXZlKGZyYW1lKCkpOwotICAgIHJldHVybiBwcm94eS0+Y2FsbEZ1bmN0
aW9uKGhhbmRsZXJGdW5jdGlvbiwgcmVjZWl2ZXIsIDEsIHBhcmFtZXRlcnMpOworICAgIGlmIChW
OFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKGNvbnRleHQpKQorICAgICAgICByZXR1
cm4gcHJveHktPmNhbGxGdW5jdGlvbihoYW5kbGVyRnVuY3Rpb24sIHJlY2VpdmVyLCAxLCBwYXJh
bWV0ZXJzKTsKKworICAgIHJldHVybiB2ODo6TG9jYWw8djg6OlZhbHVlPigpOwogfQogCiBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4TGF6eUV2ZW50TGlzdGVuZXJUb1N0cmluZyhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtNjYsMTYgKzcwLDE5IEBAIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhMYXp5RXZlbnRMaXN0ZW5lclRvU3RyaW5nKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyCiAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCktPkdldEhpZGRlblZhbHVlKFY4SGlk
ZGVuUHJvcGVydHlOYW1lOjp0b1N0cmluZ1N0cmluZygpKTsKIH0KIAotdm9pZCBWOExhenlFdmVu
dExpc3RlbmVyOjpwcmVwYXJlTGlzdGVuZXJPYmplY3QoKQordm9pZCBWOExhenlFdmVudExpc3Rl
bmVyOjpwcmVwYXJlTGlzdGVuZXJPYmplY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKIHsKICAgICBpZiAoaGFzRXhpc3RpbmdMaXN0ZW5lck9iamVjdCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICAvLyBTd2l0Y2ggdG8gdGhlIGNvbnRleHQgb2YgbV9mcmFtZS4KICAgICB2ODo6
SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAKKyAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6
OnJldHJpZXZlKGNvbnRleHQpOworICAgIGlmICghcHJveHkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIC8vIFVzZSB0aGUgb3V0ZXIgc2NvcGUgdG8gaG9sZCBjb250ZXh0LgotICAgIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IFY4UHJveHk6Om1haW5Xb3JsZENvbnRleHQoZnJh
bWUoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gcHJveHktPmNv
bnRleHQoKTsKICAgICAvLyBCYWlsIG91dCBpZiB3ZSBjYW5ub3QgZ2V0IHRoZSBjb250ZXh0Lgog
ICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDEsMTAg
KzEwOCw5IEBAIHZvaWQgVjhMYXp5RXZlbnRMaXN0ZW5lcjo6cHJlcGFyZUxpc3RlbmVyT2JqZWN0
KCkKICAgICAvLyBJbnNlcnQgJ1xuJyBvdGhlcndpc2UgLy8tc3R5bGUgY29tbWVudHMgY291bGQg
YnJlYWsgdGhlIGhhbmRsZXIuCiAgICAgY29kZS5hcHBlbmQoICAiXG59KS5jYWxsKHRoaXMsIGV2
dCk7fX19fSkiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGVFeHRlcm5hbFN0cmlu
ZyA9IHY4RXh0ZXJuYWxTdHJpbmcoY29kZSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBz
Y3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGVFeHRlcm5hbFN0cmluZywgZnJhbWUo
KS0+ZG9jdW1lbnQoKS0+dXJsKCksIGxpbmVOdW1iZXIoKSk7CisgICAgLy8gRklYTUU6IEFkZCBz
Y3JpcHQgVVJMIHRvIGV2ZW50IGxpc3RlbmVyIHBhcmFtISEhCisgICAgdjg6OkhhbmRsZTx2ODo6
U2NyaXB0PiBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGVFeHRlcm5hbFN0cmlu
ZywgU3RyaW5nKCksIG1fbGluZU51bWJlcik7CiAgICAgaWYgKCFzY3JpcHQuSXNFbXB0eSgpKSB7
Ci0gICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoZnJhbWUoKSk7Ci0g
ICAgICAgIEFTU0VSVChwcm94eSk7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
ID0gcHJveHktPnJ1blNjcmlwdChzY3JpcHQsIGZhbHNlKTsKICAgICAgICAgaWYgKCF2YWx1ZS5J
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNGdW5jdGlvbigpKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmgKaW5kZXggYmE0NjBlNi4uZGVl
MTY1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVy
LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmgKQEAgLTQ1
LDI0ICs0NSwyNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gQSBWOExhenlFdmVudExp
c3RlbmVyIGlzIGFsd2F5cyBhIEhUTUwgZXZlbnQgaGFuZGxlci4KICAgICBjbGFzcyBWOExhenlF
dmVudExpc3RlbmVyIDogcHVibGljIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4TGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0
ZShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bk5hbWUsIGJvb2wgaXNTVkdFdmVudCkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhMYXp5
RXZlbnRMaXN0ZW5lcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlz
U1ZHRXZlbnQsIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGlu
dCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFY4TGF6eUV2ZW50TGlzdGVuZXIoZnJhbWUsIGNvZGUsIGZ1bmN0
aW9uTmFtZSwgaXNTVkdFdmVudCkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBW
OExhenlFdmVudExpc3RlbmVyKGZ1bmN0aW9uTmFtZSwgaXNTVkdFdmVudCwgY29kZSwgc291cmNl
VVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc0xhenkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBwcm90ZWN0
ZWQ6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlTGlzdGVuZXJPYmplY3QoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHByZXBhcmVMaXN0ZW5lck9iamVjdChTY3JpcHRFeGVjdXRpb25Db250
ZXh0Kik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBWOExhenlFdmVudExpc3RlbmVyKEZyYW1l
KiwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBp
c1NWR0V2ZW50KTsKKyAgICAgICAgVjhMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1
bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0
cmluZyBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKTsKIAotICAg
ICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNhbGxMaXN0ZW5lckZ1bmN0aW9uKHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50LCBFdmVudCopOworICAgICAgICB2aXJ0dWFsIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IGNhbGxMaXN0ZW5lckZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCwgRXZlbnQqKTsKIAotICAgICAg
ICBTdHJpbmcgbV9jb2RlOwogICAgICAgICBTdHJpbmcgbV9mdW5jdGlvbk5hbWU7CiAgICAgICAg
IGJvb2wgbV9pc1NWR0V2ZW50OworICAgICAgICBTdHJpbmcgbV9jb2RlOworICAgICAgICBpbnQg
bV9saW5lTnVtYmVyOworICAgICAgICBpbnQgbV9jb2x1bW5OdW1iZXI7CiAgICAgfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKaW5kZXggNTNmNmU1Yi4u
OGE5ZmE4NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCkBAIC01MCw2ICs1MCw3IEBACiAjaW5j
bHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIKICNpbmNsdWRlICJWOEluZGV4LmgiCiAjaW5j
bHVkZSAiVjhJc29sYXRlZFdvcmxkLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5LmgiCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KQEAg
LTIwNSwxMiArMjA2LDEzIEBAIHN0YXRpYyB2b2lkIHJlcG9ydEZhdGFsRXJyb3JJblY4KGNvbnN0
IGNoYXIqIGxvY2F0aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogfQogCiBWOFByb3h5OjpWOFBy
b3h5KEZyYW1lKiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpLAotICAgICAgbV9jb250ZXh0
KFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+OjpjcmVhdGUoKSksCi0gICAgICBtX2xpc3Rl
bmVyR3VhcmQoVjhMaXN0ZW5lckd1YXJkOjpjcmVhdGUoKSksCi0gICAgICBtX2lubGluZUNvZGUo
ZmFsc2UpLAotICAgICAgbV90aW1lckNhbGxiYWNrKGZhbHNlKSwKLSAgICAgIG1fcmVjdXJzaW9u
KDApIHsgfQorICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fbGlzdGVuZXJHdWFyZChWOExp
c3RlbmVyR3VhcmQ6OmNyZWF0ZSgpKQorICAgICwgbV9pbmxpbmVDb2RlKGZhbHNlKQorICAgICwg
bV90aW1lckNhbGxiYWNrKGZhbHNlKQorICAgICwgbV9yZWN1cnNpb24oMCkKK3sKK30KIAogVjhQ
cm94eTo6flY4UHJveHkoKQogewpAQCAtMzA1LDcgKzMwNyw3IEBAIHZvaWQgVjhQcm94eTo6ZXZh
bHVhdGVJbk5ld0NvbnRleHQoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2Vz
LCBpbnQKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAKICAgICAvLyBTZXQgdXAg
dGhlIERPTSB3aW5kb3cgYXMgdGhlIHByb3RvdHlwZSBvZiB0aGUgbmV3IGdsb2JhbCBvYmplY3Qu
Ci0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gd2luZG93Q29udGV4dCA9IGNvbnRleHQoKTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB3aW5kb3dDb250ZXh0ID0gbV9jb250ZXh0Owog
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd2luZG93R2xvYmFsID0gd2luZG93Q29udGV4dC0+
R2xvYmFsKCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3dXcmFwcGVyID0gVjhE
T01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCB3aW5k
b3dHbG9iYWwpOwogCkBAIC0zNDcsNyArMzQ5LDcgQEAgdm9pZCBWOFByb3h5OjpzZXRJbmplY3Rl
ZFNjcmlwdENvbnRleHREZWJ1Z0lkKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHRhcmdldENvbnQK
ICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKHRhcmdldENvbnRleHQpOwogICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY29udGV4dERhdGEgPSB2ODo6T2JqZWN0OjpOZXcoKTsK
IAotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aW5kb3dDb250ZXh0RGF0YSA9IGNvbnRleHQo
KS0+R2V0RGF0YSgpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aW5kb3dDb250ZXh0RGF0
YSA9IG1fY29udGV4dC0+R2V0RGF0YSgpOwogICAgIGlmICh3aW5kb3dDb250ZXh0RGF0YS0+SXNP
YmplY3QoKSkgewogICAgICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHByb3BlcnR5TmFtZSA9
IHY4OjpTdHJpbmc6Ok5ldyhrQ29udGV4dERlYnVnRGF0YVZhbHVlKTsKICAgICAgICAgY29udGV4
dERhdGEtPlNldChwcm9wZXJ0eU5hbWUsIHY4OjpPYmplY3Q6OkNhc3QoKndpbmRvd0NvbnRleHRE
YXRhKS0+R2V0KHByb3BlcnR5TmFtZSkpOwpAQCAtNTA4LDggKzUxMCw4IEBAIHY4OjpMb2NhbDx2
ODo6T2JqZWN0PiBWOFByb3h5OjpjcmVhdGVXcmFwcGVyRnJvbUNhY2hlU2xvd0Nhc2UoVjhDbGFz
c0luZGV4OjpWOFdyCiAgICAgLy8gTm90IGluIGNhY2hlLgogICAgIGludCBjbGFzc0luZGV4ID0g
VjhDbGFzc0luZGV4OjpUb0ludCh0eXBlKTsKICAgICBpbml0Q29udGV4dElmTmVlZGVkKCk7Ci0g
ICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQoKSk7Ci0gICAgdjg6OkxvY2FsPHY4
OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKHR5cGUs
IGdldEhpZGRlbk9iamVjdFByb3RvdHlwZShjb250ZXh0KCkpKTsKKyAgICB2ODo6Q29udGV4dDo6
U2NvcGUgc2NvcGUobV9jb250ZXh0KTsKKyAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBmdW5j
dGlvbiA9IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IodHlwZSwgZ2V0SGlkZGVuT2JqZWN0
UHJvdG90eXBlKG1fY29udGV4dCkpOwogICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW5j
ZSA9IFNhZmVBbGxvY2F0aW9uOjpuZXdJbnN0YW5jZShmdW5jdGlvbik7CiAgICAgaWYgKCFpbnN0
YW5jZS5Jc0VtcHR5KCkpIHsKICAgICAgICAgbV93cmFwcGVyQm9pbGVycGxhdGVzLT5TZXQodjg6
OkludGVnZXI6Ok5ldyhjbGFzc0luZGV4KSwgaW5zdGFuY2UpOwpAQCAtNTIyLDkgKzUyNCw5IEBA
IGJvb2wgVjhQcm94eTo6aXNDb250ZXh0SW5pdGlhbGl6ZWQoKQogewogICAgIC8vIG1fY29udGV4
dCwgbV9nbG9iYWwsIGFuZCBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMgc2hvdWxkCiAgICAgLy8gYWxs
IGJlIG5vbi1lbXB0eSBpZiBpZiBtX2NvbnRleHQgaXMgbm9uLWVtcHR5LgotICAgIEFTU0VSVChj
b250ZXh0KCkuSXNFbXB0eSgpIHx8ICFtX2dsb2JhbC5Jc0VtcHR5KCkpOwotICAgIEFTU0VSVChj
b250ZXh0KCkuSXNFbXB0eSgpIHx8ICFtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuSXNFbXB0eSgpKTsK
LSAgICByZXR1cm4gIWNvbnRleHQoKS5Jc0VtcHR5KCk7CisgICAgQVNTRVJUKG1fY29udGV4dC5J
c0VtcHR5KCkgfHwgIW1fZ2xvYmFsLklzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fY29udGV4dC5J
c0VtcHR5KCkgfHwgIW1fd3JhcHBlckJvaWxlcnBsYXRlcy5Jc0VtcHR5KCkpOworICAgIHJldHVy
biAhbV9jb250ZXh0LklzRW1wdHkoKTsKIH0KIAogRE9NV2luZG93KiBWOFByb3h5OjpyZXRyaWV2
ZVdpbmRvdyh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQpAQCAtNjY4LDcgKzY3MCw3
IEBAIHZvaWQgVjhQcm94eTo6Y2xlYXJEb2N1bWVudFdyYXBwZXIoKQogdm9pZCBWOFByb3h5Ojp1
cGRhdGVEb2N1bWVudFdyYXBwZXJDYWNoZSgpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRs
ZVNjb3BlOwotICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoY29udGV4dCgpKTsK
KyAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fY29udGV4dCk7CiAKICAgICAv
LyBJZiB0aGUgZG9jdW1lbnQgaGFzIG5vIGZyYW1lLCBOb2RlVG9WOE9iamVjdCBtaWdodCBnZXQg
dGhlCiAgICAgLy8gZG9jdW1lbnQgd3JhcHBlciBmb3IgYSBkb2N1bWVudCB0aGF0IGlzIGFib3V0
IHRvIGJlIGRlbGV0ZWQuCkBAIC02OTAsMjAgKzY5MiwyMSBAQCB2b2lkIFY4UHJveHk6OnVwZGF0
ZURvY3VtZW50V3JhcHBlckNhY2hlKCkKICAgICAgICAgY2xlYXJEb2N1bWVudFdyYXBwZXJDYWNo
ZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNvbnRleHQoKS0+R2xvYmFsKCktPkZv
cmNlU2V0KHY4OjpTdHJpbmc6Ok5ldygiZG9jdW1lbnQiKSwgZG9jdW1lbnRXcmFwcGVyLCBzdGF0
aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpSZWFkT25seSB8IHY4OjpEb250RGVs
ZXRlKSk7CisgICAgbV9jb250ZXh0LT5HbG9iYWwoKS0+Rm9yY2VTZXQodjg6OlN0cmluZzo6TmV3
KCJkb2N1bWVudCIpLCBkb2N1bWVudFdyYXBwZXIsIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0
dHJpYnV0ZT4odjg6OlJlYWRPbmx5IHwgdjg6OkRvbnREZWxldGUpKTsKIH0KIAogdm9pZCBWOFBy
b3h5OjpjbGVhckRvY3VtZW50V3JhcHBlckNhY2hlKCkKIHsKLSAgICBBU1NFUlQoIWNvbnRleHQo
KS5Jc0VtcHR5KCkpOwotICAgIGNvbnRleHQoKS0+R2xvYmFsKCktPkZvcmNlRGVsZXRlKHY4OjpT
dHJpbmc6Ok5ldygiZG9jdW1lbnQiKSk7CisgICAgQVNTRVJUKCFtX2NvbnRleHQuSXNFbXB0eSgp
KTsKKyAgICBtX2NvbnRleHQtPkdsb2JhbCgpLT5Gb3JjZURlbGV0ZSh2ODo6U3RyaW5nOjpOZXco
ImRvY3VtZW50IikpOwogfQogCiB2b2lkIFY4UHJveHk6OmRpc3Bvc2VDb250ZXh0SGFuZGxlcygp
CiB7Ci0gICAgaWYgKCFjb250ZXh0KCkuSXNFbXB0eSgpKSB7CisgICAgaWYgKCFtX2NvbnRleHQu
SXNFbXB0eSgpKSB7CiAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlkRGVz
dHJveVNjcmlwdENvbnRleHRGb3JGcmFtZSgpOwotICAgICAgICBzaGFyZWRfY29udGV4dCgpLT5k
aXNwb3NlSGFuZGxlKCk7CisgICAgICAgIG1fY29udGV4dC5EaXNwb3NlKCk7CisgICAgICAgIG1f
Y29udGV4dC5DbGVhcigpOwogICAgIH0KIAogICAgIGlmICghbV93cmFwcGVyQm9pbGVycGxhdGVz
LklzRW1wdHkoKSkgewpAQCAtNzQ4LDcgKzc1MSw3IEBAIHZvaWQgVjhQcm94eTo6Y2xlYXJGb3JD
bG9zZSgpCiB7CiAgICAgcmVzZXRJc29sYXRlZFdvcmxkcygpOwogCi0gICAgaWYgKCFjb250ZXh0
KCkuSXNFbXB0eSgpKSB7CisgICAgaWYgKCFtX2NvbnRleHQuSXNFbXB0eSgpKSB7CiAgICAgICAg
IHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKIAogICAgICAgICBjbGVhckRvY3VtZW50V3Jh
cHBlcigpOwpAQCAtNzYxLDExICs3NjQsMTEgQEAgdm9pZCBWOFByb3h5OjpjbGVhckZvck5hdmln
YXRpb24oKQogICAgIGRpc2Nvbm5lY3RFdmVudExpc3RlbmVycygpOwogICAgIHJlc2V0SXNvbGF0
ZWRXb3JsZHMoKTsKIAotICAgIGlmICghY29udGV4dCgpLklzRW1wdHkoKSkgeworICAgIGlmICgh
bV9jb250ZXh0LklzRW1wdHkoKSkgewogICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlOwog
ICAgICAgICBjbGVhckRvY3VtZW50V3JhcHBlcigpOwogCi0gICAgICAgIHY4OjpDb250ZXh0OjpT
Y29wZSBjb250ZXh0U2NvcGUoY29udGV4dCgpKTsKKyAgICAgICAgdjg6OkNvbnRleHQ6OlNjb3Bl
IGNvbnRleHRTY29wZShtX2NvbnRleHQpOwogCiAgICAgICAgIC8vIENsZWFyIHRoZSBkb2N1bWVu
dCB3cmFwcGVyIGNhY2hlIGJlZm9yZSB0dXJuaW5nIG9uIGFjY2VzcyBjaGVja3Mgb24KICAgICAg
ICAgLy8gdGhlIG9sZCBET01XaW5kb3cgd3JhcHBlci4gVGhpcyB3YXksIGFjY2VzcyB0byB0aGUg
ZG9jdW1lbnQgd3JhcHBlcgpAQCAtNzc4LDcgKzc4MSw3IEBAIHZvaWQgVjhQcm94eTo6Y2xlYXJG
b3JOYXZpZ2F0aW9uKCkKICAgICAgICAgd3JhcHBlci0+VHVybk9uQWNjZXNzQ2hlY2soKTsKIAog
ICAgICAgICAvLyBTZXBhcmF0ZSB0aGUgY29udGV4dCBmcm9tIGl0cyBnbG9iYWwgb2JqZWN0Lgot
ICAgICAgICBjb250ZXh0KCktPkRldGFjaEdsb2JhbCgpOworICAgICAgICBtX2NvbnRleHQtPkRl
dGFjaEdsb2JhbCgpOwogCiAgICAgICAgIGRpc3Bvc2VDb250ZXh0SGFuZGxlcygpOwogICAgIH0K
QEAgLTc4OSw3ICs3OTIsNyBAQCB2b2lkIFY4UHJveHk6OnNldFNlY3VyaXR5VG9rZW4oKQogICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgLy8gU2V0dXAg
c2VjdXJpdHkgb3JpZ2luIGFuZCBzZWN1cml0eSB0b2tlbi4KICAgICBpZiAoIWRvY3VtZW50KSB7
Ci0gICAgICAgIGNvbnRleHQoKS0+VXNlRGVmYXVsdFNlY3VyaXR5VG9rZW4oKTsKKyAgICAgICAg
bV9jb250ZXh0LT5Vc2VEZWZhdWx0U2VjdXJpdHlUb2tlbigpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC04MDksMTQgKzgxMiwxNCBAQCB2b2lkIFY4UHJveHk6OnNldFNlY3VyaXR5VG9r
ZW4oKQogICAgIC8vIGNhc2UsIHdlIHVzZSB0aGUgZ2xvYmFsIG9iamVjdCBhcyB0aGUgc2VjdXJp
dHkgdG9rZW4gdG8gYXZvaWQKICAgICAvLyBjYWxsaW5nIGNhbkFjY2VzcyB3aGVuIGEgc2NyaXB0
IGFjY2Vzc2VzIGl0cyBvd24gb2JqZWN0cy4KICAgICBpZiAodG9rZW4uaXNFbXB0eSgpIHx8IHRv
a2VuID09ICJudWxsIikgewotICAgICAgICBjb250ZXh0KCktPlVzZURlZmF1bHRTZWN1cml0eVRv
a2VuKCk7CisgICAgICAgIG1fY29udGV4dC0+VXNlRGVmYXVsdFNlY3VyaXR5VG9rZW4oKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIENTdHJpbmcgdXRmOFRva2VuID0gdG9rZW4udXRm
OCgpOwogICAgIC8vIE5PVEU6IFY4IGRvZXMgaWRlbnRpdHkgY29tcGFyaXNvbiBpbiBmYXN0IHBh
dGgsIG11c3QgdXNlIGEgc3ltYm9sCiAgICAgLy8gYXMgdGhlIHNlY3VyaXR5IHRva2VuLgotICAg
IGNvbnRleHQoKS0+U2V0U2VjdXJpdHlUb2tlbih2ODo6U3RyaW5nOjpOZXdTeW1ib2wodXRmOFRv
a2VuLmRhdGEoKSwgdXRmOFRva2VuLmxlbmd0aCgpKSk7CisgICAgbV9jb250ZXh0LT5TZXRTZWN1
cml0eVRva2VuKHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCh1dGY4VG9rZW4uZGF0YSgpLCB1dGY4VG9r
ZW4ubGVuZ3RoKCkpKTsKIH0KIAogdm9pZCBWOFByb3h5Ojp1cGRhdGVEb2N1bWVudCgpCkBAIC04
MzUsNyArODM4LDcgQEAgdm9pZCBWOFByb3h5Ojp1cGRhdGVEb2N1bWVudCgpCiAgICAgaW5pdENv
bnRleHRJZk5lZWRlZCgpOwogCiAgICAgLy8gQmFpbCBvdXQgaWYgY29udGV4dCBpbml0aWFsaXph
dGlvbiBmYWlsZWQuCi0gICAgaWYgKGNvbnRleHQoKS5Jc0VtcHR5KCkpCisgICAgaWYgKG1fY29u
dGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIGhhdmUgYSBuZXcg
ZG9jdW1lbnQgYW5kIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjYWNoZS4KQEAgLTEwNDMsNyArMTA0
Niw3IEBAIGJvb2wgVjhQcm94eTo6aW5zdGFsbERPTVdpbmRvdyh2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjb250ZXh0LCBET01XaW5kb3cqIHdpbmRvCiB2b2lkIFY4UHJveHk6OmluaXRDb250ZXh0
SWZOZWVkZWQoKQogewogICAgIC8vIEJhaWwgb3V0IGlmIHRoZSBjb250ZXh0IGhhcyBhbHJlYWR5
IGJlZW4gaW5pdGlhbGl6ZWQuCi0gICAgaWYgKCFjb250ZXh0KCkuSXNFbXB0eSgpKQorICAgIGlm
ICghbV9jb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ3JlYXRl
IGEgaGFuZGxlIHNjb3BlIGZvciBhbGwgbG9jYWwgaGFuZGxlcy4KQEAgLTEwNjksMTcgKzEwNzIs
MTYgQEAgdm9pZCBWOFByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKCkKICAgICB9CiAKIAotICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlTmV3Q29udGV4dCht
X2dsb2JhbCwgMCk7Ci0gICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgIG1fY29udGV4dCA9
IGNyZWF0ZU5ld0NvbnRleHQobV9nbG9iYWwsIDApOworICAgIGlmIChtX2NvbnRleHQuSXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5zZXQoY29udGV4dCk7CiAKLQot
ICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoY29udGV4dCk7CisgICAgdjg6Okxv
Y2FsPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXco
bV9jb250ZXh0KTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKHY4Q29udGV4
dCk7CiAKICAgICAvLyBTdG9yZSB0aGUgZmlyc3QgZ2xvYmFsIG9iamVjdCBjcmVhdGVkIHNvIHdl
IGNhbiByZXVzZSBpdC4KICAgICBpZiAobV9nbG9iYWwuSXNFbXB0eSgpKSB7Ci0gICAgICAgIG1f
Z2xvYmFsID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhjb250ZXh0LT5HbG9iYWwo
KSk7CisgICAgICAgIG1fZ2xvYmFsID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh2
OENvbnRleHQtPkdsb2JhbCgpKTsKICAgICAgICAgLy8gQmFpbCBvdXQgaWYgYWxsb2NhdGlvbiBv
ZiB0aGUgZmlyc3QgZ2xvYmFsIG9iamVjdHMgZmFpbHMuCiAgICAgICAgIGlmIChtX2dsb2JhbC5J
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIGRpc3Bvc2VDb250ZXh0SGFuZGxlcygpOwpAQCAtMTA5
MCw3ICsxMDkyLDcgQEAgdm9pZCBWOFByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKCkKICNlbmRp
ZgogICAgIH0KIAotICAgIGluc3RhbGxIaWRkZW5PYmplY3RQcm90b3R5cGUoY29udGV4dCk7Cisg
ICAgaW5zdGFsbEhpZGRlbk9iamVjdFByb3RvdHlwZSh2OENvbnRleHQpOwogICAgIG1fd3JhcHBl
ckJvaWxlcnBsYXRlcyA9IHY4OjpQZXJzaXN0ZW50PHY4OjpBcnJheT46Ok5ldyh2ODo6QXJyYXk6
Ok5ldyhWOENsYXNzSW5kZXg6OldSQVBQRVJfVFlQRV9DT1VOVCkpOwogICAgIC8vIEJhaWwgb3V0
IGlmIGFsbG9jYXRpb24gZmFpbGVkLgogICAgIGlmIChtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuSXNF
bXB0eSgpKSB7CkBAIC0xMTAxLDcgKzExMDMsNyBAQCB2b2lkIFY4UHJveHk6OmluaXRDb250ZXh0
SWZOZWVkZWQoKQogICAgIFY4R0NDb250cm9sbGVyOjpyZWdpc3Rlckdsb2JhbEhhbmRsZShQUk9Y
WSwgdGhpcywgbV93cmFwcGVyQm9pbGVycGxhdGVzKTsKICNlbmRpZgogCi0gICAgaWYgKCFpbnN0
YWxsRE9NV2luZG93KGNvbnRleHQsIG1fZnJhbWUtPmRvbVdpbmRvdygpKSkKKyAgICBpZiAoIWlu
c3RhbGxET01XaW5kb3codjhDb250ZXh0LCBtX2ZyYW1lLT5kb21XaW5kb3coKSkpCiAgICAgICAg
IGRpc3Bvc2VDb250ZXh0SGFuZGxlcygpOwogCiAgICAgdXBkYXRlRG9jdW1lbnQoKTsKQEAgLTEx
ODQsMjEgKzExODYsMTMgQEAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBWOFByb3h5Ojpjb250ZXh0
KEZyYW1lKiBmcmFtZSkKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAotUGFzc1JlZlB0cjxTaGFy
ZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IFY4UHJveHk6OnNoYXJlZF9jb250ZXh0KEZyYW1l
KiBmcmFtZSkKK3Y4OjpMb2NhbDx2ODo6Q29udGV4dD4gVjhQcm94eTo6Y29udGV4dCgpCiB7Ci0g
ICAgVjhQcm94eSAqcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShmcmFtZSk7Ci0gICAgaWYgKCFw
cm94eSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKFY4SXNvbGF0ZWRXb3JsZCogd29ybGQg
PSBWOElzb2xhdGVkV29ybGQ6OmdldEVudGVyZWQoKSkKKyAgICAgICAgcmV0dXJuIHY4OjpMb2Nh
bDx2ODo6Q29udGV4dD46Ok5ldyh3b3JsZC0+c2hhcmVkQ29udGV4dCgpLT5nZXQoKSk7CiAKLSAg
ICBwcm94eS0+aW5pdENvbnRleHRJZk5lZWRlZCgpOwotICAgIFJlZlB0cjxTaGFyZWRQZXJzaXN0
ZW50PHY4OjpDb250ZXh0PiA+IGNvbnRleHQgPSBwcm94eS0+c2hhcmVkX2NvbnRleHQoKTsKLSAg
ICBpZiAoVjhJc29sYXRlZFdvcmxkKiB3b3JsZCA9IFY4SXNvbGF0ZWRXb3JsZDo6Z2V0RW50ZXJl
ZCgpKSB7Ci0gICAgICAgIGNvbnRleHQgPSB3b3JsZC0+c2hhcmVkX2NvbnRleHQoKTsKLSAgICAg
ICAgaWYgKGZyYW1lICE9IFY4UHJveHk6OnJldHJpZXZlRnJhbWUoY29udGV4dC0+Z2V0KCkpKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbnRleHQ7CisgICAg
aW5pdENvbnRleHRJZk5lZWRlZCgpOworICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+
OjpOZXcobV9jb250ZXh0KTs7CiB9CiAKIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gVjhQcm94eTo6
bWFpbldvcmxkQ29udGV4dChGcmFtZSogZnJhbWUpCkBAIC0xMjA4LDcgKzEyMDIsNyBAQCB2ODo6
TG9jYWw8djg6OkNvbnRleHQ+IFY4UHJveHk6Om1haW5Xb3JsZENvbnRleHQoRnJhbWUqIGZyYW1l
KQogICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0PigpOwogCiAgICAgcHJveHkt
PmluaXRDb250ZXh0SWZOZWVkZWQoKTsKLSAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0
Pjo6TmV3KHByb3h5LT5jb250ZXh0KCkpOworICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRl
eHQ+OjpOZXcocHJveHktPm1fY29udGV4dCk7CiB9CiAKIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4g
VjhQcm94eTo6Y3VycmVudENvbnRleHQoKQpAQCAtMTM0MiwxNyArMTMzNiwxNyBAQCB2b2lkIFY4
UHJveHk6OnJlZ2lzdGVyRXh0ZW5zaW9uKHY4OjpFeHRlbnNpb24qIGV4dGVuc2lvbiwgaW50IGV4
dGVuc2lvbkdyb3VwKQogYm9vbCBWOFByb3h5OjpzZXRDb250ZXh0RGVidWdJZChpbnQgZGVidWdJ
ZCkKIHsKICAgICBBU1NFUlQoZGVidWdJZCA+IDApOwotICAgIGlmIChjb250ZXh0KCkuSXNFbXB0
eSgpKQorICAgIGlmIChtX2NvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgIGlmICghY29udGV4dCgpLT5HZXREYXRh
KCktPklzVW5kZWZpbmVkKCkpCisgICAgaWYgKCFtX2NvbnRleHQtPkdldERhdGEoKS0+SXNVbmRl
ZmluZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdjg6OkNvbnRleHQ6OlNjb3Bl
IGNvbnRleHRTY29wZShjb250ZXh0KCkpOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0
U2NvcGUobV9jb250ZXh0KTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNvbnRleHREYXRh
ID0gdjg6Ok9iamVjdDo6TmV3KCk7CiAgICAgY29udGV4dERhdGEtPlNldCh2ODo6U3RyaW5nOjpO
ZXcoa0NvbnRleHREZWJ1Z0RhdGFUeXBlKSwgdjg6OlN0cmluZzo6TmV3KCJwYWdlIikpOwogICAg
IGNvbnRleHREYXRhLT5TZXQodjg6OlN0cmluZzo6TmV3KGtDb250ZXh0RGVidWdEYXRhVmFsdWUp
LCB2ODo6SW50ZWdlcjo6TmV3KGRlYnVnSWQpKTsKLSAgICBjb250ZXh0KCktPlNldERhdGEoY29u
dGV4dERhdGEpOworICAgIG1fY29udGV4dC0+U2V0RGF0YShjb250ZXh0RGF0YSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTEzODUsNCArMTM3OSwxNiBAQCB2b2lkIFY4UHJveHk6Omluc3Rh
bGxIaWRkZW5PYmplY3RQcm90b3R5cGUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkK
ICAgICBjb250ZXh0LT5HbG9iYWwoKS0+U2V0SGlkZGVuVmFsdWUoaGlkZGVuT2JqZWN0UHJvdG90
eXBlU3RyaW5nLCBvYmplY3RQcm90b3R5cGUpOwogfQogCit2ODo6TG9jYWw8djg6OkNvbnRleHQ+
IHRvVjhDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgaWYg
KGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICBpZiAoVjhQcm94eSogcHJveHkgPSBW
OFByb3h5OjpyZXRyaWV2ZShjb250ZXh0KSkKKyAgICAgICAgICAgIHJldHVybiBwcm94eS0+Y29u
dGV4dCgpOworICAgIH0gZWxzZSBpZiAoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpIHsKKyAg
ICAgICAgaWYgKFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogcHJveHkgPSBzdGF0aWNfY2Fz
dDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCktPnNjcmlwdCgpLT5wcm94eSgpKQorICAgICAgICAg
ICAgcmV0dXJuIHByb3h5LT5jb250ZXh0KCk7CisgICAgfQorICAgIHJldHVybiB2ODo6TG9jYWw8
djg6OkNvbnRleHQ+KCk7Cit9CisKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQ
cm94eS5oCmluZGV4IGU1MmM1OGQuLjk0NDNjYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhQcm94eS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCkBAIC0y
NTcsNyArMjU3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBSZXR1cm5zIFY4
IENvbnRleHQgb2YgYSBmcmFtZS4gSWYgbm9uZSBleGlzdHMsIGNyZWF0ZXMKICAgICAgICAgLy8g
YSBuZXcgY29udGV4dC4gSXQgaXMgcG90ZW50aWFsbHkgc2xvdyBhbmQgY29uc3VtZXMgbWVtb3J5
LgogICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0KEZyYW1lKik7
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+
ID4gc2hhcmVkX2NvbnRleHQoRnJhbWUqKTsKICAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6
Q29udGV4dD4gbWFpbldvcmxkQ29udGV4dChGcmFtZSopOwogICAgICAgICBzdGF0aWMgdjg6Okxv
Y2FsPHY4OjpDb250ZXh0PiBjdXJyZW50Q29udGV4dCgpOwogCkBAIC0yOTgsMTUgKzI5Nyw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIGludCBzb3VyY2VMaW5lTnVtYmVy
KCk7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcgc291cmNlTmFtZSgpOwogCi0gICAgICAgIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbV9jb250ZXh0LT5nZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFBhc3NSZWZQdHI8U2hh
cmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBzaGFyZWRfY29udGV4dCgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBtX2NvbnRleHQ7Ci0gICAgICAgIH0KKyAgICAgICAgdjg6Okxv
Y2FsPHY4OjpDb250ZXh0PiBjb250ZXh0KCk7CiAKICAgICAgICAgUGFzc1JlZlB0cjxWOExpc3Rl
bmVyR3VhcmQ+IGxpc3RlbmVyR3VhcmQoKQogICAgICAgICB7CkBAIC0zOTYsNyArMzg3LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIEZyYW1lKiBtX2ZyYW1lOwogCi0gICAgICAg
IFJlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IG1fY29udGV4dDsKKyAgICAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IG1fY29udGV4dDsKIAogICAgICAgICBSZWZQ
dHI8VjhMaXN0ZW5lckd1YXJkPiBtX2xpc3RlbmVyR3VhcmQ7CiAKQEAgLTQ1Nyw2ICs0NDgsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgfQogCiAKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRl
eHQ+IHRvVjhDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKwogICAgIC8vIFVzZWQg
YnkgYW4gaW50ZXJjZXB0b3IgY2FsbGJhY2sgdGhhdCBpdCBoYXNuJ3QgZm91bmQgYW55dGhpbmcg
dG8KICAgICAvLyBpbnRlcmNlcHQuCiAgICAgaW5saW5lIHN0YXRpYyB2ODo6TG9jYWw8djg6Ok9i
amVjdD4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmNwcCBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggODU2M2M1OC4uOGRj
NGI4ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFdmVu
dExpc3RlbmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2
ZW50TGlzdGVuZXIuY3BwCkBAIC0zNiwxNyArMzYsMjQgQEAKIAogI2luY2x1ZGUgIkV2ZW50Lmgi
CiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXI6OlY4V29ya2VyQ29udGV4dEV2ZW50
TGlzdGVuZXIoV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94eSwgUGFzc1JlZlB0cjxW
OExpc3RlbmVyR3VhcmQ+IGd1YXJkLCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlzdGVuZXIsIGJv
b2wgaXNJbmxpbmUpCi0gICAgOiBWOEV2ZW50TGlzdGVuZXIoMCwgZ3VhcmQsIGxpc3RlbmVyLCBp
c0lubGluZSkKLSAgICAsIG1fcHJveHkocHJveHkpCitzdGF0aWMgV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5KiB3b3JrZXJQcm94eShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQog
eworICAgIEFTU0VSVChjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CisgICAgV29ya2VyQ29u
dGV4dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0
KTsKKyAgICByZXR1cm4gd29ya2VyQ29udGV4dC0+c2NyaXB0KCktPnByb3h5KCk7CiB9CiAKLXZv
aWQgVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIEV2ZW50KiBldmVudCkKK1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXI6
OlY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIoUGFzc1JlZlB0cjxWOExpc3RlbmVyR3VhcmQ+
IGd1YXJkLCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlzdGVuZXIsIGJvb2wgaXNJbmxpbmUpCisg
ICAgOiBWOEV2ZW50TGlzdGVuZXIoZ3VhcmQsIGxpc3RlbmVyLCBpc0lubGluZSkKK3sKK30KKwor
dm9pZCBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBFdmVudCogZXZlbnQpCiB7CiAgICAgLy8gSXMgdGhlIEV2
ZW50TGlzdGVuZXIgZGlzY29ubmVjdGVkPwogICAgIGlmIChkaXNjb25uZWN0ZWQoKSkKQEAgLTU4
LDEyICs2NSwxNiBAQCB2b2lkIFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2
ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCogZQogCiAgICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlOwogCi0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9
IG1fcHJveHktPmNvbnRleHQoKTsKLSAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCisgICAgV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94eSA9IHdvcmtlclByb3h5KGNvbnRleHQpOwor
ICAgIGlmICghcHJveHkpCisgICAgICAgIHJldHVybjsKKworICAgIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IHY4Q29udGV4dCA9IHByb3h5LT5jb250ZXh0KCk7CisgICAgaWYgKHY4Q29udGV4dC5J
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEVudGVyIHRoZSBWOCBjb250ZXh0
IGluIHdoaWNoIHRvIHBlcmZvcm0gdGhlIGV2ZW50IGhhbmRsaW5nLgotICAgIHY4OjpDb250ZXh0
OjpTY29wZSBzY29wZShjb250ZXh0KTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUodjhD
b250ZXh0KTsKIAogICAgIC8vIEdldCB0aGUgVjggd3JhcHBlciBmb3IgdGhlIGV2ZW50IG9iamVj
dC4KICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCA9IFdvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eTo6Y29udmVydEV2ZW50VG9WOE9iamVjdChldmVudCk7CkBAIC03MSw3ICs4Miw3
IEBAIHZvaWQgVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50KiBlCiAgICAgaW52b2tlRXZlbnRIYW5kbGVyKGNvbnRl
eHQsIGV2ZW50LCBqc0V2ZW50KTsKIH0KIAotYm9vbCBWOFdvcmtlckNvbnRleHRFdmVudExpc3Rl
bmVyOjpyZXBvcnRFcnJvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZXIpCitib29sIFY4V29ya2Vy
Q29udGV4dEV2ZW50TGlzdGVuZXI6OnJlcG9ydEVycm9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBs
aW5lTnVtYmVyKQogewogICAgIC8vIElzIHRoZSBFdmVudExpc3RlbmVyIGRpc2Nvbm5lY3RlZD8K
ICAgICBpZiAoZGlzY29ubmVjdGVkKCkpCkBAIC04MiwxNCArOTMsMTggQEAgYm9vbCBWOFdvcmtl
ckNvbnRleHRFdmVudExpc3RlbmVyOjpyZXBvcnRFcnJvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3QKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKIAotICAgIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBtX3Byb3h5LT5jb250ZXh0KCk7Ci0gICAg
aWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSog
cHJveHkgPSB3b3JrZXJQcm94eShjb250ZXh0KTsKKyAgICBpZiAoIXByb3h5KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBw
cm94eS0+Y29udGV4dCgpOworICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBFbnRlciB0aGUgVjggY29udGV4dCBpbiB3aGljaCB0byBw
ZXJmb3JtIHRoZSBldmVudCBoYW5kbGluZy4KLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUo
Y29udGV4dCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CiAKLSAg
ICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlzdGVuZXIgPSBnZXRMaXN0ZW5lck9iamVjdCgpOwor
ICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5lciA9IGdldExpc3RlbmVyT2JqZWN0KGNv
bnRleHQpOwogICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHJldHVyblZhbHVlOwogICAgIHsKICAg
ICAgICAgLy8gQ2F0Y2ggZXhjZXB0aW9ucyB0aHJvd24gaW4gY2FsbGluZyB0aGUgZnVuY3Rpb24g
c28gdGhleSBkbyBub3QgcHJvcGFnYXRlIHRvIGphdmFzY3JpcHQgY29kZSB0aGF0IGNhdXNlZCB0
aGUgZXZlbnQgdG8gZmlyZS4KQEAgLTExOCwyNCArMTMzLDI1IEBAIGJvb2wgVjhXb3JrZXJDb250
ZXh0RXZlbnRMaXN0ZW5lcjo6cmVwb3J0RXJyb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFN0CiAgICAgcmV0dXJuIGVycm9ySGFuZGxlZDsKIH0KIAotdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6Y2FsbExpc3RlbmVyRnVuY3Rpb24odjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQsIEV2ZW50KiBldmVudCkKK3Y4OjpMb2NhbDx2ODo6
VmFsdWU+IFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXI6OmNhbGxMaXN0ZW5lckZ1bmN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBq
c0V2ZW50LCBFdmVudCogZXZlbnQpCiB7Ci0gICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gaGFu
ZGxlckZ1bmN0aW9uID0gZ2V0TGlzdGVuZXJGdW5jdGlvbigpOwotICAgIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiByZWNlaXZlciA9IGdldFJlY2VpdmVyT2JqZWN0KGV2ZW50KTsKKyAgICB2ODo6TG9j
YWw8djg6OkZ1bmN0aW9uPiBoYW5kbGVyRnVuY3Rpb24gPSBnZXRMaXN0ZW5lckZ1bmN0aW9uKGNv
bnRleHQpOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiByZWNlaXZlciA9IGdldFJlY2VpdmVy
T2JqZWN0KGNvbnRleHQsIGV2ZW50KTsKICAgICBpZiAoaGFuZGxlckZ1bmN0aW9uLklzRW1wdHko
KSB8fCByZWNlaXZlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OlZh
bHVlPigpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBhcmFtZXRlcnNbMV0gPSB7IGpz
RXZlbnQgfTsKICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiByZXN1bHQgPSBoYW5kbGVyRnVuY3Rp
b24tPkNhbGwocmVjZWl2ZXIsIDEsIHBhcmFtZXRlcnMpOwogCi0gICAgbV9wcm94eS0+dHJhY2tF
dmVudChldmVudCk7CisgICAgaWYgKFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogcHJveHkg
PSB3b3JrZXJQcm94eShjb250ZXh0KSkKKyAgICAgICAgcHJveHktPnRyYWNrRXZlbnQoZXZlbnQp
OwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4V29y
a2VyQ29udGV4dEV2ZW50TGlzdGVuZXI6OmdldFJlY2VpdmVyT2JqZWN0KEV2ZW50KiBldmVudCkK
K3Y4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyOjpnZXRS
ZWNlaXZlck9iamVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFdmVudCogZXZl
bnQpCiB7Ci0gICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGxpc3RlbmVyID0gZ2V0TGlzdGVuZXJP
YmplY3QoKTsKKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlzdGVuZXIgPSBnZXRMaXN0ZW5l
ck9iamVjdChjb250ZXh0KTsKIAogICAgIGlmICghbGlzdGVuZXIuSXNFbXB0eSgpICYmICFsaXN0
ZW5lci0+SXNGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4gbGlzdGVuZXI7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuaCBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5oCmluZGV4IGE2
NTU1YTAuLjNmOWY4NjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJD
b250ZXh0RXZlbnRMaXN0ZW5lci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJD
b250ZXh0RXZlbnRMaXN0ZW5lci5oCkBAIC00NCwyMiArNDQsMTkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgY2xhc3MgVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBW
OEV2ZW50TGlzdGVuZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcj4gY3JlYXRlKFdvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eSogcHJveHksIFBhc3NSZWZQdHI8VjhMaXN0ZW5lckd1YXJkPiBndWFyZCwgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IGxpc3RlbmVyLCBib29sIGlzSW5saW5lKQorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyPiBjcmVhdGUoUGFzc1JlZlB0
cjxWOExpc3RlbmVyR3VhcmQ+IGd1YXJkLCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlzdGVuZXIs
IGJvb2wgaXNJbmxpbmUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcihwcm94eSwgZ3VhcmQsIGxpc3RlbmVyLCBp
c0lubGluZSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOFdvcmtlckNvbnRl
eHRFdmVudExpc3RlbmVyKGd1YXJkLCBsaXN0ZW5lciwgaXNJbmxpbmUpKTsKICAgICAgICAgfQog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgRXZlbnQqKTsKICAgICAgICAgdmlydHVhbCBib29sIHJlcG9ydEVycm9yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgdXJsLCBp
bnQgbGluZU51bWJlcik7CiAKLSAgICAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBw
cm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHk7IH0KLQogICAgIHByaXZhdGU6Ci0gICAgICAg
IFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIoV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
KiwgUGFzc1JlZlB0cjxWOExpc3RlbmVyR3VhcmQ+LCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlz
dGVuZXIsIGJvb2wgaXNJbmxpbmUpOworICAgICAgICBWOFdvcmtlckNvbnRleHRFdmVudExpc3Rl
bmVyKFBhc3NSZWZQdHI8VjhMaXN0ZW5lckd1YXJkPiwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGxp
c3RlbmVyLCBib29sIGlzSW5saW5lKTsKIAotICAgICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IGNhbGxMaXN0ZW5lckZ1bmN0aW9uKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50
LCBFdmVudCopOwotICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZ2V0UmVjZWl2ZXJPYmpl
Y3QoRXZlbnQqKTsKLSAgICAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBtX3Byb3h5
OworICAgICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNhbGxMaXN0ZW5lckZ1bmN0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVu
dCwgRXZlbnQqKTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGdldFJlY2VpdmVyT2Jq
ZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCopOwogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmNwcAppbmRleCA0YTJjZDBlLi4yNDdiMDE2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCkBAIC00
MDYsNyArNDA2LDcgQEAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5OjpydW5TY3JpcHQodjg6OkhhbmRsZTx2ODo6U2NyaXAKIAogUGFzc1JlZlB0cjxWOEV2
ZW50TGlzdGVuZXI+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZmluZE9yQ3JlYXRlRXZl
bnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3QsIGJvb2wgaXNJbmxpbmUsIGJv
b2wgZmluZE9ubHkpCiB7Ci0gICAgcmV0dXJuIGZpbmRPbmx5ID8gVjhFdmVudExpc3RlbmVyTGlz
dDo6ZmluZFdyYXBwZXIob2JqZWN0LCBpc0lubGluZSkgOiBWOEV2ZW50TGlzdGVuZXJMaXN0Ojpm
aW5kT3JDcmVhdGVXcmFwcGVyPFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXI+KHRoaXMsIG1f
bGlzdGVuZXJHdWFyZCwgb2JqZWN0LCBpc0lubGluZSk7CisgICAgcmV0dXJuIGZpbmRPbmx5ID8g
VjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZFdyYXBwZXIob2JqZWN0LCBpc0lubGluZSkgOiBWOEV2
ZW50TGlzdGVuZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyPFY4V29ya2VyQ29udGV4dEV2ZW50
TGlzdGVuZXI+KG1fbGlzdGVuZXJHdWFyZCwgb2JqZWN0LCBpc0lubGluZSk7CiB9CiAKIHZvaWQg
V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojp0cmFja0V2ZW50KEV2ZW50KiBldmVudCkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tRXZlbnRMaXN0ZW5l
ci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUV2ZW50TGlzdGVuZXIu
Y3BwCmluZGV4IDkxYWJlY2QuLjE3Yzg2YTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q3VzdG9tRXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDdXN0b21FdmVudExpc3RlbmVyLmNwcApAQCAtMzUsMTUgKzM1LDE1IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVjhFdmVudExpc3RlbmVyOjpWOEV2ZW50TGlzdGVu
ZXIoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFY4TGlzdGVuZXJHdWFyZD4gZ3VhcmQsIHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5lciwgYm9vbCBpc0F0dHJpYnV0ZSkKLSAgICA6IFY4QWJz
dHJhY3RFdmVudExpc3RlbmVyKGZyYW1lLCBndWFyZCwgaXNBdHRyaWJ1dGUpCitWOEV2ZW50TGlz
dGVuZXI6OlY4RXZlbnRMaXN0ZW5lcihQYXNzUmVmUHRyPFY4TGlzdGVuZXJHdWFyZD4gZ3VhcmQs
IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5lciwgYm9vbCBpc0F0dHJpYnV0ZSkKKyAgICA6
IFY4QWJzdHJhY3RFdmVudExpc3RlbmVyKGd1YXJkLCBpc0F0dHJpYnV0ZSkKIHsKICAgICBzZXRM
aXN0ZW5lck9iamVjdChsaXN0ZW5lcik7CiB9CiAKLXY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4
RXZlbnRMaXN0ZW5lcjo6Z2V0TGlzdGVuZXJGdW5jdGlvbigpCit2ODo6TG9jYWw8djg6OkZ1bmN0
aW9uPiBWOEV2ZW50TGlzdGVuZXI6OmdldExpc3RlbmVyRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCkKIHsKLSAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlzdGVuZXIg
PSBnZXRMaXN0ZW5lck9iamVjdCgpOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5l
ciA9IGdldExpc3RlbmVyT2JqZWN0KGNvbnRleHQpOwogCiAgICAgLy8gSGFzIHRoZSBsaXN0ZW5l
ciBiZWVuIGRpc3Bvc2VkPwogICAgIGlmIChsaXN0ZW5lci5Jc0VtcHR5KCkpCkBAIC02MSwxOSAr
NjEsMjAgQEAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhFdmVudExpc3RlbmVyOjpnZXRMaXN0
ZW5lckZ1bmN0aW9uKCkKICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4oKTsKIH0K
IAotdjg6OkxvY2FsPHY4OjpWYWx1ZT4gVjhFdmVudExpc3RlbmVyOjpjYWxsTGlzdGVuZXJGdW5j
dGlvbih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCwgRXZlbnQqIGV2ZW50KQordjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gVjhFdmVudExpc3RlbmVyOjpjYWxsTGlzdGVuZXJGdW5jdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVu
dCwgRXZlbnQqIGV2ZW50KQogewotICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGhhbmRsZXJG
dW5jdGlvbiA9IGdldExpc3RlbmVyRnVuY3Rpb24oKTsKKworICAgIHY4OjpMb2NhbDx2ODo6RnVu
Y3Rpb24+IGhhbmRsZXJGdW5jdGlvbiA9IGdldExpc3RlbmVyRnVuY3Rpb24oY29udGV4dCk7CiAg
ICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHJlY2VpdmVyID0gZ2V0UmVjZWl2ZXJPYmplY3QoZXZl
bnQpOwogICAgIGlmIChoYW5kbGVyRnVuY3Rpb24uSXNFbXB0eSgpIHx8IHJlY2VpdmVyLklzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6VmFsdWU+KCk7CiAKICAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gcGFyYW1ldGVyc1sxXSA9IHsganNFdmVudCB9OwogCi0gICAgVjhQ
cm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShmcmFtZSgpKTsKLSAgICBpZiAoIXByb3h5
KQotICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpWYWx1ZT4oKTsKLSAgICByZXR1cm4gcHJv
eHktPmNhbGxGdW5jdGlvbihoYW5kbGVyRnVuY3Rpb24sIHJlY2VpdmVyLCAxLCBwYXJhbWV0ZXJz
KTsKKyAgICBpZiAoVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShjb250ZXh0KSkK
KyAgICAgICAgcmV0dXJuIHByb3h5LT5jYWxsRnVuY3Rpb24oaGFuZGxlckZ1bmN0aW9uLCByZWNl
aXZlciwgMSwgcGFyYW1ldGVycyk7CisKKyAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpWYWx1ZT4o
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhDdXN0b21FdmVudExpc3RlbmVyLmggYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbUV2ZW50TGlzdGVuZXIuaAppbmRleCBlMzRmMjRmLi5kYzlkMzNi
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUV2ZW50TGlz
dGVuZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUV2ZW50TGlz
dGVuZXIuaApAQCAtNDQsMTggKzQ0LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyB0
aGF0IGNhbiBoYW5kbGUgdGhlIGV2ZW50LgogICAgIGNsYXNzIFY4RXZlbnRMaXN0ZW5lciA6IHB1
YmxpYyBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lciB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IGNyZWF0ZShGcmFtZSogZnJhbWUsIFBhc3NS
ZWZQdHI8VjhMaXN0ZW5lckd1YXJkPiBndWFyZCwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGxpc3Rl
bmVyLCBib29sIGlzQXR0cmlidXRlKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOEV2ZW50
TGlzdGVuZXI+IGNyZWF0ZShQYXNzUmVmUHRyPFY4TGlzdGVuZXJHdWFyZD4gZ3VhcmQsIHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5lciwgYm9vbCBpc0F0dHJpYnV0ZSkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOEV2ZW50TGlzdGVuZXIoZnJhbWUsIGd1
YXJkLCBsaXN0ZW5lciwgaXNBdHRyaWJ1dGUpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVjhFdmVudExpc3RlbmVyKGd1YXJkLCBsaXN0ZW5lciwgaXNBdHRyaWJ1dGUpKTsKICAg
ICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBWOEV2ZW50TGlzdGVuZXIoRnJhbWUq
LCBQYXNzUmVmUHRyPFY4TGlzdGVuZXJHdWFyZD4sIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBsaXN0
ZW5lciwgYm9vbCBpc0F0dHJpYnV0ZSk7CisgICAgICAgIFY4RXZlbnRMaXN0ZW5lcihQYXNzUmVm
UHRyPFY4TGlzdGVuZXJHdWFyZD4sIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5lciwgYm9v
bCBpc0F0dHJpYnV0ZSk7CiAKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZ2V0TGlz
dGVuZXJGdW5jdGlvbigpOworICAgICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBnZXRMaXN0
ZW5lckZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIHZpcnR1YWwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gY2FsbExpc3RlbmVyRnVuY3Rpb24o
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQsIEV2ZW50Kik7CisgICAgICB2aXJ0dWFsIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IGNhbGxMaXN0ZW5lckZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCwgRXZlbnQqKTsKICAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQ==
</data>
<flag name="review"
          id="23046"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>