<?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>170270</bug_id>
          
          <creation_ts>2017-03-29 23:21:47 -0700</creation_ts>
          <short_desc>[GCrypt] Implement PBKDF2 support</short_desc>
          <delta_ts>2017-04-03 11:11:05 -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>New Bugs</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>170269</dependson>
          <blocked>133122</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>buildbot</cc>
    
    <cc>jfernandez</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1292709</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-03-29 23:21:47 -0700</bug_when>
    <thetext>[GCrypt] Implement PBKDF2 support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292710</commentid>
    <comment_count>1</comment_count>
      <attachid>305837</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-03-29 23:29:12 -0700</bug_when>
    <thetext>Created attachment 305837
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292737</commentid>
    <comment_count>2</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-03-30 00:43:25 -0700</bug_when>
    <thetext>Depends on the Utilities.h header that&apos;s being added in bug #170269.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293103</commentid>
    <comment_count>3</comment_count>
      <attachid>305947</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-03-30 23:31:43 -0700</bug_when>
    <thetext>Created attachment 305947
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293222</commentid>
    <comment_count>4</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-03-31 11:50:43 -0700</bug_when>
    <thetext>*** Bug 169528 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293242</commentid>
    <comment_count>5</comment_count>
      <attachid>305947</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2017-03-31 12:12:12 -0700</bug_when>
    <thetext>Comment on attachment 305947
Patch

Thanks for adding WebCrypto API support for GTK+.
Looks good:)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293491</commentid>
    <comment_count>6</comment_count>
      <attachid>305947</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-04-01 17:09:38 -0700</bug_when>
    <thetext>Comment on attachment 305947
Patch

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

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:37
&gt; +#include &lt;pal/crypto/gcrypt/Utilities.h&gt;

Can you not #include &lt;pal/Utilities.h&gt;? Do we not have any forwarding headers for PAL yet?

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:76
&gt; +    context.ref();

It&apos;d be cleaner to use Ref&lt;ScriptExecutionContext&gt; for this, so you don&apos;t have to remember to deref it in two difference places below, but now I see that ScriptExecutionContext does not inherit from RefCounted even though it has ref and deref methods. Huh. So not great, but I guess this is best....

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:85
&gt; +                    [callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext&amp; context) {

What, why are you capturing callback here, when you don&apos;t use it? There&apos;s no particular need to move the value. Just ignore it.

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:93
&gt; +                [output = WTFMove(*output), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext&amp; context) {

And here there is no need to capture exceptionCallback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293494</commentid>
    <comment_count>7</comment_count>
      <attachid>305947</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-04-01 17:17:30 -0700</bug_when>
    <thetext>Comment on attachment 305947
Patch

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

Actually, I&apos;d like to look at this one again.

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:64
&gt; +    Vector&lt;uint8_t&gt; result(length / 8);

Can you explain why the length of the result is only 1/8th the size of the length of the input? Seems a bit arbitrary?

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:71
&gt; +    return WTFMove(result);

Hm, no this is not right, you can&apos;t use WTFMove when returning a local variable... it&apos;s stack-allocated and has been destroyed, right...? Isn&apos;t this undefined behavior or something otherwise bad? Evens if I&apos;m wrong about that, you&apos;re guaranteed move semantics if you just return result directly anyway, so you should do that instead, no need for WTFMove here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293497</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-04-01 17:24:44 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #7) 
&gt; Can you explain why the length of the result is only 1/8th the size of the
&gt; length of the input? Seems a bit arbitrary?

I guess in a function named &quot;deriveBits&quot; it&apos;s understandable that the length parameter is assumed to refer to bits, then you store it in a vector holding bytes... so OK, that checks out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293499</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-04-01 17:51:35 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #7)
&gt; Hm, no this is not right, you can&apos;t use WTFMove when returning a local
&gt; variable... it&apos;s stack-allocated and has been destroyed, right...? Isn&apos;t
&gt; this undefined behavior or something otherwise bad? Evens if I&apos;m wrong about
&gt; that, you&apos;re guaranteed move semantics if you just return result directly
&gt; anyway, so you should do that instead, no need for WTFMove here.

This stupid complicated Stack Overflow answer says (a) I&apos;m wrong and (b) you still shouldn&apos;t do it:

http://stackoverflow.com/questions/14856344/when-should-stdmove-be-used-on-a-function-return-value

So don&apos;t do it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293503</commentid>
    <comment_count>10</comment_count>
      <attachid>305947</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-04-01 17:58:13 -0700</bug_when>
    <thetext>Comment on attachment 305947
Patch

(Changed my mind again; these are minor comments. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293586</commentid>
    <comment_count>11</comment_count>
      <attachid>305947</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-04-02 23:46:34 -0700</bug_when>
    <thetext>Comment on attachment 305947
Patch

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

&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:37
&gt;&gt; +#include &lt;pal/crypto/gcrypt/Utilities.h&gt;
&gt; 
&gt; Can you not #include &lt;pal/Utilities.h&gt;? Do we not have any forwarding headers for PAL yet?

No, there&apos;s no forwarding headers for PAL.

&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:64
&gt;&gt; +    Vector&lt;uint8_t&gt; result(length / 8);
&gt; 
&gt; Can you explain why the length of the result is only 1/8th the size of the length of the input? Seems a bit arbitrary?

The length is the number of bits to be derived, but the API works with bytes. CryptoAlgorithmPBKDF2::deriveBits() ensures that the length is a multiple of 8. An assert with a comment can be put here though.

&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:71
&gt;&gt; +    return WTFMove(result);
&gt; 
&gt; Hm, no this is not right, you can&apos;t use WTFMove when returning a local variable... it&apos;s stack-allocated and has been destroyed, right...? Isn&apos;t this undefined behavior or something otherwise bad? Evens if I&apos;m wrong about that, you&apos;re guaranteed move semantics if you just return result directly anyway, so you should do that instead, no need for WTFMove here.

This constructs the std::optional&lt;Vector&lt;uint8_t&gt;&gt; by moving the non-nullopt value into the std::optional&lt;&gt; constructor, which will then just move the resources of the stack-allocated Vector into the Vector that&apos;s wrapped in std::optional.

Move semantics would be guaranteed if the return type of this function was Vector&lt;uint8_t&gt;, but since it&apos;s std::optional&lt;&gt;, we have to construct that object upon return.

&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:85
&gt;&gt; +                    [callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext&amp; context) {
&gt; 
&gt; What, why are you capturing callback here, when you don&apos;t use it? There&apos;s no particular need to move the value. Just ignore it.

This follows the Mac implementation. Per comments there, the callbacks should be dereferenced only when finally back on the Document or Worker thread.I&apos;ll add the same comment here, and in the other patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293591</commentid>
    <comment_count>12</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-04-03 00:23:52 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #11)
&gt; Comment on attachment 305947 [details]
&gt; &gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:71
&gt; &gt;&gt; +    return WTFMove(result);
&gt; &gt; 
&gt; &gt; Hm, no this is not right, you can&apos;t use WTFMove when returning a local variable... it&apos;s stack-allocated and has been destroyed, right...? Isn&apos;t this undefined behavior or something otherwise bad? Evens if I&apos;m wrong about that, you&apos;re guaranteed move semantics if you just return result directly anyway, so you should do that instead, no need for WTFMove here.
&gt; 
&gt; This constructs the std::optional&lt;Vector&lt;uint8_t&gt;&gt; by moving the non-nullopt
&gt; value into the std::optional&lt;&gt; constructor, which will then just move the
&gt; resources of the stack-allocated Vector into the Vector that&apos;s wrapped in
&gt; std::optional.
&gt; 
&gt; Move semantics would be guaranteed if the return type of this function was
&gt; Vector&lt;uint8_t&gt;, but since it&apos;s std::optional&lt;&gt;, we have to construct that
&gt; object upon return.
&gt; 

Testing this on a function that returns std::optional&lt;std::unique_ptr&lt;T&gt;&gt;, a simple return appears to work, constructing the std::optional&lt;&gt; object with an rvalue reference of the returned std::unique_ptr&lt;&gt; object without using move semantics.

I&apos;ll check at some point later whether the result Vector&lt;&gt; object is still copied when constructing the std::optional&lt;&gt; value, but even copies are probably not that expensive in these cases as the vectors are small.

So WTFMove() can be dropped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293593</commentid>
    <comment_count>13</comment_count>
      <attachid>306064</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-04-03 00:25:24 -0700</bug_when>
    <thetext>Created attachment 306064
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293644</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-04-03 07:37:58 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #11) 
&gt; This follows the Mac implementation. Per comments there, the callbacks
&gt; should be dereferenced only when finally back on the Document or Worker
&gt; thread.I&apos;ll add the same comment here, and in the other patches.

Wow, that&apos;s a serious footgun. Definitely requires a comment everywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293692</commentid>
    <comment_count>15</comment_count>
      <attachid>306064</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-04-03 11:10:38 -0700</bug_when>
    <thetext>Comment on attachment 306064
Patch for landing

Clearing flags on attachment: 306064

Committed r214821: &lt;http://trac.webkit.org/changeset/214821&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293695</commentid>
    <comment_count>16</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-04-03 11:11:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305837</attachid>
            <date>2017-03-29 23:29:12 -0700</date>
            <delta_ts>2017-03-30 23:31:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170270-20170330082910.patch</filename>
            <type>text/plain</type>
            <size>5050</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NTk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJlYjc1YTI5MDk1N2Y4
OTY1ODEyMjI0YzE2ZmMxNzcxMDE3MDZlNS4uNjJkMGQ5NmMzOTY4NWQ0NDVmNmE4MTRjMjRkYzMx
ZmE2YzU0ODgwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE3LTAzLTI5ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR0NyeXB0XSBJbXBs
ZW1lbnQgUEJLREYyIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3MDI3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEltcGxlbWVudCB0aGUgQ3J5cHRvQWxnb3JpdGhtUEJLREYyOjpwbGF0Zm9y
bURlcml2ZUJpdHMoKSBmdW5jdGlvbmFsaXR5CisgICAgICAgIGZvciBjb25maWd1cmF0aW9ucyB0
aGF0IHVzZSBsaWJnY3J5cHQuIFRoaXMgaXMgZG9uZSBieSBsZXZlcmFnaW5nIHRoZQorICAgICAg
ICBnY3J5X2tkZl9kZXJpdmUoKSBBUEksIHVzaW5nIEdDUllfS0RGX1BCS0RGMiBhcyB0aGUgcHJl
ZmVycmVkIEtERgorICAgICAgICBhbG9uZyB3aXRoIHRoZSBwcm9wZXJseSBkZWR1Y3RlZCBTSEEg
YWxnb3JpdGhtLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBjdXJyZW50IG9uZXMgY292ZXIg
dGhpcyBzdWZmaWNpZW50bHksIGJ1dCBhcmUgbm90IHlldAorICAgICAgICBlbmFibGVkIGR1ZSB0
byBvdGhlciBtaXNzaW5nIHBsYXRmb3JtLXNwZWNpZmljIFNVQlRMRV9DUllQVE8KKyAgICAgICAg
aW1wbGVtZW50YXRpb25zLgorCisgICAgICAgICogY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0
aG1QQktERjJHQ3J5cHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2NyeXB0RGVyaXZlQml0cyk6
CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1QQktERjI6OnBsYXRmb3JtRGVyaXZl
Qml0cyk6CisKIDIwMTctMDMtMjkgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxl
LmNvbT4KIAogICAgICAgICBNaWdyYXRlIHRvIGtDVEZvbnRDU1NXaWR0aEF0dHJpYnV0ZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1QQktE
RjJHQ3J5cHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0
aG1QQktERjJHQ3J5cHQuY3BwCmluZGV4IGIzY2YxNzNiN2UyNDBlOGExY2VkYzUzMDVhMWM0NjU3
ODEzZmY1NTkuLjA2NTc0YjY2YjFhNTU2YTkzYjY0OTkyYjNiMDNlNWY1NGZlYmNiZTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUEJLREYy
R0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29y
aXRobVBCS0RGMkdDcnlwdC5jcHAKQEAgLTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxp
YSBTLkwuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEzICszMCw3MSBA
QAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVBia2RmMlBhcmFtcy5oIgorI2luY2x1ZGUg
IkNyeXB0b0tleVJhdy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvVXRp
bGl0aWVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBDcnlwdG9BbGdvcml0aG1Q
QktERjI6OnBsYXRmb3JtRGVyaXZlQml0cyhzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgc2l6ZV90LCBWZWN0b3JDYWxsYmFjayYm
LCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVl
JikKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RGVyaXZlQml0
cyhjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleURhdGEsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
c2FsdERhdGEsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaElkZW50aWZpZXIsIHNpemVf
dCBpdGVyYXRpb25zLCBzaXplX3QgbGVuZ3RoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgaW50IGhhc2hBbGdvcml0aG07CisgICAgc3dpdGNoIChoYXNoSWRlbnRpZmllcikgeworICAg
IGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzE6CisgICAgICAgIGhhc2hBbGdv
cml0aG0gPSBHQ1JZX01EX1NIQTE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6U0hBXzIyNDoKKyAgICAgICAgaGFzaEFsZ29yaXRobSA9IEdDUllf
TURfU0hBMjI0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OlNIQV8yNTY6CisgICAgICAgIGhhc2hBbGdvcml0aG0gPSBHQ1JZX01EX1NIQTI1NjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFf
Mzg0OgorICAgICAgICBoYXNoQWxnb3JpdGhtID0gR0NSWV9NRF9TSEEzODQ7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzUxMjoKKyAgICAg
ICAgaGFzaEFsZ29yaXRobSA9IEdDUllfTURfU0hBNTEyOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIFZlY3Rv
cjx1aW50OF90PiByZXN1bHQobGVuZ3RoIC8gOCk7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0g
Z2NyeV9rZGZfZGVyaXZlKGtleURhdGEuZGF0YSgpLCBrZXlEYXRhLnNpemUoKSwgR0NSWV9LREZf
UEJLREYyLCBoYXNoQWxnb3JpdGhtLCBzYWx0RGF0YS5kYXRhKCksIHNhbHREYXRhLnNpemUoKSwg
aXRlcmF0aW9ucywgcmVzdWx0LnNpemUoKSwgcmVzdWx0LmRhdGEoKSk7CisgICAgaWYgKGVycm9y
ICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVy
cm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICByZXR1cm4g
V1RGTW92ZShyZXN1bHQpOworfQorCit2b2lkIENyeXB0b0FsZ29yaXRobVBCS0RGMjo6cGxhdGZv
cm1EZXJpdmVCaXRzKHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYm
IHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBzaXplX3QgbGVuZ3RoLCBWZWN0b3JD
YWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNr
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkK
K3sKKyAgICBjb250ZXh0LnJlZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAg
W3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIGxl
bmd0aCwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBX
VEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAg
ICAgICBhdXRvJiBwYmtkZjJQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtUGJr
ZGYyUGFyYW1zPigqcGFyYW1ldGVycyk7CisgICAgICAgICAgICBhdXRvJiByYXdLZXkgPSBkb3du
Y2FzdDxDcnlwdG9LZXlSYXc+KGtleS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gb3V0cHV0
ID0gZ2NyeXB0RGVyaXZlQml0cyhyYXdLZXkua2V5KCksIHBia2RmMlBhcmFtZXRlcnMuc2FsdFZl
Y3RvcigpLCBwYmtkZjJQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBwYmtkZjJQYXJhbWV0ZXJz
Lml0ZXJhdGlvbnMsIGxlbmd0aCk7CisgICAgICAgICAgICBpZiAoIW91dHB1dCkgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0
aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICBbb3V0cHV0ID0gV1RGTW92ZSgq
b3V0cHV0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sg
PSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCkgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhvdXRwdXQpOworICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305947</attachid>
            <date>2017-03-30 23:31:43 -0700</date>
            <delta_ts>2017-04-03 00:25:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170270-20170331083142.patch</filename>
            <type>text/plain</type>
            <size>5094</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NjU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDcxMTcwZjA1MGE1YTA5
Y2QzOTUzMGU2NGZmZWNiMTFjNDdkYWNkYi4uOWMzMTZkNGFmMjU1NWRlZDc5NDQ1MGFiZTExMTZj
NjQxNmE3YjkzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI1IEBACiAyMDE3LTAzLTMwICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAorICAgICAgICBbR0NyeXB0XSBJbXBs
ZW1lbnQgUEJLREYyIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3MDI3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEltcGxlbWVudCB0aGUgQ3J5cHRvQWxnb3JpdGhtUEJLREYyOjpwbGF0Zm9y
bURlcml2ZUJpdHMoKSBmdW5jdGlvbmFsaXR5CisgICAgICAgIGZvciBjb25maWd1cmF0aW9ucyB0
aGF0IHVzZSBsaWJnY3J5cHQuIFRoaXMgaXMgZG9uZSBieSBsZXZlcmFnaW5nIHRoZQorICAgICAg
ICBnY3J5X2tkZl9kZXJpdmUoKSBBUEksIHVzaW5nIEdDUllfS0RGX1BCS0RGMiBhcyB0aGUgcHJl
ZmVycmVkIEtERgorICAgICAgICBhbG9uZyB3aXRoIHRoZSBwcm9wZXJseSBkZWR1Y3RlZCBTSEEg
YWxnb3JpdGhtLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBjdXJyZW50IG9uZXMgY292ZXIg
dGhpcyBzdWZmaWNpZW50bHksIGJ1dCBhcmUgbm90IHlldAorICAgICAgICBlbmFibGVkIGR1ZSB0
byBvdGhlciBtaXNzaW5nIHBsYXRmb3JtLXNwZWNpZmljIFNVQlRMRV9DUllQVE8KKyAgICAgICAg
aW1wbGVtZW50YXRpb25zLgorCisgICAgICAgICogY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0
aG1QQktERjJHQ3J5cHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2NyeXB0RGVyaXZlQml0cyk6
CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1QQktERjI6OnBsYXRmb3JtRGVyaXZl
Qml0cyk6CisKKzIwMTctMDMtMzAgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29t
PgorCiAgICAgICAgIFVucmV2aWV3ZWQgR1RLKyBidWlsZCBmaXguIEFkZCBtaXNzaW5nIEFOR0xF
IGJ1aWxkIHRhcmdldHMKICAgICAgICAgdG8gdGhlIGJ1aWxkLgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobVBCS0RGMkdDcnlwdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobVBCS0RGMkdDcnlw
dC5jcHAKaW5kZXggYjNjZjE3M2I3ZTI0MGU4YTFjZWRjNTMwNWExYzQ2NTc4MTNmZjU1OS4uMDY1
NzRiNjZiMWE1NTZhOTNiNjQ5OTJiM2IwM2U1ZjU0ZmViY2JlMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1QQktERjJHQ3J5cHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUEJLREYyR0Ny
eXB0LmNwcApAQCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTMgKzMwLDcxIEBACiAKICNpZiBFTkFC
TEUoU1VCVExFX0NSWVBUTykKIAotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiQ3J5cHRvQWxnb3JpdGhtUGJrZGYyUGFyYW1zLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5UmF3
LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKKyNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9VdGlsaXRpZXMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIENyeXB0b0FsZ29yaXRobVBCS0RGMjo6cGxhdGZv
cm1EZXJpdmVCaXRzKHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYm
LCBSZWY8Q3J5cHRvS2V5PiYmLCBzaXplX3QsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNh
bGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKQorc3RhdGljIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHREZXJpdmVCaXRzKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5RGF0YSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzYWx0RGF0YSwgQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoSWRlbnRpZmllciwgc2l6ZV90IGl0ZXJhdGlvbnMs
IHNpemVfdCBsZW5ndGgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpbnQgaGFzaEFs
Z29yaXRobTsKKyAgICBzd2l0Y2ggKGhhc2hJZGVudGlmaWVyKSB7CisgICAgY2FzZSBDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMToKKyAgICAgICAgaGFzaEFsZ29yaXRobSA9IEdDUllf
TURfU0hBMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpTSEFfMjI0OgorICAgICAgICBoYXNoQWxnb3JpdGhtID0gR0NSWV9NRF9TSEEyMjQ7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzI1
NjoKKyAgICAgICAgaGFzaEFsZ29yaXRobSA9IEdDUllfTURfU0hBMjU2OworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8zODQ6CisgICAgICAg
IGhhc2hBbGdvcml0aG0gPSBHQ1JZX01EX1NIQTM4NDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfNTEyOgorICAgICAgICBoYXNoQWxnb3Jp
dGhtID0gR0NSWV9NRF9TSEE1MTI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJl
c3VsdChsZW5ndGggLyA4KTsKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2tkZl9kZXJp
dmUoa2V5RGF0YS5kYXRhKCksIGtleURhdGEuc2l6ZSgpLCBHQ1JZX0tERl9QQktERjIsIGhhc2hB
bGdvcml0aG0sIHNhbHREYXRhLmRhdGEoKSwgc2FsdERhdGEuc2l6ZSgpLCBpdGVyYXRpb25zLCBy
ZXN1bHQuc2l6ZSgpLCByZXN1bHQuZGF0YSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9O
T19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKHJlc3Vs
dCk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtUEJLREYyOjpwbGF0Zm9ybURlcml2ZUJpdHMo
c3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywg
UmVmPENyeXB0b0tleT4mJiBrZXksIHNpemVfdCBsZW5ndGgsIFZlY3RvckNhbGxiYWNrJiYgY2Fs
bGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQoreworICAgIGNvbnRl
eHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAgICAgICBbcGFyYW1ldGVycyA9
IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgbGVuZ3RoLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0
aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIHBi
a2RmMlBhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1QYmtkZjJQYXJhbXM+KCpw
YXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIGF1dG8mIHJhd0tleSA9IGRvd25jYXN0PENyeXB0b0tl
eVJhdz4oa2V5LmdldCgpKTsKKworICAgICAgICAgICAgYXV0byBvdXRwdXQgPSBnY3J5cHREZXJp
dmVCaXRzKHJhd0tleS5rZXkoKSwgcGJrZGYyUGFyYW1ldGVycy5zYWx0VmVjdG9yKCksIHBia2Rm
MlBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIHBia2RmMlBhcmFtZXRlcnMuaXRlcmF0aW9ucywg
bGVuZ3RoKTsKKyAgICAgICAgICAgIGlmICghb3V0cHV0KSB7CisgICAgICAgICAgICAgICAgY29u
dGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayld
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LnBv
c3RUYXNrKAorICAgICAgICAgICAgICAgIFtvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhj
ZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKG91dHB1dCk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306064</attachid>
            <date>2017-04-03 00:25:24 -0700</date>
            <delta_ts>2017-04-03 00:25:24 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170270-20170403092523.patch</filename>
            <type>text/plain</type>
            <size>5354</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTlmYjk4NWYxNTNhM2M1
OWFkNmI3ZGRkMWM3MTRmNzBjMzJhYzVlZC4uZDYyZTFhNTQyMzdmM2Y0MGZiOTVhNGYyNzNhYzJh
MzM1ODQ1MGMzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE3LTA0LTAzICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR0NyeXB0XSBJbXBs
ZW1lbnQgUEJLREYyIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3MDI3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE1pY2hhZWwgQ2F0YW56
YXJvLgorCisgICAgICAgIEltcGxlbWVudCB0aGUgQ3J5cHRvQWxnb3JpdGhtUEJLREYyOjpwbGF0
Zm9ybURlcml2ZUJpdHMoKSBmdW5jdGlvbmFsaXR5CisgICAgICAgIGZvciBjb25maWd1cmF0aW9u
cyB0aGF0IHVzZSBsaWJnY3J5cHQuIFRoaXMgaXMgZG9uZSBieSBsZXZlcmFnaW5nIHRoZQorICAg
ICAgICBnY3J5X2tkZl9kZXJpdmUoKSBBUEksIHVzaW5nIEdDUllfS0RGX1BCS0RGMiBhcyB0aGUg
cHJlZmVycmVkIEtERgorICAgICAgICBhbG9uZyB3aXRoIHRoZSBwcm9wZXJseSBkZWR1Y3RlZCBT
SEEgYWxnb3JpdGhtLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBjdXJyZW50IG9uZXMgY292
ZXIgdGhpcyBzdWZmaWNpZW50bHksIGJ1dCBhcmUgbm90IHlldAorICAgICAgICBlbmFibGVkIGR1
ZSB0byBvdGhlciBtaXNzaW5nIHBsYXRmb3JtLXNwZWNpZmljIFNVQlRMRV9DUllQVE8KKyAgICAg
ICAgaW1wbGVtZW50YXRpb25zLgorCisgICAgICAgICogY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdv
cml0aG1QQktERjJHQ3J5cHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2NyeXB0RGVyaXZlQml0
cyk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1QQktERjI6OnBsYXRmb3JtRGVy
aXZlQml0cyk6CisKIDIwMTctMDQtMDIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5j
b20+CiAKICAgICAgICAgQnVpbGQgZml4IGZvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1QQktERjJHQ3J5cHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1QQktERjJHQ3J5cHQuY3BwCmluZGV4
IGIzY2YxNzNiN2UyNDBlOGExY2VkYzUzMDVhMWM0NjU3ODEzZmY1NTkuLjUzNjIwMDM2OGI5ZGI0
MWI4MjczM2VkYjg2MWY0OTJkNjU0MjU4OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUEJLREYyR0NyeXB0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobVBCS0RGMkdDcnlwdC5jcHAKQEAg
LTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEzICszMCw3NiBAQAogCiAjaWYgRU5BQkxFKFNVQlRMRV9D
UllQVE8pCiAKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIkNyeXB0b0Fs
Z29yaXRobVBia2RmMlBhcmFtcy5oIgorI2luY2x1ZGUgIkNyeXB0b0tleVJhdy5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CisjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvVXRpbGl0aWVzLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBDcnlwdG9BbGdvcml0aG1QQktERjI6OnBsYXRmb3JtRGVyaXZlQml0
cyhzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0
b0tleT4mJiwgc2l6ZV90LCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJikKK3N0YXRpYyBzdGQ6Om9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RGVyaXZlQml0cyhjb25zdCBWZWN0b3I8dWludDhfdD4m
IGtleURhdGEsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc2FsdERhdGEsIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXIgaGFzaElkZW50aWZpZXIsIHNpemVfdCBpdGVyYXRpb25zLCBzaXplX3QgbGVu
Z3RoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaW50IGhhc2hBbGdvcml0aG07Cisg
ICAgc3dpdGNoIChoYXNoSWRlbnRpZmllcikgeworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllcjo6U0hBXzE6CisgICAgICAgIGhhc2hBbGdvcml0aG0gPSBHQ1JZX01EX1NIQTE7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzIy
NDoKKyAgICAgICAgaGFzaEFsZ29yaXRobSA9IEdDUllfTURfU0hBMjI0OworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yNTY6CisgICAgICAg
IGhhc2hBbGdvcml0aG0gPSBHQ1JZX01EX1NIQTI1NjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMzg0OgorICAgICAgICBoYXNoQWxnb3Jp
dGhtID0gR0NSWV9NRF9TSEEzODQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6U0hBXzUxMjoKKyAgICAgICAgaGFzaEFsZ29yaXRobSA9IEdDUllf
TURfU0hBNTEyOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIH0KKworICAgIC8vIExlbmd0aCwgaW4gYml0cywgaXMgYSBtdWx0
aXBsZSBvZiA4LCBhcyBndWFyYW50ZWVkIGJ5IENyeXB0b0FsZ29yaXRobVBCS0RGMjo6ZGVyaXZl
Qml0cygpLgorICAgIEFTU0VSVCghKGxlbmd0aCAlIDgpKTsKKworICAgIFZlY3Rvcjx1aW50OF90
PiByZXN1bHQobGVuZ3RoIC8gOCk7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9rZGZf
ZGVyaXZlKGtleURhdGEuZGF0YSgpLCBrZXlEYXRhLnNpemUoKSwgR0NSWV9LREZfUEJLREYyLCBo
YXNoQWxnb3JpdGhtLCBzYWx0RGF0YS5kYXRhKCksIHNhbHREYXRhLnNpemUoKSwgaXRlcmF0aW9u
cywgcmVzdWx0LnNpemUoKSwgcmVzdWx0LmRhdGEoKSk7CisgICAgaWYgKGVycm9yICE9IEdQR19F
UlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIENyeXB0b0FsZ29yaXRobVBCS0RGMjo6cGxhdGZvcm1EZXJpdmVCaXRzKHN0ZDo6
dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxD
cnlwdG9LZXk+JiYga2V5LCBzaXplX3QgbGVuZ3RoLCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNr
LCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK3sKKyAgICBjb250ZXh0LnJl
ZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIGxlbmd0aCwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNh
bGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvJiBwYmtkZjJQ
YXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtUGJrZGYyUGFyYW1zPigqcGFyYW1l
dGVycyk7CisgICAgICAgICAgICBhdXRvJiByYXdLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlSYXc+
KGtleS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RGVyaXZlQml0
cyhyYXdLZXkua2V5KCksIHBia2RmMlBhcmFtZXRlcnMuc2FsdFZlY3RvcigpLCBwYmtkZjJQYXJh
bWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBwYmtkZjJQYXJhbWV0ZXJzLml0ZXJhdGlvbnMsIGxlbmd0
aCk7CisgICAgICAgICAgICBpZiAoIW91dHB1dCkgeworICAgICAgICAgICAgICAgIC8vIFdlIHNo
b3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBE
b2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNr
KAorICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhj
ZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9u
Q2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5kZXJlZigpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVm
ZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIg
dGhyZWFkcy4KKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAg
W291dHB1dCA9IFdURk1vdmUoKm91dHB1dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayks
IGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2so
b3V0cHV0KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>