<?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>180915</bug_id>
          
          <creation_ts>2017-12-17 09:15:42 -0800</creation_ts>
          <short_desc>Allow run-api-tests to start/stop layout tests servers</short_desc>
          <delta_ts>2018-05-10 01:07:04 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=181043</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>dbates</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>fred.wang</cc>
    
    <cc>jbedard</cc>
    
    <cc>lforschler</cc>
    
    <cc>rbuis</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1382597</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-12-17 09:15:42 -0800</bug_when>
    <thetext>This is handy to write API tests that require HTTP/HTTPS/WebSocket behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382599</commentid>
    <comment_count>1</comment_count>
      <attachid>329603</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-12-17 09:29:29 -0800</bug_when>
    <thetext>Created attachment 329603
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382603</commentid>
    <comment_count>2</comment_count>
      <attachid>329605</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-12-17 10:02:32 -0800</bug_when>
    <thetext>Created attachment 329605
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382806</commentid>
    <comment_count>3</comment_count>
      <attachid>329605</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-12-18 11:19:07 -0800</bug_when>
    <thetext>Comment on attachment 329605
Patch

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

&gt; Tools/ChangeLog:3
&gt; +        Allow run-api-tests to start/stop layout tests servers

This is something that we explicitly refused to do in the past, as it made more sense to add functionality to WKTR anyway. Also, API tests are super slow, as they are not running in parallel.

&gt; Tools/ChangeLog:9
&gt; +        Added a python wrapper around it to control start/stop of HTTP/WS servers.

Jonathan is working on converting run-api-tests to Python now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382809</commentid>
    <comment_count>4</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-12-18 11:30:00 -0800</bug_when>
    <thetext>A few comments on this:

1) I&apos;ve been working on a Python replacement for run-api-tests so that we can manager Simulators better and run tests as multiprocess (might address Alexey&apos;s concern about .  This change may be worth postponing until we are running in Python, rather than requiring this wrapper.

2) It seems wrong to have API tests assets as a subdirectory in LayoutTests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382833</commentid>
    <comment_count>5</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-12-18 12:52:11 -0800</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #4)
&gt; A few comments on this:
&gt; 
&gt; 1) I&apos;ve been working on a Python replacement for run-api-tests so that we
&gt; can manager Simulators better and run tests as multiprocess (might address
&gt; Alexey&apos;s concern about .  This change may be worth postponing until we are
&gt; running in Python, rather than requiring this wrapper.

Great to see it happening!
I am fine waiting for this, that will remove the FIXME inside this patch

&gt; 2) It seems wrong to have API tests assets as a subdirectory in LayoutTests.

It should be fairly easy to add additional root paths like we do now for http/wpt, so that is fine.
Main motivation is to be able to do api tests on features that require http/https.
Allowing to use existing infrastructure resources such as existing LayoutTests JS utilities seems an additional bonus. This might blur the line between API tests specific resources and layout tests resources.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329603</attachid>
            <date>2017-12-17 09:29:29 -0800</date>
            <delta_ts>2017-12-17 10:02:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180915-20171217092928.patch</filename>
            <type>text/plain</type>
            <size>44879</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1OTk3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDQxOWM0MTAwNWFkNjMyM2NkMjQ2MDEwZjY1Mjk5ZmMx
MDlmYjYzYS4uNzJjY2VkZTI0MzMxZWUxOWY2YTVmODVlNWQ5MmI0NjllMGQzNDIzNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIw
IEBACisyMDE3LTEyLTE3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAg
ICAgICBBbGxvdyBydW4tYXBpLXRlc3RzIHRvIHN0YXJ0L3N0b3AgbGF5b3V0IHRlc3RzIHNlcnZl
cnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDkx
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmVk
IHBlcmwgcnVuLWFwaS10ZXN0cyB0byBhcGktdGVzdHMtcnVubmVyLgorICAgICAgICBBZGRlZCBh
IHB5dGhvbiB3cmFwcGVyIGFyb3VuZCBpdCB0byBjb250cm9sIHN0YXJ0L3N0b3Agb2YgSFRUUC9X
UyBzZXJ2ZXJzLgorICAgICAgICBUZXN0ZWQgYnkgY2hhbmdpbmcgYSBVc2VyTWVkaWEgYXBpIHRl
c3QgdG8gbG9hZCBhIGdldFVzZXJNZWRpYS5odG1sIGZpbGUgdGhyb3VnaCBXUFQgc2VydmVyLgor
CisgICAgICAgICogU2NyaXB0cy9hcGktdGVzdHMtcnVubmVyOiBDb3BpZWQgZnJvbSBUb29scy9T
Y3JpcHRzL3J1bi1hcGktdGVzdHMuCisgICAgICAgICogU2NyaXB0cy9ydW4tYXBpLXRlc3RzOiBB
ZGRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9Vc2Vy
TWVkaWEuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTctMTItMTYg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIHNjcmlw
dCB0byBhdXRvbWF0ZSBXM2Mgd2ViLXBsYXRmb3JtLXRlc3RzIHB1bGwgcmVxdWVzdCBjcmVhdGlv
bnMgZnJvbSBXZWJLaXQgY29tbWl0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9hcGktdGVz
dHMtcnVubmVyIGIvVG9vbHMvU2NyaXB0cy9hcGktdGVzdHMtcnVubmVyCm5ldyBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVj
MTAxZmRiYmY3MWVlN2M1MDA3NTlhZTZlMzJkNWU4MTkwNDBiMjEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9TY3JpcHRzL2FwaS10ZXN0cy1ydW5uZXIKQEAgLTAsMCArMSw0NDAgQEAKKyMhL3Vz
ci9iaW4vcGVybCAtdworCisjIENvcHlyaWdodCAoQykgMjAxMC0yMDEyLCAyMDE0LTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
IyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIEZpbGU6OkJh
c2VuYW1lOwordXNlIEZpbGU6OlNwZWM7Cit1c2UgRmluZEJpbjsKK3VzZSBHZXRvcHQ6Okxvbmcg
cXcoOmNvbmZpZyBwYXNzX3Rocm91Z2gpOwordXNlIElQQzo6T3BlbjM7Cit1c2UgSlNPTjo6UFA7
Cit1c2UgbGliICRGaW5kQmluOjpCaW47Cit1c2Ugc2lndHJhcCBxdyhkaWUgbm9ybWFsLXNpZ25h
bHMpOwordXNlIHdlYmtpdGRpcnM7Cit1c2UgVkNTVXRpbHM7CisKK3N1YiBidWlsZFRlc3RUb29s
KCk7CitzdWIgZHVtcFRlc3RzQnlTdWl0ZShcQCk7CitzdWIgbGlzdEFsbFRlc3RzKCk7CitzdWIg
cnVuVGVzdCgkJCk7CitzdWIgcnVuVGVzdHNCeVN1aXRlKFxAKTsKK3N1YiBwcmVwYXJlRW52aXJv
bm1lbnRGb3JSdW5uaW5nVGVzdFRvb2woKTsKK3N1YiBhcmNoQ29tbWFuZExpbmVBcmd1bWVudHNG
b3JSZXN0cmljdGVkRW52aXJvbm1lbnRWYXJpYWJsZXMoKTsKK3N1YiB0ZXN0VG9vbFBhdGhzKCk7
CitzdWIgd3JpdGVKU09ORGF0YUlmQXBwbGljYWJsZSgpOworCisjIERlZmluZWQgaW4gVkNTVXRp
bHMuCitzdWIgcG9zc2libHlDb2xvcmVkKCQkKTsKKworIyBUaW1lb3V0IGZvciBpbmRpdmlkdWFs
IHRlc3QsIGluIHNlYworbXkgJHRpbWVvdXQgPSAzMDsKKworbXkgJHNob3dIZWxwID0gMDsKK215
ICR2ZXJib3NlID0gMDsKK215ICRzaG93TGVha3MgPSAwOworbXkgJGR1bXBUZXN0cyA9IDA7Citt
eSAkZGlzYWJsZVRpbWVvdXQgPSAwOworbXkgJGJ1aWxkID0gMTsKK215ICRyb290OworbXkgJGJ1
aWxkRGVmYXVsdCA9ICRidWlsZCA/ICJidWlsZCIgOiAiZG8gbm90IGJ1aWxkIjsKK215IEB0ZXN0
c0ZhaWxlZDsKK215IEB0ZXN0c1RpbWVkT3V0OworbXkgJHd0Zk9ubHkgPSAwOworbXkgJXRlc3RU
b1Rvb2xNYXA7CitteSAlanNvbkRhdGEgPSAoKTsKK215ICRqc29uRmlsZU5hbWU7CisKKworbXkg
JHByb2dyYW1OYW1lID0gYmFzZW5hbWUoJDApOworbXkgJHVzYWdlID0gPDxFT0Y7CitVc2FnZTog
JHByb2dyYW1OYW1lIFtvcHRpb25zXSBbc3VpdGUgb3IgdGVzdCBwcmVmaXhlc10KKyAgLS1oZWxw
ICAgICAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwIG1lc3NhZ2UKKyAgLXZ8LS12ZXJib3NlICAg
ICAgICAgIFZlcmJvc2Ugb3V0cHV0CisgIC1kfC0tZHVtcC10ZXN0cyAgICAgICBEdW1wIHRoZSBu
YW1lcyBvZiB0ZXN0Y2FzZXMgd2l0aG91dCBydW5uaW5nIHRoZW0KKyAgLS1bbm8tXWJ1aWxkICAg
ICAgICAgIEJ1aWxkIChvciBkbyBub3QgYnVpbGQpIHVuaXQgdGVzdHMgcHJpb3IgdG8gcnVubmlu
ZyAoZGVmYXVsdDogJGJ1aWxkRGVmYXVsdCkKKyAgLS1qc29uLW91dHB1dD0gICAgICAgIENyZWF0
ZSBhIGZpbGUgYXQgdGhlIHNwZWNpZmllZCBwYXRoLCBsaXN0aW5nIHRlc3QgZmFpbHVyZXMgYW5k
IHRpbWVvdXRzIGluIEpTT04gZm9ybWF0LgorICAtLXJvb3Q9ICAgICAgICAgICAgICAgUGF0aCB0
byB0aGUgcHJlLWJ1aWx0IHJvb3QgY29udGFpbmluZyBUZXN0V2ViS2l0QVBJCisgIC0tc2hvdy1s
ZWFrcyAgICAgICAgICBTaG93IGxlYWtzIGluIHRoZSBvdXRwdXQKKyAgLS1uby10aW1lb3V0ICAg
ICAgICAgIERpc2FibGUgdGVzdCB0aW1lb3V0cworICAtLXd0Zi1vbmx5ICAgICAgICAgICAgT25s
eSBidWlsZCBhbmQgcnVuIFRlc3RXVEYKKworUGxhdGZvcm0gb3B0aW9uczoKKyAgLS1pb3Mtc2lt
dWxhdG9yICAgICAgIFJ1biB0ZXN0cyBpbiB0aGUgaU9TIFNpbXVsYXRvcgorICAtLXNpbXVsYXRv
ciAgICAgICAgICAgREVQUkVDQVRFRCBhbGlhcyBvZiAtLWlvcy1zaW11bGF0b3IKKworQHtbIHNo
YXJlZENvbW1hbmRMaW5lT3B0aW9uc1VzYWdlKGluZGVudCA9PiAyLCBzd2l0Y2hXaWR0aCA9PiAy
MSkgXX0KK0V4YW1wbGVzCisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZCB3aWxsIHJ1biBhIHNpbmds
ZSB0ZXN0OgorICAgICRwcm9ncmFtTmFtZSBXZWJLaXQuQWJvdXRCbGFuaworCitUaGUgZm9sbG93
aW5nIGNvbW1hbmQgd2lsbCBydW4gYWxsIHRlc3RzIGluIHN1aXRlcyB0aGF0IGJlZ2luIHdpdGgg
J1dlYktpdCc6CisgICAgJHByb2dyYW1OYW1lIFdlYktpdAorCitFT0YKKworbXkgJGdldE9wdGlv
bnNSZXN1bHQgPSBHZXRPcHRpb25zKAorICAgIHNoYXJlZENvbW1hbmRMaW5lT3B0aW9ucygpLAor
ICAgICdoZWxwJyA9PiBcJHNob3dIZWxwLAorICAgICd2ZXJib3NlfHYnID0+IFwkdmVyYm9zZSwK
KyAgICAnc2hvdy1sZWFrcycgPT4gXCRzaG93TGVha3MsCisgICAgJ25vLXRpbWVvdXQnID0+IFwk
ZGlzYWJsZVRpbWVvdXQsCisgICAgJ2pzb24tb3V0cHV0PXMnID0+IFwkanNvbkZpbGVOYW1lLAor
ICAgICdkdW1wfGQnID0+IFwkZHVtcFRlc3RzLAorICAgICdidWlsZCEnID0+IFwkYnVpbGQsCisg
ICAgJ3Jvb3Q9cycgPT4gXCRyb290LAorICAgICd3dGYtb25seScgPT4gXCR3dGZPbmx5LAorKTsK
KworaWYgKCEkZ2V0T3B0aW9uc1Jlc3VsdCB8fCAkc2hvd0hlbHApIHsKKyAgIHByaW50IFNUREVS
UiAkdXNhZ2U7CisgICBleGl0IDE7Cit9CisKK3NldENvbmZpZ3VyYXRpb24oKTsKKworc2V0Q29u
ZmlndXJhdGlvblByb2R1Y3REaXIoQ3dkOjphYnNfcGF0aCgkcm9vdCkpIGlmIChkZWZpbmVkKCRy
b290KSk7CisKK2lmIChkZWZpbmVkKCRqc29uRmlsZU5hbWUpKSB7CisgICAgJGpzb25GaWxlTmFt
ZSA9IEZpbGU6OlNwZWMtPnJlbDJhYnMoJGpzb25GaWxlTmFtZSk7Cit9CisKK2J1aWxkVGVzdFRv
b2woKSBpZiAkYnVpbGQgJiYgIWRlZmluZWQoJHJvb3QpOworc2V0UGF0aEZvclJ1bm5pbmdXZWJL
aXRBcHAoXCVFTlYpOworCitteSAkc2ltdWxhdG9yRGV2aWNlOworaWYgKHdpbGxVc2VJT1NTaW11
bGF0b3JTREsoKSkgeworICAgICRzaW11bGF0b3JEZXZpY2UgPSBmaW5kT3JDcmVhdGVTaW11bGF0
b3JGb3JJT1NEZXZpY2UoU0lNVUxBVE9SX0RFVklDRV9TVUZGSVhfRk9SX1dFQktJVF9ERVZFTE9Q
TUVOVCk7CisgICAgcmVsYXVuY2hJT1NTaW11bGF0b3IoJHNpbXVsYXRvckRldmljZSk7Cit9Citt
eSBAdGVzdHNUb1J1biA9IGxpc3RBbGxUZXN0cygpOworCitAdGVzdHNUb1J1biA9IGdyZXAgeyBt
eSAkdGVzdCA9ICRfOyBncmVwIHsgJHRlc3QgPX4gbS9eXFEkX1xFLyB9IEBBUkdWOyB9IEB0ZXN0
c1RvUnVuIGlmIEBBUkdWOworCitpZiAoJGR1bXBUZXN0cykgeworICAgIGR1bXBUZXN0c0J5U3Vp
dGUoQHRlc3RzVG9SdW4pOworICAgIGV4aXQgMDsKK30KKworRU5EIHsgc2h1dERvd25JT1NTaW11
bGF0b3JEZXZpY2UoJHNpbXVsYXRvckRldmljZSkgaWYgJHNpbXVsYXRvckRldmljZTsgfQorCitl
eGl0IHJ1blRlc3RzQnlTdWl0ZShAdGVzdHNUb1J1bik7CisKK3N1YiBpc1N1cHBvcnRlZFBsYXRm
b3JtKCkKK3sKKyAgICByZXR1cm4gaXNBcHBsZUNvY29hV2ViS2l0KCkgfHwgaXNBcHBsZVdpbldl
YktpdCgpOworfQorCitzdWIgZHVtcFRlc3RzQnlTdWl0ZShcQCkKK3sKKyAgICBteSAoJHRlc3Rz
KSA9IEBfOworICAgIHByaW50ICJEdW1waW5nIHRlc3QgY2FzZXNcbiI7CisgICAgcHJpbnQgIi0t
LS0tLS0tLS0tLS0tLS0tLVxuIjsKKyAgICBteSAkbGFzdFN1aXRlID0gIiI7CisgICAgZm9yIG15
ICRzdWl0ZUFuZFRlc3QgKHNvcnQgQCR0ZXN0cykgeworICAgICAgICBteSAoJHN1aXRlLCAkdGVz
dCkgPSBzcGxpdCgvXC4vLCAkc3VpdGVBbmRUZXN0KTsKKyAgICAgICAgaWYgKCRsYXN0U3VpdGUg
bmUgJHN1aXRlKSB7CisgICAgICAgICAgICAkbGFzdFN1aXRlID0gJHN1aXRlOworICAgICAgICAg
ICAgcHJpbnQgIiRzdWl0ZTpcbiI7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgIiAgICR0ZXN0
XG4iOworICAgIH0KKyAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tXG4iOworfQorCitzdWIg
cnVuVGVzdHNCeVN1aXRlKFxAKQoreworICAgIG15ICgkdGVzdHMpID0gQF87CisgICAgZm9yIG15
ICRzdWl0ZUFuZFRlc3QgKHNvcnQgQCR0ZXN0cykgeworICAgICAgICBteSAoJHN1aXRlLCAkdGVz
dCkgPSBzcGxpdCgvXC4vLCAkc3VpdGVBbmRUZXN0KTsKKyAgICAgICAgcnVuVGVzdCgkc3VpdGUs
ICR0ZXN0KTsKKyAgICB9CisKKyAgICBpZiAoQHRlc3RzRmFpbGVkKSB7CisgICAgICAgIHByaW50
ICJcblRlc3RzIHRoYXQgZmFpbGVkOlxuIjsKKyAgICAgICAgZm9yIG15ICR0ZXN0IChAdGVzdHNG
YWlsZWQpIHsKKyAgICAgICAgICAgIHByaW50ICIgICR0ZXN0XG4iOworICAgICAgICB9CisgICAg
fQorICAgIGlmIChAdGVzdHNUaW1lZE91dCkgeworICAgICAgICBwcmludCAiXG5UZXN0cyB0aGF0
IHRpbWVkIG91dDpcbiI7CisgICAgICAgIGZvciBteSAkdGVzdCAoQHRlc3RzVGltZWRPdXQpIHsK
KyAgICAgICAgICAgIHByaW50ICIgICR0ZXN0XG4iOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKGRlZmluZWQoJGpzb25GaWxlTmFtZSkpIHsKKyAgICAgICAgJGpzb25EYXRheydmYWlsdXJl
cyd9ID0gXEB0ZXN0c0ZhaWxlZDsKKyAgICAgICAgJGpzb25EYXRheyd0aW1lb3V0cyd9ID0gXEB0
ZXN0c1RpbWVkT3V0OworICAgIH0KKworICAgIHdyaXRlSlNPTkRhdGFJZkFwcGxpY2FibGUoKTsK
KworICAgIHJldHVybiBAdGVzdHNGYWlsZWQgPiAwIHx8IEB0ZXN0c1RpbWVkT3V0ID4gMDsKK30K
Kworc3ViIHJ1blRlc3QoJCQpCit7CisgICAgbXkgKCRzdWl0ZSwgJHRlc3ROYW1lKSA9IEBfOwor
ICAgIG15ICR0ZXN0ID0gJHN1aXRlIC4gIi4iIC4gJHRlc3ROYW1lOworCisgICAgbXkgJGd0ZXN0
QXJnID0gIi0tZ3Rlc3RfZmlsdGVyPSIgLiAkdGVzdDsKKworICAgIG15ICRyZXN1bHQgPSAwOwor
ICAgIG15ICR0aW1lZE91dCA9IDA7CisKKyAgICBkaWUgInJ1bi1hcGktdGVzdHMgaXMgbm90IHN1
cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLlxuIiB1bmxlc3MgaXNTdXBwb3J0ZWRQbGF0Zm9ybSgp
OworCisgICAgbG9jYWwgJUVOViA9ICVFTlY7CisgICAgcHJlcGFyZUVudmlyb25tZW50Rm9yUnVu
bmluZ1Rlc3RUb29sKCk7CisKKyAgICBsb2NhbCAqREVWTlVMTDsKKyAgICBteSAoJGNoaWxkSW4s
ICRjaGlsZE91dCwgJGNoaWxkRXJyKTsKKyAgICBpZiAoJHZlcmJvc2UgfHwgJHNob3dMZWFrcykg
eworICAgICAgICAkY2hpbGRFcnIgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIG9wZW4oREVW
TlVMTCwgIj4iLCBGaWxlOjpTcGVjLT5kZXZudWxsKCkpIG9yIGRpZSAiRmFpbGVkIHRvIG9wZW4g
L2Rldi9udWxsIjsKKyAgICAgICAgJGNoaWxkRXJyID0gIj4mREVWTlVMTCI7CisgICAgfQorCisg
ICAgbXkgJHBpZDsKKyAgICBteSBAY29tbW9uQXJndW1lbnRzID0gKCR0ZXN0VG9Ub29sTWFweyR0
ZXN0fSwgJGd0ZXN0QXJnLCBAQVJHVik7CisgICAgaWYgKHdpbGxVc2VJT1NTaW11bGF0b3JTREso
KSkgeworICAgICAgICAkcGlkID0gb3BlbjMoJGNoaWxkSW4sICRjaGlsZE91dCwgJGNoaWxkRXJy
LCBxdyh4Y3J1biAtLXNkayBpcGhvbmVzaW11bGF0b3Igc2ltY3RsIHNwYXduKSwgJHNpbXVsYXRv
ckRldmljZS0+e1VESUR9LCBAY29tbW9uQXJndW1lbnRzKSBvciBkaWUgIkZhaWxlZCB0byBydW4g
dGVzdDogJHRlc3QuIjsKKyAgICB9IGVsc2lmIChpc0FwcGxlQ29jb2FXZWJLaXQoKSAmJiBhcmNo
aXRlY3R1cmUoKSkgeworICAgICAgICAkcGlkID0gb3BlbjMoJGNoaWxkSW4sICRjaGlsZE91dCwg
JGNoaWxkRXJyLCAiYXJjaCIsICItIiAuIGFyY2hpdGVjdHVyZSgpLCBhcmNoQ29tbWFuZExpbmVB
cmd1bWVudHNGb3JSZXN0cmljdGVkRW52aXJvbm1lbnRWYXJpYWJsZXMoKSwgQGNvbW1vbkFyZ3Vt
ZW50cykgb3IgZGllICJGYWlsZWQgdG8gcnVuIHRlc3Q6ICR0ZXN0LiI7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgJHBpZCA9IG9wZW4zKCRjaGlsZEluLCAkY2hpbGRPdXQsICRjaGlsZEVyciwgQGNv
bW1vbkFyZ3VtZW50cykgb3IgZGllICJGYWlsZWQgdG8gcnVuIHRlc3Q6ICR0ZXN0LiI7CisgICAg
fQorCisgICAgZXZhbCB7CisgICAgICAgIGlmICgkZGlzYWJsZVRpbWVvdXQpIHsKKyAgICAgICAg
ICAgIHdhaXRwaWQoJHBpZCwgMCk7ICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
bG9jYWwgJFNJR3tBTFJNfSA9IHN1YiB7IGRpZSAiYWxhcm1cbiIgfTsKKyAgICAgICAgICAgIGFs
YXJtICR0aW1lb3V0OworICAgICAgICAgICAgd2FpdHBpZCgkcGlkLCAwKTsKKyAgICAgICAgICAg
IGFsYXJtIDA7CisgICAgICAgIH0KKyAgICAgICAgJHJlc3VsdCA9ICQ/OworICAgIH07CisgICAg
aWYgKCRAKSB7CisgICAgICAgIGRpZSB1bmxlc3MgJEAgZXEgImFsYXJtXG4iOworICAgICAgICBr
aWxsIFNJR1RFUk0sICRwaWQgb3Iga2lsbCBTSUdLSUxMLCAkcGlkOworICAgICAgICAkdGltZWRP
dXQgPSAxOworICAgIH0KKworICAgIG15IEB0ZXN0T3V0cHV0ID0gPCRjaGlsZE91dD47CisgICAg
QHRlc3RPdXRwdXQgPSBncmVwIHsgIS9eTEVBSzovIH0gQHRlc3RPdXRwdXQgdW5sZXNzICRzaG93
TGVha3M7CisgICAgbWFwIHsgcy9cKlwqUEFTU1wqXCovcG9zc2libHlDb2xvcmVkKCJib2xkIGdy
ZWVuIiwgIlBBU1MiKS9lZyB9IEB0ZXN0T3V0cHV0OworICAgIG1hcCB7IHMvXCpcKkZBSUxcKlwq
L3Bvc3NpYmx5Q29sb3JlZCgiYm9sZCByZWQiLCAiRkFJTCIpL2VnIH0gQHRlc3RPdXRwdXQ7CisK
KyAgICBpZiAoJHJlc3VsdCkgeworICAgICAgICBwdXNoIEB0ZXN0c0ZhaWxlZCwgJHRlc3Q7Cisg
ICAgICAgIGlmICghJHRpbWVkT3V0ICYmIGluZGV4KCJAdGVzdE91dHB1dCIsICR0ZXN0KSA9PSAt
MSkgeworICAgICAgICAgICAgcHJpbnQgU1RET1VUIHBvc3NpYmx5Q29sb3JlZCgiYm9sZCByZWQi
LCAiVU5FWFBFQ1RFRExZIEVYSVRFRCIpLCAiICR0ZXN0XG4iOworICAgICAgICB9CisgICAgfSBl
bHNpZiAoJHRpbWVkT3V0KSB7CisgICAgICAgIHB1c2ggQHRlc3RzVGltZWRPdXQsICR0ZXN0Owor
ICAgICAgICBwcmludCBTVERPVVQgcG9zc2libHlDb2xvcmVkKCJib2xkIHllbGxvdyIsICJUSU1F
T1VUIiksICIgJHRlc3RcbiI7CisgICAgfQorCisgICAgcHJpbnQgU1RET1VUIEB0ZXN0T3V0cHV0
OworCisgICAgY2xvc2UoJGNoaWxkSW4pOworICAgIGNsb3NlKCRjaGlsZE91dCk7CisgICAgY2xv
c2UoJGNoaWxkRXJyKSB1bmxlc3MgKCR2ZXJib3NlIHx8ICRzaG93TGVha3MpOworICAgIGNsb3Nl
KERFVk5VTEwpIHVubGVzcyAoJHZlcmJvc2UgfHwgJHNob3dMZWFrcyk7CisKKyAgICBpZiAoJHRp
bWVkT3V0IHx8ICRyZXN1bHQpIHsKKyAgICAgICAgcmV0dXJuICR0aW1lZE91dCB8fCAkcmVzdWx0
OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdWIgbGlzdEFsbFRlc3RzKCkKK3sKKyAg
ICBteSBAdG9vbE91dHB1dDsKKyAgICBteSAkdGltZWRPdXQ7CisKKyAgICBkaWUgInJ1bi1hcGkt
dGVzdHMgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLlxuIiB1bmxlc3MgaXNTdXBw
b3J0ZWRQbGF0Zm9ybSgpOworCisgICAgcHJlcGFyZUVudmlyb25tZW50Rm9yUnVubmluZ1Rlc3RU
b29sKCk7CisKKyAgICBsb2NhbCAqREVWTlVMTDsKKyAgICBteSAoJGNoaWxkSW4sICRjaGlsZE91
dCwgJGNoaWxkRXJyKTsKKyAgICBpZiAoJHZlcmJvc2UpIHsKKyAgICAgICAgJGNoaWxkRXJyID0g
Ij4mU1RERVJSIjsKKyAgICB9IGVsc2UgeworICAgICAgICBvcGVuKERFVk5VTEwsICI+IiwgRmls
ZTo6U3BlYy0+ZGV2bnVsbCgpKSBvciBkaWUgIkZhaWxlZCB0byBvcGVuIC9kZXYvbnVsbCI7Cisg
ICAgICAgICRjaGlsZEVyciA9ICI+JkRFVk5VTEwiOworICAgIH0KKworICAgIG15IEB0ZXN0cyA9
ICgpOworICAgIGZvcmVhY2ggKHRlc3RUb29sUGF0aHMoKSkgeworICAgICAgICBteSAkcGlkOwor
ICAgICAgICBteSAkdGVzdFRvb2wgPSAkXzsKKyAgICAgICAgbXkgQGNvbW1vbkFyZ3VtZW50cyA9
ICgkdGVzdFRvb2wsICItLWd0ZXN0X2xpc3RfdGVzdHMiKTsKKyAgICAgICAgaWYgKGlzSU9TV2Vi
S2l0KCkpIHsKKyAgICAgICAgICAgICRwaWQgPSBvcGVuMygkY2hpbGRJbiwgJGNoaWxkT3V0LCAk
Y2hpbGRFcnIsIHF3KHhjcnVuIC0tc2RrIGlwaG9uZXNpbXVsYXRvciBzaW1jdGwgc3Bhd24pLCAk
c2ltdWxhdG9yRGV2aWNlLT57VURJRH0sIEBjb21tb25Bcmd1bWVudHMpIG9yIGRpZSAiRmFpbGVk
IHRvIGJ1aWxkIGxpc3Qgb2YgdGVzdHMhIjsKKyAgICAgICAgfSBlbHNpZiAoaXNBcHBsZUNvY29h
V2ViS2l0KCkgJiYgYXJjaGl0ZWN0dXJlKCkpIHsKKyAgICAgICAgICAgICRwaWQgPSBvcGVuMygk
Y2hpbGRJbiwgJGNoaWxkT3V0LCAkY2hpbGRFcnIsICJhcmNoIiwgIi0iIC4gYXJjaGl0ZWN0dXJl
KCksIGFyY2hDb21tYW5kTGluZUFyZ3VtZW50c0ZvclJlc3RyaWN0ZWRFbnZpcm9ubWVudFZhcmlh
YmxlcygpLCBAY29tbW9uQXJndW1lbnRzKSBvciBkaWUgIkZhaWxlZCB0byBidWlsZCBsaXN0IG9m
IHRlc3RzISI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkcGlkID0gb3BlbjMoJGNo
aWxkSW4sICRjaGlsZE91dCwgJGNoaWxkRXJyLCBAY29tbW9uQXJndW1lbnRzKSBvciBkaWUgIkZh
aWxlZCB0byBidWlsZCBsaXN0IG9mIHRlc3RzISI7CisgICAgICAgIH0KKworICAgICAgICBjbG9z
ZSgkY2hpbGRJbik7CisgICAgICAgIEB0b29sT3V0cHV0ID0gPCRjaGlsZE91dD47CisgICAgICAg
IGNsb3NlKCRjaGlsZE91dCk7CisgICAgICAgIGNsb3NlKCRjaGlsZEVycik7CisKKyAgICAgICAg
d2FpdHBpZCgkcGlkLCAwKTsKKyAgICAgICAgbXkgJHJlc3VsdCA9ICQ/OworCisgICAgICAgIGlm
ICgkcmVzdWx0KSB7CisgICAgICAgICAgICBwcmludCBTVERFUlIgIkZhaWxlZCB0byBidWlsZCBs
aXN0IG9mIHRlc3RzIS0tXG4iOworICAgICAgICAgICAgZXhpdCBleGl0U3RhdHVzKCRyZXN1bHQp
OworICAgICAgICB9CisKKyAgICAgICAgbXkgJHN1aXRlOworICAgICAgICBmb3IgbXkgJGxpbmUg
KEB0b29sT3V0cHV0KSB7CisgICAgICAgICAgICRsaW5lID1+IHMvW1xyXG5dKiQvLzsKKyAgICAg
ICAgICAgaWYgKCRsaW5lID1+IG0vXC4kLykgeworICAgICAgICAgICAgICAkc3VpdGUgPSAkbGlu
ZTsgIyAiU3VpdGVOYW1lLiIKKyAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgJGxp
bmUgPX4gcy9eXHMqLy87ICMgIlRlc3ROYW1lIgorICAgICAgICAgICAgICBteSAkZnVsbE5hbWUg
PSAkc3VpdGUgLiAkbGluZTsgIyAiU3VpdGVOYW1lLlRlc3ROYW1lIjsKKyAgICAgICAgICAgICAg
cHVzaCBAdGVzdHMsICRmdWxsTmFtZTsKKyAgICAgICAgICAgICAgJHRlc3RUb1Rvb2xNYXB7JGZ1
bGxOYW1lfSA9ICR0ZXN0VG9vbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGNsb3NlKERFVk5VTEwpIHVubGVzcyAoJHZlcmJvc2UpOworCisgICAgcmV0dXJuIEB0ZXN0
czsKK30KKworc3ViIGJ1aWxkVGVzdFRvb2woKQoreworICAgIG15ICRvcmlnaW5hbEN3ZCA9IGdl
dGN3ZCgpOworCisgICAgY2hkaXJXZWJLaXQoKTsKKworICAgIG15ICRidWlsZFRlc3RUb29sID0g
ImJ1aWxkLWFwaS10ZXN0cyI7CisgICAgcHJpbnQgU1RERVJSICJSdW5uaW5nICRidWlsZFRlc3RU
b29sXG4iOworCisgICAgbG9jYWwgKkRFVk5VTEw7CisgICAgbXkgKCRjaGlsZEluLCAkY2hpbGRP
dXQsICRjaGlsZEVycik7CisgICAgaWYgKCR2ZXJib3NlKSB7CisgICAgICAgICMgV2hlbiBub3Qg
cXVpZXQsIGxldCB0aGUgY2hpbGQgdXNlIG91ciBzdGRvdXQvc3RkZXJyLgorICAgICAgICAkY2hp
bGRPdXQgPSAiPiZTVERPVVQiOworICAgICAgICAkY2hpbGRFcnIgPSAiPiZTVERFUlIiOworICAg
IH0gZWxzZSB7CisgICAgICAgIG9wZW4oREVWTlVMTCwgIj4iLCBGaWxlOjpTcGVjLT5kZXZudWxs
KCkpIG9yIGRpZSAiRmFpbGVkIHRvIG9wZW4gL2Rldi9udWxsIjsKKyAgICAgICAgJGNoaWxkT3V0
ID0gIj4mREVWTlVMTCI7CisgICAgICAgICRjaGlsZEVyciA9ICI+JkRFVk5VTEwiOworICAgIH0K
KworICAgIG15IEBhcmdzID0gYXJndW1lbnRzRm9yQ29uZmlndXJhdGlvbigpOworICAgIGlmICgk
d3RmT25seSkgeworICAgICAgICBwdXNoIEBhcmdzLCAiLS13dGYtb25seSI7CisgICAgfQorCisg
ICAgbXkgJHBhdGhUb0J1aWxkVGVzdFRvb2wgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCJUb29scyIs
ICJTY3JpcHRzIiwgJGJ1aWxkVGVzdFRvb2wpOworICAgIG15ICRidWlsZFByb2Nlc3MgPSBvcGVu
MygkY2hpbGRJbiwgJGNoaWxkT3V0LCAkY2hpbGRFcnIsICJwZXJsIiwgJHBhdGhUb0J1aWxkVGVz
dFRvb2wsIEBhcmdzKSBvciBkaWUgIkZhaWxlZCB0byBydW4gIiAuICRidWlsZFRlc3RUb29sOwor
CisgICAgY2xvc2UoJGNoaWxkSW4pOworICAgIGNsb3NlKCRjaGlsZE91dCk7CisgICAgY2xvc2Uo
JGNoaWxkRXJyKTsKKyAgICBjbG9zZShERVZOVUxMKSB1bmxlc3MgKCR2ZXJib3NlKTsKKworICAg
IHdhaXRwaWQoJGJ1aWxkUHJvY2VzcywgMCk7CisgICAgbXkgJGJ1aWxkUmVzdWx0ID0gJD87CisK
KyAgICBpZiAoJGJ1aWxkUmVzdWx0KSB7CisgICAgICAgIHByaW50IFNUREVSUiAiQ29tcGlsaW5n
IFRlc3RXZWJLaXRBUEkgZmFpbGVkIVxuIjsKKyAgICAgICAgZXhpdCBleGl0U3RhdHVzKCRidWls
ZFJlc3VsdCk7CisgICAgfQorCisgICAgY2hkaXIgJG9yaWdpbmFsQ3dkOworfQorCitzdWIgcHJl
cGFyZUVudmlyb25tZW50Rm9yUnVubmluZ1Rlc3RUb29sKCkKK3sKKyAgICByZXR1cm4gdW5sZXNz
IGlzQXBwbGVDb2NvYVdlYktpdCgpOworCisgICAgaWYgKHdpbGxVc2VJT1NTaW11bGF0b3JTREso
KSkgeworICAgICAgICBteSAlc2ltdWxhdG9yRU5WOworICAgICAgICB7CisgICAgICAgICAgICBs
b2NhbCAlRU5WOworICAgICAgICAgICAgc2V0dXBJT1NXZWJLaXRFbnZpcm9ubWVudChwcm9kdWN0
RGlyKCkpOworICAgICAgICAgICAgJXNpbXVsYXRvckVOViA9ICVFTlY7CisgICAgICAgIH0KKyAg
ICAgICAgIyBQcmVmaXggdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIFNJTUNUTF9DSElM
RF8gcGVyIGB4Y3J1biBzaW1jdGwgaGVscCBsYXVuY2hgLgorICAgICAgICBmb3JlYWNoIG15ICRr
ZXkgKGtleXMgJXNpbXVsYXRvckVOVikgeworICAgICAgICAgICAgJEVOVnsiU0lNQ1RMX0NISUxE
XyRrZXkifSA9ICRzaW11bGF0b3JFTlZ7JGtleX07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBzZXR1cE1hY1dlYktpdEVudmlyb25tZW50KHByb2R1Y3REaXIoKSk7Cit9
CisKK3N1YiB0ZXN0VG9vbFBhdGhzKCkKK3sKKyAgICBpZiAoIWlzQXBwbGVXaW5XZWJLaXQoKSkg
eworICAgICAgICBteSBAdG9vbFBhdGhzID0gKCk7CisgICAgICAgIGlmICghJHd0Zk9ubHkpIHsK
KyAgICAgICAgICAgIHB1c2ggQHRvb2xQYXRocywgRmlsZTo6U3BlYy0+Y2F0ZmlsZShwcm9kdWN0
RGlyKCksICJUZXN0V2ViS2l0QVBJIik7CisgICAgICAgIH0KKyAgICAgICAgcHVzaCBAdG9vbFBh
dGhzLCBGaWxlOjpTcGVjLT5jYXRmaWxlKHByb2R1Y3REaXIoKSwgIlRlc3RXVEYiKTsKKyAgICAg
ICAgcmV0dXJuIEB0b29sUGF0aHM7CisgICAgfQorCisgICAgbXkgJGJpbkRpciA9IGlzV2luNjQo
KSA/ICJiaW42NCIgOiAiYmluMzIiOworICAgIG15ICRwYXRoV1RGID0gRmlsZTo6U3BlYy0+Y2F0
ZmlsZShwcm9kdWN0RGlyKCksICRiaW5EaXIsICJUZXN0V1RGIik7CisgICAgbXkgJHBhdGhXZWJD
b3JlID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZShwcm9kdWN0RGlyKCksICRiaW5EaXIsICJUZXN0V2Vi
Q29yZSIpOworICAgIG15ICRwYXRoV2ViS2l0ID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZShwcm9kdWN0
RGlyKCksICRiaW5EaXIsICJUZXN0V2ViS2l0TGVnYWN5Iik7CisKKyAgICBteSAkc3VmZml4Owor
ICAgIGlmIChjb25maWd1cmF0aW9uKCkgZXEgIkRlYnVnX0FsbCIpIHsKKyAgICAgICAgJHN1ZmZp
eCA9ICJfZGVidWciOworICAgIH0gZWxzZSB7CisgICAgICAgICRzdWZmaXggPSAiIjsKKyAgICB9
CisgICAgcmV0dXJuICgiJHBhdGhXVEYkc3VmZml4LmV4ZSIsICIkcGF0aFdlYkNvcmUkc3VmZml4
LmV4ZSIsICIkcGF0aFdlYktpdCRzdWZmaXguZXhlIik7Cit9CisKK3N1YiB3cml0ZUpTT05EYXRh
SWZBcHBsaWNhYmxlKCkKK3sKKyAgICBpZiAoZGVmaW5lZCgkanNvbkZpbGVOYW1lKSkgeworICAg
ICAgICBvcGVuKG15ICRmaWxlSGFuZGxlciwgIj4iLCAkanNvbkZpbGVOYW1lKSBvciBkaWU7Cisg
ICAgICAgIHByaW50ICRmaWxlSGFuZGxlciAiJHtcZW5jb2RlX2pzb24oXCVqc29uRGF0YSl9XG4i
OworICAgICAgICBjbG9zZSgkZmlsZUhhbmRsZXIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvcnVuLWFwaS10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWFwaS10ZXN0cwpp
bmRleCBlYzEwMWZkYmJmNzFlZTdjNTAwNzU5YWU2ZTMyZDVlODE5MDQwYjIxLi5hODdiM2I1ZmMy
MmU3NGZiMzJiZTQwMWJkMWMxNDE4NWVjMDU4MTE0IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRz
L3J1bi1hcGktdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tYXBpLXRlc3RzCkBAIC0xLDQ0
MCArMSwxMDYgQEAKLSMhL3Vzci9iaW4vcGVybCAtdworIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAK
LSMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICMgYXJlIG1l
dDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCiAjCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0j
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi11c2Ugc3RyaWN0OwotdXNlIHdhcm5pbmdzOwotCi11c2UgRmlsZTo6QmFzZW5hbWU7Ci11
c2UgRmlsZTo6U3BlYzsKLXVzZSBGaW5kQmluOwotdXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmln
IHBhc3NfdGhyb3VnaCk7Ci11c2UgSVBDOjpPcGVuMzsKLXVzZSBKU09OOjpQUDsKLXVzZSBsaWIg
JEZpbmRCaW46OkJpbjsKLXVzZSBzaWd0cmFwIHF3KGRpZSBub3JtYWwtc2lnbmFscyk7Ci11c2Ug
d2Via2l0ZGlyczsKLXVzZSBWQ1NVdGlsczsKLQotc3ViIGJ1aWxkVGVzdFRvb2woKTsKLXN1YiBk
dW1wVGVzdHNCeVN1aXRlKFxAKTsKLXN1YiBsaXN0QWxsVGVzdHMoKTsKLXN1YiBydW5UZXN0KCQk
KTsKLXN1YiBydW5UZXN0c0J5U3VpdGUoXEApOwotc3ViIHByZXBhcmVFbnZpcm9ubWVudEZvclJ1
bm5pbmdUZXN0VG9vbCgpOwotc3ViIGFyY2hDb21tYW5kTGluZUFyZ3VtZW50c0ZvclJlc3RyaWN0
ZWRFbnZpcm9ubWVudFZhcmlhYmxlcygpOwotc3ViIHRlc3RUb29sUGF0aHMoKTsKLXN1YiB3cml0
ZUpTT05EYXRhSWZBcHBsaWNhYmxlKCk7Ci0KLSMgRGVmaW5lZCBpbiBWQ1NVdGlscy4KLXN1YiBw
b3NzaWJseUNvbG9yZWQoJCQpOwotCi0jIFRpbWVvdXQgZm9yIGluZGl2aWR1YWwgdGVzdCwgaW4g
c2VjCi1teSAkdGltZW91dCA9IDMwOwotCi1teSAkc2hvd0hlbHAgPSAwOwotbXkgJHZlcmJvc2Ug
PSAwOwotbXkgJHNob3dMZWFrcyA9IDA7Ci1teSAkZHVtcFRlc3RzID0gMDsKLW15ICRkaXNhYmxl
VGltZW91dCA9IDA7Ci1teSAkYnVpbGQgPSAxOwotbXkgJHJvb3Q7Ci1teSAkYnVpbGREZWZhdWx0
ID0gJGJ1aWxkID8gImJ1aWxkIiA6ICJkbyBub3QgYnVpbGQiOwotbXkgQHRlc3RzRmFpbGVkOwot
bXkgQHRlc3RzVGltZWRPdXQ7Ci1teSAkd3RmT25seSA9IDA7Ci1teSAldGVzdFRvVG9vbE1hcDsK
LW15ICVqc29uRGF0YSA9ICgpOwotbXkgJGpzb25GaWxlTmFtZTsKLQotCi1teSAkcHJvZ3JhbU5h
bWUgPSBiYXNlbmFtZSgkMCk7Ci1teSAkdXNhZ2UgPSA8PEVPRjsKLVVzYWdlOiAkcHJvZ3JhbU5h
bWUgW29wdGlvbnNdIFtzdWl0ZSBvciB0ZXN0IHByZWZpeGVzXQotICAtLWhlbHAgICAgICAgICAg
ICAgICAgU2hvdyB0aGlzIGhlbHAgbWVzc2FnZQotICAtdnwtLXZlcmJvc2UgICAgICAgICAgVmVy
Ym9zZSBvdXRwdXQKLSAgLWR8LS1kdW1wLXRlc3RzICAgICAgIER1bXAgdGhlIG5hbWVzIG9mIHRl
c3RjYXNlcyB3aXRob3V0IHJ1bm5pbmcgdGhlbQotICAtLVtuby1dYnVpbGQgICAgICAgICAgQnVp
bGQgKG9yIGRvIG5vdCBidWlsZCkgdW5pdCB0ZXN0cyBwcmlvciB0byBydW5uaW5nIChkZWZhdWx0
OiAkYnVpbGREZWZhdWx0KQotICAtLWpzb24tb3V0cHV0PSAgICAgICAgQ3JlYXRlIGEgZmlsZSBh
dCB0aGUgc3BlY2lmaWVkIHBhdGgsIGxpc3RpbmcgdGVzdCBmYWlsdXJlcyBhbmQgdGltZW91dHMg
aW4gSlNPTiBmb3JtYXQuCi0gIC0tcm9vdD0gICAgICAgICAgICAgICBQYXRoIHRvIHRoZSBwcmUt
YnVpbHQgcm9vdCBjb250YWluaW5nIFRlc3RXZWJLaXRBUEkKLSAgLS1zaG93LWxlYWtzICAgICAg
ICAgIFNob3cgbGVha3MgaW4gdGhlIG91dHB1dAotICAtLW5vLXRpbWVvdXQgICAgICAgICAgRGlz
YWJsZSB0ZXN0IHRpbWVvdXRzCi0gIC0td3RmLW9ubHkgICAgICAgICAgICBPbmx5IGJ1aWxkIGFu
ZCBydW4gVGVzdFdURgotCi1QbGF0Zm9ybSBvcHRpb25zOgotICAtLWlvcy1zaW11bGF0b3IgICAg
ICAgUnVuIHRlc3RzIGluIHRoZSBpT1MgU2ltdWxhdG9yCi0gIC0tc2ltdWxhdG9yICAgICAgICAg
ICBERVBSRUNBVEVEIGFsaWFzIG9mIC0taW9zLXNpbXVsYXRvcgotCi1Ae1sgc2hhcmVkQ29tbWFu
ZExpbmVPcHRpb25zVXNhZ2UoaW5kZW50ID0+IDIsIHN3aXRjaFdpZHRoID0+IDIxKSBdfQotRXhh
bXBsZXMKLQotVGhlIGZvbGxvd2luZyBjb21tYW5kIHdpbGwgcnVuIGEgc2luZ2xlIHRlc3Q6Ci0g
ICAgJHByb2dyYW1OYW1lIFdlYktpdC5BYm91dEJsYW5rCi0KLVRoZSBmb2xsb3dpbmcgY29tbWFu
ZCB3aWxsIHJ1biBhbGwgdGVzdHMgaW4gc3VpdGVzIHRoYXQgYmVnaW4gd2l0aCAnV2ViS2l0JzoK
LSAgICAkcHJvZ3JhbU5hbWUgV2ViS2l0Ci0KLUVPRgotCi1teSAkZ2V0T3B0aW9uc1Jlc3VsdCA9
IEdldE9wdGlvbnMoCi0gICAgc2hhcmVkQ29tbWFuZExpbmVPcHRpb25zKCksCi0gICAgJ2hlbHAn
ID0+IFwkc2hvd0hlbHAsCi0gICAgJ3ZlcmJvc2V8dicgPT4gXCR2ZXJib3NlLAotICAgICdzaG93
LWxlYWtzJyA9PiBcJHNob3dMZWFrcywKLSAgICAnbm8tdGltZW91dCcgPT4gXCRkaXNhYmxlVGlt
ZW91dCwKLSAgICAnanNvbi1vdXRwdXQ9cycgPT4gXCRqc29uRmlsZU5hbWUsCi0gICAgJ2R1bXB8
ZCcgPT4gXCRkdW1wVGVzdHMsCi0gICAgJ2J1aWxkIScgPT4gXCRidWlsZCwKLSAgICAncm9vdD1z
JyA9PiBcJHJvb3QsCi0gICAgJ3d0Zi1vbmx5JyA9PiBcJHd0Zk9ubHksCi0pOwotCi1pZiAoISRn
ZXRPcHRpb25zUmVzdWx0IHx8ICRzaG93SGVscCkgewotICAgcHJpbnQgU1RERVJSICR1c2FnZTsK
LSAgIGV4aXQgMTsKLX0KLQotc2V0Q29uZmlndXJhdGlvbigpOwotCi1zZXRDb25maWd1cmF0aW9u
UHJvZHVjdERpcihDd2Q6OmFic19wYXRoKCRyb290KSkgaWYgKGRlZmluZWQoJHJvb3QpKTsKLQot
aWYgKGRlZmluZWQoJGpzb25GaWxlTmFtZSkpIHsKLSAgICAkanNvbkZpbGVOYW1lID0gRmlsZTo6
U3BlYy0+cmVsMmFicygkanNvbkZpbGVOYW1lKTsKLX0KLQotYnVpbGRUZXN0VG9vbCgpIGlmICRi
dWlsZCAmJiAhZGVmaW5lZCgkcm9vdCk7Ci1zZXRQYXRoRm9yUnVubmluZ1dlYktpdEFwcChcJUVO
Vik7Ci0KLW15ICRzaW11bGF0b3JEZXZpY2U7Ci1pZiAod2lsbFVzZUlPU1NpbXVsYXRvclNESygp
KSB7Ci0gICAgJHNpbXVsYXRvckRldmljZSA9IGZpbmRPckNyZWF0ZVNpbXVsYXRvckZvcklPU0Rl
dmljZShTSU1VTEFUT1JfREVWSUNFX1NVRkZJWF9GT1JfV0VCS0lUX0RFVkVMT1BNRU5UKTsKLSAg
ICByZWxhdW5jaElPU1NpbXVsYXRvcigkc2ltdWxhdG9yRGV2aWNlKTsKLX0KLW15IEB0ZXN0c1Rv
UnVuID0gbGlzdEFsbFRlc3RzKCk7Ci0KLUB0ZXN0c1RvUnVuID0gZ3JlcCB7IG15ICR0ZXN0ID0g
JF87IGdyZXAgeyAkdGVzdCA9fiBtL15cUSRfXEUvIH0gQEFSR1Y7IH0gQHRlc3RzVG9SdW4gaWYg
QEFSR1Y7Ci0KLWlmICgkZHVtcFRlc3RzKSB7Ci0gICAgZHVtcFRlc3RzQnlTdWl0ZShAdGVzdHNU
b1J1bik7Ci0gICAgZXhpdCAwOwotfQotCi1FTkQgeyBzaHV0RG93bklPU1NpbXVsYXRvckRldmlj
ZSgkc2ltdWxhdG9yRGV2aWNlKSBpZiAkc2ltdWxhdG9yRGV2aWNlOyB9Ci0KLWV4aXQgcnVuVGVz
dHNCeVN1aXRlKEB0ZXN0c1RvUnVuKTsKLQotc3ViIGlzU3VwcG9ydGVkUGxhdGZvcm0oKQotewot
ICAgIHJldHVybiBpc0FwcGxlQ29jb2FXZWJLaXQoKSB8fCBpc0FwcGxlV2luV2ViS2l0KCk7Ci19
Ci0KLXN1YiBkdW1wVGVzdHNCeVN1aXRlKFxAKQotewotICAgIG15ICgkdGVzdHMpID0gQF87Ci0g
ICAgcHJpbnQgIkR1bXBpbmcgdGVzdCBjYXNlc1xuIjsKLSAgICBwcmludCAiLS0tLS0tLS0tLS0t
LS0tLS0tXG4iOwotICAgIG15ICRsYXN0U3VpdGUgPSAiIjsKLSAgICBmb3IgbXkgJHN1aXRlQW5k
VGVzdCAoc29ydCBAJHRlc3RzKSB7Ci0gICAgICAgIG15ICgkc3VpdGUsICR0ZXN0KSA9IHNwbGl0
KC9cLi8sICRzdWl0ZUFuZFRlc3QpOwotICAgICAgICBpZiAoJGxhc3RTdWl0ZSBuZSAkc3VpdGUp
IHsKLSAgICAgICAgICAgICRsYXN0U3VpdGUgPSAkc3VpdGU7Ci0gICAgICAgICAgICBwcmludCAi
JHN1aXRlOlxuIjsKLSAgICAgICAgfQotICAgICAgICBwcmludCAiICAgJHRlc3RcbiI7Ci0gICAg
fQotICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS1cbiI7Ci19Ci0KLXN1YiBydW5UZXN0c0J5
U3VpdGUoXEApCi17Ci0gICAgbXkgKCR0ZXN0cykgPSBAXzsKLSAgICBmb3IgbXkgJHN1aXRlQW5k
VGVzdCAoc29ydCBAJHRlc3RzKSB7Ci0gICAgICAgIG15ICgkc3VpdGUsICR0ZXN0KSA9IHNwbGl0
KC9cLi8sICRzdWl0ZUFuZFRlc3QpOwotICAgICAgICBydW5UZXN0KCRzdWl0ZSwgJHRlc3QpOwot
ICAgIH0KLQotICAgIGlmIChAdGVzdHNGYWlsZWQpIHsKLSAgICAgICAgcHJpbnQgIlxuVGVzdHMg
dGhhdCBmYWlsZWQ6XG4iOwotICAgICAgICBmb3IgbXkgJHRlc3QgKEB0ZXN0c0ZhaWxlZCkgewot
ICAgICAgICAgICAgcHJpbnQgIiAgJHRlc3RcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYg
KEB0ZXN0c1RpbWVkT3V0KSB7Ci0gICAgICAgIHByaW50ICJcblRlc3RzIHRoYXQgdGltZWQgb3V0
OlxuIjsKLSAgICAgICAgZm9yIG15ICR0ZXN0IChAdGVzdHNUaW1lZE91dCkgewotICAgICAgICAg
ICAgcHJpbnQgIiAgJHRlc3RcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZGVmaW5l
ZCgkanNvbkZpbGVOYW1lKSkgewotICAgICAgICAkanNvbkRhdGF7J2ZhaWx1cmVzJ30gPSBcQHRl
c3RzRmFpbGVkOwotICAgICAgICAkanNvbkRhdGF7J3RpbWVvdXRzJ30gPSBcQHRlc3RzVGltZWRP
dXQ7Ci0gICAgfQotCi0gICAgd3JpdGVKU09ORGF0YUlmQXBwbGljYWJsZSgpOwotCi0gICAgcmV0
dXJuIEB0ZXN0c0ZhaWxlZCA+IDAgfHwgQHRlc3RzVGltZWRPdXQgPiAwOwotfQotCi1zdWIgcnVu
VGVzdCgkJCkKLXsKLSAgICBteSAoJHN1aXRlLCAkdGVzdE5hbWUpID0gQF87Ci0gICAgbXkgJHRl
c3QgPSAkc3VpdGUgLiAiLiIgLiAkdGVzdE5hbWU7Ci0KLSAgICBteSAkZ3Rlc3RBcmcgPSAiLS1n
dGVzdF9maWx0ZXI9IiAuICR0ZXN0OwotCi0gICAgbXkgJHJlc3VsdCA9IDA7Ci0gICAgbXkgJHRp
bWVkT3V0ID0gMDsKLQotICAgIGRpZSAicnVuLWFwaS10ZXN0cyBpcyBub3Qgc3VwcG9ydGVkIG9u
IHRoaXMgcGxhdGZvcm0uXG4iIHVubGVzcyBpc1N1cHBvcnRlZFBsYXRmb3JtKCk7Ci0KLSAgICBs
b2NhbCAlRU5WID0gJUVOVjsKLSAgICBwcmVwYXJlRW52aXJvbm1lbnRGb3JSdW5uaW5nVGVzdFRv
b2woKTsKLQotICAgIGxvY2FsICpERVZOVUxMOwotICAgIG15ICgkY2hpbGRJbiwgJGNoaWxkT3V0
LCAkY2hpbGRFcnIpOwotICAgIGlmICgkdmVyYm9zZSB8fCAkc2hvd0xlYWtzKSB7Ci0gICAgICAg
ICRjaGlsZEVyciA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgb3BlbihERVZOVUxMLCAiPiIs
IEZpbGU6OlNwZWMtPmRldm51bGwoKSkgb3IgZGllICJGYWlsZWQgdG8gb3BlbiAvZGV2L251bGwi
OwotICAgICAgICAkY2hpbGRFcnIgPSAiPiZERVZOVUxMIjsKLSAgICB9Ci0KLSAgICBteSAkcGlk
OwotICAgIG15IEBjb21tb25Bcmd1bWVudHMgPSAoJHRlc3RUb1Rvb2xNYXB7JHRlc3R9LCAkZ3Rl
c3RBcmcsIEBBUkdWKTsKLSAgICBpZiAod2lsbFVzZUlPU1NpbXVsYXRvclNESygpKSB7Ci0gICAg
ICAgICRwaWQgPSBvcGVuMygkY2hpbGRJbiwgJGNoaWxkT3V0LCAkY2hpbGRFcnIsIHF3KHhjcnVu
IC0tc2RrIGlwaG9uZXNpbXVsYXRvciBzaW1jdGwgc3Bhd24pLCAkc2ltdWxhdG9yRGV2aWNlLT57
VURJRH0sIEBjb21tb25Bcmd1bWVudHMpIG9yIGRpZSAiRmFpbGVkIHRvIHJ1biB0ZXN0OiAkdGVz
dC4iOwotICAgIH0gZWxzaWYgKGlzQXBwbGVDb2NvYVdlYktpdCgpICYmIGFyY2hpdGVjdHVyZSgp
KSB7Ci0gICAgICAgICRwaWQgPSBvcGVuMygkY2hpbGRJbiwgJGNoaWxkT3V0LCAkY2hpbGRFcnIs
ICJhcmNoIiwgIi0iIC4gYXJjaGl0ZWN0dXJlKCksIGFyY2hDb21tYW5kTGluZUFyZ3VtZW50c0Zv
clJlc3RyaWN0ZWRFbnZpcm9ubWVudFZhcmlhYmxlcygpLCBAY29tbW9uQXJndW1lbnRzKSBvciBk
aWUgIkZhaWxlZCB0byBydW4gdGVzdDogJHRlc3QuIjsKLSAgICB9IGVsc2UgewotICAgICAgICAk
cGlkID0gb3BlbjMoJGNoaWxkSW4sICRjaGlsZE91dCwgJGNoaWxkRXJyLCBAY29tbW9uQXJndW1l
bnRzKSBvciBkaWUgIkZhaWxlZCB0byBydW4gdGVzdDogJHRlc3QuIjsKLSAgICB9Ci0KLSAgICBl
dmFsIHsKLSAgICAgICAgaWYgKCRkaXNhYmxlVGltZW91dCkgewotICAgICAgICAgICAgd2FpdHBp
ZCgkcGlkLCAwKTsgICAgCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2NhbCAkU0lH
e0FMUk19ID0gc3ViIHsgZGllICJhbGFybVxuIiB9OwotICAgICAgICAgICAgYWxhcm0gJHRpbWVv
dXQ7Ci0gICAgICAgICAgICB3YWl0cGlkKCRwaWQsIDApOwotICAgICAgICAgICAgYWxhcm0gMDsK
LSAgICAgICAgfQotICAgICAgICAkcmVzdWx0ID0gJD87Ci0gICAgfTsKLSAgICBpZiAoJEApIHsK
LSAgICAgICAgZGllIHVubGVzcyAkQCBlcSAiYWxhcm1cbiI7Ci0gICAgICAgIGtpbGwgU0lHVEVS
TSwgJHBpZCBvciBraWxsIFNJR0tJTEwsICRwaWQ7Ci0gICAgICAgICR0aW1lZE91dCA9IDE7Ci0g
ICAgfQotCi0gICAgbXkgQHRlc3RPdXRwdXQgPSA8JGNoaWxkT3V0PjsKLSAgICBAdGVzdE91dHB1
dCA9IGdyZXAgeyAhL15MRUFLOi8gfSBAdGVzdE91dHB1dCB1bmxlc3MgJHNob3dMZWFrczsKLSAg
ICBtYXAgeyBzL1wqXCpQQVNTXCpcKi9wb3NzaWJseUNvbG9yZWQoImJvbGQgZ3JlZW4iLCAiUEFT
UyIpL2VnIH0gQHRlc3RPdXRwdXQ7Ci0gICAgbWFwIHsgcy9cKlwqRkFJTFwqXCovcG9zc2libHlD
b2xvcmVkKCJib2xkIHJlZCIsICJGQUlMIikvZWcgfSBAdGVzdE91dHB1dDsKLQotICAgIGlmICgk
cmVzdWx0KSB7Ci0gICAgICAgIHB1c2ggQHRlc3RzRmFpbGVkLCAkdGVzdDsKLSAgICAgICAgaWYg
KCEkdGltZWRPdXQgJiYgaW5kZXgoIkB0ZXN0T3V0cHV0IiwgJHRlc3QpID09IC0xKSB7Ci0gICAg
ICAgICAgICBwcmludCBTVERPVVQgcG9zc2libHlDb2xvcmVkKCJib2xkIHJlZCIsICJVTkVYUEVD
VEVETFkgRVhJVEVEIiksICIgJHRlc3RcbiI7Ci0gICAgICAgIH0KLSAgICB9IGVsc2lmICgkdGlt
ZWRPdXQpIHsKLSAgICAgICAgcHVzaCBAdGVzdHNUaW1lZE91dCwgJHRlc3Q7Ci0gICAgICAgIHBy
aW50IFNURE9VVCBwb3NzaWJseUNvbG9yZWQoImJvbGQgeWVsbG93IiwgIlRJTUVPVVQiKSwgIiAk
dGVzdFxuIjsKLSAgICB9Ci0KLSAgICBwcmludCBTVERPVVQgQHRlc3RPdXRwdXQ7Ci0KLSAgICBj
bG9zZSgkY2hpbGRJbik7Ci0gICAgY2xvc2UoJGNoaWxkT3V0KTsKLSAgICBjbG9zZSgkY2hpbGRF
cnIpIHVubGVzcyAoJHZlcmJvc2UgfHwgJHNob3dMZWFrcyk7Ci0gICAgY2xvc2UoREVWTlVMTCkg
dW5sZXNzICgkdmVyYm9zZSB8fCAkc2hvd0xlYWtzKTsKLQotICAgIGlmICgkdGltZWRPdXQgfHwg
JHJlc3VsdCkgewotICAgICAgICByZXR1cm4gJHRpbWVkT3V0IHx8ICRyZXN1bHQ7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN1YiBsaXN0QWxsVGVzdHMoKQotewotICAgIG15IEB0b29s
T3V0cHV0OwotICAgIG15ICR0aW1lZE91dDsKLQotICAgIGRpZSAicnVuLWFwaS10ZXN0cyBpcyBu
b3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uXG4iIHVubGVzcyBpc1N1cHBvcnRlZFBsYXRm
b3JtKCk7Ci0KLSAgICBwcmVwYXJlRW52aXJvbm1lbnRGb3JSdW5uaW5nVGVzdFRvb2woKTsKLQot
ICAgIGxvY2FsICpERVZOVUxMOwotICAgIG15ICgkY2hpbGRJbiwgJGNoaWxkT3V0LCAkY2hpbGRF
cnIpOwotICAgIGlmICgkdmVyYm9zZSkgewotICAgICAgICAkY2hpbGRFcnIgPSAiPiZTVERFUlIi
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG9wZW4oREVWTlVMTCwgIj4iLCBGaWxlOjpTcGVjLT5k
ZXZudWxsKCkpIG9yIGRpZSAiRmFpbGVkIHRvIG9wZW4gL2Rldi9udWxsIjsKLSAgICAgICAgJGNo
aWxkRXJyID0gIj4mREVWTlVMTCI7Ci0gICAgfQotCi0gICAgbXkgQHRlc3RzID0gKCk7Ci0gICAg
Zm9yZWFjaCAodGVzdFRvb2xQYXRocygpKSB7Ci0gICAgICAgIG15ICRwaWQ7Ci0gICAgICAgIG15
ICR0ZXN0VG9vbCA9ICRfOwotICAgICAgICBteSBAY29tbW9uQXJndW1lbnRzID0gKCR0ZXN0VG9v
bCwgIi0tZ3Rlc3RfbGlzdF90ZXN0cyIpOwotICAgICAgICBpZiAoaXNJT1NXZWJLaXQoKSkgewot
ICAgICAgICAgICAgJHBpZCA9IG9wZW4zKCRjaGlsZEluLCAkY2hpbGRPdXQsICRjaGlsZEVyciwg
cXcoeGNydW4gLS1zZGsgaXBob25lc2ltdWxhdG9yIHNpbWN0bCBzcGF3biksICRzaW11bGF0b3JE
ZXZpY2UtPntVRElEfSwgQGNvbW1vbkFyZ3VtZW50cykgb3IgZGllICJGYWlsZWQgdG8gYnVpbGQg
bGlzdCBvZiB0ZXN0cyEiOwotICAgICAgICB9IGVsc2lmIChpc0FwcGxlQ29jb2FXZWJLaXQoKSAm
JiBhcmNoaXRlY3R1cmUoKSkgewotICAgICAgICAgICAgJHBpZCA9IG9wZW4zKCRjaGlsZEluLCAk
Y2hpbGRPdXQsICRjaGlsZEVyciwgImFyY2giLCAiLSIgLiBhcmNoaXRlY3R1cmUoKSwgYXJjaENv
bW1hbmRMaW5lQXJndW1lbnRzRm9yUmVzdHJpY3RlZEVudmlyb25tZW50VmFyaWFibGVzKCksIEBj
b21tb25Bcmd1bWVudHMpIG9yIGRpZSAiRmFpbGVkIHRvIGJ1aWxkIGxpc3Qgb2YgdGVzdHMhIjsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICRwaWQgPSBvcGVuMygkY2hpbGRJbiwgJGNo
aWxkT3V0LCAkY2hpbGRFcnIsIEBjb21tb25Bcmd1bWVudHMpIG9yIGRpZSAiRmFpbGVkIHRvIGJ1
aWxkIGxpc3Qgb2YgdGVzdHMhIjsKLSAgICAgICAgfQotCi0gICAgICAgIGNsb3NlKCRjaGlsZElu
KTsKLSAgICAgICAgQHRvb2xPdXRwdXQgPSA8JGNoaWxkT3V0PjsKLSAgICAgICAgY2xvc2UoJGNo
aWxkT3V0KTsKLSAgICAgICAgY2xvc2UoJGNoaWxkRXJyKTsKLQotICAgICAgICB3YWl0cGlkKCRw
aWQsIDApOwotICAgICAgICBteSAkcmVzdWx0ID0gJD87Ci0KLSAgICAgICAgaWYgKCRyZXN1bHQp
IHsKLSAgICAgICAgICAgIHByaW50IFNUREVSUiAiRmFpbGVkIHRvIGJ1aWxkIGxpc3Qgb2YgdGVz
dHMhLS1cbiI7Ci0gICAgICAgICAgICBleGl0IGV4aXRTdGF0dXMoJHJlc3VsdCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBteSAkc3VpdGU7Ci0gICAgICAgIGZvciBteSAkbGluZSAoQHRvb2xPdXRw
dXQpIHsKLSAgICAgICAgICAgJGxpbmUgPX4gcy9bXHJcbl0qJC8vOwotICAgICAgICAgICBpZiAo
JGxpbmUgPX4gbS9cLiQvKSB7Ci0gICAgICAgICAgICAgICRzdWl0ZSA9ICRsaW5lOyAjICJTdWl0
ZU5hbWUuIgotICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAkbGluZSA9fiBzL15c
cyovLzsgIyAiVGVzdE5hbWUiCi0gICAgICAgICAgICAgIG15ICRmdWxsTmFtZSA9ICRzdWl0ZSAu
ICRsaW5lOyAjICJTdWl0ZU5hbWUuVGVzdE5hbWUiOwotICAgICAgICAgICAgICBwdXNoIEB0ZXN0
cywgJGZ1bGxOYW1lOwotICAgICAgICAgICAgICAkdGVzdFRvVG9vbE1hcHskZnVsbE5hbWV9ID0g
JHRlc3RUb29sOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xvc2Uo
REVWTlVMTCkgdW5sZXNzICgkdmVyYm9zZSk7Ci0KLSAgICByZXR1cm4gQHRlc3RzOwotfQotCi1z
dWIgYnVpbGRUZXN0VG9vbCgpCi17Ci0gICAgbXkgJG9yaWdpbmFsQ3dkID0gZ2V0Y3dkKCk7Ci0K
LSAgICBjaGRpcldlYktpdCgpOwotCi0gICAgbXkgJGJ1aWxkVGVzdFRvb2wgPSAiYnVpbGQtYXBp
LXRlc3RzIjsKLSAgICBwcmludCBTVERFUlIgIlJ1bm5pbmcgJGJ1aWxkVGVzdFRvb2xcbiI7Ci0K
LSAgICBsb2NhbCAqREVWTlVMTDsKLSAgICBteSAoJGNoaWxkSW4sICRjaGlsZE91dCwgJGNoaWxk
RXJyKTsKLSAgICBpZiAoJHZlcmJvc2UpIHsKLSAgICAgICAgIyBXaGVuIG5vdCBxdWlldCwgbGV0
IHRoZSBjaGlsZCB1c2Ugb3VyIHN0ZG91dC9zdGRlcnIuCi0gICAgICAgICRjaGlsZE91dCA9ICI+
JlNURE9VVCI7Ci0gICAgICAgICRjaGlsZEVyciA9ICI+JlNUREVSUiI7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgb3BlbihERVZOVUxMLCAiPiIsIEZpbGU6OlNwZWMtPmRldm51bGwoKSkgb3IgZGll
ICJGYWlsZWQgdG8gb3BlbiAvZGV2L251bGwiOwotICAgICAgICAkY2hpbGRPdXQgPSAiPiZERVZO
VUxMIjsKLSAgICAgICAgJGNoaWxkRXJyID0gIj4mREVWTlVMTCI7Ci0gICAgfQotCi0gICAgbXkg
QGFyZ3MgPSBhcmd1bWVudHNGb3JDb25maWd1cmF0aW9uKCk7Ci0gICAgaWYgKCR3dGZPbmx5KSB7
Ci0gICAgICAgIHB1c2ggQGFyZ3MsICItLXd0Zi1vbmx5IjsKLSAgICB9Ci0KLSAgICBteSAkcGF0
aFRvQnVpbGRUZXN0VG9vbCA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoIlRvb2xzIiwgIlNjcmlwdHMi
LCAkYnVpbGRUZXN0VG9vbCk7Ci0gICAgbXkgJGJ1aWxkUHJvY2VzcyA9IG9wZW4zKCRjaGlsZElu
LCAkY2hpbGRPdXQsICRjaGlsZEVyciwgInBlcmwiLCAkcGF0aFRvQnVpbGRUZXN0VG9vbCwgQGFy
Z3MpIG9yIGRpZSAiRmFpbGVkIHRvIHJ1biAiIC4gJGJ1aWxkVGVzdFRvb2w7Ci0KLSAgICBjbG9z
ZSgkY2hpbGRJbik7Ci0gICAgY2xvc2UoJGNoaWxkT3V0KTsKLSAgICBjbG9zZSgkY2hpbGRFcnIp
OwotICAgIGNsb3NlKERFVk5VTEwpIHVubGVzcyAoJHZlcmJvc2UpOwotCi0gICAgd2FpdHBpZCgk
YnVpbGRQcm9jZXNzLCAwKTsKLSAgICBteSAkYnVpbGRSZXN1bHQgPSAkPzsKLQotICAgIGlmICgk
YnVpbGRSZXN1bHQpIHsKLSAgICAgICAgcHJpbnQgU1RERVJSICJDb21waWxpbmcgVGVzdFdlYktp
dEFQSSBmYWlsZWQhXG4iOwotICAgICAgICBleGl0IGV4aXRTdGF0dXMoJGJ1aWxkUmVzdWx0KTsK
LSAgICB9Ci0KLSAgICBjaGRpciAkb3JpZ2luYWxDd2Q7Ci19Ci0KLXN1YiBwcmVwYXJlRW52aXJv
bm1lbnRGb3JSdW5uaW5nVGVzdFRvb2woKQotewotICAgIHJldHVybiB1bmxlc3MgaXNBcHBsZUNv
Y29hV2ViS2l0KCk7Ci0KLSAgICBpZiAod2lsbFVzZUlPU1NpbXVsYXRvclNESygpKSB7Ci0gICAg
ICAgIG15ICVzaW11bGF0b3JFTlY7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGxvY2FsICVFTlY7
Ci0gICAgICAgICAgICBzZXR1cElPU1dlYktpdEVudmlyb25tZW50KHByb2R1Y3REaXIoKSk7Ci0g
ICAgICAgICAgICAlc2ltdWxhdG9yRU5WID0gJUVOVjsKLSAgICAgICAgfQotICAgICAgICAjIFBy
ZWZpeCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggU0lNQ1RMX0NISUxEXyBwZXIgYHhj
cnVuIHNpbWN0bCBoZWxwIGxhdW5jaGAuCi0gICAgICAgIGZvcmVhY2ggbXkgJGtleSAoa2V5cyAl
c2ltdWxhdG9yRU5WKSB7Ci0gICAgICAgICAgICAkRU5WeyJTSU1DVExfQ0hJTERfJGtleSJ9ID0g
JHNpbXVsYXRvckVOVnska2V5fTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHNldHVwTWFjV2ViS2l0RW52aXJvbm1lbnQocHJvZHVjdERpcigpKTsKLX0KLQotc3ViIHRl
c3RUb29sUGF0aHMoKQotewotICAgIGlmICghaXNBcHBsZVdpbldlYktpdCgpKSB7Ci0gICAgICAg
IG15IEB0b29sUGF0aHMgPSAoKTsKLSAgICAgICAgaWYgKCEkd3RmT25seSkgewotICAgICAgICAg
ICAgcHVzaCBAdG9vbFBhdGhzLCBGaWxlOjpTcGVjLT5jYXRmaWxlKHByb2R1Y3REaXIoKSwgIlRl
c3RXZWJLaXRBUEkiKTsKLSAgICAgICAgfQotICAgICAgICBwdXNoIEB0b29sUGF0aHMsIEZpbGU6
OlNwZWMtPmNhdGZpbGUocHJvZHVjdERpcigpLCAiVGVzdFdURiIpOwotICAgICAgICByZXR1cm4g
QHRvb2xQYXRoczsKLSAgICB9Ci0KLSAgICBteSAkYmluRGlyID0gaXNXaW42NCgpID8gImJpbjY0
IiA6ICJiaW4zMiI7Ci0gICAgbXkgJHBhdGhXVEYgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKHByb2R1
Y3REaXIoKSwgJGJpbkRpciwgIlRlc3RXVEYiKTsKLSAgICBteSAkcGF0aFdlYkNvcmUgPSBGaWxl
OjpTcGVjLT5jYXRmaWxlKHByb2R1Y3REaXIoKSwgJGJpbkRpciwgIlRlc3RXZWJDb3JlIik7Ci0g
ICAgbXkgJHBhdGhXZWJLaXQgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKHByb2R1Y3REaXIoKSwgJGJp
bkRpciwgIlRlc3RXZWJLaXRMZWdhY3kiKTsKLQotICAgIG15ICRzdWZmaXg7Ci0gICAgaWYgKGNv
bmZpZ3VyYXRpb24oKSBlcSAiRGVidWdfQWxsIikgewotICAgICAgICAkc3VmZml4ID0gIl9kZWJ1
ZyI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgJHN1ZmZpeCA9ICIiOwotICAgIH0KLSAgICByZXR1
cm4gKCIkcGF0aFdURiRzdWZmaXguZXhlIiwgIiRwYXRoV2ViQ29yZSRzdWZmaXguZXhlIiwgIiRw
YXRoV2ViS2l0JHN1ZmZpeC5leGUiKTsKLX0KLQotc3ViIHdyaXRlSlNPTkRhdGFJZkFwcGxpY2Fi
bGUoKQotewotICAgIGlmIChkZWZpbmVkKCRqc29uRmlsZU5hbWUpKSB7Ci0gICAgICAgIG9wZW4o
bXkgJGZpbGVIYW5kbGVyLCAiPiIsICRqc29uRmlsZU5hbWUpIG9yIGRpZTsKLSAgICAgICAgcHJp
bnQgJGZpbGVIYW5kbGVyICIke1xlbmNvZGVfanNvbihcJWpzb25EYXRhKX1cbiI7Ci0gICAgICAg
IGNsb3NlKCRmaWxlSGFuZGxlcik7Ci0gICAgfQotfQorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisjICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisjICAgIGRpc2NsYWlt
ZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKKyMgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisjICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UiAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisj
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwKKyMgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyMgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisjIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorIyBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyMg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisjIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgYXRleGl0CitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRweS5jb21tb24uaG9z
dCBpbXBvcnQgSG9zdAorCitURVNUU19VU0lOR19XUFQgPSBbIldlYktpdC5Vc2VyTWVkaWFCYXNp
YyJdCitURVNUU19VU0lOR19BUEFDSEUgPSBbXQorVEVTVFNfVVNJTkdfV0VCU09DS0VUID0gW10K
KworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3J1bi1hcGktdGVzdHMnKQorbG9nZ2luZy5i
YXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLkVSUk9SKQorCitjbGFzcyBBUElUZXN0UnVubmVyKG9i
amVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RzKToKKyAgICAgICAgc2VsZi5faG9z
dCA9IEhvc3QoKQorICAgICAgICBzZWxmLl9wb3J0ID0gc2VsZi5faG9zdC5wb3J0X2ZhY3Rvcnku
Z2V0KE5vbmUsIHt9KQorCisgICAgICAgIGRlZiBhbnlfdGVzdF9tYXRjaGluZyh0ZXN0c1RvUnVu
LCBsaXN0T2ZUZXN0U3VpdGUpOgorICAgICAgICAgICAgZGVmIGlzX3J1bm5pbmdfdGVzdF9zdWl0
ZSh0ZXN0c1RvUnVuLCB0ZXN0U3VpdGUpOgorICAgICAgICAgICAgICAgIGlmIGFueSh0ZXN0U3Vp
dGUgPT0gdGVzdCBmb3IgdGVzdCBpbiB0ZXN0c1RvUnVuKToKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICBpdGVtcyA9IHRlc3RTdWl0ZS5zcGxpdCgnLicp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGFueShpdGVtc1swXSA9PSB0ZXN0IGZvciB0ZXN0IGlu
IHRlc3RzVG9SdW4pIGlmIGxlbihpdGVtcykgZWxzZSBGYWxzZQorCisgICAgICAgICAgICBpZiBu
b3QgbGVuKHRlc3RzVG9SdW4pOgorICAgICAgICAgICAgICAgIHJldHVybiBib29sKGxpc3RPZlRl
c3RTdWl0ZSkKKyAgICAgICAgICAgIHJldHVybiBhbnkgKGlzX3J1bm5pbmdfdGVzdF9zdWl0ZSh0
ZXN0c1RvUnVuLCB0ZXN0U3VpdGUpIGZvciB0ZXN0U3VpdGUgaW4gbGlzdE9mVGVzdFN1aXRlKQor
CisgICAgICAgIHNlbGYuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IGFueV90ZXN0
X21hdGNoaW5nKHRlc3RzLCBURVNUU19VU0lOR19XUFQpIGFuZCBub3Qgc2VsZi5fcG9ydC5pc193
cHRfc2VydmVyX3J1bm5pbmcoKQorICAgICAgICBzZWxmLl9uZWVkc19odHRwID0gYW55X3Rlc3Rf
bWF0Y2hpbmcodGVzdHMsIFRFU1RTX1VTSU5HX0FQQUNIRSkgYW5kIG5vdCBzZWxmLl9wb3J0Lmlz
X2h0dHBfc2VydmVyX3J1bm5pbmcoKQorICAgICAgICBzZWxmLl9uZWVkc193ZWJzb2NrZXQgPSBh
bnlfdGVzdF9tYXRjaGluZyh0ZXN0cywgVEVTVFNfVVNJTkdfV0VCU09DS0VUKSBhbmQgbm90IHNl
bGYuX3BvcnQuaXNfd2Vic29ja2V0X3NlcnZlcnNfcnVubmluZygpCisKKyAgICAgICAgc2VsZi5f
dGVzdHMgPSB0ZXN0cworCisgICAgICAgIHNlbGYuc3RhcnRfc2VydmVycygpCisgICAgICAgIGF0
ZXhpdC5yZWdpc3RlcihsYW1iZGE6IHNlbGYuc3RvcF9zZXJ2ZXJzKCkpCisKKyAgICBkZWYgcnVu
X3Rlc3RzKHNlbGYpOgorICAgICAgICBmaWxlc3lzdGVtID0gc2VsZi5faG9zdC5maWxlc3lzdGVt
CisgICAgICAgICMgRklYTUU6IHJld3JpdGUgVG9vbHMvU2NyaXB0cy9hcGktdGVzdHMtcnVubmVy
IGluIHB5dGhvbi4KKyAgICAgICAgYXJndW1lbnRzID0gW2ZpbGVzeXN0ZW0uam9pbihmaWxlc3lz
dGVtLmRpcm5hbWUoX19maWxlX18pLCAnYXBpLXRlc3RzLXJ1bm5lcicpXQorICAgICAgICBhcmd1
bWVudHMuZXh0ZW5kKHNlbGYuX3Rlc3RzKQorICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Q
b3Blbihhcmd1bWVudHMpCisgICAgICAgIHByb2Nlc3Mud2FpdCgpCisKKyAgICBkZWYgc3RhcnRf
c2VydmVycyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fbmVlZHNfaHR0cDoKKyAgICAgICAgICAg
IGxvZ2dlci5pbmZvKCdTdGFydGluZyBIVFRQIHNlcnZlcicpCisgICAgICAgICAgICBzZWxmLl9w
b3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKKyAgICAgICAgaWYgc2VsZi5fbmVlZHNfd2Vic29ja2V0
OgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1N0YXJ0aW5nIFdlYlNvY2tldCBzZXJ2ZXInKQor
ICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAg
aWYgc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyOgorICAgICAgICAgICAgbG9n
Z2VyLmluZm8oJ1N0YXJ0aW5nIFdlYiBQbGF0Zm9ybSBUZXN0IHNlcnZlcicpCisgICAgICAgICAg
ICBzZWxmLl9wb3J0LnN0YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcigpCisKKyAgICBkZWYg
c3RvcF9zZXJ2ZXJzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9uZWVkc19odHRwOgorICAgICAg
ICAgICAgbG9nZ2VyLmluZm8oJ1N0b3BwaW5nIEhUVFAgc2VydmVyJykKKyAgICAgICAgICAgIHNl
bGYuX3BvcnQuc3RvcF9odHRwX3NlcnZlcigpCisgICAgICAgIGlmIHNlbGYuX25lZWRzX3dlYnNv
Y2tldDoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdTdG9wcGluZyBXZWJTb2NrZXQgc2VydmVy
JykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAg
ICAgaWYgc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyOgorICAgICAgICAgICAg
bG9nZ2VyLmluZm8oJ1N0b3BwaW5nIFdlYiBQbGF0Zm9ybSBUZXN0IHNlcnZlcicpCisgICAgICAg
ICAgICBzZWxmLl9wb3J0LnN0b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKCkKKworCitkZWYg
bWFpbihhcmd2LCBzdGRvdXQsIHN0ZGVycik6CisgICAgcnVubmVyID0gIEFQSVRlc3RSdW5uZXIo
YXJndikKKyAgICBydW5uZXIucnVuX3Rlc3RzKCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWlu
X18nOgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdLCBzeXMuc3Rkb3V0LCBzeXMuc3Rk
ZXJyKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzgxODYzYzEzYWEzNmFhMTU4NWExZDYw
MjRjYTdlMWFjYmJiNmEwMy4uZGMzOTUxM2Y4MWJlNmExMDdiMzQ4NThmM2VkMTk1MzA4NTZiY2M3
NCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI0LDcgKzI0LDYgQEAKIC8qIEJlZ2luIFBC
WEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTA3NDkyQjNCMURGOEIxNEMwMDYzM0RFMSAvKiBFbnVt
ZXJhdGVNZWRpYURldmljZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDc0OTJCM0ExREY4QUUyRDAwNjMzREUxIC8qIEVudW1lcmF0ZU1lZGlhRGV2
aWNlcy5jcHAgKi87IH07CiAJCTA3NDkyQjNDMURGOEI4NjYwMDYzM0RFMSAvKiBlbnVtZXJhdGVN
ZWRpYURldmljZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzQ5MkIzOTFERjhBREE0MDA2MzNERTEgLyogZW51bWVyYXRlTWVkaWFE
ZXZpY2VzLmh0bWwgKi87IH07Ci0JCTA3NDk5NDQyMUVBNTAzNEIwMDBEQTQ0RSAvKiBnZXRVc2Vy
TWVkaWEuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0QTQxMEY0RDE5QUY3QkVGMDAyRUJBQjUgLyogZ2V0VXNlck1lZGlhLmh0bWwgKi87
IH07CiAJCTA3NkU1MDdGMUY0NTEzRDYwMDZFOUY1QSAvKiBMb2dnaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NkU1MDdFMUY0NTAzMUUwMDZF
OUY1QSAvKiBMb2dnaW5nLmNwcCAqLzsgfTsKIAkJMDc5OUMzNDkxRUJBMkQ3QjAwM0I3NTMyIC8q
IFVzZXJNZWRpYURpc2FibGVkLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDdFREVGQUMxRUI5NDAwQzAwRDQzMjkyIC8qIFVzZXJNZWRpYURpc2FibGVk
Lm1tICovOyB9OwogCQkwNzk5QzM0QjFFQkEzMzAxMDAzQjc1MzIgLyogZGlzYWJsZUdldFVzZXJN
ZWRpYS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3OTlDMzRBMUVCQTMyRjQwMDNCNzUzMiAvKiBkaXNhYmxlR2V0VXNlck1lZGlhLmh0
bWwgKi87IH07CkBAIC05MTUsNyArOTE0LDYgQEAKIAkJCQkyNkY1MkVBRjE4Mjg4QzIzMDAyM0Q0
MTIgLyogZ2VvbG9jYXRpb25HZXRDdXJyZW50UG9zaXRpb25XaXRoSGlnaEFjY3VyYWN5Lmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMjZGNTJFQjIxODI4OEYyNDAwMjNENDEyIC8qIGdl
b2xvY2F0aW9uV2F0Y2hQb3NpdGlvbi5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTI2
RjUyRUIzMTgyODhGMjQwMDIzRDQxMiAvKiBnZW9sb2NhdGlvbldhdGNoUG9zaXRpb25XaXRoSGln
aEFjY3VyYWN5Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCi0JCQkJMDc0OTk0NDIxRUE1MDM0
QjAwMERBNDRFIC8qIGdldFVzZXJNZWRpYS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJ
CUY0NkEwOTVCMUVEOEE2RTYwMEQ0QUE1NSAvKiBnaWYtYW5kLWZpbGUtaW5wdXQuaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLywKIAkJCQk5QjRGOEZBNzE1OUQ1MkREMDAyRDlGOTQgLyogSFRNTENv
bGxlY3Rpb25OYW1lZEl0ZW0uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk5QjI2RkND
QTE1OUQxNkRFMDBDQzM3NjUgLyogSFRNTEZvcm1Db2xsZWN0aW9uTmFtZWRJdGVtLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8sCkBAIC0xMjgxLDcgKzEyNzksNiBAQAogCQk0NkU2NkE4RjFGMEQ3
NTU5MDAyNkQ4M0MgLyogV0tXZWJWaWV3RGlhZ25vc3RpY0xvZ2dpbmcubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdEaWFnbm9zdGljTG9nZ2luZy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZFODE2RjcxRTc5RTI5MTAwMzc1QURD
IC8qIFJlc3RvcmVTdGF0ZUFmdGVyVGVybWluYXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBSZXN0b3JlU3RhdGVBZnRlclRlcm1pbmF0aW9uLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QTQxMEY0QjE5QUY3QkQ2MDAyRUJBQjUgLyogVXNl
ck1lZGlhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJNZWRp
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTRBNDEwRjREMTlBRjdCRUYwMDJF
QkFCNSAvKiBnZXRVc2VyTWVkaWEuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IGdl
dFVzZXJNZWRpYS5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QkI0MTYwMTE2
ODE1QjI2MDA4MjQyMzggLyogSlNXcmFwcGVyRm9yTm9kZUluV2ViRnJhbWUubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU1dyYXBwZXJGb3JOb2RlSW5XZWJGcmFt
ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEJCNDE2MDMxNjgxNUY5MTAwODI0
MjM4IC8qIEVsZW1lbnRBdFBvaW50SW5XZWJGcmFtZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IEVsZW1lbnRBdFBvaW50SW5XZWJGcmFtZS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEJGREZGQTYxMzE0Nzc2QzAwNjFGMjRCIC8qIEhpdFRlc3RS
ZXN1bHROb2RlSGFuZGxlX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZV9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjcyMiw3ICsyNzE5LDYgQEAKIAkJCQkyNkY1MkVBRTE4Mjg4QzA0
MDAyM0Q0MTIgLyogZ2VvbG9jYXRpb25HZXRDdXJyZW50UG9zaXRpb25XaXRoSGlnaEFjY3VyYWN5
Lmh0bWwgKi8sCiAJCQkJMjZGNTJFQjAxODI4OEYwRjAwMjNENDEyIC8qIGdlb2xvY2F0aW9uV2F0
Y2hQb3NpdGlvbi5odG1sICovLAogCQkJCTI2RjUyRUIxMTgyODhGMEYwMDIzRDQxMiAvKiBnZW9s
b2NhdGlvbldhdGNoUG9zaXRpb25XaXRoSGlnaEFjY3VyYWN5Lmh0bWwgKi8sCi0JCQkJNEE0MTBG
NEQxOUFGN0JFRjAwMkVCQUI1IC8qIGdldFVzZXJNZWRpYS5odG1sICovLAogCQkJCUJDQkQzNzJF
MTI1QUJCRTYwMEQyQzI5RiAvKiBpY29uLnBuZyAqLywKIAkJCQlDRTM1MjRGNTFCMTQyQkJCMDAy
OEE3QzUgLyogaW5wdXQtZm9jdXMtYmx1ci5odG1sICovLAogCQkJCUM5QjRBRDJCMUVDQTZGNzYw
MEY1RkVBMCAvKiBqcy1hdXRvcGxheS1hdWRpby5odG1sICovLApAQCAtMzE3Niw3ICszMTcyLDkg
QEAKIAkJCQkxQURBRDE1MDFENzdBOUY2MDAyMTI1ODYgLyogQmxvY2tQdHIubW0gaW4gU291cmNl
cyAqLywKIAkJCQk3QzgzREU5QzFEMEE1OTBDMDBGRUJDRjMgLyogQmxvb21GaWx0ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFQTAxRDBBNTkwQzAwRkVCQ0YzIC8qIENoZWNrZWRBcml0
aG1ldGljT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjMwQ0I1QzFGQ0UxNzk2
MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
N0M4M0RFQzMxRDBBNTkwQzAwRkVCQ0YzIC8qIENvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlGRTA1RkFGMTFGRTA4Q0Q0MDAwOTMyMzAgLyogQ29uc3RFeHByUG9pc29uZWQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFQTYxRDBBNTkwQzAwRkVCQ0YzIC8qIENvdW50ZXJzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUE5MUQwQTU5MEMwMEZFQkNGMyAvKiBDU3RyaW5n
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUFEMUQwQTU5MEMwMEZFQkNGMyAvKiBEZXF1
ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMxOTYsMTcgKzMxOTQsMTYgQEAKIAkJCQk3QzgzREYx
RDFEMEE1OTBDMDBGRUJDRjMgLyogTG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdENTRG
NjFGMzM5NUQwMDBBOTdBQTcgLyogTG9nZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNE
RUVEMUQwQTU5MEMwMEZFQkNGMyAvKiBNYXRoRXh0cmFzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUZFMDVGQUYxMUZFMDhDRDQwMDA5MzIzMCAvKiBDb25zdEV4cHJQb2lzb25lZC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3QzgzREVFRjFEMEE1OTBDMDBGRUJDRjMgLyogTUQ1LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDODNERUYxMUQwQTU5MEMwMEZFQkNGMyAvKiBNZWRpYVRpbWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFRjYxRDBBNTkwQzAwRkVCQ0YzIC8qIE1ldGFBbGxvY2F0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFRkUxRDBBNTkwQzAwRkVCQ0YzIC8qIE5h
a2VkUHRyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0Q1NEYzMUYzMzhDMzYwMEE5N0FBNyAv
KiBOZXZlckRlc3Ryb3llZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjMwQ0I1QzFGQ0UxNzk2
MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
N0M4M0RGMDExRDBBNTkwQzAwRkVCQ0YzIC8qIE9wdGlvbmFsLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTFBNzdCQUEzMUQ5QUZGRkMwMDVGQzU2OCAvKiBPcHRpb25TZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0M4M0RGMDIxRDBBNTkwQzAwRkVCQ0YzIC8qIE9TT2JqZWN0UHRyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTdDODNERjU5MUQwQTU5MEMwMEZFQkNGMyAvKiBQYXJraW5nTG90LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZFMDVGQUVGMUZFMDY0NUIwMDA5MzIzMCAvKiBQb2lzb25l
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1M0VDMjU0MTFFOTZGRDg3MDAwODMxQjkgLyogUHJp
b3JpdHlRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYxMzFEMEE1OTBDMDBGRUJD
RjMgLyogUmVkQmxhY2tUcmVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjE0MUQwQTU5
MEMwMEZFQkNGMyAvKiBSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMjE3LDcgKzMyMTQsNiBA
QAogCQkJCTdDODNERjA1MUQwQTU5MEMwMEZFQkNGMyAvKiBSdW5Mb29wLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDODNERjI2MUQwQTU5MEMwMEZFQkNGMyAvKiBTYXR1cmF0ZWRBcml0aG1ldGlj
T3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTM1MjRBRTFENjNBNEZCMDAzMTcy
OUIgLyogU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkUwNUZBRUYxRkUwNjQ1QjAwMDkz
MjMwIC8qIFBvaXNvbmVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjEyMUQwQTU5MEMw
MEZFQkNGMyAvKiBTY29wZWRMYW1iZGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGM0Qx
RDBBNTkwQzAwRkVCQ0YzIC8qIFNldEZvclNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdD
ODNERjJBMUQwQTU5MEMwMEZFQkNGMyAvKiBTSEExLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvVXNlck1lZGlhLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L1VzZXJNZWRpYS5jcHAKaW5kZXggMzYzYjc1
MzM4MWY0OGVjYmQxNjEyYWJlODQ4ODFjYTZiMjdmMzFhZS4uNjQ2MDNmYTk5NzA4ZWMxMzE3ZDFm
ZjkwNmNhODU0NWVjNWU0OWJhMyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQvVXNlck1lZGlhLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdC9Vc2VyTWVkaWEuY3BwCkBAIC04MiwxMiArODIsMTIgQEAgVEVTVChXZWJLaXQsIFVzZXJN
ZWRpYUJhc2ljKQogICAgIHVpQ2xpZW50LmJhc2UudmVyc2lvbiA9IDY7CiAgICAgdWlDbGllbnQu
ZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QgPSBkZWNpZGVQb2xpY3lG
b3JVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENhbGxCYWNrOwogICAgIHVpQ2xpZW50LmNoZWNr
VXNlck1lZGlhUGVybWlzc2lvbkZvck9yaWdpbiA9IGNoZWNrVXNlck1lZGlhUGVybWlzc2lvbkNh
bGxiYWNrOwotICAgIAorCiAgICAgUGxhdGZvcm1XZWJWaWV3IHdlYlZpZXcoY29udGV4dC5nZXQo
KSwgcGFnZUdyb3VwLmdldCgpKTsKICAgICBXS1BhZ2VTZXRQYWdlVUlDbGllbnQod2ViVmlldy5w
YWdlKCksICZ1aUNsaWVudC5iYXNlKTsKIAogICAgIHdhc1Byb21wdGVkID0gZmFsc2U7Ci0gICAg
YXV0byB1cmwgPSBhZG9wdFdLKFV0aWw6OmNyZWF0ZVVSTEZvclJlc291cmNlKCJnZXRVc2VyTWVk
aWEiLCAiaHRtbCIpKTsKKyAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImh0dHA6Ly9sb2NhbGhvc3Q6ODgwMC9XZWJLaXQvQVBJVGVzdHMvZ2V0VXNlck1l
ZGlhLmh0bWwiKSk7CiAgICAgQVNTRVJUKHVybC5nZXQoKSk7CiAKICAgICBXS1BhZ2VMb2FkVVJM
KHdlYlZpZXcucGFnZSgpLCB1cmwuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQvZ2V0VXNlck1lZGlhLmh0bWwgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdC9nZXRVc2VyTWVkaWEuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNzNmNzFiOTEyM2I4NzE4ZDAyMzAxYzI1NmQzMmJhNjY1NjNhODUyNy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdC9nZXRVc2VyTWVkaWEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICsw
LDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci0gICAgPGhlYWQ+Ci0gICAgICAgIDxzY3Jp
cHQ+Ci0KLSAgICAgICAgICAgIGxldCBzdHJlYW0gPSBudWxsOwotCi0gICAgICAgICAgICBmdW5j
dGlvbiBwcm9tcHRGb3JDYXB0dXJlKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBu
YXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IGF1ZGlvOiBmYWxzZSwgdmlkZW86
IHRydWUgfSkKLSAgICAgICAgICAgICAgICAudGhlbigocykgPT4gewotICAgICAgICAgICAgICAg
ICAgICAgIHN0cmVhbSA9IHM7Ci0gICAgICAgICAgICAgICAgICAgICAgdmlkZW8uc3JjT2JqZWN0
ID0gc3RyZWFtOwotICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJHb3QgdXNlciBt
ZWRpYSIpOwotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgLmNhdGNoKChlcnJv
cikgPT4gY29uc29sZS5sb2coYEZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfWApKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZnVuY3Rpb24gc3RvcChraW5kKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGxldCBhY3RpdmVUcmFja3MgPSBbXTsKLSAgICAgICAgICAgICAg
ICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICgha2luZCB8fCB0cmFjay5raW5kID09IGtpbmQpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0cmFjay5zdG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFjdGl2ZVRyYWNrcy5wdXNoKHRyYWNrKTsKLSAgICAgICAgICAgICAgICB9
KTsKLQotICAgICAgICAgICAgICAgIGlmICghYWN0aXZlVHJhY2tzLmxlbmd0aCkgewotICAgICAg
ICAgICAgICAgICAgICBzdHJlYW0gPSBudWxsOwotICAgICAgICAgICAgICAgICAgICB2aWRlby5z
cmNPYmplY3QgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZnVuY3Rpb24gaGF2ZVN0cmVhbSgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHN0cmVhbSAhPT0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgPC9z
Y3JpcHQ+Ci0gICAgPGhlYWQ+Ci0KLSAgICA8Ym9keSBvbmxvYWQ9InByb21wdEZvckNhcHR1cmUo
KSI+Ci0gICAgICAgIDx2aWRlbyBpZD0idmlkZW8iIGNvbnRyb2xzPjwvdmlkZW8+Ci0gICAgICAg
IDxwPgotICAgICAgICA8YnV0dG9uIG9uY2xpY2s9InN0b3AoKSI+U3RvcDwvYnV0dG9uPgotICAg
ICAgICA8L3A+Ci0gICAgPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGVlZDI5NGZmY2I4ZDYxYTcx
NGQ3YTVkM2M2YTJlZTViNDA1OTY0MzYuLjY3YWEzMzU2YWQxYmQ4Mzk5MjVjZmJkNTFiZTQzMzEz
Y2I1ODZlYTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNy0xMi0xNyAgWW91ZW5uIEZhYmxl
dCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgQWxsb3cgcnVuLWFwaS10ZXN0cyB0byBz
dGFydC9zdG9wIGxheW91dCB0ZXN0cyBzZXJ2ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6IFNraXBwaW5nIGh0dHAv
d3B0L0FQSVRlc3RzIGZvbGRlci4KKyAgICAgICAgKiBodHRwL3dwdC9BUElUZXN0cy9nZXRVc2Vy
TWVkaWEuaHRtbDogUmVuYW1lZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
L2dldFVzZXJNZWRpYS5odG1sLgorCiAyMDE3LTEyLTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgQWRkIG9wdGltaXphdGlvbiB3aGVuIHVwZGF0aW5nIGEgU1cg
cmVnaXN0cmF0aW9uIHJlc3VsdHMgaW4gdGhlIGV4YWN0IHNhbWUgc2NyaXB0CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0
aW9ucwppbmRleCAxNTcyZDIyZTRiOTM1ZDdmZmY0NWQxYzEwY2MyNDI3M2UzNzdlNzFjLi41MDlh
NzkzNGRlZDg2NjhlODhjNTlhZTlkMTlkMTEzMzcxMjBjMTFhIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMK
QEAgLTQxLDYgKzQxLDggQEAgZmFzdC9jc3MvdmFyaWFibGVzL2Vudi9pb3MgWyBTa2lwIF0KIGh0
dHAvdGVzdHMvcHJlbG9hZC92aWV3cG9ydCBbIFNraXAgXQogaHR0cC90ZXN0cy9nemlwLWNvbnRl
bnQtZW5jb2RpbmcgWyBTa2lwIF0KIAoraHR0cC93cHQvQVBJVGVzdHMgWyBTa2lwIF0KKwogIyB3
aW5kb3cuc2hvd01vZGFsRGlhbG9nIGlzIG9ubHkgdGVzdGVkIGluIER1bXBSZW5kZXJUcmVlIG9u
IE1hYy4KIGVkaXRpbmcvZXhlY0NvbW1hbmQvc2hvdy1tb2RhbC1kaWFsb2ctZHVyaW5nLWV4ZWND
b21tYW5kLmh0bWwgWyBTa2lwIF0KIGh0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mtb3JpZ2luLW1v
ZGFsLWRpYWxvZy1iYXNlLmh0bWwgWyBTa2lwIF0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0
dHAvd3B0L0FQSVRlc3RzL2dldFVzZXJNZWRpYS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC93cHQv
QVBJVGVzdHMvZ2V0VXNlck1lZGlhLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzNmNzFiOTEyM2I4NzE4ZDAy
MzAxYzI1NmQzMmJhNjY1NjNhODUyNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0
dHAvd3B0L0FQSVRlc3RzL2dldFVzZXJNZWRpYS5odG1sCkBAIC0wLDAgKzEsNDggQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDxzY3JpcHQ+CisKKyAgICAg
ICAgICAgIGxldCBzdHJlYW0gPSBudWxsOworCisgICAgICAgICAgICBmdW5jdGlvbiBwcm9tcHRG
b3JDYXB0dXJlKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuYXZpZ2F0b3IubWVk
aWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IGF1ZGlvOiBmYWxzZSwgdmlkZW86IHRydWUgfSkKKyAg
ICAgICAgICAgICAgICAudGhlbigocykgPT4geworICAgICAgICAgICAgICAgICAgICAgIHN0cmVh
bSA9IHM7CisgICAgICAgICAgICAgICAgICAgICAgdmlkZW8uc3JjT2JqZWN0ID0gc3RyZWFtOwor
ICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJHb3QgdXNlciBtZWRpYSIpOworICAg
ICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gY29uc29s
ZS5sb2coYEZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfWApKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZnVuY3Rpb24gc3RvcChraW5kKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGxldCBhY3RpdmVUcmFja3MgPSBbXTsKKyAgICAgICAgICAgICAgICBzdHJlYW0uZ2V0
VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7CisgICAgICAgICAgICAgICAgICAgIGlmICgha2lu
ZCB8fCB0cmFjay5raW5kID09IGtpbmQpCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5z
dG9wKCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFjdGl2ZVRyYWNrcy5wdXNoKHRyYWNrKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgICAgIGlmICghYWN0aXZlVHJhY2tzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAg
ICBzdHJlYW0gPSBudWxsOworICAgICAgICAgICAgICAgICAgICB2aWRlby5zcmNPYmplY3QgPSBu
dWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVu
Y3Rpb24gaGF2ZVN0cmVhbSgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0cmVhbSAhPT0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgPC9zY3JpcHQ+CisgICAg
PGhlYWQ+CisKKyAgICA8Ym9keSBvbmxvYWQ9InByb21wdEZvckNhcHR1cmUoKSI+CisgICAgICAg
IDx2aWRlbyBpZD0idmlkZW8iIGNvbnRyb2xzPjwvdmlkZW8+CisgICAgICAgIDxwPgorICAgICAg
ICA8YnV0dG9uIG9uY2xpY2s9InN0b3AoKSI+U3RvcDwvYnV0dG9uPgorICAgICAgICA8L3A+Cisg
ICAgPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329605</attachid>
            <date>2017-12-17 10:02:32 -0800</date>
            <delta_ts>2017-12-18 12:48:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180915-20171217100231.patch</filename>
            <type>text/plain</type>
            <size>42589</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2MDEwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggN2Q4MmJlM2E5OWRmNGU3NGI1N2U0MTY4ZDE3MzkzNjA0
ODA1OTRhOC4uYWQ0Mjc1ZWI4ZjRhM2ZjODUzMzIxY2FjMmJmNjZiZjIwZjQ3OGMwZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIw
IEBACisyMDE3LTEyLTE3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAg
ICAgICBBbGxvdyBydW4tYXBpLXRlc3RzIHRvIHN0YXJ0L3N0b3AgbGF5b3V0IHRlc3RzIHNlcnZl
cnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDkx
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmVk
IHBlcmwgcnVuLWFwaS10ZXN0cyB0byBhcGktdGVzdHMtcnVubmVyLgorICAgICAgICBBZGRlZCBh
IHB5dGhvbiB3cmFwcGVyIGFyb3VuZCBpdCB0byBjb250cm9sIHN0YXJ0L3N0b3Agb2YgSFRUUC9X
UyBzZXJ2ZXJzLgorICAgICAgICBUZXN0ZWQgYnkgY2hhbmdpbmcgYSBVc2VyTWVkaWEgYXBpIHRl
c3QgdG8gbG9hZCBhIGdldFVzZXJNZWRpYS5odG1sIGZpbGUgdGhyb3VnaCBXUFQgc2VydmVyLgor
CisgICAgICAgICogU2NyaXB0cy9hcGktdGVzdHMtcnVubmVyOiBDb3BpZWQgZnJvbSBUb29scy9T
Y3JpcHRzL3J1bi1hcGktdGVzdHMuCisgICAgICAgICogU2NyaXB0cy9ydW4tYXBpLXRlc3RzOiBB
ZGRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9Vc2Vy
TWVkaWEuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTctMTItMTYg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIHNjcmlw
dCB0byBhdXRvbWF0ZSBXM2Mgd2ViLXBsYXRmb3JtLXRlc3RzIHB1bGwgcmVxdWVzdCBjcmVhdGlv
bnMgZnJvbSBXZWJLaXQgY29tbWl0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9hcGktdGVz
dHMtcnVubmVyIGIvVG9vbHMvU2NyaXB0cy9hcGktdGVzdHMtcnVubmVyCm5ldyBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVj
MTAxZmRiYmY3MWVlN2M1MDA3NTlhZTZlMzJkNWU4MTkwNDBiMjEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9TY3JpcHRzL2FwaS10ZXN0cy1ydW5uZXIKQEAgLTAsMCArMSw0NDAgQEAKKyMhL3Vz
ci9iaW4vcGVybCAtdworCisjIENvcHlyaWdodCAoQykgMjAxMC0yMDEyLCAyMDE0LTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
IyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIEZpbGU6OkJh
c2VuYW1lOwordXNlIEZpbGU6OlNwZWM7Cit1c2UgRmluZEJpbjsKK3VzZSBHZXRvcHQ6Okxvbmcg
cXcoOmNvbmZpZyBwYXNzX3Rocm91Z2gpOwordXNlIElQQzo6T3BlbjM7Cit1c2UgSlNPTjo6UFA7
Cit1c2UgbGliICRGaW5kQmluOjpCaW47Cit1c2Ugc2lndHJhcCBxdyhkaWUgbm9ybWFsLXNpZ25h
bHMpOwordXNlIHdlYmtpdGRpcnM7Cit1c2UgVkNTVXRpbHM7CisKK3N1YiBidWlsZFRlc3RUb29s
KCk7CitzdWIgZHVtcFRlc3RzQnlTdWl0ZShcQCk7CitzdWIgbGlzdEFsbFRlc3RzKCk7CitzdWIg
cnVuVGVzdCgkJCk7CitzdWIgcnVuVGVzdHNCeVN1aXRlKFxAKTsKK3N1YiBwcmVwYXJlRW52aXJv
bm1lbnRGb3JSdW5uaW5nVGVzdFRvb2woKTsKK3N1YiBhcmNoQ29tbWFuZExpbmVBcmd1bWVudHNG
b3JSZXN0cmljdGVkRW52aXJvbm1lbnRWYXJpYWJsZXMoKTsKK3N1YiB0ZXN0VG9vbFBhdGhzKCk7
CitzdWIgd3JpdGVKU09ORGF0YUlmQXBwbGljYWJsZSgpOworCisjIERlZmluZWQgaW4gVkNTVXRp
bHMuCitzdWIgcG9zc2libHlDb2xvcmVkKCQkKTsKKworIyBUaW1lb3V0IGZvciBpbmRpdmlkdWFs
IHRlc3QsIGluIHNlYworbXkgJHRpbWVvdXQgPSAzMDsKKworbXkgJHNob3dIZWxwID0gMDsKK215
ICR2ZXJib3NlID0gMDsKK215ICRzaG93TGVha3MgPSAwOworbXkgJGR1bXBUZXN0cyA9IDA7Citt
eSAkZGlzYWJsZVRpbWVvdXQgPSAwOworbXkgJGJ1aWxkID0gMTsKK215ICRyb290OworbXkgJGJ1
aWxkRGVmYXVsdCA9ICRidWlsZCA/ICJidWlsZCIgOiAiZG8gbm90IGJ1aWxkIjsKK215IEB0ZXN0
c0ZhaWxlZDsKK215IEB0ZXN0c1RpbWVkT3V0OworbXkgJHd0Zk9ubHkgPSAwOworbXkgJXRlc3RU
b1Rvb2xNYXA7CitteSAlanNvbkRhdGEgPSAoKTsKK215ICRqc29uRmlsZU5hbWU7CisKKworbXkg
JHByb2dyYW1OYW1lID0gYmFzZW5hbWUoJDApOworbXkgJHVzYWdlID0gPDxFT0Y7CitVc2FnZTog
JHByb2dyYW1OYW1lIFtvcHRpb25zXSBbc3VpdGUgb3IgdGVzdCBwcmVmaXhlc10KKyAgLS1oZWxw
ICAgICAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwIG1lc3NhZ2UKKyAgLXZ8LS12ZXJib3NlICAg
ICAgICAgIFZlcmJvc2Ugb3V0cHV0CisgIC1kfC0tZHVtcC10ZXN0cyAgICAgICBEdW1wIHRoZSBu
YW1lcyBvZiB0ZXN0Y2FzZXMgd2l0aG91dCBydW5uaW5nIHRoZW0KKyAgLS1bbm8tXWJ1aWxkICAg
ICAgICAgIEJ1aWxkIChvciBkbyBub3QgYnVpbGQpIHVuaXQgdGVzdHMgcHJpb3IgdG8gcnVubmlu
ZyAoZGVmYXVsdDogJGJ1aWxkRGVmYXVsdCkKKyAgLS1qc29uLW91dHB1dD0gICAgICAgIENyZWF0
ZSBhIGZpbGUgYXQgdGhlIHNwZWNpZmllZCBwYXRoLCBsaXN0aW5nIHRlc3QgZmFpbHVyZXMgYW5k
IHRpbWVvdXRzIGluIEpTT04gZm9ybWF0LgorICAtLXJvb3Q9ICAgICAgICAgICAgICAgUGF0aCB0
byB0aGUgcHJlLWJ1aWx0IHJvb3QgY29udGFpbmluZyBUZXN0V2ViS2l0QVBJCisgIC0tc2hvdy1s
ZWFrcyAgICAgICAgICBTaG93IGxlYWtzIGluIHRoZSBvdXRwdXQKKyAgLS1uby10aW1lb3V0ICAg
ICAgICAgIERpc2FibGUgdGVzdCB0aW1lb3V0cworICAtLXd0Zi1vbmx5ICAgICAgICAgICAgT25s
eSBidWlsZCBhbmQgcnVuIFRlc3RXVEYKKworUGxhdGZvcm0gb3B0aW9uczoKKyAgLS1pb3Mtc2lt
dWxhdG9yICAgICAgIFJ1biB0ZXN0cyBpbiB0aGUgaU9TIFNpbXVsYXRvcgorICAtLXNpbXVsYXRv
ciAgICAgICAgICAgREVQUkVDQVRFRCBhbGlhcyBvZiAtLWlvcy1zaW11bGF0b3IKKworQHtbIHNo
YXJlZENvbW1hbmRMaW5lT3B0aW9uc1VzYWdlKGluZGVudCA9PiAyLCBzd2l0Y2hXaWR0aCA9PiAy
MSkgXX0KK0V4YW1wbGVzCisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZCB3aWxsIHJ1biBhIHNpbmds
ZSB0ZXN0OgorICAgICRwcm9ncmFtTmFtZSBXZWJLaXQuQWJvdXRCbGFuaworCitUaGUgZm9sbG93
aW5nIGNvbW1hbmQgd2lsbCBydW4gYWxsIHRlc3RzIGluIHN1aXRlcyB0aGF0IGJlZ2luIHdpdGgg
J1dlYktpdCc6CisgICAgJHByb2dyYW1OYW1lIFdlYktpdAorCitFT0YKKworbXkgJGdldE9wdGlv
bnNSZXN1bHQgPSBHZXRPcHRpb25zKAorICAgIHNoYXJlZENvbW1hbmRMaW5lT3B0aW9ucygpLAor
ICAgICdoZWxwJyA9PiBcJHNob3dIZWxwLAorICAgICd2ZXJib3NlfHYnID0+IFwkdmVyYm9zZSwK
KyAgICAnc2hvdy1sZWFrcycgPT4gXCRzaG93TGVha3MsCisgICAgJ25vLXRpbWVvdXQnID0+IFwk
ZGlzYWJsZVRpbWVvdXQsCisgICAgJ2pzb24tb3V0cHV0PXMnID0+IFwkanNvbkZpbGVOYW1lLAor
ICAgICdkdW1wfGQnID0+IFwkZHVtcFRlc3RzLAorICAgICdidWlsZCEnID0+IFwkYnVpbGQsCisg
ICAgJ3Jvb3Q9cycgPT4gXCRyb290LAorICAgICd3dGYtb25seScgPT4gXCR3dGZPbmx5LAorKTsK
KworaWYgKCEkZ2V0T3B0aW9uc1Jlc3VsdCB8fCAkc2hvd0hlbHApIHsKKyAgIHByaW50IFNUREVS
UiAkdXNhZ2U7CisgICBleGl0IDE7Cit9CisKK3NldENvbmZpZ3VyYXRpb24oKTsKKworc2V0Q29u
ZmlndXJhdGlvblByb2R1Y3REaXIoQ3dkOjphYnNfcGF0aCgkcm9vdCkpIGlmIChkZWZpbmVkKCRy
b290KSk7CisKK2lmIChkZWZpbmVkKCRqc29uRmlsZU5hbWUpKSB7CisgICAgJGpzb25GaWxlTmFt
ZSA9IEZpbGU6OlNwZWMtPnJlbDJhYnMoJGpzb25GaWxlTmFtZSk7Cit9CisKK2J1aWxkVGVzdFRv
b2woKSBpZiAkYnVpbGQgJiYgIWRlZmluZWQoJHJvb3QpOworc2V0UGF0aEZvclJ1bm5pbmdXZWJL
aXRBcHAoXCVFTlYpOworCitteSAkc2ltdWxhdG9yRGV2aWNlOworaWYgKHdpbGxVc2VJT1NTaW11
bGF0b3JTREsoKSkgeworICAgICRzaW11bGF0b3JEZXZpY2UgPSBmaW5kT3JDcmVhdGVTaW11bGF0
b3JGb3JJT1NEZXZpY2UoU0lNVUxBVE9SX0RFVklDRV9TVUZGSVhfRk9SX1dFQktJVF9ERVZFTE9Q
TUVOVCk7CisgICAgcmVsYXVuY2hJT1NTaW11bGF0b3IoJHNpbXVsYXRvckRldmljZSk7Cit9Citt
eSBAdGVzdHNUb1J1biA9IGxpc3RBbGxUZXN0cygpOworCitAdGVzdHNUb1J1biA9IGdyZXAgeyBt
eSAkdGVzdCA9ICRfOyBncmVwIHsgJHRlc3QgPX4gbS9eXFEkX1xFLyB9IEBBUkdWOyB9IEB0ZXN0
c1RvUnVuIGlmIEBBUkdWOworCitpZiAoJGR1bXBUZXN0cykgeworICAgIGR1bXBUZXN0c0J5U3Vp
dGUoQHRlc3RzVG9SdW4pOworICAgIGV4aXQgMDsKK30KKworRU5EIHsgc2h1dERvd25JT1NTaW11
bGF0b3JEZXZpY2UoJHNpbXVsYXRvckRldmljZSkgaWYgJHNpbXVsYXRvckRldmljZTsgfQorCitl
eGl0IHJ1blRlc3RzQnlTdWl0ZShAdGVzdHNUb1J1bik7CisKK3N1YiBpc1N1cHBvcnRlZFBsYXRm
b3JtKCkKK3sKKyAgICByZXR1cm4gaXNBcHBsZUNvY29hV2ViS2l0KCkgfHwgaXNBcHBsZVdpbldl
YktpdCgpOworfQorCitzdWIgZHVtcFRlc3RzQnlTdWl0ZShcQCkKK3sKKyAgICBteSAoJHRlc3Rz
KSA9IEBfOworICAgIHByaW50ICJEdW1waW5nIHRlc3QgY2FzZXNcbiI7CisgICAgcHJpbnQgIi0t
LS0tLS0tLS0tLS0tLS0tLVxuIjsKKyAgICBteSAkbGFzdFN1aXRlID0gIiI7CisgICAgZm9yIG15
ICRzdWl0ZUFuZFRlc3QgKHNvcnQgQCR0ZXN0cykgeworICAgICAgICBteSAoJHN1aXRlLCAkdGVz
dCkgPSBzcGxpdCgvXC4vLCAkc3VpdGVBbmRUZXN0KTsKKyAgICAgICAgaWYgKCRsYXN0U3VpdGUg
bmUgJHN1aXRlKSB7CisgICAgICAgICAgICAkbGFzdFN1aXRlID0gJHN1aXRlOworICAgICAgICAg
ICAgcHJpbnQgIiRzdWl0ZTpcbiI7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgIiAgICR0ZXN0
XG4iOworICAgIH0KKyAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tXG4iOworfQorCitzdWIg
cnVuVGVzdHNCeVN1aXRlKFxAKQoreworICAgIG15ICgkdGVzdHMpID0gQF87CisgICAgZm9yIG15
ICRzdWl0ZUFuZFRlc3QgKHNvcnQgQCR0ZXN0cykgeworICAgICAgICBteSAoJHN1aXRlLCAkdGVz
dCkgPSBzcGxpdCgvXC4vLCAkc3VpdGVBbmRUZXN0KTsKKyAgICAgICAgcnVuVGVzdCgkc3VpdGUs
ICR0ZXN0KTsKKyAgICB9CisKKyAgICBpZiAoQHRlc3RzRmFpbGVkKSB7CisgICAgICAgIHByaW50
ICJcblRlc3RzIHRoYXQgZmFpbGVkOlxuIjsKKyAgICAgICAgZm9yIG15ICR0ZXN0IChAdGVzdHNG
YWlsZWQpIHsKKyAgICAgICAgICAgIHByaW50ICIgICR0ZXN0XG4iOworICAgICAgICB9CisgICAg
fQorICAgIGlmIChAdGVzdHNUaW1lZE91dCkgeworICAgICAgICBwcmludCAiXG5UZXN0cyB0aGF0
IHRpbWVkIG91dDpcbiI7CisgICAgICAgIGZvciBteSAkdGVzdCAoQHRlc3RzVGltZWRPdXQpIHsK
KyAgICAgICAgICAgIHByaW50ICIgICR0ZXN0XG4iOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKGRlZmluZWQoJGpzb25GaWxlTmFtZSkpIHsKKyAgICAgICAgJGpzb25EYXRheydmYWlsdXJl
cyd9ID0gXEB0ZXN0c0ZhaWxlZDsKKyAgICAgICAgJGpzb25EYXRheyd0aW1lb3V0cyd9ID0gXEB0
ZXN0c1RpbWVkT3V0OworICAgIH0KKworICAgIHdyaXRlSlNPTkRhdGFJZkFwcGxpY2FibGUoKTsK
KworICAgIHJldHVybiBAdGVzdHNGYWlsZWQgPiAwIHx8IEB0ZXN0c1RpbWVkT3V0ID4gMDsKK30K
Kworc3ViIHJ1blRlc3QoJCQpCit7CisgICAgbXkgKCRzdWl0ZSwgJHRlc3ROYW1lKSA9IEBfOwor
ICAgIG15ICR0ZXN0ID0gJHN1aXRlIC4gIi4iIC4gJHRlc3ROYW1lOworCisgICAgbXkgJGd0ZXN0
QXJnID0gIi0tZ3Rlc3RfZmlsdGVyPSIgLiAkdGVzdDsKKworICAgIG15ICRyZXN1bHQgPSAwOwor
ICAgIG15ICR0aW1lZE91dCA9IDA7CisKKyAgICBkaWUgInJ1bi1hcGktdGVzdHMgaXMgbm90IHN1
cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLlxuIiB1bmxlc3MgaXNTdXBwb3J0ZWRQbGF0Zm9ybSgp
OworCisgICAgbG9jYWwgJUVOViA9ICVFTlY7CisgICAgcHJlcGFyZUVudmlyb25tZW50Rm9yUnVu
bmluZ1Rlc3RUb29sKCk7CisKKyAgICBsb2NhbCAqREVWTlVMTDsKKyAgICBteSAoJGNoaWxkSW4s
ICRjaGlsZE91dCwgJGNoaWxkRXJyKTsKKyAgICBpZiAoJHZlcmJvc2UgfHwgJHNob3dMZWFrcykg
eworICAgICAgICAkY2hpbGRFcnIgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIG9wZW4oREVW
TlVMTCwgIj4iLCBGaWxlOjpTcGVjLT5kZXZudWxsKCkpIG9yIGRpZSAiRmFpbGVkIHRvIG9wZW4g
L2Rldi9udWxsIjsKKyAgICAgICAgJGNoaWxkRXJyID0gIj4mREVWTlVMTCI7CisgICAgfQorCisg
ICAgbXkgJHBpZDsKKyAgICBteSBAY29tbW9uQXJndW1lbnRzID0gKCR0ZXN0VG9Ub29sTWFweyR0
ZXN0fSwgJGd0ZXN0QXJnLCBAQVJHVik7CisgICAgaWYgKHdpbGxVc2VJT1NTaW11bGF0b3JTREso
KSkgeworICAgICAgICAkcGlkID0gb3BlbjMoJGNoaWxkSW4sICRjaGlsZE91dCwgJGNoaWxkRXJy
LCBxdyh4Y3J1biAtLXNkayBpcGhvbmVzaW11bGF0b3Igc2ltY3RsIHNwYXduKSwgJHNpbXVsYXRv
ckRldmljZS0+e1VESUR9LCBAY29tbW9uQXJndW1lbnRzKSBvciBkaWUgIkZhaWxlZCB0byBydW4g
dGVzdDogJHRlc3QuIjsKKyAgICB9IGVsc2lmIChpc0FwcGxlQ29jb2FXZWJLaXQoKSAmJiBhcmNo
aXRlY3R1cmUoKSkgeworICAgICAgICAkcGlkID0gb3BlbjMoJGNoaWxkSW4sICRjaGlsZE91dCwg
JGNoaWxkRXJyLCAiYXJjaCIsICItIiAuIGFyY2hpdGVjdHVyZSgpLCBhcmNoQ29tbWFuZExpbmVB
cmd1bWVudHNGb3JSZXN0cmljdGVkRW52aXJvbm1lbnRWYXJpYWJsZXMoKSwgQGNvbW1vbkFyZ3Vt
ZW50cykgb3IgZGllICJGYWlsZWQgdG8gcnVuIHRlc3Q6ICR0ZXN0LiI7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgJHBpZCA9IG9wZW4zKCRjaGlsZEluLCAkY2hpbGRPdXQsICRjaGlsZEVyciwgQGNv
bW1vbkFyZ3VtZW50cykgb3IgZGllICJGYWlsZWQgdG8gcnVuIHRlc3Q6ICR0ZXN0LiI7CisgICAg
fQorCisgICAgZXZhbCB7CisgICAgICAgIGlmICgkZGlzYWJsZVRpbWVvdXQpIHsKKyAgICAgICAg
ICAgIHdhaXRwaWQoJHBpZCwgMCk7ICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
bG9jYWwgJFNJR3tBTFJNfSA9IHN1YiB7IGRpZSAiYWxhcm1cbiIgfTsKKyAgICAgICAgICAgIGFs
YXJtICR0aW1lb3V0OworICAgICAgICAgICAgd2FpdHBpZCgkcGlkLCAwKTsKKyAgICAgICAgICAg
IGFsYXJtIDA7CisgICAgICAgIH0KKyAgICAgICAgJHJlc3VsdCA9ICQ/OworICAgIH07CisgICAg
aWYgKCRAKSB7CisgICAgICAgIGRpZSB1bmxlc3MgJEAgZXEgImFsYXJtXG4iOworICAgICAgICBr
aWxsIFNJR1RFUk0sICRwaWQgb3Iga2lsbCBTSUdLSUxMLCAkcGlkOworICAgICAgICAkdGltZWRP
dXQgPSAxOworICAgIH0KKworICAgIG15IEB0ZXN0T3V0cHV0ID0gPCRjaGlsZE91dD47CisgICAg
QHRlc3RPdXRwdXQgPSBncmVwIHsgIS9eTEVBSzovIH0gQHRlc3RPdXRwdXQgdW5sZXNzICRzaG93
TGVha3M7CisgICAgbWFwIHsgcy9cKlwqUEFTU1wqXCovcG9zc2libHlDb2xvcmVkKCJib2xkIGdy
ZWVuIiwgIlBBU1MiKS9lZyB9IEB0ZXN0T3V0cHV0OworICAgIG1hcCB7IHMvXCpcKkZBSUxcKlwq
L3Bvc3NpYmx5Q29sb3JlZCgiYm9sZCByZWQiLCAiRkFJTCIpL2VnIH0gQHRlc3RPdXRwdXQ7CisK
KyAgICBpZiAoJHJlc3VsdCkgeworICAgICAgICBwdXNoIEB0ZXN0c0ZhaWxlZCwgJHRlc3Q7Cisg
ICAgICAgIGlmICghJHRpbWVkT3V0ICYmIGluZGV4KCJAdGVzdE91dHB1dCIsICR0ZXN0KSA9PSAt
MSkgeworICAgICAgICAgICAgcHJpbnQgU1RET1VUIHBvc3NpYmx5Q29sb3JlZCgiYm9sZCByZWQi
LCAiVU5FWFBFQ1RFRExZIEVYSVRFRCIpLCAiICR0ZXN0XG4iOworICAgICAgICB9CisgICAgfSBl
bHNpZiAoJHRpbWVkT3V0KSB7CisgICAgICAgIHB1c2ggQHRlc3RzVGltZWRPdXQsICR0ZXN0Owor
ICAgICAgICBwcmludCBTVERPVVQgcG9zc2libHlDb2xvcmVkKCJib2xkIHllbGxvdyIsICJUSU1F
T1VUIiksICIgJHRlc3RcbiI7CisgICAgfQorCisgICAgcHJpbnQgU1RET1VUIEB0ZXN0T3V0cHV0
OworCisgICAgY2xvc2UoJGNoaWxkSW4pOworICAgIGNsb3NlKCRjaGlsZE91dCk7CisgICAgY2xv
c2UoJGNoaWxkRXJyKSB1bmxlc3MgKCR2ZXJib3NlIHx8ICRzaG93TGVha3MpOworICAgIGNsb3Nl
KERFVk5VTEwpIHVubGVzcyAoJHZlcmJvc2UgfHwgJHNob3dMZWFrcyk7CisKKyAgICBpZiAoJHRp
bWVkT3V0IHx8ICRyZXN1bHQpIHsKKyAgICAgICAgcmV0dXJuICR0aW1lZE91dCB8fCAkcmVzdWx0
OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdWIgbGlzdEFsbFRlc3RzKCkKK3sKKyAg
ICBteSBAdG9vbE91dHB1dDsKKyAgICBteSAkdGltZWRPdXQ7CisKKyAgICBkaWUgInJ1bi1hcGkt
dGVzdHMgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLlxuIiB1bmxlc3MgaXNTdXBw
b3J0ZWRQbGF0Zm9ybSgpOworCisgICAgcHJlcGFyZUVudmlyb25tZW50Rm9yUnVubmluZ1Rlc3RU
b29sKCk7CisKKyAgICBsb2NhbCAqREVWTlVMTDsKKyAgICBteSAoJGNoaWxkSW4sICRjaGlsZE91
dCwgJGNoaWxkRXJyKTsKKyAgICBpZiAoJHZlcmJvc2UpIHsKKyAgICAgICAgJGNoaWxkRXJyID0g
Ij4mU1RERVJSIjsKKyAgICB9IGVsc2UgeworICAgICAgICBvcGVuKERFVk5VTEwsICI+IiwgRmls
ZTo6U3BlYy0+ZGV2bnVsbCgpKSBvciBkaWUgIkZhaWxlZCB0byBvcGVuIC9kZXYvbnVsbCI7Cisg
ICAgICAgICRjaGlsZEVyciA9ICI+JkRFVk5VTEwiOworICAgIH0KKworICAgIG15IEB0ZXN0cyA9
ICgpOworICAgIGZvcmVhY2ggKHRlc3RUb29sUGF0aHMoKSkgeworICAgICAgICBteSAkcGlkOwor
ICAgICAgICBteSAkdGVzdFRvb2wgPSAkXzsKKyAgICAgICAgbXkgQGNvbW1vbkFyZ3VtZW50cyA9
ICgkdGVzdFRvb2wsICItLWd0ZXN0X2xpc3RfdGVzdHMiKTsKKyAgICAgICAgaWYgKGlzSU9TV2Vi
S2l0KCkpIHsKKyAgICAgICAgICAgICRwaWQgPSBvcGVuMygkY2hpbGRJbiwgJGNoaWxkT3V0LCAk
Y2hpbGRFcnIsIHF3KHhjcnVuIC0tc2RrIGlwaG9uZXNpbXVsYXRvciBzaW1jdGwgc3Bhd24pLCAk
c2ltdWxhdG9yRGV2aWNlLT57VURJRH0sIEBjb21tb25Bcmd1bWVudHMpIG9yIGRpZSAiRmFpbGVk
IHRvIGJ1aWxkIGxpc3Qgb2YgdGVzdHMhIjsKKyAgICAgICAgfSBlbHNpZiAoaXNBcHBsZUNvY29h
V2ViS2l0KCkgJiYgYXJjaGl0ZWN0dXJlKCkpIHsKKyAgICAgICAgICAgICRwaWQgPSBvcGVuMygk
Y2hpbGRJbiwgJGNoaWxkT3V0LCAkY2hpbGRFcnIsICJhcmNoIiwgIi0iIC4gYXJjaGl0ZWN0dXJl
KCksIGFyY2hDb21tYW5kTGluZUFyZ3VtZW50c0ZvclJlc3RyaWN0ZWRFbnZpcm9ubWVudFZhcmlh
YmxlcygpLCBAY29tbW9uQXJndW1lbnRzKSBvciBkaWUgIkZhaWxlZCB0byBidWlsZCBsaXN0IG9m
IHRlc3RzISI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkcGlkID0gb3BlbjMoJGNo
aWxkSW4sICRjaGlsZE91dCwgJGNoaWxkRXJyLCBAY29tbW9uQXJndW1lbnRzKSBvciBkaWUgIkZh
aWxlZCB0byBidWlsZCBsaXN0IG9mIHRlc3RzISI7CisgICAgICAgIH0KKworICAgICAgICBjbG9z
ZSgkY2hpbGRJbik7CisgICAgICAgIEB0b29sT3V0cHV0ID0gPCRjaGlsZE91dD47CisgICAgICAg
IGNsb3NlKCRjaGlsZE91dCk7CisgICAgICAgIGNsb3NlKCRjaGlsZEVycik7CisKKyAgICAgICAg
d2FpdHBpZCgkcGlkLCAwKTsKKyAgICAgICAgbXkgJHJlc3VsdCA9ICQ/OworCisgICAgICAgIGlm
ICgkcmVzdWx0KSB7CisgICAgICAgICAgICBwcmludCBTVERFUlIgIkZhaWxlZCB0byBidWlsZCBs
aXN0IG9mIHRlc3RzIS0tXG4iOworICAgICAgICAgICAgZXhpdCBleGl0U3RhdHVzKCRyZXN1bHQp
OworICAgICAgICB9CisKKyAgICAgICAgbXkgJHN1aXRlOworICAgICAgICBmb3IgbXkgJGxpbmUg
KEB0b29sT3V0cHV0KSB7CisgICAgICAgICAgICRsaW5lID1+IHMvW1xyXG5dKiQvLzsKKyAgICAg
ICAgICAgaWYgKCRsaW5lID1+IG0vXC4kLykgeworICAgICAgICAgICAgICAkc3VpdGUgPSAkbGlu
ZTsgIyAiU3VpdGVOYW1lLiIKKyAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgJGxp
bmUgPX4gcy9eXHMqLy87ICMgIlRlc3ROYW1lIgorICAgICAgICAgICAgICBteSAkZnVsbE5hbWUg
PSAkc3VpdGUgLiAkbGluZTsgIyAiU3VpdGVOYW1lLlRlc3ROYW1lIjsKKyAgICAgICAgICAgICAg
cHVzaCBAdGVzdHMsICRmdWxsTmFtZTsKKyAgICAgICAgICAgICAgJHRlc3RUb1Rvb2xNYXB7JGZ1
bGxOYW1lfSA9ICR0ZXN0VG9vbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGNsb3NlKERFVk5VTEwpIHVubGVzcyAoJHZlcmJvc2UpOworCisgICAgcmV0dXJuIEB0ZXN0
czsKK30KKworc3ViIGJ1aWxkVGVzdFRvb2woKQoreworICAgIG15ICRvcmlnaW5hbEN3ZCA9IGdl
dGN3ZCgpOworCisgICAgY2hkaXJXZWJLaXQoKTsKKworICAgIG15ICRidWlsZFRlc3RUb29sID0g
ImJ1aWxkLWFwaS10ZXN0cyI7CisgICAgcHJpbnQgU1RERVJSICJSdW5uaW5nICRidWlsZFRlc3RU
b29sXG4iOworCisgICAgbG9jYWwgKkRFVk5VTEw7CisgICAgbXkgKCRjaGlsZEluLCAkY2hpbGRP
dXQsICRjaGlsZEVycik7CisgICAgaWYgKCR2ZXJib3NlKSB7CisgICAgICAgICMgV2hlbiBub3Qg
cXVpZXQsIGxldCB0aGUgY2hpbGQgdXNlIG91ciBzdGRvdXQvc3RkZXJyLgorICAgICAgICAkY2hp
bGRPdXQgPSAiPiZTVERPVVQiOworICAgICAgICAkY2hpbGRFcnIgPSAiPiZTVERFUlIiOworICAg
IH0gZWxzZSB7CisgICAgICAgIG9wZW4oREVWTlVMTCwgIj4iLCBGaWxlOjpTcGVjLT5kZXZudWxs
KCkpIG9yIGRpZSAiRmFpbGVkIHRvIG9wZW4gL2Rldi9udWxsIjsKKyAgICAgICAgJGNoaWxkT3V0
ID0gIj4mREVWTlVMTCI7CisgICAgICAgICRjaGlsZEVyciA9ICI+JkRFVk5VTEwiOworICAgIH0K
KworICAgIG15IEBhcmdzID0gYXJndW1lbnRzRm9yQ29uZmlndXJhdGlvbigpOworICAgIGlmICgk
d3RmT25seSkgeworICAgICAgICBwdXNoIEBhcmdzLCAiLS13dGYtb25seSI7CisgICAgfQorCisg
ICAgbXkgJHBhdGhUb0J1aWxkVGVzdFRvb2wgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCJUb29scyIs
ICJTY3JpcHRzIiwgJGJ1aWxkVGVzdFRvb2wpOworICAgIG15ICRidWlsZFByb2Nlc3MgPSBvcGVu
MygkY2hpbGRJbiwgJGNoaWxkT3V0LCAkY2hpbGRFcnIsICJwZXJsIiwgJHBhdGhUb0J1aWxkVGVz
dFRvb2wsIEBhcmdzKSBvciBkaWUgIkZhaWxlZCB0byBydW4gIiAuICRidWlsZFRlc3RUb29sOwor
CisgICAgY2xvc2UoJGNoaWxkSW4pOworICAgIGNsb3NlKCRjaGlsZE91dCk7CisgICAgY2xvc2Uo
JGNoaWxkRXJyKTsKKyAgICBjbG9zZShERVZOVUxMKSB1bmxlc3MgKCR2ZXJib3NlKTsKKworICAg
IHdhaXRwaWQoJGJ1aWxkUHJvY2VzcywgMCk7CisgICAgbXkgJGJ1aWxkUmVzdWx0ID0gJD87CisK
KyAgICBpZiAoJGJ1aWxkUmVzdWx0KSB7CisgICAgICAgIHByaW50IFNUREVSUiAiQ29tcGlsaW5n
IFRlc3RXZWJLaXRBUEkgZmFpbGVkIVxuIjsKKyAgICAgICAgZXhpdCBleGl0U3RhdHVzKCRidWls
ZFJlc3VsdCk7CisgICAgfQorCisgICAgY2hkaXIgJG9yaWdpbmFsQ3dkOworfQorCitzdWIgcHJl
cGFyZUVudmlyb25tZW50Rm9yUnVubmluZ1Rlc3RUb29sKCkKK3sKKyAgICByZXR1cm4gdW5sZXNz
IGlzQXBwbGVDb2NvYVdlYktpdCgpOworCisgICAgaWYgKHdpbGxVc2VJT1NTaW11bGF0b3JTREso
KSkgeworICAgICAgICBteSAlc2ltdWxhdG9yRU5WOworICAgICAgICB7CisgICAgICAgICAgICBs
b2NhbCAlRU5WOworICAgICAgICAgICAgc2V0dXBJT1NXZWJLaXRFbnZpcm9ubWVudChwcm9kdWN0
RGlyKCkpOworICAgICAgICAgICAgJXNpbXVsYXRvckVOViA9ICVFTlY7CisgICAgICAgIH0KKyAg
ICAgICAgIyBQcmVmaXggdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIFNJTUNUTF9DSElM
RF8gcGVyIGB4Y3J1biBzaW1jdGwgaGVscCBsYXVuY2hgLgorICAgICAgICBmb3JlYWNoIG15ICRr
ZXkgKGtleXMgJXNpbXVsYXRvckVOVikgeworICAgICAgICAgICAgJEVOVnsiU0lNQ1RMX0NISUxE
XyRrZXkifSA9ICRzaW11bGF0b3JFTlZ7JGtleX07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBzZXR1cE1hY1dlYktpdEVudmlyb25tZW50KHByb2R1Y3REaXIoKSk7Cit9
CisKK3N1YiB0ZXN0VG9vbFBhdGhzKCkKK3sKKyAgICBpZiAoIWlzQXBwbGVXaW5XZWJLaXQoKSkg
eworICAgICAgICBteSBAdG9vbFBhdGhzID0gKCk7CisgICAgICAgIGlmICghJHd0Zk9ubHkpIHsK
KyAgICAgICAgICAgIHB1c2ggQHRvb2xQYXRocywgRmlsZTo6U3BlYy0+Y2F0ZmlsZShwcm9kdWN0
RGlyKCksICJUZXN0V2ViS2l0QVBJIik7CisgICAgICAgIH0KKyAgICAgICAgcHVzaCBAdG9vbFBh
dGhzLCBGaWxlOjpTcGVjLT5jYXRmaWxlKHByb2R1Y3REaXIoKSwgIlRlc3RXVEYiKTsKKyAgICAg
ICAgcmV0dXJuIEB0b29sUGF0aHM7CisgICAgfQorCisgICAgbXkgJGJpbkRpciA9IGlzV2luNjQo
KSA/ICJiaW42NCIgOiAiYmluMzIiOworICAgIG15ICRwYXRoV1RGID0gRmlsZTo6U3BlYy0+Y2F0
ZmlsZShwcm9kdWN0RGlyKCksICRiaW5EaXIsICJUZXN0V1RGIik7CisgICAgbXkgJHBhdGhXZWJD
b3JlID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZShwcm9kdWN0RGlyKCksICRiaW5EaXIsICJUZXN0V2Vi
Q29yZSIpOworICAgIG15ICRwYXRoV2ViS2l0ID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZShwcm9kdWN0
RGlyKCksICRiaW5EaXIsICJUZXN0V2ViS2l0TGVnYWN5Iik7CisKKyAgICBteSAkc3VmZml4Owor
ICAgIGlmIChjb25maWd1cmF0aW9uKCkgZXEgIkRlYnVnX0FsbCIpIHsKKyAgICAgICAgJHN1ZmZp
eCA9ICJfZGVidWciOworICAgIH0gZWxzZSB7CisgICAgICAgICRzdWZmaXggPSAiIjsKKyAgICB9
CisgICAgcmV0dXJuICgiJHBhdGhXVEYkc3VmZml4LmV4ZSIsICIkcGF0aFdlYkNvcmUkc3VmZml4
LmV4ZSIsICIkcGF0aFdlYktpdCRzdWZmaXguZXhlIik7Cit9CisKK3N1YiB3cml0ZUpTT05EYXRh
SWZBcHBsaWNhYmxlKCkKK3sKKyAgICBpZiAoZGVmaW5lZCgkanNvbkZpbGVOYW1lKSkgeworICAg
ICAgICBvcGVuKG15ICRmaWxlSGFuZGxlciwgIj4iLCAkanNvbkZpbGVOYW1lKSBvciBkaWU7Cisg
ICAgICAgIHByaW50ICRmaWxlSGFuZGxlciAiJHtcZW5jb2RlX2pzb24oXCVqc29uRGF0YSl9XG4i
OworICAgICAgICBjbG9zZSgkZmlsZUhhbmRsZXIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvcnVuLWFwaS10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWFwaS10ZXN0cwpp
bmRleCBlYzEwMWZkYmJmNzFlZTdjNTAwNzU5YWU2ZTMyZDVlODE5MDQwYjIxLi5hODdiM2I1ZmMy
MmU3NGZiMzJiZTQwMWJkMWMxNDE4NWVjMDU4MTE0IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRz
L3J1bi1hcGktdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tYXBpLXRlc3RzCkBAIC0xLDQ0
MCArMSwxMDYgQEAKLSMhL3Vzci9iaW4vcGVybCAtdworIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAK
LSMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICMgYXJlIG1l
dDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCiAjCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0j
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi11c2Ugc3RyaWN0OwotdXNlIHdhcm5pbmdzOwotCi11c2UgRmlsZTo6QmFzZW5hbWU7Ci11
c2UgRmlsZTo6U3BlYzsKLXVzZSBGaW5kQmluOwotdXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmln
IHBhc3NfdGhyb3VnaCk7Ci11c2UgSVBDOjpPcGVuMzsKLXVzZSBKU09OOjpQUDsKLXVzZSBsaWIg
JEZpbmRCaW46OkJpbjsKLXVzZSBzaWd0cmFwIHF3KGRpZSBub3JtYWwtc2lnbmFscyk7Ci11c2Ug
d2Via2l0ZGlyczsKLXVzZSBWQ1NVdGlsczsKLQotc3ViIGJ1aWxkVGVzdFRvb2woKTsKLXN1YiBk
dW1wVGVzdHNCeVN1aXRlKFxAKTsKLXN1YiBsaXN0QWxsVGVzdHMoKTsKLXN1YiBydW5UZXN0KCQk
KTsKLXN1YiBydW5UZXN0c0J5U3VpdGUoXEApOwotc3ViIHByZXBhcmVFbnZpcm9ubWVudEZvclJ1
bm5pbmdUZXN0VG9vbCgpOwotc3ViIGFyY2hDb21tYW5kTGluZUFyZ3VtZW50c0ZvclJlc3RyaWN0
ZWRFbnZpcm9ubWVudFZhcmlhYmxlcygpOwotc3ViIHRlc3RUb29sUGF0aHMoKTsKLXN1YiB3cml0
ZUpTT05EYXRhSWZBcHBsaWNhYmxlKCk7Ci0KLSMgRGVmaW5lZCBpbiBWQ1NVdGlscy4KLXN1YiBw
b3NzaWJseUNvbG9yZWQoJCQpOwotCi0jIFRpbWVvdXQgZm9yIGluZGl2aWR1YWwgdGVzdCwgaW4g
c2VjCi1teSAkdGltZW91dCA9IDMwOwotCi1teSAkc2hvd0hlbHAgPSAwOwotbXkgJHZlcmJvc2Ug
PSAwOwotbXkgJHNob3dMZWFrcyA9IDA7Ci1teSAkZHVtcFRlc3RzID0gMDsKLW15ICRkaXNhYmxl
VGltZW91dCA9IDA7Ci1teSAkYnVpbGQgPSAxOwotbXkgJHJvb3Q7Ci1teSAkYnVpbGREZWZhdWx0
ID0gJGJ1aWxkID8gImJ1aWxkIiA6ICJkbyBub3QgYnVpbGQiOwotbXkgQHRlc3RzRmFpbGVkOwot
bXkgQHRlc3RzVGltZWRPdXQ7Ci1teSAkd3RmT25seSA9IDA7Ci1teSAldGVzdFRvVG9vbE1hcDsK
LW15ICVqc29uRGF0YSA9ICgpOwotbXkgJGpzb25GaWxlTmFtZTsKLQotCi1teSAkcHJvZ3JhbU5h
bWUgPSBiYXNlbmFtZSgkMCk7Ci1teSAkdXNhZ2UgPSA8PEVPRjsKLVVzYWdlOiAkcHJvZ3JhbU5h
bWUgW29wdGlvbnNdIFtzdWl0ZSBvciB0ZXN0IHByZWZpeGVzXQotICAtLWhlbHAgICAgICAgICAg
ICAgICAgU2hvdyB0aGlzIGhlbHAgbWVzc2FnZQotICAtdnwtLXZlcmJvc2UgICAgICAgICAgVmVy
Ym9zZSBvdXRwdXQKLSAgLWR8LS1kdW1wLXRlc3RzICAgICAgIER1bXAgdGhlIG5hbWVzIG9mIHRl
c3RjYXNlcyB3aXRob3V0IHJ1bm5pbmcgdGhlbQotICAtLVtuby1dYnVpbGQgICAgICAgICAgQnVp
bGQgKG9yIGRvIG5vdCBidWlsZCkgdW5pdCB0ZXN0cyBwcmlvciB0byBydW5uaW5nIChkZWZhdWx0
OiAkYnVpbGREZWZhdWx0KQotICAtLWpzb24tb3V0cHV0PSAgICAgICAgQ3JlYXRlIGEgZmlsZSBh
dCB0aGUgc3BlY2lmaWVkIHBhdGgsIGxpc3RpbmcgdGVzdCBmYWlsdXJlcyBhbmQgdGltZW91dHMg
aW4gSlNPTiBmb3JtYXQuCi0gIC0tcm9vdD0gICAgICAgICAgICAgICBQYXRoIHRvIHRoZSBwcmUt
YnVpbHQgcm9vdCBjb250YWluaW5nIFRlc3RXZWJLaXRBUEkKLSAgLS1zaG93LWxlYWtzICAgICAg
ICAgIFNob3cgbGVha3MgaW4gdGhlIG91dHB1dAotICAtLW5vLXRpbWVvdXQgICAgICAgICAgRGlz
YWJsZSB0ZXN0IHRpbWVvdXRzCi0gIC0td3RmLW9ubHkgICAgICAgICAgICBPbmx5IGJ1aWxkIGFu
ZCBydW4gVGVzdFdURgotCi1QbGF0Zm9ybSBvcHRpb25zOgotICAtLWlvcy1zaW11bGF0b3IgICAg
ICAgUnVuIHRlc3RzIGluIHRoZSBpT1MgU2ltdWxhdG9yCi0gIC0tc2ltdWxhdG9yICAgICAgICAg
ICBERVBSRUNBVEVEIGFsaWFzIG9mIC0taW9zLXNpbXVsYXRvcgotCi1Ae1sgc2hhcmVkQ29tbWFu
ZExpbmVPcHRpb25zVXNhZ2UoaW5kZW50ID0+IDIsIHN3aXRjaFdpZHRoID0+IDIxKSBdfQotRXhh
bXBsZXMKLQotVGhlIGZvbGxvd2luZyBjb21tYW5kIHdpbGwgcnVuIGEgc2luZ2xlIHRlc3Q6Ci0g
ICAgJHByb2dyYW1OYW1lIFdlYktpdC5BYm91dEJsYW5rCi0KLVRoZSBmb2xsb3dpbmcgY29tbWFu
ZCB3aWxsIHJ1biBhbGwgdGVzdHMgaW4gc3VpdGVzIHRoYXQgYmVnaW4gd2l0aCAnV2ViS2l0JzoK
LSAgICAkcHJvZ3JhbU5hbWUgV2ViS2l0Ci0KLUVPRgotCi1teSAkZ2V0T3B0aW9uc1Jlc3VsdCA9
IEdldE9wdGlvbnMoCi0gICAgc2hhcmVkQ29tbWFuZExpbmVPcHRpb25zKCksCi0gICAgJ2hlbHAn
ID0+IFwkc2hvd0hlbHAsCi0gICAgJ3ZlcmJvc2V8dicgPT4gXCR2ZXJib3NlLAotICAgICdzaG93
LWxlYWtzJyA9PiBcJHNob3dMZWFrcywKLSAgICAnbm8tdGltZW91dCcgPT4gXCRkaXNhYmxlVGlt
ZW91dCwKLSAgICAnanNvbi1vdXRwdXQ9cycgPT4gXCRqc29uRmlsZU5hbWUsCi0gICAgJ2R1bXB8
ZCcgPT4gXCRkdW1wVGVzdHMsCi0gICAgJ2J1aWxkIScgPT4gXCRidWlsZCwKLSAgICAncm9vdD1z
JyA9PiBcJHJvb3QsCi0gICAgJ3d0Zi1vbmx5JyA9PiBcJHd0Zk9ubHksCi0pOwotCi1pZiAoISRn
ZXRPcHRpb25zUmVzdWx0IHx8ICRzaG93SGVscCkgewotICAgcHJpbnQgU1RERVJSICR1c2FnZTsK
LSAgIGV4aXQgMTsKLX0KLQotc2V0Q29uZmlndXJhdGlvbigpOwotCi1zZXRDb25maWd1cmF0aW9u
UHJvZHVjdERpcihDd2Q6OmFic19wYXRoKCRyb290KSkgaWYgKGRlZmluZWQoJHJvb3QpKTsKLQot
aWYgKGRlZmluZWQoJGpzb25GaWxlTmFtZSkpIHsKLSAgICAkanNvbkZpbGVOYW1lID0gRmlsZTo6
U3BlYy0+cmVsMmFicygkanNvbkZpbGVOYW1lKTsKLX0KLQotYnVpbGRUZXN0VG9vbCgpIGlmICRi
dWlsZCAmJiAhZGVmaW5lZCgkcm9vdCk7Ci1zZXRQYXRoRm9yUnVubmluZ1dlYktpdEFwcChcJUVO
Vik7Ci0KLW15ICRzaW11bGF0b3JEZXZpY2U7Ci1pZiAod2lsbFVzZUlPU1NpbXVsYXRvclNESygp
KSB7Ci0gICAgJHNpbXVsYXRvckRldmljZSA9IGZpbmRPckNyZWF0ZVNpbXVsYXRvckZvcklPU0Rl
dmljZShTSU1VTEFUT1JfREVWSUNFX1NVRkZJWF9GT1JfV0VCS0lUX0RFVkVMT1BNRU5UKTsKLSAg
ICByZWxhdW5jaElPU1NpbXVsYXRvcigkc2ltdWxhdG9yRGV2aWNlKTsKLX0KLW15IEB0ZXN0c1Rv
UnVuID0gbGlzdEFsbFRlc3RzKCk7Ci0KLUB0ZXN0c1RvUnVuID0gZ3JlcCB7IG15ICR0ZXN0ID0g
JF87IGdyZXAgeyAkdGVzdCA9fiBtL15cUSRfXEUvIH0gQEFSR1Y7IH0gQHRlc3RzVG9SdW4gaWYg
QEFSR1Y7Ci0KLWlmICgkZHVtcFRlc3RzKSB7Ci0gICAgZHVtcFRlc3RzQnlTdWl0ZShAdGVzdHNU
b1J1bik7Ci0gICAgZXhpdCAwOwotfQotCi1FTkQgeyBzaHV0RG93bklPU1NpbXVsYXRvckRldmlj
ZSgkc2ltdWxhdG9yRGV2aWNlKSBpZiAkc2ltdWxhdG9yRGV2aWNlOyB9Ci0KLWV4aXQgcnVuVGVz
dHNCeVN1aXRlKEB0ZXN0c1RvUnVuKTsKLQotc3ViIGlzU3VwcG9ydGVkUGxhdGZvcm0oKQotewot
ICAgIHJldHVybiBpc0FwcGxlQ29jb2FXZWJLaXQoKSB8fCBpc0FwcGxlV2luV2ViS2l0KCk7Ci19
Ci0KLXN1YiBkdW1wVGVzdHNCeVN1aXRlKFxAKQotewotICAgIG15ICgkdGVzdHMpID0gQF87Ci0g
ICAgcHJpbnQgIkR1bXBpbmcgdGVzdCBjYXNlc1xuIjsKLSAgICBwcmludCAiLS0tLS0tLS0tLS0t
LS0tLS0tXG4iOwotICAgIG15ICRsYXN0U3VpdGUgPSAiIjsKLSAgICBmb3IgbXkgJHN1aXRlQW5k
VGVzdCAoc29ydCBAJHRlc3RzKSB7Ci0gICAgICAgIG15ICgkc3VpdGUsICR0ZXN0KSA9IHNwbGl0
KC9cLi8sICRzdWl0ZUFuZFRlc3QpOwotICAgICAgICBpZiAoJGxhc3RTdWl0ZSBuZSAkc3VpdGUp
IHsKLSAgICAgICAgICAgICRsYXN0U3VpdGUgPSAkc3VpdGU7Ci0gICAgICAgICAgICBwcmludCAi
JHN1aXRlOlxuIjsKLSAgICAgICAgfQotICAgICAgICBwcmludCAiICAgJHRlc3RcbiI7Ci0gICAg
fQotICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS1cbiI7Ci19Ci0KLXN1YiBydW5UZXN0c0J5
U3VpdGUoXEApCi17Ci0gICAgbXkgKCR0ZXN0cykgPSBAXzsKLSAgICBmb3IgbXkgJHN1aXRlQW5k
VGVzdCAoc29ydCBAJHRlc3RzKSB7Ci0gICAgICAgIG15ICgkc3VpdGUsICR0ZXN0KSA9IHNwbGl0
KC9cLi8sICRzdWl0ZUFuZFRlc3QpOwotICAgICAgICBydW5UZXN0KCRzdWl0ZSwgJHRlc3QpOwot
ICAgIH0KLQotICAgIGlmIChAdGVzdHNGYWlsZWQpIHsKLSAgICAgICAgcHJpbnQgIlxuVGVzdHMg
dGhhdCBmYWlsZWQ6XG4iOwotICAgICAgICBmb3IgbXkgJHRlc3QgKEB0ZXN0c0ZhaWxlZCkgewot
ICAgICAgICAgICAgcHJpbnQgIiAgJHRlc3RcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYg
KEB0ZXN0c1RpbWVkT3V0KSB7Ci0gICAgICAgIHByaW50ICJcblRlc3RzIHRoYXQgdGltZWQgb3V0
OlxuIjsKLSAgICAgICAgZm9yIG15ICR0ZXN0IChAdGVzdHNUaW1lZE91dCkgewotICAgICAgICAg
ICAgcHJpbnQgIiAgJHRlc3RcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZGVmaW5l
ZCgkanNvbkZpbGVOYW1lKSkgewotICAgICAgICAkanNvbkRhdGF7J2ZhaWx1cmVzJ30gPSBcQHRl
c3RzRmFpbGVkOwotICAgICAgICAkanNvbkRhdGF7J3RpbWVvdXRzJ30gPSBcQHRlc3RzVGltZWRP
dXQ7Ci0gICAgfQotCi0gICAgd3JpdGVKU09ORGF0YUlmQXBwbGljYWJsZSgpOwotCi0gICAgcmV0
dXJuIEB0ZXN0c0ZhaWxlZCA+IDAgfHwgQHRlc3RzVGltZWRPdXQgPiAwOwotfQotCi1zdWIgcnVu
VGVzdCgkJCkKLXsKLSAgICBteSAoJHN1aXRlLCAkdGVzdE5hbWUpID0gQF87Ci0gICAgbXkgJHRl
c3QgPSAkc3VpdGUgLiAiLiIgLiAkdGVzdE5hbWU7Ci0KLSAgICBteSAkZ3Rlc3RBcmcgPSAiLS1n
dGVzdF9maWx0ZXI9IiAuICR0ZXN0OwotCi0gICAgbXkgJHJlc3VsdCA9IDA7Ci0gICAgbXkgJHRp
bWVkT3V0ID0gMDsKLQotICAgIGRpZSAicnVuLWFwaS10ZXN0cyBpcyBub3Qgc3VwcG9ydGVkIG9u
IHRoaXMgcGxhdGZvcm0uXG4iIHVubGVzcyBpc1N1cHBvcnRlZFBsYXRmb3JtKCk7Ci0KLSAgICBs
b2NhbCAlRU5WID0gJUVOVjsKLSAgICBwcmVwYXJlRW52aXJvbm1lbnRGb3JSdW5uaW5nVGVzdFRv
b2woKTsKLQotICAgIGxvY2FsICpERVZOVUxMOwotICAgIG15ICgkY2hpbGRJbiwgJGNoaWxkT3V0
LCAkY2hpbGRFcnIpOwotICAgIGlmICgkdmVyYm9zZSB8fCAkc2hvd0xlYWtzKSB7Ci0gICAgICAg
ICRjaGlsZEVyciA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgb3BlbihERVZOVUxMLCAiPiIs
IEZpbGU6OlNwZWMtPmRldm51bGwoKSkgb3IgZGllICJGYWlsZWQgdG8gb3BlbiAvZGV2L251bGwi
OwotICAgICAgICAkY2hpbGRFcnIgPSAiPiZERVZOVUxMIjsKLSAgICB9Ci0KLSAgICBteSAkcGlk
OwotICAgIG15IEBjb21tb25Bcmd1bWVudHMgPSAoJHRlc3RUb1Rvb2xNYXB7JHRlc3R9LCAkZ3Rl
c3RBcmcsIEBBUkdWKTsKLSAgICBpZiAod2lsbFVzZUlPU1NpbXVsYXRvclNESygpKSB7Ci0gICAg
ICAgICRwaWQgPSBvcGVuMygkY2hpbGRJbiwgJGNoaWxkT3V0LCAkY2hpbGRFcnIsIHF3KHhjcnVu
IC0tc2RrIGlwaG9uZXNpbXVsYXRvciBzaW1jdGwgc3Bhd24pLCAkc2ltdWxhdG9yRGV2aWNlLT57
VURJRH0sIEBjb21tb25Bcmd1bWVudHMpIG9yIGRpZSAiRmFpbGVkIHRvIHJ1biB0ZXN0OiAkdGVz
dC4iOwotICAgIH0gZWxzaWYgKGlzQXBwbGVDb2NvYVdlYktpdCgpICYmIGFyY2hpdGVjdHVyZSgp
KSB7Ci0gICAgICAgICRwaWQgPSBvcGVuMygkY2hpbGRJbiwgJGNoaWxkT3V0LCAkY2hpbGRFcnIs
ICJhcmNoIiwgIi0iIC4gYXJjaGl0ZWN0dXJlKCksIGFyY2hDb21tYW5kTGluZUFyZ3VtZW50c0Zv
clJlc3RyaWN0ZWRFbnZpcm9ubWVudFZhcmlhYmxlcygpLCBAY29tbW9uQXJndW1lbnRzKSBvciBk
aWUgIkZhaWxlZCB0byBydW4gdGVzdDogJHRlc3QuIjsKLSAgICB9IGVsc2UgewotICAgICAgICAk
cGlkID0gb3BlbjMoJGNoaWxkSW4sICRjaGlsZE91dCwgJGNoaWxkRXJyLCBAY29tbW9uQXJndW1l
bnRzKSBvciBkaWUgIkZhaWxlZCB0byBydW4gdGVzdDogJHRlc3QuIjsKLSAgICB9Ci0KLSAgICBl
dmFsIHsKLSAgICAgICAgaWYgKCRkaXNhYmxlVGltZW91dCkgewotICAgICAgICAgICAgd2FpdHBp
ZCgkcGlkLCAwKTsgICAgCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2NhbCAkU0lH
e0FMUk19ID0gc3ViIHsgZGllICJhbGFybVxuIiB9OwotICAgICAgICAgICAgYWxhcm0gJHRpbWVv
dXQ7Ci0gICAgICAgICAgICB3YWl0cGlkKCRwaWQsIDApOwotICAgICAgICAgICAgYWxhcm0gMDsK
LSAgICAgICAgfQotICAgICAgICAkcmVzdWx0ID0gJD87Ci0gICAgfTsKLSAgICBpZiAoJEApIHsK
LSAgICAgICAgZGllIHVubGVzcyAkQCBlcSAiYWxhcm1cbiI7Ci0gICAgICAgIGtpbGwgU0lHVEVS
TSwgJHBpZCBvciBraWxsIFNJR0tJTEwsICRwaWQ7Ci0gICAgICAgICR0aW1lZE91dCA9IDE7Ci0g
ICAgfQotCi0gICAgbXkgQHRlc3RPdXRwdXQgPSA8JGNoaWxkT3V0PjsKLSAgICBAdGVzdE91dHB1
dCA9IGdyZXAgeyAhL15MRUFLOi8gfSBAdGVzdE91dHB1dCB1bmxlc3MgJHNob3dMZWFrczsKLSAg
ICBtYXAgeyBzL1wqXCpQQVNTXCpcKi9wb3NzaWJseUNvbG9yZWQoImJvbGQgZ3JlZW4iLCAiUEFT
UyIpL2VnIH0gQHRlc3RPdXRwdXQ7Ci0gICAgbWFwIHsgcy9cKlwqRkFJTFwqXCovcG9zc2libHlD
b2xvcmVkKCJib2xkIHJlZCIsICJGQUlMIikvZWcgfSBAdGVzdE91dHB1dDsKLQotICAgIGlmICgk
cmVzdWx0KSB7Ci0gICAgICAgIHB1c2ggQHRlc3RzRmFpbGVkLCAkdGVzdDsKLSAgICAgICAgaWYg
KCEkdGltZWRPdXQgJiYgaW5kZXgoIkB0ZXN0T3V0cHV0IiwgJHRlc3QpID09IC0xKSB7Ci0gICAg
ICAgICAgICBwcmludCBTVERPVVQgcG9zc2libHlDb2xvcmVkKCJib2xkIHJlZCIsICJVTkVYUEVD
VEVETFkgRVhJVEVEIiksICIgJHRlc3RcbiI7Ci0gICAgICAgIH0KLSAgICB9IGVsc2lmICgkdGlt
ZWRPdXQpIHsKLSAgICAgICAgcHVzaCBAdGVzdHNUaW1lZE91dCwgJHRlc3Q7Ci0gICAgICAgIHBy
aW50IFNURE9VVCBwb3NzaWJseUNvbG9yZWQoImJvbGQgeWVsbG93IiwgIlRJTUVPVVQiKSwgIiAk
dGVzdFxuIjsKLSAgICB9Ci0KLSAgICBwcmludCBTVERPVVQgQHRlc3RPdXRwdXQ7Ci0KLSAgICBj
bG9zZSgkY2hpbGRJbik7Ci0gICAgY2xvc2UoJGNoaWxkT3V0KTsKLSAgICBjbG9zZSgkY2hpbGRF
cnIpIHVubGVzcyAoJHZlcmJvc2UgfHwgJHNob3dMZWFrcyk7Ci0gICAgY2xvc2UoREVWTlVMTCkg
dW5sZXNzICgkdmVyYm9zZSB8fCAkc2hvd0xlYWtzKTsKLQotICAgIGlmICgkdGltZWRPdXQgfHwg
JHJlc3VsdCkgewotICAgICAgICByZXR1cm4gJHRpbWVkT3V0IHx8ICRyZXN1bHQ7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN1YiBsaXN0QWxsVGVzdHMoKQotewotICAgIG15IEB0b29s
T3V0cHV0OwotICAgIG15ICR0aW1lZE91dDsKLQotICAgIGRpZSAicnVuLWFwaS10ZXN0cyBpcyBu
b3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uXG4iIHVubGVzcyBpc1N1cHBvcnRlZFBsYXRm
b3JtKCk7Ci0KLSAgICBwcmVwYXJlRW52aXJvbm1lbnRGb3JSdW5uaW5nVGVzdFRvb2woKTsKLQot
ICAgIGxvY2FsICpERVZOVUxMOwotICAgIG15ICgkY2hpbGRJbiwgJGNoaWxkT3V0LCAkY2hpbGRF
cnIpOwotICAgIGlmICgkdmVyYm9zZSkgewotICAgICAgICAkY2hpbGRFcnIgPSAiPiZTVERFUlIi
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG9wZW4oREVWTlVMTCwgIj4iLCBGaWxlOjpTcGVjLT5k
ZXZudWxsKCkpIG9yIGRpZSAiRmFpbGVkIHRvIG9wZW4gL2Rldi9udWxsIjsKLSAgICAgICAgJGNo
aWxkRXJyID0gIj4mREVWTlVMTCI7Ci0gICAgfQotCi0gICAgbXkgQHRlc3RzID0gKCk7Ci0gICAg
Zm9yZWFjaCAodGVzdFRvb2xQYXRocygpKSB7Ci0gICAgICAgIG15ICRwaWQ7Ci0gICAgICAgIG15
ICR0ZXN0VG9vbCA9ICRfOwotICAgICAgICBteSBAY29tbW9uQXJndW1lbnRzID0gKCR0ZXN0VG9v
bCwgIi0tZ3Rlc3RfbGlzdF90ZXN0cyIpOwotICAgICAgICBpZiAoaXNJT1NXZWJLaXQoKSkgewot
ICAgICAgICAgICAgJHBpZCA9IG9wZW4zKCRjaGlsZEluLCAkY2hpbGRPdXQsICRjaGlsZEVyciwg
cXcoeGNydW4gLS1zZGsgaXBob25lc2ltdWxhdG9yIHNpbWN0bCBzcGF3biksICRzaW11bGF0b3JE
ZXZpY2UtPntVRElEfSwgQGNvbW1vbkFyZ3VtZW50cykgb3IgZGllICJGYWlsZWQgdG8gYnVpbGQg
bGlzdCBvZiB0ZXN0cyEiOwotICAgICAgICB9IGVsc2lmIChpc0FwcGxlQ29jb2FXZWJLaXQoKSAm
JiBhcmNoaXRlY3R1cmUoKSkgewotICAgICAgICAgICAgJHBpZCA9IG9wZW4zKCRjaGlsZEluLCAk
Y2hpbGRPdXQsICRjaGlsZEVyciwgImFyY2giLCAiLSIgLiBhcmNoaXRlY3R1cmUoKSwgYXJjaENv
bW1hbmRMaW5lQXJndW1lbnRzRm9yUmVzdHJpY3RlZEVudmlyb25tZW50VmFyaWFibGVzKCksIEBj
b21tb25Bcmd1bWVudHMpIG9yIGRpZSAiRmFpbGVkIHRvIGJ1aWxkIGxpc3Qgb2YgdGVzdHMhIjsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICRwaWQgPSBvcGVuMygkY2hpbGRJbiwgJGNo
aWxkT3V0LCAkY2hpbGRFcnIsIEBjb21tb25Bcmd1bWVudHMpIG9yIGRpZSAiRmFpbGVkIHRvIGJ1
aWxkIGxpc3Qgb2YgdGVzdHMhIjsKLSAgICAgICAgfQotCi0gICAgICAgIGNsb3NlKCRjaGlsZElu
KTsKLSAgICAgICAgQHRvb2xPdXRwdXQgPSA8JGNoaWxkT3V0PjsKLSAgICAgICAgY2xvc2UoJGNo
aWxkT3V0KTsKLSAgICAgICAgY2xvc2UoJGNoaWxkRXJyKTsKLQotICAgICAgICB3YWl0cGlkKCRw
aWQsIDApOwotICAgICAgICBteSAkcmVzdWx0ID0gJD87Ci0KLSAgICAgICAgaWYgKCRyZXN1bHQp
IHsKLSAgICAgICAgICAgIHByaW50IFNUREVSUiAiRmFpbGVkIHRvIGJ1aWxkIGxpc3Qgb2YgdGVz
dHMhLS1cbiI7Ci0gICAgICAgICAgICBleGl0IGV4aXRTdGF0dXMoJHJlc3VsdCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBteSAkc3VpdGU7Ci0gICAgICAgIGZvciBteSAkbGluZSAoQHRvb2xPdXRw
dXQpIHsKLSAgICAgICAgICAgJGxpbmUgPX4gcy9bXHJcbl0qJC8vOwotICAgICAgICAgICBpZiAo
JGxpbmUgPX4gbS9cLiQvKSB7Ci0gICAgICAgICAgICAgICRzdWl0ZSA9ICRsaW5lOyAjICJTdWl0
ZU5hbWUuIgotICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAkbGluZSA9fiBzL15c
cyovLzsgIyAiVGVzdE5hbWUiCi0gICAgICAgICAgICAgIG15ICRmdWxsTmFtZSA9ICRzdWl0ZSAu
ICRsaW5lOyAjICJTdWl0ZU5hbWUuVGVzdE5hbWUiOwotICAgICAgICAgICAgICBwdXNoIEB0ZXN0
cywgJGZ1bGxOYW1lOwotICAgICAgICAgICAgICAkdGVzdFRvVG9vbE1hcHskZnVsbE5hbWV9ID0g
JHRlc3RUb29sOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xvc2Uo
REVWTlVMTCkgdW5sZXNzICgkdmVyYm9zZSk7Ci0KLSAgICByZXR1cm4gQHRlc3RzOwotfQotCi1z
dWIgYnVpbGRUZXN0VG9vbCgpCi17Ci0gICAgbXkgJG9yaWdpbmFsQ3dkID0gZ2V0Y3dkKCk7Ci0K
LSAgICBjaGRpcldlYktpdCgpOwotCi0gICAgbXkgJGJ1aWxkVGVzdFRvb2wgPSAiYnVpbGQtYXBp
LXRlc3RzIjsKLSAgICBwcmludCBTVERFUlIgIlJ1bm5pbmcgJGJ1aWxkVGVzdFRvb2xcbiI7Ci0K
LSAgICBsb2NhbCAqREVWTlVMTDsKLSAgICBteSAoJGNoaWxkSW4sICRjaGlsZE91dCwgJGNoaWxk
RXJyKTsKLSAgICBpZiAoJHZlcmJvc2UpIHsKLSAgICAgICAgIyBXaGVuIG5vdCBxdWlldCwgbGV0
IHRoZSBjaGlsZCB1c2Ugb3VyIHN0ZG91dC9zdGRlcnIuCi0gICAgICAgICRjaGlsZE91dCA9ICI+
JlNURE9VVCI7Ci0gICAgICAgICRjaGlsZEVyciA9ICI+JlNUREVSUiI7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgb3BlbihERVZOVUxMLCAiPiIsIEZpbGU6OlNwZWMtPmRldm51bGwoKSkgb3IgZGll
ICJGYWlsZWQgdG8gb3BlbiAvZGV2L251bGwiOwotICAgICAgICAkY2hpbGRPdXQgPSAiPiZERVZO
VUxMIjsKLSAgICAgICAgJGNoaWxkRXJyID0gIj4mREVWTlVMTCI7Ci0gICAgfQotCi0gICAgbXkg
QGFyZ3MgPSBhcmd1bWVudHNGb3JDb25maWd1cmF0aW9uKCk7Ci0gICAgaWYgKCR3dGZPbmx5KSB7
Ci0gICAgICAgIHB1c2ggQGFyZ3MsICItLXd0Zi1vbmx5IjsKLSAgICB9Ci0KLSAgICBteSAkcGF0
aFRvQnVpbGRUZXN0VG9vbCA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoIlRvb2xzIiwgIlNjcmlwdHMi
LCAkYnVpbGRUZXN0VG9vbCk7Ci0gICAgbXkgJGJ1aWxkUHJvY2VzcyA9IG9wZW4zKCRjaGlsZElu
LCAkY2hpbGRPdXQsICRjaGlsZEVyciwgInBlcmwiLCAkcGF0aFRvQnVpbGRUZXN0VG9vbCwgQGFy
Z3MpIG9yIGRpZSAiRmFpbGVkIHRvIHJ1biAiIC4gJGJ1aWxkVGVzdFRvb2w7Ci0KLSAgICBjbG9z
ZSgkY2hpbGRJbik7Ci0gICAgY2xvc2UoJGNoaWxkT3V0KTsKLSAgICBjbG9zZSgkY2hpbGRFcnIp
OwotICAgIGNsb3NlKERFVk5VTEwpIHVubGVzcyAoJHZlcmJvc2UpOwotCi0gICAgd2FpdHBpZCgk
YnVpbGRQcm9jZXNzLCAwKTsKLSAgICBteSAkYnVpbGRSZXN1bHQgPSAkPzsKLQotICAgIGlmICgk
YnVpbGRSZXN1bHQpIHsKLSAgICAgICAgcHJpbnQgU1RERVJSICJDb21waWxpbmcgVGVzdFdlYktp
dEFQSSBmYWlsZWQhXG4iOwotICAgICAgICBleGl0IGV4aXRTdGF0dXMoJGJ1aWxkUmVzdWx0KTsK
LSAgICB9Ci0KLSAgICBjaGRpciAkb3JpZ2luYWxDd2Q7Ci19Ci0KLXN1YiBwcmVwYXJlRW52aXJv
bm1lbnRGb3JSdW5uaW5nVGVzdFRvb2woKQotewotICAgIHJldHVybiB1bmxlc3MgaXNBcHBsZUNv
Y29hV2ViS2l0KCk7Ci0KLSAgICBpZiAod2lsbFVzZUlPU1NpbXVsYXRvclNESygpKSB7Ci0gICAg
ICAgIG15ICVzaW11bGF0b3JFTlY7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGxvY2FsICVFTlY7
Ci0gICAgICAgICAgICBzZXR1cElPU1dlYktpdEVudmlyb25tZW50KHByb2R1Y3REaXIoKSk7Ci0g
ICAgICAgICAgICAlc2ltdWxhdG9yRU5WID0gJUVOVjsKLSAgICAgICAgfQotICAgICAgICAjIFBy
ZWZpeCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggU0lNQ1RMX0NISUxEXyBwZXIgYHhj
cnVuIHNpbWN0bCBoZWxwIGxhdW5jaGAuCi0gICAgICAgIGZvcmVhY2ggbXkgJGtleSAoa2V5cyAl
c2ltdWxhdG9yRU5WKSB7Ci0gICAgICAgICAgICAkRU5WeyJTSU1DVExfQ0hJTERfJGtleSJ9ID0g
JHNpbXVsYXRvckVOVnska2V5fTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHNldHVwTWFjV2ViS2l0RW52aXJvbm1lbnQocHJvZHVjdERpcigpKTsKLX0KLQotc3ViIHRl
c3RUb29sUGF0aHMoKQotewotICAgIGlmICghaXNBcHBsZVdpbldlYktpdCgpKSB7Ci0gICAgICAg
IG15IEB0b29sUGF0aHMgPSAoKTsKLSAgICAgICAgaWYgKCEkd3RmT25seSkgewotICAgICAgICAg
ICAgcHVzaCBAdG9vbFBhdGhzLCBGaWxlOjpTcGVjLT5jYXRmaWxlKHByb2R1Y3REaXIoKSwgIlRl
c3RXZWJLaXRBUEkiKTsKLSAgICAgICAgfQotICAgICAgICBwdXNoIEB0b29sUGF0aHMsIEZpbGU6
OlNwZWMtPmNhdGZpbGUocHJvZHVjdERpcigpLCAiVGVzdFdURiIpOwotICAgICAgICByZXR1cm4g
QHRvb2xQYXRoczsKLSAgICB9Ci0KLSAgICBteSAkYmluRGlyID0gaXNXaW42NCgpID8gImJpbjY0
IiA6ICJiaW4zMiI7Ci0gICAgbXkgJHBhdGhXVEYgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKHByb2R1
Y3REaXIoKSwgJGJpbkRpciwgIlRlc3RXVEYiKTsKLSAgICBteSAkcGF0aFdlYkNvcmUgPSBGaWxl
OjpTcGVjLT5jYXRmaWxlKHByb2R1Y3REaXIoKSwgJGJpbkRpciwgIlRlc3RXZWJDb3JlIik7Ci0g
ICAgbXkgJHBhdGhXZWJLaXQgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKHByb2R1Y3REaXIoKSwgJGJp
bkRpciwgIlRlc3RXZWJLaXRMZWdhY3kiKTsKLQotICAgIG15ICRzdWZmaXg7Ci0gICAgaWYgKGNv
bmZpZ3VyYXRpb24oKSBlcSAiRGVidWdfQWxsIikgewotICAgICAgICAkc3VmZml4ID0gIl9kZWJ1
ZyI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgJHN1ZmZpeCA9ICIiOwotICAgIH0KLSAgICByZXR1
cm4gKCIkcGF0aFdURiRzdWZmaXguZXhlIiwgIiRwYXRoV2ViQ29yZSRzdWZmaXguZXhlIiwgIiRw
YXRoV2ViS2l0JHN1ZmZpeC5leGUiKTsKLX0KLQotc3ViIHdyaXRlSlNPTkRhdGFJZkFwcGxpY2Fi
bGUoKQotewotICAgIGlmIChkZWZpbmVkKCRqc29uRmlsZU5hbWUpKSB7Ci0gICAgICAgIG9wZW4o
bXkgJGZpbGVIYW5kbGVyLCAiPiIsICRqc29uRmlsZU5hbWUpIG9yIGRpZTsKLSAgICAgICAgcHJp
bnQgJGZpbGVIYW5kbGVyICIke1xlbmNvZGVfanNvbihcJWpzb25EYXRhKX1cbiI7Ci0gICAgICAg
IGNsb3NlKCRmaWxlSGFuZGxlcik7Ci0gICAgfQotfQorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisjICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisjICAgIGRpc2NsYWlt
ZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKKyMgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisjICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UiAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisj
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwKKyMgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyMgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisjIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorIyBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyMg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisjIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgYXRleGl0CitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRweS5jb21tb24uaG9z
dCBpbXBvcnQgSG9zdAorCitURVNUU19VU0lOR19XUFQgPSBbIldlYktpdC5Vc2VyTWVkaWFCYXNp
YyJdCitURVNUU19VU0lOR19BUEFDSEUgPSBbXQorVEVTVFNfVVNJTkdfV0VCU09DS0VUID0gW10K
KworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3J1bi1hcGktdGVzdHMnKQorbG9nZ2luZy5i
YXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLkVSUk9SKQorCitjbGFzcyBBUElUZXN0UnVubmVyKG9i
amVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RzKToKKyAgICAgICAgc2VsZi5faG9z
dCA9IEhvc3QoKQorICAgICAgICBzZWxmLl9wb3J0ID0gc2VsZi5faG9zdC5wb3J0X2ZhY3Rvcnku
Z2V0KE5vbmUsIHt9KQorCisgICAgICAgIGRlZiBhbnlfdGVzdF9tYXRjaGluZyh0ZXN0c1RvUnVu
LCBsaXN0T2ZUZXN0U3VpdGUpOgorICAgICAgICAgICAgZGVmIGlzX3J1bm5pbmdfdGVzdF9zdWl0
ZSh0ZXN0c1RvUnVuLCB0ZXN0U3VpdGUpOgorICAgICAgICAgICAgICAgIGlmIGFueSh0ZXN0U3Vp
dGUgPT0gdGVzdCBmb3IgdGVzdCBpbiB0ZXN0c1RvUnVuKToKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICBpdGVtcyA9IHRlc3RTdWl0ZS5zcGxpdCgnLicp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGFueShpdGVtc1swXSA9PSB0ZXN0IGZvciB0ZXN0IGlu
IHRlc3RzVG9SdW4pIGlmIGxlbihpdGVtcykgZWxzZSBGYWxzZQorCisgICAgICAgICAgICBpZiBu
b3QgbGVuKHRlc3RzVG9SdW4pOgorICAgICAgICAgICAgICAgIHJldHVybiBib29sKGxpc3RPZlRl
c3RTdWl0ZSkKKyAgICAgICAgICAgIHJldHVybiBhbnkgKGlzX3J1bm5pbmdfdGVzdF9zdWl0ZSh0
ZXN0c1RvUnVuLCB0ZXN0U3VpdGUpIGZvciB0ZXN0U3VpdGUgaW4gbGlzdE9mVGVzdFN1aXRlKQor
CisgICAgICAgIHNlbGYuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IGFueV90ZXN0
X21hdGNoaW5nKHRlc3RzLCBURVNUU19VU0lOR19XUFQpIGFuZCBub3Qgc2VsZi5fcG9ydC5pc193
cHRfc2VydmVyX3J1bm5pbmcoKQorICAgICAgICBzZWxmLl9uZWVkc19odHRwID0gYW55X3Rlc3Rf
bWF0Y2hpbmcodGVzdHMsIFRFU1RTX1VTSU5HX0FQQUNIRSkgYW5kIG5vdCBzZWxmLl9wb3J0Lmlz
X2h0dHBfc2VydmVyX3J1bm5pbmcoKQorICAgICAgICBzZWxmLl9uZWVkc193ZWJzb2NrZXQgPSBh
bnlfdGVzdF9tYXRjaGluZyh0ZXN0cywgVEVTVFNfVVNJTkdfV0VCU09DS0VUKSBhbmQgbm90IHNl
bGYuX3BvcnQuaXNfd2Vic29ja2V0X3NlcnZlcnNfcnVubmluZygpCisKKyAgICAgICAgc2VsZi5f
dGVzdHMgPSB0ZXN0cworCisgICAgICAgIHNlbGYuc3RhcnRfc2VydmVycygpCisgICAgICAgIGF0
ZXhpdC5yZWdpc3RlcihsYW1iZGE6IHNlbGYuc3RvcF9zZXJ2ZXJzKCkpCisKKyAgICBkZWYgcnVu
X3Rlc3RzKHNlbGYpOgorICAgICAgICBmaWxlc3lzdGVtID0gc2VsZi5faG9zdC5maWxlc3lzdGVt
CisgICAgICAgICMgRklYTUU6IHJld3JpdGUgVG9vbHMvU2NyaXB0cy9hcGktdGVzdHMtcnVubmVy
IGluIHB5dGhvbi4KKyAgICAgICAgYXJndW1lbnRzID0gW2ZpbGVzeXN0ZW0uam9pbihmaWxlc3lz
dGVtLmRpcm5hbWUoX19maWxlX18pLCAnYXBpLXRlc3RzLXJ1bm5lcicpXQorICAgICAgICBhcmd1
bWVudHMuZXh0ZW5kKHNlbGYuX3Rlc3RzKQorICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Q
b3Blbihhcmd1bWVudHMpCisgICAgICAgIHByb2Nlc3Mud2FpdCgpCisKKyAgICBkZWYgc3RhcnRf
c2VydmVycyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fbmVlZHNfaHR0cDoKKyAgICAgICAgICAg
IGxvZ2dlci5pbmZvKCdTdGFydGluZyBIVFRQIHNlcnZlcicpCisgICAgICAgICAgICBzZWxmLl9w
b3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKKyAgICAgICAgaWYgc2VsZi5fbmVlZHNfd2Vic29ja2V0
OgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1N0YXJ0aW5nIFdlYlNvY2tldCBzZXJ2ZXInKQor
ICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAg
aWYgc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyOgorICAgICAgICAgICAgbG9n
Z2VyLmluZm8oJ1N0YXJ0aW5nIFdlYiBQbGF0Zm9ybSBUZXN0IHNlcnZlcicpCisgICAgICAgICAg
ICBzZWxmLl9wb3J0LnN0YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcigpCisKKyAgICBkZWYg
c3RvcF9zZXJ2ZXJzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9uZWVkc19odHRwOgorICAgICAg
ICAgICAgbG9nZ2VyLmluZm8oJ1N0b3BwaW5nIEhUVFAgc2VydmVyJykKKyAgICAgICAgICAgIHNl
bGYuX3BvcnQuc3RvcF9odHRwX3NlcnZlcigpCisgICAgICAgIGlmIHNlbGYuX25lZWRzX3dlYnNv
Y2tldDoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdTdG9wcGluZyBXZWJTb2NrZXQgc2VydmVy
JykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAg
ICAgaWYgc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyOgorICAgICAgICAgICAg
bG9nZ2VyLmluZm8oJ1N0b3BwaW5nIFdlYiBQbGF0Zm9ybSBUZXN0IHNlcnZlcicpCisgICAgICAg
ICAgICBzZWxmLl9wb3J0LnN0b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKCkKKworCitkZWYg
bWFpbihhcmd2LCBzdGRvdXQsIHN0ZGVycik6CisgICAgcnVubmVyID0gIEFQSVRlc3RSdW5uZXIo
YXJndikKKyAgICBydW5uZXIucnVuX3Rlc3RzKCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWlu
X18nOgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdLCBzeXMuc3Rkb3V0LCBzeXMuc3Rk
ZXJyKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTMyMTU3NzUxOTU5YjVkMGQ2ZDA2ZjQ4
MzI5NTkxMmYyMTEyNDY5Ny4uZGFlYzViZTcwM2U2NGNjNzE0NTRhMGJlNTY3YmFlZDNlYzExY2Fh
MiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI0LDcgKzI0LDYgQEAKIC8qIEJlZ2luIFBC
WEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTA3NDkyQjNCMURGOEIxNEMwMDYzM0RFMSAvKiBFbnVt
ZXJhdGVNZWRpYURldmljZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDc0OTJCM0ExREY4QUUyRDAwNjMzREUxIC8qIEVudW1lcmF0ZU1lZGlhRGV2
aWNlcy5jcHAgKi87IH07CiAJCTA3NDkyQjNDMURGOEI4NjYwMDYzM0RFMSAvKiBlbnVtZXJhdGVN
ZWRpYURldmljZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzQ5MkIzOTFERjhBREE0MDA2MzNERTEgLyogZW51bWVyYXRlTWVkaWFE
ZXZpY2VzLmh0bWwgKi87IH07Ci0JCTA3NDk5NDQyMUVBNTAzNEIwMDBEQTQ0RSAvKiBnZXRVc2Vy
TWVkaWEuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0QTQxMEY0RDE5QUY3QkVGMDAyRUJBQjUgLyogZ2V0VXNlck1lZGlhLmh0bWwgKi87
IH07CiAJCTA3NkU1MDdGMUY0NTEzRDYwMDZFOUY1QSAvKiBMb2dnaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NkU1MDdFMUY0NTAzMUUwMDZF
OUY1QSAvKiBMb2dnaW5nLmNwcCAqLzsgfTsKIAkJMDc5OUMzNDkxRUJBMkQ3QjAwM0I3NTMyIC8q
IFVzZXJNZWRpYURpc2FibGVkLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDdFREVGQUMxRUI5NDAwQzAwRDQzMjkyIC8qIFVzZXJNZWRpYURpc2FibGVk
Lm1tICovOyB9OwogCQkwNzk5QzM0QjFFQkEzMzAxMDAzQjc1MzIgLyogZGlzYWJsZUdldFVzZXJN
ZWRpYS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3OTlDMzRBMUVCQTMyRjQwMDNCNzUzMiAvKiBkaXNhYmxlR2V0VXNlck1lZGlhLmh0
bWwgKi87IH07CkBAIC05MTYsNyArOTE1LDYgQEAKIAkJCQkyNkY1MkVBRjE4Mjg4QzIzMDAyM0Q0
MTIgLyogZ2VvbG9jYXRpb25HZXRDdXJyZW50UG9zaXRpb25XaXRoSGlnaEFjY3VyYWN5Lmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMjZGNTJFQjIxODI4OEYyNDAwMjNENDEyIC8qIGdl
b2xvY2F0aW9uV2F0Y2hQb3NpdGlvbi5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTI2
RjUyRUIzMTgyODhGMjQwMDIzRDQxMiAvKiBnZW9sb2NhdGlvbldhdGNoUG9zaXRpb25XaXRoSGln
aEFjY3VyYWN5Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCi0JCQkJMDc0OTk0NDIxRUE1MDM0
QjAwMERBNDRFIC8qIGdldFVzZXJNZWRpYS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJ
CUY0NkEwOTVCMUVEOEE2RTYwMEQ0QUE1NSAvKiBnaWYtYW5kLWZpbGUtaW5wdXQuaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLywKIAkJCQk5QjRGOEZBNzE1OUQ1MkREMDAyRDlGOTQgLyogSFRNTENv
bGxlY3Rpb25OYW1lZEl0ZW0uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk5QjI2RkND
QTE1OUQxNkRFMDBDQzM3NjUgLyogSFRNTEZvcm1Db2xsZWN0aW9uTmFtZWRJdGVtLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8sCkBAIC0xMjgzLDcgKzEyODEsNiBAQAogCQk0NkU2NkE4RjFGMEQ3
NTU5MDAyNkQ4M0MgLyogV0tXZWJWaWV3RGlhZ25vc3RpY0xvZ2dpbmcubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdEaWFnbm9zdGljTG9nZ2luZy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZFODE2RjcxRTc5RTI5MTAwMzc1QURD
IC8qIFJlc3RvcmVTdGF0ZUFmdGVyVGVybWluYXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBSZXN0b3JlU3RhdGVBZnRlclRlcm1pbmF0aW9uLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QTQxMEY0QjE5QUY3QkQ2MDAyRUJBQjUgLyogVXNl
ck1lZGlhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJNZWRp
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTRBNDEwRjREMTlBRjdCRUYwMDJF
QkFCNSAvKiBnZXRVc2VyTWVkaWEuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IGdl
dFVzZXJNZWRpYS5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QkI0MTYwMTE2
ODE1QjI2MDA4MjQyMzggLyogSlNXcmFwcGVyRm9yTm9kZUluV2ViRnJhbWUubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU1dyYXBwZXJGb3JOb2RlSW5XZWJGcmFt
ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEJCNDE2MDMxNjgxNUY5MTAwODI0
MjM4IC8qIEVsZW1lbnRBdFBvaW50SW5XZWJGcmFtZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IEVsZW1lbnRBdFBvaW50SW5XZWJGcmFtZS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEJGREZGQTYxMzE0Nzc2QzAwNjFGMjRCIC8qIEhpdFRlc3RS
ZXN1bHROb2RlSGFuZGxlX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZV9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjcyNSw3ICsyNzIyLDYgQEAKIAkJCQkyNkY1MkVBRTE4Mjg4QzA0
MDAyM0Q0MTIgLyogZ2VvbG9jYXRpb25HZXRDdXJyZW50UG9zaXRpb25XaXRoSGlnaEFjY3VyYWN5
Lmh0bWwgKi8sCiAJCQkJMjZGNTJFQjAxODI4OEYwRjAwMjNENDEyIC8qIGdlb2xvY2F0aW9uV2F0
Y2hQb3NpdGlvbi5odG1sICovLAogCQkJCTI2RjUyRUIxMTgyODhGMEYwMDIzRDQxMiAvKiBnZW9s
b2NhdGlvbldhdGNoUG9zaXRpb25XaXRoSGlnaEFjY3VyYWN5Lmh0bWwgKi8sCi0JCQkJNEE0MTBG
NEQxOUFGN0JFRjAwMkVCQUI1IC8qIGdldFVzZXJNZWRpYS5odG1sICovLAogCQkJCUJDQkQzNzJF
MTI1QUJCRTYwMEQyQzI5RiAvKiBpY29uLnBuZyAqLywKIAkJCQlDRTM1MjRGNTFCMTQyQkJCMDAy
OEE3QzUgLyogaW5wdXQtZm9jdXMtYmx1ci5odG1sICovLAogCQkJCUM5QjRBRDJCMUVDQTZGNzYw
MEY1RkVBMCAvKiBqcy1hdXRvcGxheS1hdWRpby5odG1sICovLApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvVXNlck1lZGlhLmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0L1VzZXJNZWRpYS5jcHAKaW5kZXggMzYzYjc1MzM4MWY0OGVjYmQx
NjEyYWJlODQ4ODFjYTZiMjdmMzFhZS4uNjQ2MDNmYTk5NzA4ZWMxMzE3ZDFmZjkwNmNhODU0NWVj
NWU0OWJhMyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvVXNl
ck1lZGlhLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9Vc2VyTWVk
aWEuY3BwCkBAIC04MiwxMiArODIsMTIgQEAgVEVTVChXZWJLaXQsIFVzZXJNZWRpYUJhc2ljKQog
ICAgIHVpQ2xpZW50LmJhc2UudmVyc2lvbiA9IDY7CiAgICAgdWlDbGllbnQuZGVjaWRlUG9saWN5
Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QgPSBkZWNpZGVQb2xpY3lGb3JVc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdENhbGxCYWNrOwogICAgIHVpQ2xpZW50LmNoZWNrVXNlck1lZGlhUGVy
bWlzc2lvbkZvck9yaWdpbiA9IGNoZWNrVXNlck1lZGlhUGVybWlzc2lvbkNhbGxiYWNrOwotICAg
IAorCiAgICAgUGxhdGZvcm1XZWJWaWV3IHdlYlZpZXcoY29udGV4dC5nZXQoKSwgcGFnZUdyb3Vw
LmdldCgpKTsKICAgICBXS1BhZ2VTZXRQYWdlVUlDbGllbnQod2ViVmlldy5wYWdlKCksICZ1aUNs
aWVudC5iYXNlKTsKIAogICAgIHdhc1Byb21wdGVkID0gZmFsc2U7Ci0gICAgYXV0byB1cmwgPSBh
ZG9wdFdLKFV0aWw6OmNyZWF0ZVVSTEZvclJlc291cmNlKCJnZXRVc2VyTWVkaWEiLCAiaHRtbCIp
KTsKKyAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcoImh0
dHA6Ly9sb2NhbGhvc3Q6ODgwMC9XZWJLaXQvQVBJVGVzdHMvZ2V0VXNlck1lZGlhLmh0bWwiKSk7
CiAgICAgQVNTRVJUKHVybC5nZXQoKSk7CiAKICAgICBXS1BhZ2VMb2FkVVJMKHdlYlZpZXcucGFn
ZSgpLCB1cmwuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQvZ2V0VXNlck1lZGlhLmh0bWwgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dC9nZXRVc2VyTWVkaWEuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNmNzFi
OTEyM2I4NzE4ZDAyMzAxYzI1NmQzMmJhNjY1NjNhODUyNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dC9nZXRVc2VyTWVkaWEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTwhRE9D
VFlQRSBodG1sPgotPGh0bWw+Ci0gICAgPGhlYWQ+Ci0gICAgICAgIDxzY3JpcHQ+Ci0KLSAgICAg
ICAgICAgIGxldCBzdHJlYW0gPSBudWxsOwotCi0gICAgICAgICAgICBmdW5jdGlvbiBwcm9tcHRG
b3JDYXB0dXJlKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBuYXZpZ2F0b3IubWVk
aWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IGF1ZGlvOiBmYWxzZSwgdmlkZW86IHRydWUgfSkKLSAg
ICAgICAgICAgICAgICAudGhlbigocykgPT4gewotICAgICAgICAgICAgICAgICAgICAgIHN0cmVh
bSA9IHM7Ci0gICAgICAgICAgICAgICAgICAgICAgdmlkZW8uc3JjT2JqZWN0ID0gc3RyZWFtOwot
ICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJHb3QgdXNlciBtZWRpYSIpOwotICAg
ICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gY29uc29s
ZS5sb2coYEZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfWApKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgZnVuY3Rpb24gc3RvcChraW5kKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGxldCBhY3RpdmVUcmFja3MgPSBbXTsKLSAgICAgICAgICAgICAgICBzdHJlYW0uZ2V0
VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgha2lu
ZCB8fCB0cmFjay5raW5kID09IGtpbmQpCi0gICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5z
dG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFjdGl2ZVRyYWNrcy5wdXNoKHRyYWNrKTsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAg
ICAgICAgICAgIGlmICghYWN0aXZlVHJhY2tzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAg
ICBzdHJlYW0gPSBudWxsOwotICAgICAgICAgICAgICAgICAgICB2aWRlby5zcmNPYmplY3QgPSBu
dWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZnVu
Y3Rpb24gaGF2ZVN0cmVhbSgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHN0cmVhbSAhPT0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgPC9zY3JpcHQ+Ci0gICAg
PGhlYWQ+Ci0KLSAgICA8Ym9keSBvbmxvYWQ9InByb21wdEZvckNhcHR1cmUoKSI+Ci0gICAgICAg
IDx2aWRlbyBpZD0idmlkZW8iIGNvbnRyb2xzPjwvdmlkZW8+Ci0gICAgICAgIDxwPgotICAgICAg
ICA8YnV0dG9uIG9uY2xpY2s9InN0b3AoKSI+U3RvcDwvYnV0dG9uPgotICAgICAgICA8L3A+Ci0g
ICAgPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDg2ZWYzZTQ3YzFlYmFiZWYxNGVhMDE1OGYwNTgz
ZGVhM2QzYjQ3NTEuLmU4Zjc3YWMzMDUzNmIxYjQ3YWE1YmMxZTA4YWE5ODMyMGNmMGQwOTIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNy0xMi0xNyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBh
cHBsZS5jb20+CisKKyAgICAgICAgQWxsb3cgcnVuLWFwaS10ZXN0cyB0byBzdGFydC9zdG9wIGxh
eW91dCB0ZXN0cyBzZXJ2ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODA5MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6IFNraXBwaW5nIGh0dHAvd3B0L0FQSVRlc3Rz
IGZvbGRlci4KKyAgICAgICAgKiBodHRwL3dwdC9BUElUZXN0cy9nZXRVc2VyTWVkaWEuaHRtbDog
UmVuYW1lZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L2dldFVzZXJNZWRp
YS5odG1sLgorCiAyMDE3LTEyLTE2ICBNczJnZXIgIDxNczJnZXJAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBFbmFibGUgd3B0IGZldGNoIHRlc3RzIG9uIFdQRS4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCmluZGV4
IGUzZmY5NGIyZDhjZTJlZThlMjQ0MjcxNzQzZmM3YmNmYjViMTZiYWQuLmQ4OTQ3ZTQxNDM2Yjk3
YWIwYTM3NzQ0ZTg2YjIxOThkYmY0ZDczMzQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL1Rlc3RF
eHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNDEsNiAr
NDEsOCBAQCBmYXN0L2Nzcy92YXJpYWJsZXMvZW52L2lvcyBbIFNraXAgXQogaHR0cC90ZXN0cy9w
cmVsb2FkL3ZpZXdwb3J0IFsgU2tpcCBdCiBodHRwL3Rlc3RzL2d6aXAtY29udGVudC1lbmNvZGlu
ZyBbIFNraXAgXQogCitodHRwL3dwdC9BUElUZXN0cyBbIFNraXAgXQorCiAjIHdpbmRvdy5zaG93
TW9kYWxEaWFsb2cgaXMgb25seSB0ZXN0ZWQgaW4gRHVtcFJlbmRlclRyZWUgb24gTWFjLgogZWRp
dGluZy9leGVjQ29tbWFuZC9zaG93LW1vZGFsLWRpYWxvZy1kdXJpbmctZXhlY0NvbW1hbmQuaHRt
bCBbIFNraXAgXQogaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4tbW9kYWwtZGlhbG9n
LWJhc2UuaHRtbCBbIFNraXAgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC93cHQvQVBJ
VGVzdHMvZ2V0VXNlck1lZGlhLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC9BUElUZXN0cy9n
ZXRVc2VyTWVkaWEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43M2Y3MWI5MTIzYjg3MThkMDIzMDFjMjU2ZDMy
YmE2NjU2M2E4NTI3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC93cHQvQVBJ
VGVzdHMvZ2V0VXNlck1lZGlhLmh0bWwKQEAgLTAsMCArMSw0OCBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKyAgICA8aGVhZD4KKyAgICAgICAgPHNjcmlwdD4KKworICAgICAgICAgICAgbGV0
IHN0cmVhbSA9IG51bGw7CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHByb21wdEZvckNhcHR1cmUo
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMu
Z2V0VXNlck1lZGlhKHsgYXVkaW86IGZhbHNlLCB2aWRlbzogdHJ1ZSB9KQorICAgICAgICAgICAg
ICAgIC50aGVuKChzKSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gczsKKyAg
ICAgICAgICAgICAgICAgICAgICB2aWRlby5zcmNPYmplY3QgPSBzdHJlYW07CisgICAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS5sb2coIkdvdCB1c2VyIG1lZGlhIik7CisgICAgICAgICAgICAg
ICAgfSkKKyAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiBjb25zb2xlLmxvZyhgRmFp
bGVkIHdpdGggZXJyb3I6ICR7ZXJyb3J9YCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBmdW5jdGlvbiBzdG9wKGtpbmQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGV0
IGFjdGl2ZVRyYWNrcyA9IFtdOworICAgICAgICAgICAgICAgIHN0cmVhbS5nZXRUcmFja3MoKS5m
b3JFYWNoKHRyYWNrID0+IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFraW5kIHx8IHRyYWNr
LmtpbmQgPT0ga2luZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlVHJh
Y2tzLnB1c2godHJhY2spOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAg
aWYgKCFhY3RpdmVUcmFja3MubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9
IG51bGw7CisgICAgICAgICAgICAgICAgICAgIHZpZGVvLnNyY09iamVjdCA9IG51bGw7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBoYXZl
U3RyZWFtKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtICE9
PSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICA8L3NjcmlwdD4KKyAgICA8aGVhZD4KKwor
ICAgIDxib2R5IG9ubG9hZD0icHJvbXB0Rm9yQ2FwdHVyZSgpIj4KKyAgICAgICAgPHZpZGVvIGlk
PSJ2aWRlbyIgY29udHJvbHM+PC92aWRlbz4KKyAgICAgICAgPHA+CisgICAgICAgIDxidXR0b24g
b25jbGljaz0ic3RvcCgpIj5TdG9wPC9idXR0b24+CisgICAgICAgIDwvcD4KKyAgICA8L2JvZHk+
Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>