<?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>132686</bug_id>
          
          <creation_ts>2014-05-08 09:14:12 -0700</creation_ts>
          <short_desc>REGRESSION(CMAKE): [GTK] InputMethodFilter unit test is not built</short_desc>
          <delta_ts>2014-05-14 05:49:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</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>Gtk, Regression</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>132685</dependson>
          <blocked>132739</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1007638</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-05-08 09:14:12 -0700</bug_when>
    <thetext>Since the switch to cmake we are not building the InputMethodFilter unit test, I think this was part of the TestWebCore binary that doesn&apos;t exist anymore either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007959</commentid>
    <comment_count>1</comment_count>
      <attachid>231148</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-05-09 05:53:59 -0700</bug_when>
    <thetext>Created attachment 231148
Patch

Bring it back and move it to a single binary as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008008</commentid>
    <comment_count>2</comment_count>
      <attachid>231148</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-05-09 09:45:02 -0700</bug_when>
    <thetext>Comment on attachment 231148
Patch

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

&gt; Tools/ChangeLog:9
&gt; +        a single binary TestWebCore with the other Webcore tests. Also

Super nit: Webcore -&gt; WebCore

&gt; Tools/TestWebKitAPI/PlatformGTK.cmake:125
&gt; -set(test_webcore_BINARIES
&gt; -    LayoutUnit
&gt; -    URL
&gt; +add_executable(TestWebCore
&gt; +    ${test_main_SOURCES}
&gt; +    ${TestWebCoreGtk_SOURCES}
&gt; +    ${TESTWEBKITAPI_DIR}/TestsController.cpp
&gt; +    ${TESTWEBKITAPI_DIR}/Tests/WebCore/LayoutUnit.cpp
&gt; +    ${TESTWEBKITAPI_DIR}/Tests/WebCore/URL.cpp
&gt;  )

I think if we are going to go our own way on all of these unit tests, we should just stop using the shared CMakeLists.txt.

&gt; Tools/TestWebKitAPI/PlatformGTK.cmake:130
&gt; +add_test(TestWebCore ${TESTWEBKITAPI_RUNTIME_OUTPUT_DIRECTORY}/WebCore/TestWebCore)
&gt; +set_tests_properties(TestWebCore PROPERTIES TIMEOUT 60)
&gt; +set_target_properties(TestWebCore PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${TESTWEBKITAPI_RUNTIME_OUTPUT_DIRECTORY}/WebCore)

We don&apos;t need these lines unless we plan to use &apos;make test.&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008226</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-05-09 23:43:30 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 231148 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=231148&amp;action=review
&gt; 
&gt; &gt; Tools/ChangeLog:9
&gt; &gt; +        a single binary TestWebCore with the other Webcore tests. Also
&gt; 
&gt; Super nit: Webcore -&gt; WebCore

:-)

&gt; &gt; Tools/TestWebKitAPI/PlatformGTK.cmake:125
&gt; &gt; -set(test_webcore_BINARIES
&gt; &gt; -    LayoutUnit
&gt; &gt; -    URL
&gt; &gt; +add_executable(TestWebCore
&gt; &gt; +    ${test_main_SOURCES}
&gt; &gt; +    ${TestWebCoreGtk_SOURCES}
&gt; &gt; +    ${TESTWEBKITAPI_DIR}/TestsController.cpp
&gt; &gt; +    ${TESTWEBKITAPI_DIR}/Tests/WebCore/LayoutUnit.cpp
&gt; &gt; +    ${TESTWEBKITAPI_DIR}/Tests/WebCore/URL.cpp
&gt; &gt;  )
&gt; 
&gt; I think if we are going to go our own way on all of these unit tests, we should just stop using the shared CMakeLists.txt.

No, WTF tests and the injected bundle lib for WebKit2 tests are shared in CMakeLists.txt, I would propose the other way around and move this approach to the common file, but that would be a different issue, because we were already adding those binaries in the platform specific file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008389</commentid>
    <comment_count>4</comment_count>
      <attachid>231254</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-05-10 23:40:01 -0700</bug_when>
    <thetext>Created attachment 231254
Rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009233</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-05-14 05:49:21 -0700</bug_when>
    <thetext>Committed r168834: &lt;http://trac.webkit.org/changeset/168834&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231148</attachid>
            <date>2014-05-09 05:53:59 -0700</date>
            <delta_ts>2014-05-10 23:40:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk-webcore-api-tests.diff</filename>
            <type>text/plain</type>
            <size>33164</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4MTkw
OGE1Li5lMTgxM2M2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDUgKzEsMjEgQEAKIDIwMTQtMDUtMDkgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCisgICAgICAgIFJFR1JFU1NJT04oQ01BS0UpOiBbR1RL
XSBJbnB1dE1ldGhvZEZpbHRlciB1bml0IHRlc3QgaXMgbm90IGJ1aWx0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI2ODYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCcmluZyBiYWNrIElucHV0TWV0aG9k
RmlsdGVyIHRlc3QgdG8gdGhlIGJ1aWxkIGFuZCBjb21waWxlIGl0IGludG8KKyAgICAgICAgYSBz
aW5nbGUgYmluYXJ5IFRlc3RXZWJDb3JlIHdpdGggdGhlIG90aGVyIFdlYmNvcmUgdGVzdHMuIEFs
c28KKyAgICAgICAgbW92ZSBpdCBmcm9tIFRlc3RXZWJLaXRBUEkvZ3RrLyB0byBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvZ3RrLy4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWd0ay10ZXN0
czoKKyAgICAgICAgKFRlc3RSdW5uZXIpOiBSZW1vdmUgV2ViQ29yZUd0ayBmcm9tIHRoZSBsaXN0
IG9mIHRlc3QgZGlyZWN0b3JpZXMuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdU
Sy5jbWFrZToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3RrL0lucHV0
TWV0aG9kRmlsdGVyLmNwcDogUmVuYW1lZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
Z3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcC4KKworMjAxNC0wNS0wOSAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAgICAgUkVHUkVTU0lPTihDTUFLRSk6
IFtHVEtdIFdlYktpdDIgQyBBUEkgdGVzdHMgYXJlIG5vdCBsb25nZXIgYnVpbHQgaW4gdGhlIHNh
bWUgYmluYXJ5CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzI2ODUKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzIGIvVG9v
bHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzCmluZGV4IDYwZWRjMDIuLjE1ZDg1YzAgMTAwNzU1Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1n
dGstdGVzdHMKQEAgLTU4LDcgKzU4LDcgQEAgY2xhc3MgVGVzdFRpbWVvdXQoRXhjZXB0aW9uKToK
ICAgICBwYXNzCiAKIGNsYXNzIFRlc3RSdW5uZXI6Ci0gICAgVEVTVF9ESVJTID0gWyAiV2ViS2l0
Mkd0ayIsICJXZWJLaXQyIiwgIkphdmFTY3JpcHRDb3JlIiwgIldURiIsICJXZWJDb3JlIiwgICJX
ZWJDb3JlR3RrIiBdCisgICAgVEVTVF9ESVJTID0gWyAiV2ViS2l0Mkd0ayIsICJXZWJLaXQyIiwg
IkphdmFTY3JpcHRDb3JlIiwgIldURiIsICJXZWJDb3JlIiBdCiAKICAgICBTS0lQUEVEID0gWwog
ICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQiLCAiL3dlYmtpdDIv
V2ViS2l0V2ViVmlldy9tb3VzZS10YXJnZXQiLCAiVGVzdCB0aW1lcyBvdXQgYWZ0ZXIgcjE1MDg5
MCIsIDExNzY4OSksCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RL
LmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA5Mzhl
YTlmLi5lNDIyODY2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RL
LmNtYWtlCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTEw
NiwxNiArMTA2LDI1IEBAIGFkZF90ZXN0KFRlc3RXZWJLaXQyICR7VEVTVFdFQktJVEFQSV9SVU5U
SU1FX09VVFBVVF9ESVJFQ1RPUll9L1dlYktpdDIvVGVzdFdlYktpCiBzZXRfdGVzdHNfcHJvcGVy
dGllcyhUZXN0V2ViS2l0MiBQUk9QRVJUSUVTIFRJTUVPVVQgNjApCiBzZXRfdGFyZ2V0X3Byb3Bl
cnRpZXMoVGVzdFdlYktpdDIgUFJPUEVSVElFUyBSVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtU
RVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vV2ViS2l0MikKIAotIyBUaGUg
bGlzdCBiZWxvdyB3b3JrcyBsaWtlIGEgdGVzdCBleHBlY3RhdGlvbi4gVGVzdHMgaW4gdGhlCi0j
IHRlc3Rfe3dlYmtpdDJfYXBpfHdlYmNvcmV9X0JJTkFSSUVTIGxpc3QgYXJlIGFkZGVkIHRvIHRo
ZSB0ZXN0IHJ1bm5lciBhbmQKLSMgdHJpZWQgb24gdGhlIGJvdHMgb24gZXZlcnkgYnVpbGQuIFRl
c3RzIGluIHRlc3Rfe3dlYmtpdDJfYXBpfHdlYmNvcmV9X0JJTkFSSUVTCi0jIGFyZSBjb21waWxl
ZCBhbmQgc3VmZml4ZWQgd2l0aCBmYWlsIGFuZCBza2lwcGVkIGZyb20gdGhlIHRlc3QgcnVubmVy
LgotIwotIyBNYWtlIHN1cmUgdGhhdCB0aGUgdGVzdHMgYXJlIHBhc3Npbmcgb24gYm90aCBEZWJ1
ZyBhbmQKLSMgUmVsZWFzZSBidWlsZHMgYmVmb3JlIGFkZGluZyBpdCB0byB0ZXN0X3t3ZWJraXQy
X2FwaXx3ZWJjb3JlfV9CSU5BUklFUy4KK3NldChUZXN0V2ViQ29yZUd0a19TT1VSQ0VTCisgICAg
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuY3BwCisgICAgJHtXRUJD
T1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKKyAgICAke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmNwcAorICAgICR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ludFJlY3RDYWlyby5jcHAKKyAgICAke1dFQkNPUkVfRElSfS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UmVjdEd0ay5jcHAKKyAgICAke1dFQkNPUkVfRElSfS9w
bGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJ
X0RJUn0vVGVzdHMvV2ViQ29yZS9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuY3BwCispCiAKLXNldCh0
ZXN0X3dlYmNvcmVfQklOQVJJRVMKLSAgICBMYXlvdXRVbml0Ci0gICAgVVJMCithZGRfZXhlY3V0
YWJsZShUZXN0V2ViQ29yZQorICAgICR7dGVzdF9tYWluX1NPVVJDRVN9CisgICAgJHtUZXN0V2Vi
Q29yZUd0a19TT1VSQ0VTfQorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzQ29udHJvbGxl
ci5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0xheW91dFVuaXQu
Y3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9VUkwuY3BwCiApCiAK
K3RhcmdldF9saW5rX2xpYnJhcmllcyhUZXN0V2ViQ29yZSAke3Rlc3Rfd2ViY29yZV9MSUJSQVJJ
RVN9KQorYWRkX3Rlc3QoVGVzdFdlYkNvcmUgJHtURVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVU
X0RJUkVDVE9SWX0vV2ViQ29yZS9UZXN0V2ViQ29yZSkKK3NldF90ZXN0c19wcm9wZXJ0aWVzKFRl
c3RXZWJDb3JlIFBST1BFUlRJRVMgVElNRU9VVCA2MCkKK3NldF90YXJnZXRfcHJvcGVydGllcyhU
ZXN0V2ViQ29yZSBQUk9QRVJUSUVTIFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAke1RFU1RXRUJL
SVRBUElfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS9XZWJDb3JlKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3RrL0lucHV0TWV0aG9kRmlsdGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjc4NGE5Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2d0ay9JbnB1dE1l
dGhvZEZpbHRlci5jcHAKQEAgLTAsMCArMSwzMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiV1RGU3RyaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HdGtJbnB1dE1ldGhv
ZEZpbHRlci5oPgorI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFz
cyBUZXN0SW5wdXRNZXRob2RGaWx0ZXIgOiBwdWJsaWMgR3RrSW5wdXRNZXRob2RGaWx0ZXIgewor
cHVibGljOgorICAgIFRlc3RJbnB1dE1ldGhvZEZpbHRlcigpCisgICAgICAgIDogbV90ZXN0V2lu
ZG93KGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApKQorICAgIHsKKyAgICAgICAgZ3Rr
X3dpZGdldF9zaG93KG1fdGVzdFdpbmRvdy5nZXQoKSk7CisgICAgICAgIHNldFdpZGdldChtX3Rl
c3RXaW5kb3cuZ2V0KCkpOworCisgICAgICAgIC8vIEZvY3VzIGluIGlzIG5lY2Vzc2FyeSB0byBh
Y3RpdmF0ZSB0aGUgZGVmYXVsdCBpbnB1dCBtZXRob2QgaW4gdGhlIG11bHRpY29udGV4dC4KKyAg
ICAgICAgbm90aWZ5Rm9jdXNlZEluKCk7CisgICAgfQorCisgICAgVmVjdG9yPFN0cmluZz4mIGV2
ZW50cygpIHsgcmV0dXJuIG1fZXZlbnRzOyB9CisKKyAgICB2b2lkIHNlbmRLZXlFdmVudFRvRmls
dGVyKHVuc2lnbmVkIGludCBnZGtLZXlWYWx1ZSwgR2RrRXZlbnRUeXBlIHR5cGUsIHVuc2lnbmVk
IGludCBtb2RpZmllcnMgPSAwKQorICAgIHsKKyAgICAgICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2Rr
X2V2ZW50X25ldyh0eXBlKTsKKyAgICAgICAgZXZlbnQtPmtleS5rZXl2YWwgPSBnZGtLZXlWYWx1
ZTsKKyAgICAgICAgZXZlbnQtPmtleS5zdGF0ZSA9IG1vZGlmaWVyczsKKyAgICAgICAgZXZlbnQt
PmtleS53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cobV90ZXN0V2luZG93LmdldCgpKTsK
KyAgICAgICAgZXZlbnQtPmtleS50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICAgICAgZ19v
YmplY3RfcmVmKGV2ZW50LT5rZXkud2luZG93KTsKKworI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgorICAgICAgICBnZGtfZXZlbnRfc2V0X2RldmljZShldmVudCwgZ2RrX2RldmljZV9tYW5hZ2Vy
X2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX2Rp
c3BsYXlfZ2V0X2RlZmF1bHQoKSkpKTsKKyNlbmRpZgorCisgICAgICAgIEdVbmlxdWVPdXRQdHI8
R2RrS2V5bWFwS2V5PiBrZXlzOworICAgICAgICBnaW50IG5LZXlzOworICAgICAgICBpZiAoZ2Rr
X2tleW1hcF9nZXRfZW50cmllc19mb3Jfa2V5dmFsKGdka19rZXltYXBfZ2V0X2RlZmF1bHQoKSwg
Z2RrS2V5VmFsdWUsICZrZXlzLm91dFB0cigpLCAmbktleXMpKQorICAgICAgICAgICAgZXZlbnQt
PmtleS5oYXJkd2FyZV9rZXljb2RlID0ga2V5cy5nZXQoKVswXS5rZXljb2RlOworCisgICAgICAg
IGZpbHRlcktleUV2ZW50KCZldmVudC0+a2V5KTsKKyAgICAgICAgZ2RrX2V2ZW50X2ZyZWUoZXZl
bnQpOworICAgIH0KKworICAgIHZvaWQgc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRv
RmlsdGVyKHVuc2lnbmVkIGludCBnZGtLZXlWYWx1ZSwgdW5zaWduZWQgaW50IG1vZGlmaWVycyA9
IDApCisgICAgeworICAgICAgICBzZW5kS2V5RXZlbnRUb0ZpbHRlcihnZGtLZXlWYWx1ZSwgR0RL
X0tFWV9QUkVTUywgbW9kaWZpZXJzKTsKKyAgICAgICAgc2VuZEtleUV2ZW50VG9GaWx0ZXIoZ2Rr
S2V5VmFsdWUsIEdES19LRVlfUkVMRUFTRSwgbW9kaWZpZXJzKTsKKyAgICB9CisKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIGJvb2wgc2VuZFNpbXBsZUtleUV2ZW50KEdka0V2ZW50S2V5KiBldmVu
dCwgV1RGOjpTdHJpbmcgZXZlbnRTdHJpbmcsIEV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbiBmYWtl
ZCkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIqIGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlID09
IEdES19LRVlfUkVMRUFTRSA/ICJyZWxlYXNlIiA6ICJwcmVzcyI7CisgICAgICAgIGNvbnN0IGNo
YXIqIGZha2VkU3RyaW5nID0gZmFrZWQgPT0gRXZlbnRGYWtlZCA/ICIgKGZha2VkKSIgOiAiIjsK
KyAgICAgICAgaWYgKCFldmVudFN0cmluZy5pc051bGwoKSkKKyAgICAgICAgICAgIG1fZXZlbnRz
LmFwcGVuZChTdHJpbmc6OmZvcm1hdCgic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9JXMga2V5Y29k
ZT0leCB0ZXh0PSclcyclcyIsIGV2ZW50VHlwZSwgZXZlbnQtPmtleXZhbCwgZXZlbnRTdHJpbmcu
dXRmOCgpLmRhdGEoKSwgZmFrZWRTdHJpbmcpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV9ldmVudHMuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT0l
cyBrZXljb2RlPSV4JXMiLCBldmVudFR5cGUsIGV2ZW50LT5rZXl2YWwsIGZha2VkU3RyaW5nKSk7
CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHNlbmRL
ZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoR2RrRXZlbnRLZXkqIGV2ZW50LCBSZXN1bHRz
VG9TZW5kIHJlc3VsdHNUb1NlbmQsIEV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbiBmYWtlZCkKKyAg
ICB7CisgICAgICAgIGNvbnN0IGNoYXIqIGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlID09IEdES19L
RVlfUkVMRUFTRSA/ICJyZWxlYXNlIiA6ICJwcmVzcyI7CisgICAgICAgIGNvbnN0IGNoYXIqIGZh
a2VkU3RyaW5nID0gZmFrZWQgPT0gRXZlbnRGYWtlZCA/ICIgKGZha2VkKSIgOiAiIjsKKyAgICAg
ICAgbV9ldmVudHMuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9z
aXRpb25SZXN1bHRzIHR5cGU9JXMga2V5Y29kZT0ldSVzIiwgZXZlbnRUeXBlLCBldmVudC0+a2V5
dmFsLCBmYWtlZFN0cmluZykpOworCisgICAgICAgIGlmIChyZXN1bHRzVG9TZW5kICYgQ29tcG9z
aXRpb24gJiYgIW1fY29uZmlybWVkQ29tcG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgICAgICBj
b25maXJtQ29tcG9zaXRpb25UZXh0KG1fY29uZmlybWVkQ29tcG9zaXRpb24pOworICAgICAgICBp
ZiAocmVzdWx0c1RvU2VuZCAmIFByZWVkaXQgJiYgIW1fcHJlZWRpdC5pc051bGwoKSkKKyAgICAg
ICAgICAgIHNldFByZWVkaXQobV9wcmVlZGl0LCBtX2N1cnNvck9mZnNldCk7CisKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGNhbkVkaXQoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbmZpcm1D
b21wb3NpdGlvblRleHQoU3RyaW5nIHRleHQpCisgICAgeworICAgICAgICBtX2V2ZW50cy5hcHBl
bmQoU3RyaW5nOjpmb3JtYXQoImNvbmZpcm1Db21wb3NpdGlvbiAnJXMnIiwgdGV4dC51dGY4KCku
ZGF0YSgpKSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbmZpcm1DdXJyZW50Q29tcG9z
aXRpb24oKQorICAgIHsKKyAgICAgICAgbV9ldmVudHMuYXBwZW5kKFN0cmluZygiY29uZmlybUN1
cnJlbnRjb21wb3NpdGlvbiIpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsQ3Vy
cmVudENvbXBvc2l0aW9uKCkKKyAgICB7CisgICAgICAgIG1fZXZlbnRzLmFwcGVuZChTdHJpbmco
ImNhbmNlbEN1cnJlbnRDb21wb3NpdGlvbiIpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0UHJlZWRpdChTdHJpbmcgcHJlZWRpdCwgaW50IGN1cnNvck9mZnNldCkKKyAgICB7CisgICAg
ICAgIG1fZXZlbnRzLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgic2V0UHJlZWRpdCB0ZXh0PSclcycg
Y3Vyc29yT2Zmc2V0PSVpIiwgcHJlZWRpdC51dGY4KCkuZGF0YSgpLCBjdXJzb3JPZmZzZXQpKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxHdGtXaWRnZXQ+IG1fdGVzdFdpbmRvdzsK
KyAgICBWZWN0b3I8U3RyaW5nPiBtX2V2ZW50czsKK307CisKK1RFU1QoR1RLLCBHdGtJbnB1dE1l
dGhvZEZpbHRlclNpbXBsZSkKK3sKKyAgICBUZXN0SW5wdXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRo
b2RGaWx0ZXI7CisgICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2
ZW50UGFpclRvRmlsdGVyKEdES19LRVlfZyk7CisgICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFBy
ZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfdCk7CisgICAgaW5wdXRN
ZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19L
RVlfayk7CisKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXZlbnRzID0gaW5wdXRNZXRob2RG
aWx0ZXIuZXZlbnRzKCk7CisKKyAgICBBU1NFUlRfRVEoNiwgZXZlbnRzLnNpemUoKSk7CisgICAg
QVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cHJlc3Mga2V5Y29kZT02
NyB0ZXh0PSdnJyIpLCBldmVudHNbMF0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1w
bGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT02NyIpLCBldmVudHNbMV0pOworICAgIEFT
U0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXByZXNzIGtleWNvZGU9NzQg
dGV4dD0ndCciKSwgZXZlbnRzWzJdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxl
S2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9NzQiKSwgZXZlbnRzWzNdKTsKKyAgICBBU1NF
UlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1wcmVzcyBrZXljb2RlPTZiIHRl
eHQ9J2snIiksIGV2ZW50c1s0XSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtl
eUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPTZiIiksIGV2ZW50c1s1XSk7Cit9CisKK1RFU1Qo
R1RLLCBHdGtJbnB1dE1ldGhvZEZpbHRlclVuaWNvZGVTZXF1ZW5jZSkKK3sKKyAgICBUZXN0SW5w
dXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRob2RGaWx0ZXI7CisKKyAgICAvLyBUaGlzIGlzIHNpbXBs
ZSB1bmljb2RlIGhleCBlbnRyeSBvZiB0aGUgY2hhcmFjdGVycywgdSwgMCwgMCwgZiwgNCBwcmVz
c2VkIHdpdGgKKyAgICAvLyB0aGUgc2hpZnQgYW5kIGNvbnRyb2xzIGtleXMgaGVsZCBkb3duLiBJ
biByZWFsaXR5LCB0aGVzZSB2YWx1ZXMgYXJlIG5vdCB0eXBpY2FsCisgICAgLy8gb2YgYW4gYWN0
dWFsIGhleCBlbnRyeSwgYmVjYXVzZSB0aGV5J2QgYmUgdHJhbnNmb3JtZWQgYnkgdGhlIHNoaWZ0
IG1vZGlmaWVyIGFjY29yZGluZworICAgIC8vIHRvIHRoZSBrZXlib2FyZCBsYXlvdXQuIEZvciBp
bnN0YW5jZSwgb24gYSBVUyBrZXlib2FyZCBhIDAgd2l0aCB0aGUgc2hpZnQga2V5IHByZXNzZWQK
KyAgICAvLyBpcyBhIHJpZ2h0IHBhcmVudGhlc2lzLiBVc2luZyB0aGVzZSB2YWx1ZXMgcHJldmVu
dHMgaGF2aW5nIHRvIHdvcmsgb3V0IHdoYXQgdGhlCisgICAgLy8gdHJhbnNmb3JtZWQgY2hhcmFj
dGVycyBhcmUgYmFzZWQgb24gdGhlIGN1cnJlbnQga2V5Ym9hcmQgbGF5b3V0LgorICAgIGlucHV0
TWV0aG9kRmlsdGVyLnNlbmRLZXlFdmVudFRvRmlsdGVyKEdES19LRVlfQ29udHJvbF9MLCBHREtf
S0VZX1BSRVNTKTsKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kS2V5RXZlbnRUb0ZpbHRlcihH
REtfS0VZX1NoaWZ0X0wsIEdES19LRVlfUFJFU1MsIEdES19DT05UUk9MX01BU0spOworCisgICAg
aW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVy
KEdES19LRVlfVSwgR0RLX1NISUZUX01BU0sgfCBHREtfQ09OVFJPTF9NQVNLKTsKKyAgICBpbnB1
dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RL
X0tFWV8wLCBHREtfU0hJRlRfTUFTSyB8IEdES19DT05UUk9MX01BU0spOworICAgIGlucHV0TWV0
aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZ
XzAsIEdES19TSElGVF9NQVNLIHwgR0RLX0NPTlRST0xfTUFTSyk7CisgICAgaW5wdXRNZXRob2RG
aWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfRiwg
R0RLX1NISUZUX01BU0sgfCBHREtfQ09OVFJPTF9NQVNLKTsKKyAgICBpbnB1dE1ldGhvZEZpbHRl
ci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV80LCBHREtf
U0hJRlRfTUFTSyB8IEdES19DT05UUk9MX01BU0spOworCisgICAgaW5wdXRNZXRob2RGaWx0ZXIu
c2VuZEtleUV2ZW50VG9GaWx0ZXIoR0RLX0tFWV9TaGlmdF9MLCBHREtfS0VZX1JFTEVBU0UsIEdE
S19DT05UUk9MX01BU0sgfCBHREtfU0hJRlRfTUFTSyk7CisgICAgaW5wdXRNZXRob2RGaWx0ZXIu
c2VuZEtleUV2ZW50VG9GaWx0ZXIoR0RLX0tFWV9Db250cm9sX0wsIEdES19LRVlfUkVMRUFTRSwg
R0RLX0NPTlRST0xfTUFTSyk7CisKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXZlbnRzID0g
aW5wdXRNZXRob2RGaWx0ZXIuZXZlbnRzKCk7CisgICAgQVNTRVJUX0VRKDIxLCBldmVudHMuc2l6
ZSgpKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1wcmVz
cyBrZXljb2RlPWZmZTMiKSwgZXZlbnRzWzBdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5k
U2ltcGxlS2V5RXZlbnQgdHlwZT1wcmVzcyBrZXljb2RlPWZmZTEiKSwgZXZlbnRzWzFdKTsKKyAg
ICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5
cGU9cHJlc3Mga2V5Y29kZT04NSIpLCBldmVudHNbMl0pOworICAgIEFTU0VSVF9FUShTdHJpbmco
InNldFByZWVkaXQgdGV4dD0ndScgY3Vyc29yT2Zmc2V0PTEiKSwgZXZlbnRzWzNdKTsKKyAgICBB
U1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9
NTUiKSwgZXZlbnRzWzRdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRo
Q29tcG9zaXRpb25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT00OCIpLCBldmVudHNbNV0pOwor
ICAgIEFTU0VSVF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0ndTAnIGN1cnNvck9mZnNldD0y
IiksIGV2ZW50c1s2XSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50
IHR5cGU9cmVsZWFzZSBrZXljb2RlPTMwIiksIGV2ZW50c1s3XSk7CisgICAgQVNTRVJUX0VRKFN0
cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPXByZXNzIGtleWNv
ZGU9NDgiKSwgZXZlbnRzWzhdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRl
eHQ9J3UwMCcgY3Vyc29yT2Zmc2V0PTMiKSwgZXZlbnRzWzldKTsKKyAgICBBU1NFUlRfRVEoU3Ry
aW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9MzAiKSwgZXZlbnRz
WzEwXSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9u
UmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9NzAiKSwgZXZlbnRzWzExXSk7CisgICAgQVNTRVJU
X0VRKFN0cmluZygic2V0UHJlZWRpdCB0ZXh0PSd1MDBGJyBjdXJzb3JPZmZzZXQ9NCIpLCBldmVu
dHNbMTJdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1y
ZWxlYXNlIGtleWNvZGU9NDYiKSwgZXZlbnRzWzEzXSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygi
c2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9NTIi
KSwgZXZlbnRzWzE0XSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2V0UHJlZWRpdCB0ZXh0PSd1
MDBGNCcgY3Vyc29yT2Zmc2V0PTUiKSwgZXZlbnRzWzE1XSk7CisgICAgQVNTRVJUX0VRKFN0cmlu
Zygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPTM0IiksIGV2ZW50c1sx
Nl0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoImNvbmZpcm1Db21wb3NpdGlvbiAnw7QnIiksIGV2
ZW50c1sxN10pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0nJyBjdXJz
b3JPZmZzZXQ9MCIpLCBldmVudHNbMThdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2lt
cGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9ZmZlMSIpLCBldmVudHNbMTldKTsKKyAg
ICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNv
ZGU9ZmZlMyIpLCBldmVudHNbMjBdKTsKK30KKworVEVTVChHVEssIEd0a0lucHV0TWV0aG9kRmls
dGVyQ29tcG9zZUtleSkKK3sKKyAgICBUZXN0SW5wdXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRob2RG
aWx0ZXI7CisKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZl
bnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9NdWx0aV9rZXkpOworICAgIGlucHV0TWV0aG9kRmlsdGVy
LnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX2Fwb3N0cm9w
aGUpOworICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBh
aXJUb0ZpbHRlcihHREtfS0VZX28pOworCisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV2ZW50
cyA9IGlucHV0TWV0aG9kRmlsdGVyLmV2ZW50cygpOworICAgIEFTU0VSVF9FUSg1LCBldmVudHMu
c2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRp
b25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT0zOSIpLCBldmVudHNbMF0pOworICAgIEFTU0VS
VF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0nJyBjdXJzb3JPZmZzZXQ9MCIpLCBldmVudHNb
MV0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVh
c2Uga2V5Y29kZT0yNyIpLCBldmVudHNbMl0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRT
aW1wbGVLZXlFdmVudCB0eXBlPXByZXNzIGtleWNvZGU9NmYgdGV4dD0nw7MnIiksIGV2ZW50c1sz
XSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFz
ZSBrZXljb2RlPTZmIiksIGV2ZW50c1s0XSk7Cit9CisKK3R5cGVkZWYgdm9pZCAoKkdldFByZWVk
aXRTdHJpbmdDYWxsYmFjaykgKEd0a0lNQ29udGV4dCosIGdjaGFyKiosIFBhbmdvQXR0ckxpc3Qq
KiwgaW50Kik7CitzdGF0aWMgdm9pZCB0ZW1wb3JhcnlHZXRQcmVlZGl0U3RyaW5nT3ZlcnJpZGUo
R3RrSU1Db250ZXh0KiwgY2hhcioqIHN0cmluZywgUGFuZ29BdHRyTGlzdCoqIGF0dHJzLCBpbnQq
IGN1cnNvclBvc2l0aW9uKQoreworICAgICpzdHJpbmcgPSBnX3N0cmR1cCgicHJlZWRpdCBvZiBk
b29tLCBicmluZ2VyIG9mIGNoZWVzZSIpOworICAgICpjdXJzb3JQb3NpdGlvbiA9IDM7Cit9CisK
K1RFU1QoR1RLLCBHdGtJbnB1dE1ldGhvZEZpbHRlckNvbnRleHRFdmVudHNXaXRob3V0S2V5RXZl
bnRzKQoreworICAgIFRlc3RJbnB1dE1ldGhvZEZpbHRlciBpbnB1dE1ldGhvZEZpbHRlcjsKKwor
ICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrIHRvIGF2b2lkIG1vY2tpbmcgb3V0IHRoZSBl
bnRpcmUgSW5wdXRNZXRob2RDb250ZXh0LCBieQorICAgIC8vIHNpbXBseSByZXBsYWNpbmcgdGhl
IGdldF9wcmVlZGl0X3N0cmluZyB2aXJ0dWFsIG1ldGhvZCBmb3IgdGhlIGxlbmd0aCBvZiB0aGlz
IHRlc3QuCisgICAgR3RrSU1Db250ZXh0KiBjb250ZXh0ID0gaW5wdXRNZXRob2RGaWx0ZXIuY29u
dGV4dCgpOworICAgIEd0a0lNQ29udGV4dENsYXNzKiBjb250ZXh0Q2xhc3MgPSBHVEtfSU1fQ09O
VEVYVF9HRVRfQ0xBU1MoY29udGV4dCk7CisgICAgR2V0UHJlZWRpdFN0cmluZ0NhbGxiYWNrIHBy
ZXZpb3VzQ2FsbGJhY2sgPSBjb250ZXh0Q2xhc3MtPmdldF9wcmVlZGl0X3N0cmluZzsKKyAgICBj
b250ZXh0Q2xhc3MtPmdldF9wcmVlZGl0X3N0cmluZyA9IHRlbXBvcmFyeUdldFByZWVkaXRTdHJp
bmdPdmVycmlkZTsKKworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShjb250ZXh0LCAicHJlZWRp
dC1jaGFuZ2VkIik7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGNvbnRleHQsICJjb21taXQi
LCAiY29tbWl0IHRleHQiKTsKKworICAgIGNvbnRleHRDbGFzcy0+Z2V0X3ByZWVkaXRfc3RyaW5n
ID0gcHJldmlvdXNDYWxsYmFjazsKKworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBldmVudHMg
PSBpbnB1dE1ldGhvZEZpbHRlci5ldmVudHMoKTsKKyAgICBBU1NFUlRfRVEoNiwgZXZlbnRzLnNp
emUoKSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9u
UmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9MTY3NzcyMTUgKGZha2VkKSIpLCBldmVudHNbMF0p
OworICAgIEFTU0VSVF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0ncHJlZWRpdCBvZiBkb29t
LCBicmluZ2VyIG9mIGNoZWVzZScgY3Vyc29yT2Zmc2V0PTMiKSwgZXZlbnRzWzFdKTsKKyAgICBB
U1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9
ZmZmZmZmIChmYWtlZCkiKSwgZXZlbnRzWzJdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5k
S2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT0xNjc3NzIx
NSAoZmFrZWQpIiksIGV2ZW50c1szXSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygiY29uZmlybUNv
bXBvc2l0aW9uICdjb21taXQgdGV4dCciKSwgZXZlbnRzWzRdKTsKKyAgICBBU1NFUlRfRVEoU3Ry
aW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9ZmZmZmZmIChmYWtl
ZCkiKSwgZXZlbnRzWzVdKTsKK30KKworc3RhdGljIGJvb2wgZ1Nhd0NvbnRleHRSZXNldCA9IGZh
bHNlOwordHlwZWRlZiB2b2lkICgqUmVzZXRDYWxsYmFjaykgKEd0a0lNQ29udGV4dCopOworc3Rh
dGljIHZvaWQgdGVtcG9yYXJ5UmVzZXRPdmVycmlkZShHdGtJTUNvbnRleHQqKQoreworICAgIGdT
YXdDb250ZXh0UmVzZXQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCB2ZXJpZnlDYW5jZWxlZENv
bXBvc2l0aW9uKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBldmVudHMpCit7CisgICAgQVNTRVJUX0VR
KDMsIGV2ZW50cy5zaXplKCkpOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdp
dGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVzcyBrZXljb2RlPTM5IiksIGV2ZW50c1swXSk7
CisgICAgQVNTRVJUX0VRKFN0cmluZygic2V0UHJlZWRpdCB0ZXh0PScnIGN1cnNvck9mZnNldD0w
IiksIGV2ZW50c1sxXSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50
IHR5cGU9cmVsZWFzZSBrZXljb2RlPTI3IiksIGV2ZW50c1syXSk7CisgICAgQVNTRVJUKGdTYXdD
b250ZXh0UmVzZXQpOworfQorCitURVNUKEdUSywgR3RrSW5wdXRNZXRob2RGaWx0ZXJDb250ZXh0
Rm9jdXNPdXREdXJpbmdPbmdvaW5nQ29tcG9zaXRpb24pCit7CisgICAgVGVzdElucHV0TWV0aG9k
RmlsdGVyIGlucHV0TWV0aG9kRmlsdGVyOworCisgICAgLy8gU2VlIGNvbW1lbnQgYWJvdmUgYWJv
dXQgdGhpcyB0ZWNobmlxdWUuCisgICAgR3RrSU1Db250ZXh0KiBjb250ZXh0ID0gaW5wdXRNZXRo
b2RGaWx0ZXIuY29udGV4dCgpOworICAgIEd0a0lNQ29udGV4dENsYXNzKiBjb250ZXh0Q2xhc3Mg
PSBHVEtfSU1fQ09OVEVYVF9HRVRfQ0xBU1MoY29udGV4dCk7CisgICAgUmVzZXRDYWxsYmFjayBw
cmV2aW91c0NhbGxiYWNrID0gY29udGV4dENsYXNzLT5yZXNldDsKKyAgICBjb250ZXh0Q2xhc3Mt
PnJlc2V0ID0gdGVtcG9yYXJ5UmVzZXRPdmVycmlkZTsKKworICAgIGdTYXdDb250ZXh0UmVzZXQg
PSBmYWxzZTsKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZl
bnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9NdWx0aV9rZXkpOworICAgIGlucHV0TWV0aG9kRmlsdGVy
LnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX2Fwb3N0cm9w
aGUpOworICAgIGlucHV0TWV0aG9kRmlsdGVyLm5vdGlmeUZvY3VzZWRPdXQoKTsKKworICAgIHZl
cmlmeUNhbmNlbGVkQ29tcG9zaXRpb24oaW5wdXRNZXRob2RGaWx0ZXIuZXZlbnRzKCkpOworCisg
ICAgY29udGV4dENsYXNzLT5yZXNldCA9IHByZXZpb3VzQ2FsbGJhY2s7Cit9CisKK1RFU1QoR1RL
LCBHdGtJbnB1dE1ldGhvZEZpbHRlckNvbnRleHRNb3VzZUNsaWNrRHVyaW5nT25nb2luZ0NvbXBv
c2l0aW9uKQoreworICAgIFRlc3RJbnB1dE1ldGhvZEZpbHRlciBpbnB1dE1ldGhvZEZpbHRlcjsK
KworICAgIC8vIFNlZSBjb21tZW50IGFib3ZlIGFib3V0IHRoaXMgdGVjaG5pcXVlLgorICAgIEd0
a0lNQ29udGV4dCogY29udGV4dCA9IGlucHV0TWV0aG9kRmlsdGVyLmNvbnRleHQoKTsKKyAgICBH
dGtJTUNvbnRleHRDbGFzcyogY29udGV4dENsYXNzID0gR1RLX0lNX0NPTlRFWFRfR0VUX0NMQVNT
KGNvbnRleHQpOworICAgIFJlc2V0Q2FsbGJhY2sgcHJldmlvdXNDYWxsYmFjayA9IGNvbnRleHRD
bGFzcy0+cmVzZXQ7CisgICAgY29udGV4dENsYXNzLT5yZXNldCA9IHRlbXBvcmFyeVJlc2V0T3Zl
cnJpZGU7CisKKyAgICBnU2F3Q29udGV4dFJlc2V0ID0gZmFsc2U7CisgICAgaW5wdXRNZXRob2RG
aWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfTXVs
dGlfa2V5KTsKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZl
bnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9hcG9zdHJvcGhlKTsKKyAgICBpbnB1dE1ldGhvZEZpbHRl
ci5ub3RpZnlNb3VzZUJ1dHRvblByZXNzKCk7CisKKyAgICB2ZXJpZnlDYW5jZWxlZENvbXBvc2l0
aW9uKGlucHV0TWV0aG9kRmlsdGVyLmV2ZW50cygpKTsKKworICAgIGNvbnRleHRDbGFzcy0+cmVz
ZXQgPSBwcmV2aW91c0NhbGxiYWNrOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2d0ay9JbnB1dE1ldGhvZEZp
bHRlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2d0ay9JbnB1dE1ldGhvZEZpbHRl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYWI3YzAuLjAwMDAwMDAKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMzEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAi
R3RrSW5wdXRNZXRob2RGaWx0ZXIuaCIKLSNpbmNsdWRlICJXVEZTdHJpbmdVdGlsaXRpZXMuaCIK
LSNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKLQotY2xhc3MgVGVzdElucHV0
TWV0aG9kRmlsdGVyIDogcHVibGljIEd0a0lucHV0TWV0aG9kRmlsdGVyIHsKLXB1YmxpYzoKLSAg
ICBUZXN0SW5wdXRNZXRob2RGaWx0ZXIoKQotICAgICAgICA6IG1fdGVzdFdpbmRvdyhndGtfd2lu
ZG93X25ldyhHVEtfV0lORE9XX1BPUFVQKSkKLSAgICB7Ci0gICAgICAgIGd0a193aWRnZXRfc2hv
dyhtX3Rlc3RXaW5kb3cuZ2V0KCkpOwotICAgICAgICBzZXRXaWRnZXQobV90ZXN0V2luZG93Lmdl
dCgpKTsKLQotICAgICAgICAvLyBGb2N1cyBpbiBpcyBuZWNlc3NhcnkgdG8gYWN0aXZhdGUgdGhl
IGRlZmF1bHQgaW5wdXQgbWV0aG9kIGluIHRoZSBtdWx0aWNvbnRleHQuCi0gICAgICAgIG5vdGlm
eUZvY3VzZWRJbigpOwotICAgIH0KLQotICAgIFZlY3RvcjxTdHJpbmc+JiBldmVudHMoKSB7IHJl
dHVybiBtX2V2ZW50czsgfQotCi0gICAgdm9pZCBzZW5kS2V5RXZlbnRUb0ZpbHRlcih1bnNpZ25l
ZCBpbnQgZ2RrS2V5VmFsdWUsIEdka0V2ZW50VHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgbW9kaWZp
ZXJzID0gMCkKLSAgICB7Ci0gICAgICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9uZXco
dHlwZSk7Ci0gICAgICAgIGV2ZW50LT5rZXkua2V5dmFsID0gZ2RrS2V5VmFsdWU7Ci0gICAgICAg
IGV2ZW50LT5rZXkuc3RhdGUgPSBtb2RpZmllcnM7Ci0gICAgICAgIGV2ZW50LT5rZXkud2luZG93
ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fdGVzdFdpbmRvdy5nZXQoKSk7Ci0gICAgICAgIGV2
ZW50LT5rZXkudGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgICAgIGdfb2JqZWN0X3JlZihl
dmVudC0+a2V5LndpbmRvdyk7Ci0KLSNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICAgICAg
Z2RrX2V2ZW50X3NldF9kZXZpY2UoZXZlbnQsIGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50
X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2VyKGdka19kaXNwbGF5X2dldF9k
ZWZhdWx0KCkpKSk7Ci0jZW5kaWYKLQotICAgICAgICBHVW5pcXVlT3V0UHRyPEdka0tleW1hcEtl
eT4ga2V5czsKLSAgICAgICAgZ2ludCBuS2V5czsKLSAgICAgICAgaWYgKGdka19rZXltYXBfZ2V0
X2VudHJpZXNfZm9yX2tleXZhbChnZGtfa2V5bWFwX2dldF9kZWZhdWx0KCksIGdka0tleVZhbHVl
LCAma2V5cy5vdXRQdHIoKSwgJm5LZXlzKSkKLSAgICAgICAgICAgIGV2ZW50LT5rZXkuaGFyZHdh
cmVfa2V5Y29kZSA9IGtleXMuZ2V0KClbMF0ua2V5Y29kZTsKLQotICAgICAgICBmaWx0ZXJLZXlF
dmVudCgmZXZlbnQtPmtleSk7Ci0gICAgICAgIGdka19ldmVudF9mcmVlKGV2ZW50KTsKLSAgICB9
Ci0KLSAgICB2b2lkIHNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcih1bnNp
Z25lZCBpbnQgZ2RrS2V5VmFsdWUsIHVuc2lnbmVkIGludCBtb2RpZmllcnMgPSAwKQotICAgIHsK
LSAgICAgICAgc2VuZEtleUV2ZW50VG9GaWx0ZXIoZ2RrS2V5VmFsdWUsIEdES19LRVlfUFJFU1Ms
IG1vZGlmaWVycyk7Ci0gICAgICAgIHNlbmRLZXlFdmVudFRvRmlsdGVyKGdka0tleVZhbHVlLCBH
REtfS0VZX1JFTEVBU0UsIG1vZGlmaWVycyk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmly
dHVhbCBib29sIHNlbmRTaW1wbGVLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQsIFdURjo6U3Ry
aW5nIGV2ZW50U3RyaW5nLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gZmFrZWQpCi0gICAgewot
ICAgICAgICBjb25zdCBjaGFyKiBldmVudFR5cGUgPSBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JF
TEVBU0UgPyAicmVsZWFzZSIgOiAicHJlc3MiOwotICAgICAgICBjb25zdCBjaGFyKiBmYWtlZFN0
cmluZyA9IGZha2VkID09IEV2ZW50RmFrZWQgPyAiIChmYWtlZCkiIDogIiI7Ci0gICAgICAgIGlm
ICghZXZlbnRTdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICBtX2V2ZW50cy5hcHBlbmQoU3Ry
aW5nOjpmb3JtYXQoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPSVzIGtleWNvZGU9JXggdGV4dD0n
JXMnJXMiLCBldmVudFR5cGUsIGV2ZW50LT5rZXl2YWwsIGV2ZW50U3RyaW5nLnV0ZjgoKS5kYXRh
KCksIGZha2VkU3RyaW5nKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZXZlbnRzLmFw
cGVuZChTdHJpbmc6OmZvcm1hdCgic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9JXMga2V5Y29kZT0l
eCVzIiwgZXZlbnRUeXBlLCBldmVudC0+a2V5dmFsLCBmYWtlZFN0cmluZykpOwotCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBzZW5kS2V5RXZlbnRXaXRo
Q29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiBldmVudCwgUmVzdWx0c1RvU2VuZCByZXN1
bHRzVG9TZW5kLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gZmFrZWQpCi0gICAgewotICAgICAg
ICBjb25zdCBjaGFyKiBldmVudFR5cGUgPSBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0Ug
PyAicmVsZWFzZSIgOiAicHJlc3MiOwotICAgICAgICBjb25zdCBjaGFyKiBmYWtlZFN0cmluZyA9
IGZha2VkID09IEV2ZW50RmFrZWQgPyAiIChmYWtlZCkiIDogIiI7Ci0gICAgICAgIG1fZXZlbnRz
LmFwcGVuZChTdHJpbmc6OmZvcm1hdCgic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0
cyB0eXBlPSVzIGtleWNvZGU9JXUlcyIsIGV2ZW50VHlwZSwgZXZlbnQtPmtleXZhbCwgZmFrZWRT
dHJpbmcpKTsKLQotICAgICAgICBpZiAocmVzdWx0c1RvU2VuZCAmIENvbXBvc2l0aW9uICYmICFt
X2NvbmZpcm1lZENvbXBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICAgICAgY29uZmlybUNvbXBv
c2l0aW9uVGV4dChtX2NvbmZpcm1lZENvbXBvc2l0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdHNU
b1NlbmQgJiBQcmVlZGl0ICYmICFtX3ByZWVkaXQuaXNOdWxsKCkpCi0gICAgICAgICAgICBzZXRQ
cmVlZGl0KG1fcHJlZWRpdCwgbV9jdXJzb3JPZmZzZXQpOwotCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBjYW5FZGl0KCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBjb25maXJtQ29tcG9zaXRpb25U
ZXh0KFN0cmluZyB0ZXh0KQotICAgIHsKLSAgICAgICAgbV9ldmVudHMuYXBwZW5kKFN0cmluZzo6
Zm9ybWF0KCJjb25maXJtQ29tcG9zaXRpb24gJyVzJyIsIHRleHQudXRmOCgpLmRhdGEoKSkpOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBjb25maXJtQ3VycmVudENvbXBvc2l0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIG1fZXZlbnRzLmFwcGVuZChTdHJpbmcoImNvbmZpcm1DdXJyZW50Y29tcG9z
aXRpb24iKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGNhbmNlbEN1cnJlbnRDb21wb3Np
dGlvbigpCi0gICAgewotICAgICAgICBtX2V2ZW50cy5hcHBlbmQoU3RyaW5nKCJjYW5jZWxDdXJy
ZW50Q29tcG9zaXRpb24iKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHNldFByZWVkaXQo
U3RyaW5nIHByZWVkaXQsIGludCBjdXJzb3JPZmZzZXQpCi0gICAgewotICAgICAgICBtX2V2ZW50
cy5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoInNldFByZWVkaXQgdGV4dD0nJXMnIGN1cnNvck9mZnNl
dD0laSIsIHByZWVkaXQudXRmOCgpLmRhdGEoKSwgY3Vyc29yT2Zmc2V0KSk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBtX3Rlc3RXaW5kb3c7Ci0gICAgVmVjdG9y
PFN0cmluZz4gbV9ldmVudHM7Ci19OwotCi1URVNUKEdUSywgR3RrSW5wdXRNZXRob2RGaWx0ZXJT
aW1wbGUpCi17Ci0gICAgVGVzdElucHV0TWV0aG9kRmlsdGVyIGlucHV0TWV0aG9kRmlsdGVyOwot
ICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0Zp
bHRlcihHREtfS0VZX2cpOwotICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVh
c2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX3QpOwotICAgIGlucHV0TWV0aG9kRmlsdGVy
LnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX2spOwotCi0g
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV2ZW50cyA9IGlucHV0TWV0aG9kRmlsdGVyLmV2ZW50
cygpOwotCi0gICAgQVNTRVJUX0VRKDYsIGV2ZW50cy5zaXplKCkpOwotICAgIEFTU0VSVF9FUShT
dHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXByZXNzIGtleWNvZGU9NjcgdGV4dD0nZyci
KSwgZXZlbnRzWzBdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQg
dHlwZT1yZWxlYXNlIGtleWNvZGU9NjciKSwgZXZlbnRzWzFdKTsKLSAgICBBU1NFUlRfRVEoU3Ry
aW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1wcmVzcyBrZXljb2RlPTc0IHRleHQ9J3QnIiks
IGV2ZW50c1syXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5
cGU9cmVsZWFzZSBrZXljb2RlPTc0IiksIGV2ZW50c1szXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmlu
Zygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cHJlc3Mga2V5Y29kZT02YiB0ZXh0PSdrJyIpLCBl
dmVudHNbNF0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBl
PXJlbGVhc2Uga2V5Y29kZT02YiIpLCBldmVudHNbNV0pOwotfQotCi1URVNUKEdUSywgR3RrSW5w
dXRNZXRob2RGaWx0ZXJVbmljb2RlU2VxdWVuY2UpCi17Ci0gICAgVGVzdElucHV0TWV0aG9kRmls
dGVyIGlucHV0TWV0aG9kRmlsdGVyOwotCi0gICAgLy8gVGhpcyBpcyBzaW1wbGUgdW5pY29kZSBo
ZXggZW50cnkgb2YgdGhlIGNoYXJhY3RlcnMsIHUsIDAsIDAsIGYsIDQgcHJlc3NlZCB3aXRoCi0g
ICAgLy8gdGhlIHNoaWZ0IGFuZCBjb250cm9scyBrZXlzIGhlbGQgZG93bi4gSW4gcmVhbGl0eSwg
dGhlc2UgdmFsdWVzIGFyZSBub3QgdHlwaWNhbAotICAgIC8vIG9mIGFuIGFjdHVhbCBoZXggZW50
cnksIGJlY2F1c2UgdGhleSdkIGJlIHRyYW5zZm9ybWVkIGJ5IHRoZSBzaGlmdCBtb2RpZmllciBh
Y2NvcmRpbmcKLSAgICAvLyB0byB0aGUga2V5Ym9hcmQgbGF5b3V0LiBGb3IgaW5zdGFuY2UsIG9u
IGEgVVMga2V5Ym9hcmQgYSAwIHdpdGggdGhlIHNoaWZ0IGtleSBwcmVzc2VkCi0gICAgLy8gaXMg
YSByaWdodCBwYXJlbnRoZXNpcy4gVXNpbmcgdGhlc2UgdmFsdWVzIHByZXZlbnRzIGhhdmluZyB0
byB3b3JrIG91dCB3aGF0IHRoZQotICAgIC8vIHRyYW5zZm9ybWVkIGNoYXJhY3RlcnMgYXJlIGJh
c2VkIG9uIHRoZSBjdXJyZW50IGtleWJvYXJkIGxheW91dC4KLSAgICBpbnB1dE1ldGhvZEZpbHRl
ci5zZW5kS2V5RXZlbnRUb0ZpbHRlcihHREtfS0VZX0NvbnRyb2xfTCwgR0RLX0tFWV9QUkVTUyk7
Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZEtleUV2ZW50VG9GaWx0ZXIoR0RLX0tFWV9TaGlm
dF9MLCBHREtfS0VZX1BSRVNTLCBHREtfQ09OVFJPTF9NQVNLKTsKLQotICAgIGlucHV0TWV0aG9k
RmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX1Us
IEdES19TSElGVF9NQVNLIHwgR0RLX0NPTlRST0xfTUFTSyk7Ci0gICAgaW5wdXRNZXRob2RGaWx0
ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfMCwgR0RL
X1NISUZUX01BU0sgfCBHREtfQ09OVFJPTF9NQVNLKTsKLSAgICBpbnB1dE1ldGhvZEZpbHRlci5z
ZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV8wLCBHREtfU0hJ
RlRfTUFTSyB8IEdES19DT05UUk9MX01BU0spOwotICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQ
cmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX0YsIEdES19TSElGVF9N
QVNLIHwgR0RLX0NPTlRST0xfTUFTSyk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNz
QW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfNCwgR0RLX1NISUZUX01BU0sg
fCBHREtfQ09OVFJPTF9NQVNLKTsKLQotICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRLZXlFdmVu
dFRvRmlsdGVyKEdES19LRVlfU2hpZnRfTCwgR0RLX0tFWV9SRUxFQVNFLCBHREtfQ09OVFJPTF9N
QVNLIHwgR0RLX1NISUZUX01BU0spOwotICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRLZXlFdmVu
dFRvRmlsdGVyKEdES19LRVlfQ29udHJvbF9MLCBHREtfS0VZX1JFTEVBU0UsIEdES19DT05UUk9M
X01BU0spOwotCi0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV2ZW50cyA9IGlucHV0TWV0aG9k
RmlsdGVyLmV2ZW50cygpOwotICAgIEFTU0VSVF9FUSgyMSwgZXZlbnRzLnNpemUoKSk7Ci0gICAg
QVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cHJlc3Mga2V5Y29kZT1m
ZmUzIiksIGV2ZW50c1swXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2
ZW50IHR5cGU9cHJlc3Mga2V5Y29kZT1mZmUxIiksIGV2ZW50c1sxXSk7Ci0gICAgQVNTRVJUX0VR
KFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPXByZXNzIGtl
eWNvZGU9ODUiKSwgZXZlbnRzWzJdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZXRQcmVlZGl0
IHRleHQ9J3UnIGN1cnNvck9mZnNldD0xIiksIGV2ZW50c1szXSk7Ci0gICAgQVNTRVJUX0VRKFN0
cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPTU1IiksIGV2ZW50
c1s0XSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9u
UmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9NDgiKSwgZXZlbnRzWzVdKTsKLSAgICBBU1NFUlRf
RVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9J3UwJyBjdXJzb3JPZmZzZXQ9MiIpLCBldmVudHNb
Nl0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVh
c2Uga2V5Y29kZT0zMCIpLCBldmVudHNbN10pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRL
ZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVzcyBrZXljb2RlPTQ4IiksIGV2
ZW50c1s4XSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2V0UHJlZWRpdCB0ZXh0PSd1MDAnIGN1
cnNvck9mZnNldD0zIiksIGV2ZW50c1s5XSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNp
bXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPTMwIiksIGV2ZW50c1sxMF0pOwotICAg
IEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlw
ZT1wcmVzcyBrZXljb2RlPTcwIiksIGV2ZW50c1sxMV0pOwotICAgIEFTU0VSVF9FUShTdHJpbmco
InNldFByZWVkaXQgdGV4dD0ndTAwRicgY3Vyc29yT2Zmc2V0PTQiKSwgZXZlbnRzWzEyXSk7Ci0g
ICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXlj
b2RlPTQ2IiksIGV2ZW50c1sxM10pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlFdmVu
dFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVzcyBrZXljb2RlPTUyIiksIGV2ZW50c1sx
NF0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0ndTAwRjQnIGN1cnNv
ck9mZnNldD01IiksIGV2ZW50c1sxNV0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1w
bGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT0zNCIpLCBldmVudHNbMTZdKTsKLSAgICBB
U1NFUlRfRVEoU3RyaW5nKCJjb25maXJtQ29tcG9zaXRpb24gJ8O0JyIpLCBldmVudHNbMTddKTsK
LSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9JycgY3Vyc29yT2Zmc2V0PTAi
KSwgZXZlbnRzWzE4XSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50
IHR5cGU9cmVsZWFzZSBrZXljb2RlPWZmZTEiKSwgZXZlbnRzWzE5XSk7Ci0gICAgQVNTRVJUX0VR
KFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPWZmZTMiKSwg
ZXZlbnRzWzIwXSk7Ci19Ci0KLVRFU1QoR1RLLCBHdGtJbnB1dE1ldGhvZEZpbHRlckNvbXBvc2VL
ZXkpCi17Ci0gICAgVGVzdElucHV0TWV0aG9kRmlsdGVyIGlucHV0TWV0aG9kRmlsdGVyOwotCi0g
ICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmls
dGVyKEdES19LRVlfTXVsdGlfa2V5KTsKLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NB
bmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9hcG9zdHJvcGhlKTsKLSAgICBp
bnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIo
R0RLX0tFWV9vKTsKLQotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBldmVudHMgPSBpbnB1dE1l
dGhvZEZpbHRlci5ldmVudHMoKTsKLSAgICBBU1NFUlRfRVEoNSwgZXZlbnRzLnNpemUoKSk7Ci0g
ICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0
eXBlPXByZXNzIGtleWNvZGU9MzkiKSwgZXZlbnRzWzBdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5n
KCJzZXRQcmVlZGl0IHRleHQ9JycgY3Vyc29yT2Zmc2V0PTAiKSwgZXZlbnRzWzFdKTsKLSAgICBB
U1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9
MjciKSwgZXZlbnRzWzJdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZl
bnQgdHlwZT1wcmVzcyBrZXljb2RlPTZmIHRleHQ9J8OzJyIpLCBldmVudHNbM10pOwotICAgIEFT
U0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT02
ZiIpLCBldmVudHNbNF0pOwotfQotCi10eXBlZGVmIHZvaWQgKCpHZXRQcmVlZGl0U3RyaW5nQ2Fs
bGJhY2spIChHdGtJTUNvbnRleHQqLCBnY2hhcioqLCBQYW5nb0F0dHJMaXN0KiosIGludCopOwot
c3RhdGljIHZvaWQgdGVtcG9yYXJ5R2V0UHJlZWRpdFN0cmluZ092ZXJyaWRlKEd0a0lNQ29udGV4
dCosIGNoYXIqKiBzdHJpbmcsIFBhbmdvQXR0ckxpc3QqKiBhdHRycywgaW50KiBjdXJzb3JQb3Np
dGlvbikKLXsKLSAgICAqc3RyaW5nID0gZ19zdHJkdXAoInByZWVkaXQgb2YgZG9vbSwgYnJpbmdl
ciBvZiBjaGVlc2UiKTsKLSAgICAqY3Vyc29yUG9zaXRpb24gPSAzOwotfQotCi1URVNUKEdUSywg
R3RrSW5wdXRNZXRob2RGaWx0ZXJDb250ZXh0RXZlbnRzV2l0aG91dEtleUV2ZW50cykKLXsKLSAg
ICBUZXN0SW5wdXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRob2RGaWx0ZXI7Ci0KLSAgICAvLyBUaGlz
IGlzIGEgYml0IG9mIGEgaGFjayB0byBhdm9pZCBtb2NraW5nIG91dCB0aGUgZW50aXJlIElucHV0
TWV0aG9kQ29udGV4dCwgYnkKLSAgICAvLyBzaW1wbHkgcmVwbGFjaW5nIHRoZSBnZXRfcHJlZWRp
dF9zdHJpbmcgdmlydHVhbCBtZXRob2QgZm9yIHRoZSBsZW5ndGggb2YgdGhpcyB0ZXN0LgotICAg
IEd0a0lNQ29udGV4dCogY29udGV4dCA9IGlucHV0TWV0aG9kRmlsdGVyLmNvbnRleHQoKTsKLSAg
ICBHdGtJTUNvbnRleHRDbGFzcyogY29udGV4dENsYXNzID0gR1RLX0lNX0NPTlRFWFRfR0VUX0NM
QVNTKGNvbnRleHQpOwotICAgIEdldFByZWVkaXRTdHJpbmdDYWxsYmFjayBwcmV2aW91c0NhbGxi
YWNrID0gY29udGV4dENsYXNzLT5nZXRfcHJlZWRpdF9zdHJpbmc7Ci0gICAgY29udGV4dENsYXNz
LT5nZXRfcHJlZWRpdF9zdHJpbmcgPSB0ZW1wb3JhcnlHZXRQcmVlZGl0U3RyaW5nT3ZlcnJpZGU7
Ci0KLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoY29udGV4dCwgInByZWVkaXQtY2hhbmdlZCIp
OwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShjb250ZXh0LCAiY29tbWl0IiwgImNvbW1pdCB0
ZXh0Iik7Ci0KLSAgICBjb250ZXh0Q2xhc3MtPmdldF9wcmVlZGl0X3N0cmluZyA9IHByZXZpb3Vz
Q2FsbGJhY2s7Ci0KLSAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXZlbnRzID0gaW5wdXRNZXRo
b2RGaWx0ZXIuZXZlbnRzKCk7Ci0gICAgQVNTRVJUX0VRKDYsIGV2ZW50cy5zaXplKCkpOwotICAg
IEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlw
ZT1wcmVzcyBrZXljb2RlPTE2Nzc3MjE1IChmYWtlZCkiKSwgZXZlbnRzWzBdKTsKLSAgICBBU1NF
UlRfRVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9J3ByZWVkaXQgb2YgZG9vbSwgYnJpbmdlciBv
ZiBjaGVlc2UnIGN1cnNvck9mZnNldD0zIiksIGV2ZW50c1sxXSk7Ci0gICAgQVNTRVJUX0VRKFN0
cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPWZmZmZmZiAoZmFr
ZWQpIiksIGV2ZW50c1syXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0
aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9MTY3NzcyMTUgKGZha2VkKSIp
LCBldmVudHNbM10pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoImNvbmZpcm1Db21wb3NpdGlvbiAn
Y29tbWl0IHRleHQnIiksIGV2ZW50c1s0XSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNp
bXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPWZmZmZmZiAoZmFrZWQpIiksIGV2ZW50
c1s1XSk7Ci19Ci0KLXN0YXRpYyBib29sIGdTYXdDb250ZXh0UmVzZXQgPSBmYWxzZTsKLXR5cGVk
ZWYgdm9pZCAoKlJlc2V0Q2FsbGJhY2spIChHdGtJTUNvbnRleHQqKTsKLXN0YXRpYyB2b2lkIHRl
bXBvcmFyeVJlc2V0T3ZlcnJpZGUoR3RrSU1Db250ZXh0KikKLXsKLSAgICBnU2F3Q29udGV4dFJl
c2V0ID0gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgdmVyaWZ5Q2FuY2VsZWRDb21wb3NpdGlvbihj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZXZlbnRzKQotewotICAgIEFTU0VSVF9FUSgzLCBldmVudHMu
c2l6ZSgpKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRp
b25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT0zOSIpLCBldmVudHNbMF0pOwotICAgIEFTU0VS
VF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0nJyBjdXJzb3JPZmZzZXQ9MCIpLCBldmVudHNb
MV0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVh
c2Uga2V5Y29kZT0yNyIpLCBldmVudHNbMl0pOwotICAgIEFTU0VSVChnU2F3Q29udGV4dFJlc2V0
KTsKLX0KLQotVEVTVChHVEssIEd0a0lucHV0TWV0aG9kRmlsdGVyQ29udGV4dEZvY3VzT3V0RHVy
aW5nT25nb2luZ0NvbXBvc2l0aW9uKQotewotICAgIFRlc3RJbnB1dE1ldGhvZEZpbHRlciBpbnB1
dE1ldGhvZEZpbHRlcjsKLQotICAgIC8vIFNlZSBjb21tZW50IGFib3ZlIGFib3V0IHRoaXMgdGVj
aG5pcXVlLgotICAgIEd0a0lNQ29udGV4dCogY29udGV4dCA9IGlucHV0TWV0aG9kRmlsdGVyLmNv
bnRleHQoKTsKLSAgICBHdGtJTUNvbnRleHRDbGFzcyogY29udGV4dENsYXNzID0gR1RLX0lNX0NP
TlRFWFRfR0VUX0NMQVNTKGNvbnRleHQpOwotICAgIFJlc2V0Q2FsbGJhY2sgcHJldmlvdXNDYWxs
YmFjayA9IGNvbnRleHRDbGFzcy0+cmVzZXQ7Ci0gICAgY29udGV4dENsYXNzLT5yZXNldCA9IHRl
bXBvcmFyeVJlc2V0T3ZlcnJpZGU7Ci0KLSAgICBnU2F3Q29udGV4dFJlc2V0ID0gZmFsc2U7Ci0g
ICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmls
dGVyKEdES19LRVlfTXVsdGlfa2V5KTsKLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NB
bmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9hcG9zdHJvcGhlKTsKLSAgICBp
bnB1dE1ldGhvZEZpbHRlci5ub3RpZnlGb2N1c2VkT3V0KCk7Ci0KLSAgICB2ZXJpZnlDYW5jZWxl
ZENvbXBvc2l0aW9uKGlucHV0TWV0aG9kRmlsdGVyLmV2ZW50cygpKTsKLQotICAgIGNvbnRleHRD
bGFzcy0+cmVzZXQgPSBwcmV2aW91c0NhbGxiYWNrOwotfQotCi1URVNUKEdUSywgR3RrSW5wdXRN
ZXRob2RGaWx0ZXJDb250ZXh0TW91c2VDbGlja0R1cmluZ09uZ29pbmdDb21wb3NpdGlvbikKLXsK
LSAgICBUZXN0SW5wdXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRob2RGaWx0ZXI7Ci0KLSAgICAvLyBT
ZWUgY29tbWVudCBhYm92ZSBhYm91dCB0aGlzIHRlY2huaXF1ZS4KLSAgICBHdGtJTUNvbnRleHQq
IGNvbnRleHQgPSBpbnB1dE1ldGhvZEZpbHRlci5jb250ZXh0KCk7Ci0gICAgR3RrSU1Db250ZXh0
Q2xhc3MqIGNvbnRleHRDbGFzcyA9IEdUS19JTV9DT05URVhUX0dFVF9DTEFTUyhjb250ZXh0KTsK
LSAgICBSZXNldENhbGxiYWNrIHByZXZpb3VzQ2FsbGJhY2sgPSBjb250ZXh0Q2xhc3MtPnJlc2V0
OwotICAgIGNvbnRleHRDbGFzcy0+cmVzZXQgPSB0ZW1wb3JhcnlSZXNldE92ZXJyaWRlOwotCi0g
ICAgZ1Nhd0NvbnRleHRSZXNldCA9IGZhbHNlOwotICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQ
cmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX011bHRpX2tleSk7Ci0g
ICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmls
dGVyKEdES19LRVlfYXBvc3Ryb3BoZSk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIubm90aWZ5TW91
c2VCdXR0b25QcmVzcygpOwotCi0gICAgdmVyaWZ5Q2FuY2VsZWRDb21wb3NpdGlvbihpbnB1dE1l
dGhvZEZpbHRlci5ldmVudHMoKSk7Ci0KLSAgICBjb250ZXh0Q2xhc3MtPnJlc2V0ID0gcHJldmlv
dXNDYWxsYmFjazsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231254</attachid>
            <date>2014-05-10 23:40:01 -0700</date>
            <delta_ts>2014-05-14 05:21:11 -0700</delta_ts>
            <desc>Rebased patch</desc>
            <filename>wcore-unit-tests.diff</filename>
            <type>text/plain</type>
            <size>33090</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxNDQ2
OWYwLi5mMDYxOGE4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTQtMDUtMDkgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFJFR1JFU1NJT04oQ01BS0UpOiBbR1RL
XSBJbnB1dE1ldGhvZEZpbHRlciB1bml0IHRlc3QgaXMgbm90IGJ1aWx0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI2ODYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCcmluZyBiYWNrIElucHV0TWV0aG9k
RmlsdGVyIHRlc3QgdG8gdGhlIGJ1aWxkIGFuZCBjb21waWxlIGl0IGludG8KKyAgICAgICAgYSBz
aW5nbGUgYmluYXJ5IFRlc3RXZWJDb3JlIHdpdGggdGhlIG90aGVyIFdlYkNvcmUgdGVzdHMuIEFs
c28KKyAgICAgICAgbW92ZSBpdCBmcm9tIFRlc3RXZWJLaXRBUEkvZ3RrLyB0byBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvZ3RrLy4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWd0ay10ZXN0
czoKKyAgICAgICAgKFRlc3RSdW5uZXIpOiBSZW1vdmUgV2ViQ29yZUd0ayBmcm9tIHRoZSBsaXN0
IG9mIHRlc3QgZGlyZWN0b3JpZXMuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdU
Sy5jbWFrZToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3RrL0lucHV0
TWV0aG9kRmlsdGVyLmNwcDogUmVuYW1lZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
Z3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcC4KKwogMjAxNC0wNS0xMCAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihDTUFLRSk6
IFtHVEtdIFdlYktpdDIgQyBBUEkgdGVzdHMgYXJlIG5vdCBsb25nZXIgYnVpbHQgaW4gdGhlIHNh
bWUgYmluYXJ5CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMgYi9Ub29s
cy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKaW5kZXggNjBlZGMwMi4uMTVkODVjMCAxMDA3NTUKLS0t
IGEvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWd0
ay10ZXN0cwpAQCAtNTgsNyArNTgsNyBAQCBjbGFzcyBUZXN0VGltZW91dChFeGNlcHRpb24pOgog
ICAgIHBhc3MKIAogY2xhc3MgVGVzdFJ1bm5lcjoKLSAgICBURVNUX0RJUlMgPSBbICJXZWJLaXQy
R3RrIiwgIldlYktpdDIiLCAiSmF2YVNjcmlwdENvcmUiLCAiV1RGIiwgIldlYkNvcmUiLCAgIldl
YkNvcmVHdGsiIF0KKyAgICBURVNUX0RJUlMgPSBbICJXZWJLaXQyR3RrIiwgIldlYktpdDIiLCAi
SmF2YVNjcmlwdENvcmUiLCAiV1RGIiwgIldlYkNvcmUiIF0KIAogICAgIFNLSVBQRUQgPSBbCiAg
ICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyR3RrL1Rlc3RVSUNsaWVudCIsICIvd2Via2l0Mi9X
ZWJLaXRXZWJWaWV3L21vdXNlLXRhcmdldCIsICJUZXN0IHRpbWVzIG91dCBhZnRlciByMTUwODkw
IiwgMTE3Njg5KSwKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsu
Y21ha2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDkzOGVh
OWYuLmU0MjI4NjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsu
Y21ha2UKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMTA2
LDE2ICsxMDYsMjUgQEAgYWRkX3Rlc3QoVGVzdFdlYktpdDIgJHtURVNUV0VCS0lUQVBJX1JVTlRJ
TUVfT1VUUFVUX0RJUkVDVE9SWX0vV2ViS2l0Mi9UZXN0V2ViS2kKIHNldF90ZXN0c19wcm9wZXJ0
aWVzKFRlc3RXZWJLaXQyIFBST1BFUlRJRVMgVElNRU9VVCA2MCkKIHNldF90YXJnZXRfcHJvcGVy
dGllcyhUZXN0V2ViS2l0MiBQUk9QRVJUSUVTIFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAke1RF
U1RXRUJLSVRBUElfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS9XZWJLaXQyKQogCi0jIFRoZSBs
aXN0IGJlbG93IHdvcmtzIGxpa2UgYSB0ZXN0IGV4cGVjdGF0aW9uLiBUZXN0cyBpbiB0aGUKLSMg
dGVzdF97d2Via2l0Ml9hcGl8d2ViY29yZX1fQklOQVJJRVMgbGlzdCBhcmUgYWRkZWQgdG8gdGhl
IHRlc3QgcnVubmVyIGFuZAotIyB0cmllZCBvbiB0aGUgYm90cyBvbiBldmVyeSBidWlsZC4gVGVz
dHMgaW4gdGVzdF97d2Via2l0Ml9hcGl8d2ViY29yZX1fQklOQVJJRVMKLSMgYXJlIGNvbXBpbGVk
IGFuZCBzdWZmaXhlZCB3aXRoIGZhaWwgYW5kIHNraXBwZWQgZnJvbSB0aGUgdGVzdCBydW5uZXIu
Ci0jCi0jIE1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXN0cyBhcmUgcGFzc2luZyBvbiBib3RoIERlYnVn
IGFuZAotIyBSZWxlYXNlIGJ1aWxkcyBiZWZvcmUgYWRkaW5nIGl0IHRvIHRlc3Rfe3dlYmtpdDJf
YXBpfHdlYmNvcmV9X0JJTkFSSUVTLgorc2V0KFRlc3RXZWJDb3JlR3RrX1NPVVJDRVMKKyAgICAk
e1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5jcHAKKyAgICAke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAorICAgICR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuY3BwCisgICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW50UmVjdENhaXJvLmNwcAorICAgICR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9JbnRSZWN0R3RrLmNwcAorICAgICR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElf
RElSfS9UZXN0cy9XZWJDb3JlL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5jcHAKKykKIAotc2V0KHRl
c3Rfd2ViY29yZV9CSU5BUklFUwotICAgIExheW91dFVuaXQKLSAgICBVUkwKK2FkZF9leGVjdXRh
YmxlKFRlc3RXZWJDb3JlCisgICAgJHt0ZXN0X21haW5fU09VUkNFU30KKyAgICAke1Rlc3RXZWJD
b3JlR3RrX1NPVVJDRVN9CisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHNDb250cm9sbGVy
LmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvTGF5b3V0VW5pdC5j
cHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL1VSTC5jcHAKICkKIAor
dGFyZ2V0X2xpbmtfbGlicmFyaWVzKFRlc3RXZWJDb3JlICR7dGVzdF93ZWJjb3JlX0xJQlJBUklF
U30pCithZGRfdGVzdChUZXN0V2ViQ29yZSAke1RFU1RXRUJLSVRBUElfUlVOVElNRV9PVVRQVVRf
RElSRUNUT1JZfS9XZWJDb3JlL1Rlc3RXZWJDb3JlKQorc2V0X3Rlc3RzX3Byb3BlcnRpZXMoVGVz
dFdlYkNvcmUgUFJPUEVSVElFUyBUSU1FT1VUIDYwKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFRl
c3RXZWJDb3JlIFBST1BFUlRJRVMgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7VEVTVFdFQktJ
VEFQSV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dlYkNvcmUpCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9ndGsvSW5wdXRNZXRob2RGaWx0ZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZjNjOTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3RrL0lucHV0TWV0
aG9kRmlsdGVyLmNwcApAQCAtMCwwICsxLDMxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJXVEZTdHJpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0d0a0lucHV0TWV0aG9k
RmlsdGVyLmg+CisjaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KKyNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2NsYXNz
IFRlc3RJbnB1dE1ldGhvZEZpbHRlciA6IHB1YmxpYyBHdGtJbnB1dE1ldGhvZEZpbHRlciB7Citw
dWJsaWM6CisgICAgVGVzdElucHV0TWV0aG9kRmlsdGVyKCkKKyAgICAgICAgOiBtX3Rlc3RXaW5k
b3coZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCkpCisgICAgeworICAgICAgICBndGtf
d2lkZ2V0X3Nob3cobV90ZXN0V2luZG93LmdldCgpKTsKKyAgICAgICAgc2V0V2lkZ2V0KG1fdGVz
dFdpbmRvdy5nZXQoKSk7CisKKyAgICAgICAgLy8gRm9jdXMgaW4gaXMgbmVjZXNzYXJ5IHRvIGFj
dGl2YXRlIHRoZSBkZWZhdWx0IGlucHV0IG1ldGhvZCBpbiB0aGUgbXVsdGljb250ZXh0LgorICAg
ICAgICBub3RpZnlGb2N1c2VkSW4oKTsKKyAgICB9CisKKyAgICBWZWN0b3I8U3RyaW5nPiYgZXZl
bnRzKCkgeyByZXR1cm4gbV9ldmVudHM7IH0KKworICAgIHZvaWQgc2VuZEtleUV2ZW50VG9GaWx0
ZXIodW5zaWduZWQgZ2RrS2V5VmFsdWUsIEdka0V2ZW50VHlwZSB0eXBlLCB1bnNpZ25lZCBtb2Rp
ZmllcnMgPSAwKQorICAgIHsKKyAgICAgICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25l
dyh0eXBlKTsKKyAgICAgICAgZXZlbnQtPmtleS5rZXl2YWwgPSBnZGtLZXlWYWx1ZTsKKyAgICAg
ICAgZXZlbnQtPmtleS5zdGF0ZSA9IG1vZGlmaWVyczsKKyAgICAgICAgZXZlbnQtPmtleS53aW5k
b3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cobV90ZXN0V2luZG93LmdldCgpKTsKKyAgICAgICAg
ZXZlbnQtPmtleS50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICAgICAgZ19vYmplY3RfcmVm
KGV2ZW50LT5rZXkud2luZG93KTsKKworI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgICAg
ICBnZGtfZXZlbnRfc2V0X2RldmljZShldmVudCwgZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGll
bnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX2Rpc3BsYXlfZ2V0
X2RlZmF1bHQoKSkpKTsKKyNlbmRpZgorCisgICAgICAgIEdVbmlxdWVPdXRQdHI8R2RrS2V5bWFw
S2V5PiBrZXlzOworICAgICAgICBnaW50IG5LZXlzOworICAgICAgICBpZiAoZ2RrX2tleW1hcF9n
ZXRfZW50cmllc19mb3Jfa2V5dmFsKGdka19rZXltYXBfZ2V0X2RlZmF1bHQoKSwgZ2RrS2V5VmFs
dWUsICZrZXlzLm91dFB0cigpLCAmbktleXMpKQorICAgICAgICAgICAgZXZlbnQtPmtleS5oYXJk
d2FyZV9rZXljb2RlID0ga2V5cy5nZXQoKVswXS5rZXljb2RlOworCisgICAgICAgIGZpbHRlcktl
eUV2ZW50KCZldmVudC0+a2V5KTsKKyAgICAgICAgZ2RrX2V2ZW50X2ZyZWUoZXZlbnQpOworICAg
IH0KKworICAgIHZvaWQgc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKHVu
c2lnbmVkIGdka0tleVZhbHVlLCB1bnNpZ25lZCBtb2RpZmllcnMgPSAwKQorICAgIHsKKyAgICAg
ICAgc2VuZEtleUV2ZW50VG9GaWx0ZXIoZ2RrS2V5VmFsdWUsIEdES19LRVlfUFJFU1MsIG1vZGlm
aWVycyk7CisgICAgICAgIHNlbmRLZXlFdmVudFRvRmlsdGVyKGdka0tleVZhbHVlLCBHREtfS0VZ
X1JFTEVBU0UsIG1vZGlmaWVycyk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBi
b29sIHNlbmRTaW1wbGVLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQsIFdURjo6U3RyaW5nIGV2
ZW50U3RyaW5nLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gZmFrZWQpCisgICAgeworICAgICAg
ICBjb25zdCBjaGFyKiBldmVudFR5cGUgPSBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0Ug
PyAicmVsZWFzZSIgOiAicHJlc3MiOworICAgICAgICBjb25zdCBjaGFyKiBmYWtlZFN0cmluZyA9
IGZha2VkID09IEV2ZW50RmFrZWQgPyAiIChmYWtlZCkiIDogIiI7CisgICAgICAgIGlmICghZXZl
bnRTdHJpbmcuaXNOdWxsKCkpCisgICAgICAgICAgICBtX2V2ZW50cy5hcHBlbmQoU3RyaW5nOjpm
b3JtYXQoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPSVzIGtleWNvZGU9JXggdGV4dD0nJXMnJXMi
LCBldmVudFR5cGUsIGV2ZW50LT5rZXl2YWwsIGV2ZW50U3RyaW5nLnV0ZjgoKS5kYXRhKCksIGZh
a2VkU3RyaW5nKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZXZlbnRzLmFwcGVuZChT
dHJpbmc6OmZvcm1hdCgic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9JXMga2V5Y29kZT0leCVzIiwg
ZXZlbnRUeXBlLCBldmVudC0+a2V5dmFsLCBmYWtlZFN0cmluZykpOworCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBzZW5kS2V5RXZlbnRXaXRoQ29tcG9z
aXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiBldmVudCwgUmVzdWx0c1RvU2VuZCByZXN1bHRzVG9T
ZW5kLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gZmFrZWQpCisgICAgeworICAgICAgICBjb25z
dCBjaGFyKiBldmVudFR5cGUgPSBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UgPyAicmVs
ZWFzZSIgOiAicHJlc3MiOworICAgICAgICBjb25zdCBjaGFyKiBmYWtlZFN0cmluZyA9IGZha2Vk
ID09IEV2ZW50RmFrZWQgPyAiIChmYWtlZCkiIDogIiI7CisgICAgICAgIG1fZXZlbnRzLmFwcGVu
ZChTdHJpbmc6OmZvcm1hdCgic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBl
PSVzIGtleWNvZGU9JXUlcyIsIGV2ZW50VHlwZSwgZXZlbnQtPmtleXZhbCwgZmFrZWRTdHJpbmcp
KTsKKworICAgICAgICBpZiAocmVzdWx0c1RvU2VuZCAmIENvbXBvc2l0aW9uICYmICFtX2NvbmZp
cm1lZENvbXBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICAgICAgY29uZmlybUNvbXBvc2l0aW9u
VGV4dChtX2NvbmZpcm1lZENvbXBvc2l0aW9uKTsKKyAgICAgICAgaWYgKHJlc3VsdHNUb1NlbmQg
JiBQcmVlZGl0ICYmICFtX3ByZWVkaXQuaXNOdWxsKCkpCisgICAgICAgICAgICBzZXRQcmVlZGl0
KG1fcHJlZWRpdCwgbV9jdXJzb3JPZmZzZXQpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHZpcnR1YWwgYm9vbCBjYW5FZGl0KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjb25maXJtQ29tcG9zaXRpb25UZXh0KFN0
cmluZyB0ZXh0KQorICAgIHsKKyAgICAgICAgbV9ldmVudHMuYXBwZW5kKFN0cmluZzo6Zm9ybWF0
KCJjb25maXJtQ29tcG9zaXRpb24gJyVzJyIsIHRleHQudXRmOCgpLmRhdGEoKSkpOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBjb25maXJtQ3VycmVudENvbXBvc2l0aW9uKCkKKyAgICB7Cisg
ICAgICAgIG1fZXZlbnRzLmFwcGVuZChTdHJpbmcoImNvbmZpcm1DdXJyZW50Y29tcG9zaXRpb24i
KSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNhbmNlbEN1cnJlbnRDb21wb3NpdGlvbigp
CisgICAgeworICAgICAgICBtX2V2ZW50cy5hcHBlbmQoU3RyaW5nKCJjYW5jZWxDdXJyZW50Q29t
cG9zaXRpb24iKSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFByZWVkaXQoU3RyaW5n
IHByZWVkaXQsIGludCBjdXJzb3JPZmZzZXQpCisgICAgeworICAgICAgICBtX2V2ZW50cy5hcHBl
bmQoU3RyaW5nOjpmb3JtYXQoInNldFByZWVkaXQgdGV4dD0nJXMnIGN1cnNvck9mZnNldD0laSIs
IHByZWVkaXQudXRmOCgpLmRhdGEoKSwgY3Vyc29yT2Zmc2V0KSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBtX3Rlc3RXaW5kb3c7CisgICAgVmVjdG9yPFN0cmlu
Zz4gbV9ldmVudHM7Cit9OworCitURVNUKEdUSywgR3RrSW5wdXRNZXRob2RGaWx0ZXJTaW1wbGUp
Cit7CisgICAgVGVzdElucHV0TWV0aG9kRmlsdGVyIGlucHV0TWV0aG9kRmlsdGVyOworICAgIGlu
cHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihH
REtfS0VZX2cpOworICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlF
dmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX3QpOworICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQ
cmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX2spOworCisgICAgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGV2ZW50cyA9IGlucHV0TWV0aG9kRmlsdGVyLmV2ZW50cygpOwor
CisgICAgQVNTRVJUX0VRKDYsIGV2ZW50cy5zaXplKCkpOworICAgIEFTU0VSVF9FUShTdHJpbmco
InNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXByZXNzIGtleWNvZGU9NjcgdGV4dD0nZyciKSwgZXZl
bnRzWzBdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1y
ZWxlYXNlIGtleWNvZGU9NjciKSwgZXZlbnRzWzFdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJz
ZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1wcmVzcyBrZXljb2RlPTc0IHRleHQ9J3QnIiksIGV2ZW50
c1syXSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVs
ZWFzZSBrZXljb2RlPTc0IiksIGV2ZW50c1szXSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2Vu
ZFNpbXBsZUtleUV2ZW50IHR5cGU9cHJlc3Mga2V5Y29kZT02YiB0ZXh0PSdrJyIpLCBldmVudHNb
NF0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVh
c2Uga2V5Y29kZT02YiIpLCBldmVudHNbNV0pOworfQorCitURVNUKEdUSywgR3RrSW5wdXRNZXRo
b2RGaWx0ZXJVbmljb2RlU2VxdWVuY2UpCit7CisgICAgVGVzdElucHV0TWV0aG9kRmlsdGVyIGlu
cHV0TWV0aG9kRmlsdGVyOworCisgICAgLy8gVGhpcyBpcyBzaW1wbGUgdW5pY29kZSBoZXggZW50
cnkgb2YgdGhlIGNoYXJhY3RlcnMsIHUsIDAsIDAsIGYsIDQgcHJlc3NlZCB3aXRoCisgICAgLy8g
dGhlIHNoaWZ0IGFuZCBjb250cm9scyBrZXlzIGhlbGQgZG93bi4gSW4gcmVhbGl0eSwgdGhlc2Ug
dmFsdWVzIGFyZSBub3QgdHlwaWNhbAorICAgIC8vIG9mIGFuIGFjdHVhbCBoZXggZW50cnksIGJl
Y2F1c2UgdGhleSdkIGJlIHRyYW5zZm9ybWVkIGJ5IHRoZSBzaGlmdCBtb2RpZmllciBhY2NvcmRp
bmcKKyAgICAvLyB0byB0aGUga2V5Ym9hcmQgbGF5b3V0LiBGb3IgaW5zdGFuY2UsIG9uIGEgVVMg
a2V5Ym9hcmQgYSAwIHdpdGggdGhlIHNoaWZ0IGtleSBwcmVzc2VkCisgICAgLy8gaXMgYSByaWdo
dCBwYXJlbnRoZXNpcy4gVXNpbmcgdGhlc2UgdmFsdWVzIHByZXZlbnRzIGhhdmluZyB0byB3b3Jr
IG91dCB3aGF0IHRoZQorICAgIC8vIHRyYW5zZm9ybWVkIGNoYXJhY3RlcnMgYXJlIGJhc2VkIG9u
IHRoZSBjdXJyZW50IGtleWJvYXJkIGxheW91dC4KKyAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5k
S2V5RXZlbnRUb0ZpbHRlcihHREtfS0VZX0NvbnRyb2xfTCwgR0RLX0tFWV9QUkVTUyk7CisgICAg
aW5wdXRNZXRob2RGaWx0ZXIuc2VuZEtleUV2ZW50VG9GaWx0ZXIoR0RLX0tFWV9TaGlmdF9MLCBH
REtfS0VZX1BSRVNTLCBHREtfQ09OVFJPTF9NQVNLKTsKKworICAgIGlucHV0TWV0aG9kRmlsdGVy
LnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX1UsIEdES19T
SElGVF9NQVNLIHwgR0RLX0NPTlRST0xfTUFTSyk7CisgICAgaW5wdXRNZXRob2RGaWx0ZXIuc2Vu
ZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfMCwgR0RLX1NISUZU
X01BU0sgfCBHREtfQ09OVFJPTF9NQVNLKTsKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJl
c3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV8wLCBHREtfU0hJRlRfTUFT
SyB8IEdES19DT05UUk9MX01BU0spOworICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0Fu
ZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX0YsIEdES19TSElGVF9NQVNLIHwg
R0RLX0NPTlRST0xfTUFTSyk7CisgICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVs
ZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfNCwgR0RLX1NISUZUX01BU0sgfCBHREtf
Q09OVFJPTF9NQVNLKTsKKworICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRLZXlFdmVudFRvRmls
dGVyKEdES19LRVlfU2hpZnRfTCwgR0RLX0tFWV9SRUxFQVNFLCBHREtfQ09OVFJPTF9NQVNLIHwg
R0RLX1NISUZUX01BU0spOworICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRLZXlFdmVudFRvRmls
dGVyKEdES19LRVlfQ29udHJvbF9MLCBHREtfS0VZX1JFTEVBU0UsIEdES19DT05UUk9MX01BU0sp
OworCisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV2ZW50cyA9IGlucHV0TWV0aG9kRmlsdGVy
LmV2ZW50cygpOworICAgIEFTU0VSVF9FUSgyMSwgZXZlbnRzLnNpemUoKSk7CisgICAgQVNTRVJU
X0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cHJlc3Mga2V5Y29kZT1mZmUzIiks
IGV2ZW50c1swXSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5
cGU9cHJlc3Mga2V5Y29kZT1mZmUxIiksIGV2ZW50c1sxXSk7CisgICAgQVNTRVJUX0VRKFN0cmlu
Zygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9
ODUiKSwgZXZlbnRzWzJdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9
J3UnIGN1cnNvck9mZnNldD0xIiksIGV2ZW50c1szXSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygi
c2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPTU1IiksIGV2ZW50c1s0XSk7
CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0
cyB0eXBlPXByZXNzIGtleWNvZGU9NDgiKSwgZXZlbnRzWzVdKTsKKyAgICBBU1NFUlRfRVEoU3Ry
aW5nKCJzZXRQcmVlZGl0IHRleHQ9J3UwJyBjdXJzb3JPZmZzZXQ9MiIpLCBldmVudHNbNl0pOwor
ICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5
Y29kZT0zMCIpLCBldmVudHNbN10pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlFdmVu
dFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVzcyBrZXljb2RlPTQ4IiksIGV2ZW50c1s4
XSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2V0UHJlZWRpdCB0ZXh0PSd1MDAnIGN1cnNvck9m
ZnNldD0zIiksIGV2ZW50c1s5XSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtl
eUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPTMwIiksIGV2ZW50c1sxMF0pOworICAgIEFTU0VS
VF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVz
cyBrZXljb2RlPTcwIiksIGV2ZW50c1sxMV0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNldFBy
ZWVkaXQgdGV4dD0ndTAwRicgY3Vyc29yT2Zmc2V0PTQiKSwgZXZlbnRzWzEyXSk7CisgICAgQVNT
RVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPTQ2
IiksIGV2ZW50c1sxM10pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhD
b21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVzcyBrZXljb2RlPTUyIiksIGV2ZW50c1sxNF0pOwor
ICAgIEFTU0VSVF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0ndTAwRjQnIGN1cnNvck9mZnNl
dD01IiksIGV2ZW50c1sxNV0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlF
dmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT0zNCIpLCBldmVudHNbMTZdKTsKKyAgICBBU1NFUlRf
RVEoU3RyaW5nKCJjb25maXJtQ29tcG9zaXRpb24gJ8O0JyIpLCBldmVudHNbMTddKTsKKyAgICBB
U1NFUlRfRVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9JycgY3Vyc29yT2Zmc2V0PTAiKSwgZXZl
bnRzWzE4XSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9
cmVsZWFzZSBrZXljb2RlPWZmZTEiKSwgZXZlbnRzWzE5XSk7CisgICAgQVNTRVJUX0VRKFN0cmlu
Zygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPWZmZTMiKSwgZXZlbnRz
WzIwXSk7Cit9CisKK1RFU1QoR1RLLCBHdGtJbnB1dE1ldGhvZEZpbHRlckNvbXBvc2VLZXkpCit7
CisgICAgVGVzdElucHV0TWV0aG9kRmlsdGVyIGlucHV0TWV0aG9kRmlsdGVyOworCisgICAgaW5w
dXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdE
S19LRVlfTXVsdGlfa2V5KTsKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxl
YXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9hcG9zdHJvcGhlKTsKKyAgICBpbnB1dE1l
dGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tF
WV9vKTsKKworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBldmVudHMgPSBpbnB1dE1ldGhvZEZp
bHRlci5ldmVudHMoKTsKKyAgICBBU1NFUlRfRVEoNSwgZXZlbnRzLnNpemUoKSk7CisgICAgQVNT
RVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPXBy
ZXNzIGtleWNvZGU9MzkiKSwgZXZlbnRzWzBdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZXRQ
cmVlZGl0IHRleHQ9JycgY3Vyc29yT2Zmc2V0PTAiKSwgZXZlbnRzWzFdKTsKKyAgICBBU1NFUlRf
RVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9MjciKSwg
ZXZlbnRzWzJdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlw
ZT1wcmVzcyBrZXljb2RlPTZmIHRleHQ9J8OzJyIpLCBldmVudHNbM10pOworICAgIEFTU0VSVF9F
UShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT02ZiIpLCBl
dmVudHNbNF0pOworfQorCit0eXBlZGVmIHZvaWQgKCpHZXRQcmVlZGl0U3RyaW5nQ2FsbGJhY2sp
IChHdGtJTUNvbnRleHQqLCBnY2hhcioqLCBQYW5nb0F0dHJMaXN0KiosIGludCopOworc3RhdGlj
IHZvaWQgdGVtcG9yYXJ5R2V0UHJlZWRpdFN0cmluZ092ZXJyaWRlKEd0a0lNQ29udGV4dCosIGNo
YXIqKiBzdHJpbmcsIFBhbmdvQXR0ckxpc3QqKiBhdHRycywgaW50KiBjdXJzb3JQb3NpdGlvbikK
K3sKKyAgICAqc3RyaW5nID0gZ19zdHJkdXAoInByZWVkaXQgb2YgZG9vbSwgYnJpbmdlciBvZiBj
aGVlc2UiKTsKKyAgICAqY3Vyc29yUG9zaXRpb24gPSAzOworfQorCitURVNUKEdUSywgR3RrSW5w
dXRNZXRob2RGaWx0ZXJDb250ZXh0RXZlbnRzV2l0aG91dEtleUV2ZW50cykKK3sKKyAgICBUZXN0
SW5wdXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRob2RGaWx0ZXI7CisKKyAgICAvLyBUaGlzIGlzIGEg
Yml0IG9mIGEgaGFjayB0byBhdm9pZCBtb2NraW5nIG91dCB0aGUgZW50aXJlIElucHV0TWV0aG9k
Q29udGV4dCwgYnkKKyAgICAvLyBzaW1wbHkgcmVwbGFjaW5nIHRoZSBnZXRfcHJlZWRpdF9zdHJp
bmcgdmlydHVhbCBtZXRob2QgZm9yIHRoZSBsZW5ndGggb2YgdGhpcyB0ZXN0LgorICAgIEd0a0lN
Q29udGV4dCogY29udGV4dCA9IGlucHV0TWV0aG9kRmlsdGVyLmNvbnRleHQoKTsKKyAgICBHdGtJ
TUNvbnRleHRDbGFzcyogY29udGV4dENsYXNzID0gR1RLX0lNX0NPTlRFWFRfR0VUX0NMQVNTKGNv
bnRleHQpOworICAgIEdldFByZWVkaXRTdHJpbmdDYWxsYmFjayBwcmV2aW91c0NhbGxiYWNrID0g
Y29udGV4dENsYXNzLT5nZXRfcHJlZWRpdF9zdHJpbmc7CisgICAgY29udGV4dENsYXNzLT5nZXRf
cHJlZWRpdF9zdHJpbmcgPSB0ZW1wb3JhcnlHZXRQcmVlZGl0U3RyaW5nT3ZlcnJpZGU7CisKKyAg
ICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoY29udGV4dCwgInByZWVkaXQtY2hhbmdlZCIpOworICAg
IGdfc2lnbmFsX2VtaXRfYnlfbmFtZShjb250ZXh0LCAiY29tbWl0IiwgImNvbW1pdCB0ZXh0Iik7
CisKKyAgICBjb250ZXh0Q2xhc3MtPmdldF9wcmVlZGl0X3N0cmluZyA9IHByZXZpb3VzQ2FsbGJh
Y2s7CisKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXZlbnRzID0gaW5wdXRNZXRob2RGaWx0
ZXIuZXZlbnRzKCk7CisgICAgQVNTRVJUX0VRKDYsIGV2ZW50cy5zaXplKCkpOworICAgIEFTU0VS
VF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVz
cyBrZXljb2RlPTE2Nzc3MjE1IChmYWtlZCkiKSwgZXZlbnRzWzBdKTsKKyAgICBBU1NFUlRfRVEo
U3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9J3ByZWVkaXQgb2YgZG9vbSwgYnJpbmdlciBvZiBjaGVl
c2UnIGN1cnNvck9mZnNldD0zIiksIGV2ZW50c1sxXSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygi
c2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPWZmZmZmZiAoZmFrZWQpIiks
IGV2ZW50c1syXSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBv
c2l0aW9uUmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9MTY3NzcyMTUgKGZha2VkKSIpLCBldmVu
dHNbM10pOworICAgIEFTU0VSVF9FUShTdHJpbmcoImNvbmZpcm1Db21wb3NpdGlvbiAnY29tbWl0
IHRleHQnIiksIGV2ZW50c1s0XSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtl
eUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPWZmZmZmZiAoZmFrZWQpIiksIGV2ZW50c1s1XSk7
Cit9CisKK3N0YXRpYyBib29sIGdTYXdDb250ZXh0UmVzZXQgPSBmYWxzZTsKK3R5cGVkZWYgdm9p
ZCAoKlJlc2V0Q2FsbGJhY2spIChHdGtJTUNvbnRleHQqKTsKK3N0YXRpYyB2b2lkIHRlbXBvcmFy
eVJlc2V0T3ZlcnJpZGUoR3RrSU1Db250ZXh0KikKK3sKKyAgICBnU2F3Q29udGV4dFJlc2V0ID0g
dHJ1ZTsKK30KKworc3RhdGljIHZvaWQgdmVyaWZ5Q2FuY2VsZWRDb21wb3NpdGlvbihjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZXZlbnRzKQoreworICAgIEFTU0VSVF9FUSgzLCBldmVudHMuc2l6ZSgp
KTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1
bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT0zOSIpLCBldmVudHNbMF0pOworICAgIEFTU0VSVF9FUShT
dHJpbmcoInNldFByZWVkaXQgdGV4dD0nJyBjdXJzb3JPZmZzZXQ9MCIpLCBldmVudHNbMV0pOwor
ICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5
Y29kZT0yNyIpLCBldmVudHNbMl0pOworICAgIEFTU0VSVChnU2F3Q29udGV4dFJlc2V0KTsKK30K
KworVEVTVChHVEssIEd0a0lucHV0TWV0aG9kRmlsdGVyQ29udGV4dEZvY3VzT3V0RHVyaW5nT25n
b2luZ0NvbXBvc2l0aW9uKQoreworICAgIFRlc3RJbnB1dE1ldGhvZEZpbHRlciBpbnB1dE1ldGhv
ZEZpbHRlcjsKKworICAgIC8vIFNlZSBjb21tZW50IGFib3ZlIGFib3V0IHRoaXMgdGVjaG5pcXVl
LgorICAgIEd0a0lNQ29udGV4dCogY29udGV4dCA9IGlucHV0TWV0aG9kRmlsdGVyLmNvbnRleHQo
KTsKKyAgICBHdGtJTUNvbnRleHRDbGFzcyogY29udGV4dENsYXNzID0gR1RLX0lNX0NPTlRFWFRf
R0VUX0NMQVNTKGNvbnRleHQpOworICAgIFJlc2V0Q2FsbGJhY2sgcHJldmlvdXNDYWxsYmFjayA9
IGNvbnRleHRDbGFzcy0+cmVzZXQ7CisgICAgY29udGV4dENsYXNzLT5yZXNldCA9IHRlbXBvcmFy
eVJlc2V0T3ZlcnJpZGU7CisKKyAgICBnU2F3Q29udGV4dFJlc2V0ID0gZmFsc2U7CisgICAgaW5w
dXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdE
S19LRVlfTXVsdGlfa2V5KTsKKyAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxl
YXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9hcG9zdHJvcGhlKTsKKyAgICBpbnB1dE1l
dGhvZEZpbHRlci5ub3RpZnlGb2N1c2VkT3V0KCk7CisKKyAgICB2ZXJpZnlDYW5jZWxlZENvbXBv
c2l0aW9uKGlucHV0TWV0aG9kRmlsdGVyLmV2ZW50cygpKTsKKworICAgIGNvbnRleHRDbGFzcy0+
cmVzZXQgPSBwcmV2aW91c0NhbGxiYWNrOworfQorCitURVNUKEdUSywgR3RrSW5wdXRNZXRob2RG
aWx0ZXJDb250ZXh0TW91c2VDbGlja0R1cmluZ09uZ29pbmdDb21wb3NpdGlvbikKK3sKKyAgICBU
ZXN0SW5wdXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRob2RGaWx0ZXI7CisKKyAgICAvLyBTZWUgY29t
bWVudCBhYm92ZSBhYm91dCB0aGlzIHRlY2huaXF1ZS4KKyAgICBHdGtJTUNvbnRleHQqIGNvbnRl
eHQgPSBpbnB1dE1ldGhvZEZpbHRlci5jb250ZXh0KCk7CisgICAgR3RrSU1Db250ZXh0Q2xhc3Mq
IGNvbnRleHRDbGFzcyA9IEdUS19JTV9DT05URVhUX0dFVF9DTEFTUyhjb250ZXh0KTsKKyAgICBS
ZXNldENhbGxiYWNrIHByZXZpb3VzQ2FsbGJhY2sgPSBjb250ZXh0Q2xhc3MtPnJlc2V0OworICAg
IGNvbnRleHRDbGFzcy0+cmVzZXQgPSB0ZW1wb3JhcnlSZXNldE92ZXJyaWRlOworCisgICAgZ1Nh
d0NvbnRleHRSZXNldCA9IGZhbHNlOworICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0Fu
ZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX011bHRpX2tleSk7CisgICAgaW5w
dXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdE
S19LRVlfYXBvc3Ryb3BoZSk7CisgICAgaW5wdXRNZXRob2RGaWx0ZXIubm90aWZ5TW91c2VCdXR0
b25QcmVzcygpOworCisgICAgdmVyaWZ5Q2FuY2VsZWRDb21wb3NpdGlvbihpbnB1dE1ldGhvZEZp
bHRlci5ldmVudHMoKSk7CisKKyAgICBjb250ZXh0Q2xhc3MtPnJlc2V0ID0gcHJldmlvdXNDYWxs
YmFjazsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0YWFiN2MwLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDMxMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkd0a0lucHV0TWV0aG9kRmls
dGVyLmgiCi0jaW5jbHVkZSAiV1RGU3RyaW5nVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSA8Z2RrL2dk
a2tleXN5bXMuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1l
c3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0KLWNsYXNzIFRlc3RJbnB1dE1ldGhvZEZpbHRlciA6IHB1
YmxpYyBHdGtJbnB1dE1ldGhvZEZpbHRlciB7Ci1wdWJsaWM6Ci0gICAgVGVzdElucHV0TWV0aG9k
RmlsdGVyKCkKLSAgICAgICAgOiBtX3Rlc3RXaW5kb3coZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRP
V19QT1BVUCkpCi0gICAgewotICAgICAgICBndGtfd2lkZ2V0X3Nob3cobV90ZXN0V2luZG93Lmdl
dCgpKTsKLSAgICAgICAgc2V0V2lkZ2V0KG1fdGVzdFdpbmRvdy5nZXQoKSk7Ci0KLSAgICAgICAg
Ly8gRm9jdXMgaW4gaXMgbmVjZXNzYXJ5IHRvIGFjdGl2YXRlIHRoZSBkZWZhdWx0IGlucHV0IG1l
dGhvZCBpbiB0aGUgbXVsdGljb250ZXh0LgotICAgICAgICBub3RpZnlGb2N1c2VkSW4oKTsKLSAg
ICB9Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiYgZXZlbnRzKCkgeyByZXR1cm4gbV9ldmVudHM7IH0K
LQotICAgIHZvaWQgc2VuZEtleUV2ZW50VG9GaWx0ZXIodW5zaWduZWQgaW50IGdka0tleVZhbHVl
LCBHZGtFdmVudFR5cGUgdHlwZSwgdW5zaWduZWQgaW50IG1vZGlmaWVycyA9IDApCi0gICAgewot
ICAgICAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtfZXZlbnRfbmV3KHR5cGUpOwotICAgICAgICBl
dmVudC0+a2V5LmtleXZhbCA9IGdka0tleVZhbHVlOwotICAgICAgICBldmVudC0+a2V5LnN0YXRl
ID0gbW9kaWZpZXJzOwotICAgICAgICBldmVudC0+a2V5LndpbmRvdyA9IGd0a193aWRnZXRfZ2V0
X3dpbmRvdyhtX3Rlc3RXaW5kb3cuZ2V0KCkpOwotICAgICAgICBldmVudC0+a2V5LnRpbWUgPSBH
REtfQ1VSUkVOVF9USU1FOwotICAgICAgICBnX29iamVjdF9yZWYoZXZlbnQtPmtleS53aW5kb3cp
OwotCi0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgICAgIGdka19ldmVudF9zZXRfZGV2
aWNlKGV2ZW50LCBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNw
bGF5X2dldF9kZXZpY2VfbWFuYWdlcihnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKSkpOwotI2Vu
ZGlmCi0KLSAgICAgICAgR1VuaXF1ZU91dFB0cjxHZGtLZXltYXBLZXk+IGtleXM7Ci0gICAgICAg
IGdpbnQgbktleXM7Ci0gICAgICAgIGlmIChnZGtfa2V5bWFwX2dldF9lbnRyaWVzX2Zvcl9rZXl2
YWwoZ2RrX2tleW1hcF9nZXRfZGVmYXVsdCgpLCBnZGtLZXlWYWx1ZSwgJmtleXMub3V0UHRyKCks
ICZuS2V5cykpCi0gICAgICAgICAgICBldmVudC0+a2V5LmhhcmR3YXJlX2tleWNvZGUgPSBrZXlz
LmdldCgpWzBdLmtleWNvZGU7Ci0KLSAgICAgICAgZmlsdGVyS2V5RXZlbnQoJmV2ZW50LT5rZXkp
OwotICAgICAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZW5k
UHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIodW5zaWduZWQgaW50IGdka0tleVZh
bHVlLCB1bnNpZ25lZCBpbnQgbW9kaWZpZXJzID0gMCkKLSAgICB7Ci0gICAgICAgIHNlbmRLZXlF
dmVudFRvRmlsdGVyKGdka0tleVZhbHVlLCBHREtfS0VZX1BSRVNTLCBtb2RpZmllcnMpOwotICAg
ICAgICBzZW5kS2V5RXZlbnRUb0ZpbHRlcihnZGtLZXlWYWx1ZSwgR0RLX0tFWV9SRUxFQVNFLCBt
b2RpZmllcnMpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBzZW5kU2lt
cGxlS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50LCBXVEY6OlN0cmluZyBldmVudFN0cmluZywg
RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIGZha2VkKQotICAgIHsKLSAgICAgICAgY29uc3QgY2hh
ciogZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFID8gInJlbGVhc2Ui
IDogInByZXNzIjsKLSAgICAgICAgY29uc3QgY2hhciogZmFrZWRTdHJpbmcgPSBmYWtlZCA9PSBF
dmVudEZha2VkID8gIiAoZmFrZWQpIiA6ICIiOwotICAgICAgICBpZiAoIWV2ZW50U3RyaW5nLmlz
TnVsbCgpKQotICAgICAgICAgICAgbV9ldmVudHMuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJzZW5k
U2ltcGxlS2V5RXZlbnQgdHlwZT0lcyBrZXljb2RlPSV4IHRleHQ9JyVzJyVzIiwgZXZlbnRUeXBl
LCBldmVudC0+a2V5dmFsLCBldmVudFN0cmluZy51dGY4KCkuZGF0YSgpLCBmYWtlZFN0cmluZykp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2V2ZW50cy5hcHBlbmQoU3RyaW5nOjpmb3Jt
YXQoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPSVzIGtleWNvZGU9JXglcyIsIGV2ZW50VHlwZSwg
ZXZlbnQtPmtleXZhbCwgZmFrZWRTdHJpbmcpKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0
cyhHZGtFdmVudEtleSogZXZlbnQsIFJlc3VsdHNUb1NlbmQgcmVzdWx0c1RvU2VuZCwgRXZlbnRG
YWtlZEZvckNvbXBvc2l0aW9uIGZha2VkKQotICAgIHsKLSAgICAgICAgY29uc3QgY2hhciogZXZl
bnRUeXBlID0gZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFID8gInJlbGVhc2UiIDogInBy
ZXNzIjsKLSAgICAgICAgY29uc3QgY2hhciogZmFrZWRTdHJpbmcgPSBmYWtlZCA9PSBFdmVudEZh
a2VkID8gIiAoZmFrZWQpIiA6ICIiOwotICAgICAgICBtX2V2ZW50cy5hcHBlbmQoU3RyaW5nOjpm
b3JtYXQoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT0lcyBrZXljb2Rl
PSV1JXMiLCBldmVudFR5cGUsIGV2ZW50LT5rZXl2YWwsIGZha2VkU3RyaW5nKSk7Ci0KLSAgICAg
ICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBDb21wb3NpdGlvbiAmJiAhbV9jb25maXJtZWRDb21wb3Np
dGlvbi5pc051bGwoKSkKLSAgICAgICAgICAgIGNvbmZpcm1Db21wb3NpdGlvblRleHQobV9jb25m
aXJtZWRDb21wb3NpdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHRzVG9TZW5kICYgUHJlZWRpdCAm
JiAhbV9wcmVlZGl0LmlzTnVsbCgpKQotICAgICAgICAgICAgc2V0UHJlZWRpdChtX3ByZWVkaXQs
IG1fY3Vyc29yT2Zmc2V0KTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgY2FuRWRpdCgpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uVGV4dChTdHJpbmcgdGV4dCkK
LSAgICB7Ci0gICAgICAgIG1fZXZlbnRzLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiY29uZmlybUNv
bXBvc2l0aW9uICclcyciLCB0ZXh0LnV0ZjgoKS5kYXRhKCkpKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgY29uZmlybUN1cnJlbnRDb21wb3NpdGlvbigpCi0gICAgewotICAgICAgICBtX2V2
ZW50cy5hcHBlbmQoU3RyaW5nKCJjb25maXJtQ3VycmVudGNvbXBvc2l0aW9uIikpOwotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxDdXJyZW50Q29tcG9zaXRpb24oKQotICAgIHsKLSAg
ICAgICAgbV9ldmVudHMuYXBwZW5kKFN0cmluZygiY2FuY2VsQ3VycmVudENvbXBvc2l0aW9uIikp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVlZGl0KFN0cmluZyBwcmVlZGl0LCBp
bnQgY3Vyc29yT2Zmc2V0KQotICAgIHsKLSAgICAgICAgbV9ldmVudHMuYXBwZW5kKFN0cmluZzo6
Zm9ybWF0KCJzZXRQcmVlZGl0IHRleHQ9JyVzJyBjdXJzb3JPZmZzZXQ9JWkiLCBwcmVlZGl0LnV0
ZjgoKS5kYXRhKCksIGN1cnNvck9mZnNldCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHUmVm
UHRyPEd0a1dpZGdldD4gbV90ZXN0V2luZG93OwotICAgIFZlY3RvcjxTdHJpbmc+IG1fZXZlbnRz
OwotfTsKLQotVEVTVChHVEssIEd0a0lucHV0TWV0aG9kRmlsdGVyU2ltcGxlKQotewotICAgIFRl
c3RJbnB1dE1ldGhvZEZpbHRlciBpbnB1dE1ldGhvZEZpbHRlcjsKLSAgICBpbnB1dE1ldGhvZEZp
bHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9nKTsK
LSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9G
aWx0ZXIoR0RLX0tFWV90KTsKLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxl
YXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9rKTsKLQotICAgIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBldmVudHMgPSBpbnB1dE1ldGhvZEZpbHRlci5ldmVudHMoKTsKLQotICAgIEFTU0VS
VF9FUSg2LCBldmVudHMuc2l6ZSgpKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxl
S2V5RXZlbnQgdHlwZT1wcmVzcyBrZXljb2RlPTY3IHRleHQ9J2cnIiksIGV2ZW50c1swXSk7Ci0g
ICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXlj
b2RlPTY3IiksIGV2ZW50c1sxXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtl
eUV2ZW50IHR5cGU9cHJlc3Mga2V5Y29kZT03NCB0ZXh0PSd0JyIpLCBldmVudHNbMl0pOwotICAg
IEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29k
ZT03NCIpLCBldmVudHNbM10pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlF
dmVudCB0eXBlPXByZXNzIGtleWNvZGU9NmIgdGV4dD0nayciKSwgZXZlbnRzWzRdKTsKLSAgICBB
U1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9
NmIiKSwgZXZlbnRzWzVdKTsKLX0KLQotVEVTVChHVEssIEd0a0lucHV0TWV0aG9kRmlsdGVyVW5p
Y29kZVNlcXVlbmNlKQotewotICAgIFRlc3RJbnB1dE1ldGhvZEZpbHRlciBpbnB1dE1ldGhvZEZp
bHRlcjsKLQotICAgIC8vIFRoaXMgaXMgc2ltcGxlIHVuaWNvZGUgaGV4IGVudHJ5IG9mIHRoZSBj
aGFyYWN0ZXJzLCB1LCAwLCAwLCBmLCA0IHByZXNzZWQgd2l0aAotICAgIC8vIHRoZSBzaGlmdCBh
bmQgY29udHJvbHMga2V5cyBoZWxkIGRvd24uIEluIHJlYWxpdHksIHRoZXNlIHZhbHVlcyBhcmUg
bm90IHR5cGljYWwKLSAgICAvLyBvZiBhbiBhY3R1YWwgaGV4IGVudHJ5LCBiZWNhdXNlIHRoZXkn
ZCBiZSB0cmFuc2Zvcm1lZCBieSB0aGUgc2hpZnQgbW9kaWZpZXIgYWNjb3JkaW5nCi0gICAgLy8g
dG8gdGhlIGtleWJvYXJkIGxheW91dC4gRm9yIGluc3RhbmNlLCBvbiBhIFVTIGtleWJvYXJkIGEg
MCB3aXRoIHRoZSBzaGlmdCBrZXkgcHJlc3NlZAotICAgIC8vIGlzIGEgcmlnaHQgcGFyZW50aGVz
aXMuIFVzaW5nIHRoZXNlIHZhbHVlcyBwcmV2ZW50cyBoYXZpbmcgdG8gd29yayBvdXQgd2hhdCB0
aGUKLSAgICAvLyB0cmFuc2Zvcm1lZCBjaGFyYWN0ZXJzIGFyZSBiYXNlZCBvbiB0aGUgY3VycmVu
dCBrZXlib2FyZCBsYXlvdXQuCi0gICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZEtleUV2ZW50VG9G
aWx0ZXIoR0RLX0tFWV9Db250cm9sX0wsIEdES19LRVlfUFJFU1MpOwotICAgIGlucHV0TWV0aG9k
RmlsdGVyLnNlbmRLZXlFdmVudFRvRmlsdGVyKEdES19LRVlfU2hpZnRfTCwgR0RLX0tFWV9QUkVT
UywgR0RLX0NPTlRST0xfTUFTSyk7Ci0KLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NB
bmRSZWxlYXNlS2V5RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9VLCBHREtfU0hJRlRfTUFTSyB8
IEdES19DT05UUk9MX01BU0spOwotICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJl
bGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZXzAsIEdES19TSElGVF9NQVNLIHwgR0RL
X0NPTlRST0xfTUFTSyk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFz
ZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfMCwgR0RLX1NISUZUX01BU0sgfCBHREtfQ09O
VFJPTF9NQVNLKTsKLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5
RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9GLCBHREtfU0hJRlRfTUFTSyB8IEdES19DT05UUk9M
X01BU0spOwotICAgIGlucHV0TWV0aG9kRmlsdGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVu
dFBhaXJUb0ZpbHRlcihHREtfS0VZXzQsIEdES19TSElGVF9NQVNLIHwgR0RLX0NPTlRST0xfTUFT
Syk7Ci0KLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kS2V5RXZlbnRUb0ZpbHRlcihHREtfS0VZ
X1NoaWZ0X0wsIEdES19LRVlfUkVMRUFTRSwgR0RLX0NPTlRST0xfTUFTSyB8IEdES19TSElGVF9N
QVNLKTsKLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kS2V5RXZlbnRUb0ZpbHRlcihHREtfS0VZ
X0NvbnRyb2xfTCwgR0RLX0tFWV9SRUxFQVNFLCBHREtfQ09OVFJPTF9NQVNLKTsKLQotICAgIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBldmVudHMgPSBpbnB1dE1ldGhvZEZpbHRlci5ldmVudHMoKTsK
LSAgICBBU1NFUlRfRVEoMjEsIGV2ZW50cy5zaXplKCkpOwotICAgIEFTU0VSVF9FUShTdHJpbmco
InNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXByZXNzIGtleWNvZGU9ZmZlMyIpLCBldmVudHNbMF0p
OwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXByZXNzIGtl
eWNvZGU9ZmZlMSIpLCBldmVudHNbMV0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlF
dmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVzcyBrZXljb2RlPTg1IiksIGV2ZW50
c1syXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2V0UHJlZWRpdCB0ZXh0PSd1JyBjdXJzb3JP
ZmZzZXQ9MSIpLCBldmVudHNbM10pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVL
ZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT01NSIpLCBldmVudHNbNF0pOwotICAgIEFTU0VS
VF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVz
cyBrZXljb2RlPTQ4IiksIGV2ZW50c1s1XSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2V0UHJl
ZWRpdCB0ZXh0PSd1MCcgY3Vyc29yT2Zmc2V0PTIiKSwgZXZlbnRzWzZdKTsKLSAgICBBU1NFUlRf
RVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9MzAiKSwg
ZXZlbnRzWzddKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9z
aXRpb25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT00OCIpLCBldmVudHNbOF0pOwotICAgIEFT
U0VSVF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0ndTAwJyBjdXJzb3JPZmZzZXQ9MyIpLCBl
dmVudHNbOV0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBl
PXJlbGVhc2Uga2V5Y29kZT0zMCIpLCBldmVudHNbMTBdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5n
KCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT03
MCIpLCBldmVudHNbMTFdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9
J3UwMEYnIGN1cnNvck9mZnNldD00IiksIGV2ZW50c1sxMl0pOwotICAgIEFTU0VSVF9FUShTdHJp
bmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT00NiIpLCBldmVudHNb
MTNdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25S
ZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT01MiIpLCBldmVudHNbMTRdKTsKLSAgICBBU1NFUlRf
RVEoU3RyaW5nKCJzZXRQcmVlZGl0IHRleHQ9J3UwMEY0JyBjdXJzb3JPZmZzZXQ9NSIpLCBldmVu
dHNbMTVdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1y
ZWxlYXNlIGtleWNvZGU9MzQiKSwgZXZlbnRzWzE2XSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygi
Y29uZmlybUNvbXBvc2l0aW9uICfDtCciKSwgZXZlbnRzWzE3XSk7Ci0gICAgQVNTRVJUX0VRKFN0
cmluZygic2V0UHJlZWRpdCB0ZXh0PScnIGN1cnNvck9mZnNldD0wIiksIGV2ZW50c1sxOF0pOwot
ICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5
Y29kZT1mZmUxIiksIGV2ZW50c1sxOV0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1w
bGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT1mZmUzIiksIGV2ZW50c1syMF0pOwotfQot
Ci1URVNUKEdUSywgR3RrSW5wdXRNZXRob2RGaWx0ZXJDb21wb3NlS2V5KQotewotICAgIFRlc3RJ
bnB1dE1ldGhvZEZpbHRlciBpbnB1dE1ldGhvZEZpbHRlcjsKLQotICAgIGlucHV0TWV0aG9kRmls
dGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX011bHRp
X2tleSk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50
UGFpclRvRmlsdGVyKEdES19LRVlfYXBvc3Ryb3BoZSk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIu
c2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50UGFpclRvRmlsdGVyKEdES19LRVlfbyk7Ci0KLSAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXZlbnRzID0gaW5wdXRNZXRob2RGaWx0ZXIuZXZlbnRz
KCk7Ci0gICAgQVNTRVJUX0VRKDUsIGV2ZW50cy5zaXplKCkpOwotICAgIEFTU0VSVF9FUShTdHJp
bmcoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVzcyBrZXljb2Rl
PTM5IiksIGV2ZW50c1swXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2V0UHJlZWRpdCB0ZXh0
PScnIGN1cnNvck9mZnNldD0wIiksIGV2ZW50c1sxXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygi
c2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPTI3IiksIGV2ZW50c1syXSk7
Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9cHJlc3Mga2V5
Y29kZT02ZiB0ZXh0PSfDsyciKSwgZXZlbnRzWzNdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJz
ZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9NmYiKSwgZXZlbnRzWzRdKTsK
LX0KLQotdHlwZWRlZiB2b2lkICgqR2V0UHJlZWRpdFN0cmluZ0NhbGxiYWNrKSAoR3RrSU1Db250
ZXh0KiwgZ2NoYXIqKiwgUGFuZ29BdHRyTGlzdCoqLCBpbnQqKTsKLXN0YXRpYyB2b2lkIHRlbXBv
cmFyeUdldFByZWVkaXRTdHJpbmdPdmVycmlkZShHdGtJTUNvbnRleHQqLCBjaGFyKiogc3RyaW5n
LCBQYW5nb0F0dHJMaXN0KiogYXR0cnMsIGludCogY3Vyc29yUG9zaXRpb24pCi17Ci0gICAgKnN0
cmluZyA9IGdfc3RyZHVwKCJwcmVlZGl0IG9mIGRvb20sIGJyaW5nZXIgb2YgY2hlZXNlIik7Ci0g
ICAgKmN1cnNvclBvc2l0aW9uID0gMzsKLX0KLQotVEVTVChHVEssIEd0a0lucHV0TWV0aG9kRmls
dGVyQ29udGV4dEV2ZW50c1dpdGhvdXRLZXlFdmVudHMpCi17Ci0gICAgVGVzdElucHV0TWV0aG9k
RmlsdGVyIGlucHV0TWV0aG9kRmlsdGVyOwotCi0gICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhh
Y2sgdG8gYXZvaWQgbW9ja2luZyBvdXQgdGhlIGVudGlyZSBJbnB1dE1ldGhvZENvbnRleHQsIGJ5
Ci0gICAgLy8gc2ltcGx5IHJlcGxhY2luZyB0aGUgZ2V0X3ByZWVkaXRfc3RyaW5nIHZpcnR1YWwg
bWV0aG9kIGZvciB0aGUgbGVuZ3RoIG9mIHRoaXMgdGVzdC4KLSAgICBHdGtJTUNvbnRleHQqIGNv
bnRleHQgPSBpbnB1dE1ldGhvZEZpbHRlci5jb250ZXh0KCk7Ci0gICAgR3RrSU1Db250ZXh0Q2xh
c3MqIGNvbnRleHRDbGFzcyA9IEdUS19JTV9DT05URVhUX0dFVF9DTEFTUyhjb250ZXh0KTsKLSAg
ICBHZXRQcmVlZGl0U3RyaW5nQ2FsbGJhY2sgcHJldmlvdXNDYWxsYmFjayA9IGNvbnRleHRDbGFz
cy0+Z2V0X3ByZWVkaXRfc3RyaW5nOwotICAgIGNvbnRleHRDbGFzcy0+Z2V0X3ByZWVkaXRfc3Ry
aW5nID0gdGVtcG9yYXJ5R2V0UHJlZWRpdFN0cmluZ092ZXJyaWRlOwotCi0gICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKGNvbnRleHQsICJwcmVlZGl0LWNoYW5nZWQiKTsKLSAgICBnX3NpZ25hbF9l
bWl0X2J5X25hbWUoY29udGV4dCwgImNvbW1pdCIsICJjb21taXQgdGV4dCIpOwotCi0gICAgY29u
dGV4dENsYXNzLT5nZXRfcHJlZWRpdF9zdHJpbmcgPSBwcmV2aW91c0NhbGxiYWNrOwotCi0gICAg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGV2ZW50cyA9IGlucHV0TWV0aG9kRmlsdGVyLmV2ZW50cygp
OwotICAgIEFTU0VSVF9FUSg2LCBldmVudHMuc2l6ZSgpKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5n
KCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT0x
Njc3NzIxNSAoZmFrZWQpIiksIGV2ZW50c1swXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2V0
UHJlZWRpdCB0ZXh0PSdwcmVlZGl0IG9mIGRvb20sIGJyaW5nZXIgb2YgY2hlZXNlJyBjdXJzb3JP
ZmZzZXQ9MyIpLCBldmVudHNbMV0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVL
ZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT1mZmZmZmYgKGZha2VkKSIpLCBldmVudHNbMl0p
OwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3Vs
dHMgdHlwZT1wcmVzcyBrZXljb2RlPTE2Nzc3MjE1IChmYWtlZCkiKSwgZXZlbnRzWzNdKTsKLSAg
ICBBU1NFUlRfRVEoU3RyaW5nKCJjb25maXJtQ29tcG9zaXRpb24gJ2NvbW1pdCB0ZXh0JyIpLCBl
dmVudHNbNF0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBl
PXJlbGVhc2Uga2V5Y29kZT1mZmZmZmYgKGZha2VkKSIpLCBldmVudHNbNV0pOwotfQotCi1zdGF0
aWMgYm9vbCBnU2F3Q29udGV4dFJlc2V0ID0gZmFsc2U7Ci10eXBlZGVmIHZvaWQgKCpSZXNldENh
bGxiYWNrKSAoR3RrSU1Db250ZXh0Kik7Ci1zdGF0aWMgdm9pZCB0ZW1wb3JhcnlSZXNldE92ZXJy
aWRlKEd0a0lNQ29udGV4dCopCi17Ci0gICAgZ1Nhd0NvbnRleHRSZXNldCA9IHRydWU7Ci19Ci0K
LXN0YXRpYyB2b2lkIHZlcmlmeUNhbmNlbGVkQ29tcG9zaXRpb24oY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGV2ZW50cykKLXsKLSAgICBBU1NFUlRfRVEoMywgZXZlbnRzLnNpemUoKSk7Ci0gICAgQVNT
RVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPXBy
ZXNzIGtleWNvZGU9MzkiKSwgZXZlbnRzWzBdKTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZXRQ
cmVlZGl0IHRleHQ9JycgY3Vyc29yT2Zmc2V0PTAiKSwgZXZlbnRzWzFdKTsKLSAgICBBU1NFUlRf
RVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9MjciKSwg
ZXZlbnRzWzJdKTsKLSAgICBBU1NFUlQoZ1Nhd0NvbnRleHRSZXNldCk7Ci19Ci0KLVRFU1QoR1RL
LCBHdGtJbnB1dE1ldGhvZEZpbHRlckNvbnRleHRGb2N1c091dER1cmluZ09uZ29pbmdDb21wb3Np
dGlvbikKLXsKLSAgICBUZXN0SW5wdXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRob2RGaWx0ZXI7Ci0K
LSAgICAvLyBTZWUgY29tbWVudCBhYm92ZSBhYm91dCB0aGlzIHRlY2huaXF1ZS4KLSAgICBHdGtJ
TUNvbnRleHQqIGNvbnRleHQgPSBpbnB1dE1ldGhvZEZpbHRlci5jb250ZXh0KCk7Ci0gICAgR3Rr
SU1Db250ZXh0Q2xhc3MqIGNvbnRleHRDbGFzcyA9IEdUS19JTV9DT05URVhUX0dFVF9DTEFTUyhj
b250ZXh0KTsKLSAgICBSZXNldENhbGxiYWNrIHByZXZpb3VzQ2FsbGJhY2sgPSBjb250ZXh0Q2xh
c3MtPnJlc2V0OwotICAgIGNvbnRleHRDbGFzcy0+cmVzZXQgPSB0ZW1wb3JhcnlSZXNldE92ZXJy
aWRlOwotCi0gICAgZ1Nhd0NvbnRleHRSZXNldCA9IGZhbHNlOwotICAgIGlucHV0TWV0aG9kRmls
dGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX011bHRp
X2tleSk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIuc2VuZFByZXNzQW5kUmVsZWFzZUtleUV2ZW50
UGFpclRvRmlsdGVyKEdES19LRVlfYXBvc3Ryb3BoZSk7Ci0gICAgaW5wdXRNZXRob2RGaWx0ZXIu
bm90aWZ5Rm9jdXNlZE91dCgpOwotCi0gICAgdmVyaWZ5Q2FuY2VsZWRDb21wb3NpdGlvbihpbnB1
dE1ldGhvZEZpbHRlci5ldmVudHMoKSk7Ci0KLSAgICBjb250ZXh0Q2xhc3MtPnJlc2V0ID0gcHJl
dmlvdXNDYWxsYmFjazsKLX0KLQotVEVTVChHVEssIEd0a0lucHV0TWV0aG9kRmlsdGVyQ29udGV4
dE1vdXNlQ2xpY2tEdXJpbmdPbmdvaW5nQ29tcG9zaXRpb24pCi17Ci0gICAgVGVzdElucHV0TWV0
aG9kRmlsdGVyIGlucHV0TWV0aG9kRmlsdGVyOwotCi0gICAgLy8gU2VlIGNvbW1lbnQgYWJvdmUg
YWJvdXQgdGhpcyB0ZWNobmlxdWUuCi0gICAgR3RrSU1Db250ZXh0KiBjb250ZXh0ID0gaW5wdXRN
ZXRob2RGaWx0ZXIuY29udGV4dCgpOwotICAgIEd0a0lNQ29udGV4dENsYXNzKiBjb250ZXh0Q2xh
c3MgPSBHVEtfSU1fQ09OVEVYVF9HRVRfQ0xBU1MoY29udGV4dCk7Ci0gICAgUmVzZXRDYWxsYmFj
ayBwcmV2aW91c0NhbGxiYWNrID0gY29udGV4dENsYXNzLT5yZXNldDsKLSAgICBjb250ZXh0Q2xh
c3MtPnJlc2V0ID0gdGVtcG9yYXJ5UmVzZXRPdmVycmlkZTsKLQotICAgIGdTYXdDb250ZXh0UmVz
ZXQgPSBmYWxzZTsKLSAgICBpbnB1dE1ldGhvZEZpbHRlci5zZW5kUHJlc3NBbmRSZWxlYXNlS2V5
RXZlbnRQYWlyVG9GaWx0ZXIoR0RLX0tFWV9NdWx0aV9rZXkpOwotICAgIGlucHV0TWV0aG9kRmls
dGVyLnNlbmRQcmVzc0FuZFJlbGVhc2VLZXlFdmVudFBhaXJUb0ZpbHRlcihHREtfS0VZX2Fwb3N0
cm9waGUpOwotICAgIGlucHV0TWV0aG9kRmlsdGVyLm5vdGlmeU1vdXNlQnV0dG9uUHJlc3MoKTsK
LQotICAgIHZlcmlmeUNhbmNlbGVkQ29tcG9zaXRpb24oaW5wdXRNZXRob2RGaWx0ZXIuZXZlbnRz
KCkpOwotCi0gICAgY29udGV4dENsYXNzLT5yZXNldCA9IHByZXZpb3VzQ2FsbGJhY2s7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>
<flag name="review"
          id="255688"
          type_id="1"
          status="+"
          setter="pnormand"
    />
          </attachment>
      

    </bug>

</bugzilla>