<?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>204355</bug_id>
          
          <creation_ts>2019-11-19 08:25:23 -0800</creation_ts>
          <short_desc>Make sendWithAsyncReply() safe to call from any thread</short_desc>
          <delta_ts>2019-11-19 10:24: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>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ggaren</cc>
    
    <cc>jer.noble</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1591531</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-19 08:25:23 -0800</bug_when>
    <thetext>Make sendWithAsyncReply() safe to call from any thread, similarly to send().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591542</commentid>
    <comment_count>1</comment_count>
      <attachid>383873</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-19 08:39:45 -0800</bug_when>
    <thetext>Created attachment 383873
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591543</commentid>
    <comment_count>2</comment_count>
      <attachid>383873</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-19 08:45:33 -0800</bug_when>
    <thetext>Comment on attachment 383873
Patch

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

&gt; Source/WebKit/Platform/IPC/Connection.cpp:255
&gt; +    ASSERT(asyncReplyHandlerMapLock().isHeld());

JSC often does this by passing an unused LockHolder&amp; as a parameter.

&gt; Source/WebKit/Platform/IPC/Connection.cpp:1145
&gt; +    LockHolder locker(asyncReplyHandlerMapLock());
&gt;      auto map = asyncReplyHandlerMap().take(reinterpret_cast&lt;uintptr_t&gt;(&amp;connection));
&gt;      for (auto&amp; handler : map.values()) {

The lock should only be held during the taking from the map, not during the iterating and calling.  This needs an additional scope.

&gt; Source/WebKit/Platform/IPC/Connection.h:204
&gt; +    // Main thread only.

Add an assert?

&gt; Source/WebKit/Platform/IPC/Connection.h:211
&gt; +    // Main thread only.

ditto.

&gt; Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm:320
&gt; +    parentProcessConnection()-&gt;sendWithAsyncReply(Messages::WebProcessProxy::ProcessWasResumed(), [this] {

Protect this or capture a weak pointer.  This looks like a UAF waiting to happen.  Even if there&apos;s something else assuring this is safe, it wouldn&apos;t hurt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591545</commentid>
    <comment_count>3</comment_count>
      <attachid>383873</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-19 08:50:38 -0800</bug_when>
    <thetext>Comment on attachment 383873
Patch

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

&gt;&gt; Source/WebKit/Platform/IPC/Connection.cpp:255
&gt;&gt; +    ASSERT(asyncReplyHandlerMapLock().isHeld());
&gt; 
&gt; JSC often does this by passing an unused LockHolder&amp; as a parameter.

And you&apos;d prefer that?

&gt;&gt; Source/WebKit/Platform/IPC/Connection.cpp:1145
&gt;&gt;      for (auto&amp; handler : map.values()) {
&gt; 
&gt; The lock should only be held during the taking from the map, not during the iterating and calling.  This needs an additional scope.

I don&apos;t understand how that can be true.. You cannot iterate over a container that may be modified from another thread, this would not be safe.

&gt;&gt; Source/WebKit/Platform/IPC/Connection.h:204
&gt;&gt; +    // Main thread only.
&gt; 
&gt; Add an assert?

There are already assertions.

&gt;&gt; Source/WebKit/Platform/IPC/Connection.h:211
&gt;&gt; +    // Main thread only.
&gt; 
&gt; ditto.

Ditto.

&gt;&gt; Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm:320
&gt;&gt; +    parentProcessConnection()-&gt;sendWithAsyncReply(Messages::WebProcessProxy::ProcessWasResumed(), [this] {
&gt; 
&gt; Protect this or capture a weak pointer.  This looks like a UAF waiting to happen.  Even if there&apos;s something else assuring this is safe, it wouldn&apos;t hurt.

WebProcess is a singleton...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591550</commentid>
    <comment_count>4</comment_count>
      <attachid>383873</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-19 08:52:12 -0800</bug_when>
    <thetext>Comment on attachment 383873
Patch

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

&gt;&gt;&gt; Source/WebKit/Platform/IPC/Connection.cpp:1145
&gt;&gt;&gt;      for (auto&amp; handler : map.values()) {
&gt;&gt; 
&gt;&gt; The lock should only be held during the taking from the map, not during the iterating and calling.  This needs an additional scope.
&gt; 
&gt; I don&apos;t understand how that can be true.. You cannot iterate over a container that may be modified from another thread, this would not be safe.

Oh since we&apos;re taking, it is safe. will fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591555</commentid>
    <comment_count>5</comment_count>
      <attachid>383875</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-19 09:01:47 -0800</bug_when>
    <thetext>Created attachment 383875
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591556</commentid>
    <comment_count>6</comment_count>
      <attachid>383875</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-19 09:03:49 -0800</bug_when>
    <thetext>Comment on attachment 383875
Patch

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

&gt; Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm:320
&gt; +    parentProcessConnection()-&gt;sendWithAsyncReply(Messages::WebProcessProxy::ProcessWasResumed(), [this] {

🤦
singleton it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591560</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-19 09:08:23 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #6)
&gt; Comment on attachment 383875 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=383875&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm:320
&gt; &gt; +    parentProcessConnection()-&gt;sendWithAsyncReply(Messages::WebProcessProxy::ProcessWasResumed(), [this] {
&gt; 
&gt; 🤦
&gt; singleton it is.

I checked, WebProcess does not subclass CanMakeWeakPtr so nobody else had this idea yet at least :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591573</commentid>
    <comment_count>8</comment_count>
      <attachid>383875</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-19 10:23:25 -0800</bug_when>
    <thetext>Comment on attachment 383875
Patch

Clearing flags on attachment: 383875

Committed r252636: &lt;https://trac.webkit.org/changeset/252636&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591574</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-19 10:23:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591576</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-19 10:24:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/57326449&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383873</attachid>
            <date>2019-11-19 08:39:45 -0800</date>
            <delta_ts>2019-11-19 09:01:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204355-20191119083944.patch</filename>
            <type>text/plain</type>
            <size>12504</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGE1NGNmZmMyZDE2ZjlhMTNm
MmU0NDNiYzJiODliMDc5MzFmY2JjYTAuLmYxYTJjM2I3NTU5MDRjODRiODkwMGE4MTkzMzM5OGNi
Yzg2NzUwMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTktMTEtMTkgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIHNlbmRXaXRoQXN5bmNSZXBs
eSgpIHNhZmUgdG8gY2FsbCBmcm9tIGFueSB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDM1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2Ugc2VuZFdpdGhBc3luY1JlcGx5KCkgc2FmZSB0
byBjYWxsIGZyb20gYW55IHRocmVhZCwgc2ltaWxhcmx5IHRvIHRoZSByZWd1bGFyIHNlbmQoKS4K
KyAgICAgICAgQWxzbyBzdGFydCB1c2luZyBpdCBpbiBXZWJQcm9jZXNzOjpwcm9jZXNzVGFza1N0
YXRlRGlkQ2hhbmdlKCkgbm93IHRoYXQgaXQgaXMgc2FmZS4KKworICAgICAgICAqIFBsYXRmb3Jt
L0lQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAgICAgKElQQzo6YXN5bmNSZXBseUhhbmRsZXJNYXBM
b2NrKToKKyAgICAgICAgKElQQzo6YXN5bmNSZXBseUhhbmRsZXJNYXApOgorICAgICAgICAoSVBD
OjpuZXh0QXN5bmNSZXBseUhhbmRsZXJJRCk6CisgICAgICAgIChJUEM6OmFkZEFzeW5jUmVwbHlI
YW5kbGVyKToKKyAgICAgICAgKElQQzo6Y2xlYXJBc3luY1JlcGx5SGFuZGxlcnMpOgorICAgICAg
ICAoSVBDOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
cm94eTo6cHJvY2Vzc1dhc1Jlc3VtZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpoYXNTZXJ2aWNlV29y
a2VyUGFnZVByb3h5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpzZXRBc3NlcnRpb25TdGF0ZUZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUHJveHk6OldlYWtPclN0cm9uZ1B0cjo6V2Vha09yU3Ryb25nUHRyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpXZWFrT3JTdHJvbmdQdHI6
OnNldElzV2Vhayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6
V2Vha09yU3Ryb25nUHRyOjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUHJveHk6OldlYWtPclN0cm9uZ1B0cjo6b3BlcmF0b3ItPiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6V2Vha09yU3Ryb25nUHRyOjpv
cGVyYXRvciogY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJv
eHk6OldlYWtPclN0cm9uZ1B0cjo6b3BlcmF0b3IgYm9vbCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6V2Vha09yU3Ryb25nUHRyOjp1cGRhdGVTdHJv
bmdSZWZlcmVuY2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzczo6cHJvY2Vzc1Rhc2tTdGF0ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3M6OnBhcmVudFByb2Nlc3NEaWRIYW5kbGVQcm9jZXNzV2FzUmVzdW1lZCk6IERl
bGV0ZWQuCisKIDIwMTktMTEtMTggIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+
CiAKICAgICAgICAgQ2hlY2sgaWYgSVRQIGlzIG9uIGJlZm9yZSBhcHBseWluZyB0aGlyZC1wYXJ0
eSBjb29raWUgYmxvY2tpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5j
cHAKaW5kZXggNTc0MWE0ZDBhZmVkZjhiZDM2NThlM2JiNzE2NTAxZTdlZTc5ZDliYi4uZTMzYTc1
N2RlM2U5ODVhOTJjNzk0YzJhNWJkODkzYWZiZGUyZWY5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJNZXNz
YWdlRmxhZ3MuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgog
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CkBAIC0yNDMsOSArMjQ0LDE1IEBAIHN0YXRpYyBIYXNoTWFwPElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQsIENvbm5lY3Rpb24qPiYgYWxsQ29ubmVjdGlvbnMoKQogICAgIHJldHVybiBtYXA7CiB9
CiAKK3N0YXRpYyBMb2NrJiBhc3luY1JlcGx5SGFuZGxlck1hcExvY2soKQoreworICAgIHN0YXRp
YyBMb2NrIGxvY2s7CisgICAgcmV0dXJuIGxvY2s7Cit9CisKIHN0YXRpYyBIYXNoTWFwPHVpbnRw
dHJfdCwgSGFzaE1hcDx1aW50NjRfdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChEZWNvZGVyKik+
Pj4mIGFzeW5jUmVwbHlIYW5kbGVyTWFwKCkKIHsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOworICAgIEFTU0VSVChhc3luY1JlcGx5SGFuZGxlck1hcExvY2soKS5pc0hlbGQoKSk7CiAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8dWludHB0cl90LCBIYXNoTWFwPHVpbnQ2
NF90LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKERlY29kZXIqKT4+Pj4gbWFwOwogICAgIHJldHVy
biBtYXAuZ2V0KCk7CiB9CkBAIC0xMTE4LDE0ICsxMTI1LDEzIEBAIHZvaWQgQ29ubmVjdGlvbjo6
ZGlzcGF0Y2hJbmNvbWluZ01lc3NhZ2VzKCkKIAogdWludDY0X3QgbmV4dEFzeW5jUmVwbHlIYW5k
bGVySUQoKQogewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgc3RhdGljIHVp
bnQ2NF90IGlkZW50aWZpZXIgeyAwIH07CisgICAgc3RhdGljIHN0ZDo6YXRvbWljPHVpbnQ2NF90
PiBpZGVudGlmaWVyIHsgMCB9OwogICAgIHJldHVybiArK2lkZW50aWZpZXI7CiB9CiAKIHZvaWQg
YWRkQXN5bmNSZXBseUhhbmRsZXIoQ29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3QgaWRl
bnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChEZWNvZGVyKik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIExv
Y2tIb2xkZXIgbG9ja2VyKGFzeW5jUmVwbHlIYW5kbGVyTWFwTG9jaygpKTsKICAgICBhdXRvIHJl
c3VsdCA9IGFzeW5jUmVwbHlIYW5kbGVyTWFwKCkuZW5zdXJlKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PigmY29ubmVjdGlvbiksIFtdIHsKICAgICAgICAgcmV0dXJuIEhhc2hNYXA8dWludDY0
X3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRGVjb2RlciopPj4oKTsKICAgICB9KS5pdGVyYXRv
ci0+dmFsdWUuYWRkKGlkZW50aWZpZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAg
LTExMzQsNyArMTE0MCw3IEBAIHZvaWQgYWRkQXN5bmNSZXBseUhhbmRsZXIoQ29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgdWludDY0X3QgaWRlbnRpZmllciwgQ29tcGxldGlvCiAKIHZvaWQgY2xlYXJB
c3luY1JlcGx5SGFuZGxlcnMoY29uc3QgQ29ubmVjdGlvbiYgY29ubmVjdGlvbikKIHsKLSAgICBS
RUxFQVNFX0FTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIo
YXN5bmNSZXBseUhhbmRsZXJNYXBMb2NrKCkpOwogICAgIGF1dG8gbWFwID0gYXN5bmNSZXBseUhh
bmRsZXJNYXAoKS50YWtlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PigmY29ubmVjdGlvbikp
OwogICAgIGZvciAoYXV0byYgaGFuZGxlciA6IG1hcC52YWx1ZXMoKSkgewogICAgICAgICBpZiAo
aGFuZGxlcikKQEAgLTExNDQsNyArMTE1MCw3IEBAIHZvaWQgY2xlYXJBc3luY1JlcGx5SGFuZGxl
cnMoY29uc3QgQ29ubmVjdGlvbiYgY29ubmVjdGlvbikKIAogQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChEZWNvZGVyKik+IHRha2VBc3luY1JlcGx5SGFuZGxlcihDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCB1aW50NjRfdCBpZGVudGlmaWVyKQogewotICAgIFJFTEVBU0VfQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihhc3luY1JlcGx5SGFuZGxlck1hcExvY2so
KSk7CiAgICAgYXV0byBpdGVyYXRvciA9IGFzeW5jUmVwbHlIYW5kbGVyTWFwKCkuZmluZChyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oJmNvbm5lY3Rpb24pKTsKICAgICBpZiAoaXRlcmF0b3Ig
IT0gYXN5bmNSZXBseUhhbmRsZXJNYXAoKS5lbmQoKSkgewogICAgICAgICBpZiAoIWl0ZXJhdG9y
LT52YWx1ZS5pc1ZhbGlkS2V5KGlkZW50aWZpZXIpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9Db25uZWN0aW9uLmgKaW5kZXggMzNiMDU5MTdmMWFhZTRiNTU3ZjY3YTFlMjIxMTA1ZmU5ZTk0
NmNiZi4uZjYyNzg1OGMzY2FiMjQwZDUwMTdmMDkyOGQ5YTc3OWFkZmM5NGZjNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaApAQCAtMTgyLDI5ICsxODIsMzMgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBwb3N0Q29ubmVjdGlvbkRpZENsb3NlT25Db25uZWN0aW9uV29ya1F1
ZXVlKCk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDPiB2b2lkIHNlbmRX
aXRoQXN5bmNSZXBseShUJiYgbWVzc2FnZSwgQyYmIGNvbXBsZXRpb25IYW5kbGVyLCB1aW50NjRf
dCBkZXN0aW5hdGlvbklEID0gMCwgT3B0aW9uU2V0PFNlbmRPcHRpb24+ID0geyB9KTsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHNlbmQoVCYmIG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3Rp
bmF0aW9uSUQsIE9wdGlvblNldDxTZW5kT3B0aW9uPiBzZW5kT3B0aW9ucyA9IHsgfSk7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kU3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUg
VDo6UmVwbHkmJiByZXBseSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0
ID0gU2Vjb25kczo6aW5maW5pdHkoKSwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3lu
Y09wdGlvbnMgPSB7IH0pOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgd2FpdEZvckFu
ZERpc3BhdGNoSW1tZWRpYXRlbHkodWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1l
b3V0LCBPcHRpb25TZXQ8V2FpdEZvck9wdGlvbj4gd2FpdEZvck9wdGlvbnMgPSB7IH0pOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEM+IHZvaWQgc2VuZFdpdGhBc3luY1JlcGx5
KFQmJiBtZXNzYWdlLCBDJiYgY29tcGxldGlvbkhhbmRsZXIsIHVpbnQ2NF90IGRlc3RpbmF0aW9u
SUQgPSAwLCBPcHRpb25TZXQ8U2VuZE9wdGlvbj4gPSB7IH0pOyAvLyBUaHJlYWQtc2FmZS4KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHNlbmQoVCYmIG1lc3NhZ2UsIHVpbnQ2NF90IGRl
c3RpbmF0aW9uSUQsIE9wdGlvblNldDxTZW5kT3B0aW9uPiBzZW5kT3B0aW9ucyA9IHsgfSk7IC8v
IFRocmVhZC1zYWZlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgc2VuZFN5bmMoVCYm
IG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYgcmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9u
SUQsIFNlY29uZHMgdGltZW91dCA9IFNlY29uZHM6OmluZmluaXR5KCksIE9wdGlvblNldDxTZW5k
U3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zID0geyB9KTsgLy8gTWFpbiB0aHJlYWQgb25seS4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHdhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0
ZWx5KHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFdh
aXRGb3JPcHRpb24+IHdhaXRGb3JPcHRpb25zID0geyB9KTsgLy8gTWFpbiB0aHJlYWQgb25seS4K
ICAgICAKKyAgICAvLyBUaHJlYWQtc2FmZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBDLCB0eXBlbmFtZSBVPgogICAgIHZvaWQgc2VuZFdpdGhBc3luY1JlcGx5KFQmJiBtZXNz
YWdlLCBDJiYgY29tcGxldGlvbkhhbmRsZXIsIE9iamVjdElkZW50aWZpZXI8VT4gZGVzdGluYXRp
b25JRCA9IHsgfSwgT3B0aW9uU2V0PFNlbmRPcHRpb24+IHNlbmRPcHRpb25zID0geyB9KQogICAg
IHsKICAgICAgICAgc2VuZFdpdGhBc3luY1JlcGx5PFQsIEM+KFdURk1vdmUobWVzc2FnZSksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBkZXN0aW5hdGlvbklELnRvVUludDY0KCksIHNlbmRP
cHRpb25zKTsKICAgICB9CiAgICAgCisgICAgLy8gVGhyZWFkLXNhZmUuCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KICAgICBib29sIHNlbmQoVCYmIG1lc3NhZ2UsIE9iamVj
dElkZW50aWZpZXI8VT4gZGVzdGluYXRpb25JRCwgT3B0aW9uU2V0PFNlbmRPcHRpb24+IHNlbmRP
cHRpb25zID0geyB9KQogICAgIHsKICAgICAgICAgcmV0dXJuIHNlbmQ8VD4oV1RGTW92ZShtZXNz
YWdlKSwgZGVzdGluYXRpb25JRC50b1VJbnQ2NCgpLCBzZW5kT3B0aW9ucyk7CiAgICAgfQogCisg
ICAgLy8gTWFpbiB0aHJlYWQgb25seS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPgogICAgIGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYg
cmVwbHksIE9iamVjdElkZW50aWZpZXI8VT4gZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0
ID0gU2Vjb25kczo6aW5maW5pdHkoKSwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3lu
Y09wdGlvbnMgPSB7IH0pCiAgICAgewogICAgICAgICByZXR1cm4gc2VuZFN5bmM8VD4oV1RGTW92
ZShtZXNzYWdlKSwgV1RGTW92ZShyZXBseSksIGRlc3RpbmF0aW9uSUQudG9VSW50NjQoKSwgdGlt
ZW91dCwgc2VuZFN5bmNPcHRpb25zKTsKICAgICB9CiAgICAgCisgICAgLy8gTWFpbiB0aHJlYWQg
b25seS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogICAgIGJvb2wgd2Fp
dEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHkoT2JqZWN0SWRlbnRpZmllcjxVPiBkZXN0aW5hdGlv
bklELCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPiB3YWl0Rm9yT3B0
aW9ucyA9IHsgfSkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCmluZGV4IGZlODE5NGY2NDc0NDYzYWI2ZTdmYjE4
YmE5ZTFiYWVhYjU5MDNmZTkuLmY2MGQ2MzA5NTUzY2M5YmUzNjY5MTYxMzFmMmViMzE2OWY0MWZi
YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQ
cm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nl
c3NQcm94eUNvY29hLm1tCkBAIC0xOTEsMTEgKzE5MSw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5
OjpyZWxlYXNlSGlnaFBlcmZvcm1hbmNlR1BVKCkKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLXZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpwcm9jZXNzV2FzUmVzdW1lZCgpCit2b2lk
IFdlYlByb2Nlc3NQcm94eTo6cHJvY2Vzc1dhc1Jlc3VtZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8gZXhpdFNjb3BlID0gbWFrZVNj
b3BlRXhpdChbdGhpc10gewotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpQYXJl
bnRQcm9jZXNzRGlkSGFuZGxlUHJvY2Vzc1dhc1Jlc3VtZWQoKSwgMCk7Ci0gICAgfSk7CisgICAg
Q29tcGxldGlvbkhhbmRsZXJDYWxsaW5nU2NvcGUgZXhpdFNjb3BlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAogICAgIGlmIChtX3Rocm90dGxlci5zaG91bGRCZVJ1bm5hYmxlKCkpIHsK
ICAgICAgICAgLy8gVGhlIHByb2Nlc3MgYmVjb21pbmcgdW5zdXNwZW5kZWQgd2FzIG5vdCB1bmV4
cGVjdGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAppbmRleCA5
MWY5ZDE2MzhmMjljNWFjMmUwMTA2NWMwZWI3YzgxYzhlMTcyYTE2Li5lODkzMTM3NWZmNzhiMGJk
Y2QxNzIyZWQyNTQzYjcxMzNjYmUyNzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuaApAQCAtMzI2LDcgKzMyNiw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICB2b2lkIHByb2Nlc3NXYXNSZXN1bWVkKCk7CisgICAg
dm9pZCBwcm9jZXNzV2FzUmVzdW1lZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogI2Vu
ZGlmCiAKICAgICB2b2lkIHdlYlBhZ2VNZWRpYVN0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eSYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lm1lc3Nh
Z2VzLmluCmluZGV4IDFmZWY4ZWQxMGRmMGUwNjhmYjE5YTRhNWMzZTA2ZTllYzIzZTFmYzkuLmY1
OTc4NGM4YmY5OTg5OWYwMGIzODNjMTQ1ZmRkZWZiYjgwZDA0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KQEAgLTY5LDcg
KzY5LDcgQEAgbWVzc2FnZXMgLT4gV2ViUHJvY2Vzc1Byb3h5IExlZ2FjeVJlY2VpdmVyIHsKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBQcm9jZXNzV2FzUmVzdW1lZCgp
CisgICAgUHJvY2Vzc1dhc1Jlc3VtZWQoKSAtPiAoKSBBc3luYwogI2VuZGlmCiAKICAgICAjIFBs
dWctaW4gbWVzc2FnZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAppbmRleCA3
NTMxMzcyN2I4ODlmMWVhZjNjN2UyNTAxNTg1MTRlMTFhMjAzZWI3Li41NWNjYzJlY2RlY2ZlYWZk
NzcwMzA2YzVlM2NkODBiNmVhNzU4NjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmgKQEAgLTQ2Miw3ICs0NjIsNiBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICB2b2lkIHByb2Nlc3NUYXNrU3RhdGVEaWRDaGFuZ2UoUHJvY2Vzc1Rhc2tTdGF0
ZU9ic2VydmVyOjpUYXNrU3RhdGUpIGZpbmFsOwotICAgIHZvaWQgcGFyZW50UHJvY2Vzc0RpZEhh
bmRsZVByb2Nlc3NXYXNSZXN1bWVkKCk7CiAgICAgYm9vbCBzaG91bGRGcmVlemVPblN1c3BlbnNp
b24oKSBjb25zdDsKICAgICB2b2lkIHVwZGF0ZUZyZWV6ZXJTdGF0dXMoKTsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4g
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCA1
OGQ0ZjY3YmVmMWQ0ZjcxMWRlNWQzNjlhNTQ0MDczNDJiN2I3M2IxLi5kZDIxYWI3NjAzNDdhNzRj
NTdiODViYzkzZjc5NGE0ODdiN2RmYTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMTU0LDcgKzE1NCw2IEBAIG1lc3NhZ2VzIC0+
IFdlYlByb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICAgICBVbmJsb2NrQWNjZXNzaWJpbGl0eVNlcnZlcihXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSBoYW5kbGUpCi0gICAgUGFyZW50UHJvY2Vzc0RpZEhhbmRsZVByb2Nlc3NXYXNSZXN1
bWVkKCk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5t
bSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KaW5k
ZXggZWViMDcwY2EyMTNiZTcyNTQ5OTM1ZDhmNDQ2MTViNTJjOTAwOTA1MC4uMGMxYTU3MTM4MGQ2
Y2Q0MDUxMThiODlhN2ZkY2M3ZDQ3NDI4MjM3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCkBAIC0zMTcsMTkgKzMxNywxMyBAQCB2
b2lkIFdlYlByb2Nlc3M6OnByb2Nlc3NUYXNrU3RhdGVEaWRDaGFuZ2UoUHJvY2Vzc1Rhc2tTdGF0
ZU9ic2VydmVyOjpUYXNrU3RhdGUgdAogICAgIH07CiAKICAgICAvLyBUaGlzIHdpbGwgY2F1c2Ug
dGhlIHBhcmVudCBwcm9jZXNzIHRvIHNlbmQgYSBQYXJlbnRQcm9jZXNzRGlkSGFuZGxlUHJvY2Vz
c1dhc1Jlc3VtZWQgSVBDIGJhY2ssIHNvIHRoYXQgd2UgY2FuIHJlbGVhc2Ugb3VyIGFzc2VydGlv
biBvbiBpdHMgYmVoYWxmLgotICAgIC8vIFdlIGFyZSBub3QgdXNpbmcgc2VuZFdpdGhBc3luY1Jl
cGx5KCkgYmVjYXVzZSBpdCB3b3VsZCBub3QgYmUgdGhyZWFkLXNhZmUuCi0gICAgcGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpQcm9jZXNz
V2FzUmVzdW1lZCgpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzOjpwYXJlbnRQcm9jZXNzRGlk
SGFuZGxlUHJvY2Vzc1dhc1Jlc3VtZWQoKQotewotICAgIExvY2tIb2xkZXIgaG9sZGVyKG1fcHJv
Y2Vzc1dhc1Jlc3VtZWRVSUFzc2VydGlvbkxvY2spOwotICAgIEFTU0VSVChtX3Byb2Nlc3NXYXNS
ZXN1bWVkVUlBc3NlcnRpb24pOwotCi0gICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24s
ICIlcCAtIFdlYlByb2Nlc3M6OnBhcmVudFByb2Nlc3NEaWRIYW5kbGVQcm9jZXNzV2FzUmVzdW1l
ZCgpIFJlbGVhc2luZyAnV2ViUHJvY2VzcyB3YXMgcmVzdW1lZCcgYXNzZXJ0aW9uIG9uIGJlaGFs
ZiBvbiBVSVByb2Nlc3MiLCB0aGlzKTsKLQotICAgIFttX3Byb2Nlc3NXYXNSZXN1bWVkVUlBc3Nl
cnRpb24gaW52YWxpZGF0ZV07Ci0gICAgbV9wcm9jZXNzV2FzUmVzdW1lZFVJQXNzZXJ0aW9uID0g
bnVsbHB0cjsKKyAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6UHJvY2Vzc1dhc1Jlc3VtZWQoKSwgW3RoaXNd
IHsKKyAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9wcm9jZXNzV2FzUmVzdW1lZFVJQXNzZXJ0
aW9uTG9jayk7CisgICAgICAgIEFTU0VSVChtX3Byb2Nlc3NXYXNSZXN1bWVkVUlBc3NlcnRpb24p
OworICAgICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIiVwIC0gV2ViUHJvY2Vz
czo6cGFyZW50UHJvY2Vzc0RpZEhhbmRsZVByb2Nlc3NXYXNSZXN1bWVkKCkgUmVsZWFzaW5nICdX
ZWJQcm9jZXNzIHdhcyByZXN1bWVkJyBhc3NlcnRpb24gb24gYmVoYWxmIG9uIFVJUHJvY2VzcyIs
IHRoaXMpOworICAgICAgICBbbV9wcm9jZXNzV2FzUmVzdW1lZFVJQXNzZXJ0aW9uIGludmFsaWRh
dGVdOworICAgICAgICBtX3Byb2Nlc3NXYXNSZXN1bWVkVUlBc3NlcnRpb24gPSBudWxscHRyOwor
ICAgIH0pOwogfQogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383875</attachid>
            <date>2019-11-19 09:01:47 -0800</date>
            <delta_ts>2019-11-19 10:23:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204355-20191119090146.patch</filename>
            <type>text/plain</type>
            <size>14210</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNjMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGE1NGNmZmMyZDE2ZjlhMTNm
MmU0NDNiYzJiODliMDc5MzFmY2JjYTAuLmYxYTJjM2I3NTU5MDRjODRiODkwMGE4MTkzMzM5OGNi
Yzg2NzUwMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTktMTEtMTkgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIHNlbmRXaXRoQXN5bmNSZXBs
eSgpIHNhZmUgdG8gY2FsbCBmcm9tIGFueSB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDM1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2Ugc2VuZFdpdGhBc3luY1JlcGx5KCkgc2FmZSB0
byBjYWxsIGZyb20gYW55IHRocmVhZCwgc2ltaWxhcmx5IHRvIHRoZSByZWd1bGFyIHNlbmQoKS4K
KyAgICAgICAgQWxzbyBzdGFydCB1c2luZyBpdCBpbiBXZWJQcm9jZXNzOjpwcm9jZXNzVGFza1N0
YXRlRGlkQ2hhbmdlKCkgbm93IHRoYXQgaXQgaXMgc2FmZS4KKworICAgICAgICAqIFBsYXRmb3Jt
L0lQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAgICAgKElQQzo6YXN5bmNSZXBseUhhbmRsZXJNYXBM
b2NrKToKKyAgICAgICAgKElQQzo6YXN5bmNSZXBseUhhbmRsZXJNYXApOgorICAgICAgICAoSVBD
OjpuZXh0QXN5bmNSZXBseUhhbmRsZXJJRCk6CisgICAgICAgIChJUEM6OmFkZEFzeW5jUmVwbHlI
YW5kbGVyKToKKyAgICAgICAgKElQQzo6Y2xlYXJBc3luY1JlcGx5SGFuZGxlcnMpOgorICAgICAg
ICAoSVBDOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
cm94eTo6cHJvY2Vzc1dhc1Jlc3VtZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpoYXNTZXJ2aWNlV29y
a2VyUGFnZVByb3h5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpzZXRBc3NlcnRpb25TdGF0ZUZvclRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUHJveHk6OldlYWtPclN0cm9uZ1B0cjo6V2Vha09yU3Ryb25nUHRyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpXZWFrT3JTdHJvbmdQdHI6
OnNldElzV2Vhayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6
V2Vha09yU3Ryb25nUHRyOjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUHJveHk6OldlYWtPclN0cm9uZ1B0cjo6b3BlcmF0b3ItPiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6V2Vha09yU3Ryb25nUHRyOjpv
cGVyYXRvciogY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJv
eHk6OldlYWtPclN0cm9uZ1B0cjo6b3BlcmF0b3IgYm9vbCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6V2Vha09yU3Ryb25nUHRyOjp1cGRhdGVTdHJv
bmdSZWZlcmVuY2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzczo6cHJvY2Vzc1Rhc2tTdGF0ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3M6OnBhcmVudFByb2Nlc3NEaWRIYW5kbGVQcm9jZXNzV2FzUmVzdW1lZCk6IERl
bGV0ZWQuCisKIDIwMTktMTEtMTggIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+
CiAKICAgICAgICAgQ2hlY2sgaWYgSVRQIGlzIG9uIGJlZm9yZSBhcHBseWluZyB0aGlyZC1wYXJ0
eSBjb29raWUgYmxvY2tpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5j
cHAKaW5kZXggNTc0MWE0ZDBhZmVkZjhiZDM2NThlM2JiNzE2NTAxZTdlZTc5ZDliYi4uOTk4NmZi
MzdmYTI0NjM0Yjk3NmNlYTRjOWE4N2E0MzI2NzRiMWQ3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJNZXNz
YWdlRmxhZ3MuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgog
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CkBAIC0yNDMsOSArMjQ0LDE1IEBAIHN0YXRpYyBIYXNoTWFwPElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQsIENvbm5lY3Rpb24qPiYgYWxsQ29ubmVjdGlvbnMoKQogICAgIHJldHVybiBtYXA7CiB9
CiAKLXN0YXRpYyBIYXNoTWFwPHVpbnRwdHJfdCwgSGFzaE1hcDx1aW50NjRfdCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChEZWNvZGVyKik+Pj4mIGFzeW5jUmVwbHlIYW5kbGVyTWFwKCkKK3N0YXRp
YyBMb2NrJiBhc3luY1JlcGx5SGFuZGxlck1hcExvY2soKQogewotICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CisgICAgc3RhdGljIExvY2sgbG9jazsKKyAgICByZXR1cm4gbG9jazsKK30K
Kworc3RhdGljIEhhc2hNYXA8dWludHB0cl90LCBIYXNoTWFwPHVpbnQ2NF90LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKERlY29kZXIqKT4+PiYgYXN5bmNSZXBseUhhbmRsZXJNYXAoY29uc3QgTG9j
a0hvbGRlciYpCit7CisgICAgQVNTRVJUKGFzeW5jUmVwbHlIYW5kbGVyTWFwTG9jaygpLmlzSGVs
ZCgpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDx1aW50cHRyX3QsIEhhc2hN
YXA8dWludDY0X3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRGVjb2RlciopPj4+PiBtYXA7CiAg
ICAgcmV0dXJuIG1hcC5nZXQoKTsKIH0KQEAgLTExMTgsMTUgKzExMjUsMTQgQEAgdm9pZCBDb25u
ZWN0aW9uOjpkaXNwYXRjaEluY29taW5nTWVzc2FnZXMoKQogCiB1aW50NjRfdCBuZXh0QXN5bmNS
ZXBseUhhbmRsZXJJRCgpCiB7Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBz
dGF0aWMgdWludDY0X3QgaWRlbnRpZmllciB7IDAgfTsKKyAgICBzdGF0aWMgc3RkOjphdG9taWM8
dWludDY0X3Q+IGlkZW50aWZpZXIgeyAwIH07CiAgICAgcmV0dXJuICsraWRlbnRpZmllcjsKIH0K
IAogdm9pZCBhZGRBc3luY1JlcGx5SGFuZGxlcihDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50
NjRfdCBpZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKERlY29kZXIqKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
Ci0gICAgYXV0byByZXN1bHQgPSBhc3luY1JlcGx5SGFuZGxlck1hcCgpLmVuc3VyZShyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oJmNvbm5lY3Rpb24pLCBbXSB7CisgICAgTG9ja0hvbGRlciBs
b2NrZXIoYXN5bmNSZXBseUhhbmRsZXJNYXBMb2NrKCkpOworICAgIGF1dG8gcmVzdWx0ID0gYXN5
bmNSZXBseUhhbmRsZXJNYXAobG9ja2VyKS5lbnN1cmUocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KCZjb25uZWN0aW9uKSwgW10gewogICAgICAgICByZXR1cm4gSGFzaE1hcDx1aW50NjRfdCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChEZWNvZGVyKik+PigpOwogICAgIH0pLml0ZXJhdG9yLT52
YWx1ZS5hZGQoaWRlbnRpZmllciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIEFT
U0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC0xMTM0LDggKzExNDAs
MTIgQEAgdm9pZCBhZGRBc3luY1JlcGx5SGFuZGxlcihDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1
aW50NjRfdCBpZGVudGlmaWVyLCBDb21wbGV0aW8KIAogdm9pZCBjbGVhckFzeW5jUmVwbHlIYW5k
bGVycyhjb25zdCBDb25uZWN0aW9uJiBjb25uZWN0aW9uKQogewotICAgIFJFTEVBU0VfQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBhdXRvIG1hcCA9IGFzeW5jUmVwbHlIYW5kbGVyTWFw
KCkudGFrZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oJmNvbm5lY3Rpb24pKTsKKyAgICBI
YXNoTWFwPHVpbnQ2NF90LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKERlY29kZXIqKT4+IG1hcDsK
KyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGFzeW5jUmVwbHlIYW5kbGVyTWFwTG9j
aygpKTsKKyAgICAgICAgbWFwID0gYXN5bmNSZXBseUhhbmRsZXJNYXAobG9ja2VyKS50YWtlKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PigmY29ubmVjdGlvbikpOworICAgIH0KKwogICAgIGZv
ciAoYXV0byYgaGFuZGxlciA6IG1hcC52YWx1ZXMoKSkgewogICAgICAgICBpZiAoaGFuZGxlcikK
ICAgICAgICAgICAgIGhhbmRsZXIobnVsbHB0cik7CkBAIC0xMTQ0LDkgKzExNTQsMTAgQEAgdm9p
ZCBjbGVhckFzeW5jUmVwbHlIYW5kbGVycyhjb25zdCBDb25uZWN0aW9uJiBjb25uZWN0aW9uKQog
CiBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKERlY29kZXIqKT4gdGFrZUFzeW5jUmVwbHlIYW5kbGVy
KENvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IGlkZW50aWZpZXIpCiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIGF1dG8gaXRlcmF0b3IgPSBhc3lu
Y1JlcGx5SGFuZGxlck1hcCgpLmZpbmQocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KCZjb25u
ZWN0aW9uKSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IGFzeW5jUmVwbHlIYW5kbGVyTWFwKCkuZW5k
KCkpIHsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihhc3luY1JlcGx5SGFuZGxlck1hcExvY2soKSk7
CisgICAgYXV0byYgbWFwID0gYXN5bmNSZXBseUhhbmRsZXJNYXAobG9ja2VyKTsKKyAgICBhdXRv
IGl0ZXJhdG9yID0gbWFwLmZpbmQocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KCZjb25uZWN0
aW9uKSk7CisgICAgaWYgKGl0ZXJhdG9yICE9IG1hcC5lbmQoKSkgewogICAgICAgICBpZiAoIWl0
ZXJhdG9yLT52YWx1ZS5pc1ZhbGlkS2V5KGlkZW50aWZpZXIpKSB7CiAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGNvbm5lY3Rpb24ubWFya0N1cnJlbnRseURp
c3BhdGNoZWRNZXNzYWdlQXNJbnZhbGlkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9Db25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25u
ZWN0aW9uLmgKaW5kZXggMzNiMDU5MTdmMWFhZTRiNTU3ZjY3YTFlMjIxMTA1ZmU5ZTk0NmNiZi4u
ZmJiY2E5NDc2OTJkZjk1MzMzZDFlN2UxZDZiMjE4MGU1MTRhZjMyZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaApAQCAtMTgyLDI5ICsxODIsMzMgQEAgcHVibGljOgog
CiAgICAgdm9pZCBwb3N0Q29ubmVjdGlvbkRpZENsb3NlT25Db25uZWN0aW9uV29ya1F1ZXVlKCk7
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDPiB2b2lkIHNlbmRXaXRoQXN5
bmNSZXBseShUJiYgbWVzc2FnZSwgQyYmIGNvbXBsZXRpb25IYW5kbGVyLCB1aW50NjRfdCBkZXN0
aW5hdGlvbklEID0gMCwgT3B0aW9uU2V0PFNlbmRPcHRpb24+ID0geyB9KTsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBib29sIHNlbmQoVCYmIG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0aW9u
SUQsIE9wdGlvblNldDxTZW5kT3B0aW9uPiBzZW5kT3B0aW9ucyA9IHsgfSk7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kU3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVw
bHkmJiByZXBseSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0ID0gU2Vj
b25kczo6aW5maW5pdHkoKSwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlv
bnMgPSB7IH0pOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgd2FpdEZvckFuZERpc3Bh
dGNoSW1tZWRpYXRlbHkodWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0LCBP
cHRpb25TZXQ8V2FpdEZvck9wdGlvbj4gd2FpdEZvck9wdGlvbnMgPSB7IH0pOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEM+IHZvaWQgc2VuZFdpdGhBc3luY1JlcGx5KFQmJiBt
ZXNzYWdlLCBDJiYgY29tcGxldGlvbkhhbmRsZXIsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQgPSAw
LCBPcHRpb25TZXQ8U2VuZE9wdGlvbj4gPSB7IH0pOyAvLyBUaHJlYWQtc2FmZS4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBib29sIHNlbmQoVCYmIG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0
aW9uSUQsIE9wdGlvblNldDxTZW5kT3B0aW9uPiBzZW5kT3B0aW9ucyA9IHsgfSk7IC8vIFRocmVh
ZC1zYWZlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgc2VuZFN5bmMoVCYmIG1lc3Nh
Z2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYgcmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNl
Y29uZHMgdGltZW91dCA9IFNlY29uZHM6OmluZmluaXR5KCksIE9wdGlvblNldDxTZW5kU3luY09w
dGlvbj4gc2VuZFN5bmNPcHRpb25zID0geyB9KTsgLy8gTWFpbiB0aHJlYWQgb25seS4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHdhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5KHVp
bnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFdhaXRGb3JP
cHRpb24+IHdhaXRGb3JPcHRpb25zID0geyB9KTsgLy8gTWFpbiB0aHJlYWQgb25seS4KICAgICAK
KyAgICAvLyBUaHJlYWQtc2FmZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBD
LCB0eXBlbmFtZSBVPgogICAgIHZvaWQgc2VuZFdpdGhBc3luY1JlcGx5KFQmJiBtZXNzYWdlLCBD
JiYgY29tcGxldGlvbkhhbmRsZXIsIE9iamVjdElkZW50aWZpZXI8VT4gZGVzdGluYXRpb25JRCA9
IHsgfSwgT3B0aW9uU2V0PFNlbmRPcHRpb24+IHNlbmRPcHRpb25zID0geyB9KQogICAgIHsKICAg
ICAgICAgc2VuZFdpdGhBc3luY1JlcGx5PFQsIEM+KFdURk1vdmUobWVzc2FnZSksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBkZXN0aW5hdGlvbklELnRvVUludDY0KCksIHNlbmRPcHRpb25z
KTsKICAgICB9CiAgICAgCisgICAgLy8gVGhyZWFkLXNhZmUuCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4KICAgICBib29sIHNlbmQoVCYmIG1lc3NhZ2UsIE9iamVjdElkZW50
aWZpZXI8VT4gZGVzdGluYXRpb25JRCwgT3B0aW9uU2V0PFNlbmRPcHRpb24+IHNlbmRPcHRpb25z
ID0geyB9KQogICAgIHsKICAgICAgICAgcmV0dXJuIHNlbmQ8VD4oV1RGTW92ZShtZXNzYWdlKSwg
ZGVzdGluYXRpb25JRC50b1VJbnQ2NCgpLCBzZW5kT3B0aW9ucyk7CiAgICAgfQogCisgICAgLy8g
TWFpbiB0aHJlYWQgb25seS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgog
ICAgIGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYgcmVwbHks
IE9iamVjdElkZW50aWZpZXI8VT4gZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0ID0gU2Vj
b25kczo6aW5maW5pdHkoKSwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlv
bnMgPSB7IH0pCiAgICAgewogICAgICAgICByZXR1cm4gc2VuZFN5bmM8VD4oV1RGTW92ZShtZXNz
YWdlKSwgV1RGTW92ZShyZXBseSksIGRlc3RpbmF0aW9uSUQudG9VSW50NjQoKSwgdGltZW91dCwg
c2VuZFN5bmNPcHRpb25zKTsKICAgICB9CiAgICAgCisgICAgLy8gTWFpbiB0aHJlYWQgb25seS4K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogICAgIGJvb2wgd2FpdEZvckFu
ZERpc3BhdGNoSW1tZWRpYXRlbHkoT2JqZWN0SWRlbnRpZmllcjxVPiBkZXN0aW5hdGlvbklELCBT
ZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPiB3YWl0Rm9yT3B0aW9ucyA9
IHsgfSkKICAgICB7CkBAIC00ODMsNiArNDg3LDcgQEAgdm9pZCBtb3ZlVHVwbGUoc3RkOjp0dXBs
ZTxBLi4uPiYmIGEsIHN0ZDo6dHVwbGU8Qi4uLj4mIGIpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBi
b29sIENvbm5lY3Rpb246OnNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYm
IHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNl
dDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQogewogICAgIENPTVBJTEVfQVNTRVJU
KFQ6OmlzU3luYywgU3luY01lc3NhZ2VFeHBlY3RlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogCiAgICAgdWludDY0X3Qgc3luY1JlcXVlc3RJRCA9IDA7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+IGVuY29kZXIgPSBjcmVhdGVTeW5jTWVzc2FnZUVuY29k
ZXIoVDo6cmVjZWl2ZXJOYW1lKCksIFQ6Om5hbWUoKSwgZGVzdGluYXRpb25JRCwgc3luY1JlcXVl
c3RJRCk7CkBAIC01MTEsNiArNTE2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBDb25u
ZWN0aW9uOjpzZW5kU3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJgogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBib29sIENvbm5lY3Rpb246OndhaXRGb3JBbmREaXNwYXRjaEltbWVk
aWF0ZWx5KHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0
PFdhaXRGb3JPcHRpb24+IHdhaXRGb3JPcHRpb25zKQogeworICAgIFJFTEVBU0VfQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gZGVjb2RlciA9
IHdhaXRGb3JNZXNzYWdlKFQ6OnJlY2VpdmVyTmFtZSgpLCBUOjpuYW1lKCksIGRlc3RpbmF0aW9u
SUQsIHRpbWVvdXQsIHdhaXRGb3JPcHRpb25zKTsKICAgICBpZiAoIWRlY29kZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlByb2Nlc3NQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5kZXggZmU4MTk0ZjY0NzQ0NjNhYjZlN2ZiMThiYTll
MWJhZWFiNTkwM2ZlOS4uZjYwZDYzMDk1NTNjYzliZTM2NjkxNjEzMWYyZWIzMTY5ZjQxZmJhMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1By
b3h5Q29jb2EubW0KQEAgLTE5MSwxMSArMTkxLDkgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnJl
bGVhc2VIaWdoUGVyZm9ybWFuY2VHUFUoKQogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotdm9pZCBXZWJQcm9jZXNzUHJveHk6OnByb2Nlc3NXYXNSZXN1bWVkKCkKK3ZvaWQgV2Vi
UHJvY2Vzc1Byb3h5Ojpwcm9jZXNzV2FzUmVzdW1lZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBleGl0U2NvcGUgPSBtYWtlU2NvcGVF
eGl0KFt0aGlzXSB7Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlBhcmVudFBy
b2Nlc3NEaWRIYW5kbGVQcm9jZXNzV2FzUmVzdW1lZCgpLCAwKTsKLSAgICB9KTsKKyAgICBDb21w
bGV0aW9uSGFuZGxlckNhbGxpbmdTY29wZSBleGl0U2NvcGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCiAgICAgaWYgKG1fdGhyb3R0bGVyLnNob3VsZEJlUnVubmFibGUoKSkgewogICAg
ICAgICAvLyBUaGUgcHJvY2VzcyBiZWNvbWluZyB1bnN1c3BlbmRlZCB3YXMgbm90IHVuZXhwZWN0
ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCmluZGV4IDkxZjlk
MTYzOGYyOWM1YWMyZTAxMDY1YzBlYjdjODFjOGUxNzJhMTYuLmU4OTMxMzc1ZmY3OGIwYmRjZDE3
MjJlZDI1NDNiNzEzM2NiZTI3MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5oCkBAIC0zMjYsNyArMzI2LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIHZvaWQgcHJvY2Vzc1dhc1Jlc3VtZWQoKTsKKyAgICB2b2lk
IHByb2Nlc3NXYXNSZXN1bWVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAjZW5kaWYK
IAogICAgIHZvaWQgd2ViUGFnZU1lZGlhU3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5Jik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkubWVzc2FnZXMu
aW4KaW5kZXggMWZlZjhlZDEwZGYwZTA2OGZiMTlhNGE1YzNlMDZlOWVjMjNlMWZjOS4uZjU5Nzg0
YzhiZjk5ODk5ZjAwYjM4M2MxNDVmZGRlZmJiODBkMDQxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgpAQCAtNjksNyArNjks
NyBAQCBtZXNzYWdlcyAtPiBXZWJQcm9jZXNzUHJveHkgTGVnYWN5UmVjZWl2ZXIgewogI2VuZGlm
CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFByb2Nlc3NXYXNSZXN1bWVkKCkKKyAg
ICBQcm9jZXNzV2FzUmVzdW1lZCgpIC0+ICgpIEFzeW5jCiAjZW5kaWYKIAogICAgICMgUGx1Zy1p
biBtZXNzYWdlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCmluZGV4IDc1MzEz
NzI3Yjg4OWYxZWFmM2M3ZTI1MDE1ODUxNGUxMWEyMDNlYjcuLjU1Y2NjMmVjZGVjZmVhZmQ3NzAz
MDZjNWUzY2Q4MGI2ZWE3NTg2NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
aApAQCAtNDYyLDcgKzQ2Miw2IEBAIHByaXZhdGU6CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQogICAgIHZvaWQgcHJvY2Vzc1Rhc2tTdGF0ZURpZENoYW5nZShQcm9jZXNzVGFza1N0YXRlT2Jz
ZXJ2ZXI6OlRhc2tTdGF0ZSkgZmluYWw7Ci0gICAgdm9pZCBwYXJlbnRQcm9jZXNzRGlkSGFuZGxl
UHJvY2Vzc1dhc1Jlc3VtZWQoKTsKICAgICBib29sIHNob3VsZEZyZWV6ZU9uU3VzcGVuc2lvbigp
IGNvbnN0OwogICAgIHZvaWQgdXBkYXRlRnJlZXplclN0YXR1cygpOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IDU4ZDRm
NjdiZWYxZDRmNzExZGU1ZDM2OWE1NDQwNzM0MmI3YjczYjEuLmRkMjFhYjc2MDM0N2E3NGM1N2I4
NWJjOTNmNzk0YTQ4N2I3ZGZhMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0xNTQsNyArMTU0LDYgQEAgbWVzc2FnZXMgLT4gV2Vi
UHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IFVuYmxvY2tBY2Nlc3NpYmlsaXR5U2VydmVyKFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlIGhhbmRsZSkKLSAgICBQYXJlbnRQcm9jZXNzRGlkSGFuZGxlUHJvY2Vzc1dhc1Jlc3VtZWQo
KTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQppbmRleCBl
ZWIwNzBjYTIxM2JlNzI1NDk5MzVkOGY0NDYxNWI1MmM5MDA5MDUwLi4wYzFhNTcxMzgwZDZjZDQw
NTExOGI4OWE3ZmRjYzdkNDc0MjgyMzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KQEAgLTMxNywxOSArMzE3LDEzIEBAIHZvaWQg
V2ViUHJvY2Vzczo6cHJvY2Vzc1Rhc2tTdGF0ZURpZENoYW5nZShQcm9jZXNzVGFza1N0YXRlT2Jz
ZXJ2ZXI6OlRhc2tTdGF0ZSB0CiAgICAgfTsKIAogICAgIC8vIFRoaXMgd2lsbCBjYXVzZSB0aGUg
cGFyZW50IHByb2Nlc3MgdG8gc2VuZCBhIFBhcmVudFByb2Nlc3NEaWRIYW5kbGVQcm9jZXNzV2Fz
UmVzdW1lZCBJUEMgYmFjaywgc28gdGhhdCB3ZSBjYW4gcmVsZWFzZSBvdXIgYXNzZXJ0aW9uIG9u
IGl0cyBiZWhhbGYuCi0gICAgLy8gV2UgYXJlIG5vdCB1c2luZyBzZW5kV2l0aEFzeW5jUmVwbHko
KSBiZWNhdXNlIGl0IHdvdWxkIG5vdCBiZSB0aHJlYWQtc2FmZS4KLSAgICBwYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OlByb2Nlc3NXYXNS
ZXN1bWVkKCksIDApOwotfQotCi12b2lkIFdlYlByb2Nlc3M6OnBhcmVudFByb2Nlc3NEaWRIYW5k
bGVQcm9jZXNzV2FzUmVzdW1lZCgpCi17Ci0gICAgTG9ja0hvbGRlciBob2xkZXIobV9wcm9jZXNz
V2FzUmVzdW1lZFVJQXNzZXJ0aW9uTG9jayk7Ci0gICAgQVNTRVJUKG1fcHJvY2Vzc1dhc1Jlc3Vt
ZWRVSUFzc2VydGlvbik7Ci0KLSAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIiVw
IC0gV2ViUHJvY2Vzczo6cGFyZW50UHJvY2Vzc0RpZEhhbmRsZVByb2Nlc3NXYXNSZXN1bWVkKCkg
UmVsZWFzaW5nICdXZWJQcm9jZXNzIHdhcyByZXN1bWVkJyBhc3NlcnRpb24gb24gYmVoYWxmIG9u
IFVJUHJvY2VzcyIsIHRoaXMpOwotCi0gICAgW21fcHJvY2Vzc1dhc1Jlc3VtZWRVSUFzc2VydGlv
biBpbnZhbGlkYXRlXTsKLSAgICBtX3Byb2Nlc3NXYXNSZXN1bWVkVUlBc3NlcnRpb24gPSBudWxs
cHRyOworICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpQcm9jZXNzV2FzUmVzdW1lZCgpLCBbdGhpc10gewor
ICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX3Byb2Nlc3NXYXNSZXN1bWVkVUlBc3NlcnRpb25M
b2NrKTsKKyAgICAgICAgQVNTRVJUKG1fcHJvY2Vzc1dhc1Jlc3VtZWRVSUFzc2VydGlvbik7Cisg
ICAgICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiJXAgLSBXZWJQcm9jZXNzOjpw
YXJlbnRQcm9jZXNzRGlkSGFuZGxlUHJvY2Vzc1dhc1Jlc3VtZWQoKSBSZWxlYXNpbmcgJ1dlYlBy
b2Nlc3Mgd2FzIHJlc3VtZWQnIGFzc2VydGlvbiBvbiBiZWhhbGYgb24gVUlQcm9jZXNzIiwgdGhp
cyk7CisgICAgICAgIFttX3Byb2Nlc3NXYXNSZXN1bWVkVUlBc3NlcnRpb24gaW52YWxpZGF0ZV07
CisgICAgICAgIG1fcHJvY2Vzc1dhc1Jlc3VtZWRVSUFzc2VydGlvbiA9IG51bGxwdHI7CisgICAg
fSk7CiB9CiAKICNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>