<?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>124466</bug_id>
          
          <creation_ts>2013-11-16 23:57:35 -0800</creation_ts>
          <short_desc>Use uint8_t vectors for WebCrypto data</short_desc>
          <delta_ts>2013-11-17 13:39:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (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>
          
          <blocked>122679</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>andersca</cc>
    
    <cc>darin</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>951413</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-16 23:57:35 -0800</bug_when>
    <thetext>Using Vector&lt;char&gt; for key data is somewhat non-idiomatic, and it gets simply dangerous for bignums, because signed arithmetic is not appropriate for bignum digits.

There is no good way to move data between Vector&lt;char&gt; and Vector&lt;uint8_t&gt;, so switching to Vector&lt;uint8_t&gt; requires teaching Base64 code how to produce and consume those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951414</commentid>
    <comment_count>1</comment_count>
      <attachid>217145</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-17 00:14:42 -0800</bug_when>
    <thetext>Created attachment 217145
proposed patch

Not sure if the SignedOrUnsignedCharVectorAdapter and ConstSignedOrUnsignedCharVectorAdapter classes are the very best way to make Base64 work with both types. Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951428</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-17 12:05:54 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=217145) [details]
&gt; proposed patch
&gt; 
&gt; Not sure if the SignedOrUnsignedCharVectorAdapter and ConstSignedOrUnsignedCharVectorAdapter classes are the very best way to make Base64 work with both types. Thoughts?

Seems fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951437</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-17 13:39:53 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/r159390&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217145</attachid>
            <date>2013-11-17 00:14:42 -0800</date>
            <delta_ts>2013-11-17 12:05:27 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>uint8_t.txt</filename>
            <type>text/plain</type>
            <size>48591</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNTkzODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDEzLTExLTE2ICBBbGV4ZXkgUHJvc2t1cnlha292
ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSB1aW50OF90IHZlY3RvcnMgZm9yIFdlYkNy
eXB0byBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjQ0NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBCaW5hcnkgZGF0YSBjYW4gYmUgVVRGLTgsIGluIHdoaWNoIGNhc2UgImNoYXIqIiBpcyBpZGlv
bWF0aWMsIG9yIGl0IGNhbiBiZSBhcmJpdHJhcnkKKyAgICAgICAgYmluYXJ5IGRhdGEsIGluIHdo
aWNoIGNhc2UgInVpbnQ4X3QqIiBpcyBtb3JlIGNvbW1vbi4KKworICAgICAgICBDaGFuZ2VkIGVu
Y29kZSBmdW5jdGlvbnMgdGhhdCB0b29rICJjb25zdCBjaGFyICoiIHRvICJjb25zdCB2b2lkKiIs
IGFuZCBkZWNvZGUKKyAgICAgICAgZnVuY3Rpb25zIHRoYXQgdG9vayAiVmVjdG9yPGNoYXI+JiIg
bm93IHRha2UgYW4gYWRhcHRlciBjbGFzcy4KKworICAgICAgICBUaGUgYWRhcHRlciByZWxpZXMg
b24gVmVjdG9yPGNoYXI+IGFuZCBWZWN0b3I8dWludDhfdD4gY2xhc3NlcyBoYXZpbmcgYW4gaWRl
bnRpY2FsIGxheW91dC4KKworICAgICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5jcHA6CisgICAgICAg
IChXVEY6OmJhc2U2NEVuY29kZSk6CisgICAgICAgIChXVEY6OmJhc2U2NFVSTEVuY29kZSk6Cisg
ICAgICAgIChXVEY6OmJhc2U2NERlY29kZUludGVybmFsKToKKyAgICAgICAgKFdURjo6YmFzZTY0
RGVjb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0VVJMRGVjb2RlKToKKyAgICAgICAgKiB3dGYv
dGV4dC9CYXNlNjQuaDoKKyAgICAgICAgKFdURjo6U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyKToKKyAgICAgICAgKFdURjo6Q29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFk
YXB0ZXIpOgorICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGUpOgorICAgICAgICAoV1RGOjpiYXNl
NjRVUkxFbmNvZGUpOgorCiAyMDEzLTExLTE1ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBw
bGUuY29tPgogCiAgICAgICAgIFN1cHBvcnQgZXhwb3J0aW5nIHN5bW1ldHJpYyBrZXlzIGFzIEpX
SwpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcAkocmV2aXNpb24gMTU5Mzc3KQorKysgU291cmNl
L1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsMjggKzE1Nywy
OCBAQCBpbmxpbmUgdm9pZCBiYXNlNjRFbmNvZGVJbnRlcm5hbChjb25zdCBjCiAgICAgfQogfQog
Ci1TdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwg
QmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK1N0cmluZyBiYXNlNjRFbmNvZGUoY29uc3Qgdm9p
ZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQogewog
ICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoZGF0YSwg
bGVuZ3RoLCByZXN1bHQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKKyAgICBiYXNlNjRFbmNvZGVJ
bnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBw
b2xpY3ksIGJhc2U2NEVuY01hcCk7CiAgICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCBy
ZXN1bHQuc2l6ZSgpKTsKIH0KIAotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgY2hhciogZGF0YSwg
dW5zaWduZWQgbGVuLCBWZWN0b3I8Y2hhcj4mIG91dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eSkKK3ZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbiwgVmVj
dG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCiB7Ci0gICAgYmFzZTY0
RW5jb2RlSW50ZXJuYWwoZGF0YSwgbGVuLCBvdXQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKKyAg
ICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksIGxl
biwgb3V0LCBwb2xpY3ksIGJhc2U2NEVuY01hcCk7CiB9CiAKLVN0cmluZyBiYXNlNjRVUkxFbmNv
ZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorU3RyaW5nIGJhc2U2NFVSTEVu
Y29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgVmVjdG9yPGNo
YXI+IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChkYXRhLCBsZW5ndGgsIHJlc3Vs
dCwgQmFzZTY0VVJMUG9saWN5LCBiYXNlNjRVUkxFbmNNYXApOworICAgIGJhc2U2NEVuY29kZUlu
dGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwgbGVuZ3RoLCByZXN1bHQsIEJh
c2U2NFVSTFBvbGljeSwgYmFzZTY0VVJMRW5jTWFwKTsKICAgICByZXR1cm4gU3RyaW5nKHJlc3Vs
dC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwogfQogCi12b2lkIGJhc2U2NFVSTEVuY29kZShjb25z
dCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFyPiYgb3V0KQordm9pZCBiYXNl
NjRVUkxFbmNvZGUoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuLCBWZWN0b3I8Y2hhcj4m
IG91dCkKIHsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChkYXRhLCBsZW4sIG91dCwgQmFzZTY0
VVJMUG9saWN5LCBiYXNlNjRVUkxFbmNNYXApOworICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0
YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwgbGVuLCBvdXQsIEJhc2U2NFVSTFBvbGljeSwg
YmFzZTY0VVJMRW5jTWFwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTIwMSw2ICsy
MDEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYmFzZTY0RGVjb2RlSW50ZXJuYWwoCiAgICAgICAg
ICAgICBpZiAocG9saWN5ID09IEJhc2U2NEZhaWxPbkludmFsaWRDaGFyYWN0ZXJPckV4Y2Vzc1Bh
ZGRpbmcgJiYgKGxlbmd0aCAlIDQgfHwgZXF1YWxzU2lnbkNvdW50ID4gMikpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJU
KHN0YXRpY19jYXN0PHNpemVfdD4oY2gpIDwgMTI4KTsKICAgICAgICAgICAgIGNoYXIgZGVjb2Rl
ZENoYXJhY3RlciA9IGRlY29kZU1hcFtjaF07CiAgICAgICAgICAgICBpZiAoZGVjb2RlZENoYXJh
Y3RlciAhPSBub25BbHBoYWJldCkgewogICAgICAgICAgICAgICAgIGlmIChlcXVhbHNTaWduQ291
bnQpCkBAIC0yNDgsMTIgKzI0OSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYmFzZTY0RGVjb2Rl
SW50ZXJuYWwoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0
IFN0cmluZyYgaW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNlNjREZWNvZGVQb2xpY3kgcG9saWN5
KQorYm9vbCBiYXNlNjREZWNvZGUoY29uc3QgU3RyaW5nJiBpbiwgU2lnbmVkT3JVbnNpZ25lZENo
YXJWZWN0b3JBZGFwdGVyIG91dCwgQmFzZTY0RGVjb2RlUG9saWN5IHBvbGljeSkKIHsKICAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWw8VUNoYXI+KGluLmNoYXJhY3RlcnMoKSwgaW4ubGVu
Z3RoKCksIG91dCwgcG9saWN5LCBiYXNlNjREZWNNYXApOwogfQogCi1ib29sIGJhc2U2NERlY29k
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGluLCBWZWN0b3I8Y2hhcj4mIG91dCwgQmFzZTY0RGVjb2Rl
UG9saWN5IHBvbGljeSkKK2Jvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4s
IFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBvdXQsIEJhc2U2NERlY29kZVBvbGlj
eSBwb2xpY3kpCiB7CiAgICAgb3V0LmNsZWFyKCk7CiAKQEAgLTI2NCwxNyArMjY1LDE3IEBAIGJv
b2wgYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4KICAgICByZXR1cm4gYmFzZTY0
RGVjb2RlSW50ZXJuYWw8Y2hhcj4oaW4uZGF0YSgpLCBpbi5zaXplKCksIG91dCwgcG9saWN5LCBi
YXNlNjREZWNNYXApOwogfQogCi1ib29sIGJhc2U2NERlY29kZShjb25zdCBjaGFyKiBkYXRhLCB1
bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNlNjREZWNvZGVQb2xpY3kgcG9saWN5
KQorYm9vbCBiYXNlNjREZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuLCBTaWdu
ZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0LCBCYXNlNjREZWNvZGVQb2xpY3kgcG9s
aWN5KQogewogICAgIHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbDxjaGFyPihkYXRhLCBsZW4s
IG91dCwgcG9saWN5LCBiYXNlNjREZWNNYXApOwogfQogCi1ib29sIGJhc2U2NFVSTERlY29kZShj
b25zdCBTdHJpbmcmIGluLCBWZWN0b3I8Y2hhcj4mIG91dCkKK2Jvb2wgYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFN0cmluZyYgaW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBvdXQp
CiB7CiAgICAgcmV0dXJuIGJhc2U2NERlY29kZUludGVybmFsPFVDaGFyPihpbi5jaGFyYWN0ZXJz
KCksIGluLmxlbmd0aCgpLCBvdXQsIEJhc2U2NEZhaWxPbkludmFsaWRDaGFyYWN0ZXIsIGJhc2U2
NFVSTERlY01hcCk7CiB9CiAKLWJvb2wgYmFzZTY0VVJMRGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFy
PiYgaW4sIFZlY3RvcjxjaGFyPiYgb3V0KQorYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVj
dG9yPGNoYXI+JiBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIG91dCkKIHsK
ICAgICBvdXQuY2xlYXIoKTsKIApAQCAtMjg1LDcgKzI4Niw3IEBAIGJvb2wgYmFzZTY0VVJMRGVj
b2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYKICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWw8
Y2hhcj4oaW4uZGF0YSgpLCBpbi5zaXplKCksIG91dCwgQmFzZTY0RmFpbE9uSW52YWxpZENoYXJh
Y3RlciwgYmFzZTY0VVJMRGVjTWFwKTsKIH0KIAotYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3Qg
Y2hhciogZGF0YSwgdW5zaWduZWQgbGVuLCBWZWN0b3I8Y2hhcj4mIG91dCkKK2Jvb2wgYmFzZTY0
VVJMRGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwgU2lnbmVkT3JVbnNpZ25l
ZENoYXJWZWN0b3JBZGFwdGVyIG91dCkKIHsKICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJu
YWw8Y2hhcj4oZGF0YSwgbGVuLCBvdXQsIEJhc2U2NEZhaWxPbkludmFsaWRDaGFyYWN0ZXIsIGJh
c2U2NFVSTERlY01hcCk7CiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHJldmlzaW9uIDE1OTM3
NykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3Yg
PGFwQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIg
PHBhcm9nYUBwYXJvZ2EuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYs
MTggKzQ3LDQ5IEBAIGVudW0gQmFzZTY0RGVjb2RlUG9saWN5IHsKICAgICBCYXNlNjRJZ25vcmVJ
bnZhbGlkQ2hhcmFjdGVycwogfTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5j
b2RlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFz
ZTY0RW5jb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYsIFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29k
ZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKK2NsYXNzIFNpZ25lZE9yVW5zaWduZWRD
aGFyVmVjdG9yQWRhcHRlciB7CitwdWJsaWM6CisgICAgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0
b3JBZGFwdGVyKFZlY3RvcjxjaGFyPiYgdmVjdG9yKSB7IG1fdmVjdG9yLmMgPSAmdmVjdG9yOyB9
CisgICAgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKFZlY3Rvcjx1aW50OF90PiYg
dmVjdG9yKSB7IG1fdmVjdG9yLnUgPSAmdmVjdG9yOyB9CisKKyAgICBvcGVyYXRvciBWZWN0b3I8
Y2hhcj4mKCkgeyByZXR1cm4gKm1fdmVjdG9yLmM7IH0KKyAgICB2b2lkIGNsZWFyKCkgeyBtX3Zl
Y3Rvci5jLT5jbGVhcigpOyB9CisKK3ByaXZhdGU6CisgICAgdW5pb24geworICAgICAgICBWZWN0
b3I8Y2hhcj4qIGM7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiogdTsKKyAgICB9IG1fdmVjdG9y
OworfTsKKworY2xhc3MgQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgewor
cHVibGljOgorICAgIENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKGNvbnN0
IFZlY3RvcjxjaGFyPiYgdmVjdG9yKSB7IG1fdmVjdG9yLmMgPSAmdmVjdG9yOyB9CisgICAgQ29u
c3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiB2ZWN0b3IpIHsgbV92ZWN0b3IudSA9ICZ2ZWN0b3I7IH0KKworICAgIG9wZXJhdG9yIGNvbnN0
IFZlY3RvcjxjaGFyPiYoKSB7IHJldHVybiAqbV92ZWN0b3IuYzsgfQorICAgIGNvbnN0IGNoYXIq
IGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5jLT5kYXRhKCk7IH0KKyAgICBzaXplX3Qg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmMtPnNpemUoKTsgfQorCitwcml2YXRlOgor
ICAgIHVuaW9uIHsKKyAgICAgICAgY29uc3QgVmVjdG9yPGNoYXI+KiBjOworICAgICAgICBjb25z
dCBWZWN0b3I8dWludDhfdD4qIHU7CisgICAgfSBtX3ZlY3RvcjsKK307CisKK1dURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQsIFZlY3Rvcjxj
aGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKK1dURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFy
VmVjdG9yQWRhcHRlciwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0
RG9Ob3RJbnNlcnRMRnMpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNv
bnN0IENTdHJpbmcmLCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjRE
b05vdEluc2VydExGcyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2U2NEVuY29kZShj
b25zdCBjaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5z
ZXJ0TEZzKTsKLVdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IFZl
Y3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsK
K1dURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNp
Z25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOworV1RGX0VY
UE9SVF9QUklWQVRFIFN0cmluZyBiYXNlNjRFbmNvZGUoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hh
clZlY3RvckFkYXB0ZXIsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZz
KTsKIFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IENTdHJpbmcm
LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExGcyk7CiAKLVdURl9FWFBP
UlRfUFJJVkFURSBib29sIGJhc2U2NERlY29kZShjb25zdCBTdHJpbmcmLCBWZWN0b3I8Y2hhcj4m
LCBCYXNlNjREZWNvZGVQb2xpY3kgPSBCYXNlNjRGYWlsT25JbnZhbGlkQ2hhcmFjdGVyKTsKLVdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBW
ZWN0b3I8Y2hhcj4mLCBCYXNlNjREZWNvZGVQb2xpY3kgPSBCYXNlNjRGYWlsT25JbnZhbGlkQ2hh
cmFjdGVyKTsKLVdURl9FWFBPUlRfUFJJVkFURSBib29sIGJhc2U2NERlY29kZShjb25zdCBjaGFy
KiwgdW5zaWduZWQsIFZlY3RvcjxjaGFyPiYsIEJhc2U2NERlY29kZVBvbGljeSA9IEJhc2U2NEZh
aWxPbkludmFsaWRDaGFyYWN0ZXIpOworV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVj
b2RlKGNvbnN0IFN0cmluZyYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgQmFz
ZTY0RGVjb2RlUG9saWN5ID0gQmFzZTY0RmFpbE9uSW52YWxpZENoYXJhY3Rlcik7CitXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgU2lnbmVk
T3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCBCYXNlNjREZWNvZGVQb2xpY3kgPSBCYXNlNjRG
YWlsT25JbnZhbGlkQ2hhcmFjdGVyKTsKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGJhc2U2NERl
Y29kZShjb25zdCBjaGFyKiwgdW5zaWduZWQsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciwgQmFzZTY0RGVjb2RlUG9saWN5ID0gQmFzZTY0RmFpbE9uSW52YWxpZENoYXJhY3Rlcik7
CiAKLWlubGluZSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mIGluLCBWZWN0
b3I8Y2hhcj4mIG91dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK2lubGluZSB2b2lkIGJh
c2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbiwgVmVj
dG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCiB7CiAgICAgYmFzZTY0
RW5jb2RlKGluLmRhdGEoKSwgaW4uc2l6ZSgpLCBvdXQsIHBvbGljeSk7CiB9CkBAIC02Nyw3ICs5
OSw3IEBAIGlubGluZSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiAKICAgICBiYXNl
NjRFbmNvZGUoaW4uZGF0YSgpLCBpbi5sZW5ndGgoKSwgb3V0LCBwb2xpY3kpOwogfQogCi1pbmxp
bmUgU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mIGluLCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5KQoraW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGUoQ29uc3RTaWduZWRP
clVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgaW4sIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kp
CiB7CiAgICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbi5kYXRhKCksIGluLnNpemUoKSwgcG9saWN5
KTsKIH0KQEAgLTgyLDE4ICsxMTQsMTggQEAgaW5saW5lIFN0cmluZyBiYXNlNjRFbmNvZGUoY29u
c3QgQ1N0cmluZwogLy8gVGhpcyBmb3JtYXQgdXNlcyAnLScgYW5kICdfJyBpbnN0ZWFkIG9mICcr
JyBhbmQgJy8nIHJlc3BlY3RpdmVseS4KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CiAKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NFVSTEVuY29kZShjb25zdCBjaGFyKiwg
dW5zaWduZWQsIFZlY3RvcjxjaGFyPiYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0
VVJMRW5jb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYsIFZlY3RvcjxjaGFyPiYpOworV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgVmVj
dG9yPGNoYXI+Jik7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRVUkxFbmNvZGUoQ29u
c3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIsIFZlY3RvcjxjaGFyPiYpOwogV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0VVJMRW5jb2RlKGNvbnN0IENTdHJpbmcmLCBWZWN0
b3I8Y2hhcj4mKTsKLVdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNv
bnN0IGNoYXIqLCB1bnNpZ25lZCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2U2NFVS
TEVuY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mKTsKK1dURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcg
YmFzZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCk7CitXVEZfRVhQT1JUX1BSSVZB
VEUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9y
QWRhcHRlcik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2U2NFVSTEVuY29kZShjb25z
dCBDU3RyaW5nJik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBib29sIGJhc2U2NFVSTERlY29kZShj
b25zdCBTdHJpbmcmLCBWZWN0b3I8Y2hhcj4mKTsKLVdURl9FWFBPUlRfUFJJVkFURSBib29sIGJh
c2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBWZWN0b3I8Y2hhcj4mKTsKLVdURl9F
WFBPUlRfUFJJVkFURSBib29sIGJhc2U2NFVSTERlY29kZShjb25zdCBjaGFyKiwgdW5zaWduZWQs
IFZlY3RvcjxjaGFyPiYpOworV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0VVJMRGVjb2Rl
KGNvbnN0IFN0cmluZyYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcik7CitXVEZf
RVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+Jiwg
U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKK1dURl9FWFBPUlRfUFJJVkFURSBi
b29sIGJhc2U2NFVSTERlY29kZShjb25zdCBjaGFyKiwgdW5zaWduZWQsIFNpZ25lZE9yVW5zaWdu
ZWRDaGFyVmVjdG9yQWRhcHRlcik7CiAKLWlubGluZSB2b2lkIGJhc2U2NFVSTEVuY29kZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGluLCBWZWN0b3I8Y2hhcj4mIG91dCkKK2lubGluZSB2b2lkIGJhc2U2
NFVSTEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbiwgVmVj
dG9yPGNoYXI+JiBvdXQpCiB7CiAgICAgYmFzZTY0VVJMRW5jb2RlKGluLmRhdGEoKSwgaW4uc2l6
ZSgpLCBvdXQpOwogfQpAQCAtMTAzLDcgKzEzNSw3IEBAIGlubGluZSB2b2lkIGJhc2U2NFVSTEVu
Y29kZShjb25zdCBDU3RyaW4KICAgICBiYXNlNjRVUkxFbmNvZGUoaW4uZGF0YSgpLCBpbi5sZW5n
dGgoKSwgb3V0KTsKIH0KIAotaW5saW5lIFN0cmluZyBiYXNlNjRVUkxFbmNvZGUoY29uc3QgVmVj
dG9yPGNoYXI+JiBpbikKK2lubGluZSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlKENvbnN0U2lnbmVk
T3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIGluKQogewogICAgIHJldHVybiBiYXNlNjRVUkxF
bmNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MTU5Mzg0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsNTMgQEAKKzIwMTMtMTEtMTYgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5j
b20+CisKKyAgICAgICAgVXNlIHVpbnQ4X3QgdmVjdG9ycyBmb3IgV2ViQ3J5cHRvIGRhdGEKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDQ2NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzaW5nIFZlY3Rv
cjxjaGFyPiBmb3IgY3J5cHRvIGtleSBkYXRhIGlzIHNvbWV3aGF0IG5vbi1pZGlvbWF0aWMsIGFu
ZCBpdCBnZXRzIHNpbXBseQorICAgICAgICBkYW5nZXJvdXMgZm9yIGJpZ251bXMsIGJlY2F1c2Ug
c2lnbmVkIGFyaXRobWV0aWMgaXMgbm90IGFwcHJvcHJpYXRlIGZvciBiaWdudW0gZGlnaXRzLgor
CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpnZW5lcmF0ZVNlY1dlYlNvY2tldEtleSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmdldEV4cGVjdGVkV2ViU29ja2V0QWNjZXB0KToKKyAg
ICAgICAgTm8gbG9uZ2VyIG5lZWQgdG8gY2FzdCBkYXRhIHRvIGNoYXIqIGhlcmUuCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0suY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5oOgorICAgICAgICAq
IGNyeXB0by9DcnlwdG9EaWdlc3QuaDoKKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvS2V5Lmg6Cisg
ICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcDoKKyAgICAgICAgKiBjcnlwdG8v
a2V5cy9DcnlwdG9LZXlBRVMuaDoKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlEYXRh
T2N0ZXRTZXF1ZW5jZS5oOgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleURhdGFSU0FD
b21wb25lbnRzLmNwcDoKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlEYXRhUlNBQ29t
cG9uZW50cy5oOgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwOgorICAg
ICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaDoKKyAgICAgICAgKiBjcnlwdG8va2V5
cy9DcnlwdG9LZXlSU0EuaDoKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlTZXJpYWxp
emF0aW9uUmF3LmNwcDoKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlTZXJpYWxpemF0
aW9uUmF3Lmg6CisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFj
LmNwcDoKKyAgICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwOgor
ICAgICAgICAqIGNyeXB0by9tYWMvQ3J5cHRvRGlnZXN0TWFjLmNwcDoKKyAgICAgICAgKiBjcnlw
dG8vbWFjL0NyeXB0b0tleU1hYy5jcHA6CisgICAgICAgICogY3J5cHRvL3BhcmFtZXRlcnMvQ3J5
cHRvQWxnb3JpdGhtUnNhS2V5R2VuUGFyYW1zLmg6CisgICAgICAgIFN3aXRjaGVkIHRvIFZlY3Rv
cjx1aW50OF90Pi4KKworICAgICAgICAqIGNyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmdldFB1YmxpY0tleUNvbXBvbmVudHMpOiBFeHRyYWN0ZWQgZnJv
bSBidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKCkgYW5kIHNpbXBsaWZpZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDcnlwdG9LZXlSU0E6OmNyZWF0ZSk6IFN3aXRjaGVkIHRvIFZlY3Rvcjx1aW50OF90
Pi4KKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleVJTQTo6YnVpbGRBbGdvcml0aG1EZXNjcmlw
dGlvbik6IE5vIGxvbmdlciBuZWVkIHRvIGNvcHkgZGF0YSBqdXN0CisgICAgICAgIHRvIGNoYW5n
ZSB0eXBlIGZyb20gVmVjdG9yPGNoYXI+IHRvIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPi4KKyAgICAg
ICAgKFdlYkNvcmU6OmJpZ0ludGVnZXJUb1VJbnQzMik6IERpdHRvLiBObyBsb25nZXIgbmVlZCB0
byBjYXN0IHR5cGVzIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBiaWdudW0uCisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9LZXlSU0E6OmdlbmVyYXRlUGFpcik6IEltcHJvdmVkIGFuIGVycm9yIG1lc3Nh
Z2UgYSBsaXR0bGUuCisKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwOiAo
V2ViQ29yZTo6RmlsZVJlYWRlckxvYWRlcjo6Y29udmVydFRvRGF0YVVSTCk6CisgICAgICAgICog
aW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHA6IChXZWJDb3JlOjpET01QYXRjaFN1cHBvcnQ6
OmNyZWF0ZURpZ2VzdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5j
cHA6IChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmFyY2hpdmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOiAoV2ViQ29yZTo6Q0dJbWFnZVRv
RGF0YVVSTCk6CisgICAgICAgIE5vIGxvbmdlciBuZWVkIHRvIGNhc3QgZGF0YSB0byBjaGFyKiBo
ZXJlLgorCiAyMDEzLTExLTE2ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgog
CiAgICAgICAgIFdlYkNyeXB0byBubyBsb25nZXIgdXNlcyBzZXF1ZW5jZXMgb2YgQXJyYXlCdWZm
ZXJzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFu
ZHNoYWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tl
dHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkocmV2aXNpb24gMTU5Mzc3KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlU2VjV2ViU29j
a2V0S2V5KCkKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbmNlU2l6ZSA9IDE2OwogICAgIHVu
c2lnbmVkIGNoYXIga2V5W25vbmNlU2l6ZV07CiAgICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21W
YWx1ZXMoa2V5LCBub25jZVNpemUpOwotICAgIHJldHVybiBiYXNlNjRFbmNvZGUocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oa2V5KSwgbm9uY2VTaXplKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2Rl
KGtleSwgbm9uY2VTaXplKTsKIH0KIAogU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhw
ZWN0ZWRXZWJTb2NrZXRBY2NlcHQoY29uc3QgU3RyaW5nJiBzZWNXZWJTb2NrZXRLZXkpCkBAIC0x
MTYsNyArMTE2LDcgQEAgU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZQog
ICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4od2ViU29j
a2V0S2V5R1VJRCksIHN0cmxlbih3ZWJTb2NrZXRLZXlHVUlEKSk7CiAgICAgVmVjdG9yPHVpbnQ4
X3QsIHNoYTFIYXNoU2l6ZT4gaGFzaDsKICAgICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAg
IHJldHVybiBiYXNlNjRFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaGFzaC5k
YXRhKCkpLCBzaGExSGFzaFNpemUpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGUoaGFzaC5kYXRh
KCksIHNoYTFIYXNoU2l6ZSk7CiB9CiAKIFdlYlNvY2tldEhhbmRzaGFrZTo6V2ViU29ja2V0SGFu
ZHNoYWtlKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sLCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0suY3BwCShyZXZpc2lv
biAxNTkzNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlh
bGl6YXRpb25KV0suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgc3RhdGlj
IGJvb2wgZ2V0Qm9vbGVhbkZyb21KU09OKEV4ZWNTdGF0ZQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgYm9vbCBnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04oRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCoganNvbiwgY29uc3QgY2hhcioga2V5LCBWZWN0b3I8Y2hhcj4mIHJlc3VsdCkK
K3N0YXRpYyBib29sIGdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBqc29uLCBjb25zdCBjaGFyKiBrZXksIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0
KQogewogICAgIFN0cmluZyBiYXNlNjR1cmxFbmNvZGVkTnVtYmVyOwogICAgIGlmICghZ2V0U3Ry
aW5nRnJvbUpTT04oZXhlYywganNvbiwga2V5LCBiYXNlNjR1cmxFbmNvZGVkTnVtYmVyKSkKQEAg
LTI4OSw3ICsyODksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gSlNDcnlwdG9L
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIFZlY3RvcjxjaGFyPiBvY3Rl
dFNlcXVlbmNlOworICAgIFZlY3Rvcjx1aW50OF90PiBvY3RldFNlcXVlbmNlOwogICAgIGlmICgh
YmFzZTY0VVJMRGVjb2RlKGtleUJhc2U2NFVSTCwgb2N0ZXRTZXF1ZW5jZSkpIHsKICAgICAgICAg
dGhyb3dUeXBlRXJyb3IobV9leGVjLCAiQ2Fubm90IGRlY29kZSBiYXNlNjR1cmwga2V5IGRhdGEg
aW4gSldLIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzA1LDkgKzMwNSw5IEBAIHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBKU0NyeXB0b0sKIAogc3RkOjp1bmlxdWVfcHRy
PENyeXB0b0tleURhdGE+IEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6a2V5RGF0YVJTQUNv
bXBvbmVudHMoKSBjb25zdAogewotICAgIFZlY3RvcjxjaGFyPiBtb2R1bHVzOwotICAgIFZlY3Rv
cjxjaGFyPiBleHBvbmVudDsKLSAgICBWZWN0b3I8Y2hhcj4gcHJpdmF0ZUV4cG9uZW50OworICAg
IFZlY3Rvcjx1aW50OF90PiBtb2R1bHVzOworICAgIFZlY3Rvcjx1aW50OF90PiBleHBvbmVudDsK
KyAgICBWZWN0b3I8dWludDhfdD4gcHJpdmF0ZUV4cG9uZW50OwogCiAgICAgaWYgKCFnZXRCaWdJ
bnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJuIiwgbW9kdWx1cykp
IHsKICAgICAgICAgaWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQpAQCAtNDE2LDcgKzQxNiw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBKU0NyeXB0b0sKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotdm9pZCBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OmJ1aWxkSlNP
TkZvck9jdGV0U2VxdWVuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtl
eURhdGEsIEpTT2JqZWN0KiByZXN1bHQpCit2b2lkIEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpX
Szo6YnVpbGRKU09ORm9yT2N0ZXRTZXF1ZW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5RGF0YSwgSlNPYmplY3QqIHJlc3VsdCkKIHsKICAgICBhZGRUb0pTT04o
ZXhlYywgcmVzdWx0LCAia3R5IiwgIm9jdCIpOwogICAgIGFkZFRvSlNPTihleGVjLCByZXN1bHQs
ICJrIiwgYmFzZTY0VVJMRW5jb2RlKGtleURhdGEpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5oCShy
ZXZpc2lvbiAxNTkzNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tl
eVNlcmlhbGl6YXRpb25KV0suaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcml2
YXRlOgogCiAgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4ga2V5RGF0
YSgpIGNvbnN0IE9WRVJSSURFOwogCi0gICAgc3RhdGljIHZvaWQgYnVpbGRKU09ORm9yT2N0ZXRT
ZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFZlY3RvcjxjaGFyPiYsIEpTQzo6SlNPYmpl
Y3QqIHJlc3VsdCk7CisgICAgc3RhdGljIHZvaWQgYnVpbGRKU09ORm9yT2N0ZXRTZXF1ZW5jZShK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIEpTQzo6SlNPYmplY3QqIHJl
c3VsdCk7CiAgICAgc3RhdGljIHZvaWQgYWRkSldLQWxnb3JpdGhtVG9KU09OKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU09iamVjdCosIGNvbnN0IENyeXB0b0tleSYga2V5KTsKICAgICBzdGF0aWMg
dm9pZCBhZGRKV0tVc2VUb0pTT04oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgQ3J5
cHRvS2V5VXNhZ2UpOwogICAgIHN0YXRpYyB2b2lkIGFkZFRvSlNPTihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNPYmplY3QqLCBjb25zdCBjaGFyKiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92
MV81TWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxn
b3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwCShyZXZpc2lvbiAxNTkzNzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsOSArMTEzLDkgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1S
U0FTU0FfUEtDUzFfdjFfNTo6cwogCiAgICAgZGlnZXN0LT5hZGRCeXRlcyhkYXRhLmZpcnN0LCBk
YXRhLnNlY29uZCk7CiAKLSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gZGlnZXN0RGF0YSA9IGRp
Z2VzdC0+Y29tcHV0ZUhhc2goKTsKKyAgICBWZWN0b3I8dWludDhfdD4gZGlnZXN0RGF0YSA9IGRp
Z2VzdC0+Y29tcHV0ZUhhc2goKTsKIAotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBzaWduYXR1
cmUoNTEyKTsKKyAgICBWZWN0b3I8dWludDhfdD4gc2lnbmF0dXJlKDUxMik7CiAgICAgc2l6ZV90
IHNpZ25hdHVyZVNpemUgPSBzaWduYXR1cmUuc2l6ZSgpOwogCiAgICAgQ0NDcnlwdG9yU3RhdHVz
IHN0YXR1cyA9IENDUlNBQ3J5cHRvclNpZ24ocnNhS2V5LnBsYXRmb3JtS2V5KCksIGNjUEtDUzFQ
YWRkaW5nLCBkaWdlc3REYXRhLmRhdGEoKSwgZGlnZXN0RGF0YS5zaXplKCksIGRpZ2VzdEFsZ29y
aXRobSwgMCwgc2lnbmF0dXJlLmRhdGEoKSwgJnNpZ25hdHVyZVNpemUpOwpAQCAtMTUyLDcgKzE1
Miw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OnYKIAogICAgIGRp
Z2VzdC0+YWRkQnl0ZXMoZGF0YS5maXJzdCwgZGF0YS5zZWNvbmQpOwogCi0gICAgVmVjdG9yPHVu
c2lnbmVkIGNoYXI+IGRpZ2VzdERhdGEgPSBkaWdlc3QtPmNvbXB1dGVIYXNoKCk7CisgICAgVmVj
dG9yPHVpbnQ4X3Q+IGRpZ2VzdERhdGEgPSBkaWdlc3QtPmNvbXB1dGVIYXNoKCk7CiAKICAgICBD
Q0NyeXB0b3JTdGF0dXMgc3RhdHVzID0gQ0NSU0FDcnlwdG9yVmVyaWZ5KHJzYUtleS5wbGF0Zm9y
bUtleSgpLCBjY1BLQ1MxUGFkZGluZywgZGlnZXN0RGF0YS5kYXRhKCksIGRpZ2VzdERhdGEuc2l6
ZSgpLCBkaWdlc3RBbGdvcml0aG0sIDAsIHNpZ25hdHVyZS5maXJzdCwgc2lnbmF0dXJlLnNlY29u
ZCk7CiAgICAgaWYgKCFzdGF0dXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRv
RGlnZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0RpZ2Vz
dC5oCShyZXZpc2lvbiAxNTkzNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvRGln
ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIH5Dcnlw
dG9EaWdlc3QoKTsKIAogICAgIHZvaWQgYWRkQnl0ZXMoY29uc3Qgdm9pZCogaW5wdXQsIHNpemVf
dCBsZW5ndGgpOwotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBjb21wdXRlSGFzaCgpOworICAg
IFZlY3Rvcjx1aW50OF90PiBjb21wdXRlSGFzaCgpOwogCiBwcml2YXRlOgogICAgIENyeXB0b0Rp
Z2VzdCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5jcHAJKHJldmlzaW9uIDE1
OTM3NykKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04OSw5ICs4OSw5IEBAIFZlY3RvcjxTdHJpbmc+IENyeXB0b0tleTo6dXNhZ2VzKCkg
Y29uc3QKIH0KIAogI2lmICFQTEFURk9STShNQUMpCi1WZWN0b3I8Y2hhcj4gQ3J5cHRvS2V5Ojpy
YW5kb21EYXRhKHNpemVfdCBzaXplKQorVmVjdG9yPHVpbnQ4X3Q+IENyeXB0b0tleTo6cmFuZG9t
RGF0YShzaXplX3Qgc2l6ZSkKIHsKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0KHNpemUpOworICAg
IFZlY3Rvcjx1aW50OF90PiByZXN1bHQoc2l6ZSk7CiAgICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21WYWx1ZXMocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgJKHJldmlzaW9uIDE1OTM3NykK
KysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAkod29ya2luZyBjb3B5KQpAQCAt
NjQsNyArNjQsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9LZXlEYXRhPiBleHBvcnREYXRhKCkgY29uc3QgPSAwOwogCi0gICAgc3RhdGljIFZlY3Rvcjxj
aGFyPiByYW5kb21EYXRhKHNpemVfdCk7CisgICAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiByYW5k
b21EYXRhKHNpemVfdCk7CiAKIHByaXZhdGU6CiAgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
ciBtX2FsZ29yaXRobTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tl
eUFFUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRv
S2V5QUVTLmNwcAkocmV2aXNpb24gMTU5Mzc3KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5QUVTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNyeXB0b0tleUFFUzo6Q3J5cHRvS2V5QUVTKENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgYm9v
bCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UpCitDcnlwdG9LZXlBRVM6OkNyeXB0
b0tleUFFUyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlKQog
ICAgIDogQ3J5cHRvS2V5KGFsZ29yaXRobSwgQ3J5cHRvS2V5VHlwZTo6U2VjcmV0LCBleHRyYWN0
YWJsZSwgdXNhZ2UpCiAgICAgLCBtX2tleShrZXkpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuaAkocmV2aXNpb24gMTU5Mzc3KQorKysgU291cmNlL1dl
YkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDcnlwdG9LZXlBRVMgRklOQUwg
OiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcnlw
dG9LZXlBRVM+IGNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgY29u
c3QgVmVjdG9yPGNoYXI+JiBrZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVz
YWdlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENyeXB0b0tleUFFUz4gY3JlYXRlKENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwg
Ym9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UpCiAgICAgewogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENyeXB0b0tleUFFUyhhbGdvcml0aG0sIGtleSwgZXh0cmFjdGFi
bGUsIHVzYWdlKSk7CiAgICAgfQpAQCAtNDYsMTUgKzQ2LDE1IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBD
cnlwdG9LZXlDbGFzczo6QUVTOyB9CiAKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSgpIGNv
bnN0IHsgcmV0dXJuIG1fa2V5OyB9CisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXkoKSBj
b25zdCB7IHJldHVybiBtX2tleTsgfQogCiBwcml2YXRlOgotICAgIENyeXB0b0tleUFFUyhDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgYm9vbCBleHRy
YWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UpOworICAgIENyeXB0b0tleUFFUyhDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgYm9vbCBleHRyYWN0YWJs
ZSwgQ3J5cHRvS2V5VXNhZ2UpOwogCiAgICAgdmlydHVhbCB2b2lkIGJ1aWxkQWxnb3JpdGhtRGVz
Y3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJikgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gZXhwb3J0RGF0
YSgpIGNvbnN0IE9WRVJSSURFOwogCi0gICAgVmVjdG9yPGNoYXI+IG1fa2V5OworICAgIFZlY3Rv
cjx1aW50OF90PiBtX2tleTsKIH07CiAKIGlubGluZSBib29sIGlzQ3J5cHRvS2V5QUVTKGNvbnN0
IENyeXB0b0tleSYga2V5KQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRv
S2V5RGF0YU9jdGV0U2VxdWVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlLmNwcAkocmV2aXNpb24gMTU5Mzc3
KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVu
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2U6OkNyeXB0b0tleURhdGFPY3RldFNl
cXVlbmNlKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkKK0NyeXB0b0tleURhdGFPY3RldFNlcXVl
bmNlOjpDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGRh
dGEpCiAgICAgOiBDcnlwdG9LZXlEYXRhKENyeXB0b0tleURhdGE6OkZvcm1hdDo6T2N0ZXRTZXF1
ZW5jZSkKICAgICAsIG1fa2V5RGF0YShkYXRhKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZS5oCShyZXZp
c2lvbiAxNTkzNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlEYXRh
T2N0ZXRTZXF1ZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxOCArMzUsMTggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZSBGSU5BTCA6
IHB1YmxpYyBDcnlwdG9LZXlEYXRhIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPENyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlPiBjcmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+
JiBrZXlEYXRhKQorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YU9jdGV0
U2VxdWVuY2U+IGNyZWF0ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleURhdGEpCiAgICAgewog
ICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGFPY3RldFNlcXVlbmNl
PihuZXcgQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2Uoa2V5RGF0YSkpOwogICAgIH0KICAgICB2
aXJ0dWFsIH5DcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZSgpOwogCi0gICAgY29uc3QgVmVjdG9y
PGNoYXI+JiBvY3RldFNlcXVlbmNlKCkgY29uc3QgeyByZXR1cm4gbV9rZXlEYXRhOyB9CisgICAg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBvY3RldFNlcXVlbmNlKCkgY29uc3QgeyByZXR1cm4gbV9r
ZXlEYXRhOyB9CiAKIHByaXZhdGU6Ci0gICAgQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UoY29u
c3QgVmVjdG9yPGNoYXI+Jik7CisgICAgQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+Jik7CiAKLSAgICBWZWN0b3I8Y2hhcj4gbV9rZXlEYXRhOworICAgIFZl
Y3Rvcjx1aW50OF90PiBtX2tleURhdGE7CiB9OwogCiBpbmxpbmUgYm9vbCBpc0NyeXB0b0tleURh
dGFPY3RldFNlcXVlbmNlKGNvbnN0IENyeXB0b0tleURhdGEmIGRhdGEpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YVJTQUNvbXBv
bmVudHMuY3BwCShyZXZpc2lvbiAxNTkzNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5
cy9DcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcg
KzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DcnlwdG9LZXlEYXRhUlNBQ29tcG9u
ZW50czo6Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMoY29uc3QgVmVjdG9yPGNoYXI+JiBtb2R1
bHVzLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGV4cG9uZW50KQorQ3J5cHRvS2V5RGF0YVJTQUNvbXBv
bmVudHM6OkNyeXB0b0tleURhdGFSU0FDb21wb25lbnRzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
bW9kdWx1cywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBleHBvbmVudCkKICAgICA6IENyeXB0b0tl
eURhdGEoQ3J5cHRvS2V5RGF0YTo6Rm9ybWF0OjpSU0FDb21wb25lbnRzKQogICAgICwgbV90eXBl
KFR5cGU6OlB1YmxpYykKICAgICAsIG1fbW9kdWx1cyhtb2R1bHVzKQpAQCAtMzgsNyArMzgsNyBA
QCBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Q3J5cHRvS2V5RGF0CiB7CiB9CiAKLUNyeXB0
b0tleURhdGFSU0FDb21wb25lbnRzOjpDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cyhjb25zdCBW
ZWN0b3I8Y2hhcj4mIG1vZHVsdXMsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZXhwb25lbnQsIGNvbnN0
IFZlY3RvcjxjaGFyPiYgcHJpdmF0ZUV4cG9uZW50KQorQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVu
dHM6OkNyeXB0b0tleURhdGFSU0FDb21wb25lbnRzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbW9k
dWx1cywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBleHBvbmVudCwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBwcml2YXRlRXhwb25lbnQpCiAgICAgOiBDcnlwdG9LZXlEYXRhKENyeXB0b0tleURhdGE6
OkZvcm1hdDo6UlNBQ29tcG9uZW50cykKICAgICAsIG1fdHlwZShUeXBlOjpQcml2YXRlKQogICAg
ICwgbV9tb2R1bHVzKG1vZHVsdXMpCkBAIC00OCw3ICs0OCw3IEBAIENyeXB0b0tleURhdGFSU0FD
b21wb25lbnRzOjpDcnlwdG9LZXlEYXQKIHsKIH0KIAotQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVu
dHM6OkNyeXB0b0tleURhdGFSU0FDb21wb25lbnRzKGNvbnN0IFZlY3RvcjxjaGFyPiYgbW9kdWx1
cywgY29uc3QgVmVjdG9yPGNoYXI+JiBleHBvbmVudCwgY29uc3QgVmVjdG9yPGNoYXI+JiBwcml2
YXRlRXhwb25lbnQsIGNvbnN0IFByaW1lSW5mbyYgZmlyc3RQcmltZUluZm8sIGNvbnN0IFByaW1l
SW5mbyYgc2Vjb25kUHJpbWVJbmZvLCBjb25zdCBWZWN0b3I8UHJpbWVJbmZvPiYgb3RoZXJQcmlt
ZUluZm9zKQorQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OkNyeXB0b0tleURhdGFSU0FDb21w
b25lbnRzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbW9kdWx1cywgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBleHBvbmVudCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwcml2YXRlRXhwb25lbnQsIGNv
bnN0IFByaW1lSW5mbyYgZmlyc3RQcmltZUluZm8sIGNvbnN0IFByaW1lSW5mbyYgc2Vjb25kUHJp
bWVJbmZvLCBjb25zdCBWZWN0b3I8UHJpbWVJbmZvPiYgb3RoZXJQcmltZUluZm9zKQogICAgIDog
Q3J5cHRvS2V5RGF0YShDcnlwdG9LZXlEYXRhOjpGb3JtYXQ6OlJTQUNvbXBvbmVudHMpCiAgICAg
LCBtX3R5cGUoVHlwZTo6UHJpdmF0ZSkKICAgICAsIG1fbW9kdWx1cyhtb2R1bHVzKQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlEYXRhUlNB
Q29tcG9uZW50cy5oCShyZXZpc2lvbiAxNTkzNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
a2V5cy9DcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwy
MiArNDEsMjIgQEAgcHVibGljOgogICAgIH07CiAKICAgICBzdHJ1Y3QgUHJpbWVJbmZvIHsKLSAg
ICAgICAgVmVjdG9yPGNoYXI+IHByaW1lRmFjdG9yOwotICAgICAgICBWZWN0b3I8Y2hhcj4gZmFj
dG9yQ1JURXhwb25lbnQ7Ci0gICAgICAgIFZlY3RvcjxjaGFyPiBmYWN0b3JDUlRDb2VmZmljaWVu
dDsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHByaW1lRmFjdG9yOworICAgICAgICBWZWN0b3I8
dWludDhfdD4gZmFjdG9yQ1JURXhwb25lbnQ7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBmYWN0
b3JDUlRDb2VmZmljaWVudDsKICAgICB9OwogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cz4gY3JlYXRlUHVibGljKGNvbnN0IFZlY3RvcjxjaGFy
PiYgbW9kdWx1cywgY29uc3QgVmVjdG9yPGNoYXI+JiBleHBvbmVudCkKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzPiBjcmVhdGVQdWJsaWMoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBtb2R1bHVzLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGV4cG9u
ZW50KQogICAgIHsKICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRh
UlNBQ29tcG9uZW50cz4obmV3IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzKG1vZHVsdXMsIGV4
cG9uZW50KSk7CiAgICAgfQogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlE
YXRhUlNBQ29tcG9uZW50cz4gY3JlYXRlUHJpdmF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mIG1vZHVs
dXMsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZXhwb25lbnQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJp
dmF0ZUV4cG9uZW50KQorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YVJT
QUNvbXBvbmVudHM+IGNyZWF0ZVByaXZhdGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBtb2R1bHVz
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGV4cG9uZW50LCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IHByaXZhdGVFeHBvbmVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8
Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM+KG5ldyBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50
cyhtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50KSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cz4gY3JlYXRlUHJp
dmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShjb25zdCBWZWN0b3I8Y2hhcj4mIG1vZHVsdXMsIGNvbnN0
IFZlY3RvcjxjaGFyPiYgZXhwb25lbnQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpdmF0ZUV4cG9u
ZW50LCBjb25zdCBQcmltZUluZm8mIGZpcnN0UHJpbWVJbmZvLCBjb25zdCBQcmltZUluZm8mIHNl
Y29uZFByaW1lSW5mbywgY29uc3QgVmVjdG9yPFByaW1lSW5mbz4mIG90aGVyUHJpbWVJbmZvcykK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzPiBj
cmVhdGVQcml2YXRlV2l0aEFkZGl0aW9uYWxEYXRhKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbW9k
dWx1cywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBleHBvbmVudCwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBwcml2YXRlRXhwb25lbnQsIGNvbnN0IFByaW1lSW5mbyYgZmlyc3RQcmltZUluZm8sIGNv
bnN0IFByaW1lSW5mbyYgc2Vjb25kUHJpbWVJbmZvLCBjb25zdCBWZWN0b3I8UHJpbWVJbmZvPiYg
b3RoZXJQcmltZUluZm9zKQogICAgIHsKICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cz4obmV3IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRz
KG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25lbnQsIGZpcnN0UHJpbWVJbmZvLCBzZWNv
bmRQcmltZUluZm8sIG90aGVyUHJpbWVJbmZvcykpOwogICAgIH0KQEAgLTY2LDI5ICs2NiwyOSBA
QCBwdWJsaWM6CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAKICAg
ICAvLyBQcml2YXRlIGFuZCBwdWJsaWMga2V5cy4KLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4mIG1v
ZHVsdXMoKSBjb25zdCB7IHJldHVybiBtX21vZHVsdXM7IH0KLSAgICBjb25zdCBWZWN0b3I8Y2hh
cj4mIGV4cG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV9leHBvbmVudDsgfQorICAgIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgbW9kdWx1cygpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWx1czsgfQorICAg
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX2V4cG9u
ZW50OyB9CiAKICAgICAvLyBPbmx5IHByaXZhdGUga2V5cy4KLSAgICBjb25zdCBWZWN0b3I8Y2hh
cj4mIHByaXZhdGVFeHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpdmF0ZUV4cG9uZW50OyB9
CisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwcml2YXRlRXhwb25lbnQoKSBjb25zdCB7IHJl
dHVybiBtX3ByaXZhdGVFeHBvbmVudDsgfQogICAgIGJvb2wgaGFzQWRkaXRpb25hbFByaXZhdGVL
ZXlQYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNBZGRpdGlvbmFsUHJpdmF0ZUtleVBh
cmFtZXRlcnM7IH0KICAgICBjb25zdCBQcmltZUluZm8mIGZpcnN0UHJpbWVJbmZvKCkgY29uc3Qg
eyByZXR1cm4gbV9maXJzdFByaW1lSW5mbzsgfQogICAgIGNvbnN0IFByaW1lSW5mbyYgc2Vjb25k
UHJpbWVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9zZWNvbmRQcmltZUluZm87IH0KICAgICBjb25z
dCBWZWN0b3I8UHJpbWVJbmZvPiYgb3RoZXJQcmltZUluZm9zKCkgY29uc3QgeyByZXR1cm4gbV9v
dGhlclByaW1lSW5mb3M7IH0KIAogcHJpdmF0ZToKLSAgICBDcnlwdG9LZXlEYXRhUlNBQ29tcG9u
ZW50cyhjb25zdCBWZWN0b3I8Y2hhcj4mIG1vZHVsdXMsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZXhw
b25lbnQpOwotICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzKGNvbnN0IFZlY3RvcjxjaGFy
PiYgbW9kdWx1cywgY29uc3QgVmVjdG9yPGNoYXI+JiBleHBvbmVudCwgY29uc3QgVmVjdG9yPGNo
YXI+JiBwcml2YXRlRXhwb25lbnQpOwotICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzKGNv
bnN0IFZlY3RvcjxjaGFyPiYgbW9kdWx1cywgY29uc3QgVmVjdG9yPGNoYXI+JiBleHBvbmVudCwg
Y29uc3QgVmVjdG9yPGNoYXI+JiBwcml2YXRlRXhwb25lbnQsIGNvbnN0IFByaW1lSW5mbyYgZmly
c3RQcmltZUluZm8sIGNvbnN0IFByaW1lSW5mbyYgc2Vjb25kUHJpbWVJbmZvLCBjb25zdCBWZWN0
b3I8UHJpbWVJbmZvPiYgb3RoZXJQcmltZUluZm9zKTsKKyAgICBDcnlwdG9LZXlEYXRhUlNBQ29t
cG9uZW50cyhjb25zdCBWZWN0b3I8dWludDhfdD4mIG1vZHVsdXMsIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgZXhwb25lbnQpOworICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgbW9kdWx1cywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBleHBvbmVudCwg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwcml2YXRlRXhwb25lbnQpOworICAgIENyeXB0b0tleURh
dGFSU0FDb21wb25lbnRzKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbW9kdWx1cywgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBleHBvbmVudCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwcml2YXRlRXhw
b25lbnQsIGNvbnN0IFByaW1lSW5mbyYgZmlyc3RQcmltZUluZm8sIGNvbnN0IFByaW1lSW5mbyYg
c2Vjb25kUHJpbWVJbmZvLCBjb25zdCBWZWN0b3I8UHJpbWVJbmZvPiYgb3RoZXJQcmltZUluZm9z
KTsKIAogICAgIFR5cGUgbV90eXBlOwogCiAgICAgLy8gUHJpdmF0ZSBhbmQgcHVibGljIGtleXMu
Ci0gICAgVmVjdG9yPGNoYXI+IG1fbW9kdWx1czsKLSAgICBWZWN0b3I8Y2hhcj4gbV9leHBvbmVu
dDsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9tb2R1bHVzOworICAgIFZlY3Rvcjx1aW50OF90PiBt
X2V4cG9uZW50OwogCiAgICAgLy8gT25seSBwcml2YXRlIGtleXMuCi0gICAgVmVjdG9yPGNoYXI+
IG1fcHJpdmF0ZUV4cG9uZW50OworICAgIFZlY3Rvcjx1aW50OF90PiBtX3ByaXZhdGVFeHBvbmVu
dDsKICAgICBib29sIG1faGFzQWRkaXRpb25hbFByaXZhdGVLZXlQYXJhbWV0ZXJzOwogICAgIFBy
aW1lSW5mbyBtX2ZpcnN0UHJpbWVJbmZvOwogICAgIFByaW1lSW5mbyBtX3NlY29uZFByaW1lSW5m
bzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3Bw
CShyZXZpc2lvbiAxNTkzNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9L
ZXlITUFDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUNyeXB0b0tleUhNQUM6OkNyeXB0b0tleUhNQUMoY29uc3QgVmVjdG9yPGNo
YXI+JiBrZXksIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwgYm9vbCBleHRyYWN0YWJs
ZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UpCitDcnlwdG9LZXlITUFDOjpDcnlwdG9LZXlITUFDKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gs
IGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlKQogICAgIDogQ3J5cHRvS2V5
KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkhNQUMsIENyeXB0b0tleVR5cGU6OlNlY3JldCwg
ZXh0cmFjdGFibGUsIHVzYWdlKQogICAgICwgbV9oYXNoKGhhc2gpCiAgICAgLCBtX2tleShrZXkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oCShyZXZp
c2lvbiAxNTkzNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFD
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBDcnlwdG9LZXlITUFDIEZJTkFMIDogcHVibGljIENyeXB0b0tleSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q3J5cHRvS2V5SE1BQz4gY3JlYXRlKGNvbnN0IFZlY3Rv
cjxjaGFyPiYga2V5LCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGJvb2wgZXh0cmFj
dGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENyeXB0
b0tleUhNQUM+IGNyZWF0ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllciBoYXNoLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2Fn
ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3J5cHRvS2V5SE1BQyhrZXks
IGhhc2gsIGV4dHJhY3RhYmxlLCB1c2FnZSkpOwogICAgIH0KQEAgLTQ2LDE4ICs0NiwxOCBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIENyeXB0b0tleUNsYXNzIGtleUNsYXNzKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gQ3J5cHRvS2V5Q2xhc3M6OkhNQUM7IH0KIAotICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICBjb25zdCBWZWN0b3I8
dWludDhfdD4mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CiAKICAgICBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyIGhhc2hBbGdvcml0aG1JZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNoOyB9CiAKIHByaXZhdGU6Ci0gICAgQ3J5cHRvS2V5SE1BQyhjb25zdCBWZWN0b3I8Y2hh
cj4mIGtleSwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGV4dHJhY3RhYmxl
LCBDcnlwdG9LZXlVc2FnZSk7CisgICAgQ3J5cHRvS2V5SE1BQyhjb25zdCBWZWN0b3I8dWludDhf
dD4mIGtleSwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGV4dHJhY3RhYmxl
LCBDcnlwdG9LZXlVc2FnZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgYnVpbGRBbGdvcml0aG1EZXNj
cmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImKSBjb25zdCBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBleHBvcnREYXRh
KCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIG1faGFz
aDsKLSAgICBWZWN0b3I8Y2hhcj4gbV9rZXk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fa2V5Owog
fTsKIAogaW5saW5lIGJvb2wgaXNDcnlwdG9LZXlITUFDKGNvbnN0IENyeXB0b0tleSYga2V5KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmgJKHJldmlzaW9u
IDE1OTM3NykKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzdHJp
Y3RUb0hhc2goQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcik7CiAKLSAgICBzdGF0aWMgdm9pZCBn
ZW5lcmF0ZVBhaXIoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgdW5zaWduZWQgbW9kdWx1c0xl
bmd0aCwgY29uc3QgVmVjdG9yPGNoYXI+JiBwdWJsaWNFeHBvbmVudCwgYm9vbCBleHRyYWN0YWJs
ZSwgQ3J5cHRvS2V5VXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4pOworICAg
IHN0YXRpYyB2b2lkIGdlbmVyYXRlUGFpcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLCB1bnNp
Z25lZCBtb2R1bHVzTGVuZ3RoLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHB1YmxpY0V4cG9uZW50
LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSwgc3RkOjp1bmlxdWVfcHRyPFByb21p
c2VXcmFwcGVyPik7CiAKICAgICB2aXJ0dWFsIENyeXB0b0tleUNsYXNzIGtleUNsYXNzKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gQ3J5cHRvS2V5Q2xhc3M6OlJTQTsgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlTZXJpYWxpemF0aW9uUmF3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlTZXJpYWxpemF0
aW9uUmF3LmNwcAkocmV2aXNpb24gMTU5Mzc3KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5U2VyaWFsaXphdGlvblJhdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcg
KzYxLDcgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IENyeXB0b0tleQogICAgIHJl
dHVybiBDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZTo6Y3JlYXRlKG1fZGF0YSk7CiB9CiAKLWJv
b2wgQ3J5cHRvS2V5U2VyaWFsaXphdGlvblJhdzo6c2VyaWFsaXplKGNvbnN0IENyeXB0b0tleSYg
a2V5LCBWZWN0b3I8dW5zaWduZWQgY2hhcj4mIHJlc3VsdCkKK2Jvb2wgQ3J5cHRvS2V5U2VyaWFs
aXphdGlvblJhdzo6c2VyaWFsaXplKGNvbnN0IENyeXB0b0tleSYga2V5LCBWZWN0b3I8dWludDhf
dD4mIHJlc3VsdCkKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4ga2V5RGF0
YSA9IGtleS5leHBvcnREYXRhKCk7CiAgICAgaWYgKCFrZXlEYXRhKSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlTZXJpYWxpemF0aW9uUmF3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5U2VyaWFsaXphdGlvblJh
dy5oCShyZXZpc2lvbiAxNTkzNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9Dcnlw
dG9LZXlTZXJpYWxpemF0aW9uUmF3LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB+Q3J5cHRvS2V5U2VyaWFsaXphdGlvblJhdygpOwogCi0g
ICAgc3RhdGljIGJvb2wgc2VyaWFsaXplKGNvbnN0IENyeXB0b0tleSYsIFZlY3Rvcjx1bnNpZ25l
ZCBjaGFyPiYpOworICAgIHN0YXRpYyBib29sIHNlcmlhbGl6ZShjb25zdCBDcnlwdG9LZXkmLCBW
ZWN0b3I8dWludDhfdD4mKTsKIAogcHJpdmF0ZToKICAgICBDcnlwdG9LZXlTZXJpYWxpemF0aW9u
UmF3KGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmKTsKQEAgLTU4LDcgKzU4LDcgQEAgcHJpdmF0
ZToKIAogICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IGtleURhdGEo
KSBjb25zdCBPVkVSUklERTsKIAotICAgIFZlY3RvcjxjaGFyPiBtX2RhdGE7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNf
Q0JDTWFjLmNwcAkocmV2aXNpb24gMTU5Mzc5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21h
Yy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyAr
NTgsNyBAQCBzdGF0aWMgdm9pZCB0cmFuc2Zvcm1BRVNfQ0JDKENDT3BlcmF0aW9uCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gcmVzdWx0KENDQ3J5
cHRvckdldE91dHB1dExlbmd0aChjcnlwdG9yLCBkYXRhLnNlY29uZCwgdHJ1ZSkpOworICAgIFZl
Y3Rvcjx1aW50OF90PiByZXN1bHQoQ0NDcnlwdG9yR2V0T3V0cHV0TGVuZ3RoKGNyeXB0b3IsIGRh
dGEuc2Vjb25kLCB0cnVlKSk7CiAKICAgICBzaXplX3QgYnl0ZXNXcml0dGVuOwogICAgIHN0YXR1
cyA9IENDQ3J5cHRvclVwZGF0ZShjcnlwdG9yLCBkYXRhLmZpcnN0LCBkYXRhLnNlY29uZCwgcmVz
dWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSwgJmJ5dGVzV3JpdHRlbik7CkBAIC02Nyw3ICs2Nyw3
IEBAIHN0YXRpYyB2b2lkIHRyYW5zZm9ybUFFU19DQkMoQ0NPcGVyYXRpb24KICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGNoYXIqIHAgPSByZXN1bHQuZGF0YSgpICsgYnl0
ZXNXcml0dGVuOworICAgIHVpbnQ4X3QqIHAgPSByZXN1bHQuZGF0YSgpICsgYnl0ZXNXcml0dGVu
OwogICAgIHN0YXR1cyA9IENDQ3J5cHRvckZpbmFsKGNyeXB0b3IsIHAsIHJlc3VsdC5lbmQoKSAt
IHAsICZieXRlc1dyaXR0ZW4pOwogICAgIHAgKz0gYnl0ZXNXcml0dGVuOwogICAgIGlmIChzdGF0
dXMpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtSE1B
Q01hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9B
bGdvcml0aG1ITUFDTWFjLmNwcAkocmV2aXNpb24gMTU5MzgwKQorKysgU291cmNlL1dlYkNvcmUv
Y3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTksNyArNTksNyBAQCBzdGF0aWMgYm9vbCBnZXRDb21tb25DcnlwdG9BbGdvcml0aG0oQ3J5CiAg
ICAgfQogfQogCi1zdGF0aWMgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IGNhbGN1bGF0ZVNpZ25hdHVy
ZShDQ0htYWNBbGdvcml0aG0gYWxnb3JpdGhtLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgY29u
c3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSkKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gY2Fs
Y3VsYXRlU2lnbmF0dXJlKENDSG1hY0FsZ29yaXRobSBhbGdvcml0aG0sIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYga2V5LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhKQogewogICAgIHNp
emVfdCBkaWdlc3RMZW5ndGg7CiAgICAgc3dpdGNoIChhbGdvcml0aG0pIHsKQEAgLTgwLDExICs4
MCwxMSBAQCBzdGF0aWMgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IGNhbGN1bGF0ZVNpCiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm4gVmVjdG9yPHVuc2lnbmVkIGNoYXI+KCk7CisgICAgICAgIHJldHVybiBWZWN0
b3I8dWludDhfdD4oKTsKICAgICB9CiAKLSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gcmVzdWx0
KGRpZ2VzdExlbmd0aCk7Ci0gICAgY29uc3QgY2hhcioga2V5RGF0YSA9IGtleS5kYXRhKCkgPyBr
ZXkuZGF0YSgpIDogIiI7IC8vIDxyZGFyOi8vcHJvYmxlbS8xNTQ2NzQyNT4gSE1BQyBjcmFzaGVz
IHdoZW4ga2V5IHBvaW50ZXIgaXMgbnVsbC4KKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KGRp
Z2VzdExlbmd0aCk7CisgICAgY29uc3Qgdm9pZCoga2V5RGF0YSA9IGtleS5kYXRhKCkgPyBrZXku
ZGF0YSgpIDogcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oIiIpOyAvLyA8cmRhcjov
L3Byb2JsZW0vMTU0Njc0MjU+IEhNQUMgY3Jhc2hlcyB3aGVuIGtleSBwb2ludGVyIGlzIG51bGwu
CiAgICAgQ0NIbWFjKGFsZ29yaXRobSwga2V5RGF0YSwga2V5LnNpemUoKSwgZGF0YS5maXJzdCwg
ZGF0YS5zZWNvbmQsIHJlc3VsdC5kYXRhKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0x
MDUsNyArMTA1LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjpzaWduKGNvbnN0IENyeQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHNpZ25h
dHVyZSA9IGNhbGN1bGF0ZVNpZ25hdHVyZShhbGdvcml0aG0sIGhtYWNLZXkua2V5KCksIGRhdGEp
OworICAgIFZlY3Rvcjx1aW50OF90PiBzaWduYXR1cmUgPSBjYWxjdWxhdGVTaWduYXR1cmUoYWxn
b3JpdGhtLCBobWFjS2V5LmtleSgpLCBkYXRhKTsKIAogICAgIHByb21pc2UtPmZ1bGZpbGwoc2ln
bmF0dXJlKTsKIH0KQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6
OnZlcmlmeShjb25zdCBDCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8dW5z
aWduZWQgY2hhcj4gc2lnbmF0dXJlID0gY2FsY3VsYXRlU2lnbmF0dXJlKGFsZ29yaXRobSwgaG1h
Y0tleS5rZXkoKSwgZGF0YSk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNpZ25hdHVyZSA9IGNhbGN1
bGF0ZVNpZ25hdHVyZShhbGdvcml0aG0sIGhtYWNLZXkua2V5KCksIGRhdGEpOwogCiAgICAgYm9v
bCByZXN1bHQgPSBzaWduYXR1cmUuc2l6ZSgpID09IGV4cGVjdGVkU2lnbmF0dXJlLnNlY29uZCAm
JiAhbWVtY21wKHNpZ25hdHVyZS5kYXRhKCksIGV4cGVjdGVkU2lnbmF0dXJlLmZpcnN0LCBzaWdu
YXR1cmUuc2l6ZSgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9E
aWdlc3RNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5
cHRvRGlnZXN0TWFjLmNwcAkocmV2aXNpb24gMTU5Mzc3KQorKysgU291cmNlL1dlYkNvcmUvY3J5
cHRvL21hYy9DcnlwdG9EaWdlc3RNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsOSArMTU2
LDkgQEAgdm9pZCBDcnlwdG9EaWdlc3Q6OmFkZEJ5dGVzKGNvbnN0IHZvaWQqIAogICAgIH0KIH0K
IAotVmVjdG9yPHVuc2lnbmVkIGNoYXI+IENyeXB0b0RpZ2VzdDo6Y29tcHV0ZUhhc2goKQorVmVj
dG9yPHVpbnQ4X3Q+IENyeXB0b0RpZ2VzdDo6Y29tcHV0ZUhhc2goKQogewotICAgIFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPiByZXN1bHQ7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdDsKICAgICBz
d2l0Y2ggKG1fY29udGV4dC0+YWxnb3JpdGhtKSB7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyOjpTSEFfMToKICAgICAgICAgcmVzdWx0LnJlc2l6ZShDQ19TSEExX0RJR0VTVF9M
RU5HVEgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlNYWMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5TWFjLmNw
cAkocmV2aXNpb24gMTU5Mzc3KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9L
ZXlNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw5IEBAIGV4dGVybiAiQyIgaW50
IENDUmFuZG9tQ29weUJ5dGVzKENDUmFuZG8KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WZWN0
b3I8Y2hhcj4gQ3J5cHRvS2V5OjpyYW5kb21EYXRhKHNpemVfdCBzaXplKQorVmVjdG9yPHVpbnQ4
X3Q+IENyeXB0b0tleTo6cmFuZG9tRGF0YShzaXplX3Qgc2l6ZSkKIHsKLSAgICBWZWN0b3I8Y2hh
cj4gcmVzdWx0KHNpemUpOworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoc2l6ZSk7CiAgICAg
Q0NSYW5kb21Db3B5Qnl0ZXMoa0NDUmFuZG9tRGVmYXVsdCwgcmVzdWx0LmRhdGEoKSwgcmVzdWx0
LnNpemUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAJKHJldmlzaW9uIDE1OTM3NykKKysrIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTgsNiArNTgsMjMgQEAgZXh0ZXJuICJDIiBDQ1JTQUtleVR5cGUgQ0NSU0FHZXRLZXlU
eXBlKAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBDQ0NyeXB0b3JTdGF0dXMgZ2V0
UHVibGljS2V5Q29tcG9uZW50cyhDQ1JTQUNyeXB0b3JSZWYgcnNhS2V5LCBWZWN0b3I8dWludDhf
dD4mIG1vZHVsdXMsIFZlY3Rvcjx1aW50OF90PiYgcHVibGljRXhwb25lbnQpCit7CisgICAgQVNT
RVJUKENDUlNBR2V0S2V5VHlwZShyc2FLZXkpID09IGNjUlNBS2V5UHVibGljKTsKKworICAgIG1v
ZHVsdXMucmVzaXplKDE2Mzg0KTsKKyAgICBzaXplX3QgbW9kdWx1c0xlbmd0aCA9IG1vZHVsdXMu
c2l6ZSgpOworICAgIHB1YmxpY0V4cG9uZW50LnJlc2l6ZSgxNjM4NCk7CisgICAgc2l6ZV90IGV4
cG9uZW50TGVuZ3RoID0gcHVibGljRXhwb25lbnQuc2l6ZSgpOworICAgIENDQ3J5cHRvclN0YXR1
cyBzdGF0dXMgPSBDQ1JTQUdldEtleUNvbXBvbmVudHMocnNhS2V5LCBtb2R1bHVzLmRhdGEoKSwg
Jm1vZHVsdXNMZW5ndGgsIHB1YmxpY0V4cG9uZW50LmRhdGEoKSwgJmV4cG9uZW50TGVuZ3RoLCAw
LCAwLCAwLCAwKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisg
ICAgbW9kdWx1cy5zaHJpbmsobW9kdWx1c0xlbmd0aCk7CisgICAgcHVibGljRXhwb25lbnQuc2hy
aW5rKGV4cG9uZW50TGVuZ3RoKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCiBDcnlwdG9LZXlS
U0E6OkNyeXB0b0tleVJTQShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIENy
eXB0b0tleVR5cGUgdHlwZSwgUGxhdGZvcm1SU0FLZXkgcGxhdGZvcm1LZXksIGJvb2wgZXh0cmFj
dGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlKQogICAgIDogQ3J5cHRvS2V5KGlkZW50aWZpZXIs
IHR5cGUsIGV4dHJhY3RhYmxlLCB1c2FnZSkKICAgICAsIG1fcGxhdGZvcm1LZXkocGxhdGZvcm1L
ZXkpCkBAIC02OCw2ICs4NSw3IEBAIENyeXB0b0tleVJTQTo6Q3J5cHRvS2V5UlNBKENyeXB0b0Fs
Z29yaXQKIFBhc3NSZWZQdHI8Q3J5cHRvS2V5UlNBPiBDcnlwdG9LZXlSU0E6OmNyZWF0ZShDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IENyeXB0b0tleURhdGFSU0FD
b21wb25lbnRzJiBrZXlEYXRhLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2Fn
ZSkKIHsKICAgICBpZiAoa2V5RGF0YS50eXBlKCkgPT0gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVu
dHM6OlR5cGU6OlByaXZhdGUgJiYgIWtleURhdGEuaGFzQWRkaXRpb25hbFByaXZhdGVLZXlQYXJh
bWV0ZXJzKCkpIHsKKyAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzE1NDUyMzI0PiB0cmFja3Mg
YWRkaW5nIHN1cHBvcnQuCiAgICAgICAgIFdURkxvZ0Fsd2F5cygiUHJpdmF0ZSBrZXlzIHdpdGhv
dXQgYWRkaXRpb25hbCBkYXRhIGFyZSBub3Qgc3VwcG9ydGVkIik7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KQEAgLTExMiwxNSArMTMwLDkgQEAgdm9pZCBDcnlwdG9LZXlSU0E6OmJ1
aWxkQWxnb3JpdGhtRGVzY3JpcAogICAgIGJvb2wgcGxhdGZvcm1LZXlJc1B1YmxpYyA9IENDUlNB
R2V0S2V5VHlwZShtX3BsYXRmb3JtS2V5KSA9PSBjY1JTQUtleVB1YmxpYzsKICAgICBDQ1JTQUNy
eXB0b3JSZWYgcHVibGljS2V5ID0gcGxhdGZvcm1LZXlJc1B1YmxpYyA/IG1fcGxhdGZvcm1LZXkg
OiBDQ1JTQUNyeXB0b3JHZXRQdWJsaWNLZXlGcm9tUHJpdmF0ZUtleShtX3BsYXRmb3JtS2V5KTsK
IAotICAgIHVpbnQ4X3QgbW9kdWx1c1sxNjM4NF07Ci0gICAgc2l6ZV90IG1vZHVsdXNMZW5ndGgg
PSBzaXplb2YobW9kdWx1cyk7Ci0gICAgdWludDhfdCBwdWJsaWNFeHBvbmVudFsxNjM4NF07Ci0g
ICAgc2l6ZV90IGV4cG9uZW50TGVuZ3RoID0gc2l6ZW9mKDE2Mzg0KTsKLSAgICB1aW50OF90IHBb
MTYzODRdOwotICAgIHNpemVfdCBwTGVuZ3RoID0gc2l6ZW9mKHApOwotICAgIHVpbnQ4X3QgcVsx
NjM4NF07Ci0gICAgc2l6ZV90IHFMZW5ndGggPSBzaXplb2YocSk7Ci0gICAgQ0NDcnlwdG9yU3Rh
dHVzIHN0YXR1cyA9IENDUlNBR2V0S2V5Q29tcG9uZW50cyhwdWJsaWNLZXksIG1vZHVsdXMsICZt
b2R1bHVzTGVuZ3RoLCBwdWJsaWNFeHBvbmVudCwgJmV4cG9uZW50TGVuZ3RoLCBwLCAmcExlbmd0
aCwgcSwgJnFMZW5ndGgpOworICAgIFZlY3Rvcjx1aW50OF90PiBtb2R1bHVzOworICAgIFZlY3Rv
cjx1aW50OF90PiBwdWJsaWNFeHBvbmVudDsKKyAgICBDQ0NyeXB0b3JTdGF0dXMgc3RhdHVzID0g
Z2V0UHVibGljS2V5Q29tcG9uZW50cyhwdWJsaWNLZXksIG1vZHVsdXMsIHB1YmxpY0V4cG9uZW50
KTsKICAgICBpZiAoIXBsYXRmb3JtS2V5SXNQdWJsaWMpIHsKICAgICAgICAgLy8gQ0NSU0FDcnlw
dG9yR2V0UHVibGljS2V5RnJvbVByaXZhdGVLZXkgaGFzICJHZXQiIGluIHRoZSBuYW1lLCBidXQg
aXRzIHJlc3VsdCBuZWVkcyB0byBiZSByZWxlYXNlZCAoc2VlIDxyZGFyOi8vcHJvYmxlbS8xNTQ0
OTY5Nz4pLgogICAgICAgICBDQ1JTQUNyeXB0b3JSZWxlYXNlKHB1YmxpY0tleSk7CkBAIC0xMzAs
MTEgKzE0Miw4IEBAIHZvaWQgQ3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobURlc2NyaXAKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGJ1aWxkZXIuYWRkKCJtb2R1bHVzTGVuZ3RoIiwg
bW9kdWx1c0xlbmd0aCAqIDgpOwotCi0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHB1YmxpY0V4
cG9uZW50VmVjdG9yOwotICAgIHB1YmxpY0V4cG9uZW50VmVjdG9yLmFwcGVuZChwdWJsaWNFeHBv
bmVudCwgZXhwb25lbnRMZW5ndGgpOwotICAgIGJ1aWxkZXIuYWRkKCJwdWJsaWNFeHBvbmVudCIs
IHB1YmxpY0V4cG9uZW50VmVjdG9yKTsKKyAgICBidWlsZGVyLmFkZCgibW9kdWx1c0xlbmd0aCIs
IG1vZHVsdXMuc2l6ZSgpICogOCk7CisgICAgYnVpbGRlci5hZGQoInB1YmxpY0V4cG9uZW50Iiwg
cHVibGljRXhwb25lbnQpOwogCiAgICAgaWYgKG1fcmVzdHJpY3RlZFRvU3BlY2lmaWNIYXNoKSB7
CiAgICAgICAgIGF1dG8gaGFzaERlc2NyaXB0aW9uQnVpbGRlciA9IGJ1aWxkZXIuY3JlYXRlRW1w
dHlDbG9uZSgpOwpAQCAtMTUwLDcgKzE1OSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlE
YXRhPiBDcnlwdG9LZXkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIGJvb2wgYmln
SW50ZWdlclRvVUludDMyKGNvbnN0IFZlY3RvcjxjaGFyPiYgYmlnSW50ZWdlciwgdWludDMyX3Qm
IHJlc3VsdCkKK3N0YXRpYyBib29sIGJpZ0ludGVnZXJUb1VJbnQzMihjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGJpZ0ludGVnZXIsIHVpbnQzMl90JiByZXN1bHQpCiB7CiAgICAgcmVzdWx0ID0gMDsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSArIDQgPCBiaWdJbnRlZ2VyLnNpemUoKTsgKytpKSB7
CkBAIC0xNjAsMTcgKzE2OSwxNyBAQCBzdGF0aWMgYm9vbCBiaWdJbnRlZ2VyVG9VSW50MzIoY29u
c3QgVmVjCiAKICAgICBmb3IgKHNpemVfdCBpID0gYmlnSW50ZWdlci5zaXplKCkgPiA0ID8gYmln
SW50ZWdlci5zaXplKCkgLSA0IDogMDsgaSA8IGJpZ0ludGVnZXIuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgcmVzdWx0IDw8PSA4OwotICAgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4oYmlnSW50ZWdlcltpXSk7CisgICAgICAgIHJlc3VsdCArPSBiaWdJbnRlZ2VyW2ld
OwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDcnlwdG9LZXlSU0E6OmdlbmVy
YXRlUGFpcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgdW5zaWduZWQgbW9k
dWx1c0xlbmd0aCwgY29uc3QgVmVjdG9yPGNoYXI+JiBwdWJsaWNFeHBvbmVudCwgYm9vbCBleHRy
YWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3Jh
cHBlcj4gcHJvbWlzZSkKK3ZvaWQgQ3J5cHRvS2V5UlNBOjpnZW5lcmF0ZVBhaXIoQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIHVuc2lnbmVkIG1vZHVsdXNMZW5ndGgsIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgcHVibGljRXhwb25lbnQsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0
b0tleVVzYWdlIHVzYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21pc2Up
CiB7CiAgICAgdWludDMyX3QgZTsKICAgICBpZiAoIWJpZ0ludGVnZXJUb1VJbnQzMihwdWJsaWNF
eHBvbmVudCwgZSkpIHsKICAgICAgICAgLy8gQWRkaW5nIHN1cHBvcnQgaXMgdHJhY2tlZCBhcyA8
cmRhcjovL3Byb2JsZW0vMTU0NDQwMzQ+LgotICAgICAgICBXVEZMb2dBbHdheXMoIlB1YmxpYyBl
eHBvbmVudCBpcyB0b28gYmlnLCBub3Qgc3VwcG9ydGVkIGJ5IENvbW1vbkNyeXB0byIpOworICAg
ICAgICBXVEZMb2dBbHdheXMoIlB1YmxpYyBleHBvbmVudCBpcyB0b28gYmlnLCBub3Qgc3VwcG9y
dGVkIik7CiAgICAgICAgIHByb21pc2UtPnJlamVjdChudWxscHRyKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0Fs
Z29yaXRobVJzYUtleUdlblBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFtcy5oCShyZXZpc2lv
biAxNTkzNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdv
cml0aG1Sc2FLZXlHZW5QYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBw
dWJsaWM6CiAgICAgLy8gVGhlIGxlbmd0aCwgaW4gYml0cywgb2YgdGhlIFJTQSBtb2R1bHVzLgog
ICAgIHVuc2lnbmVkIG1vZHVsdXNMZW5ndGg7CiAgICAgLy8gVGhlIFJTQSBwdWJsaWMgZXhwb25l
bnQsIGVuY29kZWQgYXMgQmlnSW50ZWdlci4KLSAgICBWZWN0b3I8Y2hhcj4gcHVibGljRXhwb25l
bnQ7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHB1YmxpY0V4cG9uZW50OwogCiAgICAgdmlydHVhbCBD
bGFzcyBwYXJhbWV0ZXJzQ2xhc3MoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBDbGFzczo6UnNh
S2V5R2VuUGFyYW1zOyB9CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVh
ZGVyTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVS
ZWFkZXJMb2FkZXIuY3BwCShyZXZpc2lvbiAxNTkzNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNyArMzQxLDcg
QEAgdm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpjb252ZXJ0VG9EYXRhVVJMKAogICAgIGJ1aWxkZXIu
YXBwZW5kKCI7YmFzZTY0LCIpOwogCiAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICBiYXNlNjRF
bmNvZGUoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KG1fcmF3RGF0YS0+ZGF0YSgpKSwgbV9ieXRl
c0xvYWRlZCwgb3V0KTsKKyAgICBiYXNlNjRFbmNvZGUobV9yYXdEYXRhLT5kYXRhKCksIG1fYnl0
ZXNMb2FkZWQsIG91dCk7CiAgICAgb3V0LmFwcGVuZCgnXDAnKTsKICAgICBidWlsZGVyLmFwcGVu
ZChvdXQuZGF0YSgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNo
U3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBh
dGNoU3VwcG9ydC5jcHAJKHJldmlzaW9uIDE1OTM3NykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDIsMTQgKzQ0Miwx
NCBAQCBQYXNzT3duUHRyPERPTVBhdGNoU3VwcG9ydDo6RGlnZXN0PiBET01QCiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdCwgMjA+IGF0dHJzSGFzaDsKICAgICAgICAg
ICAgIGF0dHJzU0hBMS5jb21wdXRlSGFzaChhdHRyc0hhc2gpOwotICAgICAgICAgICAgZGlnZXN0
LT5tX2F0dHJzU0hBMSA9IGJhc2U2NEVuY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
PihhdHRyc0hhc2guZGF0YSgpKSwgMTApOworICAgICAgICAgICAgZGlnZXN0LT5tX2F0dHJzU0hB
MSA9IGJhc2U2NEVuY29kZShhdHRyc0hhc2guZGF0YSgpLCAxMCk7CiAgICAgICAgICAgICBhZGRT
dHJpbmdUb1NIQTEoc2hhMSwgZGlnZXN0LT5tX2F0dHJzU0hBMSk7CiAgICAgICAgIH0KICAgICB9
CiAKICAgICBWZWN0b3I8dWludDhfdCwgMjA+IGhhc2g7CiAgICAgc2hhMS5jb21wdXRlSGFzaCho
YXNoKTsKLSAgICBkaWdlc3QtPm1fc2hhMSA9IGJhc2U2NEVuY29kZShyZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihoYXNoLmRhdGEoKSksIDEwKTsKKyAgICBkaWdlc3QtPm1fc2hhMSA9IGJh
c2U2NEVuY29kZShoYXNoLmRhdGEoKSwgMTApOwogICAgIGlmICh1bnVzZWROb2Rlc01hcCkKICAg
ICAgICAgdW51c2VkTm9kZXNNYXAtPmFkZChkaWdlc3QtPm1fc2hhMSwgZGlnZXN0KTsKICAgICBy
ZXR1cm4gYWRvcHRQdHIoZGlnZXN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lvbiAxNTkzNzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI4NCw3ICsxMjg0LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFyY2hpdmUoRXJy
b3JTdAogICAgIH0KIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGJ1ZmZlciA9IGFyY2hpdmUt
PnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwotICAgICpkYXRhID0gYmFzZTY0RW5jb2RlKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KENGRGF0YUdldEJ5dGVQdHIoYnVmZmVyLmdldCgpKSks
IENGRGF0YUdldExlbmd0aChidWZmZXIuZ2V0KCkpKTsKKyAgICAqZGF0YSA9IGJhc2U2NEVuY29k
ZShDRkRhdGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIu
Z2V0KCkpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRhdGEpOwogICAgICplcnJvclN0cmlu
ZyA9ICJObyBzdXBwb3J0IGZvciBjcmVhdGluZyBhcmNoaXZlcyI7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAko
cmV2aXNpb24gMTU5Mzc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMCw3ICs0MTAsNyBAQCBzdGF0
aWMgU3RyaW5nIENHSW1hZ2VUb0RhdGFVUkwoQ0dJbWFnZVJlCiAgICAgICAgIHJldHVybiAiZGF0
YTosIjsKIAogICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkp
KSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpLCBiYXNlNjREYXRhKTsKKyAgICBiYXNlNjRF
bmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEu
Z2V0KCkpLCBiYXNlNjREYXRhKTsKIAogICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAi
O2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKIH0K
</data>
<flag name="review"
          id="240236"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>