<?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>208186</bug_id>
          
          <creation_ts>2020-02-25 01:28:24 -0800</creation_ts>
          <short_desc>[OpenSSL] Implement WebCrypto APIs for AES-CTR and AES-KW</short_desc>
          <delta_ts>2020-04-15 01:36:24 -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>Platform</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=210540</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>
          
          <blocked>206439</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Tomoki Imai">tomoki.imai</reporter>
          <assigned_to name="Tomoki Imai">tomoki.imai</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>tomoki.imai</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>yoshiaki.jitsukawa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1622538</commentid>
    <comment_count>0</comment_count>
    <who name="Tomoki Imai">tomoki.imai</who>
    <bug_when>2020-02-25 01:28:24 -0800</bug_when>
    <thetext>To follow up bug 207176, add WebCrypto APIs for remaining AES families AES-CTR and AES-KW using OpenSSL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622540</commentid>
    <comment_count>1</comment_count>
      <attachid>391636</attachid>
    <who name="Tomoki Imai">tomoki.imai</who>
    <bug_when>2020-02-25 01:31:57 -0800</bug_when>
    <thetext>Created attachment 391636
patch

Patch to implement WebCrypto API for AES-KW and AES-CTR using OpenSSL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622553</commentid>
    <comment_count>2</comment_count>
      <attachid>391641</attachid>
    <who name="Tomoki Imai">tomoki.imai</who>
    <bug_when>2020-02-25 02:08:53 -0800</bug_when>
    <thetext>Created attachment 391641
patch

I noticed the previous patch attachment 391636 outputs the warning.
Source\WebCore\crypto\openssl\CryptoAlgorithmAES_CTROpenSSL.cpp(73,76): warning C4334: &apos;&lt;&lt;&apos;: result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?)

For 64bit machine, counterLength is 63 in the worst case, so I think 1 &lt;&lt; (size_t)63 causes overflow. 
I fixed this warning by casting 1 to size_t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624462</commentid>
    <comment_count>3</comment_count>
      <attachid>391641</attachid>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2020-03-01 22:22:30 -0800</bug_when>
    <thetext>Comment on attachment 391641
patch

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

&gt; Source/WebCore/crypto/openssl/CryptoAlgorithmAES_CTROpenSSL.cpp:66
&gt; +    // Disable padding

Do we need to explicitly disable padding in CTR mode?

&gt; Source/WebCore/crypto/openssl/CryptoAlgorithmAES_CTROpenSSL.cpp:70
&gt; +    size_t blocks = inputText.size() / blockSize + 1;

Is there any particular reason why you don&apos;t use roundUpToMultipleOf() like other AES variants?
e.g. const size_t blocks= roundUpToMultipleOf(blockSize, plainSize) / blockSize

&gt; Source/WebCore/crypto/openssl/CryptoAlgorithmAES_CTROpenSSL.cpp:73
&gt; +    if (counterLength &lt; sizeof(size_t) * 8 &amp;&amp; blocks &gt; ((size_t) 1 &lt;&lt; counterLength))

Could you remove the space between &quot;(size_t)&quot; and &quot;1&quot;?

&gt; Source/WebCore/crypto/openssl/CryptoAlgorithmAES_CTROpenSSL.cpp:86
&gt; +    Vector&lt;uint8_t&gt; outputText(headSize);

outputText should be reserved and used both in first and second parts to avoid reallocation.

&gt; Source/WebCore/crypto/openssl/CryptoAlgorithmAES_CTROpenSSL.cpp:102
&gt; +    {

Could you early skip the second part by doing condition check like:
 if (capacity &lt; block)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624464</commentid>
    <comment_count>4</comment_count>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2020-03-01 23:52:15 -0800</bug_when>
    <thetext>AES-KW part LGTM :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627675</commentid>
    <comment_count>5</comment_count>
      <attachid>393013</attachid>
    <who name="Tomoki Imai">tomoki.imai</who>
    <bug_when>2020-03-08 23:56:12 -0700</bug_when>
    <thetext>Created attachment 393013
patch to add AES-KW/AES-CTR

Modify reviewed point</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627676</commentid>
    <comment_count>6</comment_count>
    <who name="Tomoki Imai">tomoki.imai</who>
    <bug_when>2020-03-09 00:06:24 -0700</bug_when>
    <thetext>(In reply to Yoshiaki Jitsukawa from comment #3)
&gt; Comment on attachment 391641 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=391641&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/crypto/openssl/CryptoAlgorithmAES_CTROpenSSL.cpp:66
&gt; &gt; +    // Disable padding
&gt; 
&gt; Do we need to explicitly disable padding in CTR mode?

It looks like OpenSSL doesn&apos;t need explicit disabling padding for CTR mode, but we want to keep it, because the OpenSSL document says &quot;By default encryption operations are padded using standard block padding and the padding is checked and removed when decrypting.&quot;.
https://www.openssl.org/docs/man1.1.1/man3/EVP_CIPHER_CTX_set_padding.html

We also noticed that it also says &quot;This function should be called after the context is set up for encryption or decryption with EVP_EncryptInit_ex(), EVP_DecryptInit_ex() or EVP_CipherInit_ex()&quot;. Our landed patch in bug 207176 calls EVP_CIPHER_CTX_set_padding before EVP_EncryptInit_ex. We&apos;d like to add one more follow-up patch for this.

&gt; 
&gt; &gt; Source/WebCore/crypto/openssl/CryptoAlgorithmAES_CTROpenSSL.cpp:70
&gt; &gt; +    size_t blocks = inputText.size() / blockSize + 1;
&gt; 
&gt; Is there any particular reason why you don&apos;t use roundUpToMultipleOf() like
&gt; other AES variants?
&gt; e.g. const size_t blocks= roundUpToMultipleOf(blockSize, plainSize) /
&gt; blockSize

No, so we now use roundUpToMultipleOf.
 
&gt; &gt; Source/WebCore/crypto/openssl/CryptoAlgorithmAES_CTROpenSSL.cpp:73
&gt; &gt; +    if (counterLength &lt; sizeof(size_t) * 8 &amp;&amp; blocks &gt; ((size_t) 1 &lt;&lt; counterLength))
&gt; 
&gt; Could you remove the space between &quot;(size_t)&quot; and &quot;1&quot;?

Sure, removed.

&gt; 
&gt; &gt; Source/WebCore/crypto/openssl/CryptoAlgorithmAES_CTROpenSSL.cpp:86
&gt; &gt; +    Vector&lt;uint8_t&gt; outputText(headSize);
&gt; 
&gt; outputText should be reserved and used both in first and second parts to
&gt; avoid reallocation.

Good idea! We applied this in attachment 393013.

&gt; 
&gt; &gt; Source/WebCore/crypto/openssl/CryptoAlgorithmAES_CTROpenSSL.cpp:102
&gt; &gt; +    {
&gt; 
&gt; Could you early skip the second part by doing condition check like:
&gt;  if (capacity &lt; block)

Yes, we added &quot;if (capacity &lt; block)&quot; guard for the second part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627684</commentid>
    <comment_count>7</comment_count>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2020-03-09 00:49:03 -0700</bug_when>
    <thetext>attachment 391641 LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627688</commentid>
    <comment_count>8</comment_count>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2020-03-09 01:13:26 -0700</bug_when>
    <thetext>(In reply to Yoshiaki Jitsukawa from comment #7)
&gt; attachment 391641 [details] LGTM

sorry, it’s attachment 393013</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628546</commentid>
    <comment_count>9</comment_count>
      <attachid>393013</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-03-10 23:22:26 -0700</bug_when>
    <thetext>Comment on attachment 393013
patch to add AES-KW/AES-CTR

Clearing flags on attachment: 393013

Committed r258254: &lt;https://trac.webkit.org/changeset/258254&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628547</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-03-10 23:22:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628548</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-10 23:23:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/60309903&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628550</commentid>
    <comment_count>12</comment_count>
    <who name="Tomoki Imai">tomoki.imai</who>
    <bug_when>2020-03-10 23:26:07 -0700</bug_when>
    <thetext>Thanks for your review, r+, and cq+!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391636</attachid>
            <date>2020-02-25 01:31:57 -0800</date>
            <delta_ts>2020-02-25 02:08:53 -0800</delta_ts>
            <desc>patch</desc>
            <filename>add-more-aes.patch</filename>
            <type>text/plain</type>
            <size>15088</size>
            <attacher name="Tomoki Imai">tomoki.imai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5Yjg2OWYyNGM2YS4uMTY2Mzk1N2FjMDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAyMC0wMi0yNSAgVG9tb2tpIEltYWkgIDxUb21va2kuSW1haUBzb255LmNvbT4KKworICAgICAg
ICBbT3BlblNTTF0gSW1wbGVtZW50IFdlYkNyeXB0byBBUElzIGZvciBBRVMtQ1RSIGFuZCBBRVMt
S1cKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODE4
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJs
ZWQgV2ViQ3J5cHRvIExheW91dFRlc3RzIGZvciBBRVMtQ1RSIGFuZCBBRVMtS1cgYWxvbmcgd2l0
aCB0aGUgaW1wbGVtZW50YXRpb25zLgorCisgICAgICAgICogcGxhdGZvcm0vd2luY2Fpcm8vVGVz
dEV4cGVjdGF0aW9uczoKKwogMjAyMC0wMi0xNyAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29t
PgogCiAgICAgICAgIE1haW4gaW1wbGVtZW50YXRpb24gZm9yIGxhenkgaW1hZ2UgbG9hZGluZwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9u
cyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXgg
Njg2YjdjOWQxNzUuLjVjZTUyMGQ4Y2U2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dp
bmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTgzMCw0MCArODMwLDYgQEAgd2Via2l0Lm9yZy9i
LzIwNjI4MiBmYXN0L3RleHQvc3RhbGUtVGV4dExheW91dC1mcm9tLWZpcnN0LWxpbmUuaHRtbCBb
IEltYWdlT25seUYKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICMgY3J5cHRv
CiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jIEFFUy1DVFIgaXMgbm90IHN1
cHBvcnRlZC4KLWNyeXB0by9zdWJ0bGUvYWVzLWN0ci1lbmNyeXB0LW1hbGZvcm1lZC1wYXJhbWV0
ZXJzLmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWN0ci1nZW5lcmF0ZS1leHBvcnQt
a2V5LWp3ay1sZW5ndGgtMTI4Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWN0ci1n
ZW5lcmF0ZS1leHBvcnQta2V5LWp3ay1sZW5ndGgtMTkyLmh0bWwgWyBTa2lwIF0KLWNyeXB0by9z
dWJ0bGUvYWVzLWN0ci1nZW5lcmF0ZS1leHBvcnQta2V5LWp3ay1sZW5ndGgtMjU2Lmh0bWwgWyBT
a2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWN0ci1nZW5lcmF0ZS1leHBvcnQtcmF3LWtleS5odG1s
IFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1jdHItZ2VuZXJhdGUta2V5LWVuY3J5cHQtZGVj
cnlwdC5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1jdHItZ2VuZXJhdGUta2V5Lmh0
bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWN0ci1pbXBvcnQtandrLWtleS1sZW5ndGgt
MTI4Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWN0ci1pbXBvcnQtandrLWtleS1s
ZW5ndGgtMTkyLmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWN0ci1pbXBvcnQtandr
LWtleS1sZW5ndGgtMjU2Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWN0ci1pbXBv
cnQta2V5LWRlY3J5cHQuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRsZS9hZXMtY3RyLWltcG9y
dC1rZXktZW5jcnlwdC5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1jdHItaW1wb3J0
LWtleS11bndyYXAtandrLWtleS5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1jdHIt
aW1wb3J0LWtleS11bndyYXAtcmF3LWtleS5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Fl
cy1jdHItaW1wb3J0LWtleS13cmFwLWp3ay1rZXkuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRs
ZS9hZXMtY3RyLWltcG9ydC1rZXktd3JhcC1yYXcta2V5Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9z
dWJ0bGUvYWVzLWN0ci1pbXBvcnQtcmF3LWtleS5odG1sIFsgU2tpcCBdCi0KLSMgQUVTLUtXIGlz
IG5vdCBzdXBwb3J0ZWQuCi1jcnlwdG8vc3VidGxlL2Flcy1nZW5lcmF0ZS1rZXktbWFsZm9ybWVk
LXBhcmFtZXRlcnMuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRsZS9hZXMta3ctd3JhcC1rZXkt
bWFsZm9ybWVkLXBhcmFtZXRlcnMuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRsZS9hZXMta3ct
Z2VuZXJhdGUtZXhwb3J0LWtleS1qd2stbGVuZ3RoLTEyOC5odG1sIFsgU2tpcCBdCi1jcnlwdG8v
c3VidGxlL2Flcy1rdy1nZW5lcmF0ZS1leHBvcnQta2V5LWp3ay1sZW5ndGgtMTkyLmh0bWwgWyBT
a2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWt3LWdlbmVyYXRlLWV4cG9ydC1rZXktandrLWxlbmd0
aC0yNTYuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRsZS9hZXMta3ctZ2VuZXJhdGUtZXhwb3J0
LXJhdy1rZXkuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRsZS9hZXMta3ctZ2VuZXJhdGUta2V5
Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWt3LWdlbmVyYXRlLWtleS13cmFwLWtl
eS11bndyYXAta2V5Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWt3LWltcG9ydC1q
d2sta2V5LWxlbmd0aC0xMjguaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRsZS9hZXMta3ctaW1w
b3J0LWp3ay1rZXktbGVuZ3RoLTE5Mi5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1r
dy1pbXBvcnQtandrLWtleS1sZW5ndGgtMjU2Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUv
YWVzLWt3LWltcG9ydC1rZXktdW53cmFwLXJhdy1rZXkuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1
YnRsZS9hZXMta3ctaW1wb3J0LWtleS13cmFwLXJhdy1rZXkuaHRtbCBbIFNraXAgXQotY3J5cHRv
L3N1YnRsZS9hZXMta3ctaW1wb3J0LXJhdy1rZXkuaHRtbCBbIFNraXAgXQogCiAjIENyeXB0cyBv
dGhlciB0aGFuIEFFUyBhcmUgbm90IHN1cHBvcnRlZC4KIGNyeXB0by9zdWJ0bGUvYWVzLWNiYy1p
bXBvcnQta2V5LXVud3JhcC1qd2stcnNhLWtleS1wcml2YXRlLmh0bWwgWyBTa2lwIF0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCBiZTllZmIxMzg1ZC4uMjFmYTMwZmJhODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
MCBAQAorMjAyMC0wMi0yNSAgVG9tb2tpIEltYWkgIDxUb21va2kuSW1haUBzb255LmNvbT4KKwor
ICAgICAgICBbT3BlblNTTF0gSW1wbGVtZW50IFdlYkNyeXB0byBBUElzIGZvciBBRVMtQ1RSIGFu
ZCBBRVMtS1cKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwODE4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIFdlYkNyeXB0byBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcgYWxnb3Jp
dGhtcyB3aXRoIE9wZW5TU0wuCisgICAgICAgIC0gQUVTLUNUUgorICAgICAgICAtIEFFUy1LVwor
CisgICAgICAgIEVuYWJsZWQgV2ViQ3J5cHRvIExheW91dFRlc3RzIGZvciBBRVMtQ1RSIGFuZCBB
RVMtS1cuCisKKyAgICAgICAgKiBjcnlwdG8vb3BlbnNzbC9DcnlwdG9BbGdvcml0aG1BRVNfQ1RS
T3BlblNTTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZXNBbGdvcml0aG0pOiBBZGRlZC4gSGVs
cGVyIGZ1bmN0aW9uIHRvIHNlbGVjdCB3aGljaCBBRVMtQ1RSIGFsZ29yaXRobSB0byBiZSB1c2Vk
IGJ5IGNoZWNraW5nIGtleSBzaXplLgorICAgICAgICAoV2ViQ29yZTo6Y3J5cHQpOiBBZGRlZC4g
SGVscGVyIGZ1bmN0aW9uIHNoYXJlZCBieSBwbGF0Zm9ybUVuY3J5cHQvcGxhdGZvcm1EZWNyeXB0
LgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1FbmNy
eXB0KTogSW1wbGVtZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNf
Q1RSOjpwbGF0Zm9ybURlY3J5cHQpOiBJbXBsZW1lbnRlZC4KKyAgICAgICAgKiBjcnlwdG8vb3Bl
bnNzbC9DcnlwdG9BbGdvcml0aG1BRVNfS1dPcGVuU1NMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmFlc0FsZ29yaXRobSk6IEFkZGVkLiBIZWxwZXIgZnVuY3Rpb24gdG8gc2VsZWN0IHdoaWNoIEFF
Uy1LVyBhbGdvcml0aG0gdG8gYmUgdXNlZCBieSBjaGVja2luZyBrZXkgc2l6ZS4KKyAgICAgICAg
KFdlYkNvcmU6OmNyeXB0V3JhcEtleSk6ICBBZGRlZC4gSGVscGVyIGZ1bmN0aW9uIGZvciBwbGF0
Zm9ybVdyYXBLZXkuCisgICAgICAgIChXZWJDb3JlOjpjcnlwdFVud3JhcEtleSk6IEFkZGVkLiBI
ZWxwZXIgZnVuY3Rpb24gZm9yIHBsYXRmb3JtVW53cmFwS2V5LgorICAgICAgICAoV2ViQ29yZTo6
Q3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVdyYXBLZXkpOiBJbXBsZW1lbnRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1VbndyYXBLZXkp
OiBJbXBsZW1lbnRlZC4KKyAgICAgICAgKiBjcnlwdG8vb3BlbnNzbC9DcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeU9wZW5TU0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUmVn
aXN0cnk6OnBsYXRmb3JtUmVnaXN0ZXJBbGdvcml0aG1zKTogUmVnaXN0ZXJlZCBDcnlwdG9BbGdv
cml0aG1BRVNfQ1RSIGFuZCBDcnlwdG9BbGdvcml0aG1BRVNfS1cuCisKIDIwMjAtMDItMTcgIFJv
YiBCdWlzICA8cmJ1aXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBNYWluIGltcGxlbWVudGF0aW9u
IGZvciBsYXp5IGltYWdlIGxvYWRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9vcGVuc3NsL0NyeXB0b0FsZ29yaXRobUFFU19DVFJPcGVuU1NMLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9vcGVuc3NsL0NyeXB0b0FsZ29yaXRobUFFU19DVFJPcGVuU1NMLmNwcAppbmRl
eCA4ZjE2MTRkYmNiNi4uMmNkYmViMzAzYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9vcGVuc3NsL0NyeXB0b0FsZ29yaXRobUFFU19DVFJPcGVuU1NMLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vb3BlbnNzbC9DcnlwdG9BbGdvcml0aG1BRVNfQ1RST3BlblNTTC5j
cHAKQEAgLTMwLDIwICszMCwxMTMgQEAKIAogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0N0
clBhcmFtcy5oIgogI2luY2x1ZGUgIkNyeXB0b0tleUFFUy5oIgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiT3BlblNTTENyeXB0b1VuaXF1ZVB0ci5oIgorI2luY2x1ZGUg
PG9wZW5zc2wvZXZwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRXhjZXB0aW9uT3I8VmVj
dG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybUVuY3J5cHQoY29u
c3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1zJiwgY29uc3QgQ3J5cHRvS2V5QUVTJiwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JikKK3N0YXRpYyBjb25zdCBFVlBfQ0lQSEVSKiBhZXNBbGdvcml0
aG0oc2l6ZV90IGtleVNpemUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKKyAgICBpZiAoa2V5U2l6ZSAqIDggPT0g
MTI4KQorICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfY3RyKCk7CisKKyAgICBpZiAoa2V5U2l6
ZSAqIDggPT0gMTkyKQorICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJfY3RyKCk7CisKKyAgICBp
ZiAoa2V5U2l6ZSAqIDggPT0gMjU2KQorICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfY3RyKCk7
CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIE9wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gY3J5cHQoaW50IG9wZXJhdGlvbiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgY291bnRlciwgc2l6ZV90IGNvdW50ZXJMZW5ndGgsIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgaW5wdXRUZXh0KQoreworICAgIGNvbnN0ZXhwciBzaXplX3QgYmxv
Y2tTaXplID0gMTY7CisgICAgY29uc3QgRVZQX0NJUEhFUiogYWxnb3JpdGhtID0gYWVzQWxnb3Jp
dGhtKGtleS5zaXplKCkpOworICAgIGlmICghYWxnb3JpdGhtKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgRXZwQ2lwaGVyQ3R4UHRyIGN0eDsKKyAgICBpbnQgbGVuOworCisg
ICAgLy8gQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBjb250ZXh0CisgICAgaWYgKCEoY3R4ID0g
RXZwQ2lwaGVyQ3R4UHRyKEVWUF9DSVBIRVJfQ1RYX25ldygpKSkpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICAvLyBEaXNhYmxlIHBhZGRpbmcKKyAgICBpZiAoMSAhPSBFVlBf
Q0lQSEVSX0NUWF9zZXRfcGFkZGluZyhjdHguZ2V0KCksIDApKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgc2l6ZV90IGJsb2NrcyA9IGlucHV0VGV4dC5zaXplKCkgLyBibG9j
a1NpemUgKyAxOworCisgICAgLy8gRGV0ZWN0IGxvb3AKKyAgICBpZiAoY291bnRlckxlbmd0aCA8
IHNpemVvZihzaXplX3QpICogOCAmJiBibG9ja3MgPiAoMSA8PCBjb3VudGVyTGVuZ3RoKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIC8vIENhbGN1bGF0ZSBjYXBhY2l0eSBi
ZWZvcmUgb3ZlcmZsb3cKKyAgICBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpDb3VudGVyQmxvY2tI
ZWxwZXIgY291bnRlckJsb2NrSGVscGVyKGNvdW50ZXIsIGNvdW50ZXJMZW5ndGgpOworICAgIHNp
emVfdCBjYXBhY2l0eSA9IGNvdW50ZXJCbG9ja0hlbHBlci5jb3VudFRvT3ZlcmZsb3dTYXR1cmF0
aW5nKCk7CisKKyAgICAvLyBEaXZpZGUgZGF0YSBpbnRvIHR3byBwYXJ0cyBpZiBuZWNlc3NhcnkK
KyAgICBzaXplX3QgaGVhZFNpemUgPSBpbnB1dFRleHQuc2l6ZSgpOworICAgIGlmIChjYXBhY2l0
eSA8IGJsb2NrcykKKyAgICAgICAgaGVhZFNpemUgPSBjYXBhY2l0eSAqIGJsb2NrU2l6ZTsKKwor
ICAgIC8vIEZpcnN0IHBhcnQKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0cHV0VGV4dChoZWFkU2l6
ZSk7CisgICAgeworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBlbmNyeXB0aW9uKGRlY3J5cHRp
b24pIG9wZXJhdGlvbgorICAgICAgICBpZiAoMSAhPSBFVlBfQ2lwaGVySW5pdF9leChjdHguZ2V0
KCksIGFsZ29yaXRobSwgbnVsbHB0ciwga2V5LmRhdGEoKSwgY291bnRlci5kYXRhKCksIG9wZXJh
dGlvbikpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIC8vIFBy
b3ZpZGUgdGhlIG1lc3NhZ2UgdG8gYmUgZW5jcnlwdGVkKGRlY3J5cHRlZCksIGFuZCBvYnRhaW4g
dGhlIGVuY3J5cHRlZChkZWNyeXB0ZWQpIG91dHB1dAorICAgICAgICBpZiAoMSAhPSBFVlBfQ2lw
aGVyVXBkYXRlKGN0eC5nZXQoKSwgb3V0cHV0VGV4dC5kYXRhKCksICZsZW4sIGlucHV0VGV4dC5k
YXRhKCksIG91dHB1dFRleHQuc2l6ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICAgICAgLy8gRmluYWxpemUgdGhlIGVuY3J5cHRpb24oZGVjcnlwdGlvbikKKyAg
ICAgICAgaWYgKDEgIT0gRVZQX0NpcGhlckZpbmFsX2V4KGN0eC5nZXQoKSwgb3V0cHV0VGV4dC5k
YXRhKCkgKyBsZW4sICZsZW4pKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICB9CisKKyAgICAvLyBTZWRvbmQgcGFydAorICAgIHsKKyAgICAgICAgc2l6ZV90IHRhaWxTaXpl
ID0gaW5wdXRUZXh0LnNpemUoKSAtIGhlYWRTaXplOworICAgICAgICBWZWN0b3I8dWludDhfdD4g
dGFpbE91dCh0YWlsU2l6ZSk7CisKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlbWFpbmluZ0Nv
dW50ZXIgPSBjb3VudGVyQmxvY2tIZWxwZXIuY291bnRlclZlY3RvckFmdGVyT3ZlcmZsb3coKTsK
KworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBlbmNyeXB0aW9uKGRlY3J5cHRpb24pIG9wZXJh
dGlvbgorICAgICAgICBpZiAoMSAhPSBFVlBfQ2lwaGVySW5pdF9leChjdHguZ2V0KCksIGFsZ29y
aXRobSwgbnVsbHB0ciwga2V5LmRhdGEoKSwgcmVtYWluaW5nQ291bnRlci5kYXRhKCksIG9wZXJh
dGlvbikpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIC8vIFBy
b3ZpZGUgdGhlIG1lc3NhZ2UgdG8gYmUgZW5jcnlwdGVkKGRlY3J5cHRlZCksIGFuZCBvYnRhaW4g
dGhlIGVuY3J5cHRlZChkZWNyeXB0ZWQpIG91dHB1dAorICAgICAgICBpZiAoMSAhPSBFVlBfQ2lw
aGVyVXBkYXRlKGN0eC5nZXQoKSwgdGFpbE91dC5kYXRhKCksICZsZW4sIGlucHV0VGV4dC5kYXRh
KCkgKyBoZWFkU2l6ZSwgdGFpbE91dC5zaXplKCkpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgICAgICAvLyBGaW5hbGl6ZSB0aGUgZW5jcnlwdGlvbihkZWNyeXB0aW9u
KQorICAgICAgICBpZiAoMSAhPSBFVlBfQ2lwaGVyRmluYWxfZXgoY3R4LmdldCgpLCB0YWlsT3V0
LmRhdGEoKSArIGxlbiwgJmxlbikpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgICAgIG91dHB1dFRleHQuYXBwZW5kVmVjdG9yKHRhaWxPdXQpOworICAgIH0KKworICAg
IHJldHVybiBvdXRwdXRUZXh0OworfQorCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENy
eXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRW5jcnlwdChjb25zdCBDcnlwdG9BbGdvcml0
aG1BZXNDdHJQYXJhbXMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleUFFUyYga2V5LCBjb25z
dCBWZWN0b3I8dWludDhfdD4mIHBsYWluVGV4dCkKK3sKKyAgICBhdXRvIG91dHB1dCA9IGNyeXB0
KDEsIGtleS5rZXkoKSwgcGFyYW1ldGVycy5jb3VudGVyVmVjdG9yKCksIHBhcmFtZXRlcnMubGVu
Z3RoLCBwbGFpblRleHQpOworICAgIGlmICghb3V0cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0K
IAotRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpw
bGF0Zm9ybURlY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1zJiwgY29uc3Qg
Q3J5cHRvS2V5QUVTJiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JikKK0V4Y2VwdGlvbk9yPFZlY3Rv
cjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1EZWNyeXB0KGNvbnN0
IENyeXB0b0FsZ29yaXRobUFlc0N0clBhcmFtcyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5
QUVTJiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgY2lwaGVyVGV4dCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9
OworICAgIGF1dG8gb3V0cHV0ID0gY3J5cHQoMCwga2V5LmtleSgpLCBwYXJhbWV0ZXJzLmNvdW50
ZXJWZWN0b3IoKSwgcGFyYW1ldGVycy5sZW5ndGgsIGNpcGhlclRleHQpOworICAgIGlmICghb3V0
cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICBy
ZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvQ3J5cHRvQWxnb3JpdGhtQUVT
X0tXT3BlblNTTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vb3BlbnNzbC9DcnlwdG9BbGdv
cml0aG1BRVNfS1dPcGVuU1NMLmNwcAppbmRleCBmZGViZjA3MTZlZC4uYTQ1OTQ5MzYyOGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9vcGVuc3NsL0NyeXB0b0FsZ29yaXRobUFF
U19LV09wZW5TU0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9vcGVuc3NsL0NyeXB0
b0FsZ29yaXRobUFFU19LV09wZW5TU0wuY3BwCkBAIC0yOSwyMCArMjksMTA2IEBACiAjaWYgRU5B
QkxFKFdFQl9DUllQVE8pCiAKICNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk9wZW5TU0xDcnlwdG9VbmlxdWVQdHIuaCIKKyNp
bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUV4Y2VwdGlv
bk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVdyYXBL
ZXkoY29uc3QgQ3J5cHRvS2V5QUVTJiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JikKK3N0YXRpYyBj
b25zdCBFVlBfQ0lQSEVSKiBhZXNBbGdvcml0aG0oc2l6ZV90IGtleVNpemUpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3Ig
fTsKKyAgICBpZiAoa2V5U2l6ZSAqIDggPT0gMTI4KQorICAgICAgICByZXR1cm4gRVZQX2Flc18x
Mjhfd3JhcCgpOworCisgICAgaWYgKGtleVNpemUgKiA4ID09IDE5MikKKyAgICAgICAgcmV0dXJu
IEVWUF9hZXNfMTkyX3dyYXAoKTsKKworICAgIGlmIChrZXlTaXplICogOCA9PSAyNTYpCisgICAg
ICAgIHJldHVybiBFVlBfYWVzXzI1Nl93cmFwKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
Kworc3RhdGljIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gY3J5cHRXcmFwS2V5KGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCit7CisgICAg
Y29uc3QgRVZQX0NJUEhFUiogYWxnb3JpdGhtID0gYWVzQWxnb3JpdGhtKGtleS5zaXplKCkpOwor
ICAgIGlmICghYWxnb3JpdGhtKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
RXZwQ2lwaGVyQ3R4UHRyIGN0eDsKKyAgICBWZWN0b3I8dWludDhfdD4gY2lwaGVyVGV4dChkYXRh
LnNpemUoKSArIDgpOworICAgIGludCBsZW47CisKKyAgICAvLyBDcmVhdGUgYW5kIGluaXRpYWxp
emUgdGhlIGNvbnRleHQKKyAgICBpZiAoIShjdHggPSBFdnBDaXBoZXJDdHhQdHIoRVZQX0NJUEhF
Ul9DVFhfbmV3KCkpKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIEVWUF9D
SVBIRVJfQ1RYX3NldF9mbGFncyhjdHguZ2V0KCksIEVWUF9DSVBIRVJfQ1RYX0ZMQUdfV1JBUF9B
TExPVyk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBlbmNyeXB0aW9uIG9wZXJhdGlvbgorICAg
IGlmICgxICE9IEVWUF9FbmNyeXB0SW5pdF9leChjdHguZ2V0KCksIGFsZ29yaXRobSwgbnVsbHB0
ciwga2V5LmRhdGEoKSwgbnVsbHB0cikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICAvLyBQcm92aWRlIHRoZSBtZXNzYWdlIHRvIGJlIGVuY3J5cHRlZCwgYW5kIG9idGFpbiB0
aGUgZW5jcnlwdGVkIG91dHB1dAorICAgIGlmICgxICE9IEVWUF9FbmNyeXB0VXBkYXRlKGN0eC5n
ZXQoKSwgY2lwaGVyVGV4dC5kYXRhKCksICZsZW4sIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAvLyBGaW5hbGl6ZSB0aGUgZW5j
cnlwdGlvbi4gRnVydGhlciBjaXBoZXJ0ZXh0IGJ5dGVzIG1heSBiZSB3cml0dGVuIGF0IHRoaXMg
c3RhZ2UKKyAgICBpZiAoMSAhPSBFVlBfRW5jcnlwdEZpbmFsX2V4KGN0eC5nZXQoKSwgY2lwaGVy
VGV4dC5kYXRhKCkgKyBsZW4sICZsZW4pKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgcmV0dXJuIGNpcGhlclRleHQ7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8dWlu
dDhfdD4+IGNyeXB0VW53cmFwS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGRhdGEpCit7CisgICAgY29uc3QgRVZQX0NJUEhFUiogYWxnb3JpdGht
ID0gYWVzQWxnb3JpdGhtKGtleS5zaXplKCkpOworICAgIGlmICghYWxnb3JpdGhtKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgRXZwQ2lwaGVyQ3R4UHRyIGN0eDsKKyAgICBW
ZWN0b3I8dWludDhfdD4gcGxhaW5UZXh0KGRhdGEuc2l6ZSgpKTsKKyAgICBpbnQgbGVuOworICAg
IGludCBwbGFpblRleHRMZW47CisKKyAgICAvLyBDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIGNv
bnRleHQKKyAgICBpZiAoIShjdHggPSBFdnBDaXBoZXJDdHhQdHIoRVZQX0NJUEhFUl9DVFhfbmV3
KCkpKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIEVWUF9DSVBIRVJfQ1RY
X3NldF9mbGFncyhjdHguZ2V0KCksIEVWUF9DSVBIRVJfQ1RYX0ZMQUdfV1JBUF9BTExPVyk7CisK
KyAgICAvLyBJbml0aWFsaXplIHRoZSBkZWNyeXB0aW9uIG9wZXJhdGlvbgorICAgIGlmICgxICE9
IEVWUF9EZWNyeXB0SW5pdF9leChjdHguZ2V0KCksIGFsZ29yaXRobSwgbnVsbHB0ciwga2V5LmRh
dGEoKSwgbnVsbHB0cikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAvLyBQ
cm92aWRlIHRoZSBtZXNzYWdlIHRvIGJlIGRlY3J5cHRlZCwgYW5kIG9idGFpbiB0aGUgcGxhaW50
ZXh0IG91dHB1dAorICAgIGlmICgxICE9IEVWUF9EZWNyeXB0VXBkYXRlKGN0eC5nZXQoKSwgcGxh
aW5UZXh0LmRhdGEoKSwgJmxlbiwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBwbGFpblRleHRMZW4gPSBsZW47CisKKyAgICAvLyBG
aW5hbGl6ZSB0aGUgZGVjcnlwdGlvbi4gRnVydGhlciBwbGFpbnRleHQgYnl0ZXMgbWF5IGJlIHdy
aXR0ZW4gYXQgdGhpcyBzdGFnZQorICAgIGlmICgxICE9IEVWUF9EZWNyeXB0RmluYWxfZXgoY3R4
LmdldCgpLCBwbGFpblRleHQuZGF0YSgpICsgbGVuLCAmbGVuKSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICBwbGFpblRleHRMZW4gKz0gbGVuOworCisgICAgcGxhaW5UZXh0LnNo
cmluayhwbGFpblRleHRMZW4pOworCisgICAgcmV0dXJuIHBsYWluVGV4dDsKK30KKworRXhjZXB0
aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtV3Jh
cEtleShjb25zdCBDcnlwdG9LZXlBRVMmIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRh
KQoreworICAgIGF1dG8gb3V0cHV0ID0gY3J5cHRXcmFwS2V5KGtleS5rZXkoKSwgZGF0YSk7Cisg
ICAgaWYgKCFvdXRwdXQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBPcGVyYXRpb25FcnJv
ciB9OworICAgIHJldHVybiBXVEZNb3ZlKCpvdXRwdXQpOwogfQogCi1FeGNlcHRpb25PcjxWZWN0
b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1VbndyYXBLZXkoY29u
c3QgQ3J5cHRvS2V5QUVTJiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JikKK0V4Y2VwdGlvbk9yPFZl
Y3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVVud3JhcEtleShj
b25zdCBDcnlwdG9LZXlBRVMmIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRl
ZEVycm9yIH07CisgICAgYXV0byBvdXRwdXQgPSBjcnlwdFVud3JhcEtleShrZXkua2V5KCksIGRh
dGEpOworICAgIGlmICghb3V0cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0
aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL29wZW5zc2wv
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlPcGVuU1NMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9vcGVuc3NsL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5T3BlblNTTC5jcHAKaW5kZXggMjg2NjY0
OTdhNTUuLmY4Zjc1MjczOTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vb3Bl
bnNzbC9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeU9wZW5TU0wuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9vcGVuc3NsL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5T3BlblNTTC5jcHAKQEAg
LTMwLDcgKzMwLDkgQEAKIAogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19DQkMuaCIKICNp
bmNsdWRlICJDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NUUi5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19HQ00uaCIKKyNpbmNs
dWRlICJDcnlwdG9BbGdvcml0aG1BRVNfS1cuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1T
SEExLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtU0hBMjI0LmgiCiAjaW5jbHVkZSAiQ3J5
cHRvQWxnb3JpdGhtU0hBMjU2LmgiCkBAIC00Myw3ICs0NSw5IEBAIHZvaWQgQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnk6OnBsYXRmb3JtUmVnaXN0ZXJBbGdvcml0aG1zKCkKIHsKICAgICByZWdpc3Rl
ckFsZ29yaXRobTxDcnlwdG9BbGdvcml0aG1BRVNfQ0JDPigpOwogICAgIHJlZ2lzdGVyQWxnb3Jp
dGhtPENyeXB0b0FsZ29yaXRobUFFU19DRkI+KCk7CisgICAgcmVnaXN0ZXJBbGdvcml0aG08Q3J5
cHRvQWxnb3JpdGhtQUVTX0NUUj4oKTsKICAgICByZWdpc3RlckFsZ29yaXRobTxDcnlwdG9BbGdv
cml0aG1BRVNfR0NNPigpOworICAgIHJlZ2lzdGVyQWxnb3JpdGhtPENyeXB0b0FsZ29yaXRobUFF
U19LVz4oKTsKICAgICByZWdpc3RlckFsZ29yaXRobTxDcnlwdG9BbGdvcml0aG1TSEExPigpOwog
ICAgIHJlZ2lzdGVyQWxnb3JpdGhtPENyeXB0b0FsZ29yaXRobVNIQTIyND4oKTsKICAgICByZWdp
c3RlckFsZ29yaXRobTxDcnlwdG9BbGdvcml0aG1TSEEyNTY+KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391641</attachid>
            <date>2020-02-25 02:08:53 -0800</date>
            <delta_ts>2020-03-08 23:56:12 -0700</delta_ts>
            <desc>patch</desc>
            <filename>add-more-aes2.patch</filename>
            <type>text/plain</type>
            <size>15097</size>
            <attacher name="Tomoki Imai">tomoki.imai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5Yjg2OWYyNGM2YS4uMTY2Mzk1N2FjMDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAyMC0wMi0yNSAgVG9tb2tpIEltYWkgIDxUb21va2kuSW1haUBzb255LmNvbT4KKworICAgICAg
ICBbT3BlblNTTF0gSW1wbGVtZW50IFdlYkNyeXB0byBBUElzIGZvciBBRVMtQ1RSIGFuZCBBRVMt
S1cKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODE4
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJs
ZWQgV2ViQ3J5cHRvIExheW91dFRlc3RzIGZvciBBRVMtQ1RSIGFuZCBBRVMtS1cgYWxvbmcgd2l0
aCB0aGUgaW1wbGVtZW50YXRpb25zLgorCisgICAgICAgICogcGxhdGZvcm0vd2luY2Fpcm8vVGVz
dEV4cGVjdGF0aW9uczoKKwogMjAyMC0wMi0xNyAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29t
PgogCiAgICAgICAgIE1haW4gaW1wbGVtZW50YXRpb24gZm9yIGxhenkgaW1hZ2UgbG9hZGluZwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9u
cyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXgg
Njg2YjdjOWQxNzUuLjVjZTUyMGQ4Y2U2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dp
bmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTgzMCw0MCArODMwLDYgQEAgd2Via2l0Lm9yZy9i
LzIwNjI4MiBmYXN0L3RleHQvc3RhbGUtVGV4dExheW91dC1mcm9tLWZpcnN0LWxpbmUuaHRtbCBb
IEltYWdlT25seUYKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICMgY3J5cHRv
CiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jIEFFUy1DVFIgaXMgbm90IHN1
cHBvcnRlZC4KLWNyeXB0by9zdWJ0bGUvYWVzLWN0ci1lbmNyeXB0LW1hbGZvcm1lZC1wYXJhbWV0
ZXJzLmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWN0ci1nZW5lcmF0ZS1leHBvcnQt
a2V5LWp3ay1sZW5ndGgtMTI4Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWN0ci1n
ZW5lcmF0ZS1leHBvcnQta2V5LWp3ay1sZW5ndGgtMTkyLmh0bWwgWyBTa2lwIF0KLWNyeXB0by9z
dWJ0bGUvYWVzLWN0ci1nZW5lcmF0ZS1leHBvcnQta2V5LWp3ay1sZW5ndGgtMjU2Lmh0bWwgWyBT
a2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWN0ci1nZW5lcmF0ZS1leHBvcnQtcmF3LWtleS5odG1s
IFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1jdHItZ2VuZXJhdGUta2V5LWVuY3J5cHQtZGVj
cnlwdC5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1jdHItZ2VuZXJhdGUta2V5Lmh0
bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWN0ci1pbXBvcnQtandrLWtleS1sZW5ndGgt
MTI4Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWN0ci1pbXBvcnQtandrLWtleS1s
ZW5ndGgtMTkyLmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWN0ci1pbXBvcnQtandr
LWtleS1sZW5ndGgtMjU2Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWN0ci1pbXBv
cnQta2V5LWRlY3J5cHQuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRsZS9hZXMtY3RyLWltcG9y
dC1rZXktZW5jcnlwdC5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1jdHItaW1wb3J0
LWtleS11bndyYXAtandrLWtleS5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1jdHIt
aW1wb3J0LWtleS11bndyYXAtcmF3LWtleS5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Fl
cy1jdHItaW1wb3J0LWtleS13cmFwLWp3ay1rZXkuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRs
ZS9hZXMtY3RyLWltcG9ydC1rZXktd3JhcC1yYXcta2V5Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9z
dWJ0bGUvYWVzLWN0ci1pbXBvcnQtcmF3LWtleS5odG1sIFsgU2tpcCBdCi0KLSMgQUVTLUtXIGlz
IG5vdCBzdXBwb3J0ZWQuCi1jcnlwdG8vc3VidGxlL2Flcy1nZW5lcmF0ZS1rZXktbWFsZm9ybWVk
LXBhcmFtZXRlcnMuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRsZS9hZXMta3ctd3JhcC1rZXkt
bWFsZm9ybWVkLXBhcmFtZXRlcnMuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRsZS9hZXMta3ct
Z2VuZXJhdGUtZXhwb3J0LWtleS1qd2stbGVuZ3RoLTEyOC5odG1sIFsgU2tpcCBdCi1jcnlwdG8v
c3VidGxlL2Flcy1rdy1nZW5lcmF0ZS1leHBvcnQta2V5LWp3ay1sZW5ndGgtMTkyLmh0bWwgWyBT
a2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWt3LWdlbmVyYXRlLWV4cG9ydC1rZXktandrLWxlbmd0
aC0yNTYuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRsZS9hZXMta3ctZ2VuZXJhdGUtZXhwb3J0
LXJhdy1rZXkuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRsZS9hZXMta3ctZ2VuZXJhdGUta2V5
Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWt3LWdlbmVyYXRlLWtleS13cmFwLWtl
eS11bndyYXAta2V5Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWt3LWltcG9ydC1q
d2sta2V5LWxlbmd0aC0xMjguaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRsZS9hZXMta3ctaW1w
b3J0LWp3ay1rZXktbGVuZ3RoLTE5Mi5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1r
dy1pbXBvcnQtandrLWtleS1sZW5ndGgtMjU2Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUv
YWVzLWt3LWltcG9ydC1rZXktdW53cmFwLXJhdy1rZXkuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1
YnRsZS9hZXMta3ctaW1wb3J0LWtleS13cmFwLXJhdy1rZXkuaHRtbCBbIFNraXAgXQotY3J5cHRv
L3N1YnRsZS9hZXMta3ctaW1wb3J0LXJhdy1rZXkuaHRtbCBbIFNraXAgXQogCiAjIENyeXB0cyBv
dGhlciB0aGFuIEFFUyBhcmUgbm90IHN1cHBvcnRlZC4KIGNyeXB0by9zdWJ0bGUvYWVzLWNiYy1p
bXBvcnQta2V5LXVud3JhcC1qd2stcnNhLWtleS1wcml2YXRlLmh0bWwgWyBTa2lwIF0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCBiZTllZmIxMzg1ZC4uMjFmYTMwZmJhODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
MCBAQAorMjAyMC0wMi0yNSAgVG9tb2tpIEltYWkgIDxUb21va2kuSW1haUBzb255LmNvbT4KKwor
ICAgICAgICBbT3BlblNTTF0gSW1wbGVtZW50IFdlYkNyeXB0byBBUElzIGZvciBBRVMtQ1RSIGFu
ZCBBRVMtS1cKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwODE4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIFdlYkNyeXB0byBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcgYWxnb3Jp
dGhtcyB3aXRoIE9wZW5TU0wuCisgICAgICAgIC0gQUVTLUNUUgorICAgICAgICAtIEFFUy1LVwor
CisgICAgICAgIEVuYWJsZWQgV2ViQ3J5cHRvIExheW91dFRlc3RzIGZvciBBRVMtQ1RSIGFuZCBB
RVMtS1cuCisKKyAgICAgICAgKiBjcnlwdG8vb3BlbnNzbC9DcnlwdG9BbGdvcml0aG1BRVNfQ1RS
T3BlblNTTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZXNBbGdvcml0aG0pOiBBZGRlZC4gSGVs
cGVyIGZ1bmN0aW9uIHRvIHNlbGVjdCB3aGljaCBBRVMtQ1RSIGFsZ29yaXRobSB0byBiZSB1c2Vk
IGJ5IGNoZWNraW5nIGtleSBzaXplLgorICAgICAgICAoV2ViQ29yZTo6Y3J5cHQpOiBBZGRlZC4g
SGVscGVyIGZ1bmN0aW9uIHNoYXJlZCBieSBwbGF0Zm9ybUVuY3J5cHQvcGxhdGZvcm1EZWNyeXB0
LgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1FbmNy
eXB0KTogSW1wbGVtZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNf
Q1RSOjpwbGF0Zm9ybURlY3J5cHQpOiBJbXBsZW1lbnRlZC4KKyAgICAgICAgKiBjcnlwdG8vb3Bl
bnNzbC9DcnlwdG9BbGdvcml0aG1BRVNfS1dPcGVuU1NMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmFlc0FsZ29yaXRobSk6IEFkZGVkLiBIZWxwZXIgZnVuY3Rpb24gdG8gc2VsZWN0IHdoaWNoIEFF
Uy1LVyBhbGdvcml0aG0gdG8gYmUgdXNlZCBieSBjaGVja2luZyBrZXkgc2l6ZS4KKyAgICAgICAg
KFdlYkNvcmU6OmNyeXB0V3JhcEtleSk6ICBBZGRlZC4gSGVscGVyIGZ1bmN0aW9uIGZvciBwbGF0
Zm9ybVdyYXBLZXkuCisgICAgICAgIChXZWJDb3JlOjpjcnlwdFVud3JhcEtleSk6IEFkZGVkLiBI
ZWxwZXIgZnVuY3Rpb24gZm9yIHBsYXRmb3JtVW53cmFwS2V5LgorICAgICAgICAoV2ViQ29yZTo6
Q3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVdyYXBLZXkpOiBJbXBsZW1lbnRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1VbndyYXBLZXkp
OiBJbXBsZW1lbnRlZC4KKyAgICAgICAgKiBjcnlwdG8vb3BlbnNzbC9DcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeU9wZW5TU0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUmVn
aXN0cnk6OnBsYXRmb3JtUmVnaXN0ZXJBbGdvcml0aG1zKTogUmVnaXN0ZXJlZCBDcnlwdG9BbGdv
cml0aG1BRVNfQ1RSIGFuZCBDcnlwdG9BbGdvcml0aG1BRVNfS1cuCisKIDIwMjAtMDItMTcgIFJv
YiBCdWlzICA8cmJ1aXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBNYWluIGltcGxlbWVudGF0aW9u
IGZvciBsYXp5IGltYWdlIGxvYWRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9vcGVuc3NsL0NyeXB0b0FsZ29yaXRobUFFU19DVFJPcGVuU1NMLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9vcGVuc3NsL0NyeXB0b0FsZ29yaXRobUFFU19DVFJPcGVuU1NMLmNwcAppbmRl
eCA4ZjE2MTRkYmNiNi4uODE3Yjk1OGVkOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9vcGVuc3NsL0NyeXB0b0FsZ29yaXRobUFFU19DVFJPcGVuU1NMLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vb3BlbnNzbC9DcnlwdG9BbGdvcml0aG1BRVNfQ1RST3BlblNTTC5j
cHAKQEAgLTMwLDIwICszMCwxMTMgQEAKIAogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0N0
clBhcmFtcy5oIgogI2luY2x1ZGUgIkNyeXB0b0tleUFFUy5oIgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiT3BlblNTTENyeXB0b1VuaXF1ZVB0ci5oIgorI2luY2x1ZGUg
PG9wZW5zc2wvZXZwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRXhjZXB0aW9uT3I8VmVj
dG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybUVuY3J5cHQoY29u
c3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1zJiwgY29uc3QgQ3J5cHRvS2V5QUVTJiwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JikKK3N0YXRpYyBjb25zdCBFVlBfQ0lQSEVSKiBhZXNBbGdvcml0
aG0oc2l6ZV90IGtleVNpemUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKKyAgICBpZiAoa2V5U2l6ZSAqIDggPT0g
MTI4KQorICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfY3RyKCk7CisKKyAgICBpZiAoa2V5U2l6
ZSAqIDggPT0gMTkyKQorICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJfY3RyKCk7CisKKyAgICBp
ZiAoa2V5U2l6ZSAqIDggPT0gMjU2KQorICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfY3RyKCk7
CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIE9wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gY3J5cHQoaW50IG9wZXJhdGlvbiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgY291bnRlciwgc2l6ZV90IGNvdW50ZXJMZW5ndGgsIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgaW5wdXRUZXh0KQoreworICAgIGNvbnN0ZXhwciBzaXplX3QgYmxv
Y2tTaXplID0gMTY7CisgICAgY29uc3QgRVZQX0NJUEhFUiogYWxnb3JpdGhtID0gYWVzQWxnb3Jp
dGhtKGtleS5zaXplKCkpOworICAgIGlmICghYWxnb3JpdGhtKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgRXZwQ2lwaGVyQ3R4UHRyIGN0eDsKKyAgICBpbnQgbGVuOworCisg
ICAgLy8gQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBjb250ZXh0CisgICAgaWYgKCEoY3R4ID0g
RXZwQ2lwaGVyQ3R4UHRyKEVWUF9DSVBIRVJfQ1RYX25ldygpKSkpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICAvLyBEaXNhYmxlIHBhZGRpbmcKKyAgICBpZiAoMSAhPSBFVlBf
Q0lQSEVSX0NUWF9zZXRfcGFkZGluZyhjdHguZ2V0KCksIDApKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgc2l6ZV90IGJsb2NrcyA9IGlucHV0VGV4dC5zaXplKCkgLyBibG9j
a1NpemUgKyAxOworCisgICAgLy8gRGV0ZWN0IGxvb3AKKyAgICBpZiAoY291bnRlckxlbmd0aCA8
IHNpemVvZihzaXplX3QpICogOCAmJiBibG9ja3MgPiAoKHNpemVfdCkgMSA8PCBjb3VudGVyTGVu
Z3RoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIC8vIENhbGN1bGF0ZSBj
YXBhY2l0eSBiZWZvcmUgb3ZlcmZsb3cKKyAgICBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpDb3Vu
dGVyQmxvY2tIZWxwZXIgY291bnRlckJsb2NrSGVscGVyKGNvdW50ZXIsIGNvdW50ZXJMZW5ndGgp
OworICAgIHNpemVfdCBjYXBhY2l0eSA9IGNvdW50ZXJCbG9ja0hlbHBlci5jb3VudFRvT3ZlcmZs
b3dTYXR1cmF0aW5nKCk7CisKKyAgICAvLyBEaXZpZGUgZGF0YSBpbnRvIHR3byBwYXJ0cyBpZiBu
ZWNlc3NhcnkKKyAgICBzaXplX3QgaGVhZFNpemUgPSBpbnB1dFRleHQuc2l6ZSgpOworICAgIGlm
IChjYXBhY2l0eSA8IGJsb2NrcykKKyAgICAgICAgaGVhZFNpemUgPSBjYXBhY2l0eSAqIGJsb2Nr
U2l6ZTsKKworICAgIC8vIEZpcnN0IHBhcnQKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0cHV0VGV4
dChoZWFkU2l6ZSk7CisgICAgeworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBlbmNyeXB0aW9u
KGRlY3J5cHRpb24pIG9wZXJhdGlvbgorICAgICAgICBpZiAoMSAhPSBFVlBfQ2lwaGVySW5pdF9l
eChjdHguZ2V0KCksIGFsZ29yaXRobSwgbnVsbHB0ciwga2V5LmRhdGEoKSwgY291bnRlci5kYXRh
KCksIG9wZXJhdGlvbikpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
ICAgIC8vIFByb3ZpZGUgdGhlIG1lc3NhZ2UgdG8gYmUgZW5jcnlwdGVkKGRlY3J5cHRlZCksIGFu
ZCBvYnRhaW4gdGhlIGVuY3J5cHRlZChkZWNyeXB0ZWQpIG91dHB1dAorICAgICAgICBpZiAoMSAh
PSBFVlBfQ2lwaGVyVXBkYXRlKGN0eC5nZXQoKSwgb3V0cHV0VGV4dC5kYXRhKCksICZsZW4sIGlu
cHV0VGV4dC5kYXRhKCksIG91dHB1dFRleHQuc2l6ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICAgICAgLy8gRmluYWxpemUgdGhlIGVuY3J5cHRpb24oZGVjcnlw
dGlvbikKKyAgICAgICAgaWYgKDEgIT0gRVZQX0NpcGhlckZpbmFsX2V4KGN0eC5nZXQoKSwgb3V0
cHV0VGV4dC5kYXRhKCkgKyBsZW4sICZsZW4pKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICB9CisKKyAgICAvLyBTZWRvbmQgcGFydAorICAgIHsKKyAgICAgICAgc2l6ZV90
IHRhaWxTaXplID0gaW5wdXRUZXh0LnNpemUoKSAtIGhlYWRTaXplOworICAgICAgICBWZWN0b3I8
dWludDhfdD4gdGFpbE91dCh0YWlsU2l6ZSk7CisKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJl
bWFpbmluZ0NvdW50ZXIgPSBjb3VudGVyQmxvY2tIZWxwZXIuY291bnRlclZlY3RvckFmdGVyT3Zl
cmZsb3coKTsKKworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBlbmNyeXB0aW9uKGRlY3J5cHRp
b24pIG9wZXJhdGlvbgorICAgICAgICBpZiAoMSAhPSBFVlBfQ2lwaGVySW5pdF9leChjdHguZ2V0
KCksIGFsZ29yaXRobSwgbnVsbHB0ciwga2V5LmRhdGEoKSwgcmVtYWluaW5nQ291bnRlci5kYXRh
KCksIG9wZXJhdGlvbikpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
ICAgIC8vIFByb3ZpZGUgdGhlIG1lc3NhZ2UgdG8gYmUgZW5jcnlwdGVkKGRlY3J5cHRlZCksIGFu
ZCBvYnRhaW4gdGhlIGVuY3J5cHRlZChkZWNyeXB0ZWQpIG91dHB1dAorICAgICAgICBpZiAoMSAh
PSBFVlBfQ2lwaGVyVXBkYXRlKGN0eC5nZXQoKSwgdGFpbE91dC5kYXRhKCksICZsZW4sIGlucHV0
VGV4dC5kYXRhKCkgKyBoZWFkU2l6ZSwgdGFpbE91dC5zaXplKCkpKQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICAvLyBGaW5hbGl6ZSB0aGUgZW5jcnlwdGlvbihk
ZWNyeXB0aW9uKQorICAgICAgICBpZiAoMSAhPSBFVlBfQ2lwaGVyRmluYWxfZXgoY3R4LmdldCgp
LCB0YWlsT3V0LmRhdGEoKSArIGxlbiwgJmxlbikpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgICAgIG91dHB1dFRleHQuYXBwZW5kVmVjdG9yKHRhaWxPdXQpOworICAg
IH0KKworICAgIHJldHVybiBvdXRwdXRUZXh0OworfQorCitFeGNlcHRpb25PcjxWZWN0b3I8dWlu
dDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRW5jcnlwdChjb25zdCBDcnlw
dG9BbGdvcml0aG1BZXNDdHJQYXJhbXMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleUFFUyYg
a2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHBsYWluVGV4dCkKK3sKKyAgICBhdXRvIG91dHB1
dCA9IGNyeXB0KDEsIGtleS5rZXkoKSwgcGFyYW1ldGVycy5jb3VudGVyVmVjdG9yKCksIHBhcmFt
ZXRlcnMubGVuZ3RoLCBwbGFpblRleHQpOworICAgIGlmICghb3V0cHV0KQorICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgqb3V0
cHV0KTsKIH0KIAotRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1B
RVNfQ1RSOjpwbGF0Zm9ybURlY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1z
JiwgY29uc3QgQ3J5cHRvS2V5QUVTJiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JikKK0V4Y2VwdGlv
bk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1EZWNy
eXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobUFlc0N0clBhcmFtcyYgcGFyYW1ldGVycywgY29uc3Qg
Q3J5cHRvS2V5QUVTJiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgY2lwaGVyVGV4dCkKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0
ZWRFcnJvciB9OworICAgIGF1dG8gb3V0cHV0ID0gY3J5cHQoMCwga2V5LmtleSgpLCBwYXJhbWV0
ZXJzLmNvdW50ZXJWZWN0b3IoKSwgcGFyYW1ldGVycy5sZW5ndGgsIGNpcGhlclRleHQpOworICAg
IGlmICghb3V0cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3Ig
fTsKKyAgICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvQ3J5cHRvQWxn
b3JpdGhtQUVTX0tXT3BlblNTTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vb3BlbnNzbC9D
cnlwdG9BbGdvcml0aG1BRVNfS1dPcGVuU1NMLmNwcAppbmRleCBmZGViZjA3MTZlZC4uYTQ1OTQ5
MzYyOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9vcGVuc3NsL0NyeXB0b0Fs
Z29yaXRobUFFU19LV09wZW5TU0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9vcGVu
c3NsL0NyeXB0b0FsZ29yaXRobUFFU19LV09wZW5TU0wuY3BwCkBAIC0yOSwyMCArMjksMTA2IEBA
CiAjaWYgRU5BQkxFKFdFQl9DUllQVE8pCiAKICNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKLSNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk9wZW5TU0xDcnlwdG9VbmlxdWVQ
dHIuaCIKKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0
Zm9ybVdyYXBLZXkoY29uc3QgQ3J5cHRvS2V5QUVTJiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JikK
K3N0YXRpYyBjb25zdCBFVlBfQ0lQSEVSKiBhZXNBbGdvcml0aG0oc2l6ZV90IGtleVNpemUpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9y
dGVkRXJyb3IgfTsKKyAgICBpZiAoa2V5U2l6ZSAqIDggPT0gMTI4KQorICAgICAgICByZXR1cm4g
RVZQX2Flc18xMjhfd3JhcCgpOworCisgICAgaWYgKGtleVNpemUgKiA4ID09IDE5MikKKyAgICAg
ICAgcmV0dXJuIEVWUF9hZXNfMTkyX3dyYXAoKTsKKworICAgIGlmIChrZXlTaXplICogOCA9PSAy
NTYpCisgICAgICAgIHJldHVybiBFVlBfYWVzXzI1Nl93cmFwKCk7CisKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworc3RhdGljIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gY3J5cHRXcmFwS2V5
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEp
Cit7CisgICAgY29uc3QgRVZQX0NJUEhFUiogYWxnb3JpdGhtID0gYWVzQWxnb3JpdGhtKGtleS5z
aXplKCkpOworICAgIGlmICghYWxnb3JpdGhtKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgRXZwQ2lwaGVyQ3R4UHRyIGN0eDsKKyAgICBWZWN0b3I8dWludDhfdD4gY2lwaGVy
VGV4dChkYXRhLnNpemUoKSArIDgpOworICAgIGludCBsZW47CisKKyAgICAvLyBDcmVhdGUgYW5k
IGluaXRpYWxpemUgdGhlIGNvbnRleHQKKyAgICBpZiAoIShjdHggPSBFdnBDaXBoZXJDdHhQdHIo
RVZQX0NJUEhFUl9DVFhfbmV3KCkpKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgIEVWUF9DSVBIRVJfQ1RYX3NldF9mbGFncyhjdHguZ2V0KCksIEVWUF9DSVBIRVJfQ1RYX0ZM
QUdfV1JBUF9BTExPVyk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBlbmNyeXB0aW9uIG9wZXJh
dGlvbgorICAgIGlmICgxICE9IEVWUF9FbmNyeXB0SW5pdF9leChjdHguZ2V0KCksIGFsZ29yaXRo
bSwgbnVsbHB0ciwga2V5LmRhdGEoKSwgbnVsbHB0cikpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICAvLyBQcm92aWRlIHRoZSBtZXNzYWdlIHRvIGJlIGVuY3J5cHRlZCwgYW5k
IG9idGFpbiB0aGUgZW5jcnlwdGVkIG91dHB1dAorICAgIGlmICgxICE9IEVWUF9FbmNyeXB0VXBk
YXRlKGN0eC5nZXQoKSwgY2lwaGVyVGV4dC5kYXRhKCksICZsZW4sIGRhdGEuZGF0YSgpLCBkYXRh
LnNpemUoKSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAvLyBGaW5hbGl6
ZSB0aGUgZW5jcnlwdGlvbi4gRnVydGhlciBjaXBoZXJ0ZXh0IGJ5dGVzIG1heSBiZSB3cml0dGVu
IGF0IHRoaXMgc3RhZ2UKKyAgICBpZiAoMSAhPSBFVlBfRW5jcnlwdEZpbmFsX2V4KGN0eC5nZXQo
KSwgY2lwaGVyVGV4dC5kYXRhKCkgKyBsZW4sICZsZW4pKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgcmV0dXJuIGNpcGhlclRleHQ7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGNyeXB0VW53cmFwS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCit7CisgICAgY29uc3QgRVZQX0NJUEhFUiog
YWxnb3JpdGhtID0gYWVzQWxnb3JpdGhtKGtleS5zaXplKCkpOworICAgIGlmICghYWxnb3JpdGht
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgRXZwQ2lwaGVyQ3R4UHRyIGN0
eDsKKyAgICBWZWN0b3I8dWludDhfdD4gcGxhaW5UZXh0KGRhdGEuc2l6ZSgpKTsKKyAgICBpbnQg
bGVuOworICAgIGludCBwbGFpblRleHRMZW47CisKKyAgICAvLyBDcmVhdGUgYW5kIGluaXRpYWxp
emUgdGhlIGNvbnRleHQKKyAgICBpZiAoIShjdHggPSBFdnBDaXBoZXJDdHhQdHIoRVZQX0NJUEhF
Ul9DVFhfbmV3KCkpKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIEVWUF9D
SVBIRVJfQ1RYX3NldF9mbGFncyhjdHguZ2V0KCksIEVWUF9DSVBIRVJfQ1RYX0ZMQUdfV1JBUF9B
TExPVyk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZWNyeXB0aW9uIG9wZXJhdGlvbgorICAg
IGlmICgxICE9IEVWUF9EZWNyeXB0SW5pdF9leChjdHguZ2V0KCksIGFsZ29yaXRobSwgbnVsbHB0
ciwga2V5LmRhdGEoKSwgbnVsbHB0cikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICAvLyBQcm92aWRlIHRoZSBtZXNzYWdlIHRvIGJlIGRlY3J5cHRlZCwgYW5kIG9idGFpbiB0
aGUgcGxhaW50ZXh0IG91dHB1dAorICAgIGlmICgxICE9IEVWUF9EZWNyeXB0VXBkYXRlKGN0eC5n
ZXQoKSwgcGxhaW5UZXh0LmRhdGEoKSwgJmxlbiwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBwbGFpblRleHRMZW4gPSBsZW47CisK
KyAgICAvLyBGaW5hbGl6ZSB0aGUgZGVjcnlwdGlvbi4gRnVydGhlciBwbGFpbnRleHQgYnl0ZXMg
bWF5IGJlIHdyaXR0ZW4gYXQgdGhpcyBzdGFnZQorICAgIGlmICgxICE9IEVWUF9EZWNyeXB0Rmlu
YWxfZXgoY3R4LmdldCgpLCBwbGFpblRleHQuZGF0YSgpICsgbGVuLCAmbGVuKSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBwbGFpblRleHRMZW4gKz0gbGVuOworCisgICAgcGxh
aW5UZXh0LnNocmluayhwbGFpblRleHRMZW4pOworCisgICAgcmV0dXJuIHBsYWluVGV4dDsKK30K
KworRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBs
YXRmb3JtV3JhcEtleShjb25zdCBDcnlwdG9LZXlBRVMmIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBkYXRhKQoreworICAgIGF1dG8gb3V0cHV0ID0gY3J5cHRXcmFwS2V5KGtleS5rZXkoKSwg
ZGF0YSk7CisgICAgaWYgKCFvdXRwdXQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBPcGVy
YXRpb25FcnJvciB9OworICAgIHJldHVybiBXVEZNb3ZlKCpvdXRwdXQpOwogfQogCi1FeGNlcHRp
b25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1Vbndy
YXBLZXkoY29uc3QgQ3J5cHRvS2V5QUVTJiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JikKK0V4Y2Vw
dGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVVu
d3JhcEtleShjb25zdCBDcnlwdG9LZXlBRVMmIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBk
YXRhKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5v
dFN1cHBvcnRlZEVycm9yIH07CisgICAgYXV0byBvdXRwdXQgPSBjcnlwdFVud3JhcEtleShrZXku
a2V5KCksIGRhdGEpOworICAgIGlmICghb3V0cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L29wZW5zc2wvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlPcGVuU1NMLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9vcGVuc3NsL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5T3BlblNTTC5jcHAKaW5k
ZXggMjg2NjY0OTdhNTUuLmY4Zjc1MjczOTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vb3BlbnNzbC9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeU9wZW5TU0wuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9vcGVuc3NsL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5T3BlblNT
TC5jcHAKQEAgLTMwLDcgKzMwLDkgQEAKIAogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19D
QkMuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmgiCisjaW5jbHVkZSAiQ3J5
cHRvQWxnb3JpdGhtQUVTX0NUUi5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19HQ00u
aCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BRVNfS1cuaCIKICNpbmNsdWRlICJDcnlwdG9B
bGdvcml0aG1TSEExLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtU0hBMjI0LmgiCiAjaW5j
bHVkZSAiQ3J5cHRvQWxnb3JpdGhtU0hBMjU2LmgiCkBAIC00Myw3ICs0NSw5IEBAIHZvaWQgQ3J5
cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnBsYXRmb3JtUmVnaXN0ZXJBbGdvcml0aG1zKCkKIHsKICAg
ICByZWdpc3RlckFsZ29yaXRobTxDcnlwdG9BbGdvcml0aG1BRVNfQ0JDPigpOwogICAgIHJlZ2lz
dGVyQWxnb3JpdGhtPENyeXB0b0FsZ29yaXRobUFFU19DRkI+KCk7CisgICAgcmVnaXN0ZXJBbGdv
cml0aG08Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUj4oKTsKICAgICByZWdpc3RlckFsZ29yaXRobTxD
cnlwdG9BbGdvcml0aG1BRVNfR0NNPigpOworICAgIHJlZ2lzdGVyQWxnb3JpdGhtPENyeXB0b0Fs
Z29yaXRobUFFU19LVz4oKTsKICAgICByZWdpc3RlckFsZ29yaXRobTxDcnlwdG9BbGdvcml0aG1T
SEExPigpOwogICAgIHJlZ2lzdGVyQWxnb3JpdGhtPENyeXB0b0FsZ29yaXRobVNIQTIyND4oKTsK
ICAgICByZWdpc3RlckFsZ29yaXRobTxDcnlwdG9BbGdvcml0aG1TSEEyNTY+KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393013</attachid>
            <date>2020-03-08 23:56:12 -0700</date>
            <delta_ts>2020-03-10 23:22:26 -0700</delta_ts>
            <desc>patch to add AES-KW/AES-CTR</desc>
            <filename>add-more-aes3.patch</filename>
            <type>text/plain</type>
            <size>15233</size>
            <attacher name="Tomoki Imai">tomoki.imai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5Yjg2OWYyNGM2YWYuLjE2NjM5NTdhYzA1OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBA
CisyMDIwLTAyLTI1ICBUb21va2kgSW1haSAgPFRvbW9raS5JbWFpQHNvbnkuY29tPgorCisgICAg
ICAgIFtPcGVuU1NMXSBJbXBsZW1lbnQgV2ViQ3J5cHRvIEFQSXMgZm9yIEFFUy1DVFIgYW5kIEFF
Uy1LVworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4
MTg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5h
YmxlZCBXZWJDcnlwdG8gTGF5b3V0VGVzdHMgZm9yIEFFUy1DVFIgYW5kIEFFUy1LVyBhbG9uZyB3
aXRoIHRoZSBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9U
ZXN0RXhwZWN0YXRpb25zOgorCiAyMDIwLTAyLTE3ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5j
b20+CiAKICAgICAgICAgTWFpbiBpbXBsZW1lbnRhdGlvbiBmb3IgbGF6eSBpbWFnZSBsb2FkaW5n
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRp
b25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucwppbmRl
eCA2ODZiN2M5ZDE3NWUuLjVjZTUyMGQ4Y2U2OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCkBAIC04MzAsNDAgKzgzMCw2IEBAIHdlYmtpdC5v
cmcvYi8yMDYyODIgZmFzdC90ZXh0L3N0YWxlLVRleHRMYXlvdXQtZnJvbS1maXJzdC1saW5lLmh0
bWwgWyBJbWFnZU9ubHlGCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjIGNy
eXB0bwogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotIyBBRVMtQ1RSIGlzIG5v
dCBzdXBwb3J0ZWQuCi1jcnlwdG8vc3VidGxlL2Flcy1jdHItZW5jcnlwdC1tYWxmb3JtZWQtcGFy
YW1ldGVycy5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1jdHItZ2VuZXJhdGUtZXhw
b3J0LWtleS1qd2stbGVuZ3RoLTEyOC5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1j
dHItZ2VuZXJhdGUtZXhwb3J0LWtleS1qd2stbGVuZ3RoLTE5Mi5odG1sIFsgU2tpcCBdCi1jcnlw
dG8vc3VidGxlL2Flcy1jdHItZ2VuZXJhdGUtZXhwb3J0LWtleS1qd2stbGVuZ3RoLTI1Ni5odG1s
IFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1jdHItZ2VuZXJhdGUtZXhwb3J0LXJhdy1rZXku
aHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRsZS9hZXMtY3RyLWdlbmVyYXRlLWtleS1lbmNyeXB0
LWRlY3J5cHQuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRsZS9hZXMtY3RyLWdlbmVyYXRlLWtl
eS5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1jdHItaW1wb3J0LWp3ay1rZXktbGVu
Z3RoLTEyOC5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1jdHItaW1wb3J0LWp3ay1r
ZXktbGVuZ3RoLTE5Mi5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1jdHItaW1wb3J0
LWp3ay1rZXktbGVuZ3RoLTI1Ni5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1jdHIt
aW1wb3J0LWtleS1kZWNyeXB0Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWN0ci1p
bXBvcnQta2V5LWVuY3J5cHQuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRsZS9hZXMtY3RyLWlt
cG9ydC1rZXktdW53cmFwLWp3ay1rZXkuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRsZS9hZXMt
Y3RyLWltcG9ydC1rZXktdW53cmFwLXJhdy1rZXkuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRs
ZS9hZXMtY3RyLWltcG9ydC1rZXktd3JhcC1qd2sta2V5Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9z
dWJ0bGUvYWVzLWN0ci1pbXBvcnQta2V5LXdyYXAtcmF3LWtleS5odG1sIFsgU2tpcCBdCi1jcnlw
dG8vc3VidGxlL2Flcy1jdHItaW1wb3J0LXJhdy1rZXkuaHRtbCBbIFNraXAgXQotCi0jIEFFUy1L
VyBpcyBub3Qgc3VwcG9ydGVkLgotY3J5cHRvL3N1YnRsZS9hZXMtZ2VuZXJhdGUta2V5LW1hbGZv
cm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWt3LXdyYXAt
a2V5LW1hbGZvcm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVz
LWt3LWdlbmVyYXRlLWV4cG9ydC1rZXktandrLWxlbmd0aC0xMjguaHRtbCBbIFNraXAgXQotY3J5
cHRvL3N1YnRsZS9hZXMta3ctZ2VuZXJhdGUtZXhwb3J0LWtleS1qd2stbGVuZ3RoLTE5Mi5odG1s
IFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1rdy1nZW5lcmF0ZS1leHBvcnQta2V5LWp3ay1s
ZW5ndGgtMjU2Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWt3LWdlbmVyYXRlLWV4
cG9ydC1yYXcta2V5Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWt3LWdlbmVyYXRl
LWtleS5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1rdy1nZW5lcmF0ZS1rZXktd3Jh
cC1rZXktdW53cmFwLWtleS5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3VidGxlL2Flcy1rdy1pbXBv
cnQtandrLWtleS1sZW5ndGgtMTI4Lmh0bWwgWyBTa2lwIF0KLWNyeXB0by9zdWJ0bGUvYWVzLWt3
LWltcG9ydC1qd2sta2V5LWxlbmd0aC0xOTIuaHRtbCBbIFNraXAgXQotY3J5cHRvL3N1YnRsZS9h
ZXMta3ctaW1wb3J0LWp3ay1rZXktbGVuZ3RoLTI1Ni5odG1sIFsgU2tpcCBdCi1jcnlwdG8vc3Vi
dGxlL2Flcy1rdy1pbXBvcnQta2V5LXVud3JhcC1yYXcta2V5Lmh0bWwgWyBTa2lwIF0KLWNyeXB0
by9zdWJ0bGUvYWVzLWt3LWltcG9ydC1rZXktd3JhcC1yYXcta2V5Lmh0bWwgWyBTa2lwIF0KLWNy
eXB0by9zdWJ0bGUvYWVzLWt3LWltcG9ydC1yYXcta2V5Lmh0bWwgWyBTa2lwIF0KIAogIyBDcnlw
dHMgb3RoZXIgdGhhbiBBRVMgYXJlIG5vdCBzdXBwb3J0ZWQuCiBjcnlwdG8vc3VidGxlL2Flcy1j
YmMtaW1wb3J0LWtleS11bndyYXAtandrLXJzYS1rZXktcHJpdmF0ZS5odG1sIFsgU2tpcCBdCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggYmU5ZWZiMTM4NWRmLi4yMWZhMzBmYmE4N2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMCBAQAorMjAyMC0wMi0yNSAgVG9tb2tpIEltYWkgIDxUb21va2kuSW1haUBzb255LmNv
bT4KKworICAgICAgICBbT3BlblNTTF0gSW1wbGVtZW50IFdlYkNyeXB0byBBUElzIGZvciBBRVMt
Q1RSIGFuZCBBRVMtS1cKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwODE4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZGVkIFdlYkNyeXB0byBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcg
YWxnb3JpdGhtcyB3aXRoIE9wZW5TU0wuCisgICAgICAgIC0gQUVTLUNUUgorICAgICAgICAtIEFF
Uy1LVworCisgICAgICAgIEVuYWJsZWQgV2ViQ3J5cHRvIExheW91dFRlc3RzIGZvciBBRVMtQ1RS
IGFuZCBBRVMtS1cuCisKKyAgICAgICAgKiBjcnlwdG8vb3BlbnNzbC9DcnlwdG9BbGdvcml0aG1B
RVNfQ1RST3BlblNTTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZXNBbGdvcml0aG0pOiBBZGRl
ZC4gSGVscGVyIGZ1bmN0aW9uIHRvIHNlbGVjdCB3aGljaCBBRVMtQ1RSIGFsZ29yaXRobSB0byBi
ZSB1c2VkIGJ5IGNoZWNraW5nIGtleSBzaXplLgorICAgICAgICAoV2ViQ29yZTo6Y3J5cHQpOiBB
ZGRlZC4gSGVscGVyIGZ1bmN0aW9uIHNoYXJlZCBieSBwbGF0Zm9ybUVuY3J5cHQvcGxhdGZvcm1E
ZWNyeXB0LgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZv
cm1FbmNyeXB0KTogSW1wbGVtZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0
aG1BRVNfQ1RSOjpwbGF0Zm9ybURlY3J5cHQpOiBJbXBsZW1lbnRlZC4KKyAgICAgICAgKiBjcnlw
dG8vb3BlbnNzbC9DcnlwdG9BbGdvcml0aG1BRVNfS1dPcGVuU1NMLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmFlc0FsZ29yaXRobSk6IEFkZGVkLiBIZWxwZXIgZnVuY3Rpb24gdG8gc2VsZWN0IHdo
aWNoIEFFUy1LVyBhbGdvcml0aG0gdG8gYmUgdXNlZCBieSBjaGVja2luZyBrZXkgc2l6ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OmNyeXB0V3JhcEtleSk6ICBBZGRlZC4gSGVscGVyIGZ1bmN0aW9uIGZv
ciBwbGF0Zm9ybVdyYXBLZXkuCisgICAgICAgIChXZWJDb3JlOjpjcnlwdFVud3JhcEtleSk6IEFk
ZGVkLiBIZWxwZXIgZnVuY3Rpb24gZm9yIHBsYXRmb3JtVW53cmFwS2V5LgorICAgICAgICAoV2Vi
Q29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVdyYXBLZXkpOiBJbXBsZW1lbnRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1Vbndy
YXBLZXkpOiBJbXBsZW1lbnRlZC4KKyAgICAgICAgKiBjcnlwdG8vb3BlbnNzbC9DcnlwdG9BbGdv
cml0aG1SZWdpc3RyeU9wZW5TU0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnk6OnBsYXRmb3JtUmVnaXN0ZXJBbGdvcml0aG1zKTogUmVnaXN0ZXJlZCBDcnlw
dG9BbGdvcml0aG1BRVNfQ1RSIGFuZCBDcnlwdG9BbGdvcml0aG1BRVNfS1cuCisKIDIwMjAtMDIt
MTcgIFJvYiBCdWlzICA8cmJ1aXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBNYWluIGltcGxlbWVu
dGF0aW9uIGZvciBsYXp5IGltYWdlIGxvYWRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9vcGVuc3NsL0NyeXB0b0FsZ29yaXRobUFFU19DVFJPcGVuU1NMLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9vcGVuc3NsL0NyeXB0b0FsZ29yaXRobUFFU19DVFJPcGVuU1NMLmNw
cAppbmRleCA4ZjE2MTRkYmNiNmYuLmIxZDE4YTA5ZTA0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3J5cHRvL29wZW5zc2wvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUk9wZW5TU0wuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9vcGVuc3NsL0NyeXB0b0FsZ29yaXRobUFFU19DVFJP
cGVuU1NMLmNwcApAQCAtMzAsMjAgKzMwLDExNCBAQAogCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3Jp
dGhtQWVzQ3RyUGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJPcGVuU1NMQ3J5cHRvVW5pcXVlUHRyLmgiCisj
aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FeGNlcHRp
b25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRW5j
cnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNDdHJQYXJhbXMmLCBjb25zdCBDcnlwdG9LZXlB
RVMmLCBjb25zdCBWZWN0b3I8dWludDhfdD4mKQorc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIqIGFl
c0FsZ29yaXRobShzaXplX3Qga2V5U2l6ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OworICAgIGlmIChrZXlTaXpl
ICogOCA9PSAxMjgpCisgICAgICAgIHJldHVybiBFVlBfYWVzXzEyOF9jdHIoKTsKKworICAgIGlm
IChrZXlTaXplICogOCA9PSAxOTIpCisgICAgICAgIHJldHVybiBFVlBfYWVzXzE5Ml9jdHIoKTsK
KworICAgIGlmIChrZXlTaXplICogOCA9PSAyNTYpCisgICAgICAgIHJldHVybiBFVlBfYWVzXzI1
Nl9jdHIoKTsKKworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBjcnlwdChpbnQgb3BlcmF0aW9uLCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjb3VudGVyLCBzaXplX3QgY291bnRlckxlbmd0
aCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dFRleHQpCit7CisgICAgY29uc3RleHByIHNp
emVfdCBibG9ja1NpemUgPSAxNjsKKyAgICBjb25zdCBFVlBfQ0lQSEVSKiBhbGdvcml0aG0gPSBh
ZXNBbGdvcml0aG0oa2V5LnNpemUoKSk7CisgICAgaWYgKCFhbGdvcml0aG0pCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBFdnBDaXBoZXJDdHhQdHIgY3R4OworICAgIGludCBs
ZW47CisKKyAgICAvLyBDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIGNvbnRleHQKKyAgICBpZiAo
IShjdHggPSBFdnBDaXBoZXJDdHhQdHIoRVZQX0NJUEhFUl9DVFhfbmV3KCkpKSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGNvbnN0IHNpemVfdCBibG9ja3MgPSByb3VuZFVw
VG9NdWx0aXBsZU9mKGJsb2NrU2l6ZSwgaW5wdXRUZXh0LnNpemUoKSkgLyBibG9ja1NpemU7CisK
KyAgICAvLyBEZXRlY3QgbG9vcAorICAgIGlmIChjb3VudGVyTGVuZ3RoIDwgc2l6ZW9mKHNpemVf
dCkgKiA4ICYmIGJsb2NrcyA+ICgoc2l6ZV90KTEgPDwgY291bnRlckxlbmd0aCkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAvLyBDYWxjdWxhdGUgY2FwYWNpdHkgYmVmb3Jl
IG92ZXJmbG93CisgICAgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6Q291bnRlckJsb2NrSGVscGVy
IGNvdW50ZXJCbG9ja0hlbHBlcihjb3VudGVyLCBjb3VudGVyTGVuZ3RoKTsKKyAgICBzaXplX3Qg
Y2FwYWNpdHkgPSBjb3VudGVyQmxvY2tIZWxwZXIuY291bnRUb092ZXJmbG93U2F0dXJhdGluZygp
OworCisgICAgLy8gRGl2aWRlIGRhdGEgaW50byB0d28gcGFydHMgaWYgbmVjZXNzYXJ5CisgICAg
c2l6ZV90IGhlYWRTaXplID0gaW5wdXRUZXh0LnNpemUoKTsKKyAgICBpZiAoY2FwYWNpdHkgPCBi
bG9ja3MpCisgICAgICAgIGhlYWRTaXplID0gY2FwYWNpdHkgKiBibG9ja1NpemU7CisKKyAgICBW
ZWN0b3I8dWludDhfdD4gb3V0cHV0VGV4dChpbnB1dFRleHQuc2l6ZSgpKTsKKyAgICAvLyBGaXJz
dCBwYXJ0CisgICAgeworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBlbmNyeXB0aW9uKGRlY3J5
cHRpb24pIG9wZXJhdGlvbgorICAgICAgICBpZiAoMSAhPSBFVlBfQ2lwaGVySW5pdF9leChjdHgu
Z2V0KCksIGFsZ29yaXRobSwgbnVsbHB0ciwga2V5LmRhdGEoKSwgY291bnRlci5kYXRhKCksIG9w
ZXJhdGlvbikpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIC8v
IERpc2FibGUgcGFkZGluZworICAgICAgICBpZiAoMSAhPSBFVlBfQ0lQSEVSX0NUWF9zZXRfcGFk
ZGluZyhjdHguZ2V0KCksIDApKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgICAgICAvLyBQcm92aWRlIHRoZSBtZXNzYWdlIHRvIGJlIGVuY3J5cHRlZChkZWNyeXB0ZWQp
LCBhbmQgb2J0YWluIHRoZSBlbmNyeXB0ZWQoZGVjcnlwdGVkKSBvdXRwdXQKKyAgICAgICAgaWYg
KDEgIT0gRVZQX0NpcGhlclVwZGF0ZShjdHguZ2V0KCksIG91dHB1dFRleHQuZGF0YSgpLCAmbGVu
LCBpbnB1dFRleHQuZGF0YSgpLCBoZWFkU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgICAgIC8vIEZpbmFsaXplIHRoZSBlbmNyeXB0aW9uKGRlY3J5cHRpb24p
CisgICAgICAgIGlmICgxICE9IEVWUF9DaXBoZXJGaW5hbF9leChjdHguZ2V0KCksIG91dHB1dFRl
eHQuZGF0YSgpICsgbGVuLCAmbGVuKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgfQorCisgICAgLy8gU2Vkb25kIHBhcnQKKyAgICBpZiAoY2FwYWNpdHkgPCBibG9ja3Mp
IHsKKyAgICAgICAgc2l6ZV90IHRhaWxTaXplID0gaW5wdXRUZXh0LnNpemUoKSAtIGhlYWRTaXpl
OworCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiByZW1haW5pbmdDb3VudGVyID0gY291bnRlckJs
b2NrSGVscGVyLmNvdW50ZXJWZWN0b3JBZnRlck92ZXJmbG93KCk7CisKKyAgICAgICAgLy8gSW5p
dGlhbGl6ZSB0aGUgZW5jcnlwdGlvbihkZWNyeXB0aW9uKSBvcGVyYXRpb24KKyAgICAgICAgaWYg
KDEgIT0gRVZQX0NpcGhlckluaXRfZXgoY3R4LmdldCgpLCBhbGdvcml0aG0sIG51bGxwdHIsIGtl
eS5kYXRhKCksIHJlbWFpbmluZ0NvdW50ZXIuZGF0YSgpLCBvcGVyYXRpb24pKQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICAvLyBEaXNhYmxlIHBhZGRpbmcKKyAg
ICAgICAgaWYgKDEgIT0gRVZQX0NJUEhFUl9DVFhfc2V0X3BhZGRpbmcoY3R4LmdldCgpLCAwKSkK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgLy8gUHJvdmlkZSB0
aGUgbWVzc2FnZSB0byBiZSBlbmNyeXB0ZWQoZGVjcnlwdGVkKSwgYW5kIG9idGFpbiB0aGUgZW5j
cnlwdGVkKGRlY3J5cHRlZCkgb3V0cHV0CisgICAgICAgIGlmICgxICE9IEVWUF9DaXBoZXJVcGRh
dGUoY3R4LmdldCgpLCBvdXRwdXRUZXh0LmRhdGEoKSArIGhlYWRTaXplLCAmbGVuLCBpbnB1dFRl
eHQuZGF0YSgpICsgaGVhZFNpemUsIHRhaWxTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICAgICAgLy8gRmluYWxpemUgdGhlIGVuY3J5cHRpb24oZGVjcnlwdGlv
bikKKyAgICAgICAgaWYgKDEgIT0gRVZQX0NpcGhlckZpbmFsX2V4KGN0eC5nZXQoKSwgb3V0cHV0
VGV4dC5kYXRhKCkgKyBoZWFkU2l6ZSArIGxlbiwgJmxlbikpCisgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIH0KKworICAgIHJldHVybiBvdXRwdXRUZXh0OworfQorCitFeGNl
cHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3Jt
RW5jcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNDdHJQYXJhbXMmIHBhcmFtZXRlcnMsIGNv
bnN0IENyeXB0b0tleUFFUyYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHBsYWluVGV4dCkK
K3sKKyAgICBhdXRvIG91dHB1dCA9IGNyeXB0KDEsIGtleS5rZXkoKSwgcGFyYW1ldGVycy5jb3Vu
dGVyVmVjdG9yKCksIHBhcmFtZXRlcnMubGVuZ3RoLCBwbGFpblRleHQpOworICAgIGlmICghb3V0
cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICBy
ZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0KIAotRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+
PiBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybURlY3J5cHQoY29uc3QgQ3J5cHRvQWxn
b3JpdGhtQWVzQ3RyUGFyYW1zJiwgY29uc3QgQ3J5cHRvS2V5QUVTJiwgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JikKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVT
X0NUUjo6cGxhdGZvcm1EZWNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobUFlc0N0clBhcmFtcyYg
cGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5QUVTJiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgY2lwaGVyVGV4dCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBFeGNl
cHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OworICAgIGF1dG8gb3V0cHV0ID0gY3J5cHQoMCwg
a2V5LmtleSgpLCBwYXJhbWV0ZXJzLmNvdW50ZXJWZWN0b3IoKSwgcGFyYW1ldGVycy5sZW5ndGgs
IGNpcGhlclRleHQpOworICAgIGlmICghb3V0cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L29wZW5zc2wvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXT3BlblNTTC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vb3BlbnNzbC9DcnlwdG9BbGdvcml0aG1BRVNfS1dPcGVuU1NMLmNwcAppbmRleCBm
ZGViZjA3MTZlZDEuLmE0NTk0OTM2MjhjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5
cHRvL29wZW5zc2wvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXT3BlblNTTC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXT3BlblNTTC5jcHAK
QEAgLTI5LDIwICsyOSwxMDYgQEAKICNpZiBFTkFCTEUoV0VCX0NSWVBUTykKIAogI2luY2x1ZGUg
IkNyeXB0b0tleUFFUy5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAi
T3BlblNTTENyeXB0b1VuaXF1ZVB0ci5oIgorI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9B
bGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtV3JhcEtleShjb25zdCBDcnlwdG9LZXlBRVMmLCBjb25z
dCBWZWN0b3I8dWludDhfdD4mKQorc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIqIGFlc0FsZ29yaXRo
bShzaXplX3Qga2V5U2l6ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBF
eGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OworICAgIGlmIChrZXlTaXplICogOCA9PSAx
MjgpCisgICAgICAgIHJldHVybiBFVlBfYWVzXzEyOF93cmFwKCk7CisKKyAgICBpZiAoa2V5U2l6
ZSAqIDggPT0gMTkyKQorICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJfd3JhcCgpOworCisgICAg
aWYgKGtleVNpemUgKiA4ID09IDI1NikKKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X3dyYXAo
KTsKKworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPHVp
bnQ4X3Q+PiBjcnlwdFdyYXBLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSkKK3sKKyAgICBjb25zdCBFVlBfQ0lQSEVSKiBhbGdvcml0aG0g
PSBhZXNBbGdvcml0aG0oa2V5LnNpemUoKSk7CisgICAgaWYgKCFhbGdvcml0aG0pCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBFdnBDaXBoZXJDdHhQdHIgY3R4OworICAgIFZl
Y3Rvcjx1aW50OF90PiBjaXBoZXJUZXh0KGRhdGEuc2l6ZSgpICsgOCk7CisgICAgaW50IGxlbjsK
KworICAgIC8vIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgY29udGV4dAorICAgIGlmICghKGN0
eCA9IEV2cENpcGhlckN0eFB0cihFVlBfQ0lQSEVSX0NUWF9uZXcoKSkpKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eC5nZXQo
KSwgRVZQX0NJUEhFUl9DVFhfRkxBR19XUkFQX0FMTE9XKTsKKworICAgIC8vIEluaXRpYWxpemUg
dGhlIGVuY3J5cHRpb24gb3BlcmF0aW9uCisgICAgaWYgKDEgIT0gRVZQX0VuY3J5cHRJbml0X2V4
KGN0eC5nZXQoKSwgYWxnb3JpdGhtLCBudWxscHRyLCBrZXkuZGF0YSgpLCBudWxscHRyKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIC8vIFByb3ZpZGUgdGhlIG1lc3NhZ2Ug
dG8gYmUgZW5jcnlwdGVkLCBhbmQgb2J0YWluIHRoZSBlbmNyeXB0ZWQgb3V0cHV0CisgICAgaWYg
KDEgIT0gRVZQX0VuY3J5cHRVcGRhdGUoY3R4LmdldCgpLCBjaXBoZXJUZXh0LmRhdGEoKSwgJmxl
biwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgIC8vIEZpbmFsaXplIHRoZSBlbmNyeXB0aW9uLiBGdXJ0aGVyIGNpcGhlcnRleHQg
Ynl0ZXMgbWF5IGJlIHdyaXR0ZW4gYXQgdGhpcyBzdGFnZQorICAgIGlmICgxICE9IEVWUF9FbmNy
eXB0RmluYWxfZXgoY3R4LmdldCgpLCBjaXBoZXJUZXh0LmRhdGEoKSArIGxlbiwgJmxlbikpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gY2lwaGVyVGV4dDsKK30K
Kworc3RhdGljIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gY3J5cHRVbndyYXBLZXkoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKK3sKKyAg
ICBjb25zdCBFVlBfQ0lQSEVSKiBhbGdvcml0aG0gPSBhZXNBbGdvcml0aG0oa2V5LnNpemUoKSk7
CisgICAgaWYgKCFhbGdvcml0aG0pCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICBFdnBDaXBoZXJDdHhQdHIgY3R4OworICAgIFZlY3Rvcjx1aW50OF90PiBwbGFpblRleHQoZGF0
YS5zaXplKCkpOworICAgIGludCBsZW47CisgICAgaW50IHBsYWluVGV4dExlbjsKKworICAgIC8v
IENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgY29udGV4dAorICAgIGlmICghKGN0eCA9IEV2cENp
cGhlckN0eFB0cihFVlBfQ0lQSEVSX0NUWF9uZXcoKSkpKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eC5nZXQoKSwgRVZQX0NJ
UEhFUl9DVFhfRkxBR19XUkFQX0FMTE9XKTsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIGRlY3J5
cHRpb24gb3BlcmF0aW9uCisgICAgaWYgKDEgIT0gRVZQX0RlY3J5cHRJbml0X2V4KGN0eC5nZXQo
KSwgYWxnb3JpdGhtLCBudWxscHRyLCBrZXkuZGF0YSgpLCBudWxscHRyKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgIC8vIFByb3ZpZGUgdGhlIG1lc3NhZ2UgdG8gYmUgZGVj
cnlwdGVkLCBhbmQgb2J0YWluIHRoZSBwbGFpbnRleHQgb3V0cHV0CisgICAgaWYgKDEgIT0gRVZQ
X0RlY3J5cHRVcGRhdGUoY3R4LmdldCgpLCBwbGFpblRleHQuZGF0YSgpLCAmbGVuLCBkYXRhLmRh
dGEoKSwgZGF0YS5zaXplKCkpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHBs
YWluVGV4dExlbiA9IGxlbjsKKworICAgIC8vIEZpbmFsaXplIHRoZSBkZWNyeXB0aW9uLiBGdXJ0
aGVyIHBsYWludGV4dCBieXRlcyBtYXkgYmUgd3JpdHRlbiBhdCB0aGlzIHN0YWdlCisgICAgaWYg
KDEgIT0gRVZQX0RlY3J5cHRGaW5hbF9leChjdHguZ2V0KCksIHBsYWluVGV4dC5kYXRhKCkgKyBs
ZW4sICZsZW4pKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHBsYWluVGV4dExl
biArPSBsZW47CisKKyAgICBwbGFpblRleHQuc2hyaW5rKHBsYWluVGV4dExlbik7CisKKyAgICBy
ZXR1cm4gcGxhaW5UZXh0OworfQorCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0
b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1XcmFwS2V5KGNvbnN0IENyeXB0b0tleUFFUyYga2V5
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCit7CisgICAgYXV0byBvdXRwdXQgPSBjcnlw
dFdyYXBLZXkoa2V5LmtleSgpLCBkYXRhKTsKKyAgICBpZiAoIW91dHB1dCkKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yIH07CisgICAgcmV0dXJuIFdURk1vdmUoKm91
dHB1dCk7CiB9CiAKLUV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGht
QUVTX0tXOjpwbGF0Zm9ybVVud3JhcEtleShjb25zdCBDcnlwdG9LZXlBRVMmLCBjb25zdCBWZWN0
b3I8dWludDhfdD4mKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0
aG1BRVNfS1c6OnBsYXRmb3JtVW53cmFwS2V5KGNvbnN0IENyeXB0b0tleUFFUyYga2V5LCBjb25z
dCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKKyAgICBhdXRvIG91dHB1dCA9
IGNyeXB0VW53cmFwS2V5KGtleS5rZXkoKSwgZGF0YSk7CisgICAgaWYgKCFvdXRwdXQpCisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciB9OworICAgIHJldHVybiBXVEZN
b3ZlKCpvdXRwdXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vb3BlbnNzbC9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeU9wZW5T
U0wuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvQ3J5cHRvQWxnb3JpdGhtUmVn
aXN0cnlPcGVuU1NMLmNwcAppbmRleCAyODY2NjQ5N2E1NWIuLmY4Zjc1MjczOTBiMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL29wZW5zc2wvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0
cnlPcGVuU1NMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vb3BlbnNzbC9DcnlwdG9B
bGdvcml0aG1SZWdpc3RyeU9wZW5TU0wuY3BwCkBAIC0zMCw3ICszMCw5IEBACiAKICNpbmNsdWRl
ICJDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQUVT
X0NGQi5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19DVFIuaCIKICNpbmNsdWRlICJD
cnlwdG9BbGdvcml0aG1BRVNfR0NNLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQUVTX0tX
LmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtU0hBMS5oIgogI2luY2x1ZGUgIkNyeXB0b0Fs
Z29yaXRobVNIQTIyNC5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVNIQTI1Ni5oIgpAQCAt
NDMsNyArNDUsOSBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpwbGF0Zm9ybVJlZ2lz
dGVyQWxnb3JpdGhtcygpCiB7CiAgICAgcmVnaXN0ZXJBbGdvcml0aG08Q3J5cHRvQWxnb3JpdGht
QUVTX0NCQz4oKTsKICAgICByZWdpc3RlckFsZ29yaXRobTxDcnlwdG9BbGdvcml0aG1BRVNfQ0ZC
PigpOworICAgIHJlZ2lzdGVyQWxnb3JpdGhtPENyeXB0b0FsZ29yaXRobUFFU19DVFI+KCk7CiAg
ICAgcmVnaXN0ZXJBbGdvcml0aG08Q3J5cHRvQWxnb3JpdGhtQUVTX0dDTT4oKTsKKyAgICByZWdp
c3RlckFsZ29yaXRobTxDcnlwdG9BbGdvcml0aG1BRVNfS1c+KCk7CiAgICAgcmVnaXN0ZXJBbGdv
cml0aG08Q3J5cHRvQWxnb3JpdGhtU0hBMT4oKTsKICAgICByZWdpc3RlckFsZ29yaXRobTxDcnlw
dG9BbGdvcml0aG1TSEEyMjQ+KCk7CiAgICAgcmVnaXN0ZXJBbGdvcml0aG08Q3J5cHRvQWxnb3Jp
dGhtU0hBMjU2PigpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>