<?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>226420</bug_id>
          
          <creation_ts>2021-05-29 11:48:27 -0700</creation_ts>
          <short_desc>B3MoveConstants should filter directly on Values, and only create ValueKeys when useful</short_desc>
          <delta_ts>2021-06-02 18:08:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</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="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1765098</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-29 11:48:27 -0700</bug_when>
    <thetext>This is a trivial change: there is a lot of code in that pass that does:
```
ValueKey key(value);
if (!filter(key))
    continue;
```
Replacing it by
```
if (!filter(value))
    continue;
ValueKey key(value)
```
avoids running the constructor of ValueKey in the common case.

This reduces the time spent in B3MoveConstants over a run of JetStream2 from about 160ms to about 105ms, so a slightly less than 1% reduction in the total time spent in B3+Air (about 6s).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765099</commentid>
    <comment_count>1</comment_count>
      <attachid>430099</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-29 12:02:33 -0700</bug_when>
    <thetext>Created attachment 430099
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765103</commentid>
    <comment_count>2</comment_count>
      <attachid>430101</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-29 12:17:49 -0700</bug_when>
    <thetext>Created attachment 430101
Patch

fix style nit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765133</commentid>
    <comment_count>3</comment_count>
      <attachid>430101</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-29 14:24:48 -0700</bug_when>
    <thetext>Comment on attachment 430101
Patch

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

&gt; Source/JavaScriptCore/b3/B3MoveConstants.cpp:162
&gt; +                    ValueKey key = child-&gt;key();
&gt; +                    ASSERT_UNUSED(key, valueForConstant.get(key) == child);

If key is not used other than just for this assert, can you just do this instead?
    ASSERT(valueForConstant.get(child-&gt;key()) == child);

&gt; Source/JavaScriptCore/b3/B3MoveConstants.cpp:329
&gt; +            const auto* constValue = value-&gt;as&lt;ConstDoubleValue&gt;();

Why grab the ConstDoubleValue?  Why not just use asDouble() and go straight to the constValue-&gt;value()?

&gt; Source/JavaScriptCore/b3/B3MoveConstants.cpp:331
&gt; +            return bitwise_cast&lt;uint64_t&gt;(constValue-&gt;value()) != bitwise_cast&lt;uint64_t&gt;(doubleZero);

Why the comparison of the bits?  Why not just do the double compare against 0.0?

&gt; Source/JavaScriptCore/b3/B3MoveConstants.cpp:336
&gt; +            const auto* constValue = value-&gt;as&lt;ConstFloatValue&gt;();
&gt; +            float floatZero = 0.0;
&gt; +            return bitwise_cast&lt;uint32_t&gt;(constValue-&gt;value()) != bitwise_cast&lt;uint32_t&gt;(floatZero);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766201</commentid>
    <comment_count>4</comment_count>
      <attachid>430101</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-06-02 16:21:39 -0700</bug_when>
    <thetext>Comment on attachment 430101
Patch

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

r=me, though I recommend at least answering Mark&apos;s questions before landing.

&gt;&gt; Source/JavaScriptCore/b3/B3MoveConstants.cpp:331
&gt;&gt; +            return bitwise_cast&lt;uint64_t&gt;(constValue-&gt;value()) != bitwise_cast&lt;uint64_t&gt;(doubleZero);
&gt; 
&gt; Why the comparison of the bits?  Why not just do the double compare against 0.0?

Probably because -0 and +0 are equal?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766211</commentid>
    <comment_count>5</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-06-02 16:36:31 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #3)
&gt; Comment on attachment 430101 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=430101&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3MoveConstants.cpp:162
&gt; &gt; +                    ValueKey key = child-&gt;key();
&gt; &gt; +                    ASSERT_UNUSED(key, valueForConstant.get(key) == child);
&gt; 
&gt; If key is not used other than just for this assert, can you just do this
&gt; instead?
&gt;     ASSERT(valueForConstant.get(child-&gt;key()) == child);

good idea, will do.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3MoveConstants.cpp:329
&gt; &gt; +            const auto* constValue = value-&gt;as&lt;ConstDoubleValue&gt;();
&gt; 
&gt; Why grab the ConstDoubleValue?  Why not just use asDouble() and go straight
&gt; to the constValue-&gt;value()?

I did not remember about asDouble() existing. Will do.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3MoveConstants.cpp:331
&gt; &gt; +            return bitwise_cast&lt;uint64_t&gt;(constValue-&gt;value()) != bitwise_cast&lt;uint64_t&gt;(doubleZero);
&gt; 
&gt; Why the comparison of the bits?  Why not just do the double compare against
&gt; 0.0?

Previously, this code was doing a comparison of the bits, through ValueKey.
I decided not to mess with the semantics of it, especially since doubles have kinda weird rules for equality (-0.0 == +0.0 if I remember correctly, but there might be other madness related to NaN as well)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766212</commentid>
    <comment_count>6</comment_count>
      <attachid>430101</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-02 16:40:23 -0700</bug_when>
    <thetext>Comment on attachment 430101
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/b3/B3MoveConstants.cpp:331
&gt;&gt;&gt;&gt; +            return bitwise_cast&lt;uint64_t&gt;(constValue-&gt;value()) != bitwise_cast&lt;uint64_t&gt;(doubleZero);
&gt;&gt;&gt; 
&gt;&gt;&gt; Why the comparison of the bits?  Why not just do the double compare against 0.0?
&gt;&gt; 
&gt;&gt; Probably because -0 and +0 are equal?
&gt; 
&gt; Previously, this code was doing a comparison of the bits, through ValueKey.
&gt; I decided not to mess with the semantics of it, especially since doubles have kinda weird rules for equality (-0.0 == +0.0 if I remember correctly, but there might be other madness related to NaN as well)

Ah yes, I missed the part about it comparing ValueKeys.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766217</commentid>
    <comment_count>7</comment_count>
      <attachid>430419</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-06-02 16:47:56 -0700</bug_when>
    <thetext>Created attachment 430419
Patch for landing

Applied Mark&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766245</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-02 18:07:52 -0700</bug_when>
    <thetext>Committed r278390 (238415@main): &lt;https://commits.webkit.org/238415@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 430419.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766246</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-02 18:08:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/78791845&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430099</attachid>
            <date>2021-05-29 12:02:33 -0700</date>
            <delta_ts>2021-05-29 12:17:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch226420</filename>
            <type>text/plain</type>
            <size>7769</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDg4ZWNmMmJhNTU0My4uZjI0NWJiODJhZmNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0wNS0yOSAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIEIzTW92ZUNvbnN0
YW50cyBzaG91bGQgZmlsdGVyIGRpcmVjdGx5IG9uIFZhbHVlcywgYW5kIG9ubHkgY3JlYXRlIFZh
bHVlS2V5cyB3aGVuIHVzZWZ1bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI2NDIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSSBkaWQgYSBmZXcgcnVucyBvZiBKZXRTdHJlYW0yIHRvIG1lYXN1cmUgcmVz
dWx0cywgdGhlIHRpbWUgc3BlbnQgaW4gQjNNb3ZlQ29uc3RhbnRzIGdvZXMgZnJvbSAxNjAtMTgw
bXMgdG8gMTAwLTExMG1zLgorICAgICAgICBUaGUgdG90YWwgdGltZSBzcGVudCBpbiBCMytBaXIg
aXMgaW4gdGhlIDYgdG8gOHMgcmFuZ2UsIHNvIHRoaXMgaXMgYXBwcm94aW1hdGVseSBhIDElIHNw
ZWVkdXAuCisKKyAgICAgICAgKiBiMy9CM01vdmVDb25zdGFudHMuY3BwOgorCiAyMDIxLTA1LTI3
ICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAg
Tm9uLXVuaWZpZWQgYnVpbGQgZml4ZXMsIGxhdGUgTWF5IDIwMjEgZWRpdGlvbgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcAppbmRleCA4YWU3ZjQ0ZTgzMmEu
LmYyYmQzMzRiNTg0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92
ZUNvbnN0YW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0
YW50cy5jcHAKQEAgLTUxLDE1ICs1MSwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBydW4oKQogICAg
IHsKICAgICAgICAgaG9pc3RDb25zdGFudHMoCi0gICAgICAgICAgICBbJl0gKGNvbnN0IFZhbHVl
S2V5JiBrZXkpIC0+IGJvb2wgewotICAgICAgICAgICAgICAgIHJldHVybiBrZXkub3Bjb2RlKCkg
PT0gQ29uc3RGbG9hdCB8fCBrZXkub3Bjb2RlKCkgPT0gQ29uc3REb3VibGU7CisgICAgICAgICAg
ICBbJl0gKGNvbnN0IFZhbHVlKiB2YWx1ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLT5vcGNvZGUoKSA9PSBDb25zdEZsb2F0IHx8IHZhbHVlLT5vcGNvZGUoKSA9PSBD
b25zdERvdWJsZTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIGxvd2VyRlBDb25zdGFudHMo
KTsKICAgICAgICAgCiAgICAgICAgIGhvaXN0Q29uc3RhbnRzKAotICAgICAgICAgICAgWyZdIChj
b25zdCBWYWx1ZUtleSYga2V5KSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICByZXR1cm4ga2V5
Lm9wY29kZSgpID09IENvbnN0MzIgfHwga2V5Lm9wY29kZSgpID09IENvbnN0NjQgfHwga2V5Lm9w
Y29kZSgpID09IEFyZ3VtZW50UmVnOworICAgICAgICAgICAgWyZdIChjb25zdCBWYWx1ZSogdmFs
dWUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS0+b3Bjb2RlKCkgPT0g
Q29uc3QzMiB8fCB2YWx1ZS0+b3Bjb2RlKCkgPT0gQ29uc3Q2NCB8fCB2YWx1ZS0+b3Bjb2RlKCkg
PT0gQXJndW1lbnRSZWc7CiAgICAgICAgICAgICB9KTsKICAgICB9CiAKQEAgLTc1LDEwICs3NSwx
MCBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7
CiAgICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgewogICAgICAgICAgICAg
ICAgIGZvciAoVmFsdWUqJiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIFZhbHVlS2V5IGtleSA9IGNoaWxkLT5rZXkoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFmaWx0ZXIoa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIoY2hp
bGQpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgICAgICAg
ICAgICAgVmFsdWVLZXkga2V5ID0gY2hpbGQtPmtleSgpOwogICAgICAgICAgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IHZhbHVlRm9yQ29uc3RhbnQuYWRkKGtleSwgY2hpbGQpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEFzc3VtZSB0aGF0IHRoaXMgYmxvY2sgaXMgd2hlcmUgd2Ugd2FudCB0byBtYXRlcmlh
bGl6ZSB0aGUgdmFsdWUuCkBAIC0xMTUsMTAgKzExNSwxMCBAQCBwcml2YXRlOgogICAgICAgICAv
LyBvbmVzIGZyb20gdGhlIENGRywgc2luY2Ugd2UncmUgZ29pbmcgdG8gcmVpbnNlcnQgdGhlbSBl
bHNld2hlcmUuCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAg
ICAgICAgICAgIGZvciAoVmFsdWUqJiB2YWx1ZSA6ICpibG9jaykgewotICAgICAgICAgICAgICAg
IFZhbHVlS2V5IGtleSA9IHZhbHVlLT5rZXkoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWZpbHRl
cihrZXkpKQorICAgICAgICAgICAgICAgIGlmICghZmlsdGVyKHZhbHVlKSkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgICAgICAgICBWYWx1ZUtleSBrZXkgPSB2YWx1
ZS0+a2V5KCk7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlRm9yQ29uc3RhbnQuZ2V0KGtleSkg
PT0gdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbV9wcm9jLmFkZDxWYWx1ZT4o
Tm9wLCB2YWx1ZS0+b3JpZ2luKCkpOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTE1MywxMyAr
MTUzLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBjb21wdXRlZCB0
aGF0IHRoZSBjb25zdGFudCBzaG91bGQgYmUgbWF0ZXJpYWxpemVkIGluIHRoaXMgYmxvY2ssIGJ1
dCB3ZQogICAgICAgICAgICAgICAgIC8vIGhhdmVuJ3QgaW5zZXJ0ZWQgaXQgeWV0LiBUaGlzIGlu
c2VydHMgdGhlIGNvbnN0YW50IGlmIG5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgICBhdXRvIG1h
dGVyaWFsaXplID0gWyZdIChWYWx1ZSogY2hpbGQpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFs
dWVLZXkga2V5ID0gY2hpbGQtPmtleSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRl
cihrZXkpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlcihjaGlsZCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ug
ZW5jb3VudGVyIGEgZmFzdCBjb25zdGFudCwgdGhlbiBpdCBtdXN0IGJlIGNhbm9uaWNhbCwgc2lu
Y2Ugd2UgYWxyZWFkeQogICAgICAgICAgICAgICAgICAgICAvLyBnb3QgcmlkIG9mIHRoZSBub24t
Y2Fub25pY2FsIG9uZXMuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZUZvckNvbnN0
YW50LmdldChrZXkpID09IGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVLZXkga2V5
ID0gY2hpbGQtPmtleSgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGtleSwg
dmFsdWVGb3JDb25zdGFudC5nZXQoa2V5KSA9PSBjaGlsZCk7CiAKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkLT5vd25lciAhPSBibG9jaykgewogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBjb25zdGFudCBpc24ndCBvdXIgcHJvYmxlbS4gSXQncyBnb2luZyB0byBiZSBtYXRl
cmlhbGl6ZWQgaW4gYW5vdGhlcgpAQCAtMTc1LDcgKzE3NSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKE1lbW9yeVZhbHVlKiBtZW1vcnlWYWx1ZSA9
IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSkgewogICAgICAgICAgICAgICAgICAgICBWYWx1ZSog
cG9pbnRlciA9IG1lbW9yeVZhbHVlLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHBvaW50ZXItPmhhc0ludFB0cigpICYmIGZpbHRlcihwb2ludGVyLT5rZXkoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHBvaW50ZXItPmhhc0ludFB0cigpICYmIGZpbHRlcihwb2lu
dGVyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBkZXNpcmVkT2Zmc2V0ID0gWyZd
IChWYWx1ZSogb3RoZXJQb2ludGVyKSAtPiBpbnRwdHJfdCB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gV2Ugd291bGQgdHVybiB0aGlzOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vCkBAIC0yMTMsNyArMjEzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBBZGQ6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgU3ViOiB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBWYWx1ZSogYWRkZW5kID0gdmFsdWUtPmNoaWxkKDEpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFhZGRlbmQtPmhhc0ludCgpIHx8ICFmaWx0ZXIoYWRkZW5kLT5rZXko
KSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFkZGVuZC0+aGFzSW50KCkgfHwgIWZp
bHRlcihhZGRlbmQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaW50NjRfdCBhZGRlbmRDb25zdCA9IGFkZGVuZC0+YXNJbnQoKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBiZXN0QWRkZW5kID0gZmluZEJlc3RDb25z
dGFudCgKQEAgLTI2MSw5ICsyNjEsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGxvd2VyRlBDb25z
dGFudHMoKQogICAgIHsKICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBtX3Byb2MudmFsdWVz
KCkpIHsKKyAgICAgICAgICAgIGlmICghZ29lc0luVGFibGUodmFsdWUpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgVmFsdWVLZXkga2V5ID0gdmFsdWUtPmtleSgpOwot
ICAgICAgICAgICAgaWYgKGdvZXNJblRhYmxlKGtleSkpCi0gICAgICAgICAgICAgICAgbV9jb25z
dFRhYmxlLmFkZChrZXksIG1fY29uc3RUYWJsZS5zaXplKCkpOworICAgICAgICAgICAgbV9jb25z
dFRhYmxlLmFkZChrZXksIG1fY29uc3RUYWJsZS5zaXplKCkpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBtX2RhdGFTZWN0aW9uID0gc3RhdGljX2Nhc3Q8aW50NjRfdCo+KG1fcHJvYy5h
ZGREYXRhU2VjdGlvbihtX2NvbnN0VGFibGUuc2l6ZSgpICogc2l6ZW9mKGludDY0X3QpKSk7CkBA
IC0yODIsMTAgKzI4MywxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBWYWx1ZSom
IGNoaWxkID0gdmFsdWUtPmNoaWxkKGNoaWxkSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBW
YWx1ZUtleSBrZXkgPSBjaGlsZC0+a2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZ29l
c0luVGFibGUoa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFnb2VzSW5UYWJsZShjaGls
ZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAgICAgICAg
ICAgICBWYWx1ZUtleSBrZXkgPSBjaGlsZC0+a2V5KCk7CiAgICAgICAgICAgICAgICAgICAgIGNo
aWxkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUoCiAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZUluZGV4LCBrZXkubWF0ZXJpYWxpemUobV9wcm9jLCB2YWx1ZS0+b3JpZ2luKCkpKTsK
ICAgICAgICAgICAgICAgICAgICAgb2ZmTGltaXRzLmFkZChjaGlsZCk7CkBAIC0yOTgsMTIgKzI5
OSwxMiBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9j
KSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4
IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1ZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgVmFsdWUq
IHZhbHVlID0gYmxvY2stPmF0KHZhbHVlSW5kZXgpOwotICAgICAgICAgICAgICAgIFZhbHVlS2V5
IGtleSA9IHZhbHVlLT5rZXkoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWdvZXNJblRhYmxlKGtl
eSkpCisgICAgICAgICAgICAgICAgaWYgKCFnb2VzSW5UYWJsZSh2YWx1ZSkpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlmIChvZmZMaW1pdHMuY29udGFp
bnModmFsdWUpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAgICAg
ICAgIFZhbHVlS2V5IGtleSA9IHZhbHVlLT5rZXkoKTsKICAgICAgICAgICAgICAgICBhdXRvIG9m
ZnNldCA9IHNpemVvZihpbnQ2NF90KSAqIG1fY29uc3RUYWJsZS5nZXQoa2V5KTsKICAgICAgICAg
ICAgICAgICBpZiAoIWlzUmVwcmVzZW50YWJsZUFzPFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTMyMSwyMCArMzIyLDIzIEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBib29sIGdvZXNJblRhYmxlKGNvbnN0IFZh
bHVlS2V5JiBrZXkpCisgICAgYm9vbCBnb2VzSW5UYWJsZShjb25zdCBWYWx1ZSogdmFsdWUpCiAg
ICAgewotICAgICAgICByZXR1cm4gKGtleS5vcGNvZGUoKSA9PSBDb25zdERvdWJsZSAmJiBrZXkg
IT0gZG91YmxlWmVybygpKQotICAgICAgICAgICAgfHwgKGtleS5vcGNvZGUoKSA9PSBDb25zdEZs
b2F0ICYmIGtleSAhPSBmbG9hdFplcm8oKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFZhbHVlS2V5
IGRvdWJsZVplcm8oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFZhbHVlS2V5KENvbnN0RG91Ymxl
LCBEb3VibGUsIDAuMCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFZhbHVlS2V5IGZsb2F0WmVybygp
Ci0gICAgewotICAgICAgICByZXR1cm4gVmFsdWVLZXkoQ29uc3RGbG9hdCwgRmxvYXQsIDAuMCk7
CisgICAgICAgIHN3aXRjaCh2YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBDb25zdERv
dWJsZTogeworICAgICAgICAgICAgY29uc3QgYXV0byogY29uc3RWYWx1ZSA9IHZhbHVlLT5hczxD
b25zdERvdWJsZVZhbHVlPigpOworICAgICAgICAgICAgZG91YmxlIGRvdWJsZVplcm8gPSAwLjA7
CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihjb25zdFZhbHVlLT52
YWx1ZSgpKSAhPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGRvdWJsZVplcm8pOworICAgICAgICB9
CisgICAgICAgIGNhc2UgQ29uc3RGbG9hdDogeworICAgICAgICAgICAgY29uc3QgYXV0byogY29u
c3RWYWx1ZSA9IHZhbHVlLT5hczxDb25zdEZsb2F0VmFsdWU+KCk7CisgICAgICAgICAgICBmbG9h
dCBmbG9hdFplcm8gPSAwLjA7CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQz
Ml90Pihjb25zdFZhbHVlLT52YWx1ZSgpKSAhPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGZsb2F0
WmVybyk7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBVTlJFQUNIQUJMRSgpOwogICAgIH0KIAogICAgIFBy
b2NlZHVyZSYgbV9wcm9jOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430101</attachid>
            <date>2021-05-29 12:17:49 -0700</date>
            <delta_ts>2021-06-02 16:47:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch226420</filename>
            <type>text/plain</type>
            <size>7762</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDg4ZWNmMmJhNTU0My4uZjI0NWJiODJhZmNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0wNS0yOSAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIEIzTW92ZUNvbnN0
YW50cyBzaG91bGQgZmlsdGVyIGRpcmVjdGx5IG9uIFZhbHVlcywgYW5kIG9ubHkgY3JlYXRlIFZh
bHVlS2V5cyB3aGVuIHVzZWZ1bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI2NDIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSSBkaWQgYSBmZXcgcnVucyBvZiBKZXRTdHJlYW0yIHRvIG1lYXN1cmUgcmVz
dWx0cywgdGhlIHRpbWUgc3BlbnQgaW4gQjNNb3ZlQ29uc3RhbnRzIGdvZXMgZnJvbSAxNjAtMTgw
bXMgdG8gMTAwLTExMG1zLgorICAgICAgICBUaGUgdG90YWwgdGltZSBzcGVudCBpbiBCMytBaXIg
aXMgaW4gdGhlIDYgdG8gOHMgcmFuZ2UsIHNvIHRoaXMgaXMgYXBwcm94aW1hdGVseSBhIDElIHNw
ZWVkdXAuCisKKyAgICAgICAgKiBiMy9CM01vdmVDb25zdGFudHMuY3BwOgorCiAyMDIxLTA1LTI3
ICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAg
Tm9uLXVuaWZpZWQgYnVpbGQgZml4ZXMsIGxhdGUgTWF5IDIwMjEgZWRpdGlvbgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcAppbmRleCA4YWU3ZjQ0ZTgzMmEu
LjE5YzBiMWViZWE1YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92
ZUNvbnN0YW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0
YW50cy5jcHAKQEAgLTUxLDE1ICs1MSwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBydW4oKQogICAg
IHsKICAgICAgICAgaG9pc3RDb25zdGFudHMoCi0gICAgICAgICAgICBbJl0gKGNvbnN0IFZhbHVl
S2V5JiBrZXkpIC0+IGJvb2wgewotICAgICAgICAgICAgICAgIHJldHVybiBrZXkub3Bjb2RlKCkg
PT0gQ29uc3RGbG9hdCB8fCBrZXkub3Bjb2RlKCkgPT0gQ29uc3REb3VibGU7CisgICAgICAgICAg
ICBbJl0gKGNvbnN0IFZhbHVlKiB2YWx1ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLT5vcGNvZGUoKSA9PSBDb25zdEZsb2F0IHx8IHZhbHVlLT5vcGNvZGUoKSA9PSBD
b25zdERvdWJsZTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIGxvd2VyRlBDb25zdGFudHMo
KTsKICAgICAgICAgCiAgICAgICAgIGhvaXN0Q29uc3RhbnRzKAotICAgICAgICAgICAgWyZdIChj
b25zdCBWYWx1ZUtleSYga2V5KSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICByZXR1cm4ga2V5
Lm9wY29kZSgpID09IENvbnN0MzIgfHwga2V5Lm9wY29kZSgpID09IENvbnN0NjQgfHwga2V5Lm9w
Y29kZSgpID09IEFyZ3VtZW50UmVnOworICAgICAgICAgICAgWyZdIChjb25zdCBWYWx1ZSogdmFs
dWUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS0+b3Bjb2RlKCkgPT0g
Q29uc3QzMiB8fCB2YWx1ZS0+b3Bjb2RlKCkgPT0gQ29uc3Q2NCB8fCB2YWx1ZS0+b3Bjb2RlKCkg
PT0gQXJndW1lbnRSZWc7CiAgICAgICAgICAgICB9KTsKICAgICB9CiAKQEAgLTc1LDEwICs3NSwx
MCBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7
CiAgICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgewogICAgICAgICAgICAg
ICAgIGZvciAoVmFsdWUqJiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIFZhbHVlS2V5IGtleSA9IGNoaWxkLT5rZXkoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFmaWx0ZXIoa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIoY2hp
bGQpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgICAgICAg
ICAgICAgVmFsdWVLZXkga2V5ID0gY2hpbGQtPmtleSgpOwogICAgICAgICAgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IHZhbHVlRm9yQ29uc3RhbnQuYWRkKGtleSwgY2hpbGQpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEFzc3VtZSB0aGF0IHRoaXMgYmxvY2sgaXMgd2hlcmUgd2Ugd2FudCB0byBtYXRlcmlh
bGl6ZSB0aGUgdmFsdWUuCkBAIC0xMTUsMTAgKzExNSwxMCBAQCBwcml2YXRlOgogICAgICAgICAv
LyBvbmVzIGZyb20gdGhlIENGRywgc2luY2Ugd2UncmUgZ29pbmcgdG8gcmVpbnNlcnQgdGhlbSBl
bHNld2hlcmUuCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAg
ICAgICAgICAgIGZvciAoVmFsdWUqJiB2YWx1ZSA6ICpibG9jaykgewotICAgICAgICAgICAgICAg
IFZhbHVlS2V5IGtleSA9IHZhbHVlLT5rZXkoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWZpbHRl
cihrZXkpKQorICAgICAgICAgICAgICAgIGlmICghZmlsdGVyKHZhbHVlKSkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgICAgICAgICBWYWx1ZUtleSBrZXkgPSB2YWx1
ZS0+a2V5KCk7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlRm9yQ29uc3RhbnQuZ2V0KGtleSkg
PT0gdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbV9wcm9jLmFkZDxWYWx1ZT4o
Tm9wLCB2YWx1ZS0+b3JpZ2luKCkpOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTE1MywxMyAr
MTUzLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBjb21wdXRlZCB0
aGF0IHRoZSBjb25zdGFudCBzaG91bGQgYmUgbWF0ZXJpYWxpemVkIGluIHRoaXMgYmxvY2ssIGJ1
dCB3ZQogICAgICAgICAgICAgICAgIC8vIGhhdmVuJ3QgaW5zZXJ0ZWQgaXQgeWV0LiBUaGlzIGlu
c2VydHMgdGhlIGNvbnN0YW50IGlmIG5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgICBhdXRvIG1h
dGVyaWFsaXplID0gWyZdIChWYWx1ZSogY2hpbGQpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFs
dWVLZXkga2V5ID0gY2hpbGQtPmtleSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRl
cihrZXkpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlcihjaGlsZCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ug
ZW5jb3VudGVyIGEgZmFzdCBjb25zdGFudCwgdGhlbiBpdCBtdXN0IGJlIGNhbm9uaWNhbCwgc2lu
Y2Ugd2UgYWxyZWFkeQogICAgICAgICAgICAgICAgICAgICAvLyBnb3QgcmlkIG9mIHRoZSBub24t
Y2Fub25pY2FsIG9uZXMuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZUZvckNvbnN0
YW50LmdldChrZXkpID09IGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVLZXkga2V5
ID0gY2hpbGQtPmtleSgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGtleSwg
dmFsdWVGb3JDb25zdGFudC5nZXQoa2V5KSA9PSBjaGlsZCk7CiAKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkLT5vd25lciAhPSBibG9jaykgewogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBjb25zdGFudCBpc24ndCBvdXIgcHJvYmxlbS4gSXQncyBnb2luZyB0byBiZSBtYXRl
cmlhbGl6ZWQgaW4gYW5vdGhlcgpAQCAtMTc1LDcgKzE3NSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKE1lbW9yeVZhbHVlKiBtZW1vcnlWYWx1ZSA9
IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSkgewogICAgICAgICAgICAgICAgICAgICBWYWx1ZSog
cG9pbnRlciA9IG1lbW9yeVZhbHVlLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHBvaW50ZXItPmhhc0ludFB0cigpICYmIGZpbHRlcihwb2ludGVyLT5rZXkoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHBvaW50ZXItPmhhc0ludFB0cigpICYmIGZpbHRlcihwb2lu
dGVyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBkZXNpcmVkT2Zmc2V0ID0gWyZd
IChWYWx1ZSogb3RoZXJQb2ludGVyKSAtPiBpbnRwdHJfdCB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gV2Ugd291bGQgdHVybiB0aGlzOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vCkBAIC0yMTMsNyArMjEzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBBZGQ6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgU3ViOiB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBWYWx1ZSogYWRkZW5kID0gdmFsdWUtPmNoaWxkKDEpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFhZGRlbmQtPmhhc0ludCgpIHx8ICFmaWx0ZXIoYWRkZW5kLT5rZXko
KSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFkZGVuZC0+aGFzSW50KCkgfHwgIWZp
bHRlcihhZGRlbmQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaW50NjRfdCBhZGRlbmRDb25zdCA9IGFkZGVuZC0+YXNJbnQoKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBiZXN0QWRkZW5kID0gZmluZEJlc3RDb25z
dGFudCgKQEAgLTI2MSw5ICsyNjEsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGxvd2VyRlBDb25z
dGFudHMoKQogICAgIHsKICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBtX3Byb2MudmFsdWVz
KCkpIHsKKyAgICAgICAgICAgIGlmICghZ29lc0luVGFibGUodmFsdWUpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgVmFsdWVLZXkga2V5ID0gdmFsdWUtPmtleSgpOwot
ICAgICAgICAgICAgaWYgKGdvZXNJblRhYmxlKGtleSkpCi0gICAgICAgICAgICAgICAgbV9jb25z
dFRhYmxlLmFkZChrZXksIG1fY29uc3RUYWJsZS5zaXplKCkpOworICAgICAgICAgICAgbV9jb25z
dFRhYmxlLmFkZChrZXksIG1fY29uc3RUYWJsZS5zaXplKCkpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBtX2RhdGFTZWN0aW9uID0gc3RhdGljX2Nhc3Q8aW50NjRfdCo+KG1fcHJvYy5h
ZGREYXRhU2VjdGlvbihtX2NvbnN0VGFibGUuc2l6ZSgpICogc2l6ZW9mKGludDY0X3QpKSk7CkBA
IC0yODIsMTAgKzI4MywxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBWYWx1ZSom
IGNoaWxkID0gdmFsdWUtPmNoaWxkKGNoaWxkSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBW
YWx1ZUtleSBrZXkgPSBjaGlsZC0+a2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZ29l
c0luVGFibGUoa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFnb2VzSW5UYWJsZShjaGls
ZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAgICAgICAg
ICAgICBWYWx1ZUtleSBrZXkgPSBjaGlsZC0+a2V5KCk7CiAgICAgICAgICAgICAgICAgICAgIGNo
aWxkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUoCiAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZUluZGV4LCBrZXkubWF0ZXJpYWxpemUobV9wcm9jLCB2YWx1ZS0+b3JpZ2luKCkpKTsK
ICAgICAgICAgICAgICAgICAgICAgb2ZmTGltaXRzLmFkZChjaGlsZCk7CkBAIC0yOTgsMTIgKzI5
OSwxMiBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9j
KSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4
IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1ZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgVmFsdWUq
IHZhbHVlID0gYmxvY2stPmF0KHZhbHVlSW5kZXgpOwotICAgICAgICAgICAgICAgIFZhbHVlS2V5
IGtleSA9IHZhbHVlLT5rZXkoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWdvZXNJblRhYmxlKGtl
eSkpCisgICAgICAgICAgICAgICAgaWYgKCFnb2VzSW5UYWJsZSh2YWx1ZSkpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlmIChvZmZMaW1pdHMuY29udGFp
bnModmFsdWUpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAgICAg
ICAgIFZhbHVlS2V5IGtleSA9IHZhbHVlLT5rZXkoKTsKICAgICAgICAgICAgICAgICBhdXRvIG9m
ZnNldCA9IHNpemVvZihpbnQ2NF90KSAqIG1fY29uc3RUYWJsZS5nZXQoa2V5KTsKICAgICAgICAg
ICAgICAgICBpZiAoIWlzUmVwcmVzZW50YWJsZUFzPFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTMyMSwyMCArMzIyLDIzIEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBib29sIGdvZXNJblRhYmxlKGNvbnN0IFZh
bHVlS2V5JiBrZXkpCisgICAgYm9vbCBnb2VzSW5UYWJsZShjb25zdCBWYWx1ZSogdmFsdWUpCiAg
ICAgewotICAgICAgICByZXR1cm4gKGtleS5vcGNvZGUoKSA9PSBDb25zdERvdWJsZSAmJiBrZXkg
IT0gZG91YmxlWmVybygpKQotICAgICAgICAgICAgfHwgKGtleS5vcGNvZGUoKSA9PSBDb25zdEZs
b2F0ICYmIGtleSAhPSBmbG9hdFplcm8oKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFZhbHVlS2V5
IGRvdWJsZVplcm8oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFZhbHVlS2V5KENvbnN0RG91Ymxl
LCBEb3VibGUsIDAuMCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFZhbHVlS2V5IGZsb2F0WmVybygp
Ci0gICAgewotICAgICAgICByZXR1cm4gVmFsdWVLZXkoQ29uc3RGbG9hdCwgRmxvYXQsIDAuMCk7
CisgICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgIGNhc2UgQ29uc3RE
b3VibGU6IHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8qIGNvbnN0VmFsdWUgPSB2YWx1ZS0+YXM8
Q29uc3REb3VibGVWYWx1ZT4oKTsKKyAgICAgICAgICAgIGRvdWJsZSBkb3VibGVaZXJvID0gMC4w
OworICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oY29uc3RWYWx1ZS0+
dmFsdWUoKSkgIT0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihkb3VibGVaZXJvKTsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIENvbnN0RmxvYXQ6IHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8qIGNv
bnN0VmFsdWUgPSB2YWx1ZS0+YXM8Q29uc3RGbG9hdFZhbHVlPigpOworICAgICAgICAgICAgZmxv
YXQgZmxvYXRaZXJvID0gMC4wOworICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50
MzJfdD4oY29uc3RWYWx1ZS0+dmFsdWUoKSkgIT0gYml0d2lzZV9jYXN0PHVpbnQzMl90PihmbG9h
dFplcm8pOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgUHJvY2VkdXJl
JiBtX3Byb2M7Cg==
</data>
<flag name="review"
          id="451448"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430419</attachid>
            <date>2021-06-02 16:47:56 -0700</date>
            <delta_ts>2021-06-02 18:07:53 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>patch226420</filename>
            <type>text/plain</type>
            <size>7563</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDg4ZWNmMmJhNTU0My4uMzAxNzI4NWM2ZWMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0wNS0yOSAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIEIzTW92ZUNvbnN0
YW50cyBzaG91bGQgZmlsdGVyIGRpcmVjdGx5IG9uIFZhbHVlcywgYW5kIG9ubHkgY3JlYXRlIFZh
bHVlS2V5cyB3aGVuIHVzZWZ1bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI2NDIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUGhpbCBQaXpsby4KKwor
ICAgICAgICBJIGRpZCBhIGZldyBydW5zIG9mIEpldFN0cmVhbTIgdG8gbWVhc3VyZSByZXN1bHRz
LCB0aGUgdGltZSBzcGVudCBpbiBCM01vdmVDb25zdGFudHMgZ29lcyBmcm9tIDE2MC0xODBtcyB0
byAxMDAtMTEwbXMuCisgICAgICAgIFRoZSB0b3RhbCB0aW1lIHNwZW50IGluIEIzK0FpciBpcyBp
biB0aGUgNiB0byA4cyByYW5nZSwgc28gdGhpcyBpcyBhcHByb3hpbWF0ZWx5IGEgMSUgc3BlZWR1
cC4KKworICAgICAgICAqIGIzL0IzTW92ZUNvbnN0YW50cy5jcHA6CisKIDIwMjEtMDUtMjcgIEFk
cmlhbiBQZXJleiBkZSBDYXN0cm8gIDxhcGVyZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBOb24t
dW5pZmllZCBidWlsZCBmaXhlcywgbGF0ZSBNYXkgMjAyMSBlZGl0aW9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM01vdmVDb25zdGFudHMuY3BwCmluZGV4IDhhZTdmNDRlODMyYS4uNDZm
YzdmMDE5ZjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29u
c3RhbnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRz
LmNwcApAQCAtNTEsMTUgKzUxLDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIHJ1bigpCiAgICAgewog
ICAgICAgICBob2lzdENvbnN0YW50cygKLSAgICAgICAgICAgIFsmXSAoY29uc3QgVmFsdWVLZXkm
IGtleSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGtleS5vcGNvZGUoKSA9PSBD
b25zdEZsb2F0IHx8IGtleS5vcGNvZGUoKSA9PSBDb25zdERvdWJsZTsKKyAgICAgICAgICAgIFsm
XSAoY29uc3QgVmFsdWUqIHZhbHVlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dmFsdWUtPm9wY29kZSgpID09IENvbnN0RmxvYXQgfHwgdmFsdWUtPm9wY29kZSgpID09IENvbnN0
RG91YmxlOwogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgbG93ZXJGUENvbnN0YW50cygpOwog
ICAgICAgICAKICAgICAgICAgaG9pc3RDb25zdGFudHMoCi0gICAgICAgICAgICBbJl0gKGNvbnN0
IFZhbHVlS2V5JiBrZXkpIC0+IGJvb2wgewotICAgICAgICAgICAgICAgIHJldHVybiBrZXkub3Bj
b2RlKCkgPT0gQ29uc3QzMiB8fCBrZXkub3Bjb2RlKCkgPT0gQ29uc3Q2NCB8fCBrZXkub3Bjb2Rl
KCkgPT0gQXJndW1lbnRSZWc7CisgICAgICAgICAgICBbJl0gKGNvbnN0IFZhbHVlKiB2YWx1ZSkg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLT5vcGNvZGUoKSA9PSBDb25z
dDMyIHx8IHZhbHVlLT5vcGNvZGUoKSA9PSBDb25zdDY0IHx8IHZhbHVlLT5vcGNvZGUoKSA9PSBB
cmd1bWVudFJlZzsKICAgICAgICAgICAgIH0pOwogICAgIH0KIApAQCAtNzUsMTAgKzc1LDEwIEBA
IHByaXZhdGU6CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAg
ICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CiAgICAgICAgICAgICAgICAg
Zm9yIChWYWx1ZSomIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgVmFsdWVLZXkga2V5ID0gY2hpbGQtPmtleSgpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWZpbHRlcihrZXkpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlcihjaGlsZCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAgICAgICAgICAg
ICBWYWx1ZUtleSBrZXkgPSBjaGlsZC0+a2V5KCk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gdmFsdWVGb3JDb25zdGFudC5hZGQoa2V5LCBjaGlsZCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQXNzdW1lIHRoYXQgdGhpcyBibG9jayBpcyB3aGVyZSB3ZSB3YW50IHRvIG1hdGVyaWFsaXpl
IHRoZSB2YWx1ZS4KQEAgLTExNSwxMCArMTE1LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIG9u
ZXMgZnJvbSB0aGUgQ0ZHLCBzaW5jZSB3ZSdyZSBnb2luZyB0byByZWluc2VydCB0aGVtIGVsc2V3
aGVyZS4KICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAg
ICAgICAgZm9yIChWYWx1ZSomIHZhbHVlIDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgVmFs
dWVLZXkga2V5ID0gdmFsdWUtPmtleSgpOwotICAgICAgICAgICAgICAgIGlmICghZmlsdGVyKGtl
eSkpCisgICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIodmFsdWUpKQogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKIAorICAgICAgICAgICAgICAgIFZhbHVlS2V5IGtleSA9IHZhbHVlLT5r
ZXkoKTsKICAgICAgICAgICAgICAgICBpZiAodmFsdWVGb3JDb25zdGFudC5nZXQoa2V5KSA9PSB2
YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtX3Byb2MuYWRkPFZhbHVlPihOb3As
IHZhbHVlLT5vcmlnaW4oKSk7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtMTUzLDEzICsxNTMs
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGNvbXB1dGVkIHRoYXQg
dGhlIGNvbnN0YW50IHNob3VsZCBiZSBtYXRlcmlhbGl6ZWQgaW4gdGhpcyBibG9jaywgYnV0IHdl
CiAgICAgICAgICAgICAgICAgLy8gaGF2ZW4ndCBpbnNlcnRlZCBpdCB5ZXQuIFRoaXMgaW5zZXJ0
cyB0aGUgY29uc3RhbnQgaWYgbmVjZXNzYXJ5LgogICAgICAgICAgICAgICAgIGF1dG8gbWF0ZXJp
YWxpemUgPSBbJl0gKFZhbHVlKiBjaGlsZCkgewotICAgICAgICAgICAgICAgICAgICBWYWx1ZUtl
eSBrZXkgPSBjaGlsZC0+a2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZmlsdGVyKGtl
eSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghZmlsdGVyKGNoaWxkKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBlbmNv
dW50ZXIgYSBmYXN0IGNvbnN0YW50LCB0aGVuIGl0IG11c3QgYmUgY2Fub25pY2FsLCBzaW5jZSB3
ZSBhbHJlYWR5CiAgICAgICAgICAgICAgICAgICAgIC8vIGdvdCByaWQgb2YgdGhlIG5vbi1jYW5v
bmljYWwgb25lcy4KLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlRm9yQ29uc3RhbnQu
Z2V0KGtleSkgPT0gY2hpbGQpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWVGb3JD
b25zdGFudC5nZXQoY2hpbGQtPmtleSgpKSA9PSBjaGlsZCk7CiAKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkLT5vd25lciAhPSBibG9jaykgewogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBjb25zdGFudCBpc24ndCBvdXIgcHJvYmxlbS4gSXQncyBnb2luZyB0byBiZSBtYXRl
cmlhbGl6ZWQgaW4gYW5vdGhlcgpAQCAtMTc1LDcgKzE3NCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKE1lbW9yeVZhbHVlKiBtZW1vcnlWYWx1ZSA9
IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSkgewogICAgICAgICAgICAgICAgICAgICBWYWx1ZSog
cG9pbnRlciA9IG1lbW9yeVZhbHVlLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHBvaW50ZXItPmhhc0ludFB0cigpICYmIGZpbHRlcihwb2ludGVyLT5rZXkoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHBvaW50ZXItPmhhc0ludFB0cigpICYmIGZpbHRlcihwb2lu
dGVyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBkZXNpcmVkT2Zmc2V0ID0gWyZd
IChWYWx1ZSogb3RoZXJQb2ludGVyKSAtPiBpbnRwdHJfdCB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gV2Ugd291bGQgdHVybiB0aGlzOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vCkBAIC0yMTMsNyArMjEyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBBZGQ6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgU3ViOiB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBWYWx1ZSogYWRkZW5kID0gdmFsdWUtPmNoaWxkKDEpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFhZGRlbmQtPmhhc0ludCgpIHx8ICFmaWx0ZXIoYWRkZW5kLT5rZXko
KSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFkZGVuZC0+aGFzSW50KCkgfHwgIWZp
bHRlcihhZGRlbmQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaW50NjRfdCBhZGRlbmRDb25zdCA9IGFkZGVuZC0+YXNJbnQoKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBiZXN0QWRkZW5kID0gZmluZEJlc3RDb25z
dGFudCgKQEAgLTI2MSw5ICsyNjAsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGxvd2VyRlBDb25z
dGFudHMoKQogICAgIHsKICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBtX3Byb2MudmFsdWVz
KCkpIHsKKyAgICAgICAgICAgIGlmICghZ29lc0luVGFibGUodmFsdWUpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgVmFsdWVLZXkga2V5ID0gdmFsdWUtPmtleSgpOwot
ICAgICAgICAgICAgaWYgKGdvZXNJblRhYmxlKGtleSkpCi0gICAgICAgICAgICAgICAgbV9jb25z
dFRhYmxlLmFkZChrZXksIG1fY29uc3RUYWJsZS5zaXplKCkpOworICAgICAgICAgICAgbV9jb25z
dFRhYmxlLmFkZChrZXksIG1fY29uc3RUYWJsZS5zaXplKCkpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBtX2RhdGFTZWN0aW9uID0gc3RhdGljX2Nhc3Q8aW50NjRfdCo+KG1fcHJvYy5h
ZGREYXRhU2VjdGlvbihtX2NvbnN0VGFibGUuc2l6ZSgpICogc2l6ZW9mKGludDY0X3QpKSk7CkBA
IC0yODIsMTAgKzI4MiwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBWYWx1ZSom
IGNoaWxkID0gdmFsdWUtPmNoaWxkKGNoaWxkSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBW
YWx1ZUtleSBrZXkgPSBjaGlsZC0+a2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZ29l
c0luVGFibGUoa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFnb2VzSW5UYWJsZShjaGls
ZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAgICAgICAg
ICAgICBWYWx1ZUtleSBrZXkgPSBjaGlsZC0+a2V5KCk7CiAgICAgICAgICAgICAgICAgICAgIGNo
aWxkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUoCiAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZUluZGV4LCBrZXkubWF0ZXJpYWxpemUobV9wcm9jLCB2YWx1ZS0+b3JpZ2luKCkpKTsK
ICAgICAgICAgICAgICAgICAgICAgb2ZmTGltaXRzLmFkZChjaGlsZCk7CkBAIC0yOTgsMTIgKzI5
OCwxMiBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9j
KSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4
IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1ZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgVmFsdWUq
IHZhbHVlID0gYmxvY2stPmF0KHZhbHVlSW5kZXgpOwotICAgICAgICAgICAgICAgIFZhbHVlS2V5
IGtleSA9IHZhbHVlLT5rZXkoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWdvZXNJblRhYmxlKGtl
eSkpCisgICAgICAgICAgICAgICAgaWYgKCFnb2VzSW5UYWJsZSh2YWx1ZSkpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlmIChvZmZMaW1pdHMuY29udGFp
bnModmFsdWUpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAgICAg
ICAgIFZhbHVlS2V5IGtleSA9IHZhbHVlLT5rZXkoKTsKICAgICAgICAgICAgICAgICBhdXRvIG9m
ZnNldCA9IHNpemVvZihpbnQ2NF90KSAqIG1fY29uc3RUYWJsZS5nZXQoa2V5KTsKICAgICAgICAg
ICAgICAgICBpZiAoIWlzUmVwcmVzZW50YWJsZUFzPFZhbHVlOjpPZmZzZXRUeXBlPihvZmZzZXQp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTMyMSwyMCArMzIxLDIxIEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBib29sIGdvZXNJblRhYmxlKGNvbnN0IFZh
bHVlS2V5JiBrZXkpCisgICAgYm9vbCBnb2VzSW5UYWJsZShjb25zdCBWYWx1ZSogdmFsdWUpCiAg
ICAgewotICAgICAgICByZXR1cm4gKGtleS5vcGNvZGUoKSA9PSBDb25zdERvdWJsZSAmJiBrZXkg
IT0gZG91YmxlWmVybygpKQotICAgICAgICAgICAgfHwgKGtleS5vcGNvZGUoKSA9PSBDb25zdEZs
b2F0ICYmIGtleSAhPSBmbG9hdFplcm8oKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFZhbHVlS2V5
IGRvdWJsZVplcm8oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFZhbHVlS2V5KENvbnN0RG91Ymxl
LCBEb3VibGUsIDAuMCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFZhbHVlS2V5IGZsb2F0WmVybygp
Ci0gICAgewotICAgICAgICByZXR1cm4gVmFsdWVLZXkoQ29uc3RGbG9hdCwgRmxvYXQsIDAuMCk7
CisgICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgIGNhc2UgQ29uc3RE
b3VibGU6IHsKKyAgICAgICAgICAgIGRvdWJsZSBkb3VibGVaZXJvID0gMC4wOworICAgICAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUtPmFzRG91YmxlKCkpICE9IGJp
dHdpc2VfY2FzdDx1aW50NjRfdD4oZG91YmxlWmVybyk7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBDb25zdEZsb2F0OiB7CisgICAgICAgICAgICBmbG9hdCBmbG9hdFplcm8gPSAwLjA7CisgICAg
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS0+YXNGbG9hdCgpKSAh
PSBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGZsb2F0WmVybyk7CisgICAgICAgIH0KKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsK
</data>

          </attachment>
      

    </bug>

</bugzilla>