<?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>190115</bug_id>
          
          <creation_ts>2018-09-29 23:02:42 -0700</creation_ts>
          <short_desc>GC can collect JS wrappers of nodes in the mutation records waiting to be delivered</short_desc>
          <delta_ts>2018-11-06 11:56:01 -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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=190277</see_also>
          <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>
          <dependson>190113</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ap</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>jlewis3</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>koivisto</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1464838</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-29 23:02:42 -0700</bug_when>
    <thetext>MutationObserver needs to keep JS wrappers of the elements in the pending mutation records alive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464839</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-09-29 23:03:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/44891799&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464840</commentid>
    <comment_count>2</comment_count>
      <attachid>351211</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-29 23:05:08 -0700</bug_when>
    <thetext>Created attachment 351211
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464841</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-29 23:06:01 -0700</bug_when>
    <thetext>This is basically the final patch (without a change log). I need to wait for the bug 190113 to be fixed first since this patch depends on it (WIP includes both the patch fo for this bug as well as the one for the bug 190113).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464843</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-09-29 23:06:39 -0700</bug_when>
    <thetext>Attachment 351211 did not pass style-queue:


ERROR: Source/WebCore/dom/GCReachableRef.h:87:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/dom/GCReachableRef.h:90:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/dom/GCReachableRef.h:152:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 3 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465288</commentid>
    <comment_count>5</comment_count>
      <attachid>351318</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-01 16:06:28 -0700</bug_when>
    <thetext>Created attachment 351318
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465393</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-01 22:39:21 -0700</bug_when>
    <thetext>Ping reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465649</commentid>
    <comment_count>7</comment_count>
      <attachid>351318</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-10-02 10:22:38 -0700</bug_when>
    <thetext>Comment on attachment 351318
Fixes the bug

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

&gt; Source/WebCore/dom/MutationObserver.h:113
&gt;      Vector&lt;Ref&lt;MutationRecord&gt;&gt; m_records;
&gt; +    HashSet&lt;GCReachableRef&lt;Node&gt;&gt; m_pendingTargets;

It&apos;s kind of hard to follow the logic to keep m_pendingTargets in sync with m_records. Can we change MutationRecord to use GCReachableRef internally instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465717</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-02 12:13:06 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #7)
&gt; Comment on attachment 351318 [details]
&gt; Fixes the bug
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=351318&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/MutationObserver.h:113
&gt; &gt;      Vector&lt;Ref&lt;MutationRecord&gt;&gt; m_records;
&gt; &gt; +    HashSet&lt;GCReachableRef&lt;Node&gt;&gt; m_pendingTargets;
&gt; 
&gt; It&apos;s kind of hard to follow the logic to keep m_pendingTargets in sync with
&gt; m_records. Can we change MutationRecord to use GCReachableRef internally
&gt; instead?

Can&apos;t do that because MutationRecord is exposed to JS. That would definitely create a ref / GC cycle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465721</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-02 12:20:41 -0700</bug_when>
    <thetext>Another alternative I&apos;ve considered as adding a GCReachableRef to MutationRecord and clear it before we deliver. That has a downside of having to create a separate mechanism for when takeRecords() is called because we need to keep elements alive until those elements are accessed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465773</commentid>
    <comment_count>10</comment_count>
      <attachid>351318</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-10-02 15:15:22 -0700</bug_when>
    <thetext>Comment on attachment 351318
Fixes the bug

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

&gt; Source/WebCore/dom/MutationObserver.cpp:118
&gt; +    // Don&apos;t clear m_pendingTargets here because we can correct JS wrappers
&gt; +    // between the time takeRecords are called and nodes in records are accesssed.

correct =&gt; collect
are =&gt; is

What will access the nodes referenced by takeRecords(), and what guarantees that those node wrappers will remain valid after MutationObserver::disconnect() or MutationObserver::deliver()?

&gt; Source/WebCore/dom/MutationObserver.cpp:188
&gt; +    m_pendingTargets.add(*mutation-&gt;target());

Is there value in putting everything in a hash table, or should we just use a vector? What&apos;s an example of a case where a mutation observer will enqueue the same target more than twice?

&gt; Source/WebCore/dom/MutationObserver.cpp:241
&gt; +        m_pendingTargets.clear(); // takeRecords() may have been called.

You can get these return cases right automatically by swapping m_pendingTargets into an auto local variable (just like we do for m_records).

&gt; Source/WebCore/dom/MutationObserverRegistration.h:51
&gt; +    std::unique_ptr&lt;HashSet&lt;GCReachableRef&lt;Node&gt;&gt;&gt; clearTransientRegistrations();

Let&apos;s call this takeTransientRegistrations().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465779</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-10-02 15:29:54 -0700</bug_when>
    <thetext>Note: In a separate patch, we need MutationRecord to visitAdditionalChildren and addOpaqueRoot for the root of each node in the record (target, addedNodes, removedNodes, previousSibling, nextSibling).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465787</commentid>
    <comment_count>12</comment_count>
      <attachid>351318</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-10-02 15:37:55 -0700</bug_when>
    <thetext>Comment on attachment 351318
Fixes the bug

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

r=me

&gt;&gt; Source/WebCore/dom/MutationObserver.cpp:118
&gt;&gt; +    // between the time takeRecords are called and nodes in records are accesssed.
&gt; 
&gt; correct =&gt; collect
&gt; are =&gt; is
&gt; 
&gt; What will access the nodes referenced by takeRecords(), and what guarantees that those node wrappers will remain valid after MutationObserver::disconnect() or MutationObserver::deliver()?

I think a nice follow-up would be to change takeRecords() to be a custom binding, have it return a pair of the vector of mutation records and the hash table of pending targets, and have the caller retain the hash table of pending targets until conversion to a JS array is complete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465839</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-02 17:23:03 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #10)
&gt; Comment on attachment 351318 [details]
&gt; Fixes the bug
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=351318&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/MutationObserver.cpp:118
&gt; &gt; +    // Don&apos;t clear m_pendingTargets here because we can correct JS wrappers
&gt; &gt; +    // between the time takeRecords are called and nodes in records are accesssed.
&gt; 
&gt; correct =&gt; collect
&gt; are =&gt; is

Fixed.

&gt; What will access the nodes referenced by takeRecords(), and what guarantees
&gt; that those node wrappers will remain valid after
&gt; MutationObserver::disconnect() or MutationObserver::deliver()?

There isn&apos;t as we discussed in person. Will fix in a follow up.

&gt; &gt; Source/WebCore/dom/MutationObserver.cpp:188
&gt; &gt; +    m_pendingTargets.add(*mutation-&gt;target());
&gt; 
&gt; Is there value in putting everything in a hash table, or should we just use
&gt; a vector? What&apos;s an example of a case where a mutation observer will enqueue
&gt; the same target more than twice?

Yes, in the case multiple nodes are inserted into and removed from a single container node, the target node is that container node.

&gt; &gt; Source/WebCore/dom/MutationObserver.cpp:241
&gt; &gt; +        m_pendingTargets.clear(); // takeRecords() may have been called.
&gt; 
&gt; You can get these return cases right automatically by swapping
&gt; m_pendingTargets into an auto local variable (just like we do for m_records).

Sure, will do.

&gt; &gt; Source/WebCore/dom/MutationObserverRegistration.h:51
&gt; &gt; +    std::unique_ptr&lt;HashSet&lt;GCReachableRef&lt;Node&gt;&gt;&gt; clearTransientRegistrations();
&gt; 
&gt; Let&apos;s call this takeTransientRegistrations().

Good idea. Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465850</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-02 17:29:48 -0700</bug_when>
    <thetext>Committed r236781: &lt;https://trac.webkit.org/changeset/236781&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466107</commentid>
    <comment_count>15</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2018-10-03 10:36:21 -0700</bug_when>
    <thetext>The test added with this change has been timing out consistently on macOS Sierra Debug and is a flaky timeout on macOS Sierra Release.

https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=fast%2Fdom%2FMutationObserver%2Fmutation-observer-retains-js-wrappers-of-targets-alive.html

https://build.webkit.org/results/Apple%20Sierra%20Debug%20WK1%20(Tests)/r236783%20(9802)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466116</commentid>
    <comment_count>16</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2018-10-03 11:02:53 -0700</bug_when>
    <thetext>Reverted r236781 for reason:

The test added with this commit is timing out consistently.

Committed r236799: &lt;https://trac.webkit.org/changeset/236799&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466120</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-03 11:08:09 -0700</bug_when>
    <thetext>We need to re-land this patch without a test then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466126</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-03 11:16:42 -0700</bug_when>
    <thetext>Committed r236801: &lt;https://trac.webkit.org/changeset/236801&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466127</commentid>
    <comment_count>19</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2018-10-03 11:20:21 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #17)
&gt; We need to re-land this patch without a test then.
If this change is important enough to land without a test, it really seems like we should have a regression test for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466128</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-03 11:22:57 -0700</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #19)
&gt; (In reply to Ryosuke Niwa from comment #17)
&gt; &gt; We need to re-land this patch without a test then.
&gt; If this change is important enough to land without a test, it really seems
&gt; like we should have a regression test for it.

I don&apos;t see how we&apos;d add a test given Matt rolled out the patch on the basis the the test would time out. I&apos;ve already optimized the test to run as fast as possible. If this version of the test times out, I don&apos;t know what kind of a test would be possibly landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466168</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2018-10-03 13:45:02 -0700</bug_when>
    <thetext>Typically, tests for garbage collection effects run very fast, what is special about this one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466295</commentid>
    <comment_count>22</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-03 20:38:06 -0700</bug_when>
    <thetext>(In reply to Alexey Proskuryakov from comment #21)
&gt; Typically, tests for garbage collection effects run very fast, what is
&gt; special about this one?

That&apos;s not my experience writing GC tests recently... I don&apos;t know what is different about this test but I had a difficulty reproducing the GC issue in the first place, and I spent an entire day optimizing the test itself. The plan now is to fix a related bug that MutationRecord doesn&apos;t keep elements / nodes and write a test for that since that would be the superset, and would (hopefully) require a single GC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475607</commentid>
    <comment_count>23</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-11-06 11:56:01 -0800</bug_when>
    <thetext>New tests were added to cover some aspects of this bug in https://trac.webkit.org/changeset/236850</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351211</attachid>
            <date>2018-09-29 23:05:08 -0700</date>
            <delta_ts>2018-10-01 16:06:26 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>wip190115.patch</filename>
            <type>text/plain</type>
            <size>15715</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9HQ1JlYWNoYWJsZVJlZi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9HQ1JlYWNoYWJsZVJlZi5oCShyZXZpc2lvbiAyMzY2NDQpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vR0NSZWFjaGFibGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0R1bWJQdHJUcmFpdHMuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ1LDQ3ICs0NSwxMTEg
QEAKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxz
dGQ6OmlzX3NhbWU8VCwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5cGU+Ojp2YWx1
ZT4+CiBjbGFzcyBHQ1JlYWNoYWJsZVJlZiB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0NS
ZWFjaGFibGVSZWYpOwogcHVibGljOgogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgPSBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxOb2RlLCBUPjo6dmFsdWU+PgogICAgIEdDUmVhY2hh
YmxlUmVmKFQmIG9iamVjdCkKLSAgICAgICAgOiBtX3JlZihvYmplY3QpCisgICAgICAgIDogbV9w
dHIoJm9iamVjdCkKICAgICB7Ci0gICAgICAgIEdDUmVhY2hhYmxlUmVmTWFwOjphZGQobV9yZWYu
Z2V0KCkpOworICAgICAgICBHQ1JlYWNoYWJsZVJlZk1hcDo6YWRkKCptX3B0cik7CiAgICAgfQog
CiAgICAgfkdDUmVhY2hhYmxlUmVmKCkKICAgICB7Ci0gICAgICAgIGlmICghaXNOdWxsKCkpCi0g
ICAgICAgICAgICBHQ1JlYWNoYWJsZVJlZk1hcDo6cmVtb3ZlKG1fcmVmLmdldCgpKTsKKyAgICAg
ICAgaWYgKG1fcHRyKQorICAgICAgICAgICAgR0NSZWFjaGFibGVSZWZNYXA6OnJlbW92ZSgqbV9w
dHIpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFgsIHR5cGVuYW1lIFksIHR5cGVu
YW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Jhc2Vfb2Y8Tm9kZSwgVD46OnZhbHVlPj4K
ICAgICBHQ1JlYWNoYWJsZVJlZihSZWY8WCwgWT4mJiBvdGhlcikKLSAgICAgICAgOiBtX3JlZihX
VEZNb3ZlKG90aGVyLm1fcmVmKSkKKyAgICAgICAgOiBtX3B0cihXVEZNb3ZlKG90aGVyLm1fcHRy
KSkKICAgICB7Ci0gICAgICAgIGlmICghaXNOdWxsKCkpCi0gICAgICAgICAgICBHQ1JlYWNoYWJs
ZVJlZk1hcDo6YWRkKG1fcmVmLmdldCgpKTsKKyAgICAgICAgaWYgKG1fcHRyKQorICAgICAgICAg
ICAgR0NSZWFjaGFibGVSZWZNYXA6OmFkZCgqbV9wdHIpOwogICAgIH0KIAogICAgIEdDUmVhY2hh
YmxlUmVmKEdDUmVhY2hhYmxlUmVmJiYgb3RoZXIpCi0gICAgICAgIDogbV9yZWYoV1RGTW92ZShv
dGhlci5tX3JlZikpCisgICAgICAgIDogbV9wdHIoV1RGTW92ZShvdGhlci5tX3B0cikpCiAgICAg
ewogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+IEdDUmVhY2hh
YmxlUmVmKGNvbnN0IEdDUmVhY2hhYmxlUmVmPFgsIFk+JiBvdGhlcikgPSBkZWxldGU7CisgICAg
Ly8gVXNlIGNvcHlSZWYoKSBhbmQgdGhlIG1vdmUgYXNzaWdubWVudCBvcGVyYXRvcnMgaW5zdGVh
ZC4KKyAgICBHQ1JlYWNoYWJsZVJlZiYgb3BlcmF0b3I9KGNvbnN0IEdDUmVhY2hhYmxlUmVmJikg
PSBkZWxldGU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4gR0NSZWFjaGFi
bGVSZWYmIG9wZXJhdG9yPShjb25zdCBHQ1JlYWNoYWJsZVJlZjxYLCBZPiYpID0gZGVsZXRlOwog
Ci0gICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgQVNTRVJUKCFpc051bGwoKSk7IHJldHVybiBt
X3JlZi5wdHIoKTsgfQotICAgIFQqIHB0cigpIGNvbnN0IFJFVFVSTlNfTk9OTlVMTCB7IEFTU0VS
VCghaXNOdWxsKCkpOyByZXR1cm4gbV9yZWYucHRyKCk7IH0KLSAgICBUJiBnZXQoKSBjb25zdCB7
IEFTU0VSVCghaXNOdWxsKCkpOyByZXR1cm4gbV9yZWYuZ2V0KCk7IH0KLSAgICBvcGVyYXRvciBU
JigpIGNvbnN0IHsgQVNTRVJUKCFpc051bGwoKSk7IHJldHVybiBtX3JlZi5nZXQoKTsgfQotICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBBU1NFUlQoIWlzTnVsbCgpKTsgcmV0dXJuICFtX3Jl
Zi5nZXQoKTsgfQorICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IEFTU0VSVChtX3B0cik7IHJl
dHVybiBtX3B0ci5nZXQoKTsgfQorICAgIFQqIHB0cigpIGNvbnN0IFJFVFVSTlNfTk9OTlVMTCB7
IEFTU0VSVChtX3B0cik7IHJldHVybiBtX3B0ci5nZXQoKTsgfQorICAgIFQmIGdldCgpIGNvbnN0
IHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJuICptX3B0cjsgfQorICAgIG9wZXJhdG9yIFQmKCkgY29u
c3QgeyBBU1NFUlQobV9wdHIpOyByZXR1cm4gKm1fcHRyOyB9CisgICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IEFTU0VSVChtX3B0cik7IHJldHVybiAhKm1fcHRyOyB9CiAKKyAgICAvLyBIYXNo
IHRhYmxlIGRlbGV0ZWQgdmFsdWVzLCB3aGljaCBhcmUgb25seSBjb25zdHJ1Y3RlZCBhbmQgbmV2
ZXIgY29waWVkIG9yIGRlc3Ryb3llZC4KKyAgICBHQ1JlYWNoYWJsZVJlZihXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV9wdHIoUmVmUHRyPFQ+OjpoYXNoVGFibGVEZWxldGVkVmFs
dWUoKSkgeyB9CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHRyLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KKworICAgIEdDUmVhY2hhYmxl
UmVmKFdURjo6SGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUpIDogbV9wdHIobnVsbHB0cikgeyB9Cisg
ICAgYm9vbCBpc0hhc2hUYWJsZUVtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiAhbV9wdHI7IH0K
KworICAgIGNvbnN0IFQqIHB0ckFsbG93aW5nSGFzaFRhYmxlRW1wdHlWYWx1ZSgpIGNvbnN0IHsg
QVNTRVJUKG1fcHRyIHx8IGlzSGFzaFRhYmxlRW1wdHlWYWx1ZSgpKTsgcmV0dXJuIG1fcHRyLmdl
dCgpOyB9CisgICAgVCogcHRyQWxsb3dpbmdIYXNoVGFibGVFbXB0eVZhbHVlKCkgeyBBU1NFUlQo
bV9wdHIgfHwgaXNIYXNoVGFibGVFbXB0eVZhbHVlKCkpOyByZXR1cm4gbV9wdHIuZ2V0KCk7IH0K
KworICAgIHZvaWQgYXNzaWduVG9IYXNoVGFibGVFbXB0eVZhbHVlKEdDUmVhY2hhYmxlUmVmJiYg
cmVmZXJlbmNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3B0cik7CisgICAgICAgIG1fcHRy
ID0gV1RGTW92ZShyZWZlcmVuY2UubV9wdHIpOworICAgICAgICBBU1NFUlQobV9wdHIpOworICAg
IH0KKwogcHJpdmF0ZToKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVmLmlz
SGFzaFRhYmxlRW1wdHlWYWx1ZSgpOyB9CisgICAgUmVmUHRyPFQ+IG1fcHRyOworfTsKIAotICAg
IFJlZjxUPiBtX3JlZjsKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBIYXNoVHJhaXRzPFdlYkNvcmU6OkdDUmVh
Y2hhYmxlUmVmPFA+PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxXZWJDb3JlOjpHQ1JlYWNoYWJs
ZVJlZjxQPj4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVl
OworICAgIHN0YXRpYyBXZWJDb3JlOjpHQ1JlYWNoYWJsZVJlZjxQPiBlbXB0eVZhbHVlKCkgeyBy
ZXR1cm4gSGFzaFRhYmxlRW1wdHlWYWx1ZTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lPgor
ICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdEVtcHR5VmFsdWUoV2ViQ29yZTo6R0NSZWFjaGFibGVS
ZWY8UD4mIHNsb3QpCisgICAgeworICAgICAgICBuZXcgKE5vdE51bGwsIHN0ZDo6YWRkcmVzc29m
KHNsb3QpKSBXZWJDb3JlOjpHQ1JlYWNoYWJsZVJlZjxQPihIYXNoVGFibGVFbXB0eVZhbHVlKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJc0VtcHR5VmFsdWVGdW5jdGlvbiA9
IHRydWU7CisgICAgc3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNvbnN0IFdlYkNvcmU6OkdDUmVh
Y2hhYmxlUmVmPFA+JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVFbXB0eVZhbHVl
KCk7IH0KKworICAgIHN0YXRpYyB2b2lkIGFzc2lnblRvRW1wdHkoV2ViQ29yZTo6R0NSZWFjaGFi
bGVSZWY8UD4mIGVtcHR5VmFsdWUsIFdlYkNvcmU6OkdDUmVhY2hhYmxlUmVmPFA+JiYgbmV3VmFs
dWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbXB0eVZhbHVlKGVtcHR5VmFsdWUpKTsKKyAg
ICAgICAgZW1wdHlWYWx1ZS5hc3NpZ25Ub0hhc2hUYWJsZUVtcHR5VmFsdWUoV1RGTW92ZShuZXdW
YWx1ZSkpOworICAgIH0KKworICAgIHR5cGVkZWYgUCogUGVla1R5cGU7CisgICAgc3RhdGljIFBl
ZWtUeXBlIHBlZWsoY29uc3QgUmVmPFA+JiB2YWx1ZSkgeyByZXR1cm4gY29uc3RfY2FzdDxQZWVr
VHlwZT4odmFsdWUucHRyQWxsb3dpbmdIYXNoVGFibGVFbXB0eVZhbHVlKCkpOyB9CisgICAgc3Rh
dGljIFBlZWtUeXBlIHBlZWsoUCogdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9CisKKyAgICB0eXBl
ZGVmIHN0ZDo6b3B0aW9uYWw8UmVmPFA+PiBUYWtlVHlwZTsKKyAgICBzdGF0aWMgVGFrZVR5cGUg
dGFrZShSZWY8UD4mJiB2YWx1ZSkgeyByZXR1cm4gaXNFbXB0eVZhbHVlKHZhbHVlKSA/IHN0ZDo6
bnVsbG9wdCA6IHN0ZDo6b3B0aW9uYWw8UmVmPFA+PihXVEZNb3ZlKHZhbHVlKSk7IH0KIH07CiAK
LX0KK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorc3RydWN0IEdldFB0ckhlbHBl
cjxXZWJDb3JlOjpHQ1JlYWNoYWJsZVJlZjxULCBVPj4geworICAgIHR5cGVkZWYgVCogUHRyVHlw
ZTsKKyAgICBzdGF0aWMgVCogZ2V0UHRyKGNvbnN0IFdlYkNvcmU6OkdDUmVhY2hhYmxlUmVmPFQs
IFU+JiByZWZlcmVuY2UpIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHJlZmVyZW5jZS5wdHIoKSk7
IH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorc3RydWN0IElzU21h
cnRQdHI8V2ViQ29yZTo6R0NSZWFjaGFibGVSZWY8VCwgVT4+IHsKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB2YWx1ZSA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgUHRy
SGFzaDxXZWJDb3JlOjpHQ1JlYWNoYWJsZVJlZjxQPj4gOiBQdHJIYXNoQmFzZTxXZWJDb3JlOjpH
Q1JlYWNoYWJsZVJlZjxQPiwgSXNTbWFydFB0cjxXZWJDb3JlOjpHQ1JlYWNoYWJsZVJlZjxQPj46
OnZhbHVlPiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSBmYWxzZTsKK307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgRGVmYXVsdEhh
c2g8V2ViQ29yZTo6R0NSZWFjaGFibGVSZWY8UD4+IHsgdHlwZWRlZiBQdHJIYXNoPFdlYkNvcmU6
OkdDUmVhY2hhYmxlUmVmPFA+PiBIYXNoOyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcAkocmV2aXNpb24gMjM2NjQ0
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTIsMTMgKzExMiwxNyBAQAogCiBWZWN0b3I8UmVmPE11dGF0aW9uUmVjb3JkPj4g
TXV0YXRpb25PYnNlcnZlcjo6dGFrZVJlY29yZHMoKQogeworICAgIC8vIEpTTXV0YXRpb25SZWNv
cmRzIG11c3QgdmlzaXQgbm9kZXMgaW4gdGhlbS4KICAgICBWZWN0b3I8UmVmPE11dGF0aW9uUmVj
b3JkPj4gcmVjb3JkczsKICAgICByZWNvcmRzLnN3YXAobV9yZWNvcmRzKTsKKyAgICAvLyBEb24n
dCBjbGVhciBtX3BlbmRpbmdUYXJnZXRzIGhlcmUgYmVjYXVzZSB3ZSBjYW4gY29ycmVjdCBKUyB3
cmFwcGVycworICAgIC8vIGJldHdlZW4gdGhlIHRpbWUgdGFrZVJlY29yZHMgYXJlIGNhbGxlZCBh
bmQgbm9kZXMgaW4gcmVjb3JkcyBhcmUgYWNjZXNzc2VkLgogICAgIHJldHVybiByZWNvcmRzOwog
fQogCiB2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6OmRpc2Nvbm5lY3QoKQogeworICAgIG1fcGVuZGlu
Z1RhcmdldHMuY2xlYXIoKTsKICAgICBtX3JlY29yZHMuY2xlYXIoKTsKICAgICBIYXNoU2V0PE11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiByZWdpc3RyYXRpb25zKG1fcmVnaXN0cmF0aW9u
cyk7CiAgICAgZm9yIChhdXRvKiByZWdpc3RyYXRpb24gOiByZWdpc3RyYXRpb25zKQpAQCAtMTgx
LDYgKzE4NSw4IEBACiB2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6OmVucXVldWVNdXRhdGlvblJlY29y
ZChSZWY8TXV0YXRpb25SZWNvcmQ+JiYgbXV0YXRpb24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBBU1NFUlQobXV0YXRpb24tPnRhcmdldCgpKTsKKyAgICBtX3BlbmRpbmdU
YXJnZXRzLmFkZCgqbXV0YXRpb24tPnRhcmdldCgpKTsKICAgICBtX3JlY29yZHMuYXBwZW5kKFdU
Rk1vdmUobXV0YXRpb24pKTsKICAgICBhY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmFkZCh0aGlz
KTsKIApAQCAtMjI0LDE1ICsyMzAsMTggQEAKICAgICAvLyBDYWxsaW5nIGNsZWFyVHJhbnNpZW50
UmVnaXN0cmF0aW9ucygpIGNhbiBtb2RpZnkgbV9yZWdpc3RyYXRpb25zLCBzbyBpdCdzIG5lY2Vz
c2FyeQogICAgIC8vIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSB0cmFuc2llbnQgcmVnaXN0cmF0aW9u
cyBiZWZvcmUgb3BlcmF0aW5nIG9uIHRoZW0uCiAgICAgVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb24qLCAxPiB0cmFuc2llbnRSZWdpc3RyYXRpb25zOworICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8SGFzaFNldDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4+LCAxPiBub2Rlc1RvS2Vl
cEFsaXZlOwogICAgIGZvciAoYXV0byogcmVnaXN0cmF0aW9uIDogbV9yZWdpc3RyYXRpb25zKSB7
CiAgICAgICAgIGlmIChyZWdpc3RyYXRpb24tPmhhc1RyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKSkK
ICAgICAgICAgICAgIHRyYW5zaWVudFJlZ2lzdHJhdGlvbnMuYXBwZW5kKHJlZ2lzdHJhdGlvbik7
CiAgICAgfQogICAgIGZvciAoYXV0byYgcmVnaXN0cmF0aW9uIDogdHJhbnNpZW50UmVnaXN0cmF0
aW9ucykKLSAgICAgICAgcmVnaXN0cmF0aW9uLT5jbGVhclRyYW5zaWVudFJlZ2lzdHJhdGlvbnMo
KTsKKyAgICAgICAgbm9kZXNUb0tlZXBBbGl2ZS5hcHBlbmQocmVnaXN0cmF0aW9uLT5jbGVhclRy
YW5zaWVudFJlZ2lzdHJhdGlvbnMoKSk7CiAKLSAgICBpZiAobV9yZWNvcmRzLmlzRW1wdHkoKSkK
KyAgICBpZiAobV9yZWNvcmRzLmlzRW1wdHkoKSkgeworICAgICAgICBtX3BlbmRpbmdUYXJnZXRz
LmNsZWFyKCk7IC8vIHRha2VSZWNvcmRzKCkgbWF5IGhhdmUgYmVlbiBjYWxsZWQuCiAgICAgICAg
IHJldHVybjsKKyAgICB9CiAKICAgICBWZWN0b3I8UmVmPE11dGF0aW9uUmVjb3JkPj4gcmVjb3Jk
czsKICAgICByZWNvcmRzLnN3YXAobV9yZWNvcmRzKTsKQEAgLTI0MCw2ICsyNDksOCBAQAogICAg
IC8vIEZJWE1FOiBLZWVwIG11dGF0aW9uIG9ic2VydmVyIGNhbGxiYWNrIGFzIGxvbmcgYXMgaXRz
IG9ic2VydmVkIG5vZGVzIGFyZSBhbGl2ZS4gU2VlIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3OTIy
NC4KICAgICBpZiAobV9jYWxsYmFjay0+aGFzQ2FsbGJhY2soKSkKICAgICAgICAgbV9jYWxsYmFj
ay0+aGFuZGxlRXZlbnQoKnRoaXMsIHJlY29yZHMsICp0aGlzKTsKKworICAgIG1fcGVuZGluZ1Rh
cmdldHMuY2xlYXIoKTsKIH0KIAogdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpub3RpZnlNdXRhdGlv
bk9ic2VydmVycygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmgJKHJl
dmlzaW9uIDIzNjY0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uT3IuaCIKKyNpbmNsdWRlICJHQ1JlYWNoYWJsZVJlZi5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jLmg+CkBAIC0xMDksNiArMTEwLDcgQEAKIAogICAgIFJlZjxNdXRhdGlvbkNhbGxi
YWNrPiBtX2NhbGxiYWNrOwogICAgIFZlY3RvcjxSZWY8TXV0YXRpb25SZWNvcmQ+PiBtX3JlY29y
ZHM7CisgICAgSGFzaFNldDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4gbV9wZW5kaW5nVGFyZ2V0czsK
ICAgICBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiBtX3JlZ2lzdHJhdGlv
bnM7CiAgICAgdW5zaWduZWQgbV9wcmlvcml0eTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwCShyZXZpc2lvbiAy
MzY2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEzICs0OCwxNSBAQAogCiBNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uOjp+TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbigpCiB7Ci0gICAg
Y2xlYXJUcmFuc2llbnRSZWdpc3RyYXRpb25zKCk7CisgICAgYXV0byByZXN1bHQgPSBjbGVhclRy
YW5zaWVudFJlZ2lzdHJhdGlvbnMoKTsKKyAgICByZXN1bHQgPSBudWxscHRyOwogICAgIG1fb2Jz
ZXJ2ZXItPm9ic2VydmF0aW9uRW5kZWQoKnRoaXMpOwogfQogCiB2b2lkIE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb246OnJlc2V0T2JzZXJ2YXRpb24oTXV0YXRpb25PYnNlcnZlck9wdGlvbnMg
b3B0aW9ucywgY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBhdHRyaWJ1dGVGaWx0ZXIpCiB7
Ci0gICAgY2xlYXJUcmFuc2llbnRSZWdpc3RyYXRpb25zKCk7CisgICAgYXV0byByZXN1bHQgPSBj
bGVhclRyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKTsKKyAgICByZXN1bHQgPSBudWxscHRyOwogICAg
IG1fb3B0aW9ucyA9IG9wdGlvbnM7CiAgICAgbV9hdHRyaWJ1dGVGaWx0ZXIgPSBhdHRyaWJ1dGVG
aWx0ZXI7CiB9CkBAIC02OCwyOCArNzAsMzEgQEAKICAgICBtX29ic2VydmVyLT5zZXRIYXNUcmFu
c2llbnRSZWdpc3RyYXRpb24oKTsKIAogICAgIGlmICghbV90cmFuc2llbnRSZWdpc3RyYXRpb25O
b2RlcykgewotICAgICAgICBtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzID0gc3RkOjptYWtl
X3VuaXF1ZTxIYXNoU2V0PFJlZlB0cjxOb2RlPj4+KCk7CisgICAgICAgIG1fdHJhbnNpZW50UmVn
aXN0cmF0aW9uTm9kZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPEhhc2hTZXQ8R0NSZWFjaGFibGVSZWY8
Tm9kZT4+PigpOwogCiAgICAgICAgIEFTU0VSVCghbV9ub2RlS2VwdEFsaXZlKTsKICAgICAgICAg
bV9ub2RlS2VwdEFsaXZlID0gJm1fbm9kZTsgLy8gQmFsYW5jZWQgaW4gY2xlYXJUcmFuc2llbnRS
ZWdpc3RyYXRpb25zLgogICAgIH0KLSAgICBtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzLT5h
ZGQoJm5vZGUpOworICAgIG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMtPmFkZChub2RlKTsK
IH0KIAotdm9pZCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpjbGVhclRyYW5zaWVudFJl
Z2lzdHJhdGlvbnMoKQorc3RkOjp1bmlxdWVfcHRyPEhhc2hTZXQ8R0NSZWFjaGFibGVSZWY8Tm9k
ZT4+PiBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpjbGVhclRyYW5zaWVudFJlZ2lzdHJh
dGlvbnMoKQogewogICAgIGlmICghbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2RlcykgewogICAg
ICAgICBBU1NFUlQoIW1fbm9kZUtlcHRBbGl2ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBub2RlIDogKm1fdHJhbnNp
ZW50UmVnaXN0cmF0aW9uTm9kZXMpCiAgICAgICAgIG5vZGUtPnVucmVnaXN0ZXJUcmFuc2llbnRN
dXRhdGlvbk9ic2VydmVyKCp0aGlzKTsKIAotICAgIG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9k
ZXMgPSBudWxscHRyOworICAgIGF1dG8gcmV0dXJuVmFsdWUgPSBXVEZNb3ZlKG1fdHJhbnNpZW50
UmVnaXN0cmF0aW9uTm9kZXMpOworICAgIHJldHVyblZhbHVlLT5hZGQoKm1fbm9kZUtlcHRBbGl2
ZSk7CiAKICAgICBBU1NFUlQobV9ub2RlS2VwdEFsaXZlKTsKICAgICBtX25vZGVLZXB0QWxpdmUg
PSBudWxscHRyOyAvLyBCYWxhbmNlZCBpbiBvYnNlcnZlU3VidHJlZU5vZGVXaWxsRGV0YWNoLgor
CisgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBib29sIE11dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyYXRpb246OnNob3VsZFJlY2VpdmVNdXRhdGlvbkZyb20oTm9kZSYgbm9kZSwgTXV0YXRpb25P
YnNlcnZlcjo6TXV0YXRpb25UeXBlIHR5cGUsIGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJpYnV0
ZU5hbWUpIGNvbnN0CkBAIC0xMTYsNyArMTIxLDcgQEAKICAgICBpZiAoIW1fdHJhbnNpZW50UmVn
aXN0cmF0aW9uTm9kZXMpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKGF1dG8mIG5vZGUgOiAq
bV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2RlcykKLSAgICAgICAgbm9kZXMuYWRkKG5vZGUuZ2V0
KCkpOworICAgICAgICBub2Rlcy5hZGQobm9kZS5wdHIoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb24uaAkocmV2aXNpb24gMjM2NjQ0KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkdDUmVhY2hhYmxlUmVmLmgiCiAj
aW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CkBAIC00Nyw3ICs0OCw3IEBACiAKICAg
ICB2b2lkIHJlc2V0T2JzZXJ2YXRpb24oTXV0YXRpb25PYnNlcnZlck9wdGlvbnMsIGNvbnN0IEhh
c2hTZXQ8QXRvbWljU3RyaW5nPiYgYXR0cmlidXRlRmlsdGVyKTsKICAgICB2b2lkIG9ic2VydmVk
U3VidHJlZU5vZGVXaWxsRGV0YWNoKE5vZGUmKTsKLSAgICB2b2lkIGNsZWFyVHJhbnNpZW50UmVn
aXN0cmF0aW9ucygpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PEdDUmVhY2hhYmxlUmVm
PE5vZGU+Pj4gY2xlYXJUcmFuc2llbnRSZWdpc3RyYXRpb25zKCk7CiAgICAgYm9vbCBoYXNUcmFu
c2llbnRSZWdpc3RyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2llbnRSZWdpc3RyYXRp
b25Ob2RlcyAmJiAhbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcy0+aXNFbXB0eSgpOyB9CiAK
ICAgICBib29sIHNob3VsZFJlY2VpdmVNdXRhdGlvbkZyb20oTm9kZSYsIE11dGF0aW9uT2JzZXJ2
ZXI6Ok11dGF0aW9uVHlwZSwgY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0cmlidXRlTmFtZSkgY29u
c3Q7CkBAIC02NCw3ICs2NSw3IEBACiAgICAgUmVmPE11dGF0aW9uT2JzZXJ2ZXI+IG1fb2JzZXJ2
ZXI7CiAgICAgTm9kZSYgbV9ub2RlOwogICAgIFJlZlB0cjxOb2RlPiBtX25vZGVLZXB0QWxpdmU7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEhhc2hTZXQ8UmVmUHRyPE5vZGU+Pj4gbV90cmFuc2llbnRS
ZWdpc3RyYXRpb25Ob2RlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxHQ1JlYWNoYWJs
ZVJlZjxOb2RlPj4+IG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXM7CiAgICAgTXV0YXRpb25P
YnNlcnZlck9wdGlvbnMgbV9vcHRpb25zOwogICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBtX2F0
dHJpYnV0ZUZpbHRlcjsKIH07CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9NdXRhdGlvbk9i
c2VydmVyL211dGF0aW9uLW9ic2VydmVyLXJldGFpbnMtanMtd3JhcHBlcnMtb2YtdGFyZ2V0cy1h
bGl2ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vTXV0
YXRpb25PYnNlcnZlci9tdXRhdGlvbi1vYnNlcnZlci1yZXRhaW5zLWpzLXdyYXBwZXJzLW9mLXRh
cmdldHMtYWxpdmUtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zh
c3QvZG9tL011dGF0aW9uT2JzZXJ2ZXIvbXV0YXRpb24tb2JzZXJ2ZXItcmV0YWlucy1qcy13cmFw
cGVycy1vZi10YXJnZXRzLWFsaXZlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDIzIEBACitUaGlzIHRlc3RzIHRoYXQgSlMgd3JhcHBlcnMgb2Ygbm9kZXMgaW4gYSB0cmVl
IG11dGF0aW9uIHJlY29yZCBkbyBub3QgZ2V0IGNvbGxlY3RlZC4KKworUEFTUworUEFTUworUEFT
UworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUwor
UEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9NdXRhdGlvbk9ic2VydmVyL211dGF0aW9uLW9ic2VydmVyLXJl
dGFpbnMtanMtd3JhcHBlcnMtb2YtdGFyZ2V0cy1hbGl2ZS5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZG9tL011dGF0aW9uT2JzZXJ2ZXIvbXV0YXRpb24tb2JzZXJ2ZXItcmV0
YWlucy1qcy13cmFwcGVycy1vZi10YXJnZXRzLWFsaXZlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9kb20vTXV0YXRpb25PYnNlcnZlci9tdXRhdGlvbi1vYnNlcnZlci1y
ZXRhaW5zLWpzLXdyYXBwZXJzLW9mLXRhcmdldHMtYWxpdmUuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDgzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cD5UaGlz
IHRlc3RzIHRoYXQgSlMgd3JhcHBlcnMgb2Ygbm9kZXMgaW4gYSB0cmVlIG11dGF0aW9uIHJlY29y
ZCBkbyBub3QgZ2V0IGNvbGxlY3RlZC48L3A+Cis8cHJlIGlkPSJsb2ciPjwvcHJlPgorPHNjcmlw
dD4KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgp
OworCitjb25zdCBub2RlQ291bnQgPSAyMDsKK2NvbnN0IGl0ZXJhdGlvbkNvdW50ID0gd2luZG93
LkdDQ29udHJvbGxlciA/IDIwIDogNTA7Citjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9i
c2VydmVyKChyZWNvcmRMaXN0KSA9PiB7CisgICAgbGV0IGRlYWRDb3VudCA9IDA7CisgICAgZm9y
IChjb25zdCByZWNvcmQgb2YgcmVjb3JkTGlzdCkgeworICAgICAgICBmb3IgKGNvbnN0IG5vZGUg
b2YgcmVjb3JkLmFkZGVkTm9kZXMpIHsKKyAgICAgICAgICAgIGlmIChub2RlLm15U3RhdGUgIT0g
J2FsaXZlJykKKyAgICAgICAgICAgICAgICBkZWFkQ291bnQrKzsKKyAgICAgICAgfQorICAgICAg
ICB0cmlnZ2VyR0MoKTsKKyAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIHJlY29yZC5yZW1vdmVk
Tm9kZXMpIHsKKyAgICAgICAgICAgIGlmIChub2RlLm15U3RhdGUgIT0gJ2FsaXZlJykKKyAgICAg
ICAgICAgICAgICBkZWFkQ291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnbG9nJykudGV4dENvbnRlbnQgKz0gKGRlYWRDb3VudCA/IGBGQUlMIC0g
JHtkZWFkQ291bnR9IG5vZGVzIGxvc3QgSlMgd3JhcHBlcnNgIDogJ1BBU1MnKSArICdcbic7Cit9
KTsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBsZXQgY29udGFpbmVyID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgY29udGFpbmVyLmlubmVySFRNTCA9ICc8ZGl2Pjwv
ZGl2Pic7CisgICAgY29udGFpbmVyLmZpcnN0Q2hpbGQubXlTdGF0ZSA9ICdhbGl2ZSc7CisgICAg
b2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXIsIHtzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRy
dWV9KTsKKworICAgIC8vIFRlc3QgdHJhbnNpZW50IHJlZ2lzdHJhdGlvbnMuCisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBub2RlQ291bnQ7ICsraSkgeworICAgICAgICBjb25zdCBjaGlsZCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKKyAgICAgICAgY2hpbGQubXlTdGF0ZSA9ICdh
bGl2ZSc7CisgICAgICAgIGNoaWxkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J3NwYW4nKSkubXlTdGF0ZSA9ICdhbGl2ZSc7CisgICAgICAgIGNvbnRhaW5lci5maXJzdENoaWxk
LmFwcGVuZENoaWxkKGNoaWxkKTsKKyAgICAgICAgY2hpbGQudGV4dENvbnRlbnQgPSAnJzsKKyAg
ICB9CisgICAgY29udGFpbmVyLnRleHRDb250ZW50ID0gJyc7CisKKyAgICAvLyBUZXN0IHBlbmRp
bmcgdGFyZ2V0cy4KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVDb3VudDsgKytpKQorICAg
ICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3Bhbicp
KS5teVN0YXRlID0gJ2FsaXZlJzsKK30KKworZnVuY3Rpb24gdHJpZ2dlckdDKCkgeworICAgIGlm
ICh3aW5kb3cuR0NDb250cm9sbGVyKSB7CisgICAgICAgIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9IAorCisgICAgY29uc3QgZWxlbWVudHMgPSBuZXcgQXJy
YXkobm9kZUNvdW50KQorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUNvdW50OyArK2kpCisg
ICAgICAgIGVsZW1lbnRzW2ldID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOworCisg
ICAgY29uc3QgeCA9IG5ldyBBcnJheSgxMDAwKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEw
MDA7ICsraSkKKyAgICAgICAgeFtpXSA9IG5ldyBBcnJheSgxMDApOworfQorCithc3luYyBmdW5j
dGlvbiBydW5BbGwoKSB7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKworICAgIGZvciAobGV0IGogPSAwOyBqIDwgaXRlcmF0
aW9uQ291bnQ7ICsraikgeworICAgICAgICBydW5UZXN0KCk7CisgICAgICAgIHRyaWdnZXJHQygp
OworICAgICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTsKKyAgICB9CisKKyAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQorCity
dW5BbGwoKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351318</attachid>
            <date>2018-10-01 16:06:28 -0700</date>
            <delta_ts>2018-10-02 15:37:55 -0700</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-190115-20181001160627.patch</filename>
            <type>text/plain</type>
            <size>17574</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjY5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDE4LTEwLTAxICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEdDIGNhbiBjb2xsZWN0IEpTIHdy
YXBwZXJzIG9mIG5vZGVzIGluIHRoZSBtdXRhdGlvbiByZWNvcmRzIHdhaXRpbmcgdG8gYmUgZGVs
aXZlcmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTAxMTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBG
aXhlZCB0aGUgYnVnIGJ5IHJldGFpbmluZyBKUyB3cmFwcGVycyBvZiBlbGVtZW50cyBpbiBtdXRh
dGlvbiByZWNvcmRzIHVzaW5nIEdDUmVhY2hhYmxlUmVmLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
ZGVwbG95cyBHQ1JlYWNoYWJsZVJlZiBpbiB0d28gcGxhY2VzOiBNdXRhdGlvbk9ic2VydmVyIHdo
ZXJlIGVhY2ggbXV0YXRpb24gcmVjb3JkJ3MKKyAgICAgICAgdGFyZ2V0IGlzIGtlcHQgYWxpdmUg
YW5kIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24gd2hlcmUgZWFjaCBub2RlIHdoaWNoIGhh
ZCBiZWVuIHJlbW92ZWQKKyAgICAgICAgZnJvbSBhbiBvYnNlcnZlZCB0cmVlIGlzIGtlcHQgYWxp
dmUgZm9yIGEgc3VidHJlZSBvYnNlcnZhdGlvbi4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9N
dXRhdGlvbk9ic2VydmVyL211dGF0aW9uLW9ic2VydmVyLXJldGFpbnMtanMtd3JhcHBlcnMtb2Yt
dGFyZ2V0cy1hbGl2ZS5odG1sCisKKyAgICAgICAgKiBkb20vR0NSZWFjaGFibGVSZWYuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdDUmVhY2hhYmxlUmVmKTogTWFkZSBpdCB3b3JrIHdpdGggaGFzaCB0
YWJsZS4KKyAgICAgICAgKFdlYkNvcmU6OkdDUmVhY2hhYmxlUmVmOjpvcGVyYXRvciBUJiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHQ1JlYWNoYWJsZVJlZjo6R0NSZWFjaGFibGVSZWYpOgor
ICAgICAgICAoV2ViQ29yZTo6R0NSZWFjaGFibGVSZWY6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdDUmVhY2hhYmxlUmVmOjppc0hhc2hUYWJsZUVt
cHR5VmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R0NSZWFjaGFibGVSZWY6OnB0ckFs
bG93aW5nSGFzaFRhYmxlRW1wdHlWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHQ1Jl
YWNoYWJsZVJlZjo6cHRyQWxsb3dpbmdIYXNoVGFibGVFbXB0eVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdDUmVhY2hhYmxlUmVmOjphc3NpZ25Ub0hhc2hUYWJsZUVtcHR5VmFsdWUpOgorICAg
ICAgICAoV1RGOjpIYXNoVHJhaXRzPFdlYkNvcmU6OkdDUmVhY2hhYmxlUmVmPFA+Pjo6ZW1wdHlW
YWx1ZSk6CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8V2ViQ29yZTo6R0NSZWFjaGFibGVSZWY8
UD4+Ojpjb25zdHJ1Y3RFbXB0eVZhbHVlKToKKyAgICAgICAgKFdURjo6SGFzaFRyYWl0czxXZWJD
b3JlOjpHQ1JlYWNoYWJsZVJlZjxQPj46OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChXVEY6Okhh
c2hUcmFpdHM8V2ViQ29yZTo6R0NSZWFjaGFibGVSZWY8UD4+Ojphc3NpZ25Ub0VtcHR5KToKKyAg
ICAgICAgKFdURjo6SGFzaFRyYWl0czxXZWJDb3JlOjpHQ1JlYWNoYWJsZVJlZjxQPj46OnBlZWsp
OgorICAgICAgICAoV1RGOjpIYXNoVHJhaXRzPFdlYkNvcmU6OkdDUmVhY2hhYmxlUmVmPFA+Pjo6
dGFrZSk6CisgICAgICAgICogZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TXV0YXRpb25PYnNlcnZlcjo6dGFrZVJlY29yZHMpOiBEb24ndCBjbGVhciBtX3BlbmRp
bmdUYXJnZXRzIGJlY2F1c2UgdGhhdCB3b3VsZCBhbGxvdyB3cmFwcGVycworICAgICAgICB0byBi
ZSBjb2xsZWN0ZWQgYmVmb3JlIGVsZW1lbnRzIGluIG11dGF0aW9uIHJlY29yZHMgYXJlIGFjY2Vz
c2VkLiBXZSBkZWxheSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CisgICAgICAgIG1pY3Jv
dGFzayBhdCB3aGljaCBwb2ludCBkZWxpdmVyKCkgZnVuY3Rpb24gaXMgY2FsbGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpNdXRhdGlvbk9ic2VydmVyOjplbnF1ZXVlTXV0YXRpb25SZWNvcmQpOiBBZGQgdGhlIHRh
cmdldCB0byB0aGUgbGlzdCBvZiBlbGVtZW50cyB0byBrZWVwIGFsaXZlLgorICAgICAgICBUaGlz
IGlzIG5lZWRlZCBmb3IgYSBuZXdseSBpbnNlcnRlZCBub2RlLCBhIG5vZGUgd2l0aCBhdHRyaWJ1
dGUgY2hhbmdlLCBldGMuLi4KKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXI6OmRl
bGl2ZXIpOiBLZWVwIHRoZSBzZXQgb2YgdHJhbnNpZW50IHJlZ2lzdHJhdGlvbiB0YXJnZXRzIGFs
aXZlIHVudGlsIG11dGF0aW9uCisgICAgICAgIHJlY29yZHMgYXJlIGRlbGl2ZXJlZCB0byBlYWNo
IG9ic2VydmVyLiBUaGVzZSBhcmUgbm9kZXMgd2hpY2ggaGFkIGJlZW4gcmVtb3ZlZCBmcm9tIGEg
dHJlZSBhbmQgd2hvc2UKKyAgICAgICAgc3VidHJlZSBoYWQgc3RpbGwgYmVlbiBvYnNyZXZlZCB1
cCB1bnRpbCB0aGlzIHBvaW50LgorICAgICAgICAqIGRvbS9NdXRhdGlvbk9ic2VydmVyLmg6Cisg
ICAgICAgICogZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6b2JzZXJ2ZWRTdWJ0cmVlTm9k
ZVdpbGxEZXRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJh
dGlvbjo6Y2xlYXJUcmFuc2llbnRSZWdpc3RyYXRpb25zKTogUmV0dXJuIHRoZSBoYXNoIHNldCBv
ZiBlbGVtZW5ldHMKKyAgICAgICAgdGhhdCBuZWVkIHRvIGJlIGtlcHQgYWxpdmUgc28gdGhhdCBN
dXRhdGlvbk9ic2VydmVyOjpkZWxpdmVyIGNhbiBrZWVwIHRoZW0gYWxpdmUgdW50aWwgdGhlIGRl
bGl2ZXIKKyAgICAgICAgZnVuY3Rpb24gaGFkIGJlZW4gY2FsbGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6YWRkUmVnaXN0cmF0aW9uTm9kZXNUb1Nl
dCBjb25zdCk6CisgICAgICAgICogZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaDoK
KwogMjAxOC0xMC0wMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBBU0FOIGZhaWx1cmUgaW4gfkdDUmVhY2hhYmxlUmVmKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9HQ1JlYWNoYWJsZVJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9H
Q1JlYWNoYWJsZVJlZi5oCShyZXZpc2lvbiAyMzY2OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
R0NSZWFjaGFibGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5j
bHVkZSA8d3RmL0R1bWJQdHJUcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY5LDEyICs2OSw4MyBAQCBwdWJsaWM6CiAgICAgVCogb3Bl
cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZnZXQoKTsgfQogICAgIFQqIHB0cigpIGNvbnN0IFJF
VFVSTlNfTk9OTlVMTCB7IHJldHVybiAmZ2V0KCk7IH0KICAgICBUJiBnZXQoKSBjb25zdCB7IEFT
U0VSVChtX3B0cik7IHJldHVybiAqbV9wdHI7IH0KLSAgICBvcGVyYXRvciBUJigpIGNvbnN0IHsg
QVNTRVJUKG1fcHRyKTsgcmV0dXJuICptX3B0cjsgfQorICAgIG9wZXJhdG9yIFQmKCkgY29uc3Qg
eyByZXR1cm4gZ2V0KCk7IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFn
ZXQoKTsgfQogCi1wcml2YXRlOgorICAgIC8vIEhhc2ggdGFibGUgZGVsZXRlZCB2YWx1ZXMsIHdo
aWNoIGFyZSBvbmx5IGNvbnN0cnVjdGVkIGFuZCBuZXZlciBjb3BpZWQgb3IgZGVzdHJveWVkLgor
ICAgIEdDUmVhY2hhYmxlUmVmKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAg
ICAgOiBtX3B0cihSZWZQdHI8VD46Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKQorICAgIHsgfQor
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3B0ci5p
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CisKKyAgICBHQ1JlYWNoYWJsZVJlZihXVEY6Okhh
c2hUYWJsZUVtcHR5VmFsdWVUeXBlKQorICAgICAgICA6IG1fcHRyKG51bGxwdHIpCisgICAgeyB9
CisgICAgYm9vbCBpc0hhc2hUYWJsZUVtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiAhbV9wdHI7
IH0KKworICAgIGNvbnN0IFQqIHB0ckFsbG93aW5nSGFzaFRhYmxlRW1wdHlWYWx1ZSgpIGNvbnN0
IHsgQVNTRVJUKG1fcHRyIHx8IGlzSGFzaFRhYmxlRW1wdHlWYWx1ZSgpKTsgcmV0dXJuIG1fcHRy
LmdldCgpOyB9CisgICAgVCogcHRyQWxsb3dpbmdIYXNoVGFibGVFbXB0eVZhbHVlKCkgeyBBU1NF
UlQobV9wdHIgfHwgaXNIYXNoVGFibGVFbXB0eVZhbHVlKCkpOyByZXR1cm4gbV9wdHIuZ2V0KCk7
IH0KIAorICAgIHZvaWQgYXNzaWduVG9IYXNoVGFibGVFbXB0eVZhbHVlKEdDUmVhY2hhYmxlUmVm
JiYgcmVmZXJlbmNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3B0cik7CisgICAgICAgIG1f
cHRyID0gV1RGTW92ZShyZWZlcmVuY2UubV9wdHIpOworICAgICAgICBBU1NFUlQobV9wdHIpOwor
ICAgIH0KKworcHJpdmF0ZToKICAgICBSZWZQdHI8VD4gbV9wdHI7CiB9OwogCi19Cit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQ
PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJDb3JlOjpHQ1JlYWNoYWJsZVJlZjxQPj4gOiBTaW1wbGVD
bGFzc0hhc2hUcmFpdHM8V2ViQ29yZTo6R0NSZWFjaGFibGVSZWY8UD4+IHsKKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKKyAgICBzdGF0aWMgV2ViQ29yZTo6
R0NSZWFjaGFibGVSZWY8UD4gZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIEhhc2hUYWJsZUVtcHR5VmFs
dWU7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4KKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1
Y3RFbXB0eVZhbHVlKFdlYkNvcmU6OkdDUmVhY2hhYmxlUmVmPFA+JiBzbG90KQorICAgIHsKKyAg
ICAgICAgbmV3IChOb3ROdWxsLCBzdGQ6OmFkZHJlc3NvZihzbG90KSkgV2ViQ29yZTo6R0NSZWFj
aGFibGVSZWY8UD4oSGFzaFRhYmxlRW1wdHlWYWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBib29s
IGlzRW1wdHlWYWx1ZShjb25zdCBXZWJDb3JlOjpHQ1JlYWNoYWJsZVJlZjxQPiYgdmFsdWUpIHsg
cmV0dXJuIHZhbHVlLmlzSGFzaFRhYmxlRW1wdHlWYWx1ZSgpOyB9CisKKyAgICBzdGF0aWMgdm9p
ZCBhc3NpZ25Ub0VtcHR5KFdlYkNvcmU6OkdDUmVhY2hhYmxlUmVmPFA+JiBlbXB0eVZhbHVlLCBX
ZWJDb3JlOjpHQ1JlYWNoYWJsZVJlZjxQPiYmIG5ld1ZhbHVlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzRW1wdHlWYWx1ZShlbXB0eVZhbHVlKSk7CisgICAgICAgIGVtcHR5VmFsdWUuYXNzaWdu
VG9IYXNoVGFibGVFbXB0eVZhbHVlKFdURk1vdmUobmV3VmFsdWUpKTsKKyAgICB9CisKKyAgICB0
eXBlZGVmIFAqIFBlZWtUeXBlOworICAgIHN0YXRpYyBQZWVrVHlwZSBwZWVrKGNvbnN0IFJlZjxQ
PiYgdmFsdWUpIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8UGVla1R5cGU+KHZhbHVlLnB0ckFsbG93aW5n
SGFzaFRhYmxlRW1wdHlWYWx1ZSgpKTsgfQorICAgIHN0YXRpYyBQZWVrVHlwZSBwZWVrKFAqIHZh
bHVlKSB7IHJldHVybiB2YWx1ZTsgfQorCisgICAgdHlwZWRlZiBzdGQ6Om9wdGlvbmFsPFJlZjxQ
Pj4gVGFrZVR5cGU7CisgICAgc3RhdGljIFRha2VUeXBlIHRha2UoUmVmPFA+JiYgdmFsdWUpIHsg
cmV0dXJuIGlzRW1wdHlWYWx1ZSh2YWx1ZSkgPyBzdGQ6Om51bGxvcHQgOiBzdGQ6Om9wdGlvbmFs
PFJlZjxQPj4oV1RGTW92ZSh2YWx1ZSkpOyB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4KK3N0cnVjdCBHZXRQdHJIZWxwZXI8V2ViQ29yZTo6R0NSZWFjaGFibGVSZWY8
VCwgVT4+IHsKKyAgICB0eXBlZGVmIFQqIFB0clR5cGU7CisgICAgc3RhdGljIFQqIGdldFB0cihj
b25zdCBXZWJDb3JlOjpHQ1JlYWNoYWJsZVJlZjxULCBVPiYgcmVmZXJlbmNlKSB7IHJldHVybiBj
b25zdF9jYXN0PFQqPihyZWZlcmVuY2UucHRyKCkpOyB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4KK3N0cnVjdCBJc1NtYXJ0UHRyPFdlYkNvcmU6OkdDUmVhY2hhYmxl
UmVmPFQsIFU+PiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgUD4gc3RydWN0IFB0ckhhc2g8V2ViQ29yZTo6R0NSZWFjaGFibGVS
ZWY8UD4+IDogUHRySGFzaEJhc2U8V2ViQ29yZTo6R0NSZWFjaGFibGVSZWY8UD4sIElzU21hcnRQ
dHI8V2ViQ29yZTo6R0NSZWFjaGFibGVSZWY8UD4+Ojp2YWx1ZT4geworICAgIHN0YXRpYyBjb25z
dCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgRGVmYXVsdEhhc2g8V2ViQ29yZTo6R0NSZWFjaGFibGVS
ZWY8UD4+IHsKKyAgICB0eXBlZGVmIFB0ckhhc2g8V2ViQ29yZTo6R0NSZWFjaGFibGVSZWY8UD4+
IEhhc2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9NdXRhdGlvbk9ic2VydmVyLmNwcAkocmV2aXNpb24gMjM2NjkzKQorKysgU291cmNlL1dlYkNv
cmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzEx
NCwxNCBAQCBWZWN0b3I8UmVmPE11dGF0aW9uUmVjb3JkPj4gTXV0YXRpb25PYnNlCiB7CiAgICAg
VmVjdG9yPFJlZjxNdXRhdGlvblJlY29yZD4+IHJlY29yZHM7CiAgICAgcmVjb3Jkcy5zd2FwKG1f
cmVjb3Jkcyk7CisgICAgLy8gRG9uJ3QgY2xlYXIgbV9wZW5kaW5nVGFyZ2V0cyBoZXJlIGJlY2F1
c2Ugd2UgY2FuIGNvcnJlY3QgSlMgd3JhcHBlcnMKKyAgICAvLyBiZXR3ZWVuIHRoZSB0aW1lIHRh
a2VSZWNvcmRzIGFyZSBjYWxsZWQgYW5kIG5vZGVzIGluIHJlY29yZHMgYXJlIGFjY2Vzc3NlZC4K
ICAgICByZXR1cm4gcmVjb3JkczsKIH0KIAogdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpkaXNjb25u
ZWN0KCkKIHsKKyAgICBtX3BlbmRpbmdUYXJnZXRzLmNsZWFyKCk7CiAgICAgbV9yZWNvcmRzLmNs
ZWFyKCk7CiAgICAgSGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4gcmVnaXN0
cmF0aW9ucyhtX3JlZ2lzdHJhdGlvbnMpOwogICAgIGZvciAoYXV0byogcmVnaXN0cmF0aW9uIDog
cmVnaXN0cmF0aW9ucykKQEAgLTE4MSw2ICsxODQsOCBAQCBzdGF0aWMgdm9pZCBxdWV1ZU11dGF0
aW9uT2JzZXJ2ZXJDb21wb3VuCiB2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6OmVucXVldWVNdXRhdGlv
blJlY29yZChSZWY8TXV0YXRpb25SZWNvcmQ+JiYgbXV0YXRpb24pCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobXV0YXRpb24tPnRhcmdldCgpKTsKKyAgICBtX3Bl
bmRpbmdUYXJnZXRzLmFkZCgqbXV0YXRpb24tPnRhcmdldCgpKTsKICAgICBtX3JlY29yZHMuYXBw
ZW5kKFdURk1vdmUobXV0YXRpb24pKTsKICAgICBhY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmFk
ZCh0aGlzKTsKIApAQCAtMjI0LDE1ICsyMjksMTggQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpk
ZWxpdmVyKCkKICAgICAvLyBDYWxsaW5nIGNsZWFyVHJhbnNpZW50UmVnaXN0cmF0aW9ucygpIGNh
biBtb2RpZnkgbV9yZWdpc3RyYXRpb25zLCBzbyBpdCdzIG5lY2Vzc2FyeQogICAgIC8vIHRvIG1h
a2UgYSBjb3B5IG9mIHRoZSB0cmFuc2llbnQgcmVnaXN0cmF0aW9ucyBiZWZvcmUgb3BlcmF0aW5n
IG9uIHRoZW0uCiAgICAgVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qLCAxPiB0
cmFuc2llbnRSZWdpc3RyYXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNl
dDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4+LCAxPiBub2Rlc1RvS2VlcEFsaXZlOwogICAgIGZvciAo
YXV0byogcmVnaXN0cmF0aW9uIDogbV9yZWdpc3RyYXRpb25zKSB7CiAgICAgICAgIGlmIChyZWdp
c3RyYXRpb24tPmhhc1RyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKSkKICAgICAgICAgICAgIHRyYW5z
aWVudFJlZ2lzdHJhdGlvbnMuYXBwZW5kKHJlZ2lzdHJhdGlvbik7CiAgICAgfQogICAgIGZvciAo
YXV0byYgcmVnaXN0cmF0aW9uIDogdHJhbnNpZW50UmVnaXN0cmF0aW9ucykKLSAgICAgICAgcmVn
aXN0cmF0aW9uLT5jbGVhclRyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKTsKKyAgICAgICAgbm9kZXNU
b0tlZXBBbGl2ZS5hcHBlbmQocmVnaXN0cmF0aW9uLT5jbGVhclRyYW5zaWVudFJlZ2lzdHJhdGlv
bnMoKSk7CiAKLSAgICBpZiAobV9yZWNvcmRzLmlzRW1wdHkoKSkKKyAgICBpZiAobV9yZWNvcmRz
LmlzRW1wdHkoKSkgeworICAgICAgICBtX3BlbmRpbmdUYXJnZXRzLmNsZWFyKCk7IC8vIHRha2VS
ZWNvcmRzKCkgbWF5IGhhdmUgYmVlbiBjYWxsZWQuCiAgICAgICAgIHJldHVybjsKKyAgICB9CiAK
ICAgICBWZWN0b3I8UmVmPE11dGF0aW9uUmVjb3JkPj4gcmVjb3JkczsKICAgICByZWNvcmRzLnN3
YXAobV9yZWNvcmRzKTsKQEAgLTI0MCw2ICsyNDgsOCBAQCB2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6
OmRlbGl2ZXIoKQogICAgIC8vIEZJWE1FOiBLZWVwIG11dGF0aW9uIG9ic2VydmVyIGNhbGxiYWNr
IGFzIGxvbmcgYXMgaXRzIG9ic2VydmVkIG5vZGVzIGFyZSBhbGl2ZS4gU2VlIGh0dHBzOi8vd2Vi
a2l0Lm9yZy9iLzE3OTIyNC4KICAgICBpZiAobV9jYWxsYmFjay0+aGFzQ2FsbGJhY2soKSkKICAg
ICAgICAgbV9jYWxsYmFjay0+aGFuZGxlRXZlbnQoKnRoaXMsIHJlY29yZHMsICp0aGlzKTsKKwor
ICAgIG1fcGVuZGluZ1RhcmdldHMuY2xlYXIoKTsKIH0KIAogdm9pZCBNdXRhdGlvbk9ic2VydmVy
Ojpub3RpZnlNdXRhdGlvbk9ic2VydmVycygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25PYnNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlv
bk9ic2VydmVyLmgJKHJldmlzaW9uIDIzNjY5MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRh
dGlvbk9ic2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKKyNpbmNsdWRlICJHQ1JlYWNoYWJsZVJl
Zi5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CkBAIC0xMDksNiArMTEwLDcgQEAgcHJpdmF0ZToK
IAogICAgIFJlZjxNdXRhdGlvbkNhbGxiYWNrPiBtX2NhbGxiYWNrOwogICAgIFZlY3RvcjxSZWY8
TXV0YXRpb25SZWNvcmQ+PiBtX3JlY29yZHM7CisgICAgSGFzaFNldDxHQ1JlYWNoYWJsZVJlZjxO
b2RlPj4gbV9wZW5kaW5nVGFyZ2V0czsKICAgICBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyYXRpb24qPiBtX3JlZ2lzdHJhdGlvbnM7CiAgICAgdW5zaWduZWQgbV9wcmlvcml0eTsKIH07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyYXRpb24uY3BwCShyZXZpc2lvbiAyMzY2OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDI4ICs2
OCwzMCBAQCB2b2lkIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246Om9ic2VyCiAgICAgbV9v
YnNlcnZlci0+c2V0SGFzVHJhbnNpZW50UmVnaXN0cmF0aW9uKCk7CiAKICAgICBpZiAoIW1fdHJh
bnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpIHsKLSAgICAgICAgbV90cmFuc2llbnRSZWdpc3RyYXRp
b25Ob2RlcyA9IHN0ZDo6bWFrZV91bmlxdWU8SGFzaFNldDxSZWZQdHI8Tm9kZT4+PigpOworICAg
ICAgICBtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNo
U2V0PEdDUmVhY2hhYmxlUmVmPE5vZGU+Pj4oKTsKIAogICAgICAgICBBU1NFUlQoIW1fbm9kZUtl
cHRBbGl2ZSk7CiAgICAgICAgIG1fbm9kZUtlcHRBbGl2ZSA9ICZtX25vZGU7IC8vIEJhbGFuY2Vk
IGluIGNsZWFyVHJhbnNpZW50UmVnaXN0cmF0aW9ucy4KICAgICB9Ci0gICAgbV90cmFuc2llbnRS
ZWdpc3RyYXRpb25Ob2Rlcy0+YWRkKCZub2RlKTsKKyAgICBtX3RyYW5zaWVudFJlZ2lzdHJhdGlv
bk5vZGVzLT5hZGQobm9kZSk7CiB9CiAKLXZvaWQgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlv
bjo6Y2xlYXJUcmFuc2llbnRSZWdpc3RyYXRpb25zKCkKK3N0ZDo6dW5pcXVlX3B0cjxIYXNoU2V0
PEdDUmVhY2hhYmxlUmVmPE5vZGU+Pj4gTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6Y2xl
YXJUcmFuc2llbnRSZWdpc3RyYXRpb25zKCkKIHsKICAgICBpZiAoIW1fdHJhbnNpZW50UmVnaXN0
cmF0aW9uTm9kZXMpIHsKICAgICAgICAgQVNTRVJUKCFtX25vZGVLZXB0QWxpdmUpOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGZvciAoYXV0
byYgbm9kZSA6ICptX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzKQogICAgICAgICBub2RlLT51
bnJlZ2lzdGVyVHJhbnNpZW50TXV0YXRpb25PYnNlcnZlcigqdGhpcyk7CiAKLSAgICBtX3RyYW5z
aWVudFJlZ2lzdHJhdGlvbk5vZGVzID0gbnVsbHB0cjsKKyAgICBhdXRvIHJldHVyblZhbHVlID0g
V1RGTW92ZShtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzKTsKIAogICAgIEFTU0VSVChtX25v
ZGVLZXB0QWxpdmUpOwogICAgIG1fbm9kZUtlcHRBbGl2ZSA9IG51bGxwdHI7IC8vIEJhbGFuY2Vk
IGluIG9ic2VydmVTdWJ0cmVlTm9kZVdpbGxEZXRhY2guCisKKyAgICByZXR1cm4gcmV0dXJuVmFs
dWU7CiB9CiAKIGJvb2wgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6c2hvdWxkUmVjZWl2
ZU11dGF0aW9uRnJvbShOb2RlJiBub2RlLCBNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlvblR5cGUg
dHlwZSwgY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0cmlidXRlTmFtZSkgY29uc3QKQEAgLTExNiw3
ICsxMTgsNyBAQCB2b2lkIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OmFkZFJlCiAgICAg
aWYgKCFtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzKQogICAgICAgICByZXR1cm47CiAgICAg
Zm9yIChhdXRvJiBub2RlIDogKm1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpCi0gICAgICAg
IG5vZGVzLmFkZChub2RlLmdldCgpKTsKKyAgICAgICAgbm9kZXMuYWRkKG5vZGUucHRyKCkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmgJKHJldmlzaW9uIDIzNjY5MykKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJH
Q1JlYWNoYWJsZVJlZi5oIgogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgpAQCAt
NDcsNyArNDgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2V0T2JzZXJ2YXRpb24oTXV0YXRp
b25PYnNlcnZlck9wdGlvbnMsIGNvbnN0IEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgYXR0cmlidXRl
RmlsdGVyKTsKICAgICB2b2lkIG9ic2VydmVkU3VidHJlZU5vZGVXaWxsRGV0YWNoKE5vZGUmKTsK
LSAgICB2b2lkIGNsZWFyVHJhbnNpZW50UmVnaXN0cmF0aW9ucygpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxIYXNoU2V0PEdDUmVhY2hhYmxlUmVmPE5vZGU+Pj4gY2xlYXJUcmFuc2llbnRSZWdpc3Ry
YXRpb25zKCk7CiAgICAgYm9vbCBoYXNUcmFuc2llbnRSZWdpc3RyYXRpb25zKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2RlcyAmJiAhbV90cmFuc2llbnRSZWdpc3Ry
YXRpb25Ob2Rlcy0+aXNFbXB0eSgpOyB9CiAKICAgICBib29sIHNob3VsZFJlY2VpdmVNdXRhdGlv
bkZyb20oTm9kZSYsIE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSwgY29uc3QgUXVhbGlm
aWVkTmFtZSogYXR0cmlidXRlTmFtZSkgY29uc3Q7CkBAIC02NCw3ICs2NSw3IEBAIHByaXZhdGU6
CiAgICAgUmVmPE11dGF0aW9uT2JzZXJ2ZXI+IG1fb2JzZXJ2ZXI7CiAgICAgTm9kZSYgbV9ub2Rl
OwogICAgIFJlZlB0cjxOb2RlPiBtX25vZGVLZXB0QWxpdmU7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEhhc2hTZXQ8UmVmUHRyPE5vZGU+Pj4gbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2RlczsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4+IG1fdHJhbnNp
ZW50UmVnaXN0cmF0aW9uTm9kZXM7CiAgICAgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgbV9vcHRp
b25zOwogICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBtX2F0dHJpYnV0ZUZpbHRlcjsKIH07Cklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMzY2OTMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxOC0xMC0wMSAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAd2Via2l0Lm9yZz4KKworICAgICAgICBHQyBjYW4gY29sbGVjdCBKUyB3cmFwcGVycyBvZiBu
b2RlcyBpbiB0aGUgbXV0YXRpb24gcmVjb3JkcyB3YWl0aW5nIHRvIGJlIGRlbGl2ZXJlZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwMTE1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSByZWdy
ZXNzaW9uIHRlc3QuCisKKyAgICAgICAgKiBmYXN0L2RvbS9NdXRhdGlvbk9ic2VydmVyL211dGF0
aW9uLW9ic2VydmVyLXJldGFpbnMtanMtd3JhcHBlcnMtb2YtdGFyZ2V0cy1hbGl2ZS1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL011dGF0aW9uT2JzZXJ2ZXIvbXV0YXRp
b24tb2JzZXJ2ZXItcmV0YWlucy1qcy13cmFwcGVycy1vZi10YXJnZXRzLWFsaXZlLmh0bWw6IEFk
ZGVkLgorCiAyMDE4LTEwLTAxICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJlYmFzZWxpbmUgdGVzdHMgYWZ0ZXIgcjIzNjYzMi4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL011dGF0aW9uT2JzZXJ2ZXIvbXV0YXRpb24tb2JzZXJ2
ZXItcmV0YWlucy1qcy13cmFwcGVycy1vZi10YXJnZXRzLWFsaXZlLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9NdXRhdGlvbk9ic2VydmVyL211dGF0aW9u
LW9ic2VydmVyLXJldGFpbnMtanMtd3JhcHBlcnMtb2YtdGFyZ2V0cy1hbGl2ZS1leHBlY3RlZC50
eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vTXV0YXRpb25PYnNlcnZl
ci9tdXRhdGlvbi1vYnNlcnZlci1yZXRhaW5zLWpzLXdyYXBwZXJzLW9mLXRhcmdldHMtYWxpdmUt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAKK1RoaXMgdGVzdHMg
dGhhdCBKUyB3cmFwcGVycyBvZiBub2RlcyBpbiBhIHRyZWUgbXV0YXRpb24gcmVjb3JkIGRvIG5v
dCBnZXQgY29sbGVjdGVkLgorCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQ
QVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNT
CitQQVNTCitQQVNTCitQQVNTCitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL011
dGF0aW9uT2JzZXJ2ZXIvbXV0YXRpb24tb2JzZXJ2ZXItcmV0YWlucy1qcy13cmFwcGVycy1vZi10
YXJnZXRzLWFsaXZlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vTXV0
YXRpb25PYnNlcnZlci9tdXRhdGlvbi1vYnNlcnZlci1yZXRhaW5zLWpzLXdyYXBwZXJzLW9mLXRh
cmdldHMtYWxpdmUuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9N
dXRhdGlvbk9ic2VydmVyL211dGF0aW9uLW9ic2VydmVyLXJldGFpbnMtanMtd3JhcHBlcnMtb2Yt
dGFyZ2V0cy1hbGl2ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxwPlRoaXMgdGVzdHMgdGhhdCBKUyB3cmFwcGVy
cyBvZiBub2RlcyBpbiBhIHRyZWUgbXV0YXRpb24gcmVjb3JkIGRvIG5vdCBnZXQgY29sbGVjdGVk
LjwvcD4KKzxwcmUgaWQ9ImxvZyI+PC9wcmU+Cis8c2NyaXB0PgorCitpZiAod2luZG93LnRlc3RS
dW5uZXIpCisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKK2NvbnN0IG5vZGVDb3VudCA9
IDIwOworY29uc3QgaXRlcmF0aW9uQ291bnQgPSB3aW5kb3cuR0NDb250cm9sbGVyID8gMjAgOiA1
MDsKK2NvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKHJlY29yZExpc3QpID0+
IHsKKyAgICBsZXQgZGVhZENvdW50ID0gMDsKKyAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNv
cmRMaXN0KSB7CisgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiByZWNvcmQuYWRkZWROb2Rlcykg
eworICAgICAgICAgICAgaWYgKG5vZGUubXlTdGF0ZSAhPSAnYWxpdmUnKQorICAgICAgICAgICAg
ICAgIGRlYWRDb3VudCsrOworICAgICAgICB9CisgICAgICAgIHRyaWdnZXJHQygpOworICAgICAg
ICBmb3IgKGNvbnN0IG5vZGUgb2YgcmVjb3JkLnJlbW92ZWROb2RlcykgeworICAgICAgICAgICAg
aWYgKG5vZGUubXlTdGF0ZSAhPSAnYWxpdmUnKQorICAgICAgICAgICAgICAgIGRlYWRDb3VudCsr
OworICAgICAgICB9CisgICAgfQorICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2cnKS50
ZXh0Q29udGVudCArPSAoZGVhZENvdW50ID8gYEZBSUwgLSAke2RlYWRDb3VudH0gbm9kZXMgbG9z
dCBKUyB3cmFwcGVyc2AgOiAnUEFTUycpICsgJ1xuJzsKK30pOworCitmdW5jdGlvbiBydW5UZXN0
KCkgeworICAgIGxldCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsK
KyAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxkaXY+PC9kaXY+JzsKKyAgICBjb250YWluZXIu
Zmlyc3RDaGlsZC5teVN0YXRlID0gJ2FsaXZlJzsKKyAgICBvYnNlcnZlci5vYnNlcnZlKGNvbnRh
aW5lciwge3N1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZX0pOworCisgICAgLy8gVGVzdCB0
cmFuc2llbnQgcmVnaXN0cmF0aW9ucy4KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVDb3Vu
dDsgKytpKSB7CisgICAgICAgIGNvbnN0IGNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
c3BhbicpOworICAgICAgICBjaGlsZC5teVN0YXRlID0gJ2FsaXZlJzsKKyAgICAgICAgY2hpbGQu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpKS5teVN0YXRlID0gJ2Fs
aXZlJzsKKyAgICAgICAgY29udGFpbmVyLmZpcnN0Q2hpbGQuYXBwZW5kQ2hpbGQoY2hpbGQpOwor
ICAgICAgICBjaGlsZC50ZXh0Q29udGVudCA9ICcnOworICAgIH0KKyAgICBjb250YWluZXIudGV4
dENvbnRlbnQgPSAnJzsKKworICAgIC8vIFRlc3QgcGVuZGluZyB0YXJnZXRzLgorICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgbm9kZUNvdW50OyArK2kpCisgICAgICAgIGNvbnRhaW5lci5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJykpLm15U3RhdGUgPSAnYWxpdmUnOwor
fQorCitmdW5jdGlvbiB0cmlnZ2VyR0MoKSB7CisgICAgaWYgKHdpbmRvdy5HQ0NvbnRyb2xsZXIp
IHsKKyAgICAgICAgR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0gCisKKyAgICBjb25zdCBlbGVtZW50cyA9IG5ldyBBcnJheShub2RlQ291bnQpCisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCBub2RlQ291bnQ7ICsraSkKKyAgICAgICAgZWxlbWVudHNbaV0gPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisKKyAgICBjb25zdCB4ID0gbmV3IEFycmF5
KDEwMDApOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgKytpKQorICAgICAgICB4W2ld
ID0gbmV3IEFycmF5KDEwMCk7Cit9CisKK2FzeW5jIGZ1bmN0aW9uIHJ1bkFsbCgpIHsKKyAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgp
OworCisgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpdGVyYXRpb25Db3VudDsgKytqKSB7CisgICAg
ICAgIHJ1blRlc3QoKTsKKyAgICAgICAgdHJpZ2dlckdDKCk7CisgICAgICAgIGF3YWl0IFByb21p
c2UucmVzb2x2ZSgpOworICAgIH0KKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAg
ICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK3J1bkFsbCgpOworCis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="368668"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>