<?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>73956</bug_id>
          
          <creation_ts>2011-12-06 15:50:20 -0800</creation_ts>
          <short_desc>Rewrite the test results server in Go</short_desc>
          <delta_ts>2011-12-09 14:25:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ojan Vafai">ojan</reporter>
          <assigned_to name="Ojan Vafai">ojan</assigned_to>
          <cc>agl</cc>
    
    <cc>ap</cc>
    
    <cc>aroben</cc>
    
    <cc>tony</cc>
    
    <cc>ukai</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>516317</commentid>
    <comment_count>0</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-12-06 15:50:20 -0800</bug_when>
    <thetext>Rewrite the test results server in Go</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516321</commentid>
    <comment_count>1</comment_count>
      <attachid>118126</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-12-06 15:54:44 -0800</bug_when>
    <thetext>Created attachment 118126
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516322</commentid>
    <comment_count>2</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-12-06 15:55:17 -0800</bug_when>
    <thetext>Adam, you mind doing an informal review of the Go code here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516638</commentid>
    <comment_count>3</comment_count>
      <attachid>118126</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2011-12-07 07:44:59 -0800</bug_when>
    <thetext>Comment on attachment 118126
Patch

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

I&apos;m afraid that this very much feels like Python code written in Go. There&apos;s not a comment, and there&apos;s lots of python functions reimplemented in Go.

I&apos;m pretty sure that json.go should be using Marshal, but I can&apos;t understand what it&apos;s trying to do. Also, I feel that the form parsing functions may want to use reflection, although that depends on how many more are expected over time.

&gt; Tools/TestsDashboardServer/base/base.go:4
&gt; +	&quot;io&quot;

Sort includes

&gt; Tools/TestsDashboardServer/base/base.go:10
&gt; +const READ_GRANULARITY = 4096

This will be an exported symbol, are you sure you want that? Typically it would be called readGranularity.

&gt; Tools/TestsDashboardServer/base/base.go:44
&gt; +	for {

Isn&apos;t this ioutil.ReadAll?

&gt; Tools/TestsDashboardServer/base/base.go:57
&gt; +func WriteBytes(to io.Writer, from io.Reader) os.Error {

io.Copy?

&gt; Tools/TestsDashboardServer/base/base_test.go:9
&gt; +func assertEqual(t *testing.T, actual interface{}, expected interface{}) {

These generic functions are specifically not implemented in the testing package in order to avoid the poor error messages that result.

&gt; Tools/TestsDashboardServer/base/http.go:4
&gt; +	&quot;fmt&quot;

sort imports.

&gt; Tools/TestsDashboardServer/base/http.go:18
&gt; +const MAX_MEMORY_FOR_FORM = 10 &lt;&lt; 20

I don&apos;t think that any of these are intended to be exported.

&gt; Tools/TestsDashboardServer/base/http.go:19
&gt; +const MASTER = &quot;master&quot;

use a const block:

const (
   foo = 1
   bar = 2
)

&gt; Tools/TestsDashboardServer/base/http.go:51
&gt; +		fmt.Fprintf(writer, str)

Do you really want to interpret printf codes in the string? Maybe io.WriteString(writer, str)

&gt; Tools/TestsDashboardServer/base/http.go:65
&gt; +	fmt.Fprint(writer, &quot;\n&quot;+string(debug.Stack()))

Likewise about io.WriteString here and elsewhere.

&gt; Tools/TestsDashboardServer/base/http.go:88
&gt; +		number, err := strconv.Atoi(queryParameters.Get(LIMIT))

if number, err := strconv.Atoi(...); err == nil {
  limit = number
}

&gt; Tools/TestsDashboardServer/base/http.go:156
&gt; +	isPureJson := regexp.MustCompile(&quot;^{.*}$&quot;).Match(jsonBytes)

This would appear to be a very inefficient way of doing this :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516909</commentid>
    <comment_count>4</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-12-07 14:08:10 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; I&apos;m afraid that this very much feels like Python code written in Go. There&apos;s not a comment, and there&apos;s lots of python functions reimplemented in Go.

I meant to mention, this is the first Go code I&apos;ve ever written, so feel free to be harsh in your feedback. The places where I&apos;m doing something dumb are likely places I don&apos;t know any better and not intentional. :)

If there are specific functions or high-level design I could change to make this more idiomatic Go, I&apos;d be happy to.

As far as the lack of comments, I&apos;ve followed WebKit style of only writing comments that explain &quot;why&quot;, not &quot;what&quot;.

&gt; I&apos;m pretty sure that json.go should be using Marshal, but I can&apos;t understand what it&apos;s trying to do.

Yup, I couldn&apos;t come up with a struct for this data. There are two problems I couldn&apos;t really work around:
1. Some keys are not fixed (e.g. builder and test names are keys)
2. One part of the JSON is recursive.

The data looks like this:
{
&quot;version&quot;: 4,
&quot;MyBuilderName&quot;: {
    &quot;builds&quot;: [3, 2, 1],
    &quot;tests&quot;: {
        &quot;foo&quot;: {
            &quot;001.html&quot;: {&quot;results&quot;: [[1, &quot;I&quot;],[1, &quot;F&quot;]], &quot;times&quot;: [[1, 20],[1, 0]]},
            &quot;002.html&quot;: {&quot;results&quot;: [[1, &quot;I&quot;],[1, &quot;F&quot;]], &quot;times&quot;: [[1, 20],[1, 0]]}
        },
        &quot;003.html&quot;: {&quot;results&quot;: [[1, &quot;T&quot;],[1, &quot;F&quot;]], &quot;times&quot;: [[1, 10],[1, 0]]}
    }
}
}

&quot;MyBuilderName&quot; changes and the subtree under tests is a recursive data structure where the leaves are always these results/times pairs.

I do know the builder name before doing the decoding/encoding. I suppose I could use reflection to change the name of that field to the builder name before decoding/encoding.

&gt; Also, I feel that the form parsing functions may want to use reflection, although that depends on how many more are expected over time.

I don&apos;t expect there to be any new ones. This codebase is very unlikely to grow much beyond what&apos;s there now. Famous last words of course. :) How would I use reflection to do this?

I guess I would do something like:
type UploadFormData struct {
	Builder  string &quot;builder&quot;
	Master   string &quot;master&quot;
}
and then use the tag to lookup the field in the form?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516911</commentid>
    <comment_count>5</comment_count>
      <attachid>118275</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-12-07 14:10:27 -0800</bug_when>
    <thetext>Created attachment 118275
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516914</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-12-07 14:14:07 -0800</bug_when>
    <thetext>Could you please send an e-mail to webkit-dev before introducing a new programming language to WebKit repository?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516923</commentid>
    <comment_count>7</comment_count>
      <attachid>118126</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-12-07 14:27:26 -0800</bug_when>
    <thetext>Comment on attachment 118126
Patch

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

&gt;&gt; Tools/TestsDashboardServer/base/base.go:4
&gt;&gt; +	&quot;io&quot;
&gt; 
&gt; Sort includes

Whoops. I figured gofmt would complain if I got this wrong.

&gt;&gt; Tools/TestsDashboardServer/base/base.go:44
&gt;&gt; +	for {
&gt; 
&gt; Isn&apos;t this ioutil.ReadAll?

Sigh. Yes.

&gt;&gt; Tools/TestsDashboardServer/base/base.go:57
&gt;&gt; +func WriteBytes(to io.Writer, from io.Reader) os.Error {
&gt; 
&gt; io.Copy?

Also, lesigh. I think I wrote these before I got comfortable navigating the Go documentation.

&gt;&gt; Tools/TestsDashboardServer/base/base_test.go:9
&gt;&gt; +func assertEqual(t *testing.T, actual interface{}, expected interface{}) {
&gt; 
&gt; These generic functions are specifically not implemented in the testing package in order to avoid the poor error messages that result.

I prefer the conciseness of these functions. I added a &quot;message&quot; argument instead to give better error messages. To my eye, they&apos;re comparable quality to the ones in the standard go packages.

&gt;&gt; Tools/TestsDashboardServer/base/http.go:4
&gt;&gt; +	&quot;fmt&quot;
&gt; 
&gt; sort imports.

Apparently &quot;o&quot; comes after &quot;s&quot; in my head. :(

&gt;&gt; Tools/TestsDashboardServer/base/http.go:18
&gt;&gt; +const MAX_MEMORY_FOR_FORM = 10 &lt;&lt; 20
&gt; 
&gt; I don&apos;t think that any of these are intended to be exported.

fixed

&gt;&gt; Tools/TestsDashboardServer/base/http.go:19
&gt;&gt; +const MASTER = &quot;master&quot;
&gt; 
&gt; use a const block:
&gt; 
&gt; const (
&gt;    foo = 1
&gt;    bar = 2
&gt; )

much better

&gt;&gt; Tools/TestsDashboardServer/base/http.go:51
&gt;&gt; +		fmt.Fprintf(writer, str)
&gt; 
&gt; Do you really want to interpret printf codes in the string? Maybe io.WriteString(writer, str)

No. Was just cargo culting the appengine Go examples. Fixed.

&gt;&gt; Tools/TestsDashboardServer/base/http.go:156
&gt;&gt; +	isPureJson := regexp.MustCompile(&quot;^{.*}$&quot;).Match(jsonBytes)
&gt; 
&gt; This would appear to be a very inefficient way of doing this :)

Sigh. Clearly wasn&apos;t thinking straight when I wrote this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517673</commentid>
    <comment_count>8</comment_count>
      <attachid>118275</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2011-12-08 12:18:48 -0800</bug_when>
    <thetext>Comment on attachment 118275
Patch

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

LGTM

&gt; Tools/TestsDashboardServer/base/base.go:12
&gt; +	var message string

You can save the default case

message := &quot;&quot;
switch value := value.(type) {
case string:
  message = value + &quot;\n&quot;
case os.Error:
  message = value.String + &quot;\n&quot;
}
return ...

&gt; Tools/TestsDashboardServer/base/http.go:14
&gt; +// Picked a very large number. 10MB should be plenty.

this comment should probably be moved above |maxMemoryForForm|

&gt; Tools/TestsDashboardServer/base/http.go:60
&gt; +func Serve403(writer http.ResponseWriter, html ...string) os.Error {

Except for Serve500, these functions don&apos;t really justify their existence.

&gt; Tools/TestsDashboardServer/base/http.go:71
&gt; +	return MultiError(serveHtmlErr, debugStackErr)

Normally this would be written:

if err := serveHtml(writer, 500, html...); err != {
  return err
}
return io.WriteString(...)

(If a write fails then further writes are unlikely to work.)

&gt; Tools/TestsDashboardServer/base/http.go:84
&gt; +		if matched, _ := regexp.MatchString(&quot;^[A-Za-z0-9_]+$&quot;, callback); !matched {

This works, but I would normally expect strings.IndexFunc to save on regexp compilation each time.

&gt; Tools/TestsDashboardServer/base/http.go:91
&gt; +		if number, err := strconv.Atoi(queryParameters.Get(limitParameter)); err == nil {

Is it ok that limit may be very large, or negative?

&gt; Tools/TestsDashboardServer/base/http.go:109
&gt; +func ParseUploadFormData(request *http.Request) (UploadFormData, os.Error) {

you should name the return values here: (formData UploadFormData, os.Error)

&gt; Tools/TestsDashboardServer/base/http.go:110
&gt; +	var formData UploadFormData

remove this

&gt; Tools/TestsDashboardServer/base/http.go:111
&gt; +	if err := request.ParseMultipartForm(maxMemoryForForm); err != nil {

then do:

if err = equest.ParseMultipartForm(maxMemoryForForm); err != nil {
  return
}

err won&apos;t shadow the return value because it&apos;s not a :=.

&gt; Tools/TestsDashboardServer/base/http.go:115
&gt; +	form := request.MultipartForm

if formData.form = request.MultipartForm; formData.form == nil {
  err = Error(&quot;missing post data&quot;)
}

&gt; Tools/TestsDashboardServer/base/http.go:120
&gt; +	builder := form.Value[builderParameter]

ditto for these. You can cover x == nil || x == &quot;&quot; with len(x) == 0 because len(nil) == 0.

&gt; Tools/TestsDashboardServer/base/http.go:140
&gt; +	formData = UploadFormData{

then you can remove this and just &quot;return&quot;. If err got set to a non-nil value then it&apos;ll get returned.

&gt; Tools/TestsDashboardServer/base/http.go:157
&gt; +	isPureJson := jsonBytes[0] == &apos;{&apos; &amp;&amp; jsonBytes[len(jsonBytes)-1] == &apos;}&apos;

add a len(jsonBytes) &gt; 1 at the beginning.

&gt; Tools/TestsDashboardServer/base/http.go:160
&gt; +			jsonBytes = StripJsonpCallback(jsonBytes)

I can&apos;t see that StripJsonpCallback is called from anywhere else (save tests) so it should probably not be exported.

&gt; Tools/TestsDashboardServer/base/http.go:162
&gt; +		_, err := io.WriteString(writer, string(jsonBytes))

io.WriteString(x, string(y)) ==&gt; x.Write(y)

&gt; Tools/TestsDashboardServer/base/http.go:175
&gt; +	if _, err := io.WriteString(writer, string(jsonBytes)); err != nil {

writer.Write(jsonBytes)

&gt; Tools/TestsDashboardServer/base/http_test.go:20
&gt; +type mockHttpResponseWriter struct {

It looks like you want to embed the bytes.Buffer:

type mockHttpResponseWriter struct {
  bytes.Buffer
  header http.Header
  status int
}

then you don&apos;t need to forward Write() etc. Also, the zero value for a bytes.Buffer should work fine as an empty Buffer.

Once you&apos;ve done this, you can create the http.Header on demand in Header() and remove newMockHttpResponseWriter

&gt; Tools/TestsDashboardServer/base/json.go:14
&gt; +const TESTS_KEY = &quot;tests&quot;

this could be a &quot;const (&quot; block and the CAPITAL_FORM means that they&apos;re all exported. Probably doesn&apos;t matter, but it&apos;s non-standard.

(I would usually expect &quot;times&quot;, &quot;results&quot; etc as the names, but it&apos;s up to you.)

&gt; Tools/TestsDashboardServer/base/json.go:48
&gt; +type testJson struct {

this could just be:

type testJson interface{}

&gt; Tools/TestsDashboardServer/base/json.go:63
&gt; +		fs = append(fs, testJson{val: v})

If you replace testJson as above, then this becomes &quot;testJson(v)&quot;

&gt; Tools/TestsDashboardServer/base/json.go:76
&gt; +	json = regexp.MustCompile(&quot;^[A-Za-z0-9_]+[(]&quot;).ReplaceAll(json, emptyByte)

You can precompile this, and other regexps by putting:

var reJSONPPrelude = regexp.MustCompile(&quot;xyz&quot;)

at the top level and then using the variable.

&gt; Tools/TestsDashboardServer/base/json.go:80
&gt; +func removeResultsAndTimes(tests testJson) {

I&apos;m not sure why you switched from defining methods on testJson.

&gt; Tools/TestsDashboardServer/base/json.go:92
&gt; +	for key, _ := range builderData {

I don&apos;t think you need the &quot;, _&quot;

&gt; Tools/TestsDashboardServer/base/json.go:101
&gt; +func TestFileJson(reader io.Reader) (ResultsJson, os.Error) {

func TestFileJson(reader io.Reader) (out ResultsJson, err os.Error) {
  err = json.NewDecoder(reader).Decode(&amp;out)
  return
}

&gt; Tools/TestsDashboardServer/base/json.go:173
&gt; +	allTests := make(map[string]bool)

var allTests []string
for testName := range aggregateTests {
  allTests = append(allTests, testName)
}
for testName := range ... {
  ..
}

&gt; Tools/TestsDashboardServer/base/json.go:261
&gt; +	buffer := bytes.NewBuffer(make([]byte, 0))

I think the zero value of bytes.Buffer suffices here:

buffer := new(bytes.Buffer)

&gt; Tools/TestsDashboardServer/base/json_test.go:15
&gt; +		fmt.Printf(err.String())

t.Fatal(err.String) ?

&gt; Tools/TestsDashboardServer/base/json_test.go:24
&gt; +		fmt.Printf(err.String())

t.Fatal?

&gt; Tools/TestsDashboardServer/base/json_test.go:31
&gt; +func roundTripJson(t *testing.T, json string) string {

removeJSONWhitespace?

&gt; Tools/TestsDashboardServer/base/json_test.go:36
&gt; +	stripped := string(StripJsonpCallback([]byte(&quot;CALLBACK([content])&quot;)))

The number of test cases here is pretty small, but as example, this sort of thing would usually be written as:

var stripJSONPTests = []struct{
  in, out string
}{
  {&quot;CALLBACK([content])&quot;, &quot;[content]&quot;},
  ...
}

func TestStripJsonpCallback(t *testing.T) {
  for i, test := range stripJSONPTests {
    if actual := StripJsonpCallback(test.in); actual != test.out {
      t.Errorf(&quot;#%d: got &apos;%s&apos;, want &apos;%s&apos;&quot;, i, actual, test.out)
    }
  }
}

&gt; Tools/TestsDashboardServer/base/json_test.go:61
&gt; +	buffer := bytes.NewBufferString(&quot;&quot;)

buffer := new(bytes.Buffer)

&gt; Tools/TestsDashboardServer/run/run.go:76
&gt; +func serve500(context appengine.Context, writer http.ResponseWriter, html ...string) {

This is the same function three times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518517</commentid>
    <comment_count>9</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-12-09 14:25:47 -0800</bug_when>
    <thetext>There&apos;s resistance to adding Go to the WebKit repository and the benefits of this rewrite aren&apos;t strong enough for me to push for it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118126</attachid>
            <date>2011-12-06 15:54:44 -0800</date>
            <delta_ts>2011-12-07 14:27:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73956-20111206155443.patch</filename>
            <type>text/plain</type>
            <size>339401</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNDExCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOWQzZTRhYmRjYjUyOTFiMjExZDliNTExZGUwMGNjZThm
MWIwYjkxMC4uMjA3NTVlNTk5ODk3M2MxZDMyZWU2Njk1Mjg0YWFiMjI3NTc5ZmNmNSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4
IEBACisyMDExLTEyLTA2ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV3cml0ZSB0aGUgdGVzdCByZXN1bHRzIHNlcnZlciBpbiBHbworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5NTYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwgZXZlbnR1YWxseSByZXBs
YWNlIHRoZSBQeXRob24gc2VydmVyLgorICAgICAgICBUaGUgb3JpZ2luYWwgaW50ZW50aW9uIHdh
cyB0byBhZGRyZXNzIHNvbWUgbWVtb3J5IGFuZCBwZXJmb3JtYW5jZQorICAgICAgICBwcm9ibGVt
cy4gVGhpcyBzZXJ2ZXIgZG9lc24ndCBkbyB0aGF0LCBidXQgaG9wZWZ1bGx5IHdpbGwgbWFrZSBp
dAorICAgICAgICBwb3NzaWJsZS4KKworICAgICAgICBUaGUgaW1tZWRpYXRlIGJlbmVmaXRzIG9m
IHRoaXMgY29kZSBvdmVyIHRoZSBQeXRob24gY29kZSBhcmU6CisgICAgICAgIC1UaGUgY29kZSBp
cyB0aG9yb3VnaGx5IHVuaXQgdGVzdGVkLgorICAgICAgICAtVGhlIHRlc3RzIGNhbiBiZSBydW4g
d2l0aG91dCBuZWVkaW5nIHRvIG1hbmdsZSB5b3VyIFBZVEhPTlBBVEgKKyAgICAgICAgb3IgZXZl
biBnZXR0aW5nIHRoZSBhcHBlbmdpbmUgU0RLLiBZb3UganVzdCBuZWVkIGdvdGVzdC4KKworICAg
ICAgICBUaGlzIGNvZGUgZG9lc24ndCBtYXRjaCBvdGhlciBXZWJLaXQgc3R5bGUgYmVjYXVzZSBH
byBzdHlsZQorICAgICAgICBpcyBzdHJpY3RseSBjb250cm9sbGVkIGJ5IGdvZm10IGFuZCBpdCBk
b2Vzbid0IG1ha2Ugc2Vuc2UgdG8KKyAgICAgICAgZGVwYXJ0IGZyb20gdGhhdC4KKworICAgICAg
ICAqIFRlc3RzRGFzaGJvYXJkU2VydmVyL2FwcC55YW1sOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0
c0Rhc2hib2FyZFNlcnZlci9iYXNlL01ha2VmaWxlOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0c0Rh
c2hib2FyZFNlcnZlci9iYXNlL2Jhc2UuZ286IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJv
YXJkU2VydmVyL2Jhc2UvYmFzZV90ZXN0LmdvOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0c0Rhc2hi
b2FyZFNlcnZlci9iYXNlL2h0dHAuZ286IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJvYXJk
U2VydmVyL2Jhc2UvaHR0cF90ZXN0LmdvOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0c0Rhc2hib2Fy
ZFNlcnZlci9iYXNlL2pzb24uZ286IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJvYXJkU2Vy
dmVyL2Jhc2UvanNvbl90ZXN0LmdvOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0c0Rhc2hib2FyZFNl
cnZlci9ydW4vcnVuLmdvOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0c0Rhc2hib2FyZFNlcnZlci9z
dGF0aWMtZGFzaGJvYXJkcy9MSUNFTlNFLmR5Z3JhcGgudHh0OiBBZGRlZC4KKyAgICAgICAgKiBU
ZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9SRUFETUUuZHlncmFwaC50eHQ6
IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L1JFQURNRS53ZWJ0cmVlbWFwLnR4dDogQWRkZWQuCisgICAgICAgICogVGVzdHNEYXNoYm9hcmRT
ZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvYWdncmVnYXRlX3Jlc3VsdHMuaHRtbDogQWRkZWQuCisg
ICAgICAgICogVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvYnVpbGRlcnMu
anM6IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9h
cmRzL2Rhc2hib2FyZF9iYXNlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0c0Rhc2hib2FyZFNl
cnZlci9zdGF0aWMtZGFzaGJvYXJkcy9keWdyYXBoLWNvbWJpbmVkLmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBUZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFz
aGJvYXJkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRp
Yy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdGVzdHMuanM6IEFkZGVkLgorICAgICAg
ICAqIFRlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3dlYnRyZWVtYXAuanM6
IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJvYXJkU2VydmVyL3RlbXBsYXRlcy9maWxlbGlz
dC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0c0Rhc2hib2FyZFNlcnZlci90ZW1wbGF0ZXMv
ZmlsZWxpc3QuanNvbnA6IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJvYXJkU2VydmVyL3Rl
bXBsYXRlcy9tZW51Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJvYXJkU2VydmVy
L3RlbXBsYXRlcy91cGxvYWRmb3JtLmh0bWw6IEFkZGVkLgorCiAyMDExLTExLTI5ICBPamFuIFZh
ZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTGlzdCBvZiBidWlsZGVycyBpbiB0
aGUgZmxha2luZXNzIGRhc2hib2FyZCBpcyBvdXQgb2YgZGF0ZQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdHNEYXNoYm9hcmRTZXJ2ZXIvYXBwLnlhbWwgYi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZl
ci9hcHAueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZTIxNzZhOWZiMGM1NmQxMzFkMWE3MzJmNWQwMGMwNmQ5
NDkzZTgyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvYXBw
LnlhbWwKQEAgLTAsMCArMSwxNCBAQAorYXBwbGljYXRpb246IHRlc3RzZGFzaGJvYXJkCit2ZXJz
aW9uOiAxCitydW50aW1lOiBnbworYXBpX3ZlcnNpb246IDMKKworaGFuZGxlcnM6CistIHVybDog
L3N0eWxlc2hlZXRzCisgIHN0YXRpY19kaXI6IHN0eWxlc2hlZXRzCisKKy0gdXJsOiAvZGFzaGJv
YXJkcworICBzdGF0aWNfZGlyOiBzdGF0aWMtZGFzaGJvYXJkcworCistIHVybDogLy4qCisgIHNj
cmlwdDogX2dvX2FwcApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvYmFz
ZS9NYWtlZmlsZSBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL2Jhc2UvTWFrZWZpbGUKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZGNlMzMwNTllZGE0NmEwNDU1Y2NkOGU1YmMxZTcxYTMxYTgwZDViNwotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL2Jhc2UvTWFrZWZpbGUKQEAg
LTAsMCArMSw5IEBACitpbmNsdWRlICQoR09ST09UKS9zcmMvTWFrZS5pbmMKKworVEFSRz1iYXNl
CitHT0ZJTEVTPVwKKwliYXNlLmdvXAorCWh0dHAuZ29cCisJanNvbi5nb1wKKworaW5jbHVkZSAk
KEdPUk9PVCkvc3JjL01ha2UucGtnClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvYmFzZS9iYXNlLmdvIGIvVG9vbHMvVGVz
dHNEYXNoYm9hcmRTZXJ2ZXIvYmFzZS9iYXNlLmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2N2Q2MWQ3NmYyZmIx
MWEzMzc3ZjllNWE0N2RhOTZhZDIwYzVlMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
c0Rhc2hib2FyZFNlcnZlci9iYXNlL2Jhc2UuZ28KQEAgLTAsMCArMSw3NCBAQAorcGFja2FnZSBi
YXNlCisKK2ltcG9ydCAoCisJImlvIgorCSJydW50aW1lL2RlYnVnIgorCSJvcyIKKykKKworLy8g
VGhpcyB3YXMgcGlja2VkIGZhaXJseSBhcmJpdHJhcmlseS4KK2NvbnN0IFJFQURfR1JBTlVMQVJJ
VFkgPSA0MDk2CisKK2Z1bmMgRXJyb3IodmFsdWUgaW50ZXJmYWNle30pIG9zLkVycm9yIHsKKwlp
ZiB2YWx1ZSA9PSBuaWwgeworCQlyZXR1cm4gbmlsCisJfQorCXZhciBtZXNzYWdlIHN0cmluZwor
CXN3aXRjaCB0eXBlZFZhbHVlIDo9IHZhbHVlLih0eXBlKSB7CisJY2FzZSBzdHJpbmc6CisJCW1l
c3NhZ2UgPSB0eXBlZFZhbHVlICsgIlxuIgorCWNhc2Ugb3MuRXJyb3I6CisJCW1lc3NhZ2UgPSB0
eXBlZFZhbHVlLlN0cmluZygpICsgIlxuIgorCWRlZmF1bHQ6CisJCW1lc3NhZ2UgPSAiIgorCX0K
KwlyZXR1cm4gb3MuTmV3RXJyb3IobWVzc2FnZSArIHN0cmluZyhkZWJ1Zy5TdGFjaygpKSkKK30K
KworZnVuYyBNdWx0aUVycm9yKGVycm9ycyAuLi5vcy5FcnJvcikgb3MuRXJyb3IgeworCW1lc3Nh
Z2UgOj0gIiIKKwlmb3IgXywgZXJyIDo9IHJhbmdlIGVycm9ycyB7CisJCWlmIGVyciAhPSBuaWwg
eworCQkJbWVzc2FnZSA9IGVyci5TdHJpbmcoKSArICJcblxuIiArIG1lc3NhZ2UKKwkJfQorCX0K
KwlpZiBtZXNzYWdlID09ICIiIHsKKwkJcmV0dXJuIG5pbAorCX0KKwlyZXR1cm4gb3MuTmV3RXJy
b3IobWVzc2FnZSkKK30KKworZnVuYyBSZWFkQnl0ZXMocmVhZGVyIGlvLlJlYWRlcikgKFtdYnl0
ZSwgb3MuRXJyb3IpIHsKKwlieXRlcyA6PSBtYWtlKFtdYnl0ZSwgUkVBRF9HUkFOVUxBUklUWSkK
Kwl2YXIgZnVsbFJlc3VsdCBbXWJ5dGUKKwlmb3IgeworCQljb3VudFJlYWQsIGVyciA6PSByZWFk
ZXIuUmVhZChieXRlcykKKwkJaWYgY291bnRSZWFkID09IDAgeworCQkJYnJlYWsKKwkJfQorCQlp
ZiBlcnIgIT0gbmlsIHsKKwkJCXJldHVybiBieXRlcywgRXJyb3IoZXJyKQorCQl9CisJCWZ1bGxS
ZXN1bHQgPSBhcHBlbmQoZnVsbFJlc3VsdCwgYnl0ZXNbOmNvdW50UmVhZF0uLi4pCisJfQorCXJl
dHVybiBmdWxsUmVzdWx0LCBuaWwKK30KKworZnVuYyBXcml0ZUJ5dGVzKHRvIGlvLldyaXRlciwg
ZnJvbSBpby5SZWFkZXIpIG9zLkVycm9yIHsKKwlieXRlcyA6PSBtYWtlKFtdYnl0ZSwgUkVBRF9H
UkFOVUxBUklUWSkKKwlmb3IgeworCQljb3VudFJlYWQsIGVyciA6PSBmcm9tLlJlYWQoYnl0ZXMp
CisJCWlmIGNvdW50UmVhZCA9PSAwIHsKKwkJCWJyZWFrCisJCX0KKworCQlpZiBlcnIgIT0gbmls
IHsKKwkJCXJldHVybiBFcnJvcihlcnIpCisJCX0KKworCQlpZiBfLCBlcnIgPSB0by5Xcml0ZShi
eXRlc1s6Y291bnRSZWFkXSk7IGVyciAhPSBuaWwgeworCQkJcmV0dXJuIEVycm9yKGVycikKKwkJ
fQorCX0KKwlyZXR1cm4gbmlsCit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0c0Rhc2hib2FyZFNl
cnZlci9iYXNlL2Jhc2VfdGVzdC5nbyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL2Jhc2Uv
YmFzZV90ZXN0LmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMTk3ZDgyZTk1YjY0MzFkNmRlODFjZWZkZGZlYmUx
ZDcyMTk3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9i
YXNlL2Jhc2VfdGVzdC5nbwpAQCAtMCwwICsxLDYxIEBACitwYWNrYWdlIGJhc2UKKworaW1wb3J0
ICgKKwkiYnl0ZXMiCisJInN0cmluZ3MiCisJInRlc3RpbmciCispCisKK2Z1bmMgYXNzZXJ0RXF1
YWwodCAqdGVzdGluZy5ULCBhY3R1YWwgaW50ZXJmYWNle30sIGV4cGVjdGVkIGludGVyZmFjZXt9
KSB7CisJaWYgZXhwZWN0ZWQgIT0gYWN0dWFsIHsKKwkJdC5FcnJvcmYoIkV4cGVjdGVkOlxuJyVz
J1xuZ290OlxuJyVzJyIsIGV4cGVjdGVkLCBhY3R1YWwpCisJfQorfQorCitmdW5jIGFzc2VydENv
bnRhaW5zKHQgKnRlc3RpbmcuVCwgYWN0dWFsIHN0cmluZywgc3Vic3RyaW5nIHN0cmluZykgewor
CWlmICFzdHJpbmdzLkNvbnRhaW5zKGFjdHVhbCwgc3Vic3RyaW5nKSB7CisJCXQuRXJyb3JmKCIl
cyBzaG91bGQgY29udGFpbiAlcyciLCBhY3R1YWwsIHN1YnN0cmluZykKKwl9Cit9CisKK2Z1bmMg
VGVzdFJlYWRCeXRlcyh0ICp0ZXN0aW5nLlQpIHsKKwkvLyBGSVhNRTogVGVzdCBhIHJlYWRlciB0
aGF0IHJldHVybnMgYW4gRXJyb3IuCisJZGF0YSA6PSBzdHJpbmdzLlJlcGVhdCgiYSIsIFJFQURf
R1JBTlVMQVJJVFkpICsgImIiICsgc3RyaW5ncy5SZXBlYXQoImMiLCBSRUFEX0dSQU5VTEFSSVRZ
KQorCWlmIHN0ciwgZXJyIDo9IFJlYWRCeXRlcyhzdHJpbmdzLk5ld1JlYWRlcihkYXRhKSk7IGVy
ciAhPSBuaWwgeworCQl0LkVycm9yZihlcnIuU3RyaW5nKCkpCisJfSBlbHNlIHsKKwkJYXNzZXJ0
RXF1YWwodCwgc3RyaW5nKHN0ciksIGRhdGEpCisJfQorCisJZGF0YSA9ICJhYmMiCisJaWYgc3Ry
LCBlcnIgOj0gUmVhZEJ5dGVzKHN0cmluZ3MuTmV3UmVhZGVyKGRhdGEpKTsgZXJyICE9IG5pbCB7
CisJCXQuRXJyb3JmKGVyci5TdHJpbmcoKSkKKwl9IGVsc2UgeworCQlhc3NlcnRFcXVhbCh0LCBz
dHJpbmcoc3RyKSwgZGF0YSkKKwl9CisKKwlkYXRhID0gIiIKKwlpZiBzdHIsIGVyciA6PSBSZWFk
Qnl0ZXMoc3RyaW5ncy5OZXdSZWFkZXIoZGF0YSkpOyBlcnIgIT0gbmlsIHsKKwkJdC5FcnJvcmYo
ZXJyLlN0cmluZygpKQorCX0gZWxzZSB7CisJCWFzc2VydEVxdWFsKHQsIHN0cmluZyhzdHIpLCBk
YXRhKQorCX0KK30KKworZnVuYyBUZXN0V3JpdGVCeXRlcyh0ICp0ZXN0aW5nLlQpIHsKKwkvLyBG
SVhNRTogVGVzdCBhIHJlYWRlciB0aGF0IHJldHVybnMgYW4gRXJyb3IuCisJZGF0YSA6PSBzdHJp
bmdzLlJlcGVhdCgiYSIsIFJFQURfR1JBTlVMQVJJVFkpICsgImIiICsgc3RyaW5ncy5SZXBlYXQo
ImMiLCBSRUFEX0dSQU5VTEFSSVRZKQorCWJ1ZmZlciA6PSBieXRlcy5OZXdCdWZmZXJTdHJpbmco
IiIpCisJV3JpdGVCeXRlcyhidWZmZXIsIHN0cmluZ3MuTmV3UmVhZGVyKGRhdGEpKQorCWFzc2Vy
dEVxdWFsKHQsIHN0cmluZyhidWZmZXIuQnl0ZXMoKSksIGRhdGEpCisKKwlkYXRhID0gImFiYyIK
KwlidWZmZXIgPSBieXRlcy5OZXdCdWZmZXJTdHJpbmcoIiIpCisJV3JpdGVCeXRlcyhidWZmZXIs
IHN0cmluZ3MuTmV3UmVhZGVyKGRhdGEpKQorCWFzc2VydEVxdWFsKHQsIHN0cmluZyhidWZmZXIu
Qnl0ZXMoKSksIGRhdGEpCisKKwlkYXRhID0gIiIKKwlidWZmZXIgPSBieXRlcy5OZXdCdWZmZXJT
dHJpbmcoIiIpCisJV3JpdGVCeXRlcyhidWZmZXIsIHN0cmluZ3MuTmV3UmVhZGVyKGRhdGEpKQor
CWFzc2VydEVxdWFsKHQsIHN0cmluZyhidWZmZXIuQnl0ZXMoKSksIGRhdGEpCit9CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9iYXNlL2h0dHAuZ28gYi9Ub29scy9UZXN0
c0Rhc2hib2FyZFNlcnZlci9iYXNlL2h0dHAuZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQ3MDQyMzM1YjM0NGU3
N2EyNmIyZGU2MDlmM2JiZjk2ODEzMDcwMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3Rz
RGFzaGJvYXJkU2VydmVyL2Jhc2UvaHR0cC5nbwpAQCAtMCwwICsxLDE3NyBAQAorcGFja2FnZSBi
YXNlCisKK2ltcG9ydCAoCisJImZtdCIKKwkiaHR0cCIKKwkiaW8iCisJIm1pbWUvbXVsdGlwYXJ0
IgorCSJyZWdleHAiCisJInJ1bnRpbWUvZGVidWciCisJInN0cmNvbnYiCisJIm9zIgorKQorCisv
LyBQaWNrZWQgYSB2ZXJ5IGxhcmdlIG51bWJlci4gMTBNQiBzaG91bGQgYmUgcGxlbnR5LgorLy8g
SW4gdGhlb3J5LCB3aGVuIHRoaXMgbnVtYmVyIGlzIGV4Y2VlZGVkIHRoZSByZXN0IG9mIHRoZSBm
b3JtIGlzIHdyaXR0ZW4gdG8gZGlzay4KKy8vIEluIHByYWN0aWNlLCBvbiBhcHBlbmdpbmUsIHlv
dSBqdXN0IGdldCBhIG5pbCBNdWx0aXBhcnRGb3JtIGFuZCBhbgorLy8gIm9wZXJhdGlvbiBub3Qg
cGVybWl0dGVkIiBlcnJvci4KK2NvbnN0IE1BWF9NRU1PUllfRk9SX0ZPUk0gPSAxMCA8PCAyMAor
Y29uc3QgTUFTVEVSID0gIm1hc3RlciIKK2NvbnN0IEJVSUxERVIgPSAiYnVpbGRlciIKK2NvbnN0
IEZJTEUgPSAiZmlsZSIKK2NvbnN0IE5BTUUgPSAibmFtZSIKK2NvbnN0IFRFU1RfVFlQRSA9ICJ0
ZXN0dHlwZSIKK2NvbnN0IExJTUlUID0gImxpbWl0IgorY29uc3QgVEVTVF9MSVNUX0pTT04gPSAi
dGVzdGxpc3Rqc29uIgorY29uc3QgS0VZID0gImtleSIKK2NvbnN0IENBTExCQUNLID0gImNhbGxi
YWNrIgorCit0eXBlIFRlc3RGaWxlUXVlcnlEYXRhIHN0cnVjdCB7CisJQnVpbGRlciAgICAgIHN0
cmluZworCU1hc3RlciAgICAgICBzdHJpbmcKKwlUZXN0VHlwZSAgICAgc3RyaW5nCisJQ2FsbGJh
Y2sgICAgIHN0cmluZworCU5hbWUgICAgICAgICBzdHJpbmcKKwlLZXkgICAgICAgICAgc3RyaW5n
CisJTGltaXQgICAgICAgIGludAorCVRlc3RMaXN0SnNvbiBib29sCit9CisKK3R5cGUgVXBsb2Fk
Rm9ybURhdGEgc3RydWN0IHsKKwlCdWlsZGVyICBzdHJpbmcKKwlNYXN0ZXIgICBzdHJpbmcKKwlU
ZXN0VHlwZSBzdHJpbmcKKwlGaWxlcyAgICBbXSptdWx0aXBhcnQuRmlsZUhlYWRlcgorfQorCitm
dW5jIHNlcnZlSHRtbCh3cml0ZXIgaHR0cC5SZXNwb25zZVdyaXRlciwgc3RhdHVzIGludCwgaHRt
bCAuLi5zdHJpbmcpIHsKKwl3cml0ZXIuSGVhZGVyKCkuU2V0KCJDb250ZW50LVR5cGUiLCAidGV4
dC9odG1sIikKKwl3cml0ZXIuV3JpdGVIZWFkZXIoc3RhdHVzKQorCWZvciBfLCBzdHIgOj0gcmFu
Z2UgaHRtbCB7CisJCWZtdC5GcHJpbnRmKHdyaXRlciwgc3RyKQorCX0KK30KKworZnVuYyBTZXJ2
ZTQwMyh3cml0ZXIgaHR0cC5SZXNwb25zZVdyaXRlciwgaHRtbCAuLi5zdHJpbmcpIHsKKwlzZXJ2
ZUh0bWwod3JpdGVyLCA0MDMsIGh0bWwuLi4pCit9CisKK2Z1bmMgU2VydmU0MDQod3JpdGVyIGh0
dHAuUmVzcG9uc2VXcml0ZXIsIGh0bWwgLi4uc3RyaW5nKSB7CisJc2VydmVIdG1sKHdyaXRlciwg
NDA0LCBodG1sLi4uKQorfQorCitmdW5jIFNlcnZlNTAwKHdyaXRlciBodHRwLlJlc3BvbnNlV3Jp
dGVyLCBodG1sIC4uLnN0cmluZykgeworCXNlcnZlSHRtbCh3cml0ZXIsIDUwMCwgaHRtbC4uLikK
KwlmbXQuRnByaW50KHdyaXRlciwgIlxuIitzdHJpbmcoZGVidWcuU3RhY2soKSkpCit9CisKK2Z1
bmMgU2VydmUyMDAod3JpdGVyIGh0dHAuUmVzcG9uc2VXcml0ZXIsIGh0bWwgLi4uc3RyaW5nKSB7
CisJd3JpdGVyLkhlYWRlcigpLlNldCgiQ29udGVudC1UeXBlIiwgInRleHQvaHRtbCIpCisJZm9y
IF8sIHN0ciA6PSByYW5nZSBodG1sIHsKKwkJZm10LkZwcmludCh3cml0ZXIsIHN0cikKKwl9Cit9
CisKK2Z1bmMgUGFyc2VUZXN0RmlsZVF1ZXJ5RGF0YShyZXF1ZXN0ICpodHRwLlJlcXVlc3QpIChU
ZXN0RmlsZVF1ZXJ5RGF0YSwgb3MuRXJyb3IpIHsKKwl2YXIgZGF0YSBUZXN0RmlsZVF1ZXJ5RGF0
YQorCisJcXVlcnlQYXJhbWV0ZXJzIDo9IHJlcXVlc3QuVVJMLlF1ZXJ5KCkKKwljYWxsYmFjayA6
PSBxdWVyeVBhcmFtZXRlcnMuR2V0KENBTExCQUNLKQorCWlmIGNhbGxiYWNrICE9ICIiIHsKKwkJ
aWYgbWF0Y2hlZCwgXyA6PSByZWdleHAuTWF0Y2hTdHJpbmcoIl5bQS1aYS16MC05X10rJCIsIGNh
bGxiYWNrKTsgIW1hdGNoZWQgeworCQkJcmV0dXJuIGRhdGEsIEVycm9yKCJJbnZhbGlkIGNhbGxi
YWNrIG5hbWU6ICIgKyBjYWxsYmFjaykKKwkJfQorCX0KKworCWxpbWl0IDo9IDEwMAorCWlmIHF1
ZXJ5UGFyYW1ldGVycy5HZXQoTElNSVQpICE9ICIiIHsKKwkJbnVtYmVyLCBlcnIgOj0gc3RyY29u
di5BdG9pKHF1ZXJ5UGFyYW1ldGVycy5HZXQoTElNSVQpKQorCQlpZiBlcnIgPT0gbmlsIHsKKwkJ
CWxpbWl0ID0gbnVtYmVyCisJCX0KKwl9CisKKwkvLyBGSVhNRTogRGlzYWxsb3cgc3VwcGx5aW5n
IEtFWSB3aXRoIHBhcmFtZXRlcnMgb3RoZXIgdGhhbiBDQUxMQkFDSyBhbmQgVEVTVF9MSVNUX0pT
T04KKwlyZXR1cm4gVGVzdEZpbGVRdWVyeURhdGF7CisJCUJ1aWxkZXI6ICAgICAgcXVlcnlQYXJh
bWV0ZXJzLkdldChCVUlMREVSKSwKKwkJTWFzdGVyOiAgICAgICBxdWVyeVBhcmFtZXRlcnMuR2V0
KE1BU1RFUiksCisJCVRlc3RUeXBlOiAgICAgcXVlcnlQYXJhbWV0ZXJzLkdldChURVNUX1RZUEUp
LAorCQlDYWxsYmFjazogICAgIGNhbGxiYWNrLAorCQlOYW1lOiAgICAgICAgIHF1ZXJ5UGFyYW1l
dGVycy5HZXQoTkFNRSksCisJCUtleTogICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzLkdldChLRVkp
LAorCQlMaW1pdDogICAgICAgIGxpbWl0LAorCQlUZXN0TGlzdEpzb246IHF1ZXJ5UGFyYW1ldGVy
cy5HZXQoVEVTVF9MSVNUX0pTT04pICE9ICIiLAorCX0sIG5pbAorfQorCitmdW5jIFBhcnNlVXBs
b2FkRm9ybURhdGEocmVxdWVzdCAqaHR0cC5SZXF1ZXN0KSAoVXBsb2FkRm9ybURhdGEsIG9zLkVy
cm9yKSB7CisJdmFyIGZvcm1EYXRhIFVwbG9hZEZvcm1EYXRhCisJaWYgZXJyIDo9IHJlcXVlc3Qu
UGFyc2VNdWx0aXBhcnRGb3JtKE1BWF9NRU1PUllfRk9SX0ZPUk0pOyBlcnIgIT0gbmlsIHsKKwkJ
cmV0dXJuIGZvcm1EYXRhLCBFcnJvcihlcnIpCisJfQorCisJZm9ybSA6PSByZXF1ZXN0Lk11bHRp
cGFydEZvcm0KKwlpZiBmb3JtID09IG5pbCB7CisJCXJldHVybiBmb3JtRGF0YSwgRXJyb3IoIkZB
SUw6IG1pc3NpbmcgcG9zdCBkYXRhLiIpCisJfQorCisJYnVpbGRlciA6PSBmb3JtLlZhbHVlW0JV
SUxERVJdCisJaWYgYnVpbGRlciA9PSBuaWwgfHwgYnVpbGRlclswXSA9PSAiIiB7CisJCXJldHVy
biBmb3JtRGF0YSwgRXJyb3IoIkZBSUw6IG1pc3NpbmcgJ2J1aWxkZXInIHF1ZXJ5IHBhcmFtZXRl
ci4iKQorCX0KKworCW1hc3RlciA6PSBmb3JtLlZhbHVlW01BU1RFUl0KKwlpZiBtYXN0ZXIgPT0g
bmlsIHx8IG1hc3RlclswXSA9PSAiIiB7CisJCXJldHVybiBmb3JtRGF0YSwgRXJyb3IoIkZBSUw6
IG1pc3NpbmcgJ21hc3RlcicgcXVlcnkgcGFyYW1ldGVyLiIpCisJfQorCisJdGVzdFR5cGUgOj0g
Zm9ybS5WYWx1ZVtURVNUX1RZUEVdCisJaWYgdGVzdFR5cGUgPT0gbmlsIHx8IHRlc3RUeXBlWzBd
ID09ICIiIHsKKwkJcmV0dXJuIGZvcm1EYXRhLCBFcnJvcigiRkFJTDogbWlzc2luZyAndGVzdHR5
cGUnIHF1ZXJ5IHBhcmFtZXRlci4iKQorCX0KKworCWZpbGVzIDo9IGZvcm0uRmlsZVtGSUxFXQor
CWlmIGZpbGVzID09IG5pbCB7CisJCXJldHVybiBmb3JtRGF0YSwgRXJyb3IoIkZBSUw6IG1pc3Np
bmcgJ2ZpbGUnIHBvc3QgZGF0YS4iKQorCX0KKworCWZvcm1EYXRhID0gVXBsb2FkRm9ybURhdGF7
CisJCUJ1aWxkZXI6ICBidWlsZGVyWzBdLAorCQlNYXN0ZXI6ICAgbWFzdGVyWzBdLAorCQlUZXN0
VHlwZTogdGVzdFR5cGVbMF0sCisJCUZpbGVzOiAgICBmaWxlcywKKwl9CisJcmV0dXJuIGZvcm1E
YXRhLCBuaWwKK30KKworZnVuYyBTZXJ2ZUpzb24od3JpdGVyIGh0dHAuUmVzcG9uc2VXcml0ZXIs
IGpzb25SZWFkZXIgaW8uUmVhZGVyLCBjYWxsYmFjayBzdHJpbmcpIHsKKwlqc29uQnl0ZXMsIGVy
ciA6PSBSZWFkQnl0ZXMoanNvblJlYWRlcikKKwlpZiBlcnIgIT0gbmlsIHsKKwkJU2VydmU1MDAo
d3JpdGVyLCAiQ291bGRuJ3QgcmVhZCBqc29uIGRhdGE6XG4iK2Vyci5TdHJpbmcoKSkKKwkJcmV0
dXJuCisJfQorCisJd3JpdGVyLkhlYWRlcigpLlNldCgiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0
aW9uL2pzb24iKQorCisJaXNQdXJlSnNvbiA6PSByZWdleHAuTXVzdENvbXBpbGUoIl57Lip9JCIp
Lk1hdGNoKGpzb25CeXRlcykKKwlpZiBjYWxsYmFjayA9PSAiIiB7CisJCWlmICFpc1B1cmVKc29u
IHsKKwkJCWpzb25CeXRlcyA9IFN0cmlwSnNvbnBDYWxsYmFjayhqc29uQnl0ZXMpCisJCX0KKwkJ
Zm10LkZwcmludCh3cml0ZXIsIHN0cmluZyhqc29uQnl0ZXMpKQorCQlyZXR1cm4KKwl9CisKKwlp
ZiBpc1B1cmVKc29uIHsKKwkJZm10LkZwcmludCh3cml0ZXIsIGNhbGxiYWNrKyIoIikKKwl9IGVs
c2UgeworCQljYWxsYmFja1JlZ2V4cCA6PSByZWdleHAuTXVzdENvbXBpbGUoIl5bQS1aYS16MC05
X10rWyhdIikKKwkJanNvbkJ5dGVzID0gY2FsbGJhY2tSZWdleHAuUmVwbGFjZUFsbChqc29uQnl0
ZXMsIFtdYnl0ZShjYWxsYmFjaysiKCIpKQorCX0KKworCWZtdC5GcHJpbnQod3JpdGVyLCBzdHJp
bmcoanNvbkJ5dGVzKSkKKworCWlmIGlzUHVyZUpzb24geworCQlmbXQuRnByaW50KHdyaXRlciwg
IikiKQorCX0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL2Jhc2Uv
aHR0cF90ZXN0LmdvIGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvYmFzZS9odHRwX3Rlc3Qu
Z28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDVmMzRmZDU5YTcwYzFmYmNlYmQ0NGE2YzkyOGY3OTI0MjM4NWViMgot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL2Jhc2UvaHR0cF90
ZXN0LmdvCkBAIC0wLDAgKzEsMjMwIEBACitwYWNrYWdlIGJhc2UKKworaW1wb3J0ICgKKwkiYnl0
ZXMiCisJImZtdCIKKwkiaHR0cCIKKwkibWltZS9tdWx0aXBhcnQiCisJIm9zIgorCSJzdHJpbmdz
IgorCSJ0ZXN0aW5nIgorKQorCitmdW5jIG5ld01vY2tIdHRwUmVzcG9uc2VXcml0ZXIoKSAqbW9j
a0h0dHBSZXNwb25zZVdyaXRlciB7CisJbW9ja1dyaXRlciA6PSBuZXcobW9ja0h0dHBSZXNwb25z
ZVdyaXRlcikKKwltb2NrV3JpdGVyLmhlYWRlciA9IG1ha2UoaHR0cC5IZWFkZXIpCisJbW9ja1dy
aXRlci5idWZmZXIgPSBuZXcoYnl0ZXMuQnVmZmVyKQorCXJldHVybiBtb2NrV3JpdGVyCit9CisK
K3R5cGUgbW9ja0h0dHBSZXNwb25zZVdyaXRlciBzdHJ1Y3QgeworCWhlYWRlciBodHRwLkhlYWRl
cgorCWJ1ZmZlciAqYnl0ZXMuQnVmZmVyCisJc3RhdHVzIGludAorfQorCitmdW5jICh3ICptb2Nr
SHR0cFJlc3BvbnNlV3JpdGVyKSBIZWFkZXIoKSBodHRwLkhlYWRlciB7CisJcmV0dXJuIHcuaGVh
ZGVyCit9CisKK2Z1bmMgKHcgKm1vY2tIdHRwUmVzcG9uc2VXcml0ZXIpIFdyaXRlKGRhdGEgW11i
eXRlKSAoaW50LCBvcy5FcnJvcikgeworCXJldHVybiB3LmJ1ZmZlci5Xcml0ZShkYXRhKQorfQor
CitmdW5jICh3ICptb2NrSHR0cFJlc3BvbnNlV3JpdGVyKSBXcml0ZUhlYWRlcihjb2RlIGludCkg
eworCXcuc3RhdHVzID0gY29kZQorfQorCitmdW5jICh3IG1vY2tIdHRwUmVzcG9uc2VXcml0ZXIp
IFN0cmluZygpIHN0cmluZyB7CisJcmV0dXJuIHN0cmluZyh3LmJ1ZmZlci5CeXRlcygpKQorfQor
CitmdW5jIFRlc3RTZXJ2ZTQwNCh0ICp0ZXN0aW5nLlQpIHsKKwltb2NrV3JpdGVyIDo9IG5ld01v
Y2tIdHRwUmVzcG9uc2VXcml0ZXIoKQorCVNlcnZlNDA0KG1vY2tXcml0ZXIsICJmb28iLCAiYmFy
IikKKwlhc3NlcnRFcXVhbCh0LCBtb2NrV3JpdGVyLlN0cmluZygpLCAiZm9vYmFyIikKKwlhc3Nl
cnRFcXVhbCh0LCBtb2NrV3JpdGVyLnN0YXR1cywgNDA0KQorfQorCitmdW5jIFRlc3RTZXJ2ZTUw
MCh0ICp0ZXN0aW5nLlQpIHsKKwltb2NrV3JpdGVyIDo9IG5ld01vY2tIdHRwUmVzcG9uc2VXcml0
ZXIoKQorCVNlcnZlNTAwKG1vY2tXcml0ZXIsICJmb28iLCAiYmFyIikKKwlhc3NlcnRDb250YWlu
cyh0LCBtb2NrV3JpdGVyLlN0cmluZygpLCAiZm9vYmFyIikKKwlhc3NlcnRFcXVhbCh0LCBtb2Nr
V3JpdGVyLnN0YXR1cywgNTAwKQorfQorCitmdW5jIFRlc3RQYXJzZVRlc3RGaWxlUXVlcnlEYXRh
KHQgKnRlc3RpbmcuVCkgeworCXJlcXVlc3QsIF8gOj0gaHR0cC5OZXdSZXF1ZXN0KCJHRVQiLCAi
aHR0cDovL2Zvby5jb20vdGVzdGZpbGUiLCBuaWwpCisJaWYgcmVzdWx0LCBlcnIgOj0gUGFyc2VU
ZXN0RmlsZVF1ZXJ5RGF0YShyZXF1ZXN0KTsgZXJyICE9IG5pbCB7CisJCXQuRXJyb3JmKGVyci5T
dHJpbmcoKSkKKwl9IGVsc2UgeworCQlhc3NlcnRFcXVhbCh0LCByZXN1bHQuQnVpbGRlciwgIiIp
CisJCWFzc2VydEVxdWFsKHQsIHJlc3VsdC5NYXN0ZXIsICIiKQorCQlhc3NlcnRFcXVhbCh0LCBy
ZXN1bHQuVGVzdFR5cGUsICIiKQorCQlhc3NlcnRFcXVhbCh0LCByZXN1bHQuQ2FsbGJhY2ssICIi
KQorCQlhc3NlcnRFcXVhbCh0LCByZXN1bHQuTmFtZSwgIiIpCisJCWFzc2VydEVxdWFsKHQsIHJl
c3VsdC5LZXksICIiKQorCQlhc3NlcnRFcXVhbCh0LCByZXN1bHQuTGltaXQsIDEwMCkKKwkJYXNz
ZXJ0RXF1YWwodCwgcmVzdWx0LlRlc3RMaXN0SnNvbiwgZmFsc2UpCisJfQorCisJcmVxdWVzdCwg
XyA9IGh0dHAuTmV3UmVxdWVzdCgiR0VUIiwgImh0dHA6Ly9mb28uY29tL3Rlc3RmaWxlP2J1aWxk
ZXI9bXlidWlsZGVyJm1hc3Rlcj1teW1hc3RlciZ0ZXN0dHlwZT1teXRlc3R0eXBlJm5hbWU9bXlu
YW1lLmpzb24ma2V5PW15a2V5JmNhbGxiYWNrPW15Y2FsbGJhY2smbGltaXQ9NSZ0ZXN0bGlzdGpz
b249dHJ1ZSIsIG5pbCkKKwlpZiByZXN1bHQsIGVyciA6PSBQYXJzZVRlc3RGaWxlUXVlcnlEYXRh
KHJlcXVlc3QpOyBlcnIgIT0gbmlsIHsKKwkJdC5FcnJvcmYoZXJyLlN0cmluZygpKQorCX0gZWxz
ZSB7CisJCWFzc2VydEVxdWFsKHQsIHJlc3VsdC5CdWlsZGVyLCAibXlidWlsZGVyIikKKwkJYXNz
ZXJ0RXF1YWwodCwgcmVzdWx0Lk1hc3RlciwgIm15bWFzdGVyIikKKwkJYXNzZXJ0RXF1YWwodCwg
cmVzdWx0LlRlc3RUeXBlLCAibXl0ZXN0dHlwZSIpCisJCWFzc2VydEVxdWFsKHQsIHJlc3VsdC5D
YWxsYmFjaywgIm15Y2FsbGJhY2siKQorCQlhc3NlcnRFcXVhbCh0LCByZXN1bHQuTmFtZSwgIm15
bmFtZS5qc29uIikKKwkJYXNzZXJ0RXF1YWwodCwgcmVzdWx0LktleSwgIm15a2V5IikKKwkJYXNz
ZXJ0RXF1YWwodCwgcmVzdWx0LkxpbWl0LCA1KQorCQlhc3NlcnRFcXVhbCh0LCByZXN1bHQuVGVz
dExpc3RKc29uLCB0cnVlKQorCX0KKworfQorCitmdW5jIFRlc3RQYXJzZVVwbG9hZEZvcm1EYXRh
KHQgKnRlc3RpbmcuVCkgeworCWZpbGVEYXRhIDo9IGAKKy0tTXlCb3VuZGFyeQorQ29udGVudC1E
aXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaWxlIjsgZmlsZW5hbWU9ImZpcnN0ZmlsZS50
eHQiCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworRklSU1QtRklMRS1DT05URU5UUworLS1N
eUJvdW5kYXJ5CitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImZpbGUiOyBm
aWxlbmFtZT0ic2Vjb25kZmlsZS50eHQiCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworU0VD
T05ELUZJTEUtQ09OVEVOVFMKK2AKKworCXZhbHVlIDo9IGAtLU15Qm91bmRhcnkKK0NvbnRlbnQt
RGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iJXMiCisKKyVzCitgCisKKwlkYXRhRW5kIDo9
ICItLSIgKyBmb3JtQm91bmRhcnkgKyAiXG4iCisJYnVpbGRlciA6PSBmbXQuU3ByaW50Zih2YWx1
ZSwgQlVJTERFUiwgIm15QnVpbGRlciIpCisJbWFzdGVyIDo9IGZtdC5TcHJpbnRmKHZhbHVlLCBN
QVNURVIsICJteU1hc3RlciIpCisJdGVzdFR5cGUgOj0gZm10LlNwcmludGYodmFsdWUsIFRFU1Rf
VFlQRSwgIm15VGVzdFR5cGUiKQorCisJZGF0YSA6PSBmaWxlRGF0YSArIGJ1aWxkZXIgKyBtYXN0
ZXIgKyB0ZXN0VHlwZSArIGRhdGFFbmQKKwlyZXF1ZXN0IDo9IG5ld1Bvc3RSZXF1ZXN0KHQsIGRh
dGEpCisJaWYgcmVzdWx0LCBlcnIgOj0gUGFyc2VVcGxvYWRGb3JtRGF0YShyZXF1ZXN0KTsgZXJy
ICE9IG5pbCB7CisJCXQuRXJyb3JmKGVyci5TdHJpbmcoKSkKKwl9IGVsc2UgeworCQlhc3NlcnRF
cXVhbCh0LCByZXN1bHQuQnVpbGRlciwgIm15QnVpbGRlciIpCisJCWFzc2VydEVxdWFsKHQsIHJl
c3VsdC5NYXN0ZXIsICJteU1hc3RlciIpCisJCWFzc2VydEVxdWFsKHQsIHJlc3VsdC5UZXN0VHlw
ZSwgIm15VGVzdFR5cGUiKQorCQlhc3NlcnRFcXVhbCh0LCBsZW4ocmVzdWx0LkZpbGVzKSwgMikK
Kwl9CisKKwlkYXRhID0gYnVpbGRlciArIG1hc3RlciArIHRlc3RUeXBlICsgZGF0YUVuZAorCXJl
cXVlc3QgPSBuZXdQb3N0UmVxdWVzdCh0LCBkYXRhKQorCWlmIF8sIGVyciA6PSBQYXJzZVVwbG9h
ZEZvcm1EYXRhKHJlcXVlc3QpOyBlcnIgIT0gbmlsIHsKKwkJYXNzZXJ0Q29udGFpbnModCwgZXJy
LlN0cmluZygpLCBGSUxFKQorCX0gZWxzZSB7CisJCXQuRXJyb3JmKCJGaWxlcyBzaG91bGQgYmUg
cmVxdWlyZWQuIikKKwl9CisKKwlkYXRhID0gZmlsZURhdGEgKyBtYXN0ZXIgKyB0ZXN0VHlwZSAr
IGRhdGFFbmQKKwlyZXF1ZXN0ID0gbmV3UG9zdFJlcXVlc3QodCwgZGF0YSkKKwlpZiBfLCBlcnIg
Oj0gUGFyc2VVcGxvYWRGb3JtRGF0YShyZXF1ZXN0KTsgZXJyICE9IG5pbCB7CisJCWFzc2VydENv
bnRhaW5zKHQsIGVyci5TdHJpbmcoKSwgQlVJTERFUikKKwl9IGVsc2UgeworCQl0LkVycm9yZigi
QnVpbGRlciBzaG91bGQgYmUgcmVxdWlyZWQuIikKKwl9CisKKwlkYXRhID0gZmlsZURhdGEgKyBi
dWlsZGVyICsgdGVzdFR5cGUgKyBkYXRhRW5kCisJcmVxdWVzdCA9IG5ld1Bvc3RSZXF1ZXN0KHQs
IGRhdGEpCisJaWYgXywgZXJyIDo9IFBhcnNlVXBsb2FkRm9ybURhdGEocmVxdWVzdCk7IGVyciAh
PSBuaWwgeworCQlhc3NlcnRDb250YWlucyh0LCBlcnIuU3RyaW5nKCksIE1BU1RFUikKKwl9IGVs
c2UgeworCQl0LkVycm9yZigiTWFzdGVyIHNob3VsZCBiZSByZXF1aXJlZC4iKQorCX0KKworCWRh
dGEgPSBmaWxlRGF0YSArIGJ1aWxkZXIgKyBtYXN0ZXIgKyBkYXRhRW5kCisJcmVxdWVzdCA9IG5l
d1Bvc3RSZXF1ZXN0KHQsIGRhdGEpCisJaWYgXywgZXJyIDo9IFBhcnNlVXBsb2FkRm9ybURhdGEo
cmVxdWVzdCk7IGVyciAhPSBuaWwgeworCQlhc3NlcnRDb250YWlucyh0LCBlcnIuU3RyaW5nKCks
IFRFU1RfVFlQRSkKKwl9IGVsc2UgeworCQl0LkVycm9yZigiVGVzdFR5cGUgc2hvdWxkIGJlIHJl
cXVpcmVkLiIpCisJfQorCisJZGF0YSA9IGZpbGVEYXRhICsgZm10LlNwcmludGYodmFsdWUsIEJV
SUxERVIsICIiKSArIG1hc3RlciArIHRlc3RUeXBlICsgZGF0YUVuZAorCXJlcXVlc3QgPSBuZXdQ
b3N0UmVxdWVzdCh0LCBkYXRhKQorCWlmIF8sIGVyciA6PSBQYXJzZVVwbG9hZEZvcm1EYXRhKHJl
cXVlc3QpOyBlcnIgIT0gbmlsIHsKKwkJYXNzZXJ0Q29udGFpbnModCwgZXJyLlN0cmluZygpLCBC
VUlMREVSKQorCX0gZWxzZSB7CisJCXQuRXJyb3JmKCJCdWlsZGVyIHNob3VsZCBiZSBub24tZW1w
dHkuIikKKwl9CisKKwlkYXRhID0gZmlsZURhdGEgKyBmbXQuU3ByaW50Zih2YWx1ZSwgTUFTVEVS
LCAiIikgKyBidWlsZGVyICsgdGVzdFR5cGUgKyBkYXRhRW5kCisJcmVxdWVzdCA9IG5ld1Bvc3RS
ZXF1ZXN0KHQsIGRhdGEpCisJaWYgXywgZXJyIDo9IFBhcnNlVXBsb2FkRm9ybURhdGEocmVxdWVz
dCk7IGVyciAhPSBuaWwgeworCQlhc3NlcnRDb250YWlucyh0LCBlcnIuU3RyaW5nKCksIE1BU1RF
UikKKwl9IGVsc2UgeworCQl0LkVycm9yZigiTWFzdGVyIHNob3VsZCBiZSBub24tZW1wdHkuIikK
Kwl9CisKKwlkYXRhID0gZmlsZURhdGEgKyBmbXQuU3ByaW50Zih2YWx1ZSwgVEVTVF9UWVBFLCAi
IikgKyBtYXN0ZXIgKyBidWlsZGVyICsgZGF0YUVuZAorCXJlcXVlc3QgPSBuZXdQb3N0UmVxdWVz
dCh0LCBkYXRhKQorCWlmIF8sIGVyciA6PSBQYXJzZVVwbG9hZEZvcm1EYXRhKHJlcXVlc3QpOyBl
cnIgIT0gbmlsIHsKKwkJYXNzZXJ0Q29udGFpbnModCwgZXJyLlN0cmluZygpLCBURVNUX1RZUEUp
CisJfSBlbHNlIHsKKwkJdC5FcnJvcmYoIlRlc3RUeXBlIHNob3VsZCBiZSBub24tZW1wdHkuIikK
Kwl9Cit9CisKK2Z1bmMgbmV3UG9zdFJlcXVlc3QodCAqdGVzdGluZy5ULCBwb3N0RGF0YSBzdHJp
bmcpICpodHRwLlJlcXVlc3QgeworCXJlcXVlc3QsIF8gOj0gaHR0cC5OZXdSZXF1ZXN0KCJQT1NU
IiwgImh0dHA6Ly9mb28uY29tL2Jhci5odG1sIiwgc3RyaW5ncy5OZXdSZWFkZXIocG9zdERhdGEp
KQorCXJlcXVlc3QuSGVhZGVyLlNldCgiQ29udGVudC1UeXBlIiwgIm11bHRpcGFydC9mb3JtLWRh
dGE7IGJvdW5kYXJ5PSIgKyBmb3JtQm91bmRhcnkpCisJcmV0dXJuIHJlcXVlc3QKK30KKworY29u
c3QgZm9ybUJvdW5kYXJ5ID0gIk15Qm91bmRhcnkiCisKK2Z1bmMgbmV3Rm9ybSh0ICp0ZXN0aW5n
LlQsIGRhdGEgc3RyaW5nKSAqbXVsdGlwYXJ0LkZvcm0geworCXJlYWRlciA6PSBtdWx0aXBhcnQu
TmV3UmVhZGVyKGJ5dGVzLk5ld0J1ZmZlclN0cmluZyhkYXRhKSwgZm9ybUJvdW5kYXJ5KQorCWZv
cm0sIGVyciA6PSByZWFkZXIuUmVhZEZvcm0oMjUpCisJaWYgZXJyICE9IG5pbCB7CisJCXQuRmF0
YWwoIlJlYWRGb3JtOiIsIGVycikKKwl9CisJcmV0dXJuIGZvcm0KK30KKworZnVuYyBUZXN0U2Vy
dmVKc29uKHQgKnRlc3RpbmcuVCkgeworCS8vIEZJWE1FOiBUZXN0IGEgcmVhZGVyIHRoYXQgcmV0
dXJucyBhbiBFcnJvci4KKwltb2NrV3JpdGVyIDo9IG5ld01vY2tIdHRwUmVzcG9uc2VXcml0ZXIo
KQorCWpzb25TdHJpbmcgOj0gYHsiZm9vIjoiYmFyIn1gCisJY2FsbGJhY2sgOj0gIiIKKwlTZXJ2
ZUpzb24obW9ja1dyaXRlciwgc3RyaW5ncy5OZXdSZWFkZXIoanNvblN0cmluZyksIGNhbGxiYWNr
KQorCWFzc2VydEVxdWFsKHQsIG1vY2tXcml0ZXIuU3RyaW5nKCksIGpzb25TdHJpbmcpCisJYXNz
ZXJ0RXF1YWwodCwgbW9ja1dyaXRlci5zdGF0dXMsIDApCisJYXNzZXJ0RXF1YWwodCwgbW9ja1dy
aXRlci5IZWFkZXIoKS5HZXQoIkNvbnRlbnQtVHlwZSIpLCAiYXBwbGljYXRpb24vanNvbiIpCisK
Kwltb2NrV3JpdGVyID0gbmV3TW9ja0h0dHBSZXNwb25zZVdyaXRlcigpCisJanNvblN0cmluZyA9
IGB7ImZvbyI6ImJhciJ9YAorCWNhbGxiYWNrID0gImRvRm9vIgorCVNlcnZlSnNvbihtb2NrV3Jp
dGVyLCBzdHJpbmdzLk5ld1JlYWRlcihqc29uU3RyaW5nKSwgY2FsbGJhY2spCisJYXNzZXJ0RXF1
YWwodCwgbW9ja1dyaXRlci5TdHJpbmcoKSwgImRvRm9vKCIranNvblN0cmluZysiKSIpCisJYXNz
ZXJ0RXF1YWwodCwgbW9ja1dyaXRlci5zdGF0dXMsIDApCisJYXNzZXJ0RXF1YWwodCwgbW9ja1dy
aXRlci5IZWFkZXIoKS5HZXQoIkNvbnRlbnQtVHlwZSIpLCAiYXBwbGljYXRpb24vanNvbiIpCisK
Kwltb2NrV3JpdGVyID0gbmV3TW9ja0h0dHBSZXNwb25zZVdyaXRlcigpCisJanNvblN0cmluZyA9
IGBkb0Jhcih7ImZvbyI6ImJhciJ9KWAKKwljYWxsYmFjayA9ICIiCisJU2VydmVKc29uKG1vY2tX
cml0ZXIsIHN0cmluZ3MuTmV3UmVhZGVyKGpzb25TdHJpbmcpLCBjYWxsYmFjaykKKwlhc3NlcnRF
cXVhbCh0LCBtb2NrV3JpdGVyLlN0cmluZygpLCBgeyJmb28iOiJiYXIifWApCisJYXNzZXJ0RXF1
YWwodCwgbW9ja1dyaXRlci5zdGF0dXMsIDApCisJYXNzZXJ0RXF1YWwodCwgbW9ja1dyaXRlci5I
ZWFkZXIoKS5HZXQoIkNvbnRlbnQtVHlwZSIpLCAiYXBwbGljYXRpb24vanNvbiIpCisKKwltb2Nr
V3JpdGVyID0gbmV3TW9ja0h0dHBSZXNwb25zZVdyaXRlcigpCisJanNvblN0cmluZyA9IGBkb0Jh
cih7ImZvbyI6ImJhciJ9KWAKKwljYWxsYmFjayA9ICJkb0ZvbyIKKwlTZXJ2ZUpzb24obW9ja1dy
aXRlciwgc3RyaW5ncy5OZXdSZWFkZXIoanNvblN0cmluZyksIGNhbGxiYWNrKQorCWFzc2VydEVx
dWFsKHQsIG1vY2tXcml0ZXIuU3RyaW5nKCksIGBkb0Zvbyh7ImZvbyI6ImJhciJ9KWApCisJYXNz
ZXJ0RXF1YWwodCwgbW9ja1dyaXRlci5zdGF0dXMsIDApCisJYXNzZXJ0RXF1YWwodCwgbW9ja1dy
aXRlci5IZWFkZXIoKS5HZXQoIkNvbnRlbnQtVHlwZSIpLCAiYXBwbGljYXRpb24vanNvbiIpCit9
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9iYXNlL2pzb24uZ28gYi9U
b29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9iYXNlL2pzb24uZ28KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTNkYzc0
MjFmZTg1Y2JhOGE3YzY2MTdhMDIyMmQ2YmMwN2MxZDQwYwotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL2Jhc2UvanNvbi5nbwpAQCAtMCwwICsxLDMxNyBAQAor
cGFja2FnZSBiYXNlCisKK2ltcG9ydCAoCisJImJ5dGVzIgorCSJmbXQiCisJImlvIgorCSJqc29u
IgorCSJtaW1lL211bHRpcGFydCIKKwkicmVnZXhwIgorCSJzdHJpbmdzIgorCSJvcyIKKykKKwor
Y29uc3QgVEVTVFNfS0VZID0gInRlc3RzIgorY29uc3QgVElNRVNfS0VZID0gInRpbWVzIgorY29u
c3QgUkVTVUxUU19LRVkgPSAicmVzdWx0cyIKK2NvbnN0IFZFUlNJT05fS0VZID0gInZlcnNpb24i
Citjb25zdCBDVVJSRU5UX0pTT05fVkVSU0lPTiA9IDQKKwordHlwZSBSZXN1bHRzSnNvbiBtYXBb
c3RyaW5nXWludGVyZmFjZXt9CisKK2Z1bmMgKG0gUmVzdWx0c0pzb24pIEJ1aWxkZXIoKSBzdHJp
bmcgeworCWZvciBrIDo9IHJhbmdlIG0geworCQlpZiBrICE9IFZFUlNJT05fS0VZIHsKKwkJCXJl
dHVybiBrCisJCX0KKwl9CisJcmV0dXJuICIiCit9CisKK2Z1bmMgKG0gUmVzdWx0c0pzb24pIFZl
cnNpb24oKSBpbnQgeworCWZvciBrLCB2IDo9IHJhbmdlIG0geworCQlpZiBrID09IFZFUlNJT05f
S0VZIHsKKwkJCXJldHVybiBpbnQodi4oZmxvYXQ2NCkpCisJCX0KKwl9CisJcmV0dXJuIDAKK30K
KworZnVuYyAobSBSZXN1bHRzSnNvbikgQnVpbGRlckRhdGEoKSBtYXBbc3RyaW5nXWludGVyZmFj
ZXt9IHsKKwlyZXR1cm4gbVttLkJ1aWxkZXIoKV0uKG1hcFtzdHJpbmddaW50ZXJmYWNle30pCit9
CisKK2Z1bmMgKG0gUmVzdWx0c0pzb24pIFRlc3RzUm9vdCgpIHRlc3RKc29uIHsKKwlyZXR1cm4g
dGVzdEpzb257dmFsOiBtLkJ1aWxkZXJEYXRhKClbVEVTVFNfS0VZXX0KK30KKwordHlwZSB0ZXN0
SnNvbiBzdHJ1Y3QgeworCXZhbCBpbnRlcmZhY2V7fQorfQorCitmdW5jIChmIHRlc3RKc29uKSBJ
c0RpcmVjdG9yeSgpIGJvb2wgeworCXJldHVybiBmLkFzTWFwKClbUkVTVUxUU19LRVldID09IG5p
bAorfQorCitmdW5jIChmIHRlc3RKc29uKSBBc01hcCgpIG1hcFtzdHJpbmddaW50ZXJmYWNle30g
eworCXJldHVybiBmLnZhbC4obWFwW3N0cmluZ11pbnRlcmZhY2V7fSkKK30KKworZnVuYyAoZiB0
ZXN0SnNvbikgQ2hpbGRyZW4oKSBbXXRlc3RKc29uIHsKKwl2YXIgZnMgW110ZXN0SnNvbgorCWZv
ciBfLCB2IDo9IHJhbmdlIGYuQXNNYXAoKSB7CisJCWZzID0gYXBwZW5kKGZzLCB0ZXN0SnNvbnt2
YWw6IHZ9KQorCX0KKwlyZXR1cm4gZnMKK30KKworZnVuYyAoZiB0ZXN0SnNvbikgRGVsZXRlUmVz
dWx0c0FuZFRpbWVzKCkgeworCXRlc3RNYXAgOj0gZi5Bc01hcCgpCisJdGVzdE1hcFtSRVNVTFRT
X0tFWV0gPSAwLCBmYWxzZQorCXRlc3RNYXBbVElNRVNfS0VZXSA9IDAsIGZhbHNlCit9CisKK2Z1
bmMgU3RyaXBKc29ucENhbGxiYWNrKGpzb24gW11ieXRlKSBbXWJ5dGUgeworCXZhciBlbXB0eUJ5
dGUgW11ieXRlCisJanNvbiA9IHJlZ2V4cC5NdXN0Q29tcGlsZSgiXltBLVphLXowLTlfXStbKF0i
KS5SZXBsYWNlQWxsKGpzb24sIGVtcHR5Qnl0ZSkKKwlyZXR1cm4gcmVnZXhwLk11c3RDb21waWxl
KCJbKV1bO1x0XG5cZlxyIF0qJCIpLlJlcGxhY2VBbGwoanNvbiwgZW1wdHlCeXRlKQorfQorCitm
dW5jIHJlbW92ZVJlc3VsdHNBbmRUaW1lcyh0ZXN0cyB0ZXN0SnNvbikgeworCWZvciBfLCB0ZXN0
IDo9IHJhbmdlIHRlc3RzLkNoaWxkcmVuKCkgeworCQlpZiB0ZXN0LklzRGlyZWN0b3J5KCkgewor
CQkJcmVtb3ZlUmVzdWx0c0FuZFRpbWVzKHRlc3QpCisJCX0gZWxzZSB7CisJCQl0ZXN0LkRlbGV0
ZVJlc3VsdHNBbmRUaW1lcygpCisJCX0KKwl9Cit9CisKK2Z1bmMgcmVkdWNlVG9UZXN0TGlzdChi
dWlsZGVyIHN0cmluZywganNvbiBSZXN1bHRzSnNvbikgUmVzdWx0c0pzb24geworCWJ1aWxkZXJE
YXRhIDo9IGpzb24uQnVpbGRlckRhdGEoKQorCWZvciBrZXksIF8gOj0gcmFuZ2UgYnVpbGRlckRh
dGEgeworCQlpZiBrZXkgIT0gVEVTVFNfS0VZIHsKKwkJCWJ1aWxkZXJEYXRhW2tleV0gPSAwLCBm
YWxzZQorCQl9CisJfQorCXJlbW92ZVJlc3VsdHNBbmRUaW1lcyhqc29uLlRlc3RzUm9vdCgpKQor
CXJldHVybiBqc29uCit9CisKK2Z1bmMgVGVzdEZpbGVKc29uKHJlYWRlciBpby5SZWFkZXIpIChS
ZXN1bHRzSnNvbiwgb3MuRXJyb3IpIHsKKwl2YXIganNvbk9iamVjdCBSZXN1bHRzSnNvbgorCWVy
ciA6PSBqc29uLk5ld0RlY29kZXIocmVhZGVyKS5EZWNvZGUoJmpzb25PYmplY3QpCisJaWYgZXJy
ICE9IG5pbCB7CisJCWVyciA9IEVycm9yKGVycikKKwl9CisJcmV0dXJuIGpzb25PYmplY3QsIGVy
cgorfQorCitmdW5jIFdyaXRlVGVzdExpc3RKc29uKHdyaXRlciBpby5Xcml0ZXIsIHJlYWRlciBp
by5SZWFkZXIsIGJ1aWxkZXIgc3RyaW5nLCBjYWxsYmFja05hbWUgc3RyaW5nKSBvcy5FcnJvciB7
CisJanNvbk9iamVjdCwgZXJyIDo9IFRlc3RGaWxlSnNvbihyZWFkZXIpCisJaWYgZXJyICE9IG5p
bCB7CisJCXJldHVybiBFcnJvcihlcnIpCisJfQorCXJlZHVjZVRvVGVzdExpc3QoYnVpbGRlciwg
anNvbk9iamVjdCkKKworCWlmIGNhbGxiYWNrTmFtZSAhPSAiIiB7CisJCWZtdC5GcHJpbnQod3Jp
dGVyLCBjYWxsYmFja05hbWUrIigiKQorCX0KKwlqc29uLk5ld0VuY29kZXIod3JpdGVyKS5FbmNv
ZGUoanNvbk9iamVjdCkKKwlpZiBjYWxsYmFja05hbWUgIT0gIiIgeworCQlmbXQuRnByaW50KHdy
aXRlciwgIikiKQorCX0KKwlyZXR1cm4gbmlsCit9CisKK2Z1bmMgbWVyZ2VSdW5MZW5ndGhFbmNv
ZGVkKGFnZ3JlZ2F0ZSBpbnRlcmZhY2V7fSwgaW5jcmVtZW50YWwgaW50ZXJmYWNle30sIG51bVJ1
bnMgaW50KSAoaW50ZXJmYWNle30sIGJvb2wpIHsKKwlhZ2dyZWdhdGVBcnJheSA6PSBhZ2dyZWdh
dGUuKFtdaW50ZXJmYWNle30pCisJaW5jcmVtZW50YWxBcnJheSA6PSBpbmNyZW1lbnRhbC4oW11p
bnRlcmZhY2V7fSkKKworCWFnZ3JlZ2F0ZUZpcnN0VmFsdWUgOj0gYWdncmVnYXRlQXJyYXlbMF0u
KFtdaW50ZXJmYWNle30pCisJaW5jcmVtZXRhbEZpcnN0VmFsdWUgOj0gaW5jcmVtZW50YWxBcnJh
eVswXS4oW11pbnRlcmZhY2V7fSkKKworCWlmIGFnZ3JlZ2F0ZUZpcnN0VmFsdWVbMV0gPT0gaW5j
cmVtZXRhbEZpcnN0VmFsdWVbMV0geworCQlhZ2dyZWdhdGVGaXJzdFZhbHVlWzBdID0gYWdncmVn
YXRlRmlyc3RWYWx1ZVswXS4oZmxvYXQ2NCkgKyAxCisJfSBlbHNlIHsKKwkJYWdncmVnYXRlQXJy
YXkgPSBhcHBlbmQoaW5jcmVtZW50YWxBcnJheSwgYWdncmVnYXRlQXJyYXkuLi4pCisJfQorCisJ
ZmluYWxJbmRleCA6PSAtMQorCXNob3VsZFJlbW92ZSA6PSB0cnVlCisJZm9yIGluZGV4LCB2YWx1
ZSA6PSByYW5nZSBhZ2dyZWdhdGVBcnJheSB7CisJCXZhbHVlQXJyYXkgOj0gdmFsdWUuKFtdaW50
ZXJmYWNle30pCisJCW51bVJ1bnNJblZhbHVlIDo9IGludCh2YWx1ZUFycmF5WzBdLihmbG9hdDY0
KSkKKworCQlzd2l0Y2ggdmFsdWUgOj0gdmFsdWVBcnJheVsxXS4odHlwZSkgeworCQljYXNlIGZs
b2F0NjQ6CisJCQlzaG91bGRSZW1vdmUgPSBzaG91bGRSZW1vdmUgJiYgaW50KHZhbHVlKSA9PSAw
CisJCWNhc2Ugc3RyaW5nOgorCQkJc2hvdWxkUmVtb3ZlID0gc2hvdWxkUmVtb3ZlICYmICh2YWx1
ZSA9PSAiTiIgfHwgdmFsdWUgPT0gIlAiKQorCQl9CisKKwkJaWYgbnVtUnVuc0luVmFsdWUgPj0g
bnVtUnVucyB7CisJCQlmaW5hbEluZGV4ID0gaW5kZXgKKwkJCXZhbHVlQXJyYXlbMF0gPSBudW1S
dW5zCisJCX0gZWxzZSB7CisJCQludW1SdW5zIC09IG51bVJ1bnNJblZhbHVlCisJCX0KKwl9CisK
KwlpZiBmaW5hbEluZGV4ICE9IC0xIHsKKwkJcmV0dXJuIGFnZ3JlZ2F0ZUFycmF5WzAgOiBmaW5h
bEluZGV4KzFdLCBzaG91bGRSZW1vdmUKKwl9CisJcmV0dXJuIGFnZ3JlZ2F0ZUFycmF5LCBzaG91
bGRSZW1vdmUKK30KKwordmFyIG5vRGF0YVJlc3VsdCA9IG1hcFtzdHJpbmddaW50ZXJmYWNle317
CisJInJlc3VsdHMiOiBbXWludGVyZmFjZXt9e1tdaW50ZXJmYWNle317ZmxvYXQ2NCgxKSwgIk4i
fX0sCisJInRpbWVzIjogICBbXWludGVyZmFjZXt9e1tdaW50ZXJmYWNle317ZmxvYXQ2NCgxKSwg
ZmxvYXQ2NCgwKX19LAorfQorCitmdW5jIG1lcmdlUmVzdWx0c0FuZFRpbWVzKGFnZ3JlZ2F0ZVRl
c3RzIG1hcFtzdHJpbmddaW50ZXJmYWNle30sIGluY3JlbWVudGFsVGVzdHMgbWFwW3N0cmluZ11p
bnRlcmZhY2V7fSwgbnVtUnVucyBpbnQpIG9zLkVycm9yIHsKKwlhbGxUZXN0cyA6PSBtYWtlKG1h
cFtzdHJpbmddYm9vbCkKKwlmb3IgdGVzdE5hbWUsIF8gOj0gcmFuZ2UgYWdncmVnYXRlVGVzdHMg
eworCQlhbGxUZXN0c1t0ZXN0TmFtZV0gPSB0cnVlCisJfQorCWZvciB0ZXN0TmFtZSwgXyA6PSBy
YW5nZSBpbmNyZW1lbnRhbFRlc3RzIHsKKwkJYWxsVGVzdHNbdGVzdE5hbWVdID0gdHJ1ZQorCX0K
KworCWZvciB0ZXN0TmFtZSwgXyA6PSByYW5nZSBhbGxUZXN0cyB7CisJCWFnZ3JlZ2F0ZSwgYWdn
cmVnYXRlRXhpc3RzIDo9IGFnZ3JlZ2F0ZVRlc3RzW3Rlc3ROYW1lXS4obWFwW3N0cmluZ11pbnRl
cmZhY2V7fSkKKwkJaW5jcmVtZW50YWwsIGluY3JlbWVudGFsRXhpc3RzIDo9IGluY3JlbWVudGFs
VGVzdHNbdGVzdE5hbWVdLihtYXBbc3RyaW5nXWludGVyZmFjZXt9KQorCisJCWlmICFhZ2dyZWdh
dGVFeGlzdHMgJiYgIWluY3JlbWVudGFsRXhpc3RzIHsKKwkJCXJldHVybiBFcnJvcigiVGVzdCBu
YW1lIGRvZXMgbm90IGV4aXN0IGluIGVpdGhlciBhZ2dyZWdhdGUgb3IgaW5jcmVtZW50YWwgSlNP
TjogIiArIHRlc3ROYW1lKQorCQl9CisKKwkJaWYgIWFnZ3JlZ2F0ZUV4aXN0cyB7CisJCQlhZ2dy
ZWdhdGVUZXN0c1t0ZXN0TmFtZV0gPSBpbmNyZW1lbnRhbAorCQkJY29udGludWUKKwkJfQorCisJ
CWlmIGFnZ3JlZ2F0ZVJlc3VsdCwgYWdncmVnYXRlUmVzdWx0RXhpc3RzIDo9IGFnZ3JlZ2F0ZVtS
RVNVTFRTX0tFWV07ICFhZ2dyZWdhdGVSZXN1bHRFeGlzdHMgeworCQkJaWYgZXJyIDo9IG1lcmdl
UmVzdWx0c0FuZFRpbWVzKGFnZ3JlZ2F0ZSwgaW5jcmVtZW50YWwsIG51bVJ1bnMpOyBlcnIgIT0g
bmlsIHsKKwkJCQlyZXR1cm4gZXJyCisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAhaW5jcmVtZW50
YWxFeGlzdHMgeworCQkJCWluY3JlbWVudGFsID0gbm9EYXRhUmVzdWx0CisJCQl9CisKKwkJCWlu
Y3JlbWVudGFsUmVzdWx0LCBpbmNyZW1lbnRhbFJlc3VsdEV4aXN0cyA6PSBpbmNyZW1lbnRhbFtS
RVNVTFRTX0tFWV0KKwkJCWlmICFpbmNyZW1lbnRhbFJlc3VsdEV4aXN0cyB7CisJCQkJcmV0dXJu
IEVycm9yKCJBZ2dyZWdhdGUgSlNPTiBoYXMgYSByZXN1bHRzIGVudHJ5IHdoZXJlIHRoZSBpbmNy
ZW1lbnRhbCBKU09OIGRvZXMgbm90IGZvciAiICsgdGVzdE5hbWUpCisJCQl9CisKKwkJCWFnZ3Jl
Z2F0ZVRpbWVzLCBhZ2dyZWdhdGVUaW1lc0V4aXN0cyA6PSBhZ2dyZWdhdGVbVElNRVNfS0VZXQor
CQkJaWYgIWFnZ3JlZ2F0ZVRpbWVzRXhpc3RzIHsKKwkJCQlyZXR1cm4gRXJyb3IoIkFnZ3JlZ2F0
ZSBKU09OIGhhcyBhIHJlc3VsdHMgZW50cnksIGJ1dCBubyB0aW1lcyBlbnRyeSBmb3IgIiArIHRl
c3ROYW1lKQorCQkJfQorCisJCQlpbmNyZW1lbnRhbFRpbWUsIGluY3JlbWVudGFsVGltZUV4aXN0
cyA6PSBpbmNyZW1lbnRhbFtUSU1FU19LRVldCisJCQlpZiAhaW5jcmVtZW50YWxUaW1lRXhpc3Rz
IHsKKwkJCQlyZXR1cm4gRXJyb3IoIkFnZ3JlZ2F0ZSBKU09OIGhhcyBhIHRpbWVzIGVudHJ5IHdo
ZXJlIHRoZSBpbmNyZW1lbnRhbCBKU09OIGRvZXMgbm90IGZvciAiICsgdGVzdE5hbWUpCisJCQl9
CisKKwkJCW5ld1Jlc3VsdHMsIHNob3VsZFJlbW92ZVJlc3VsdHMgOj0gbWVyZ2VSdW5MZW5ndGhF
bmNvZGVkKGFnZ3JlZ2F0ZVJlc3VsdCwgaW5jcmVtZW50YWxSZXN1bHQsIG51bVJ1bnMpCisJCQlu
ZXdUaW1lcywgc2hvdWxkUmVtb3ZlVGltZXMgOj0gbWVyZ2VSdW5MZW5ndGhFbmNvZGVkKGFnZ3Jl
Z2F0ZVRpbWVzLCBpbmNyZW1lbnRhbFRpbWUsIG51bVJ1bnMpCisKKwkJCWlmIHNob3VsZFJlbW92
ZVJlc3VsdHMgJiYgc2hvdWxkUmVtb3ZlVGltZXMgeworCQkJCWFnZ3JlZ2F0ZVRlc3RzW3Rlc3RO
YW1lXSA9IDAsIGZhbHNlCisJCQl9IGVsc2UgeworCQkJCWFnZ3JlZ2F0ZVRlc3RzW3Rlc3ROYW1l
XSA9IG1hcFtzdHJpbmddaW50ZXJmYWNle317CisJCQkJCSJyZXN1bHRzIjogbmV3UmVzdWx0cywK
KwkJCQkJInRpbWVzIjogICBuZXdUaW1lcywKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJcmV0dXJu
IG5pbAorfQorCitmdW5jIHJlbW92ZUdUZXN0TW9kaWZpZXJzKHRlc3RzIG1hcFtzdHJpbmddaW50
ZXJmYWNle30pIHsKKwlmb3IgbmFtZSwgdmFsdWUgOj0gcmFuZ2UgdGVzdHMgeworCQluZXdOYW1l
IDo9IHN0cmluZ3MuUmVwbGFjZShuYW1lLCAiLkZMQUtZXyIsICIuIiwgMSkKKwkJbmV3TmFtZSA9
IHN0cmluZ3MuUmVwbGFjZShuZXdOYW1lLCAiLkZBSUxTXyIsICIuIiwgMSkKKwkJbmV3TmFtZSA9
IHN0cmluZ3MuUmVwbGFjZShuZXdOYW1lLCAiLk1BWUJFXyIsICIuIiwgMSkKKwkJbmV3TmFtZSA9
IHN0cmluZ3MuUmVwbGFjZShuZXdOYW1lLCAiLkRJU0FCTEVEXyIsICIuIiwgMSkKKwkJaWYgbmV3
TmFtZSA9PSBuYW1lIHsKKwkJCWNvbnRpbnVlCisJCX0KKworCQlpZiB0ZXN0c1tuZXdOYW1lXSA9
PSBuaWwgeworCQkJdGVzdHNbbmV3TmFtZV0gPSB2YWx1ZQorCQkJdGVzdHNbbmFtZV0gPSAwLCBm
YWxzZQorCQl9CisKKwkJcmVzdWx0LCBleGlzdHMgOj0gdmFsdWUuKG1hcFtzdHJpbmddaW50ZXJm
YWNle30pW1JFU1VMVFNfS0VZXQorCQlpZiBleGlzdHMgeworCQkJdGVzdHNbbmFtZV0gPSAwLCBm
YWxzZQorCQkJcnVuVmFsdWUgOj0gcmVzdWx0LihbXWludGVyZmFjZXt9KVswXS4oW11pbnRlcmZh
Y2V7fSlbMV0KKwkJCWlmIHJ1blZhbHVlICE9ICJOIiB7CisJCQkJdGVzdHNbbmV3TmFtZV0gPSB2
YWx1ZQorCQkJfQorCQl9CisJfQorfQorCitmdW5jIFdyaXRlTWVyZ2VkSnNvbkZyb21GaWxlSGVh
ZGVyKGFnZ3JlZ2F0ZSBpby5SZWFkZXIsIGluY3JlbWVudGFsICptdWx0aXBhcnQuRmlsZUhlYWRl
ciwgYnVpbGRlciBzdHJpbmcsIG51bVJ1bnMgaW50KSAoKmJ5dGVzLkJ1ZmZlciwgb3MuRXJyb3Ip
IHsKKwlidWZmZXIgOj0gYnl0ZXMuTmV3QnVmZmVyKG1ha2UoW11ieXRlLCAwKSkKKwlpbmNyZW1l
bnRhbEZpbGUsIGVyciA6PSBpbmNyZW1lbnRhbC5PcGVuKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJ
cmV0dXJuIGJ1ZmZlciwgRXJyb3IoZXJyKQorCX0KKwlpZiBlcnIgPSB3cml0ZU1lcmdlZEpzb24o
YnVmZmVyLCBhZ2dyZWdhdGUsIGluY3JlbWVudGFsRmlsZSwgYnVpbGRlciwgbnVtUnVucyk7IGVy
ciAhPSBuaWwgeworCQlyZXR1cm4gYnVmZmVyLCBFcnJvcihlcnIpCisJfQorCWVyciA9IGluY3Jl
bWVudGFsRmlsZS5DbG9zZSgpCisJcmV0dXJuIGJ1ZmZlciwgRXJyb3IoZXJyKQorfQorCitmdW5j
IHdyaXRlTWVyZ2VkSnNvbih3cml0ZXIgaW8uV3JpdGVyLCBhZ2dyZWdhdGVKc29uUmVhZGVyIGlv
LlJlYWRlciwgaW5jcmVtZW50YWxKc29uUmVhZGVyIGlvLlJlYWRlciwgYnVpbGRlciBzdHJpbmcs
IG51bVJ1bnMgaW50KSBvcy5FcnJvciB7CisJYWdncmVnYXRlLCBlcnIgOj0gVGVzdEZpbGVKc29u
KGFnZ3JlZ2F0ZUpzb25SZWFkZXIpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBFcnJvcihl
cnIpCisJfQorCisJaW5jcmVtZW50YWwsIGVyciA6PSBUZXN0RmlsZUpzb24oaW5jcmVtZW50YWxK
c29uUmVhZGVyKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gRXJyb3IoZXJyKQorCX0KKwor
CWlmIGluY3JlbWVudGFsLlZlcnNpb24oKSA8IENVUlJFTlRfSlNPTl9WRVJTSU9OIHsKKwkJcmV0
dXJuIEVycm9yKGZtdC5TcHJpbnRmKCJKU09OIHZlcnNpb24gJWQgbm8gbG9uZ2VyIHN1cHBvcnRl
ZC4iLCBpbmNyZW1lbnRhbC5WZXJzaW9uKCkpKQorCX0KKworCWlmIGFnZ3JlZ2F0ZS5CdWlsZGVy
KCkgIT0gaW5jcmVtZW50YWwuQnVpbGRlcigpIHx8IGluY3JlbWVudGFsLkJ1aWxkZXIoKSAhPSBi
dWlsZGVyIHsKKwkJcmV0dXJuIEVycm9yKGZtdC5TcHJpbnRmKGBCdWlsZGVycyBkb24ndCBtYXRj
aC4gQWdncmVnYXRlIEpTT046ICIlcyIsIGluY3JlbWVudGFsIEpTT04gIiVzIiwgcXVlcnkgcGFy
YW1ldGVyICIlcyIuYCwgYWdncmVnYXRlLkJ1aWxkZXIoKSwgaW5jcmVtZW50YWwuQnVpbGRlcigp
LCBidWlsZGVyKSkKKwl9CisKKwlhZ2dyZWdhdGVbVkVSU0lPTl9LRVldID0gQ1VSUkVOVF9KU09O
X1ZFUlNJT04KKworCWFnZ3JlZ2F0ZURhdGEgOj0gYWdncmVnYXRlLkJ1aWxkZXJEYXRhKCkKKwlp
bmNyZW1lbnRhbERhdGEgOj0gaW5jcmVtZW50YWwuQnVpbGRlckRhdGEoKQorCisJZm9yIGtleSwg
dmFsdWUgOj0gcmFuZ2UgaW5jcmVtZW50YWxEYXRhIHsKKwkJaWYga2V5ICE9IFRFU1RTX0tFWSB7
CisJCQlpbmNyZW1lbnRhbFZhbHVlcyA6PSB2YWx1ZS4oW11pbnRlcmZhY2V7fSkKKwkJCWlmIGxl
bihpbmNyZW1lbnRhbFZhbHVlcykgIT0gMSB7CisJCQkJcmV0dXJuIEVycm9yKGZtdC5TcHJpbnRm
KCJJbmNyZW1lbnRhbCByZXN1bHRzIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIHJ1bidzIHdvcnRo
IG9mIGRhdGEuIEhhZCAlZCBmb3Iga2V5ICVzLiIsIGxlbihpbmNyZW1lbnRhbFZhbHVlcyksIGtl
eSkpCisJCQl9CisJCQluZXdWYWx1ZSA6PSBhcHBlbmQoaW5jcmVtZW50YWxWYWx1ZXMsIGFnZ3Jl
Z2F0ZURhdGFba2V5XS4oW11pbnRlcmZhY2V7fSkuLi4pCisJCQlpZiBsZW4obmV3VmFsdWUpID4g
bnVtUnVucyB7CisJCQkJbmV3VmFsdWUgPSBuZXdWYWx1ZVswOm51bVJ1bnNdCisJCQl9CisJCQlh
Z2dyZWdhdGVEYXRhW2tleV0gPSBuZXdWYWx1ZQorCQl9CisJfQorCisJcmVtb3ZlR1Rlc3RNb2Rp
ZmllcnMoaW5jcmVtZW50YWwuVGVzdHNSb290KCkuQXNNYXAoKSkKKworCW1lcmdlUmVzdWx0c0Fu
ZFRpbWVzKGFnZ3JlZ2F0ZS5UZXN0c1Jvb3QoKS5Bc01hcCgpLCBpbmNyZW1lbnRhbC5UZXN0c1Jv
b3QoKS5Bc01hcCgpLCBudW1SdW5zKQorCWpzb24uTmV3RW5jb2Rlcih3cml0ZXIpLkVuY29kZShh
Z2dyZWdhdGUpCisKKwlyZXR1cm4gbmlsCit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0c0Rhc2hi
b2FyZFNlcnZlci9iYXNlL2pzb25fdGVzdC5nbyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVy
L2Jhc2UvanNvbl90ZXN0LmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5YjNmM2E1YjA4MmE4OTc4ZWI4NDFkZTNl
YWVlNTdkODQ0ODMxOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0c0Rhc2hib2FyZFNl
cnZlci9iYXNlL2pzb25fdGVzdC5nbwpAQCAtMCwwICsxLDY1NiBAQAorcGFja2FnZSBiYXNlCisK
K2ltcG9ydCAoCisJImJ5dGVzIgorCSJmbXQiCisJImpzb24iCisJIm1pbWUvbXVsdGlwYXJ0Igor
CSJzdHJpbmdzIgorCSJ0ZXN0aW5nIgorKQorCitmdW5jIGFzUmVzdWx0c0pzb24odCAqdGVzdGlu
Zy5ULCBqc29uIHN0cmluZykgUmVzdWx0c0pzb24geworCWpzb25PYmplY3QsIGVyciA6PSBUZXN0
RmlsZUpzb24oc3RyaW5ncy5OZXdSZWFkZXIoanNvbikpCisJaWYgZXJyICE9IG5pbCB7CisJCWZt
dC5QcmludGYoZXJyLlN0cmluZygpKQorCQl0LkZhaWxOb3coKQorCX0KKwlyZXR1cm4ganNvbk9i
amVjdAorfQorCitmdW5jIGFzU3RyaW5nKHQgKnRlc3RpbmcuVCwgcmVzdWx0c0pzb24gUmVzdWx0
c0pzb24pIHN0cmluZyB7CisJYnl0ZXMsIGVyciA6PSBqc29uLk1hcnNoYWwocmVzdWx0c0pzb24p
CisJaWYgZXJyICE9IG5pbCB7CisJCWZtdC5QcmludGYoZXJyLlN0cmluZygpKQorCQl0LkZhaWxO
b3coKQorCX0KKwlyZXR1cm4gc3RyaW5nKGJ5dGVzKQorfQorCisvLyBBbGxvd3MgdXMgdG8gd3Jp
dGUgcmVhZGFibGUgZXhwZWN0ZWQgSlNPTiwgYnV0IGdldCB0aGUgc2FtZSB3aGl0ZXNwYWNlIHN0
cmlwcGVkIGFzIHRoZSByZXN1bHRzIEpTT04uCitmdW5jIHJvdW5kVHJpcEpzb24odCAqdGVzdGlu
Zy5ULCBqc29uIHN0cmluZykgc3RyaW5nIHsKKwlyZXR1cm4gYXNTdHJpbmcodCwgYXNSZXN1bHRz
SnNvbih0LCBqc29uKSkKK30KKworZnVuYyBUZXN0U3RyaXBKc29ucENhbGxiYWNrKHQgKnRlc3Rp
bmcuVCkgeworCXN0cmlwcGVkIDo9IHN0cmluZyhTdHJpcEpzb25wQ2FsbGJhY2soW11ieXRlKCJD
QUxMQkFDSyhbY29udGVudF0pIikpKQorCWV4cGVjdGVkIDo9ICJbY29udGVudF0iCisJYXNzZXJ0
RXF1YWwodCwgc3RyaXBwZWQsIGV4cGVjdGVkKQorCisJc3RyaXBwZWQgPSBzdHJpbmcoU3RyaXBK
c29ucENhbGxiYWNrKFtdYnl0ZSgiQ0FMTEJBQ0soW2NvbnRlbnRdKTsgIikpKQorCWFzc2VydEVx
dWFsKHQsIHN0cmlwcGVkLCBleHBlY3RlZCkKKworCXN0cmlwcGVkID0gc3RyaW5nKFN0cmlwSnNv
bnBDYWxsYmFjayhbXWJ5dGUoZXhwZWN0ZWQpKSkKKwlhc3NlcnRFcXVhbCh0LCBzdHJpcHBlZCwg
ZXhwZWN0ZWQpCit9CisKK2Z1bmMgVGVzdFdyaXRlVGVzdExpc3RKc29uKHQgKnRlc3RpbmcuVCkg
eworCWluaXRpYWxKc29uIDo9IGB7CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1
bW15QnVpbGRlciI6IHsKKyAgICAgICAgICAgICJidWlsZHMiOiBbMywgMiwgMV0sCisgICAgICAg
ICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgImZvbyI6IHsKKyAgICAgICAgICAgICAg
ICAgICAgIjAwMS5odG1sIjogeyJyZXN1bHRzIjogW1sxLCAiRiJdXSwgInRpbWVzIjogW1sxLCAw
XV19CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiMDAyLmh0bWwiOiB7InJl
c3VsdHMiOiBbWzEsICJGIl1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH1gCisKKwlidWZmZXIgOj0gYnl0ZXMuTmV3QnVmZmVyU3RyaW5nKCIiKQor
CVdyaXRlVGVzdExpc3RKc29uKGJ1ZmZlciwgc3RyaW5ncy5OZXdSZWFkZXIoaW5pdGlhbEpzb24p
LCAiRHVtbXlCdWlsZGVyIiwgIiIpCisKKwlleHBlY3RlZEpzb24gOj0gcm91bmRUcmlwSnNvbih0
LCBgeworICAgICAgICAidmVyc2lvbiI6IDQsCisgICAgICAgICJEdW1teUJ1aWxkZXIiOiB7Cisg
ICAgICAgICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgImZvbyI6IHsKKyAgICAgICAg
ICAgICAgICAgICAgIjAwMS5odG1sIjoge30KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgICAgICIwMDIuaHRtbCI6IHt9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9YCkK
KworCS8vIFRoaXMgaXMgb2Jub3hpb3VzLCBidXQgdGhlIGpzb24gZW5jb2RlciB0aGF0IFdyaXRl
VGVzdExpc3RKc29uIGNhbGxzIGFkZHMgYW4gZXh0cmEgbmV3bGluZS4KKwlhc3NlcnRFcXVhbCh0
LCBzdHJpbmcoYnVmZmVyLkJ5dGVzKCkpLCBleHBlY3RlZEpzb24rIlxuIikKKworCWNhbGxiYWNr
IDo9ICJGT08iCisJYnVmZmVyID0gYnl0ZXMuTmV3QnVmZmVyU3RyaW5nKCIiKQorCVdyaXRlVGVz
dExpc3RKc29uKGJ1ZmZlciwgc3RyaW5ncy5OZXdSZWFkZXIoaW5pdGlhbEpzb24pLCAiRHVtbXlC
dWlsZGVyIiwgY2FsbGJhY2spCisJYXNzZXJ0RXF1YWwodCwgc3RyaW5nKGJ1ZmZlci5CeXRlcygp
KSwgY2FsbGJhY2srIigiK2V4cGVjdGVkSnNvbisiXG4pIikKK30KKworZnVuYyBUZXN0V3JpdGVN
ZXJnZWRKc29uSW52YWxpZFZhbHVlcyh0ICp0ZXN0aW5nLlQpIHsKKwlidWZmZXIgOj0gYnl0ZXMu
TmV3QnVmZmVyU3RyaW5nKCIiKQorCWVyciA6PSB3cml0ZU1lcmdlZEpzb24oYnVmZmVyLCBzdHJp
bmdzLk5ld1JlYWRlcigiIiksIHN0cmluZ3MuTmV3UmVhZGVyKCIiKSwgIiIsIDUpCisJaWYgZXJy
ID09IG5pbCB7CisJCXQuRXJyb3JmKCJXcml0aW5nIGVtcHR5IHN0cmluZyBzaG91bGQgZmFpbC4i
KQorCX0KKworCWFnZ3JlZ2F0ZSA6PSBgeworICAgICAgICAidmVyc2lvbiI6IDQsCisgICAgICAg
ICJEdW1teUJ1aWxkZXIiOiB7CisgICAgICAgICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAg
ICAgImZvbyI6IHsKKyAgICAgICAgICAgICAgICAgICAgIjAwMS5odG1sIjogeyJyZXN1bHRzIjog
W1sxLCAiRiJdXSwgInRpbWVzIjogW1sxLCAwXV19CisgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAiMDAyLmh0bWwiOiB7InJlc3VsdHMiOiBbWzEsICJGIl1dLCAidGltZXMiOiBb
WzEsIDBdXX0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH1gCisKKwlpbmNyZW1lbnRh
bCA6PSBgeworICAgICAgICAidmVyc2lvbiI6IDQsCisgICAgICAgICJPdGhlckJ1aWxkZXIiOiB7
CisgICAgICAgICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgImZvbyI6IHsKKyAgICAg
ICAgICAgICAgICAgICAgIjAwMS5odG1sIjogeyJyZXN1bHRzIjogW1sxLCAiRiJdXSwgInRpbWVz
IjogW1sxLCAwXV19CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiMDAyLmh0
bWwiOiB7InJlc3VsdHMiOiBbWzEsICJGIl1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH1gCisKKwllcnIgPSB3cml0ZU1lcmdlZEpzb24oYnVmZmVy
LCBzdHJpbmdzLk5ld1JlYWRlcihhZ2dyZWdhdGUpLCBzdHJpbmdzLk5ld1JlYWRlcihpbmNyZW1l
bnRhbCksICJEdW1teUJ1aWxkZXIiLCA1KQorCWlmIGVyciA9PSBuaWwgeworCQl0LkVycm9yZigi
QnVpbGRlciBuYW1lcyBtdXN0IGJlIHRoZSBzYW1lLiIpCisJfQorCisJaW5jcmVtZW50YWwgPSBg
eworICAgICAgICAidmVyc2lvbiI6IDMsCisgICAgICAgICJEdW1teUJ1aWxkZXIiOiB7CisgICAg
ICAgICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgImZvbyI6IHsKKyAgICAgICAgICAg
ICAgICAgICAgIjAwMS5odG1sIjogeyJyZXN1bHRzIjogW1sxLCAiRiJdXSwgInRpbWVzIjogW1sx
LCAwXV19CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiMDAyLmh0bWwiOiB7
InJlc3VsdHMiOiBbWzEsICJGIl1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH1gCisKKwllcnIgPSB3cml0ZU1lcmdlZEpzb24oYnVmZmVyLCBzdHJp
bmdzLk5ld1JlYWRlcihhZ2dyZWdhdGUpLCBzdHJpbmdzLk5ld1JlYWRlcihpbmNyZW1lbnRhbCks
ICJEdW1teUJ1aWxkZXIiLCA1KQorCWlmIGVyciA9PSBuaWwgeworCQl0LkVycm9yZigiVmVyc2lv
bnMgbGVzcyB0aGFuIDQgYXJlIG5vdCBzdXBwb3J0ZWQuIikKKwl9CisKKwlpbmNyZW1lbnRhbCA9
IGB7CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAg
ICAgICAgICAgICJ0ZXN0cyI6IHsKKyAgICAgICAgICAgICAgICAiZm9vIjogeworICAgICAgICAg
ICAgICAgICAgICAiMDAxLmh0bWwiOiB7InJlc3VsdHMiOiBbWzEsICJGIl1dLCAidGltZXMiOiBb
WzEsIDBdXX0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICIwMDIuaHRtbCI6
IHsicmVzdWx0cyI6IFtbMSwgIkYiXV0sICJ0aW1lcyI6IFtbMSwgMF1dfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfWAKKworCWVyciA9IHdyaXRlTWVyZ2VkSnNvbihidWZmZXIsIHN0
cmluZ3MuTmV3UmVhZGVyKGFnZ3JlZ2F0ZSksIHN0cmluZ3MuTmV3UmVhZGVyKGluY3JlbWVudGFs
KSwgIk90aGVyQnVpbGRlciIsIDUpCisJaWYgZXJyID09IG5pbCB7CisJCXQuRXJyb3JmKCJCdWls
ZGVyIGFyZ3VtZW50IHNob3VsZCBtYXRjaCBidWlsZGVyIG5hbWVzIGluIEpTT04uIikKKwl9Cit9
CisKK2Z1bmMgVGVzdFdyaXRlTWVyZ2VkSnNvblNhbWVCdWlsZCh0ICp0ZXN0aW5nLlQpIHsKKwlh
Z2dyZWdhdGUgOj0gYHsKKyAgICAgICAgInZlcnNpb24iOiA0LAorICAgICAgICAiRHVtbXlCdWls
ZGVyIjogeworICAgICAgICAgICAgImJ1aWxkTnVtYmVycyI6IFsiMiIsICIxIl0sCisgICAgICAg
ICAgICAidGVzdHMiOiB7fQorICAgICAgICB9CisgICAgfWAKKworCWluY3JlbWVudGFsIDo9IGB7
CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAgICAg
ICAgICAgICJidWlsZE51bWJlcnMiOiBbIjIiXSwKKyAgICAgICAgICAgICJ0ZXN0cyI6IHt9Cisg
ICAgICAgIH0KKyAgICB9YAorCisJZXhwZWN0ZWQgOj0gcm91bmRUcmlwSnNvbih0LCBgeworICAg
ICAgICAidmVyc2lvbiI6IDQsCisgICAgICAgICJEdW1teUJ1aWxkZXIiOiB7CisgICAgICAgICAg
ICAiYnVpbGROdW1iZXJzIjogWyIyIiwgIjIiLCAiMSJdLAorICAgICAgICAgICAgInRlc3RzIjog
e30KKyAgICAgICAgfQorICAgIH1gKQorCisJYnVmZmVyIDo9IGJ5dGVzLk5ld0J1ZmZlclN0cmlu
ZygiIikKKwllcnIgOj0gd3JpdGVNZXJnZWRKc29uKGJ1ZmZlciwgc3RyaW5ncy5OZXdSZWFkZXIo
YWdncmVnYXRlKSwgc3RyaW5ncy5OZXdSZWFkZXIoaW5jcmVtZW50YWwpLCAiRHVtbXlCdWlsZGVy
IiwgNSkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJdC5FcnJvcmYoZXJyLlN0cmluZygpKQorCX0KKwlh
c3NlcnRFcXVhbCh0LCBzdHJpbmcoYnVmZmVyLkJ5dGVzKCkpLCBleHBlY3RlZCsiXG4iKQorfQor
CitmdW5jIFRlc3RXcml0ZU1lcmdlZEpzb25TYW1lUmVzdWx0KHQgKnRlc3RpbmcuVCkgeworCWFn
Z3JlZ2F0ZSA6PSBgeworICAgICAgICAidmVyc2lvbiI6IDQsCisgICAgICAgICJEdW1teUJ1aWxk
ZXIiOiB7CisgICAgICAgICAgICAiYnVpbGROdW1iZXJzIjogWyIyIiwgIjEiXSwKKyAgICAgICAg
ICAgICJmaXhhYmxlQ291bnQiOiBbMywgOF0sCisgICAgICAgICAgICAiZml4YWJsZUNvdW50cyI6
IFt7IloiOiAxfSwgeyJDIjogMX1dLAorICAgICAgICAgICAgInRlc3RzIjogeworICAgICAgICAg
ICAgICAgICJmb28iOiB7CisgICAgICAgICAgICAgICAgICAgICIwMDEuaHRtbCI6IHsicmVzdWx0
cyI6IFtbMSwgIkYiXV0sICJ0aW1lcyI6IFtbMSwgMF1dfQorICAgICAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgIjAwMi5odG1sIjogeyJyZXN1bHRzIjogW1sxLCAiRiJdXSwgInRpbWVz
IjogW1sxLCAwXV19CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9YAorCisJaW5jcmVt
ZW50YWwgOj0gYHsKKyAgICAgICAgInZlcnNpb24iOiA0LAorICAgICAgICAiRHVtbXlCdWlsZGVy
IjogeworICAgICAgICAgICAgImJ1aWxkTnVtYmVycyI6IFsiMyJdLAorICAgICAgICAgICAgImZp
eGFibGVDb3VudCI6IFs0XSwKKyAgICAgICAgICAgICJmaXhhYmxlQ291bnRzIjogW3siQSI6IDF9
XSwKKyAgICAgICAgICAgICJ0ZXN0cyI6IHsKKyAgICAgICAgICAgICAgICAiZm9vIjogeworICAg
ICAgICAgICAgICAgICAgICAiMDAxLmh0bWwiOiB7InJlc3VsdHMiOiBbWzEsICJGIl1dLCAidGlt
ZXMiOiBbWzEsIDBdXX0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICIwMDIu
aHRtbCI6IHsicmVzdWx0cyI6IFtbMSwgIkYiXV0sICJ0aW1lcyI6IFtbMSwgMF1dfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfWAKKworCWV4cGVjdGVkIDo9IHJvdW5kVHJpcEpzb24o
dCwgYHsKKyAgICAgICAgInZlcnNpb24iOiA0LAorICAgICAgICAiRHVtbXlCdWlsZGVyIjogewor
ICAgICAgICAgICAgImJ1aWxkTnVtYmVycyI6IFsiMyIsICIyIiwgIjEiXSwKKyAgICAgICAgICAg
ICJmaXhhYmxlQ291bnQiOiBbNCwgMywgOF0sCisgICAgICAgICAgICAiZml4YWJsZUNvdW50cyI6
IFt7IkEiOiAxfSwgeyJaIjogMX0sIHsiQyI6IDF9XSwKKyAgICAgICAgICAgICJ0ZXN0cyI6IHsK
KyAgICAgICAgICAgICAgICAiZm9vIjogeworICAgICAgICAgICAgICAgICAgICAiMDAxLmh0bWwi
OiB7InJlc3VsdHMiOiBbWzIsICJGIl1dLCAidGltZXMiOiBbWzIsIDBdXX0KKyAgICAgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgICAgICIwMDIuaHRtbCI6IHsicmVzdWx0cyI6IFtbMiwgIkYi
XV0sICJ0aW1lcyI6IFtbMiwgMF1dfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfWAp
CisKKwlidWZmZXIgOj0gYnl0ZXMuTmV3QnVmZmVyU3RyaW5nKCIiKQorCWVyciA6PSB3cml0ZU1l
cmdlZEpzb24oYnVmZmVyLCBzdHJpbmdzLk5ld1JlYWRlcihhZ2dyZWdhdGUpLCBzdHJpbmdzLk5l
d1JlYWRlcihpbmNyZW1lbnRhbCksICJEdW1teUJ1aWxkZXIiLCA1KQorCWlmIGVyciAhPSBuaWwg
eworCQl0LkVycm9yZihlcnIuU3RyaW5nKCkpCisJfQorCWFzc2VydEVxdWFsKHQsIHN0cmluZyhi
dWZmZXIuQnl0ZXMoKSksIGV4cGVjdGVkKyJcbiIpCit9CisKK2Z1bmMgVGVzdFdyaXRlTWVyZ2Vk
SnNvblBydW5lRXh0cmEodCAqdGVzdGluZy5UKSB7CisJYWdncmVnYXRlIDo9IGB7CisgICAgICAg
ICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAgICAgICAgICAgICJi
dWlsZE51bWJlcnMiOiBbIjUiLCAiNCIsICIzIiwgIjIiLCAiMSJdLAorICAgICAgICAgICAgInRl
c3RzIjogeworICAgICAgICAgICAgICAgICIwMDEuaHRtbCI6IHsicmVzdWx0cyI6IFtbNSwgIkYi
XV0sICJ0aW1lcyI6IFtbNSwgMF1dfSwKKyAgICAgICAgICAgICAgICAiMDAyLmh0bWwiOiB7InJl
c3VsdHMiOiBbWzEsICJGIl1dLCAidGltZXMiOiBbWzEsIDBdXX0sCisgICAgICAgICAgICAgICAg
IjAwMy5odG1sIjogeyJyZXN1bHRzIjogW1s1LCAiRiJdXSwgInRpbWVzIjogW1s1LCAwXV19Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9YAorCisJaW5jcmVtZW50YWwgOj0gYHsKKyAg
ICAgICAgInZlcnNpb24iOiA0LAorICAgICAgICAiRHVtbXlCdWlsZGVyIjogeworICAgICAgICAg
ICAgImJ1aWxkTnVtYmVycyI6IFsiNiJdLAorICAgICAgICAgICAgInRlc3RzIjogeworICAgICAg
ICAgICAgICAgICIwMDEuaHRtbCI6IHsicmVzdWx0cyI6IFtbMSwgIkYiXV0sICJ0aW1lcyI6IFtb
MSwgMF1dfSwKKyAgICAgICAgICAgICAgICAiMDAyLmh0bWwiOiB7InJlc3VsdHMiOiBbWzEsICJG
Il1dLCAidGltZXMiOiBbWzEsIDBdXX0sCisgICAgICAgICAgICAgICAgIjAwMy5odG1sIjogeyJy
ZXN1bHRzIjogW1sxLCAiVCJdXSwgInRpbWVzIjogW1sxLCAxMF1dfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfWAKKworCWV4cGVjdGVkIDo9IHJvdW5kVHJpcEpzb24odCwgYHsKKyAg
ICAgICAgInZlcnNpb24iOiA0LAorICAgICAgICAiRHVtbXlCdWlsZGVyIjogeworICAgICAgICAg
ICAgImJ1aWxkTnVtYmVycyI6IFsiNiIsICI1IiwgIjQiLCAiMyIsICIyIl0sCisgICAgICAgICAg
ICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgIjAwMS5odG1sIjogeyJyZXN1bHRzIjogW1s1
LCAiRiJdXSwgInRpbWVzIjogW1s1LCAwXV19LAorICAgICAgICAgICAgICAgICIwMDIuaHRtbCI6
IHsicmVzdWx0cyI6IFtbMiwgIkYiXV0sICJ0aW1lcyI6IFtbMiwgMF1dfSwKKyAgICAgICAgICAg
ICAgICAiMDAzLmh0bWwiOiB7InJlc3VsdHMiOiBbWzEsICJUIl0sIFs0LCAiRiJdXSwgInRpbWVz
IjogW1sxLCAxMF0sIFs0LCAwXV19CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9YCkK
KworCWJ1ZmZlciA6PSBieXRlcy5OZXdCdWZmZXJTdHJpbmcoIiIpCisJZXJyIDo9IHdyaXRlTWVy
Z2VkSnNvbihidWZmZXIsIHN0cmluZ3MuTmV3UmVhZGVyKGFnZ3JlZ2F0ZSksIHN0cmluZ3MuTmV3
UmVhZGVyKGluY3JlbWVudGFsKSwgIkR1bW15QnVpbGRlciIsIDUpCisJaWYgZXJyICE9IG5pbCB7
CisJCXQuRXJyb3JmKGVyci5TdHJpbmcoKSkKKwl9CisJYXNzZXJ0RXF1YWwodCwgc3RyaW5nKGJ1
ZmZlci5CeXRlcygpKSwgZXhwZWN0ZWQrIlxuIikKK30KKworZnVuYyBUZXN0V3JpdGVNZXJnZWRK
c29uUmVtb3ZlR1Rlc3RNb2RpZmllcnModCAqdGVzdGluZy5UKSB7CisJYWdncmVnYXRlIDo9IGB7
CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAgICAg
ICAgICAgICJidWlsZE51bWJlcnMiOiBbIjUiLCAiNCIsICIzIiwgIjIiLCAiMSJdLAorICAgICAg
ICAgICAgInRlc3RzIjogeworICAgICAgICAgICAgICAgICJmb28uYmFyIjogeyJyZXN1bHRzIjog
W1s1LCAiRiJdXSwgInRpbWVzIjogW1s1LCAwXV19LAorICAgICAgICAgICAgICAgICJmb28uYmFy
MiI6IHsicmVzdWx0cyI6IFtbMSwgIkYiXV0sICJ0aW1lcyI6IFtbMSwgMF1dfSwKKyAgICAgICAg
ICAgICAgICAiZm9vLkZBSUxTX2JhcjMiOiB7InJlc3VsdHMiOiBbWzUsICJGIl1dLCAidGltZXMi
OiBbWzUsIDBdXX0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH1gCisKKwlpbmNyZW1l
bnRhbCA6PSBgeworICAgICAgICAidmVyc2lvbiI6IDQsCisgICAgICAgICJEdW1teUJ1aWxkZXIi
OiB7CisgICAgICAgICAgICAiYnVpbGROdW1iZXJzIjogWyI2Il0sCisgICAgICAgICAgICAidGVz
dHMiOiB7CisgICAgICAgICAgICAgICAgImZvby5ESVNBQkxFRF9iYXIiOiB7InJlc3VsdHMiOiBb
WzEsIlQiXV0sICJ0aW1lcyI6IFtbMSwwXV19LAorICAgICAgICAgICAgICAgICJmb28uRkxBS1lf
YmFyMiI6IHsicmVzdWx0cyI6IFtbMSwiTiJdXSwgInRpbWVzIjogW1sxLDBdXX0sCisgICAgICAg
ICAgICAgICAgImZvby5iYXIyIjogeyJyZXN1bHRzIjogW1sxLCJJIl1dLCAidGltZXMiOiBbWzEs
MF1dfSwKKyAgICAgICAgICAgICAgICAiZm9vLmJhcjMiOiB7InJlc3VsdHMiOiBbWzEsIk4iXV0s
ICJ0aW1lcyI6IFtbMSwwXV19LAorICAgICAgICAgICAgICAgICJmb28uRkFJTFNfYmFyMyI6IHsi
cmVzdWx0cyI6IFtbMSwiSSJdXSwgInRpbWVzIjogW1sxLDBdXX0sCisgICAgICAgICAgICAgICAg
ImZvby5NQVlCRV9iYXI0IjogeyJyZXN1bHRzIjogW1sxLCJJIl1dLCAidGltZXMiOiBbWzEsMF1d
fX0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH1gCisKKwlleHBlY3RlZCA6PSByb3Vu
ZFRyaXBKc29uKHQsIGB7CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVp
bGRlciI6IHsKKyAgICAgICAgICAgICJidWlsZE51bWJlcnMiOiBbIjYiLCAiNSIsICI0IiwgIjMi
LCAiMiJdLAorICAgICAgICAgICAgInRlc3RzIjogeworICAgICAgICAgICAgICAgICJmb28uRkFJ
TFNfYmFyMyI6IHsicmVzdWx0cyI6IFtbMSwiTiJdLFs0LCJGIl1dLCAidGltZXMiOiBbWzUsMF1d
fSwKKyAgICAgICAgICAgICAgICAiZm9vLmJhciI6IHsicmVzdWx0cyI6IFtbMSwiVCJdLFs0LCJG
Il1dLCAidGltZXMiOiBbWzUsMF1dfSwKKyAgICAgICAgICAgICAgICAiZm9vLmJhcjIiOiB7InJl
c3VsdHMiOiBbWzEsIkkiXSxbMSwiRiJdXSwgInRpbWVzIjogW1syLDBdXX0sCisgICAgICAgICAg
ICAgICAgImZvby5iYXIzIjogeyJyZXN1bHRzIjogW1sxLCJJIl1dLCAidGltZXMiOiBbWzEsMF1d
fSwKKyAgICAgICAgICAgICAgICAiZm9vLmJhcjQiOiB7InJlc3VsdHMiOiBbWzEsIkkiXV0sICJ0
aW1lcyI6IFtbMSwwXV19fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfWApCisKKwli
dWZmZXIgOj0gYnl0ZXMuTmV3QnVmZmVyU3RyaW5nKCIiKQorCWVyciA6PSB3cml0ZU1lcmdlZEpz
b24oYnVmZmVyLCBzdHJpbmdzLk5ld1JlYWRlcihhZ2dyZWdhdGUpLCBzdHJpbmdzLk5ld1JlYWRl
cihpbmNyZW1lbnRhbCksICJEdW1teUJ1aWxkZXIiLCA1KQorCWlmIGVyciAhPSBuaWwgeworCQl0
LkVycm9yZihlcnIuU3RyaW5nKCkpCisJfQorCWFzc2VydEVxdWFsKHQsIHN0cmluZyhidWZmZXIu
Qnl0ZXMoKSksIGV4cGVjdGVkKyJcbiIpCit9CisKK2Z1bmMgVGVzdFdyaXRlTWVyZ2VkSnNvblN0
cmlwQWxsUGFzc09yTm9EYXRhKHQgKnRlc3RpbmcuVCkgeworCWFnZ3JlZ2F0ZSA6PSBgeworICAg
ICAgICAidmVyc2lvbiI6IDQsCisgICAgICAgICJEdW1teUJ1aWxkZXIiOiB7CisgICAgICAgICAg
ICAiYnVpbGROdW1iZXJzIjogWyI1IiwgIjQiLCAiMyIsICIyIiwgIjEiXSwKKyAgICAgICAgICAg
ICJ0ZXN0cyI6IHsKKyAgICAgICAgICAgICAgICAiMDAxLmh0bWwiOiB7InJlc3VsdHMiOiBbWzUs
ICJOIl1dLCAidGltZXMiOiBbWzUsIDBdXX0sCisgICAgICAgICAgICAgICAgIjAwMi5odG1sIjog
eyJyZXN1bHRzIjogW1s1LCAiUCJdXSwgInRpbWVzIjogW1s1LCAwXV19LAorICAgICAgICAgICAg
ICAgICIwMDMuaHRtbCI6IHsicmVzdWx0cyI6IFtbNCwgIk4iXV0sICJ0aW1lcyI6IFtbNCwgMF1d
fSwKKyAgICAgICAgICAgICAgICAiMDA0Lmh0bWwiOiB7InJlc3VsdHMiOiBbWzQsICJQIl1dLCAi
dGltZXMiOiBbWzQsIDBdXX0sCisgICAgICAgICAgICAgICAgIjAwNS5odG1sIjogeyJyZXN1bHRz
IjogW1s0LCAiUCJdXSwgInRpbWVzIjogW1s0LCAxXV19CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9YAorCisJaW5jcmVtZW50YWwgOj0gYHsKKyAgICAgICAgInZlcnNpb24iOiA0LAor
ICAgICAgICAiRHVtbXlCdWlsZGVyIjogeworICAgICAgICAgICAgImJ1aWxkTnVtYmVycyI6IFsi
NiJdLAorICAgICAgICAgICAgInRlc3RzIjogeworICAgICAgICAgICAgICAgICIwMDEuaHRtbCI6
IHsicmVzdWx0cyI6IFtbMSwgIk4iXV0sICJ0aW1lcyI6IFtbMSwgMF1dfSwKKyAgICAgICAgICAg
ICAgICAiMDAyLmh0bWwiOiB7InJlc3VsdHMiOiBbWzEsICJQIl1dLCAidGltZXMiOiBbWzEsIDBd
XX0sCisgICAgICAgICAgICAgICAgIjAwMy5odG1sIjogeyJyZXN1bHRzIjogW1sxLCAiUCJdXSwg
InRpbWVzIjogW1sxLCAwXV19LAorICAgICAgICAgICAgICAgICIwMDQuaHRtbCI6IHsicmVzdWx0
cyI6IFtbMSwgIk4iXV0sICJ0aW1lcyI6IFtbMSwgMF1dfSwKKyAgICAgICAgICAgICAgICAiMDA1
Lmh0bWwiOiB7InJlc3VsdHMiOiBbWzEsICJQIl1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH1gCisKKwlleHBlY3RlZCA6PSByb3VuZFRyaXBKc29u
KHQsIGB7CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsK
KyAgICAgICAgICAgICJidWlsZE51bWJlcnMiOiBbIjYiLCAiNSIsICI0IiwgIjMiLCAiMiJdLAor
ICAgICAgICAgICAgInRlc3RzIjogeworICAgICAgICAgICAgICAgICIwMDUuaHRtbCI6IHsicmVz
dWx0cyI6IFtbNSwgIlAiXV0sICJ0aW1lcyI6IFtbMSwgMF0sIFs0LCAxXV19CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9YCkKKworCWJ1ZmZlciA6PSBieXRlcy5OZXdCdWZmZXJTdHJp
bmcoIiIpCisJZXJyIDo9IHdyaXRlTWVyZ2VkSnNvbihidWZmZXIsIHN0cmluZ3MuTmV3UmVhZGVy
KGFnZ3JlZ2F0ZSksIHN0cmluZ3MuTmV3UmVhZGVyKGluY3JlbWVudGFsKSwgIkR1bW15QnVpbGRl
ciIsIDUpCisJaWYgZXJyICE9IG5pbCB7CisJCXQuRXJyb3JmKGVyci5TdHJpbmcoKSkKKwl9CisJ
YXNzZXJ0RXF1YWwodCwgc3RyaW5nKGJ1ZmZlci5CeXRlcygpKSwgZXhwZWN0ZWQrIlxuIikKK30K
KworZnVuYyBUZXN0V3JpdGVNZXJnZWRKc29uSGllcmFyY2hpY2FsKHQgKnRlc3RpbmcuVCkgewor
CWFnZ3JlZ2F0ZSA6PSBgeworICAgICAgICAidmVyc2lvbiI6IDQsCisgICAgICAgICJEdW1teUJ1
aWxkZXIiOiB7CisgICAgICAgICAgICAiYnVpbGROdW1iZXJzIjogWyIyIiwgIjEiXSwKKyAgICAg
ICAgICAgICJ0ZXN0cyI6IHsKKyAgICAgICAgICAgICAgICAiYmFyIjogeworICAgICAgICAgICAg
ICAgICAgICAiYmF6IjogeworICAgICAgICAgICAgICAgICAgICAgICAgIjAwMy5odG1sIjogeyJy
ZXN1bHRzIjogW1sxLCAiRiJdXSwgInRpbWVzIjogW1sxLCAwXV19CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJmb28iOiB7CisgICAg
ICAgICAgICAgICAgICAgICIwMDEuaHRtbCI6IHsicmVzdWx0cyI6IFtbMSwgIkYiXV0sICJ0aW1l
cyI6IFtbMSwgMF1dfSwKKyAgICAgICAgICAgICAgICAgICAgIjAwMi5odG1sIjogeyJyZXN1bHRz
IjogW1sxLCAiRiJdXSwgInRpbWVzIjogW1sxLCAwXV19CisgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAiZm9vYmFyIjogeworICAgICAgICAgICAgICAgICAgICAiMDA1Lmh0bWwi
OiB7InJlc3VsdHMiOiBbWzEsICJGIl1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9YAorCisJaW5jcmVtZW50YWwg
Oj0gYHsKKyAgICAgICAgInZlcnNpb24iOiA0LAorICAgICAgICAiRHVtbXlCdWlsZGVyIjogewor
ICAgICAgICAgICAgImJ1aWxkTnVtYmVycyI6IFsiMyJdLAorICAgICAgICAgICAgInRlc3RzIjog
eworICAgICAgICAgICAgICAgICJiYXIiOiB7CisgICAgICAgICAgICAgICAgICAgICJiYXoiOiB7
CisgICAgICAgICAgICAgICAgICAgICAgICAiMDA0Lmh0bWwiOiB7InJlc3VsdHMiOiBbWzEsICJG
Il1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgImZvbyI6IHsKKyAgICAgICAgICAgICAgICAgICAg
IjAwMS5odG1sIjogeyJyZXN1bHRzIjogW1sxLCAiRiJdXSwgInRpbWVzIjogW1sxLCAwXV19LAor
ICAgICAgICAgICAgICAgICAgICAiMDAyLmh0bWwiOiB7InJlc3VsdHMiOiBbWzEsICJGIl1dLCAi
dGltZXMiOiBbWzEsIDBdXX0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9YAorCisJZXhwZWN0ZWQgOj0gcm91bmRUcmlwSnNvbih0LCBgeworICAgICAg
ICAidmVyc2lvbiI6IDQsCisgICAgICAgICJEdW1teUJ1aWxkZXIiOiB7CisgICAgICAgICAgICAi
YnVpbGROdW1iZXJzIjogWyIzIiwgIjIiLCAiMSJdLAorICAgICAgICAgICAgInRlc3RzIjogewor
ICAgICAgICAgICAgICAgICJiYXIiOiB7CisgICAgICAgICAgICAgICAgICAgICJiYXoiOiB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAiMDAzLmh0bWwiOiB7InJlc3VsdHMiOiBbWzEsICJOIl0s
WzEsICJGIl1dLCAidGltZXMiOiBbWzIsIDBdXX0sCisgICAgICAgICAgICAgICAgICAgICAgICAi
MDA0Lmh0bWwiOiB7InJlc3VsdHMiOiBbWzEsICJGIl1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
ImZvbyI6IHsKKyAgICAgICAgICAgICAgICAgICAgIjAwMS5odG1sIjogeyJyZXN1bHRzIjogW1sy
LCAiRiJdXSwgInRpbWVzIjogW1syLCAwXV19LAorICAgICAgICAgICAgICAgICAgICAiMDAyLmh0
bWwiOiB7InJlc3VsdHMiOiBbWzIsICJGIl1dLCAidGltZXMiOiBbWzIsIDBdXX0KKyAgICAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgICAgICJmb29iYXIiOiB7CisgICAgICAgICAgICAgICAg
ICAgICIwMDUuaHRtbCI6IHsicmVzdWx0cyI6IFtbMSwgIk4iXSxbMSwgIkYiXV0sICJ0aW1lcyI6
IFtbMiwgMF1dfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH1gKQorCisJYnVmZmVyIDo9IGJ5dGVzLk5ld0J1ZmZlclN0cmluZygiIikKKwllcnIgOj0g
d3JpdGVNZXJnZWRKc29uKGJ1ZmZlciwgc3RyaW5ncy5OZXdSZWFkZXIoYWdncmVnYXRlKSwgc3Ry
aW5ncy5OZXdSZWFkZXIoaW5jcmVtZW50YWwpLCAiRHVtbXlCdWlsZGVyIiwgNSkKKwlpZiBlcnIg
IT0gbmlsIHsKKwkJdC5FcnJvcmYoZXJyLlN0cmluZygpKQorCX0KKwlhc3NlcnRFcXVhbCh0LCBz
dHJpbmcoYnVmZmVyLkJ5dGVzKCkpLCBleHBlY3RlZCsiXG4iKQorfQorCitmdW5jIFRlc3RXcml0
ZU1lcmdlZEpzb25EaWZmZXJlbnRSZXN1bHQodCAqdGVzdGluZy5UKSB7CisJYWdncmVnYXRlIDo9
IGB7CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAg
ICAgICAgICAgICJidWlsZE51bWJlcnMiOiBbIjIiLCAiMSJdLAorICAgICAgICAgICAgImZpeGFi
bGVDb3VudCI6IFszLCA4XSwKKyAgICAgICAgICAgICJmaXhhYmxlQ291bnRzIjogW3siWiI6IDF9
LCB7IkMiOiAxfV0sCisgICAgICAgICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgImZv
byI6IHsKKyAgICAgICAgICAgICAgICAgICAgIjAwMS5odG1sIjogeyJyZXN1bHRzIjogW1sxLCAi
RiJdXSwgInRpbWVzIjogW1sxLCAwXV19CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICAiMDAyLmh0bWwiOiB7InJlc3VsdHMiOiBbWzEsICJGIl1dLCAidGltZXMiOiBbWzEsIDBd
XX0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH1gCisKKwlpbmNyZW1lbnRhbCA6PSBg
eworICAgICAgICAidmVyc2lvbiI6IDQsCisgICAgICAgICJEdW1teUJ1aWxkZXIiOiB7CisgICAg
ICAgICAgICAiYnVpbGROdW1iZXJzIjogWyIzIl0sCisgICAgICAgICAgICAiZml4YWJsZUNvdW50
IjogWzRdLAorICAgICAgICAgICAgImZpeGFibGVDb3VudHMiOiBbeyJBIjogMX1dLAorICAgICAg
ICAgICAgInRlc3RzIjogeworICAgICAgICAgICAgICAgICJmb28iOiB7CisgICAgICAgICAgICAg
ICAgICAgICIwMDEuaHRtbCI6IHsicmVzdWx0cyI6IFtbMSwgIkkiXV0sICJ0aW1lcyI6IFtbMSwg
MjBdXX0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICIwMDIuaHRtbCI6IHsi
cmVzdWx0cyI6IFtbMSwgIlQiXV0sICJ0aW1lcyI6IFtbMSwgMTBdXX0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH1gCisKKwlleHBlY3RlZCA6PSByb3VuZFRyaXBKc29uKHQsIGB7Cisg
ICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAgICAgICAg
ICAgICJidWlsZE51bWJlcnMiOiBbIjMiLCAiMiIsICIxIl0sCisgICAgICAgICAgICAiZml4YWJs
ZUNvdW50IjogWzQsIDMsIDhdLAorICAgICAgICAgICAgImZpeGFibGVDb3VudHMiOiBbeyJBIjog
MX0sIHsiWiI6IDF9LCB7IkMiOiAxfV0sCisgICAgICAgICAgICAidGVzdHMiOiB7CisgICAgICAg
ICAgICAgICAgImZvbyI6IHsKKyAgICAgICAgICAgICAgICAgICAgIjAwMS5odG1sIjogeyJyZXN1
bHRzIjogW1sxLCAiSSJdLFsxLCAiRiJdXSwgInRpbWVzIjogW1sxLCAyMF0sWzEsIDBdXX0KKyAg
ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICIwMDIuaHRtbCI6IHsicmVzdWx0cyI6
IFtbMSwgIlQiXSxbMSwgIkYiXV0sICJ0aW1lcyI6IFtbMSwgMTBdLFsxLCAwXV19CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9YCkKKworCWJ1ZmZlciA6PSBieXRlcy5OZXdCdWZmZXJT
dHJpbmcoIiIpCisJZXJyIDo9IHdyaXRlTWVyZ2VkSnNvbihidWZmZXIsIHN0cmluZ3MuTmV3UmVh
ZGVyKGFnZ3JlZ2F0ZSksIHN0cmluZ3MuTmV3UmVhZGVyKGluY3JlbWVudGFsKSwgIkR1bW15QnVp
bGRlciIsIDUpCisJaWYgZXJyICE9IG5pbCB7CisJCXQuRXJyb3JmKGVyci5TdHJpbmcoKSkKKwl9
CisJYXNzZXJ0RXF1YWwodCwgc3RyaW5nKGJ1ZmZlci5CeXRlcygpKSwgZXhwZWN0ZWQrIlxuIikK
K30KKworZnVuYyBUZXN0V3JpdGVNZXJnZWRKc29uSW5jcmVtZW50YWxNaXNzaW5nUmVzdWx0KHQg
KnRlc3RpbmcuVCkgeworCWFnZ3JlZ2F0ZSA6PSBgeworICAgICAgICAidmVyc2lvbiI6IDQsCisg
ICAgICAgICJEdW1teUJ1aWxkZXIiOiB7CisgICAgICAgICAgICAiYnVpbGROdW1iZXJzIjogWyIy
IiwgIjEiXSwKKyAgICAgICAgICAgICJmaXhhYmxlQ291bnQiOiBbMywgOF0sCisgICAgICAgICAg
ICAiZml4YWJsZUNvdW50cyI6IFt7IloiOiAxfSwgeyJDIjogMX1dLAorICAgICAgICAgICAgInRl
c3RzIjogeworICAgICAgICAgICAgICAgICJmb28iOiB7CisgICAgICAgICAgICAgICAgICAgICIw
MDEuaHRtbCI6IHsicmVzdWx0cyI6IFtbMSwgIkYiXV0sICJ0aW1lcyI6IFtbMSwgMF1dfQorICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgIjAwMi5odG1sIjogeyJyZXN1bHRzIjog
W1sxLCAiRiJdXSwgInRpbWVzIjogW1sxLCAwXV19CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9YAorCisJaW5jcmVtZW50YWwgOj0gYHsKKyAgICAgICAgInZlcnNpb24iOiA0LAorICAg
ICAgICAiRHVtbXlCdWlsZGVyIjogeworICAgICAgICAgICAgImJ1aWxkTnVtYmVycyI6IFsiMyJd
LAorICAgICAgICAgICAgImZpeGFibGVDb3VudCI6IFs0XSwKKyAgICAgICAgICAgICJmaXhhYmxl
Q291bnRzIjogW3siQSI6IDF9XSwKKyAgICAgICAgICAgICJ0ZXN0cyI6IHsKKyAgICAgICAgICAg
ICAgICAiZm9vIjogeworICAgICAgICAgICAgICAgICAgICAiMDAxLmh0bWwiOiB7InJlc3VsdHMi
OiBbWzEsICJJIl1dLCAidGltZXMiOiBbWzEsIDIwXV19CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfWAKKworCWV4cGVjdGVkIDo9IHJvdW5kVHJpcEpz
b24odCwgYHsKKyAgICAgICAgInZlcnNpb24iOiA0LAorICAgICAgICAiRHVtbXlCdWlsZGVyIjog
eworICAgICAgICAgICAgImJ1aWxkTnVtYmVycyI6IFsiMyIsICIyIiwgIjEiXSwKKyAgICAgICAg
ICAgICJmaXhhYmxlQ291bnQiOiBbNCwgMywgOF0sCisgICAgICAgICAgICAiZml4YWJsZUNvdW50
cyI6IFt7IkEiOiAxfSwgeyJaIjogMX0sIHsiQyI6IDF9XSwKKyAgICAgICAgICAgICJ0ZXN0cyI6
IHsKKyAgICAgICAgICAgICAgICAiZm9vIjogeworICAgICAgICAgICAgICAgICAgICAiMDAxLmh0
bWwiOiB7InJlc3VsdHMiOiBbWzEsICJJIl0sWzEsICJGIl1dLCAidGltZXMiOiBbWzEsIDIwXSxb
MSwgMF1dfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgIjAwMi5odG1sIjog
eyJyZXN1bHRzIjogW1sxLCAiTiJdLFsxLCAiRiJdXSwgInRpbWVzIjogW1syLCAwXV19CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9YCkKKworCWJ1ZmZlciA6PSBieXRlcy5OZXdCdWZm
ZXJTdHJpbmcoIiIpCisJZXJyIDo9IHdyaXRlTWVyZ2VkSnNvbihidWZmZXIsIHN0cmluZ3MuTmV3
UmVhZGVyKGFnZ3JlZ2F0ZSksIHN0cmluZ3MuTmV3UmVhZGVyKGluY3JlbWVudGFsKSwgIkR1bW15
QnVpbGRlciIsIDUpCisJaWYgZXJyICE9IG5pbCB7CisJCXQuRXJyb3JmKGVyci5TdHJpbmcoKSkK
Kwl9CisJYXNzZXJ0RXF1YWwodCwgc3RyaW5nKGJ1ZmZlci5CeXRlcygpKSwgZXhwZWN0ZWQrIlxu
IikKK30KKworZnVuYyBUZXN0V3JpdGVNZXJnZWRKc29uSW52YWxpZE51bWJlck9mSW5jcmVtZW50
YWxSdW5zKHQgKnRlc3RpbmcuVCkgeworCWFnZ3JlZ2F0ZSA6PSBgeworICAgICAgICAidmVyc2lv
biI6IDQsCisgICAgICAgICJEdW1teUJ1aWxkZXIiOiB7CisgICAgICAgICAgICAiYnVpbGROdW1i
ZXJzIjogWyIyIiwgIjEiXSwKKyAgICAgICAgICAgICJ0ZXN0cyI6IHt9CisgICAgICAgIH0KKyAg
ICB9YAorCisJaW5jcmVtZW50YWwgOj0gYHsKKyAgICAgICAgInZlcnNpb24iOiA0LAorICAgICAg
ICAiRHVtbXlCdWlsZGVyIjogeworICAgICAgICAgICAgImJ1aWxkTnVtYmVycyI6IFtdLAorICAg
ICAgICAgICAgInRlc3RzIjoge30KKyAgICAgICAgfQorICAgIH1gCisKKwllcnIgOj0gd3JpdGVN
ZXJnZWRKc29uKGJ5dGVzLk5ld0J1ZmZlclN0cmluZygiIiksIHN0cmluZ3MuTmV3UmVhZGVyKGFn
Z3JlZ2F0ZSksIHN0cmluZ3MuTmV3UmVhZGVyKGluY3JlbWVudGFsKSwgIkR1bW15QnVpbGRlciIs
IDUpCisJaWYgZXJyID09IG5pbCB7CisJCXQuRXJyb3JmKCJJbmNyZW1lbnRhbCByZXN1bHRzIHNo
b3VsZCBoYXZlIGV4YWN0bHkgMSBydW4uIikKKwl9CisKKwlhZ2dyZWdhdGUgPSBgeworICAgICAg
ICAidmVyc2lvbiI6IDQsCisgICAgICAgICJEdW1teUJ1aWxkZXIiOiB7CisgICAgICAgICAgICAi
YnVpbGROdW1iZXJzIjogWyIyIiwgIjEiXSwKKyAgICAgICAgICAgICJ0ZXN0cyI6IHt9CisgICAg
ICAgIH0KKyAgICB9YAorCisJaW5jcmVtZW50YWwgPSBgeworICAgICAgICAidmVyc2lvbiI6IDQs
CisgICAgICAgICJEdW1teUJ1aWxkZXIiOiB7CisgICAgICAgICAgICAiYnVpbGROdW1iZXJzIjog
WyI0IiwgIjMiXSwKKyAgICAgICAgICAgICJ0ZXN0cyI6IHt9CisgICAgICAgIH0KKyAgICB9YAor
CisJZXJyID0gd3JpdGVNZXJnZWRKc29uKGJ5dGVzLk5ld0J1ZmZlclN0cmluZygiIiksIHN0cmlu
Z3MuTmV3UmVhZGVyKGFnZ3JlZ2F0ZSksIHN0cmluZ3MuTmV3UmVhZGVyKGluY3JlbWVudGFsKSwg
IkR1bW15QnVpbGRlciIsIDUpCisJaWYgZXJyID09IG5pbCB7CisJCXQuRXJyb3JmKCJJbmNyZW1l
bnRhbCByZXN1bHRzIHNob3VsZCBoYXZlIGV4YWN0bHkgMSBydW4uIikKKwl9Cit9CisKK2Z1bmMg
bmV3RmlsZUhlYWRlcih0ICp0ZXN0aW5nLlQsIGZpbGVDb250ZW50cyBzdHJpbmcpICptdWx0aXBh
cnQuRmlsZUhlYWRlciB7CisJbWVzc2FnZSA6PSBgCistLSVzCitDb250ZW50LURpc3Bvc2l0aW9u
OiBmb3JtLWRhdGE7IG5hbWU9ImZpbGVhIjsgZmlsZW5hbWU9ImZpbGVhLnR4dCIKK0NvbnRlbnQt
VHlwZTogdGV4dC9wbGFpbgorCislcworLS0lcworYAorCisJZGF0YSA6PSBmbXQuU3ByaW50Ziht
ZXNzYWdlLCBmb3JtQm91bmRhcnksIGZpbGVDb250ZW50cywgZm9ybUJvdW5kYXJ5KQorCXJldHVy
biBuZXdGb3JtKHQsIGRhdGEpLkZpbGVbImZpbGVhIl1bMF0KK30KKworZnVuYyBUZXN0V3JpdGVN
ZXJnZWRKc29uRnJvbUZpbGVIZWFkZXIodCAqdGVzdGluZy5UKSB7CisJYWdncmVnYXRlIDo9IGB7
CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAgICAg
ICAgICAgICJidWlsZE51bWJlcnMiOiBbIjUiLCAiNCIsICIzIiwgIjIiLCAiMSJdLAorICAgICAg
ICAgICAgInRlc3RzIjogeworICAgICAgICAgICAgICAgICIwMDMuaHRtbCI6IHsicmVzdWx0cyI6
IFtbNSwgIkYiXV0sICJ0aW1lcyI6IFtbNSwgMF1dfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfWAKKworCWluY3JlbWVudGFsIDo9IGB7CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAg
ICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAgICAgICAgICAgICJidWlsZE51bWJlcnMiOiBbIjYi
XSwKKyAgICAgICAgICAgICJ0ZXN0cyI6IHsKKyAgICAgICAgICAgICAgICAiMDAzLmh0bWwiOiB7
InJlc3VsdHMiOiBbWzEsICJUIl1dLCAidGltZXMiOiBbWzEsIDEwXV19CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9YAorCisJZXhwZWN0ZWQgOj0gcm91bmRUcmlwSnNvbih0LCBgewor
ICAgICAgICAidmVyc2lvbiI6IDQsCisgICAgICAgICJEdW1teUJ1aWxkZXIiOiB7CisgICAgICAg
ICAgICAiYnVpbGROdW1iZXJzIjogWyI2IiwgIjUiLCAiNCIsICIzIiwgIjIiXSwKKyAgICAgICAg
ICAgICJ0ZXN0cyI6IHsKKyAgICAgICAgICAgICAgICAiMDAzLmh0bWwiOiB7InJlc3VsdHMiOiBb
WzEsICJUIl0sIFs0LCAiRiJdXSwgInRpbWVzIjogW1sxLCAxMF0sIFs0LCAwXV19CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9YCkKKworCWJ1ZmZlciwgZXJyIDo9IFdyaXRlTWVyZ2Vk
SnNvbkZyb21GaWxlSGVhZGVyKHN0cmluZ3MuTmV3UmVhZGVyKGFnZ3JlZ2F0ZSksIG5ld0ZpbGVI
ZWFkZXIodCwgaW5jcmVtZW50YWwpLCAiRHVtbXlCdWlsZGVyIiwgNSkKKwlpZiBlcnIgIT0gbmls
IHsKKwkJdC5FcnJvcmYoZXJyLlN0cmluZygpKQorCX0KKwlhc3NlcnRFcXVhbCh0LCBzdHJpbmco
YnVmZmVyLkJ5dGVzKCkpLCBleHBlY3RlZCsiXG4iKQorfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dHNEYXNoYm9hcmRTZXJ2ZXIvcnVuL3J1bi5nbyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVy
L3J1bi9ydW4uZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzJlMzkwYzY2ZGViYWNkNzE3ZDZkYmFlYjZhZTgxMGUy
MzhlNjhhNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3J1
bi9ydW4uZ28KQEAgLTAsMCArMSwzODkgQEAKK3BhY2thZ2UgcnVuCisKK2ltcG9ydCAoCisJImFw
cGVuZ2luZSIKKwkiYXBwZW5naW5lL2Jsb2JzdG9yZSIKKwkiYXBwZW5naW5lL2RhdGFzdG9yZSIK
KwkiYXBwZW5naW5lL3VzZXIiCisJImJhc2UiCisJImZtdCIKKwkiaHR0cCIKKwkiaW8iCisJIm1p
bWUvbXVsdGlwYXJ0IgorCSJvcyIKKwkidGVtcGxhdGUiCisJInRpbWUiCispCisKKy8vIFRoaXMg
ZmlsZSBzaG91bGQgb25seSBjb250YWluIGZ1bmN0aW9ucyB0aGF0IGV4cGxpY3RseSBuZWVkIHRv
IGludGVyYWN0IHdpdGggYXBwZW5naW5lIEFQSXMuCisvLyBFdmVyeXRoaW5nIGVsc2Ugc2hvdWxk
IGdvIGluIGJhc2UuZ28gc28gaXQgY2FuIGJlIGVhc2lseSB0ZXN0ZWQgdXNpbmcgZ290ZXN0IHdp
dGhvdXQgYXBwZW5naW5lIGRlcGVuZGVuY2llcy4KKy8vIEZJWE1FOiBNb2NrIG91dCB0aGUgYXBw
ZW5naW5lIEFQSXMgc28gd2UgY2FuIHVuaXR0ZXN0IGFsbCB0aGlzIGFzIHdlbGwgd2l0aG91dCBh
cHBlbmdpbmUgZGVwZW5kZW5jaWVzLgorCitmdW5jIGluaXQoKSB7CisJaHR0cC5IYW5kbGVGdW5j
KCIvIiwgcm9vdCkKKwlodHRwLkhhbmRsZUZ1bmMoIi90ZXN0ZmlsZSIsIHRlc3RGaWxlKQorCWh0
dHAuSGFuZGxlRnVuYygiL3Rlc3RmaWxlL2RlbGV0ZSIsIGRlbGV0ZUZpbGUpCisJaHR0cC5IYW5k
bGVGdW5jKCIvdGVzdGZpbGUvdXBsb2FkIiwgdXBsb2FkRmlsZSkKKwlodHRwLkhhbmRsZUZ1bmMo
Ii90ZXN0ZmlsZS91cGxvYWRmb3JtIiwgdXBsb2FkRm9ybSkKK30KKwordHlwZSBUZXN0RmlsZSBz
dHJ1Y3QgeworCU1hc3RlciAgICAgICAgICAgc3RyaW5nCisJQnVpbGRlciAgICAgICAgICBzdHJp
bmcKKwlUZXN0VHlwZSAgICAgICAgIHN0cmluZworCU5hbWUgICAgICAgICAgICAgc3RyaW5nCisJ
QmxvYktleSAgICAgICAgICBhcHBlbmdpbmUuQmxvYktleQorCURhdGVNaWNyb3NlY29uZHMgZGF0
YXN0b3JlLlRpbWUKK30KKworZnVuYyBuZXdUZXN0RmlsZShtYXN0ZXIgc3RyaW5nLCBidWlsZGVy
IHN0cmluZywgdGVzdFR5cGUgc3RyaW5nLCBuYW1lIHN0cmluZykgVGVzdEZpbGUgeworCXJldHVy
biBUZXN0RmlsZXsKKwkJTWFzdGVyOiAgICAgICAgICAgbWFzdGVyLAorCQlCdWlsZGVyOiAgICAg
ICAgICBidWlsZGVyLAorCQlUZXN0VHlwZTogICAgICAgICB0ZXN0VHlwZSwKKwkJTmFtZTogICAg
ICAgICAgICAgbmFtZSwKKwkJRGF0ZU1pY3Jvc2Vjb25kczogZGF0YXN0b3JlLlNlY29uZHNUb1Rp
bWUodGltZS5TZWNvbmRzKCkpLAorCX0KK30KKworY29uc3QgQUdHUkVHQVRFX1JFU1VMVFNfRklM
RV9OQU1FID0gInJlc3VsdHMuanNvbiIKK2NvbnN0IEFHR1JFR0FURV9SRVNVTFRTX1NNQUxMX0ZJ
TEVfTkFNRSA9ICJyZXN1bHRzLXNtYWxsLmpzb24iCitjb25zdCBJTkNSRU1FTlRBTF9SRVNVTFRT
X0ZJTEVfTkFNRSA9ICJpbmNyZW1lbnRhbF9yZXN1bHRzLmpzb24iCitjb25zdCBGVUxMX1JFU1VM
VFNfRklMRV9OQU1FID0gImZ1bGxfcmVzdWx0cy5qc29uIgorY29uc3QgTUFYX0JVSUxEUyA9IDc1
MAorY29uc3QgTUFYX0JVSUxEU19TTUFMTCA9IDIwMAorCit2YXIgbWVudVRlbXBsYXRlID0gdGVt
cGxhdGUuTXVzdCh0ZW1wbGF0ZS5QYXJzZUZpbGUoInRlbXBsYXRlcy9tZW51Lmh0bWwiKSkKK3Zh
ciB1cGxvYWRUZW1wbGF0ZSA9IHRlbXBsYXRlLk11c3QodGVtcGxhdGUuUGFyc2VGaWxlKCJ0ZW1w
bGF0ZXMvdXBsb2FkZm9ybS5odG1sIikpCit2YXIgZmlsZUxpc3RUZW1wbGF0ZSA9IHRlbXBsYXRl
Lk11c3QodGVtcGxhdGUuUGFyc2VGaWxlKCJ0ZW1wbGF0ZXMvZmlsZWxpc3QuaHRtbCIpKQordmFy
IGZpbGVMaXN0SnNvbnBUZW1wbGF0ZSA9IHRlbXBsYXRlLk11c3QodGVtcGxhdGUuUGFyc2VGaWxl
KCJ0ZW1wbGF0ZXMvZmlsZWxpc3QuanNvbnAiKSkKKwordHlwZSBGaWxlTGlzdCBzdHJ1Y3Qgewor
CU1hc3RlciAgICAgICAgc3RyaW5nCisJQnVpbGRlciAgICAgICBzdHJpbmcKKwlUZXN0VHlwZSAg
ICAgIHN0cmluZworCU5hbWUgICAgICAgICAgc3RyaW5nCisJRmlsZXNXaXRoS2V5cyBbXUZpbGVX
aXRoS2V5Cit9CisKK3R5cGUgRmlsZVdpdGhLZXkgc3RydWN0IHsKKwlGaWxlIFRlc3RGaWxlCisJ
S2V5ICAqZGF0YXN0b3JlLktleQorfQorCitmdW5jIHNlcnZlNTAwKGNvbnRleHQgYXBwZW5naW5l
LkNvbnRleHQsIHdyaXRlciBodHRwLlJlc3BvbnNlV3JpdGVyLCBodG1sIC4uLnN0cmluZykgewor
CWZvciBfLCBzdHIgOj0gcmFuZ2UgaHRtbCB7CisJCWNvbnRleHQuRGVidWdmKHN0cikKKwl9CisJ
YmFzZS5TZXJ2ZTUwMCh3cml0ZXIsIGh0bWwuLi4pCit9CisKK2Z1bmMgc2VydmU0MDQoY29udGV4
dCBhcHBlbmdpbmUuQ29udGV4dCwgd3JpdGVyIGh0dHAuUmVzcG9uc2VXcml0ZXIsIGh0bWwgLi4u
c3RyaW5nKSB7CisJZm9yIF8sIHN0ciA6PSByYW5nZSBodG1sIHsKKwkJY29udGV4dC5EZWJ1Z2Yo
c3RyKQorCX0KKwliYXNlLlNlcnZlNDA0KHdyaXRlciwgaHRtbC4uLikKK30KKworZnVuYyBzZXJ2
ZTQwMyhjb250ZXh0IGFwcGVuZ2luZS5Db250ZXh0LCB3cml0ZXIgaHR0cC5SZXNwb25zZVdyaXRl
ciwgaHRtbCAuLi5zdHJpbmcpIHsKKwlmb3IgXywgc3RyIDo9IHJhbmdlIGh0bWwgeworCQljb250
ZXh0LkRlYnVnZihzdHIpCisJfQorCWJhc2UuU2VydmU0MDMod3JpdGVyLCBodG1sLi4uKQorfQor
CitmdW5jIG1lcmdlSnNvbkZpbGUoY29udGV4dCBhcHBlbmdpbmUuQ29udGV4dCwgbWFzdGVyIHN0
cmluZywgYnVpbGRlciBzdHJpbmcsIHRlc3RUeXBlIHN0cmluZywgZmlsZUhlYWRlciAqbXVsdGlw
YXJ0LkZpbGVIZWFkZXIpIG9zLkVycm9yIHsKKwl0ZXN0RmlsZSA6PSBuZXdUZXN0RmlsZShtYXN0
ZXIsIGJ1aWxkZXIsIHRlc3RUeXBlLCBBR0dSRUdBVEVfUkVTVUxUU19GSUxFX05BTUUpCisJdGVz
dEZpbGVTbWFsbCA6PSBuZXdUZXN0RmlsZShtYXN0ZXIsIGJ1aWxkZXIsIHRlc3RUeXBlLCBBR0dS
RUdBVEVfUkVTVUxUU19TTUFMTF9GSUxFX05BTUUpCisKKwlfLCBmaWxlcyA6PSBxdWVyeUZpbGVz
Rm9yVGVzdEZpbGUoY29udGV4dCwgdGVzdEZpbGUsIDEpCisJaWYgbGVuKGZpbGVzKSA9PSAwIHsK
KwkJcmVzdWx0c0VyciA6PSBhZGRGaWxlRnJvbUZpbGVIZWFkZXIoY29udGV4dCwgdGVzdEZpbGUs
IGZpbGVIZWFkZXIpCisJCXJlc3VsdHNTbWFsbEVyciA6PSBhZGRGaWxlRnJvbUZpbGVIZWFkZXIo
Y29udGV4dCwgdGVzdEZpbGVTbWFsbCwgZmlsZUhlYWRlcikKKwkJaWYgcmVzdWx0c0VyciAhPSBu
aWwgeworCQkJcmV0dXJuIGJhc2UuRXJyb3IocmVzdWx0c0VycikKKwkJfQorCQlpZiByZXN1bHRz
U21hbGxFcnIgIT0gbmlsIHsKKwkJCXJldHVybiBiYXNlLkVycm9yKHJlc3VsdHNTbWFsbEVycikK
KwkJfQorCQlyZXR1cm4gbmlsCisJfQorCisJcmVzdWx0c0VyciA6PSBtZXJnZUluZGl2aWR1YWxK
c29uRmlsZShjb250ZXh0LCB0ZXN0RmlsZSwgZmlsZXNbMF0uQmxvYktleSwgYnVpbGRlciwgZmls
ZUhlYWRlciwgTUFYX0JVSUxEUykKKwlyZXN1bHRzU21hbGxFcnIgOj0gbWVyZ2VJbmRpdmlkdWFs
SnNvbkZpbGUoY29udGV4dCwgdGVzdEZpbGVTbWFsbCwgZmlsZXNbMF0uQmxvYktleSwgYnVpbGRl
ciwgZmlsZUhlYWRlciwgTUFYX0JVSUxEU19TTUFMTCkKKwlyZXR1cm4gYmFzZS5NdWx0aUVycm9y
KHJlc3VsdHNFcnIsIHJlc3VsdHNTbWFsbEVycikKK30KKworZnVuYyBtZXJnZUluZGl2aWR1YWxK
c29uRmlsZShjb250ZXh0IGFwcGVuZ2luZS5Db250ZXh0LCB0ZXN0RmlsZSBUZXN0RmlsZSwgYmxv
YktleSBhcHBlbmdpbmUuQmxvYktleSwgYnVpbGRlciBzdHJpbmcsIGZpbGVIZWFkZXIgKm11bHRp
cGFydC5GaWxlSGVhZGVyLCBtYXhCdWlsZHMgaW50KSBvcy5FcnJvciB7CisJYnVmZmVyLCBlcnIg
Oj0gYmFzZS5Xcml0ZU1lcmdlZEpzb25Gcm9tRmlsZUhlYWRlcihibG9ic3RvcmUuTmV3UmVhZGVy
KGNvbnRleHQsIGJsb2JLZXkpLCBmaWxlSGVhZGVyLCBidWlsZGVyLCBtYXhCdWlsZHMpCisJaWYg
ZXJyICE9IG5pbCB7CisJCXJldHVybiBiYXNlLkVycm9yKGVycikKKwl9CisJcmV0dXJuIGJhc2Uu
RXJyb3IoYWRkRmlsZShjb250ZXh0LCB0ZXN0RmlsZSwgYnVmZmVyKSkKK30KKworZnVuYyBzYXZl
VG9CbG9iU3RvcmUoY29udGV4dCBhcHBlbmdpbmUuQ29udGV4dCwgZnJvbSBpby5SZWFkZXIpIChh
cHBlbmdpbmUuQmxvYktleSwgb3MuRXJyb3IpIHsKKwl2YXIga2V5IGFwcGVuZ2luZS5CbG9iS2V5
CisJd3JpdGVyLCBlcnIgOj0gYmxvYnN0b3JlLkNyZWF0ZShjb250ZXh0LCAiYXBwbGljYXRpb24v
anNvbiIpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBrZXksIGJhc2UuRXJyb3IoZXJyKQor
CX0KKwlpZiBlcnIgPSBiYXNlLldyaXRlQnl0ZXMod3JpdGVyLCBmcm9tKTsgZXJyICE9IG5pbCB7
CisJCXJldHVybiBrZXksIGVycgorCX0KKwlpZiBlcnIgPSB3cml0ZXIuQ2xvc2UoKTsgZXJyICE9
IG5pbCB7CisJCXJldHVybiBrZXksIGJhc2UuRXJyb3IoZXJyKQorCX0KKwlrZXksIGVyciA9IHdy
aXRlci5LZXkoKQorCXJldHVybiBrZXksIGJhc2UuRXJyb3IoZXJyKQorfQorCitmdW5jIGFkZEZp
bGVGcm9tRmlsZUhlYWRlcihjb250ZXh0IGFwcGVuZ2luZS5Db250ZXh0LCB0ZXN0RmlsZSBUZXN0
RmlsZSwgZmlsZUhlYWRlciAqbXVsdGlwYXJ0LkZpbGVIZWFkZXIpIG9zLkVycm9yIHsKKwlmaWxl
LCBlcnIgOj0gZmlsZUhlYWRlci5PcGVuKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGJh
c2UuRXJyb3IoZXJyKQorCX0KKwlpZiBlcnIgPSBhZGRGaWxlKGNvbnRleHQsIHRlc3RGaWxlLCBm
aWxlKTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisJcmV0dXJuIGJhc2UuRXJyb3Io
ZmlsZS5DbG9zZSgpKQorfQorCitmdW5jIGRlZHVwZUZpbGUoY29udGV4dCBhcHBlbmdpbmUuQ29u
dGV4dCwgdGVzdEZpbGUgVGVzdEZpbGUpIG9zLkVycm9yIHsKKwlrZXlzLCBmaWxlcyA6PSBxdWVy
eUZpbGVzRm9yVGVzdEZpbGUoY29udGV4dCwgdGVzdEZpbGUsIDApCisJLy8gQmVjYXVzZSBvZiBl
dmVudHVhbCBjb25zaXN0ZW5jeSBpbiB0aGUgQXBwRW5naW5lIGRhdGFzdG9yZSwgZmlsZXMgd2Ug
anVzdCB3cm90ZQorCS8vIG1pZ2h0IG5vdCBzaG93IHVwIGhlcmUuIFRoZXknbGwgZ2V0IHN1Y2Nl
c3NmdWxseSBkZWR1cGVkIHRoZSBuZXh0IHRpbWUgd2UKKwkvLyB1cGRhdGUgdGhpcyBmaWxlIHRo
b3VnaC4KKwlpZiBsZW4oa2V5cykgPT0gMCB7CisJCXJldHVybiBuaWwKKwl9CisKKwlibG9iS2V5
cyA6PSBtYWtlKFtdYXBwZW5naW5lLkJsb2JLZXksIGxlbihmaWxlcykpCisJZm9yIGkgOj0gMTsg
aSA8IGxlbihmaWxlcyk7IGkrKyB7CisJCWJsb2JLZXlzW2ldID0gZmlsZXNbaV0uQmxvYktleQor
CX0KKworCS8vIEZJWE1FOiBUaGUgbG9jYWwgR28gYXBwZW5naW5lIGRldiBzZXJ2ZXIgaGFzIGEg
YnVnIHdoZXJlIGl0IHRocm93cyBhbiBlcnJvciBoZXJlOgorCS8vICJBUEkgZXJyb3IgMSAoYmxv
YnN0b3JlOiBJTlRFUk5BTF9FUlJPUik6IG5hbWUgbXVzdCBub3QgYmUgZW1wdHkuIgorCS8vIFJl
dHVybiBuaWwgaGVyZSB0byBhdm9pZCB0aHJvd2luZyBhbiBlcnJvci4KKwlpZiBlcnIgOj0gZGF0
YXN0b3JlLkRlbGV0ZU11bHRpKGNvbnRleHQsIGtleXNbMTpdKTsgZXJyICE9IG5pbCB7CisJCXJl
dHVybiBiYXNlLkVycm9yKGVycikKKwl9CisJaWYgZXJyIDo9IGJsb2JzdG9yZS5EZWxldGVNdWx0
aShjb250ZXh0LCBibG9iS2V5cyk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gYmFzZS5FcnJvcihl
cnIpCisJfQorCXJldHVybiBuaWwKK30KKworZnVuYyBhZGRGaWxlKGNvbnRleHQgYXBwZW5naW5l
LkNvbnRleHQsIHRlc3RGaWxlIFRlc3RGaWxlLCBmcm9tIGlvLlJlYWRlcikgb3MuRXJyb3Igewor
CWJsb2JLZXksIGVyciA6PSBzYXZlVG9CbG9iU3RvcmUoY29udGV4dCwgZnJvbSkKKwlpZiBlcnIg
IT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKworCXRlc3RGaWxlLkJsb2JLZXkgPSBibG9iS2V5
CisJaWYgXywgZXJyID0gZGF0YXN0b3JlLlB1dChjb250ZXh0LCBkYXRhc3RvcmUuTmV3SW5jb21w
bGV0ZUtleShjb250ZXh0LCAiVGVzdEZpbGUiLCBuaWwpLCAmdGVzdEZpbGUpOyBlcnIgIT0gbmls
IHsKKwkJcmV0dXJuIGVycgorCX0KKworCS8vIEZJWE1FOiBNYWtlIHdoZXRoZXIgd2UgZGVkdXBl
IGEgZ2l2ZW4gZmlsZSBhIHBhc3NlZCBpbiBwYXJhbWV0ZXIuIEZvciBub3csIHdlIGRlZHVwZSBh
bGwgZmlsZXMgb3RoZXIgdGhhbiBmdWxsX3Jlc3VsdHMuanNvbi4KKwlpZiB0ZXN0RmlsZS5OYW1l
ID09IEZVTExfUkVTVUxUU19GSUxFX05BTUUgeworCQlyZXR1cm4gbmlsCisJfQorCisJLy8gRklY
TUU6IE1lYXN1cmUgaG93IG11Y2ggbGF0ZW5jeSB0aGlzIGFkZHMgYW5kIG1vdmUgaXQgdG8gYSBU
YXNrUXVldWUgaWYgaXQgYWRkcyB0b28gbXVjaCBsYXRlbmN5LgorCXJldHVybiBkZWR1cGVGaWxl
KGNvbnRleHQsIHRlc3RGaWxlKQorfQorCitmdW5jIHJvb3Qod3JpdGVyIGh0dHAuUmVzcG9uc2VX
cml0ZXIsIHJlcXVlc3QgKmh0dHAuUmVxdWVzdCkgeworCW1lbnVUZW1wbGF0ZS5FeGVjdXRlKHdy
aXRlciwgbmlsKQorfQorCitmdW5jIHF1ZXJ5RmlsZXNGb3JUZXN0RmlsZShjb250ZXh0IGFwcGVu
Z2luZS5Db250ZXh0LCB0ZXN0RmlsZSBUZXN0RmlsZSwgbGltaXQgaW50KSAoW10qZGF0YXN0b3Jl
LktleSwgW11UZXN0RmlsZSkgeworCXJldHVybiBxdWVyeUZpbGVzKGNvbnRleHQsIHRlc3RGaWxl
Lk1hc3RlciwgdGVzdEZpbGUuQnVpbGRlciwgdGVzdEZpbGUuVGVzdFR5cGUsIHRlc3RGaWxlLk5h
bWUsIGxpbWl0KQorfQorCitmdW5jIHF1ZXJ5RmlsZXMoY29udGV4dCBhcHBlbmdpbmUuQ29udGV4
dCwgbWFzdGVyIHN0cmluZywgYnVpbGRlciBzdHJpbmcsIHRlc3RUeXBlIHN0cmluZywgbmFtZSBz
dHJpbmcsIGxpbWl0IGludCkgKFtdKmRhdGFzdG9yZS5LZXksIFtdVGVzdEZpbGUpIHsKKwlxdWVy
eSA6PSBkYXRhc3RvcmUuTmV3UXVlcnkoIlRlc3RGaWxlIikuT3JkZXIoIi1EYXRlTWljcm9zZWNv
bmRzIikuTGltaXQobGltaXQpCisJaWYgbWFzdGVyICE9ICIiIHsKKwkJcXVlcnkgPSBxdWVyeS5G
aWx0ZXIoIk1hc3Rlcj0iLCBtYXN0ZXIpCisJfQorCisJaWYgYnVpbGRlciAhPSAiIiB7CisJCXF1
ZXJ5ID0gcXVlcnkuRmlsdGVyKCJCdWlsZGVyPSIsIGJ1aWxkZXIpCisJfQorCisJaWYgdGVzdFR5
cGUgIT0gIiIgeworCQlxdWVyeSA9IHF1ZXJ5LkZpbHRlcigiVGVzdFR5cGU9IiwgdGVzdFR5cGUp
CisJfQorCisJaWYgbmFtZSAhPSAiIiB7CisJCXF1ZXJ5ID0gcXVlcnkuRmlsdGVyKCJOYW1lPSIs
IG5hbWUpCisJfQorCisJdmFyIHRlc3RGaWxlcyBbXVRlc3RGaWxlCisJa2V5cywgXyA6PSBxdWVy
eS5HZXRBbGwoY29udGV4dCwgJnRlc3RGaWxlcykKKwlyZXR1cm4ga2V5cywgdGVzdEZpbGVzCit9
CisKK2Z1bmMgc2VydmVUZXN0RmlsZSh3cml0ZXIgaHR0cC5SZXNwb25zZVdyaXRlciwgY29udGV4
dCBhcHBlbmdpbmUuQ29udGV4dCwgdGVzdEZpbGUgVGVzdEZpbGUsIGNhbGxiYWNrIHN0cmluZykg
eworCWJhc2UuU2VydmVKc29uKHdyaXRlciwgYmxvYnN0b3JlLk5ld1JlYWRlcihjb250ZXh0LCB0
ZXN0RmlsZS5CbG9iS2V5KSwgY2FsbGJhY2spCit9CisKK2Z1bmMgZGVsZXRlRmlsZSh3cml0ZXIg
aHR0cC5SZXNwb25zZVdyaXRlciwgcmVxdWVzdCAqaHR0cC5SZXF1ZXN0KSB7CisJY29udGV4dCA6
PSBhcHBlbmdpbmUuTmV3Q29udGV4dChyZXF1ZXN0KQorCisJY3VycmVudFVzZXIgOj0gdXNlci5D
dXJyZW50KGNvbnRleHQpCisJaWYgIXVzZXIuSXNBZG1pbihjb250ZXh0KSB7CisJCWRlbGV0ZVVy
bCA6PSByZXF1ZXN0LlVSTC5TdHJpbmcoKQorCQlodG1sIDo9ICIiCisJCWlmIGN1cnJlbnRVc2Vy
ID09IG5pbCB7CisJCQlsb2dpblVybCwgXyA6PSB1c2VyLkxvZ2luVVJMKGNvbnRleHQsIGRlbGV0
ZVVybCkKKwkJCWh0bWwgPSBmbXQuU3ByaW50ZihgPGEgaHJlZj0iJXMiPlNpZ24gaW48L2E+YCwg
bG9naW5VcmwpCisJCX0gZWxzZSB7CisJCQlsb2dvdXRVcmwsIF8gOj0gdXNlci5Mb2dvdXRVUkwo
Y29udGV4dCwgZGVsZXRlVXJsKQorCQkJaHRtbCA9IGZtdC5TcHJpbnRmKGBDdXJyZW50bHkgbG9n
Z2VkIGluIGFzICVzLiBDb250YWN0IG9qYW5AY2hyb21pdW0ub3JnIHRvIGJlY29tZSBhbiBhZG1p
biBvciA8YSBocmVmPSIlcyI+c2lnbiBvdXQ8L2E+IHNvIHlvdSBjYW4gc2lnbiBpbiB0byBhIGRp
ZmZlcmVudCBhY2NvdW50LmAsIGN1cnJlbnRVc2VyLkVtYWlsLCBsb2dvdXRVcmwpCisJCX0KKwkJ
YmFzZS5TZXJ2ZTIwMCh3cml0ZXIsICJNdXN0IGJlIGxvZ2dlZCBpbiBhcyBhbiBhZG1pbi4gIiwg
aHRtbCkKKwkJcmV0dXJuCisJfQorCisJaWYga2V5U3RyaW5nIDo9IHJlcXVlc3QuVVJMLlF1ZXJ5
KCkuR2V0KGJhc2UuS0VZKTsga2V5U3RyaW5nID09ICIiIHsKKwkJc2VydmU0MDQoY29udGV4dCwg
d3JpdGVyLCAiSW52YWxpZCBrZXk6ICIra2V5U3RyaW5nKQorCX0gZWxzZSB7CisJCWtleSwgZXJy
IDo9IGRhdGFzdG9yZS5EZWNvZGVLZXkoa2V5U3RyaW5nKQorCQlpZiBlcnIgIT0gbmlsIHsKKwkJ
CXNlcnZlNDA0KGNvbnRleHQsIHdyaXRlciwgIk5vIGVudGl0eSBleGlzdHMgd2l0aCBrZXk6ICIr
a2V5U3RyaW5nKQorCQkJcmV0dXJuCisJCX0KKwkJdGVzdEZpbGUgOj0gbmV3KFRlc3RGaWxlKQor
CQlpZiBlcnIgPSBkYXRhc3RvcmUuR2V0KGNvbnRleHQsIGtleSwgdGVzdEZpbGUpOyBlcnIgIT0g
bmlsIHsKKwkJCXNlcnZlNTAwKGNvbnRleHQsIHdyaXRlciwgIkVycm9yIHJldHJpZXZpbmcgZmls
ZSBmcm9tIHRoZSBkYXRhc3RvcmU6ICIra2V5U3RyaW5nKQorCQkJcmV0dXJuCisJCX0KKworCQlp
ZiBlcnIgOj0gYmxvYnN0b3JlLkRlbGV0ZShjb250ZXh0LCB0ZXN0RmlsZS5CbG9iS2V5KTsgZXJy
ICE9IG5pbCB7CisJCQlzZXJ2ZTUwMChjb250ZXh0LCB3cml0ZXIsIGJhc2UuRXJyb3IoZXJyKS5T
dHJpbmcoKSkKKwkJCXJldHVybgorCQl9CisJCWlmIGVyciA6PSBkYXRhc3RvcmUuRGVsZXRlKGNv
bnRleHQsIGtleSk7IGVyciAhPSBuaWwgeworCQkJc2VydmU1MDAoY29udGV4dCwgd3JpdGVyLCBi
YXNlLkVycm9yKGVycikuU3RyaW5nKCkpCisJCQlyZXR1cm4KKwkJfQorCisJCWJhc2UuU2VydmUy
MDAod3JpdGVyLCBmbXQuU3ByaW50ZigiRGVsZXRlZCBmaWxlIHdpdGgga2V5OiAlcywgbWFzdGVy
OiAlcywgYnVpbGRlcjogJXMsIHRlc3RUeXBlOiAlcywgbmFtZTogJXMiLCBrZXlTdHJpbmcsIHRl
c3RGaWxlLk1hc3RlciwgdGVzdEZpbGUuQnVpbGRlciwgdGVzdEZpbGUuVGVzdFR5cGUsIHRlc3RG
aWxlLk5hbWUpKQorCX0KK30KKworZnVuYyB0ZXN0RmlsZSh3cml0ZXIgaHR0cC5SZXNwb25zZVdy
aXRlciwgcmVxdWVzdCAqaHR0cC5SZXF1ZXN0KSB7CisJY29udGV4dCA6PSBhcHBlbmdpbmUuTmV3
Q29udGV4dChyZXF1ZXN0KQorCisJcXVlcnlEYXRhLCBlcnIgOj0gYmFzZS5QYXJzZVRlc3RGaWxl
UXVlcnlEYXRhKHJlcXVlc3QpCisJaWYgZXJyICE9IG5pbCB7CisJCXNlcnZlNDAzKGNvbnRleHQs
IHdyaXRlciwgZXJyLlN0cmluZygpKQorCQlyZXR1cm4KKwl9CisKKwlpZiBxdWVyeURhdGEuS2V5
ICE9ICIiIHsKKwkJa2V5LCBlcnIgOj0gZGF0YXN0b3JlLkRlY29kZUtleShxdWVyeURhdGEuS2V5
KQorCQlpZiBlcnIgIT0gbmlsIHsKKwkJCXNlcnZlNDA0KGNvbnRleHQsIHdyaXRlciwgIk5vIGVu
dGl0eSBleGlzdHMgd2l0aCBrZXk6ICIrcXVlcnlEYXRhLktleSkKKwkJCXJldHVybgorCQl9CisJ
CXRlc3RGaWxlIDo9IG5ldyhUZXN0RmlsZSkKKwkJaWYgZXJyID0gZGF0YXN0b3JlLkdldChjb250
ZXh0LCBrZXksIHRlc3RGaWxlKTsgZXJyICE9IG5pbCB7CisJCQlzZXJ2ZTUwMChjb250ZXh0LCB3
cml0ZXIsICJFcnJvciByZXRyaWV2aW5nIGZpbGUgZnJvbSB0aGUgZGF0YXN0b3JlOiAiK3F1ZXJ5
RGF0YS5LZXkrIlxuIitlcnIuU3RyaW5nKCkpCisJCQlyZXR1cm4KKwkJfQorCQlzZXJ2ZVRlc3RG
aWxlKHdyaXRlciwgY29udGV4dCwgKnRlc3RGaWxlLCBxdWVyeURhdGEuQ2FsbGJhY2spCisJCXJl
dHVybgorCX0KKworCWtleXMsIGZpbGVzIDo9IHF1ZXJ5RmlsZXMoY29udGV4dCwgcXVlcnlEYXRh
Lk1hc3RlciwgcXVlcnlEYXRhLkJ1aWxkZXIsIHF1ZXJ5RGF0YS5UZXN0VHlwZSwgcXVlcnlEYXRh
Lk5hbWUsIHF1ZXJ5RGF0YS5MaW1pdCkKKwlpZiBsZW4oa2V5cykgPT0gMCB7CisJCXNlcnZlNDA0
KGNvbnRleHQsIHdyaXRlciwgZm10LlNwcmludGYoIlRoZXJlIGFyZSBubyBmaWxlcyB3aXRoIG1h
c3RlcjogJXMsIGJ1aWxkZXI6ICVzLCB0ZXN0VHlwZTogJXMsIG5hbWU6ICVzIiwgcXVlcnlEYXRh
Lk1hc3RlciwgcXVlcnlEYXRhLkJ1aWxkZXIsIHF1ZXJ5RGF0YS5UZXN0VHlwZSwgcXVlcnlEYXRh
Lk5hbWUpKQorCQlyZXR1cm4KKwl9CisKKwlpZiBxdWVyeURhdGEuTWFzdGVyICE9ICIiICYmIHF1
ZXJ5RGF0YS5CdWlsZGVyICE9ICIiICYmIHF1ZXJ5RGF0YS5UZXN0VHlwZSAhPSAiIiAmJiBxdWVy
eURhdGEuTmFtZSAhPSAiIiB7CisJCWlmIHF1ZXJ5RGF0YS5UZXN0TGlzdEpzb24geworCQkJaWYg
ZXJyIDo9IGJhc2UuV3JpdGVUZXN0TGlzdEpzb24od3JpdGVyLCBibG9ic3RvcmUuTmV3UmVhZGVy
KGNvbnRleHQsIGZpbGVzWzBdLkJsb2JLZXkpLCBxdWVyeURhdGEuQnVpbGRlciwgcXVlcnlEYXRh
LkNhbGxiYWNrKTsgZXJyICE9IG5pbCB7CisJCQkJc2VydmU1MDAoY29udGV4dCwgd3JpdGVyLCBm
bXQuU3ByaW50ZigibWFzdGVyOiAlcywgYnVpbGRlcjogJXMsIHRlc3RUeXBlOiAlcywgbmFtZTog
JXMsIGVycm9yOiAlcyIsIHF1ZXJ5RGF0YS5NYXN0ZXIsIHF1ZXJ5RGF0YS5CdWlsZGVyLCBxdWVy
eURhdGEuVGVzdFR5cGUsIHF1ZXJ5RGF0YS5OYW1lLCBlcnIuU3RyaW5nKCkpKQorCQkJfQorCQkJ
cmV0dXJuCisJCX0gZWxzZSB7CisJCQkvLyBGSVhNRTogSWYgdGhlIHF1ZXJ5RGF0YS5DYWxsYmFj
ayBpcyBlbXB0eSAob3IgQUREX1JFU1VMVFMgZm9yIGZ1bGxfcmVzdWx0cy5qc29uKSwgdXNlIGJs
b2JzdG9yZS5TZW5kIGluc3RlYWQgc2luY2UgdGhhdCdzIG1vcmUgZWZmaWNpZW50LgorCQkJc2Vy
dmVUZXN0RmlsZSh3cml0ZXIsIGNvbnRleHQsIGZpbGVzWzBdLCBxdWVyeURhdGEuQ2FsbGJhY2sp
CisJCQlyZXR1cm4KKwkJfQorCX0KKworCWlmIHF1ZXJ5RGF0YS5DYWxsYmFjayAhPSAiIiB7CisJ
CXR5cGUgQ2FsbGJhY2tLZXlMaXN0IHN0cnVjdCB7CisJCQlDYWxsYmFjayBzdHJpbmcKKwkJCUtl
eXMgICAgIFtdKmRhdGFzdG9yZS5LZXkKKwkJfQorCQlpZiBlcnIgOj0gZmlsZUxpc3RKc29ucFRl
bXBsYXRlLkV4ZWN1dGUod3JpdGVyLCBDYWxsYmFja0tleUxpc3R7Q2FsbGJhY2s6IHF1ZXJ5RGF0
YS5DYWxsYmFjaywgS2V5czoga2V5c30pOyBlcnIgIT0gbmlsIHsKKwkJCXNlcnZlNTAwKGNvbnRl
eHQsIHdyaXRlciwgIkV4ZWN1dGlvbiBvbiBmaWxlTGlzdEpzb25wVGVtcGxhdGUgZmFpbGVkOiAi
LCBlcnIuU3RyaW5nKCkpCisJCX0KKwkJcmV0dXJuCisJfQorCisJdmFyIGZpbGVzV2l0aEtleXMg
W11GaWxlV2l0aEtleQorCWZvciBpLCBfIDo9IHJhbmdlIGtleXMgeworCQlmaWxlc1dpdGhLZXlz
ID0gYXBwZW5kKGZpbGVzV2l0aEtleXMsIEZpbGVXaXRoS2V5e0ZpbGU6IGZpbGVzW2ldLCBLZXk6
IGtleXNbaV19KQorCX0KKworCWZpbGVMaXN0IDo9IEZpbGVMaXN0eworCQlNYXN0ZXI6ICAgICAg
ICBxdWVyeURhdGEuTWFzdGVyLAorCQlCdWlsZGVyOiAgICAgICBxdWVyeURhdGEuQnVpbGRlciwK
KwkJVGVzdFR5cGU6ICAgICAgcXVlcnlEYXRhLlRlc3RUeXBlLAorCQlOYW1lOiAgICAgICAgICBx
dWVyeURhdGEuTmFtZSwKKwkJRmlsZXNXaXRoS2V5czogZmlsZXNXaXRoS2V5cywKKwl9CisKKwlp
ZiBlcnIgOj0gZmlsZUxpc3RUZW1wbGF0ZS5FeGVjdXRlKHdyaXRlciwgZmlsZUxpc3QpOyBlcnIg
IT0gbmlsIHsKKwkJc2VydmU1MDAoY29udGV4dCwgd3JpdGVyLCAiRXhlY3V0aW9uIG9uIGZpbGVM
aXN0VGVtcGxhdGUgZmFpbGVkOiAiLCBlcnIuU3RyaW5nKCkpCisJfQorfQorCitmdW5jIHVwbG9h
ZEZpbGUod3JpdGVyIGh0dHAuUmVzcG9uc2VXcml0ZXIsIHJlcXVlc3QgKmh0dHAuUmVxdWVzdCkg
eworCWNvbnRleHQgOj0gYXBwZW5naW5lLk5ld0NvbnRleHQocmVxdWVzdCkKKworCWZvcm1EYXRh
LCBlcnIgOj0gYmFzZS5QYXJzZVVwbG9hZEZvcm1EYXRhKHJlcXVlc3QpCisJaWYgZXJyICE9IG5p
bCB7CisJCXNlcnZlNDAzKGNvbnRleHQsIHdyaXRlciwgZXJyLlN0cmluZygpKQorCQlyZXR1cm4K
Kwl9CisKKwljb250ZXh0LkRlYnVnZigiUHJvY2Vzc2luZyB1cGxvYWQgcmVxdWVzdCwgbWFzdGVy
OiAlcywgYnVpbGRlcjogJXMsIHRlc3RUeXBlOiAlcywgZmlsZXM6ICVzLiIsIGZvcm1EYXRhLk1h
c3RlciwgZm9ybURhdGEuQnVpbGRlciwgZm9ybURhdGEuVGVzdFR5cGUsIGZvcm1EYXRhLkZpbGVz
KQorCisJc3VjY2VlZGVkIDo9IHRydWUKKwl2YXIgZXJyb3JzIFtdc3RyaW5nCisJZm9yIGkgOj0g
MDsgaSA8IGxlbihmb3JtRGF0YS5GaWxlcyk7IGkrKyB7CisJCW5hbWUgOj0gZm9ybURhdGEuRmls
ZXNbaV0uRmlsZW5hbWUKKworCQl2YXIgZXJyIG9zLkVycm9yCisJCWlmIG5hbWUgPT0gSU5DUkVN
RU5UQUxfUkVTVUxUU19GSUxFX05BTUUgeworCQkJZXJyID0gbWVyZ2VKc29uRmlsZShjb250ZXh0
LCBmb3JtRGF0YS5NYXN0ZXIsIGZvcm1EYXRhLkJ1aWxkZXIsIGZvcm1EYXRhLlRlc3RUeXBlLCBm
b3JtRGF0YS5GaWxlc1tpXSkKKwkJfSBlbHNlIHsKKwkJCXRlc3RGaWxlIDo9IG5ld1Rlc3RGaWxl
KGZvcm1EYXRhLk1hc3RlciwgZm9ybURhdGEuQnVpbGRlciwgZm9ybURhdGEuVGVzdFR5cGUsIGZv
cm1EYXRhLkZpbGVzW2ldLkZpbGVuYW1lKQorCQkJZXJyID0gYWRkRmlsZUZyb21GaWxlSGVhZGVy
KGNvbnRleHQsIHRlc3RGaWxlLCBmb3JtRGF0YS5GaWxlc1tpXSkKKwkJfQorCisJCWlmIGVyciAh
PSBuaWwgeworCQkJc3VjY2VlZGVkID0gZmFsc2UKKwkJCWVycm9ycyA9IGFwcGVuZChlcnJvcnMs
IGZtdC5TcHJpbnRmKCJGQUlMOiBVcGxvYWQgZmFpbGVkLCBtYXN0ZXI6ICVzLCBidWlsZGVyOiAl
cywgdGVzdFR5cGU6ICVzLCBuYW1lOiAlcywgZXJyb3I6ICVzLjxicj4iLCBmb3JtRGF0YS5NYXN0
ZXIsIGZvcm1EYXRhLkJ1aWxkZXIsIGZvcm1EYXRhLlRlc3RUeXBlLCBuYW1lLCBlcnIuU3RyaW5n
KCkpKQorCQl9CisJfQorCisJaWYgc3VjY2VlZGVkIHsKKwkJYmFzZS5TZXJ2ZTIwMCh3cml0ZXIs
ICJPSyIpCisJfSBlbHNlIHsKKwkJc2VydmU1MDAoY29udGV4dCwgd3JpdGVyLCBlcnJvcnMuLi4p
CisJfQorfQorCitmdW5jIHVwbG9hZEZvcm0od3JpdGVyIGh0dHAuUmVzcG9uc2VXcml0ZXIsIHJl
cXVlc3QgKmh0dHAuUmVxdWVzdCkgeworCXVwbG9hZFRlbXBsYXRlLkV4ZWN1dGUod3JpdGVyLCBu
aWwpCit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFz
aGJvYXJkcy9MSUNFTlNFLmR5Z3JhcGgudHh0IGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIv
c3RhdGljLWRhc2hib2FyZHMvTElDRU5TRS5keWdyYXBoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MzZjMGE4
YmYyOTAyYTAxNGE3ZWIyYTVmMmY4ZjhkY2JkOTgxZGJmCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvTElDRU5TRS5keWdyYXBo
LnR4dApAQCAtMCwwICsxLDIyIEBACitDb3B5cmlnaHQgKGMpIDIwMDkgRGFuIFZhbmRlcmthbQor
CitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl
cnNvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv
Y3VtZW50YXRpb24KK2ZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3
YXJlIHdpdGhvdXQKK3Jlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRo
ZSByaWdodHMgdG8gdXNlLAorY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0
ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0
byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv
IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKK2NvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBj
b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCitpbmNs
dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2Fy
ZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg
T0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU
RUQgVE8gVEhFIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQU5ECitOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ
TSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCitXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD
T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKK0ZST00sIE9VVCBPRiBPUiBJTiBD
T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKK09USEVSIERFQUxJTkdT
IElOIFRIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVy
L3N0YXRpYy1kYXNoYm9hcmRzL1JFQURNRS5keWdyYXBoLnR4dCBiL1Rvb2xzL1Rlc3RzRGFzaGJv
YXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL1JFQURNRS5keWdyYXBoLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lODAwNjkyYmEwZmNjMWE1MTg0ZmVlODlkOGM3ODQ2OWZhYjBjNDIwCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvUkVBRE1F
LmR5Z3JhcGgudHh0CkBAIC0wLDAgKzEsNTUgQEAKK2R5Z3JhcGhzIEphdmFTY3JpcHQgY2hhcnRp
bmcgbGlicmFyeQorQ29weXJpZ2h0IChjKSAyMDA2LSwgRGFuIFZhbmRlcmthbS4KKworU3VwcG9y
dDogaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2R5Z3JhcGhzLXVzZXJzCitTb3VyY2U6
IGh0dHA6Ly9naXRodWIuY29tL2RhbnZrL2R5Z3JhcGhzCitJc3N1ZXM6IGh0dHA6Ly9jb2RlLmdv
b2dsZS5jb20vcC9keWdyYXBocy8KKworCitUaGUgZHlncmFwaHMgSmF2YVNjcmlwdCBsaWJyYXJ5
IHByb2R1Y2VzIHByb2R1Y2VzIGludGVyYWN0aXZlLCB6b29tYWJsZSBjaGFydHMgb2YgdGltZSBz
ZXJpZXMuCisKK0ZlYXR1cmVzCistIFBsb3RzIHRpbWUgc2VyaWVzIHdpdGhvdXQgdXNpbmcgYW4g
ZXh0ZXJuYWwgc2VydmVyIG9yIEZsYXNoCistIFN1cHBvcnRzIG11bHRpcGxlIGRhdGEgc2VyaWVz
CistIFN1cHBvcnRzIGVycm9yIGJhbmRzIGFyb3VuZCBkYXRhIHNlcmllcworLSBEaXNwbGF5cyB2
YWx1ZXMgb24gbW91c2VvdmVyCistIEludGVyYWN0aXZlIHpvb20KKy0gQWRqdXN0YWJsZSBhdmVy
YWdpbmcgcGVyaW9kCistIEN1c3RvbWl6YWJsZSBjbGljay10aHJvdWdoIGFjdGlvbnMKKy0gQ29t
cGF0aWJsZSB3aXRoIHRoZSBHb29nbGUgVmlzdWFsaXphdGlvbiBBUEkKKworRGVtbworRm9yIGEg
Z2FsbGVyeSBhbmQgZG9jdW1lbnRhdGlvbiwgc2VlIGh0dHA6Ly9kYW52ay5vcmcvZHlncmFwaHMv
CisKK01pbmltYWwgRXhhbXBsZQorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9ImR5Z3JhcGgtY29tYmluZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8ZGl2IGlkPSJncmFwaGRpdiI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCI+CisgIGcgPSBuZXcgRHlncmFwaCgKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImdyYXBoZGl2IiksICAvLyBjb250YWluaW5nIGRpdgorICAgICAgICAiRGF0ZSxUZW1w
ZXJhdHVyZVxuIiArICAgICAgICAgICAgICAgIC8vIHRoZSBkYXRhIHNlcmllcworICAgICAgICAi
MjAwOC0wNS0wNyw3NVxuIiArCisgICAgICAgICIyMDA4LTA1LTA4LDcwXG4iICsKKyAgICAgICAg
IjIwMDgtMDUtMDksODBcbiIKKyAgICAgICk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
KworTGljZW5zZShzKQorZHlncmFwaHMgdXNlczoKKyAtIHJnYmNvbG9yLmpzIChQdWJsaWMgRG9t
YWluKQorIC0gc3RyZnRpbWUuanMgKEJTRCBMaWNlbnNlKQorIC0gZXhjYW52YXMuanMgKEFwYWNo
ZSBMaWNlbnNlKQorIC0gWVVJIGNvbXByZXNzb3IgKEJTRCBMaWNlbnNlKQorCityZ2Jjb2xvcjog
aHR0cDovL3d3dy5waHBpZWQuY29tL3JnYi1jb2xvci1wYXJzZXItaW4tamF2YXNjcmlwdC8KK3N0
cmZ0aW1lOiBodHRwOi8vdGVjaC5ibHVlc21vb24uaW5mby8yMDA4LzA0L3N0cmZ0aW1lLWluLWph
dmFzY3JpcHQuaHRtbAorZXhjYW52YXM6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9leHBsb3Jl
cmNhbnZhcy8KK3l1aSBjb21wcmVzc29yOiBodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkv
Y29tcHJlc3Nvci8KKworZHlncmFwaHMgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgbGljZW5z
ZSwgaW5jbHVkZWQgaW4gTElDRU5TRS50eHQuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0c0Rhc2hi
b2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9SRUFETUUud2VidHJlZW1hcC50eHQgYi9Ub29s
cy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9SRUFETUUud2VidHJlZW1h
cC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDlkODg1Yjk5YTQ3ODkwZmI1N2FmN2I1MzU2YTA3M2I1OGFiZTE1
OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1k
YXNoYm9hcmRzL1JFQURNRS53ZWJ0cmVlbWFwLnR4dApAQCAtMCwwICsxLDYzIEBACisjIHdlYnRy
ZWVtYXAKKworQSBzaW1wbGUgdHJlZW1hcCBpbXBsZW1lbnRhdGlvbiB1c2luZyB3ZWIgdGVjaG5v
bG9naWVzIChET00gbm9kZXMsIENTUworc3R5bGluZyBhbmQgdHJhbnNpdGlvbnMpIHJhdGhlciB0
aGFuIGEgYmlnIGNhbnZhcy9zdmcvcGx1Z2luLgorCitQbGF5IHdpdGggYSBbZGVtb11bXS4KKwor
W2RlbW9dOiBodHRwOi8vbWFydGluZS5naXRodWIuY29tL3dlYnRyZWVtYXAvZGVtby9kZW1vLmh0
bWwKKworIyMgQ3JlYXRpbmcgeW91ciBvd24KKworMS4gQ3JlYXRlIGEgcGFnZSB3aXRoIGEgRE9N
IG5vZGUgKGkuZS4gYSBgPGRpdj5gKSB0aGF0IHdpbGwgY29udGFpbgorICAgeW91ciB0cmVlbWFw
LgorMi4gQWRkIHRoZSB0cmVlbWFwIHRvIHRoZSBub2RlIHZpYSBzb21ldGhpbmcgbGlrZQorCisg
ICAgICAgIGFwcGVuZFRyZWVtYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215bm9kZScpLCBt
eWRhdGEpOworMy4gU3R5bGUgdGhlIHRyZWVtYXAgdXNpbmcgQ1NTLgorCisjIyMgSW5wdXQgZm9y
bWF0CisKK1RoZSBpbnB1dCBkYXRhIChgbXlkYXRhYCBpbiB0aGUgb3ZlcnZpZXcgc25pcHBldCkg
aXMgYSB0cmVlIG9mIG5vZGVzLAorbGlrZWx5IGltcG9ydGVkIHZpYSBhIHNlcGFyYXRlIEpTT04g
ZmlsZS4gIEVhY2ggbm9kZSAoaW5jbHVkaW5nIHRoZQorcm9vdCkgc2hvdWxkIGNvbnRhaW4gZGF0
YSBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdC4KKworICAgIHsKKyAgICAgIG5hbWU6IChIVE1MIHRo
YXQgaXMgZGlzcGxheWVkIHZpYSAuaW5uZXJIVE1MIG9uIHRoZSBjYXB0aW9uKSwKKyAgICAgIGRh
dGE6IHsKKyAgICAgICAgIiRhcmVhIjogKGEgbnVtYmVyLCBpbiBhcmJpdHJhcnkgdW5pdHMpCisg
ICAgICB9LAorICAgICAgY2hpbGRyZW46IChsaXN0IG9mIGNoaWxkIHRyZWUgbm9kZXMpCisgICAg
fQorCisoVGhpcyBzdHJhbmdlIGZvcm1hdCBmb3IgZGF0YSBjb21lcyBmcm9tIHRoZSB0aGUgW0ph
dmFTY3JpcHQgSW5mb1ZpcworVG9vbGtpdF1bdGhlaml0XS4gIEkgbWlnaHQgY2hhbmdlIGl0IGlu
IHRoZSBmdXR1cmUuKQorCitUaGUgYCRhcmVhYCBvZiBhIG5vZGUgc2hvdWxkIGJlIHRoZSBzdW0g
b2YgdGhlIGAkYXJlYWAgb2YgYWxsIG9mIGl0cworYGNoaWxkcmVuYC4KKworKEF0IHJ1bnRpbWUs
IHRyZWUgbm9kZXMgd2lsbCBkeW5hbWljYWxseSB3aWxsIGdhaW4gdHdvIGV4dHJhCithdHRyaWJ1
dGVzLCBgcGFyZW50YCBhbmQgYGRvbWA7IHRoaXMgaXMgb25seSB3b3J0aCBwb2ludGluZyBvdXQg
c28KK3RoYXQgeW91IGRvbid0IGFjY2lkZW50YWxseSBjb25mbGljdCB3aXRoIHRoZW0uKQorCisj
IyMgQ1NTIHN0eWxpbmcKKworVGhlIHRyZWVtYXAgaXMgY29uc3RydWN0ZWQgd2l0aCBvbmUgYGRp
dmAgcGVyIHJlZ2lvbiB3aXRoIGEgc2VwYXJhdGUKK2BkaXZgIGZvciB0aGUgY2FwdGlvbi4gIEVh
Y2ggZGl2IGlzIHN0eWxlYWJsZSB2aWEgdGhlCitgd2VidHJlZW1hcC1ub2RlYCBDU1MgY2xhc3Mu
ICBUaGUgY2FwdGlvbnMgYXJlIHN0eWxhYmxlIGFzCitgd2VidHJlZW1hcC1jYXB0aW9uYC4KKwor
RWFjaCBsZXZlbCBvZiB0aGUgdHJlZSBhbHNvIGdldHMgYSBwZXItbGV2ZWwgQ1NTIGNsYXNzLAor
YHdlYnRyZWVtYXAtbGV2ZWwwYCB0aHJvdWdoIGB3ZWJ0cmVlbWFwLWxldmVsNGAuICBUaGVzZSBj
YW4gYmUKK2FkanVzdGVkIHRvIGUuZy4gbWFkZSBkaWZmZXJlbnQgbGV2ZWxzIGRpZmZlcmVudCBj
b2xvcnMuICBUbyBjb250cm9sCit0aGUgY2FwdGlvbiBvbiBhIHBlci1sZXZlbCBiYXNpcywgdXNl
IGEgQ1NTIHNlbGVjdG9yIGxpa2UKK2Aud2VidHJlZW1hcC1sZXZlbDIgPiAud2VidHJlZW1hcC1j
YXB0aW9uYC4KKworWW91ciBiZXN0IGJldCBpcyB0byBtb2RpZnkgdGhlIGluY2x1ZGVkIGB3ZWJ0
cmVlbWFwLmNzc2AsIHdoaWNoCitjb250YWlucyBjb21tZW50cyBhYm91dCByZXF1aXJlZCBhbmQg
b3B0aW9uYWwgQ1NTIGF0dHJpYnV0ZXMuCisKKyMjIFJlbGF0ZWQgcHJvamVjdHMKKworKiBbSmF2
YVNjcmlwdCBJbmZvVmlzIFRvb2xraXRdW3RoZWppdF0KKworW3RoZWppdF06IGh0dHA6Ly90aGVq
aXQub3JnLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0
bWwgYi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9hZ2dyZWdh
dGVfcmVzdWx0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkZTYxYjkwNWMzZTMzZGRjYTA4MTE3MWZlNzc2
OTAyYzllYmFjMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZl
ci9zdGF0aWMtZGFzaGJvYXJkcy9hZ2dyZWdhdGVfcmVzdWx0cy5odG1sCkBAIC0wLDAgKzEsMjk4
IEBACis8IS0tIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKK2luIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKK2Rpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKK2NvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCit0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0+Cis8IURPQ1RZUEUgSFRNTD4KKzxo
dG1sPgorCis8aGVhZD4KKzx0aXRsZT5MYXlvdXQgdGVzdCBwYXNzaW5nIHN0YXR1czwvdGl0bGU+
Cis8c3R5bGU+CitoMiB7CisgICAgbWFyZ2luOiAwOworICAgIGZvbnQtc2l6ZTogMS4yZW07Cit9
CitoMyB7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICBmb250LXNpemU6IDFlbTsKK30KKy5j
b250YWluZXIgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBwYWRkaW5nOiAzcHg7
Cit9CitpbWcgeworICAgIGJvcmRlcjogMXB4IGRvdHRlZCBncmV5OworICAgIG1hcmdpbi1yaWdo
dDogNXB4OworICAgIHBhZGRpbmc6IDJweDsKK30KKzwvc3R5bGU+Cis8c2NyaXB0IHNyYz0iYnVp
bGRlcnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImRhc2hib2FyZF9iYXNlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+CisvLyBAZmlsZW92ZXJ2aWV3IENyZWF0ZXMgYSBkYXNoYm9hcmQgZm9y
IHRyYWNraW5nIG51bWJlciBvZiBwYXNzZXMvZmFpbHVyZXMgcGVyIHJ1bi4KKy8vCisvLyBDdXJy
ZW50bHksIG9ubHkgd2Via2l0IHRlc3RzIGFyZSBzdXBwb3J0ZWQsIGJ1dCBhZGRpbmcgb3RoZXIg
dGVzdCB0eXBlcworLy8gc2hvdWxkIGp1c3QgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHN0ZXBzOgor
Ly8gICAgIC1nZW5lcmF0ZSByZXN1bHRzLmpzb24gZm9yIHRoZXNlIHRlc3RzCisvLyAgICAgLWNv
cHkgdGhlbSB0byB0aGUgYXBwcm9wcmlhdGUgbG9jYXRpb24KKy8vICAgICAtYWRkIHRoZSBidWls
ZGVyIG5hbWUgdG8gdGhlIGxpc3Qgb2YgYnVpbGRlcnMgaW4gZGFzaGJvYXJkX2Jhc2UuanMuCisK
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTWV0aG9kcyBhbmQgb2JqZWN0cyBmcm9tIGRhc2hi
b2FyZF9iYXNlLmpzIHRvIG92ZXJyaWRlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitmdW5jdGlv
biBnZW5lcmF0ZVBhZ2UoKQoreworICAgIHZhciBodG1sID0gaHRtbEZvclRlc3RUeXBlU3dpdGNo
ZXIodHJ1ZSkgKyAnPGJyPic7CisgICAgZm9yICh2YXIgYnVpbGRlciBpbiBnX2J1aWxkZXJzKQor
ICAgICAgICBodG1sICs9IGh0bWxGb3JCdWlsZGVyKGJ1aWxkZXIpOworICAgIGRvY3VtZW50LmJv
ZHkuaW5uZXJIVE1MID0gaHRtbDsKK30KKworZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNoUGFyYW1l
dGVyKGtleSwgdmFsdWUpCit7CisgICAgc3dpdGNoKGtleSkgeworICAgIGNhc2UgJ3Jhd1ZhbHVl
cyc6CisgICAgICAgIGdfY3VycmVudFN0YXRlW2tleV0gPSB2YWx1ZSA9PSAndHJ1ZSc7CisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworZ19kZWZhdWx0U3RhdGVWYWx1ZXMgPSB7CisgICAgcmF3VmFsdWVzOiBmYWxz
ZQorfTsKKworZnVuY3Rpb24gaHRtbEZvckJ1aWxkZXIoYnVpbGRlcikKK3sKKyAgICB2YXIgcmVz
dWx0cyA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXTsKKyAgICAvLyBTb21lIGtleXMgd2Vy
ZSBhZGRlZCBsYXRlciB0aGFuIG90aGVycywgc28gdGhleSBkb24ndCBoYXZlIGFzIG1hbnkKKyAg
ICAvLyBidWlsZHMuIFVzZSB0aGUgc2hvcnRlc3QuCisgICAgLy8gRklYTUU6IE9uY2UgNTAwIHJ1
bnMgaGF2ZSBmaW5pc2hlZCwgd2UgY2FuIGdldCByaWQgb2YgcGFzc2luZyB0aGlzCisgICAgLy8g
YXJvdW5kIGFuZCBqdXN0IGFzc3VtZSBhbGwga2V5cyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBi
dWlsZGVycyBmb3IgYQorICAgIC8vIGdpdmVuIGJ1aWxkZXIuCisgICAgdmFyIG51bUNvbHVtbnMg
PSByZXN1bHRzW0FMTF9GSVhBQkxFX0NPVU5UX0tFWV0ubGVuZ3RoOworICAgIHZhciBodG1sID0g
JzxkaXYgY2xhc3M9Y29udGFpbmVyPjxoMj4nICsgYnVpbGRlciArICc8L2gyPic7CisKKyAgICBp
ZiAoZ19jdXJyZW50U3RhdGUucmF3VmFsdWVzKQorICAgICAgICBodG1sICs9IHJhd1ZhbHVlc0hU
TUwocmVzdWx0cywgbnVtQ29sdW1ucyk7CisgICAgZWxzZSB7CisgICAgICAgIGh0bWwgKz0gJzxh
IGhyZWY9InRpbWVsaW5lX2V4cGxvcmVyLmh0bWwnICsgKGxvY2F0aW9uLmhhc2ggPyBsb2NhdGlv
bi5oYXNoICsgJyYnIDogJyMnKSArICdidWlsZGVyPScgKyBidWlsZGVyICsgJyI+JyArCisgICAg
ICAgICAgICBjaGFydEhUTUwocmVzdWx0cywgbnVtQ29sdW1ucykgKyAnPC9hPic7CisgICAgfQor
CisgICAgaHRtbCArPSAnPC9kaXY+JzsKKyAgICByZXR1cm4gaHRtbDsKK30KKworZnVuY3Rpb24g
cmF3VmFsdWVzSFRNTChyZXN1bHRzLCBudW1Db2x1bW5zKQoreworICAgIHZhciBodG1sID0gaHRt
bEZvclN1bW1hcnlUYWJsZShyZXN1bHRzLCBudW1Db2x1bW5zKSArCisgICAgICAgIGh0bWxGb3JU
ZXN0VHlwZShyZXN1bHRzLCBGSVhBQkxFX0NPVU5UU19LRVksIEZJWEFCTEVfREVTQ1JJUFRJT04s
IG51bUNvbHVtbnMpOworICAgIGlmIChpc0xheW91dFRlc3RSZXN1bHRzKCkpIHsKKyAgICAgICAg
aHRtbCArPSBodG1sRm9yVGVzdFR5cGUocmVzdWx0cywgREVGRVJSRURfQ09VTlRTX0tFWSwgREVG
RVJSRURfREVTQ1JJUFRJT04sIG51bUNvbHVtbnMpICsKKyAgICAgICAgICAgIGh0bWxGb3JUZXN0
VHlwZShyZXN1bHRzLCBXT05URklYX0NPVU5UU19LRVksIFdPTlRGSVhfREVTQ1JJUFRJT04sIG51
bUNvbHVtbnMpOworICAgIH0KKyAgICByZXR1cm4gaHRtbDsKK30KKworZnVuY3Rpb24gY2hhcnRI
VE1MKHJlc3VsdHMsIG51bUNvbHVtbnMpCit7CisgICAgdmFyIHNob3VsZFNob3dXZWJLaXRSZXZp
c2lvbnMgPSBpc1RpcE9mVHJlZVdlYktpdEJ1aWxkZXIoKTsKKyAgICB2YXIgcmV2aXNpb25LZXkg
PSBzaG91bGRTaG93V2ViS2l0UmV2aXNpb25zID8gV0VCS0lUX1JFVklTSU9OU19LRVkgOiBDSFJP
TUVfUkVWSVNJT05TX0tFWTsKKyAgICB2YXIgc3RhcnRSZXZpc2lvbiA9IHJlc3VsdHNbcmV2aXNp
b25LZXldW251bUNvbHVtbnMgLSAxXTsKKyAgICB2YXIgZW5kUmV2aXNpb24gPSByZXN1bHRzW3Jl
dmlzaW9uS2V5XVswXTsKKyAgICB2YXIgcmV2aXNpb25MYWJlbCA9IHNob3VsZFNob3dXZWJLaXRS
ZXZpc2lvbnMgPyAiV2ViS2l0IFJldmlzaW9uIiA6ICJDaHJvbWl1bSBSZXZpc2lvbiI7CisKKyAg
ICB2YXIgZml4YWJsZSA9IHJlc3VsdHNbRklYQUJMRV9DT1VOVF9LRVldLnNsaWNlKDAsIG51bUNv
bHVtbnMpOworICAgIHZhciBodG1sID0gY2hhcnQoIlRvdGFsIGZhaWxpbmciLCB7IiI6IGZpeGFi
bGV9LCByZXZpc2lvbkxhYmVsLCBzdGFydFJldmlzaW9uLCBlbmRSZXZpc2lvbik7CisKKyAgICB2
YXIgdmFsdWVzID0gdmFsdWVzUGVyRXhwZWN0YXRpb24ocmVzdWx0c1tGSVhBQkxFX0NPVU5UU19L
RVldLCBudW1Db2x1bW5zKTsKKyAgICAvLyBEb24ndCBjYXJlIGFib3V0IG51bWJlciBvZiBwYXNz
ZXMgZm9yIHRoZSBjaGFydHMuCisgICAgZGVsZXRlKHZhbHVlc1snUCddKTsKKworICAgIHJldHVy
biBodG1sICsgY2hhcnQoIkRldGFpbGVkIGJyZWFrZG93biIsIHZhbHVlcywgcmV2aXNpb25MYWJl
bCwgc3RhcnRSZXZpc2lvbiwgZW5kUmV2aXNpb24pOworfQorCit2YXIgTEFCRUxfQ09MT1JTID0g
WydGRjAwMDAnLCAnMDBGRjAwJywgJzAwMDBGRicsICcwMDAwMDAnLCAnRkY2RUI0JywgJ0ZGQTgx
MicsICc5QjMwRkYnLCAnMDBGRkNDJ107CisKKy8vIEZJWE1FOiBGaW5kIGEgYmV0dGVyIHdheSB0
byBleGNsdWRlIG91dGxpZXJzLiBUaGlzIGlzIGp1c3Qgc28gd2UgZXhjbHVkZQorLy8gcnVucyB3
aGVyZSBldmVyeSB0ZXN0IGZhaWxlZC4KK3ZhciBNQVhfVkFMVUUgPSAxMDAwMDsKKworZnVuY3Rp
b24gZmlsdGVyZWRWYWx1ZXModmFsdWVzLCBkZXNpcmVkTnVtYmVyT2ZQb2ludHMpCit7CisgICAg
Ly8gRmlsdGVyIG91dCB2YWx1ZXMgdG8gbWFrZSB0aGUgZ3JhcGggYSBiaXQgbW9yZSByZWFkYWJs
ZSBhbmQgdG8ga2VlcCBVUkxzCisgICAgLy8gZnJvbSBleGNlZWRpbmcgdGhlIGJyb3dzZXJzIG1h
eCBsZW5ndGggcmVzdHJpY3Rpb24uCisgICAgdmFyIGZpbHRlckFtb3VudCA9IE1hdGguZmxvb3Io
dmFsdWVzLmxlbmd0aCAvIGRlc2lyZWROdW1iZXJPZlBvaW50cyk7CisgICAgaWYgKGZpbHRlckFt
b3VudCA8IDEpCisgICAgICAgIHJldHVybiB2YWx1ZXM7CisKKyAgICByZXR1cm4gdmFsdWVzLmZp
bHRlcihmdW5jdGlvbihlbGVtZW50LCBpbmRleCwgYXJyYXkpIHsKKyAgICAgICAgLy8gSW5jbHVk
ZSB0aGUgbW9zdCByZWNlbnQgYW5kIG9sZGVzdCB2YWx1ZXMgYW5kIGV4Y2x1ZGUgb3V0bGllcnMu
CisgICAgICAgIHJldHVybiAoaW5kZXggJSBmaWx0ZXJBbW91bnQgPT0gMCB8fCBpbmRleCA9PSBh
cnJheS5sZW5ndGggLSAxKSAmJiAoYXJyYXlbaW5kZXhdIDwgTUFYX1ZBTFVFICYmIGFycmF5W2lu
ZGV4XSAhPSAwKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gY2hhcnRVcmwodGl0bGUsIHZhbHVl
cywgcmV2aXNpb25MYWJlbCwgc3RhcnRSZXZpc2lvbiwgZW5kUmV2aXNpb24sIGRlc2lyZWROdW1i
ZXJPZlBvaW50cykgeworICAgIHZhciBtYXhWYWx1ZSA9IDA7CisgICAgZm9yICh2YXIgZXhwZWN0
YXRpb24gaW4gdmFsdWVzKQorICAgICAgICBtYXhWYWx1ZSA9IE1hdGgubWF4KG1heFZhbHVlLCBN
YXRoLm1heC5hcHBseShudWxsLCBmaWx0ZXJlZFZhbHVlcyh2YWx1ZXNbZXhwZWN0YXRpb25dLCBk
ZXNpcmVkTnVtYmVyT2ZQb2ludHMpKSk7CisKKyAgICB2YXIgY2hhcnREYXRhID0gJyc7CisgICAg
dmFyIGxhYmVscyA9ICcnOworICAgIHZhciBudW1MYWJlbHMgPSAwOworCisgICAgdmFyIGZpcnN0
ID0gdHJ1ZTsKKyAgICBmb3IgKHZhciBleHBlY3RhdGlvbiBpbiB2YWx1ZXMpIHsKKyAgICAgICAg
Y2hhcnREYXRhICs9IChmaXJzdCA/ICdlOicgOiAnLCcpICsgZXh0ZW5kZWRFbmNvZGUoZmlsdGVy
ZWRWYWx1ZXModmFsdWVzW2V4cGVjdGF0aW9uXSwgZGVzaXJlZE51bWJlck9mUG9pbnRzKS5yZXZl
cnNlKCksIG1heFZhbHVlKTsKKworICAgICAgICBpZiAoZXhwZWN0YXRpb24pIHsKKyAgICAgICAg
ICAgIG51bUxhYmVscysrOworICAgICAgICAgICAgbGFiZWxzICs9IChmaXJzdCA/ICcnIDogJ3wn
KSArIGV4cGVjdGF0aW9uc01hcCgpW2V4cGVjdGF0aW9uXTsKKyAgICAgICAgfQorICAgICAgICBm
aXJzdCA9IGZhbHNlOworICAgIH0KKworICAgIHZhciB1cmwgPSAiaHR0cDovL2NoYXJ0LmFwaXMu
Z29vZ2xlLmNvbS9jaGFydD9jaHQ9bGMmY2hzPTYwMHg0MDAmY2hkPSIgKworICAgICAgICAgICAg
Y2hhcnREYXRhICsgIiZjaGc9MTUsMTUsMSwzJmNoeHQ9eCx4LHkmY2h4bD0xOnx8IiArIHJldmlz
aW9uTGFiZWwgKworICAgICAgICAgICAgInwmY2h4cj0wLCIgKyBzdGFydFJldmlzaW9uICsgIiwi
ICsgZW5kUmV2aXNpb24gKyAifDIsMCwiICsgbWF4VmFsdWUgKyAiJmNodHQ9IiArIHRpdGxlOwor
CisKKyAgICBpZiAobGFiZWxzKQorICAgICAgICB1cmwgKz0gIiZjaGRsPSIgKyBsYWJlbHMgKyAi
JmNoY289IiArIExBQkVMX0NPTE9SUy5zbGljZSgwLCBudW1MYWJlbHMpLmpvaW4oJywnKTsKKyAg
ICByZXR1cm4gdXJsOworfQorCitmdW5jdGlvbiBjaGFydCh0aXRsZSwgdmFsdWVzLCByZXZpc2lv
bkxhYmVsLCBzdGFydFJldmlzaW9uLCBlbmRSZXZpc2lvbikKK3sKKyAgICB2YXIgZGVzaXJlZE51
bWJlck9mUG9pbnRzID0gNDAwOworICAgIHZhciB1cmwgPSBjaGFydFVybCh0aXRsZSwgdmFsdWVz
LCByZXZpc2lvbkxhYmVsLCBzdGFydFJldmlzaW9uLCBlbmRSZXZpc2lvbiwgZGVzaXJlZE51bWJl
ck9mUG9pbnRzKTsKKworICAgIHdoaWxlICh1cmwubGVuZ3RoID49IDIwNDgpIHsKKyAgICAgICAg
Ly8gRGVjcmVhc2UgdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHBvaW50cyBncmFkdWFsbHkgdW50aWwg
d2UgZ2V0IGEgVVJMIHRoYXQKKyAgICAgICAgLy8gZG9lc24ndCBleGNlZWQgY2hhcnRzZXJ2ZXIn
cyBtYXggVVJMIGxlbmd0aC4KKyAgICAgICAgZGVzaXJlZE51bWJlck9mUG9pbnRzID0gMyAvIDQg
KiBkZXNpcmVkTnVtYmVyT2ZQb2ludHM7CisgICAgICAgIHVybCA9IGNoYXJ0VXJsKHRpdGxlLCB2
YWx1ZXMsIHJldmlzaW9uTGFiZWwsIHN0YXJ0UmV2aXNpb24sIGVuZFJldmlzaW9uLCBkZXNpcmVk
TnVtYmVyT2ZQb2ludHMpOworICAgIH0KKworICAgIHJldHVybiAnPGltZyBzcmM9IicgKyB1cmwg
KyAnIj4nOworfQorCitmdW5jdGlvbiBodG1sRm9yUmV2aXNpb25Sb3dzKHJlc3VsdHMsIG51bUNv
bHVtbnMpCit7CisgICAgcmV0dXJuIGh0bWxGb3JUYWJsZVJvdygnV2ViS2l0IFJldmlzaW9uJywg
cmVzdWx0c1tXRUJLSVRfUkVWSVNJT05TX0tFWV0uc2xpY2UoMCwgbnVtQ29sdW1ucykpICsKKyAg
ICAgICAgaHRtbEZvclRhYmxlUm93KCdDaHJvbWUgUmV2aXNpb24nLCByZXN1bHRzW0NIUk9NRV9S
RVZJU0lPTlNfS0VZXS5zbGljZSgwLCBudW1Db2x1bW5zKSk7Cit9CisKK2Z1bmN0aW9uIHdyYXBI
VE1MSW5UYWJsZShkZXNjcmlwdGlvbiwgaHRtbCkKK3sKKyAgICByZXR1cm4gJzxoMz4nICsgZGVz
Y3JpcHRpb24gKyAnPC9oMz48dGFibGU+PHRib2R5PicgKyBodG1sICsgJzwvdGJvZHk+PC90YWJs
ZT4nOworfQorCitmdW5jdGlvbiBodG1sRm9yU3VtbWFyeVRhYmxlKHJlc3VsdHMsIG51bUNvbHVt
bnMpCit7CisgICAgdmFyIHBlcmNlbnQgPSBbXTsKKyAgICB2YXIgZml4YWJsZSA9IHJlc3VsdHNb
RklYQUJMRV9DT1VOVF9LRVldLnNsaWNlKDAsIG51bUNvbHVtbnMpOworICAgIHZhciBhbGxGaXhh
YmxlID0gcmVzdWx0c1tBTExfRklYQUJMRV9DT1VOVF9LRVldLnNsaWNlKDAsIG51bUNvbHVtbnMp
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQ29sdW1uczsgaSsrKSB7CisgICAgICAgIHZh
ciBwZXJjZW50YWdlID0gMTAwICogKGFsbEZpeGFibGVbaV0gLSBmaXhhYmxlW2ldKSAvIGFsbEZp
eGFibGVbaV07CisgICAgICAgIC8vIFJvdW5kIHRvIHRoZSBuZWFyZXN0IHRlbnRoIG9mIGEgcGVy
Y2VudC4KKyAgICAgICAgcGVyY2VudC5wdXNoKE1hdGgucm91bmQocGVyY2VudGFnZSAqIDEwKSAv
IDEwICsgJyUnKTsKKyAgICB9CisgICAgdmFyIGh0bWwgPSBodG1sRm9yUmV2aXNpb25Sb3dzKHJl
c3VsdHMsIG51bUNvbHVtbnMpICsKKyAgICAgICAgaHRtbEZvclRhYmxlUm93KCdQZXJjZW50IHBh
c3NlZCcsIHBlcmNlbnQpICsKKyAgICAgICAgaHRtbEZvclRhYmxlUm93KCdGYWlsdXJlcyAoZGVk
dXBlZCknLCBmaXhhYmxlKSArCisgICAgICAgIGh0bWxGb3JUYWJsZVJvdygnRml4YWJsZSBUZXN0
cycsIGFsbEZpeGFibGUpOworICAgIHJldHVybiB3cmFwSFRNTEluVGFibGUoJ1N1bW1hcnknLCBo
dG1sKTsKK30KKworZnVuY3Rpb24gdmFsdWVzUGVyRXhwZWN0YXRpb24oY291bnRzLCBudW1Db2x1
bW5zKQoreworICAgIHZhciB2YWx1ZXMgPSB7fTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51
bUNvbHVtbnM7IGkrKykgeworICAgICAgICBmb3IgKHZhciBleHBlY3RhdGlvbiBpbiBleHBlY3Rh
dGlvbnNNYXAoKSkgeworICAgICAgICAgICAgaWYgKGV4cGVjdGF0aW9uIGluIGNvdW50c1tpXSkg
eworICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGNvdW50c1tpXVtleHBlY3RhdGlvbl07Cisg
ICAgICAgICAgICAgICAgaWYgKCF2YWx1ZXNbZXhwZWN0YXRpb25dKQorICAgICAgICAgICAgICAg
ICAgICB2YWx1ZXNbZXhwZWN0YXRpb25dID0gW107CisgICAgICAgICAgICAgICAgdmFsdWVzW2V4
cGVjdGF0aW9uXS5wdXNoKGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gdmFsdWVzOworfQorCitmdW5jdGlvbiBodG1sRm9yVGVzdFR5cGUocmVzdWx0
cywga2V5LCBkZXNjcmlwdGlvbiwgbnVtQ29sdW1ucykKK3sKKyAgICB2YXIgY291bnRzID0gcmVz
dWx0c1trZXldOworICAgIHZhciBodG1sID0gaHRtbEZvclJldmlzaW9uUm93cyhyZXN1bHRzLCBu
dW1Db2x1bW5zKTsKKyAgICB2YXIgdmFsdWVzID0gdmFsdWVzUGVyRXhwZWN0YXRpb24oY291bnRz
LCBudW1Db2x1bW5zKTsKKyAgICBmb3IgKHZhciBleHBlY3RhdGlvbiBpbiB2YWx1ZXMpCisgICAg
ICAgIGh0bWwgKz0gaHRtbEZvclRhYmxlUm93KGV4cGVjdGF0aW9uc01hcCgpW2V4cGVjdGF0aW9u
XSwgdmFsdWVzW2V4cGVjdGF0aW9uXSk7CisgICAgcmV0dXJuIHdyYXBIVE1MSW5UYWJsZShkZXNj
cmlwdGlvbiwgaHRtbCk7Cit9CisKK2Z1bmN0aW9uIGh0bWxGb3JUYWJsZVJvdyhjb2x1bW5OYW1l
LCB2YWx1ZXMpCit7CisgICAgcmV0dXJuICc8dHI+PHRkPicgKyBjb2x1bW5OYW1lICsgJzwvdGQ+
PHRkPicgKyB2YWx1ZXMuam9pbignPC90ZD48dGQ+JykgKyAnPC90ZD48L3RyPic7Cit9CisKKy8v
IFRha2VuIGZyb20gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9hcGlzL2NoYXJ0L2RvY3MvZGF0YV9m
b3JtYXRzLmh0bWwuCitmdW5jdGlvbiBleHRlbmRlZEVuY29kZShhcnJWYWxzLCBtYXhWYWwpCit7
CisgICAgdmFyIG1hcCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1u
b3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS0uJzsKKyAgICB2YXIgbWFwTGVuZ3RoID0gbWFwLmxlbmd0
aDsKKyAgICB2YXIgbWFwTGVuZ3RoU3F1YXJlZCA9IG1hcExlbmd0aCAqIG1hcExlbmd0aDsKKwor
ICAgIHZhciBjaGFydERhdGEgPSAnJzsKKworICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcnJW
YWxzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgIC8vIEluIGNhc2UgdGhlIGFycmF5
IHZhbHMgd2VyZSB0cmFuc2xhdGVkIHRvIHN0cmluZ3MuCisgICAgICAgIHZhciBudW1lcmljVmFs
ID0gbmV3IE51bWJlcihhcnJWYWxzW2ldKTsKKyAgICAgICAgLy8gU2NhbGUgdGhlIHZhbHVlIHRv
IG1heFZhbC4KKyAgICAgICAgdmFyIHNjYWxlZFZhbCA9IE1hdGguZmxvb3IobWFwTGVuZ3RoU3F1
YXJlZCAqIG51bWVyaWNWYWwgLyBtYXhWYWwpOworCisgICAgICAgIGlmKHNjYWxlZFZhbCA+IG1h
cExlbmd0aFNxdWFyZWQgLSAxKQorICAgICAgICAgICAgY2hhcnREYXRhICs9ICIuLiI7CisgICAg
ICAgIGVsc2UgaWYgKHNjYWxlZFZhbCA8IDApCisgICAgICAgICAgICBjaGFydERhdGEgKz0gJ19f
JzsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgZmlyc3QgYW5kIHNl
Y29uZCBkaWdpdHMgYW5kIGFkZCB0aGVtIHRvIHRoZSBvdXRwdXQuCisgICAgICAgICAgICB2YXIg
cXVvdGllbnQgPSBNYXRoLmZsb29yKHNjYWxlZFZhbCAvIG1hcExlbmd0aCk7CisgICAgICAgICAg
ICB2YXIgcmVtYWluZGVyID0gc2NhbGVkVmFsIC0gbWFwTGVuZ3RoICogcXVvdGllbnQ7CisgICAg
ICAgICAgICBjaGFydERhdGEgKz0gbWFwLmNoYXJBdChxdW90aWVudCkgKyBtYXAuY2hhckF0KHJl
bWFpbmRlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY2hhcnREYXRhOworfQor
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT48L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9idWlsZGVycy5qcyBi
L1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2J1aWxkZXJzLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjUwMTdlZTVkZjdjNWNlNGZhZWJiM2FiZjViMmUwYjhhOTFlNTVlZDEKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy9idWlsZGVycy5qcwpAQCAtMCwwICsxLDIyMyBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKy8vIEBmaWxlb3ZlcnZpZXcgRmlsZSB0aGF0IGxpc3RzIGJ1
aWxkZXJzLCB0aGVpciBtYXN0ZXJzLCBhbmQgbG9naWNhbCBncm91cGluZ3MKKy8vIG9mIHRoZW0u
CisKK2Z1bmN0aW9uIEJ1aWxkZXJNYXN0ZXIobmFtZSwgYmFzZVBhdGgpCit7CisgICAgdGhpcy5u
YW1lID0gbmFtZTsKKyAgICB0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGg7Cit9CisKK0J1aWxkZXJN
YXN0ZXIucHJvdG90eXBlLmdldExvZ1BhdGggPSBmdW5jdGlvbihidWlsZGVyLCBidWlsZE51bWJl
cikKK3sKKyAgICByZXR1cm4gdGhpcy5iYXNlUGF0aCArIGJ1aWxkZXIgKyAnL2J1aWxkcy8nICsg
YnVpbGROdW1iZXI7Cit9OworCitDSFJPTUlVTV9CVUlMREVSX01BU1RFUiA9IG5ldyBCdWlsZGVy
TWFzdGVyKCdDaHJvbWl1bScsICdodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0v
YnVpbGRlcnMvJyk7CitDSFJPTUlVTV9XRUJLSVRfQlVJTERFUl9NQVNURVIgPSBuZXcgQnVpbGRl
ck1hc3RlcignQ2hyb21pdW1XZWJraXQnLCAnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9wL2No
cm9taXVtLndlYmtpdC9idWlsZGVycy8nKTsKK0NIUk9NSVVNX0dQVV9CVUlMREVSX01BU1RFUiA9
IG5ldyBCdWlsZGVyTWFzdGVyKCdDaHJvbWl1bUdQVScsICdodHRwOi8vYnVpbGQuY2hyb21pdW0u
b3JnL3AvY2hyb21pdW0uZ3B1L2J1aWxkZXJzLycpOworV0VCS0lUX0JVSUxERVJfTUFTVEVSID0g
bmV3IEJ1aWxkZXJNYXN0ZXIoJ3dlYmtpdC5vcmcnLCAnaHR0cDovL2J1aWxkLndlYmtpdC5vcmcv
YnVpbGRlcnMvJyk7CisKK2Z1bmN0aW9uIEJ1aWxkZXJHcm91cChpc1RvVFdlYktpdCwgYnVpbGRl
cnMpCit7CisgICAgdGhpcy5pc1RvVFdlYktpdCA9IGlzVG9UV2ViS2l0OworICAgIC8vIE1hcCBv
ZiBidWlsZGVyTmFtZSAodGhlIG5hbWUgc2hvd24gaW4gdGhlIHdhdGVyZmFsbCkgdG8gYnVpbGRl
clBhdGggKHRoZQorICAgIC8vIHBhdGggdXNlZCBpbiB0aGUgYnVpbGRlcidzIFVSTCkKKyAgICB0
aGlzLmJ1aWxkZXJzID0ge307CisgICAgYnVpbGRlcnMuZm9yRWFjaChmdW5jdGlvbihidWlsZGVy
QW5kRmxhZ3MpIHsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBidWlsZGVyQW5kRmxhZ3NbMF07Cisg
ICAgICAgIHZhciBmbGFncyA9IGJ1aWxkZXJBbmRGbGFnc1sxXTsKKworICAgICAgICB0aGlzLmJ1
aWxkZXJzW2J1aWxkZXJdID0gYnVpbGRlci5yZXBsYWNlKC9bIC4oKV0vZywgJ18nKTsKKyAgICAg
ICAgaWYgKGZsYWdzICYgQnVpbGRlckdyb3VwLkRFRkFVTFRfQlVJTERFUikKKyAgICAgICAgICAg
IHRoaXMuZGVmYXVsdEJ1aWxkZXIgPSBidWlsZGVyOworICAgICAgICBpZiAoZmxhZ3MgJiBCdWls
ZGVyR3JvdXAuRVhQRUNUQVRJT05TX0JVSUxERVIpCisgICAgICAgICAgICB0aGlzLmV4cGVjdGF0
aW9uc0J1aWxkZXIgPSBidWlsZGVyOworICAgIH0sIHRoaXMpOworfQorCitCdWlsZGVyR3JvdXAu
cHJvdG90eXBlLnNldHVwID0gZnVuY3Rpb24oKQoreworICAgIC8vIEZJWE1FOiBpbnN0ZWFkIG9m
IGNvcHlpbmcgdGhlc2UgdG8gZ2xvYmFscywgaXQgd291bGQgYmUgYmV0dGVyIGlmCisgICAgLy8g
dGhlIHJlc3Qgb2YgdGhlIGNvZGUgcmVhZCB0aGluZ3MgZnJvbSB0aGUgQnVpbGRlckdyb3VwIGlu
c3RhbmNlIGRpcmVjdGx5CisgICAgZ19kZWZhdWx0QnVpbGRlck5hbWUgPSB0aGlzLmRlZmF1bHRC
dWlsZGVyOworICAgIGdfZXhwZWN0YXRpb25zQnVpbGRlciA9IHRoaXMuZXhwZWN0YXRpb25zQnVp
bGRlcjsKKyAgICBnX2J1aWxkZXJzID0gdGhpcy5idWlsZGVyczsKK307CisKK0J1aWxkZXJHcm91
cC5UT1RfV0VCS0lUID0gdHJ1ZTsKK0J1aWxkZXJHcm91cC5ERVBTX1dFQktJVCA9IGZhbHNlOwor
CitCdWlsZGVyR3JvdXAuREVGQVVMVF9CVUlMREVSID0gMSA8PCAxOworLy8gRm9yIGV4cGVjdGF0
aW9ucyBidWlsZGVyLCBsaXN0IHRoZSBmYXN0ZXN0IGJ1aWxkZXIgc28gdGhhdCB3ZSBhbHdheXMg
aGF2ZSB0aGUKKy8vIG1vc3QgdXAgdG8gZGF0ZSBleHBlY3RhdGlvbnMuCitCdWlsZGVyR3JvdXAu
RVhQRUNUQVRJT05TX0JVSUxERVIgPSAxIDw8IDI7CisKK3ZhciBCVUlMREVSX1RPX01BU1RFUiA9
IHt9OworZnVuY3Rpb24gYXNzb2NpYXRlQnVpbGRlcnNXaXRoTWFzdGVyKGJ1aWxkZXJzLCBtYXN0
ZXIpCit7CisgICAgYnVpbGRlcnMuZm9yRWFjaChmdW5jdGlvbihidWlsZGVyQW5kRmxhZ3MpIHsK
KyAgICAgICAgdmFyIGJ1aWxkZXIgPSBidWlsZGVyQW5kRmxhZ3NbMF07CisgICAgICAgIEJVSUxE
RVJfVE9fTUFTVEVSW2J1aWxkZXJdID0gbWFzdGVyOworICAgIH0pOworfQorCit2YXIgQ0hST01J
VU1fREVQU19CVUlMREVSUyA9IFsKKyAgICBbJ1dlYmtpdCBXaW4gKGRlcHMpJywgQnVpbGRlckdy
b3VwLkRFRkFVTFRfQlVJTERFUl0sCisgICAgWydXZWJraXQgTGludXggKGRlcHMpJywgQnVpbGRl
ckdyb3VwLkVYUEVDVEFUSU9OU19CVUlMREVSXSwKKyAgICBbJ1dlYmtpdCBNYWMxMC42IChkZXBz
KSddLAorICAgIFsnV2Via2l0IE1hYzEwLjYgKENHKShkZXBzKSddLAorXTsKK2Fzc29jaWF0ZUJ1
aWxkZXJzV2l0aE1hc3RlcihDSFJPTUlVTV9ERVBTX0JVSUxERVJTLCBDSFJPTUlVTV9XRUJLSVRf
QlVJTERFUl9NQVNURVIpOworCit2YXIgQ0hST01JVU1fVE9UX0JVSUxERVJTID0gWworICAgIFsn
V2Via2l0IFdpbicsIEJ1aWxkZXJHcm91cC5ERUZBVUxUX0JVSUxERVJdLAorICAgIFsnV2Via2l0
IFZpc3RhJ10sCisgICAgWydXZWJraXQgV2luNyddLAorICAgIFsnV2Via2l0IFdpbiAoZGJnKSgx
KSddLAorICAgIFsnV2Via2l0IFdpbiAoZGJnKSgyKSddLAorICAgIFsnV2Via2l0IExpbnV4Jywg
QnVpbGRlckdyb3VwLkVYUEVDVEFUSU9OU19CVUlMREVSXSwKKyAgICBbJ1dlYmtpdCBMaW51eCAz
MiddLAorICAgIFsnV2Via2l0IExpbnV4IChkYmcpJ10sCisgICAgWydXZWJraXQgTWFjMTAuNSdd
LAorICAgIFsnV2Via2l0IE1hYzEwLjUgKGRiZykoMSknXSwKKyAgICBbJ1dlYmtpdCBNYWMxMC41
IChkYmcpKDIpJ10sCisgICAgWydXZWJraXQgTWFjMTAuNiddLAorICAgIFsnV2Via2l0IE1hYzEw
LjYgKGRiZyknXSwKKyAgICBbJ1dlYmtpdCBNYWMxMC41IChDRyknXSwKKyAgICBbJ1dlYmtpdCBN
YWMxMC41IChDRykoZGJnKSgxKSddLAorICAgIFsnV2Via2l0IE1hYzEwLjUgKENHKShkYmcpKDIp
J10sCisgICAgWydXZWJraXQgTWFjMTAuNiAoQ0cpJ10sCisgICAgWydXZWJraXQgTWFjMTAuNiAo
Q0cpKGRiZyknXQorXTsKK2Fzc29jaWF0ZUJ1aWxkZXJzV2l0aE1hc3RlcihDSFJPTUlVTV9UT1Rf
QlVJTERFUlMsIENIUk9NSVVNX1dFQktJVF9CVUlMREVSX01BU1RFUik7CisKK3ZhciBXRUJLSVRf
VE9UX0JVSUxERVJTID0gWworICAgIFsnQ2hyb21pdW0gV2luIFJlbGVhc2UgKFRlc3RzKScsIEJ1
aWxkZXJHcm91cC5ERUZBVUxUX0JVSUxERVJdLAorICAgIFsnQ2hyb21pdW0gTGludXggUmVsZWFz
ZSAoVGVzdHMpJywgQnVpbGRlckdyb3VwLkVYUEVDVEFUSU9OU19CVUlMREVSXSwKKyAgICBbJ0No
cm9taXVtIE1hYyBSZWxlYXNlIChUZXN0cyknXSwKKyAgICBbJ1Nub3dMZW9wYXJkIEludGVsIFJl
bGVhc2UgKFRlc3RzKSddLAorICAgIFsnU25vd0xlb3BhcmQgSW50ZWwgRGVidWcgKFRlc3RzKSdd
LAorICAgIFsnR1RLIExpbnV4IDMyLWJpdCBSZWxlYXNlJ10sCisgICAgWydHVEsgTGludXggMzIt
Yml0IERlYnVnJ10sCisgICAgWydHVEsgTGludXggNjQtYml0IERlYnVnJ10sCisgICAgWydRdCBM
aW51eCBSZWxlYXNlJ10KK107Cithc3NvY2lhdGVCdWlsZGVyc1dpdGhNYXN0ZXIoV0VCS0lUX1RP
VF9CVUlMREVSUywgV0VCS0lUX0JVSUxERVJfTUFTVEVSKTsKKwordmFyIENIUk9NSVVNX0dQVV9N
RVNBX0JVSUxERVJTID0gWworICAgIFsnV2Via2l0IFdpbiAtIEdQVScsIEJ1aWxkZXJHcm91cC5E
RUZBVUxUX0JVSUxERVJdLAorICAgIFsnV2Via2l0IFZpc3RhIC0gR1BVJ10sCisgICAgWydXZWJr
aXQgV2luNyAtIEdQVSddLAorICAgIFsnV2Via2l0IFdpbiAoZGJnKSgxKSAtIEdQVSddLAorICAg
IFsnV2Via2l0IFdpbiAoZGJnKSgyKSAtIEdQVSddLAorICAgIFsnV2Via2l0IExpbnV4IC0gR1BV
JywgQnVpbGRlckdyb3VwLkVYUEVDVEFUSU9OU19CVUlMREVSXSwKKyAgICBbJ1dlYmtpdCBMaW51
eCAzMiAtIEdQVSddLAorICAgIFsnV2Via2l0IExpbnV4IChkYmcpIC0gR1BVJ10sCisgICAgWydX
ZWJraXQgTWFjMTAuNSAtIEdQVSddLAorICAgIFsnV2Via2l0IE1hYzEwLjUgKGRiZykoMSkgLSBH
UFUnXSwKKyAgICBbJ1dlYmtpdCBNYWMxMC41IChkYmcpKDIpIC0gR1BVJ10sCisgICAgWydXZWJr
aXQgTWFjMTAuNiAtIEdQVSddLAorICAgIFsnV2Via2l0IE1hYzEwLjYgKGRiZykgLSBHUFUnXSwK
KyAgICBbJ1dlYmtpdCBNYWMxMC41IChDRykgLSBHUFUnXSwKKyAgICBbJ1dlYmtpdCBNYWMxMC41
IChDRykoZGJnKSgxKSAtIEdQVSddLAorICAgIFsnV2Via2l0IE1hYzEwLjUgKENHKShkYmcpKDIp
IC0gR1BVJ10sCisgICAgWydXZWJraXQgTWFjMTAuNiAoQ0cpIC0gR1BVJ10sCisgICAgWydXZWJr
aXQgTWFjMTAuNiAoQ0cpKGRiZykgLSBHUFUnXQorXTsKK2Fzc29jaWF0ZUJ1aWxkZXJzV2l0aE1h
c3RlcihDSFJPTUlVTV9HUFVfTUVTQV9CVUlMREVSUywgQ0hST01JVU1fV0VCS0lUX0JVSUxERVJf
TUFTVEVSKTsKKwordmFyIExBWU9VVF9URVNUU19CVUlMREVSX0dST1VQUyA9IHsKKyAgICAnQERF
UFMgLSBjaHJvbWl1bS5vcmcnOiBuZXcgQnVpbGRlckdyb3VwKEJ1aWxkZXJHcm91cC5ERVBTX1dF
QktJVCwgQ0hST01JVU1fREVQU19CVUlMREVSUyksCisgICAgJ0BUb1QgLSBjaHJvbWl1bS5vcmcn
OiBuZXcgQnVpbGRlckdyb3VwKEJ1aWxkZXJHcm91cC5UT1RfV0VCS0lULCBDSFJPTUlVTV9UT1Rf
QlVJTERFUlMpLAorICAgICdAVG9UIC0gd2Via2l0Lm9yZyc6IG5ldyBCdWlsZGVyR3JvdXAoQnVp
bGRlckdyb3VwLlRPVF9XRUJLSVQsIFdFQktJVF9UT1RfQlVJTERFUlMpLAorICAgICdAVG9UIEdQ
VSBNZXNhIC0gY2hyb21pdW0ub3JnJzogbmV3IEJ1aWxkZXJHcm91cChCdWlsZGVyR3JvdXAuVE9U
X1dFQktJVCwgQ0hST01JVU1fR1BVX01FU0FfQlVJTERFUlMpCit9OworCit2YXIgTEVHQUNZX0JV
SUxERVJfTUFTVEVSU19UT19HUk9VUFMgPSB7CisgICAgJ0Nocm9taXVtJzogJ0BERVBTIC0gY2hy
b21pdW0ub3JnJywKKyAgICAnQ2hyb21pdW1XZWJraXQnOiAnQFRvVCAtIGNocm9taXVtLm9yZycs
CisgICAgJ3dlYmtpdC5vcmcnOiAnQFRvVCAtIHdlYmtpdC5vcmcnCit9OworCit2YXIgR19URVNU
U19CVUlMREVSUyA9IFsKKyAgICBbJ1dpbicsIEJ1aWxkZXJHcm91cC5ERUZBVUxUX0JVSUxERVJd
LAorICAgIFsnTWFjJ10sCisgICAgWydMaW51eCddLAorICAgIFsnTGludXggeDY0J10sCisgICAg
WydYUCBUZXN0cyAoMSknXSwKKyAgICBbJ1hQIFRlc3RzICgyKSddLAorICAgIFsnWFAgVGVzdHMg
KDMpJ10sCisgICAgWydWaXN0YSBUZXN0cyAoMSknXSwKKyAgICBbJ1Zpc3RhIFRlc3RzICgyKSdd
LAorICAgIFsnVmlzdGEgVGVzdHMgKDMpJ10sCisgICAgWydXaW43IFRlc3RzICgxKSddLAorICAg
IFsnV2luNyBUZXN0cyAoMiknXSwKKyAgICBbJ1dpbjcgVGVzdHMgKDMpJ10sCisgICAgWydXaW43
IFN5bmMnXSwKKyAgICBbJ1hQIFRlc3RzIChkYmcpKDEpJ10sCisgICAgWydYUCBUZXN0cyAoZGJn
KSgyKSddLAorICAgIFsnWFAgVGVzdHMgKGRiZykoMyknXSwKKyAgICBbJ1hQIFRlc3RzIChkYmcp
KDQpJ10sCisgICAgWydYUCBUZXN0cyAoZGJnKSg1KSddLAorICAgIFsnWFAgVGVzdHMgKGRiZyko
NiknXSwKKyAgICBbJ1dpbjcgVGVzdHMgKGRiZykoMSknXSwKKyAgICBbJ1dpbjcgVGVzdHMgKGRi
ZykoMiknXSwKKyAgICBbJ1dpbjcgVGVzdHMgKGRiZykoMyknXSwKKyAgICBbJ1dpbjcgVGVzdHMg
KGRiZykoNCknXSwKKyAgICBbJ1dpbjcgVGVzdHMgKGRiZykoNSknXSwKKyAgICBbJ1dpbjcgVGVz
dHMgKGRiZykoNiknXSwKKyAgICBbJ0ludGVyYWN0aXZlIFRlc3RzIChkYmcpJ10sCisgICAgWydX
aW4gQXVyYSddLAorICAgIFsnTWFjMTAuNSBUZXN0cyAoMSknXSwKKyAgICBbJ01hYzEwLjUgVGVz
dHMgKDIpJ10sCisgICAgWydNYWMxMC41IFRlc3RzICgzKSddLAorICAgIFsnTWFjMTAuNiBUZXN0
cyAoMSknXSwKKyAgICBbJ01hYzEwLjYgVGVzdHMgKDIpJ10sCisgICAgWydNYWMxMC42IFRlc3Rz
ICgzKSddLAorICAgIFsnTWFjMTAuNiBTeW5jJ10sCisgICAgWydNYWMgMTAuNSBUZXN0cyAoZGJn
KSgxKSddLAorICAgIFsnTWFjIDEwLjUgVGVzdHMgKGRiZykoMiknXSwKKyAgICBbJ01hYyAxMC41
IFRlc3RzIChkYmcpKDMpJ10sCisgICAgWydNYWMgMTAuNSBUZXN0cyAoZGJnKSg0KSddLAorICAg
IFsnTWFjIDEwLjYgVGVzdHMgKGRiZykoMSknXSwKKyAgICBbJ01hYyAxMC42IFRlc3RzIChkYmcp
KDIpJ10sCisgICAgWydNYWMgMTAuNiBUZXN0cyAoZGJnKSgzKSddLAorICAgIFsnTWFjIDEwLjYg
VGVzdHMgKGRiZykoNCknXSwKKyAgICBbJ0xpbnV4IFRlc3RzIHg2NCddLAorICAgIFsnTGludXgg
U3luYyddLAorICAgIFsnTGludXggVGVzdHMgKGRiZykoMSknXSwKKyAgICBbJ0xpbnV4IFRlc3Rz
IChkYmcpKDIpJ10sCisgICAgWydMaW51eCBUZXN0cyAoZGJnKShzaGFyZWQpJ10sCisgICAgWydM
aW51eCBUZXN0cyAoQXVyYSBkYmcpJ10sCitdOworYXNzb2NpYXRlQnVpbGRlcnNXaXRoTWFzdGVy
KEdfVEVTVFNfQlVJTERFUlMsIENIUk9NSVVNX0JVSUxERVJfTUFTVEVSKTsKKwordmFyIEdfVEVT
VFNfQlVJTERFUl9HUk9VUCA9IG5ldyBCdWlsZGVyR3JvdXAoQnVpbGRlckdyb3VwLkRFUFNfV0VC
S0lULCBHX1RFU1RTX0JVSUxERVJTKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RzRGFzaGJvYXJk
U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzIGIvVG9vbHMvVGVzdHNE
YXNoYm9hcmRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjU0M2JjODQyMGQyZjFhOTQ4YzdmNTIyZTYzZWM3NzYwNDNmNmUzZgotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rh
c2hib2FyZF9iYXNlLmpzCkBAIC0wLDAgKzEsMTA4MSBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisv
LyAgICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgor
Ly8gICAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy8vIEBmaWxlb3ZlcnZpZXcgQmFz
ZSBKUyBmaWxlIGZvciBwYWdlcyB0aGF0IHdhbnQgdG8gcGFyc2UgdGhlIHJlc3VsdHMgSlNPTgor
Ly8gZnJvbSB0aGUgdGVzdGluZyBib3RzLiBUaGlzIGRlYWxzIHdpdGggZ2VuZXJpYyB1dGlsaXR5
IGZ1bmN0aW9ucywgdmlzaWJsZQorLy8gaGlzdG9yeSwgcG9wdXBzIGFuZCBhcHBlbmRpbmcgdGhl
IHNjcmlwdCBlbGVtZW50cyBmb3IgdGhlIEpTT04gZmlsZXMuCisvLworLy8gVGhlIGNhbGxpbmcg
cGFnZSBpcyBleHBlY3RlZCB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyAiYWJzdHJhY3QiCisv
LyBmdW5jdGlvbnMvb2JqZWN0czoKK3ZhciBnX3BhZ2VMb2FkU3RhcnRUaW1lID0gRGF0ZS5ub3co
KTsKKworLy8gR2VuZXJhdGVzIHRoZSBjb250ZW50cyBvZiB0aGUgZGFzaGJvYXJkLiBUaGUgcGFn
ZSBzaG91bGQgb3ZlcnJpZGUgdGhpcyB3aXRoCisvLyBhIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVz
IHRoZSBwYWdlIGFzc3VtaW5nIGFsbCByZXNvdXJjZXMgaGF2ZSBsb2FkZWQuCitmdW5jdGlvbiBn
ZW5lcmF0ZVBhZ2UoKSB7fQorCisvLyBUYWtlcyBhIGtleSBhbmQgYSB2YWx1ZSBhbmQgc2V0cyB0
aGUgZ19jdXJyZW50U3RhdGVba2V5XSA9IHZhbHVlIGlmZiBrZXkgaXMKKy8vIGEgdmFsaWQgaGFz
aCBwYXJhbWV0ZXIgYW5kIHRoZSB2YWx1ZSBpcyBhIHZhbGlkIHZhbHVlIGZvciB0aGF0IGtleS4K
Ky8vCisvLyBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBrZXkgd2hhdCBpbnNlcnRlZCBp
bnRvIHRoZSBnX2N1cnJlbnRTdGF0ZS4KK2Z1bmN0aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRl
cihrZXksIHZhbHVlKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gRGVmYXVsdCBoYXNo
IHBhcmFtZXRlcnMgZm9yIHRoZSBwYWdlLiBUaGUgcGFnZSBzaG91bGQgb3ZlcnJpZGUgdGhpcyB0
byBjcmVhdGUKKy8vIGRlZmF1bHQgc3RhdGVzLgordmFyIGdfZGVmYXVsdFN0YXRlVmFsdWVzID0g
e307CisKKworLy8gVGhlIHBhZ2Ugc2hvdWxkIG92ZXJyaWRlIHRoaXMgdG8gbW9kaWZ5IHBhZ2Ug
c3RhdGUgZHVlIHRvCisvLyBjaGFuZ2luZyBxdWVyeSBwYXJhbWV0ZXJzLgorLy8gQHBhcmFtIHtP
YmplY3R9IHBhcmFtcyBOZXcgb3IgbW9kaWZpZWQgcXVlcnkgcGFyYW1zIGFzIGtleTogdmFsdWUu
CisvLyBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIGNoYW5naW5nIHRoaXMgcGFyYW1ldGVyIHNo
b3VsZCBjYXVzZSBnZW5lcmF0ZVBhZ2UgdG8gYmUgY2FsbGVkLgorZnVuY3Rpb24gaGFuZGxlUXVl
cnlQYXJhbWV0ZXJDaGFuZ2UocGFyYW1zKQoreworICAgIHJldHVybiB0cnVlOworfQorCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKy8vIENPTlNUQU5UUworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit2
YXIgR1RFU1RfRVhQRUNUQVRJT05TX01BUF8gPSB7CisgICAgJ1AnOiAnUEFTUycsCisgICAgJ0Yn
OiAnRkFJTCcsCisgICAgJ0wnOiAnRkxBS1knLAorICAgICdOJzogJ05PIERBVEEnLAorICAgICdY
JzogJ0RJU0FCTEVEJworfTsKKwordmFyIExBWU9VVF9URVNUX0VYUEVDVEFUSU9OU19NQVBfID0g
eworICAgICdQJzogJ1BBU1MnLAorICAgICdOJzogJ05PIERBVEEnLAorICAgICdYJzogJ1NLSVAn
LAorICAgICdUJzogJ1RJTUVPVVQnLAorICAgICdGJzogJ1RFWFQnLAorICAgICdDJzogJ0NSQVNI
JywKKyAgICAnSSc6ICdJTUFHRScsCisgICAgJ1onOiAnSU1BR0UrVEVYVCcsCisgICAgLy8gV2Ug
dXNlZCB0byBnbG9iIGEgYnVuY2ggb2YgZXhwZWN0YXRpb25zIGludG8gIk8iIGFzIE9USEVSLiBF
eHBlY3RhdGlvbnMKKyAgICAvLyBhcmUgbW9yZSBwcmVjaXNlIG5vdyB0aG91Z2ggYW5kIGl0IGp1
c3QgbWVhbnMgTUlTU0lORy4KKyAgICAnTyc6ICdNSVNTSU5HJworfTsKKwordmFyIEZBSUxVUkVf
RVhQRUNUQVRJT05TXyA9IHsKKyAgICAnVCc6IDEsCisgICAgJ0YnOiAxLAorICAgICdDJzogMSwK
KyAgICAnSSc6IDEsCisgICAgJ1onOiAxCit9OworCisvLyBLZXlzIGluIHRoZSBKU09OIGZpbGVz
LgordmFyIFdPTlRGSVhfQ09VTlRTX0tFWSA9ICd3b250Zml4Q291bnRzJzsKK3ZhciBGSVhBQkxF
X0NPVU5UU19LRVkgPSAnZml4YWJsZUNvdW50cyc7Cit2YXIgREVGRVJSRURfQ09VTlRTX0tFWSA9
ICdkZWZlcnJlZENvdW50cyc7Cit2YXIgV09OVEZJWF9ERVNDUklQVElPTiA9ICdUZXN0cyBuZXZl
ciB0byBiZSBmaXhlZCAoV09OVEZJWCknOwordmFyIEZJWEFCTEVfREVTQ1JJUFRJT04gPSAnQWxs
IHRlc3RzIGZvciB0aGlzIHJlbGVhc2UnOwordmFyIERFRkVSUkVEX0RFU0NSSVBUSU9OID0gJ0Fs
bCBkZWZlcnJlZCB0ZXN0cyAoREVGRVIpJzsKK3ZhciBGSVhBQkxFX0NPVU5UX0tFWSA9ICdmaXhh
YmxlQ291bnQnOwordmFyIEFMTF9GSVhBQkxFX0NPVU5UX0tFWSA9ICdhbGxGaXhhYmxlQ291bnQn
OwordmFyIENIUk9NRV9SRVZJU0lPTlNfS0VZID0gJ2Nocm9tZVJldmlzaW9uJzsKK3ZhciBXRUJL
SVRfUkVWSVNJT05TX0tFWSA9ICd3ZWJraXRSZXZpc2lvbic7Cit2YXIgVElNRVNUQU1QU19LRVkg
PSAnc2Vjb25kc1NpbmNlRXBvY2gnOwordmFyIEJVSUxEX05VTUJFUlNfS0VZID0gJ2J1aWxkTnVt
YmVycyc7Cit2YXIgVEVTVFNfS0VZID0gJ3Rlc3RzJzsKK3ZhciBUV09fV0VFS1NfU0VDT05EUyA9
IDYwICogNjAgKiAyNCAqIDE0OworCisvLyBUaGVzZSBzaG91bGQgbWF0Y2ggdGhlIHRlc3R0eXBl
IHVwbG9hZGVkIHRvIHRlc3QtcmVzdWx0cy5hcHBzcG90LmNvbS4KKy8vIFNlZSBodHRwOi8vdGVz
dC1yZXN1bHRzLmFwcHNwb3QuY29tL3Rlc3RmaWxlLgordmFyIFRFU1RfVFlQRVMgPSBbCisgICAg
J2F1cmFfdW5pdHRlc3RzJywKKyAgICAnYXVyYV9zaGVsbF91bml0dGVzdHMnLAorICAgICdiYXNl
X3VuaXR0ZXN0cycsCisgICAgJ2Jyb3dzZXJfdGVzdHMnLAorICAgICdjYWNoZWludmFsaWRhdGlv
bl91bml0dGVzdHMnLAorICAgICdjb21wb3NpdG9yX3VuaXR0ZXN0cycsCisgICAgJ2NvbnRlbnRf
dW5pdHRlc3RzJywKKyAgICAnY291cmdldHRlX3VuaXR0ZXN0cycsCisgICAgJ2NyeXB0b191bml0
dGVzdHMnLAorICAgICdnb29nbGV1cmxfdW5pdHRlc3RzJywKKyAgICAnZ2Z4X3VuaXR0ZXN0cycs
CisgICAgJ2dwdV91bml0dGVzdHMnLAorICAgICdpbnN0YWxsZXJfdXRpbF91bml0dGVzdHMnLAor
ICAgICdpbnRlcmFjdGl2ZV91aV90ZXN0cycsCisgICAgJ2lwY190ZXN0cycsCisgICAgJ2ppbmds
ZV91bml0dGVzdHMnLAorICAgICdsYXlvdXQtdGVzdHMnLAorICAgICdtZWRpYV91bml0dGVzdHMn
LAorICAgICdtaW5pX2luc3RhbGxlcl90ZXN0JywKKyAgICAnbmFjbF91aV90ZXN0cycsCisgICAg
J25ldF91bml0dGVzdHMnLAorICAgICdwcmludGluZ191bml0dGVzdHMnLAorICAgICdyZW1vdGlu
Z191bml0dGVzdHMnLAorICAgICdzYWZlX2Jyb3dzaW5nX3Rlc3RzJywKKyAgICAnc3FsX3VuaXR0
ZXN0cycsCisgICAgJ3N5bmNfdW5pdF90ZXN0cycsCisgICAgJ3N5bmNfaW50ZWdyYXRpb25fdGVz
dHMnLAorICAgICd0ZXN0X3NoZWxsX3Rlc3RzJywKKyAgICAndWlfdGVzdHMnLAorICAgICd1bml0
X3Rlc3RzJywKKyAgICAndmlld3NfdW5pdHRlc3RzJywKK107CisKK3ZhciBSRUxPQURfUkVRVUlS
SU5HX1BBUkFNRVRFUlMgPSBbJ3Nob3dBbGxSdW5zJywgJ2dyb3VwJywgJ3Rlc3RUeXBlJ107CisK
Ky8vIEVudW0gZm9yIGluZGV4aW5nIGludG8gdGhlIHJ1bi1sZW5ndGggZW5jb2RlZCByZXN1bHRz
IGluIHRoZSBKU09OIGZpbGVzLgorLy8gMCBpcyB3aGVyZSB0aGUgY291bnQgaXMgbGVuZ3RoIGlz
IHN0b3JlZC4gMSBpcyB0aGUgdmFsdWUuCit2YXIgUkxFID0geworICAgIExFTkdUSDogMCwKKyAg
ICBWQUxVRTogMQorfQorCit2YXIgVEVTVF9SRVNVTFRTX1NFUlZFUiA9ICdodHRwOi8vdGVzdC1y
ZXN1bHRzLmFwcHNwb3QuY29tLyc7CisKK2Z1bmN0aW9uIGlzRmFpbGluZ1Jlc3VsdCh2YWx1ZSkK
K3sKKyAgICByZXR1cm4gJ0ZTVE9DSVonLmluZGV4T2YodmFsdWUpICE9IC0xOworfQorCisvLyBU
YWtlcyBhIGtleSBhbmQgYSB2YWx1ZSBhbmQgc2V0cyB0aGUgZ19jdXJyZW50U3RhdGVba2V5XSA9
IHZhbHVlIGlmZiBrZXkgaXMKKy8vIGEgdmFsaWQgaGFzaCBwYXJhbWV0ZXIgYW5kIHRoZSB2YWx1
ZSBpcyBhIHZhbGlkIHZhbHVlIGZvciB0aGF0IGtleS4gSGFuZGxlcworLy8gY3Jvc3MtZGFzaGJv
YXJkIHBhcmFtZXRlcnMgdGhlbiBmYWxscyBiYWNrIHRvIGNhbGxpbmcKKy8vIGhhbmRsZVZhbGlk
SGFzaFBhcmFtZXRlciBmb3IgZGFzaGJvYXJkLXNwZWNpZmljIHBhcmFtZXRlcnMuCisvLworLy8g
QHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUga2V5IHdoYXQgaW5zZXJ0ZWQgaW50byB0aGUg
Z19jdXJyZW50U3RhdGUuCitmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXJXcmFwcGVy
KGtleSwgdmFsdWUpCit7CisgICAgc3dpdGNoKGtleSkgeworICAgIGNhc2UgJ3Rlc3RUeXBlJzoK
KyAgICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIoZ19jdXJyZW50U3RhdGUsIGtleSwgdmFsdWUsCisg
ICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIFRFU1RfVFlQRVMuaW5kZXhPZih2YWx1ZSkg
IT0gLTE7IH0pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgJ2dyb3VwJzoKKyAg
ICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIoZ19jdXJyZW50U3RhdGUsIGtleSwgdmFsdWUsCisgICAg
ICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIHZhbHVlIGluIExBWU9VVF9URVNUU19CVUlMREVS
X0dST1VQUzsgfSk7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gRklYTUU6IHJlbW92
ZSBzdXBwb3J0IGZvciB0aGlzIHBhcmFtZXRlciBvbmNlIHRoZSB3YXRlcmZhbGwgc3RhcnRzIHRv
CisgICAgLy8gcGFzcyBpbiB0aGUgYnVpbGRlciBuYW1lIGluc3RlYWQuCisgICAgY2FzZSAnbWFz
dGVyJzoKKyAgICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIoZ19jdXJyZW50U3RhdGUsIGtleSwgdmFs
dWUsCisgICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIHZhbHVlIGluIExFR0FDWV9CVUlM
REVSX01BU1RFUlNfVE9fR1JPVVBTOyB9KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBj
YXNlICdidWlsZGVyJzoKKyAgICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIoZ19jdXJyZW50U3RhdGUs
IGtleSwgdmFsdWUsCisgICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIHZhbHVlIGluIGdf
YnVpbGRlcnM7IH0pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgJ3VzZVRlc3RE
YXRhJzoKKyAgICBjYXNlICdzaG93QWxsUnVucyc6CisgICAgICAgIGdfY3VycmVudFN0YXRlW2tl
eV0gPSB2YWx1ZSA9PSAndHJ1ZSc7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSAn
YnVpbGREaXInOgorICAgICAgICBnX2N1cnJlbnRTdGF0ZVsndGVzdFR5cGUnXSA9ICdsYXlvdXQt
dGVzdC1yZXN1bHRzJzsKKyAgICAgICAgaWYgKHZhbHVlID09PSAnRGVidWcnIHx8IHZhbHVlID09
ICdSZWxlYXNlJykgeworICAgICAgICAgICAgZ19jdXJyZW50U3RhdGVba2V5XSA9IHZhbHVlOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGhhbmRsZVZhbGlkSGFz
aFBhcmFtZXRlcihrZXksIHZhbHVlKTsKKyAgICB9Cit9CisKK3ZhciBnX2RlZmF1bHRDcm9zc0Rh
c2hib2FyZFN0YXRlVmFsdWVzID0geworICAgIGdyb3VwOiAnQFRvVCAtIGNocm9taXVtLm9yZycs
CisgICAgc2hvd0FsbFJ1bnM6IGZhbHNlLAorICAgIHRlc3RUeXBlOiAnbGF5b3V0LXRlc3RzJywK
KyAgICBidWlsZERpciA6ICcnCit9CisKKy8vIEdlbmVyaWMgdXRpbGl0eSBmdW5jdGlvbnMuCitm
dW5jdGlvbiAkKGlkKQoreworICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7
Cit9CisKK2Z1bmN0aW9uIHN0cmluZ0NvbnRhaW5zKGEsIGIpCit7CisgICAgcmV0dXJuIGEuaW5k
ZXhPZihiKSAhPSAtMTsKK30KKworZnVuY3Rpb24gY2FzZUluc2Vuc2l0aXZlQ29udGFpbnMoYSwg
YikKK3sKKyAgICByZXR1cm4gYS5tYXRjaChuZXcgUmVnRXhwKGIsICdpJykpOworfQorCitmdW5j
dGlvbiBzdGFydHNXaXRoKGEsIGIpCit7CisgICAgcmV0dXJuIGEuaW5kZXhPZihiKSA9PSAwOwor
fQorCitmdW5jdGlvbiBlbmRzV2l0aChhLCBiKQoreworICAgIHJldHVybiBhLmxhc3RJbmRleE9m
KGIpID09IGEubGVuZ3RoIC0gYi5sZW5ndGg7Cit9CisKK2Z1bmN0aW9uIGlzVmFsaWROYW1lKHN0
cikKK3sKKyAgICByZXR1cm4gc3RyLm1hdGNoKC9bQS1aYS16MC05XC1cXyxdLyk7Cit9CisKK2Z1
bmN0aW9uIHRyaW1TdHJpbmcoc3RyKQoreworICAgIHJldHVybiBzdHIucmVwbGFjZSgvXlxzK3xc
cyskL2csICcnKTsKK30KKworZnVuY3Rpb24gY29sbGFwc2VXaGl0ZXNwYWNlKHN0cikKK3sKKyAg
ICByZXR1cm4gc3RyLnJlcGxhY2UoL1xzKy9nLCAnICcpOworfQorCitmdW5jdGlvbiByZXF1ZXN0
KHVybCwgc3VjY2VzcywgZXJyb3IsIG9wdF9pc0JpbmFyeURhdGEpCit7CisgICAgY29uc29sZS5s
b2coJ1hNTEh0dHBSZXF1ZXN0OiAnICsgdXJsKTsKKyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBS
ZXF1ZXN0KCk7CisgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7CisgICAgaWYgKG9wdF9p
c0JpbmFyeURhdGEpCisgICAgICAgIHhoci5vdmVycmlkZU1pbWVUeXBlKCd0ZXh0L3BsYWluOyBj
aGFyc2V0PXgtdXNlci1kZWZpbmVkJyk7CisgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1
bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IDQpIHsKKyAgICAgICAg
ICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkKKyAgICAgICAgICAgICAgICBzdWNjZXNzKHhocik7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZXJyb3IoeGhyKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICB4aHIuc2VuZCgpOworfQorCitmdW5jdGlvbiB2YWxpZGF0ZVBhcmFtZXRl
cihzdGF0ZSwga2V5LCB2YWx1ZSwgdmFsaWRhdGVGbikKK3sKKyAgICBpZiAodmFsaWRhdGVGbigp
KQorICAgICAgICBzdGF0ZVtrZXldID0gdmFsdWU7CisgICAgZWxzZQorICAgICAgICBjb25zb2xl
LmxvZyhrZXkgKyAnIHZhbHVlIGlzIG5vdCB2YWxpZDogJyArIHZhbHVlKTsKK30KKworZnVuY3Rp
b24gcGFyc2VQYXJhbWV0ZXJzKHBhcmFtZXRlclN0cikKK3sKKyAgICBnX29sZFN0YXRlID0gZ19j
dXJyZW50U3RhdGU7CisgICAgZ19jdXJyZW50U3RhdGUgPSB7fTsKKworICAgIHZhciBoYXNoID0g
d2luZG93LmxvY2F0aW9uLmhhc2g7CisgICAgdmFyIHBhcmFtc0xpc3QgPSBoYXNoID8gaGFzaC5z
dWJzdHJpbmcoMSkuc3BsaXQoJyYnKSA6IFtdOworICAgIHZhciBwYXJhbXNNYXAgPSB7fTsKKyAg
ICB2YXIgaW52YWxpZEtleXMgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtc0xp
c3QubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHRoaXNQYXJhbSA9IHBhcmFtc0xpc3RbaV0u
c3BsaXQoJz0nKTsKKyAgICAgICAgaWYgKHRoaXNQYXJhbS5sZW5ndGggIT0gMikgeworICAgICAg
ICAgICAgY29uc29sZS5sb2coJ0ludmFsaWQgcXVlcnkgcGFyYW1ldGVyOiAnICsgcGFyYW1zTGlz
dFtpXSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHBhcmFt
c01hcFt0aGlzUGFyYW1bMF1dID0gZGVjb2RlVVJJQ29tcG9uZW50KHRoaXNQYXJhbVsxXSk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VQYXJhbShrZXkpCisgICAgeworICAgICAgICB2YXIg
dmFsdWUgPSBwYXJhbXNNYXBba2V5XTsKKyAgICAgICAgaWYgKCFoYW5kbGVWYWxpZEhhc2hQYXJh
bWV0ZXJXcmFwcGVyKGtleSwgdmFsdWUpKQorICAgICAgICAgICAgaW52YWxpZEtleXMucHVzaChr
ZXkgKyAnPScgKyB2YWx1ZSk7CisgICAgfQorCisgICAgLy8gUGFyc2UgYnVpbGRlciBwYXJhbSBs
YXN0LCBzaW5jZSB0aGUgbGlzdCBvZiB2YWxpZCBidWlsZGVycyBkZXBlbmRzIG9uIHRoZSBvdGhl
ciBwYXJhbWV0ZXJzLgorICAgIGZvciAodmFyIGtleSBpbiBwYXJhbXNNYXApIHsKKyAgICAgICAg
aWYgKGtleSAhPSAnYnVpbGRlcicpCisgICAgICAgICAgICBwYXJzZVBhcmFtKGtleSk7CisgICAg
fQorICAgIGlmICgnYnVpbGRlcicgaW4gcGFyYW1zTWFwKSB7CisgICAgICAgIGlmICghZ19idWls
ZGVycykgeworICAgICAgICAgICAgdmFyIHRlbXBTdGF0ZSA9IHt9OworICAgICAgICAgICAgZm9y
ICh2YXIga2V5IGluIGdfY3VycmVudFN0YXRlKQorICAgICAgICAgICAgICAgIHRlbXBTdGF0ZVtr
ZXldID0gZ19jdXJyZW50U3RhdGVba2V5XTsKKyAgICAgICAgICAgIGZpbGxNaXNzaW5nVmFsdWVz
KHRlbXBTdGF0ZSwgZ19kZWZhdWx0Q3Jvc3NEYXNoYm9hcmRTdGF0ZVZhbHVlcyk7CisgICAgICAg
ICAgICBmaWxsTWlzc2luZ1ZhbHVlcyh0ZW1wU3RhdGUsIGdfZGVmYXVsdFN0YXRlVmFsdWVzKTsK
KyAgICAgICAgICAgIGluaXRCdWlsZGVycyh0ZW1wU3RhdGUpOworICAgICAgICB9CisgICAgICAg
IHBhcnNlUGFyYW0oJ2J1aWxkZXInKTsKKyAgICB9CisKKyAgICBpZiAoaW52YWxpZEtleXMubGVu
Z3RoKQorICAgICAgICBjb25zb2xlLmxvZygiSW52YWxpZCBxdWVyeSBwYXJhbWV0ZXJzOiAiICsg
aW52YWxpZEtleXMuam9pbignLCcpKTsKKworICAgIHZhciBkaWZmU3RhdGUgPSBkaWZmU3RhdGVz
KCk7CisKKyAgICBmaWxsTWlzc2luZ1ZhbHVlcyhnX2N1cnJlbnRTdGF0ZSwgZ19kZWZhdWx0Q3Jv
c3NEYXNoYm9hcmRTdGF0ZVZhbHVlcyk7CisgICAgZmlsbE1pc3NpbmdWYWx1ZXMoZ19jdXJyZW50
U3RhdGUsIGdfZGVmYXVsdFN0YXRlVmFsdWVzKTsKKworICAgIC8vIFNvbWUgcGFyYW1ldGVycyBy
ZXF1aXJlIGxvYWRpbmcgZGlmZmVyZW50IEpTT04gZmlsZXMgd2hlbiB0aGUgdmFsdWUgY2hhbmdl
cy4gRG8gYSByZWxvYWQuCisgICAgaWYgKGdfb2xkU3RhdGUpIHsKKyAgICAgICAgZm9yICh2YXIg
a2V5IGluIGdfY3VycmVudFN0YXRlKSB7CisgICAgICAgICAgICBpZiAoZ19vbGRTdGF0ZVtrZXld
ICE9IGdfY3VycmVudFN0YXRlW2tleV0gJiYgUkVMT0FEX1JFUVVJUklOR19QQVJBTUVURVJTLmlu
ZGV4T2Yoa2V5KSAhPSAtMSkKKyAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2Fk
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZGlmZlN0YXRlOworfQorCisvLyBG
aW5kIHRoZSBkaWZmZXJlbmNlIG9mIGdfY3VycmVudFN0YXRlIHdpdGggZ19vbGRTdGF0ZS4KKy8v
IEByZXR1cm4ge09iamVjdH0ga2V5OnZhbHVlcyBvZiB0aGUgbmV3IG9yIGNoYW5nZWQgcGFyYW1z
LgorZnVuY3Rpb24gZGlmZlN0YXRlcygpCit7CisgICAgLy8gSWYgdGhlcmUgaXMgbm8gb2xkIHN0
YXRlLCBldmVyeXRoaW5nIGluIHRoZSBjdXJyZW50IHN0YXRlIGlzIG5ldy4KKyAgICBpZiAoIWdf
b2xkU3RhdGUpCisgICAgICAgIHJldHVybiBnX2N1cnJlbnRTdGF0ZTsKKworICAgIHZhciBjaGFu
Z2VkUGFyYW1zID0ge307CisgICAgZm9yIChjdXJLZXkgaW4gZ19jdXJyZW50U3RhdGUpIHsKKyAg
ICAgICAgdmFyIG9sZFZhbCA9IGdfb2xkU3RhdGVbY3VyS2V5XTsKKyAgICAgICAgdmFyIG5ld1Zh
bCA9IGdfY3VycmVudFN0YXRlW2N1cktleV07CisgICAgICAgIC8vIEFkZCBuZXcga2V5cyBvciBj
aGFuZ2VkIHZhbHVlcy4KKyAgICAgICAgaWYgKCFvbGRWYWwgfHwgb2xkVmFsICE9IG5ld1ZhbCkK
KyAgICAgICAgICAgIGNoYW5nZWRQYXJhbXNbY3VyS2V5XSA9IG5ld1ZhbDsKKyAgICB9CisgICAg
cmV0dXJuIGNoYW5nZWRQYXJhbXM7Cit9CisKK2Z1bmN0aW9uIGRlZmF1bHRWYWx1ZShrZXkpCit7
CisgICAgaWYgKGtleSBpbiBnX2RlZmF1bHRTdGF0ZVZhbHVlcykKKyAgICAgICAgcmV0dXJuIGdf
ZGVmYXVsdFN0YXRlVmFsdWVzW2tleV07CisgICAgcmV0dXJuIGdfZGVmYXVsdENyb3NzRGFzaGJv
YXJkU3RhdGVWYWx1ZXNba2V5XTsKK30KKworZnVuY3Rpb24gZmlsbE1pc3NpbmdWYWx1ZXModG8s
IGZyb20pCit7CisgICAgZm9yICh2YXIgc3RhdGUgaW4gZnJvbSkgeworICAgICAgICBpZiAoIShz
dGF0ZSBpbiB0bykpCisgICAgICAgICAgICB0b1tzdGF0ZV0gPSBmcm9tW3N0YXRlXTsKKyAgICB9
Cit9CisKKy8vIExvYWQgYSBzY3JpcHQuCisvLyBAcGFyYW0ge3N0cmluZ30gcGF0aCBQYXRoIHRv
IHRoZSBzY3JpcHQgdG8gbG9hZC4KKy8vIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRfb25FcnJvciBP
cHRpb25hbCBmdW5jdGlvbiB0byBjYWxsIGlmIHRoZSBzY3JpcHQKKy8vICAgICAgICAgZG9lcyBu
b3QgbG9hZC4KKy8vIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRfb25Mb2FkIE9wdGlvbmFsIGZ1bmN0
aW9uIHRvIGNhbGwgd2hlbiB0aGUgc2NyaXB0CisvLyAgICAgICAgIGlzIGxvYWRlZC4gICAgQ2Fs
bGVkIHdpdGggdGhlIHNjcmlwdCBlbGVtZW50IGFzIGl0cyAxc3QgYXJndW1lbnQuCitmdW5jdGlv
biBhcHBlbmRTY3JpcHQocGF0aCwgb3B0X29uRXJyb3IsIG9wdF9vbkxvYWQpCit7CisgICAgdmFy
IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworICAgIHNjcmlwdC5z
cmMgPSBwYXRoOworICAgIGlmIChvcHRfb25Mb2FkKSB7CisgICAgICAgIHNjcmlwdC5vbnJlYWR5
c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3Rh
dGUgPT0gJ2NvbXBsZXRlJykKKyAgICAgICAgICAgICAgICBvcHRfb25Mb2FkKHNjcmlwdCk7Cisg
ICAgICAgIH07CisgICAgICAgIHNjcmlwdC5vbmxvYWQgPSBmdW5jdGlvbigpIHsgb3B0X29uTG9h
ZChzY3JpcHQpOyB9OworICAgIH0KKyAgICBpZiAob3B0X29uRXJyb3IpCisgICAgICAgIHNjcmlw
dC5vbmVycm9yID0gb3B0X29uRXJyb3I7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChzY3JpcHQpOworfQorCisvLyBQZXJtYWxpbmthYmxl
IHN0YXRlIG9mIHRoZSBwYWdlLgordmFyIGdfY3VycmVudFN0YXRlOworCisvLyBTYXZlZCB2YWx1
ZSBvZiBwcmV2aW91cyBnX2N1cnJlbnRTdGF0ZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVjdCBjaGFu
Z2luZyBmcm9tCisvLyBvbmUgc2V0IG9mIGJ1aWxkZXJzIHRvIGFub3RoZXIsIHdoaWNoIHJlcXVp
cmVzIHJlbG9hZGluZyB0aGUgcGFnZS4KK3ZhciBnX29sZFN0YXRlOworCisvLyBQYXJzZSBjcm9z
cy1kYXNoYm9hcmQgcGFyYW1ldGVycyBiZWZvcmUgdXNpbmcgdGhlbS4KK3BhcnNlUGFyYW1ldGVy
cygpOworCitmdW5jdGlvbiBpc0xheW91dFRlc3RSZXN1bHRzKCkKK3sKKyAgICByZXR1cm4gZ19j
dXJyZW50U3RhdGUudGVzdFR5cGUgPT0gJ2xheW91dC10ZXN0cyc7Cit9CisKK2Z1bmN0aW9uIGN1
cnJlbnRCdWlsZGVyR3JvdXAob3B0X3N0YXRlKQoreworICAgIHZhciBzdGF0ZSA9IG9wdF9zdGF0
ZSB8fCBnX2N1cnJlbnRTdGF0ZTsKKyAgICBzd2l0Y2ggKHN0YXRlLnRlc3RUeXBlKSB7CisgICAg
Y2FzZSAnbGF5b3V0LXRlc3RzJzoKKyAgICAgICAgcmV0dXJuIExBWU9VVF9URVNUU19CVUlMREVS
X0dST1VQU1tzdGF0ZS5ncm91cF0KKyAgICBjYXNlICdhdXJhX3VuaXR0ZXN0cyc6CisgICAgY2Fz
ZSAnYXVyYV9zaGVsbF91bml0dGVzdHMnOgorICAgIGNhc2UgJ2Jhc2VfdW5pdHRlc3RzJzoKKyAg
ICBjYXNlICdicm93c2VyX3Rlc3RzJzoKKyAgICBjYXNlICdjYWNoZWludmFsaWRhdGlvbl91bml0
dGVzdHMnOgorICAgIGNhc2UgJ2NvbXBvc2l0b3JfdW5pdHRlc3RzJzoKKyAgICBjYXNlICdjb250
ZW50X3VuaXR0ZXN0cyc6CisgICAgY2FzZSAnY291cmdldHRlX3VuaXR0ZXN0cyc6CisgICAgY2Fz
ZSAnY3J5cHRvX3VuaXR0ZXN0cyc6CisgICAgY2FzZSAnZ29vZ2xldXJsX3VuaXR0ZXN0cyc6Cisg
ICAgY2FzZSAnZ2Z4X3VuaXR0ZXN0cyc6CisgICAgY2FzZSAnZ3B1X3VuaXR0ZXN0cyc6CisgICAg
Y2FzZSAnaW5zdGFsbGVyX3V0aWxfdW5pdHRlc3RzJzoKKyAgICBjYXNlICdpbnRlcmFjdGl2ZV91
aV90ZXN0cyc6CisgICAgY2FzZSAnaXBjX3Rlc3RzJzoKKyAgICBjYXNlICdqaW5nbGVfdW5pdHRl
c3RzJzoKKyAgICBjYXNlICdtZWRpYV91bml0dGVzdHMnOgorICAgIGNhc2UgJ21pbmlfaW5zdGFs
bGVyX3Rlc3QnOgorICAgIGNhc2UgJ25hY2xfdWlfdGVzdHMnOgorICAgIGNhc2UgJ25ldF91bml0
dGVzdHMnOgorICAgIGNhc2UgJ3ByaW50aW5nX3VuaXR0ZXN0cyc6CisgICAgY2FzZSAncmVtb3Rp
bmdfdW5pdHRlc3RzJzoKKyAgICBjYXNlICdzYWZlX2Jyb3dzaW5nX3Rlc3RzJzoKKyAgICBjYXNl
ICdzcWxfdW5pdHRlc3RzJzoKKyAgICBjYXNlICdzeW5jX3VuaXRfdGVzdHMnOgorICAgIGNhc2Ug
J3N5bmNfaW50ZWdyYXRpb25fdGVzdHMnOgorICAgIGNhc2UgJ3Rlc3Rfc2hlbGxfdGVzdHMnOgor
ICAgIGNhc2UgJ3VpX3Rlc3RzJzoKKyAgICBjYXNlICd1bml0X3Rlc3RzJzoKKyAgICBjYXNlICd2
aWV3c191bml0dGVzdHMnOgorICAgICAgICByZXR1cm4gR19URVNUU19CVUlMREVSX0dST1VQOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGNvbnNvbGUubG9nKCdpbnZhbGlkIHRlc3RUeXBlIHBhcmFt
ZXRlcjogJyArIHN0YXRlLnRlc3RUeXBlKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGJ1aWxkZXJN
YXN0ZXIoYnVpbGRlck5hbWUpCit7CisgICAgcmV0dXJuIEJVSUxERVJfVE9fTUFTVEVSW2J1aWxk
ZXJOYW1lXTsKK30KKworZnVuY3Rpb24gaXNUaXBPZlRyZWVXZWJLaXRCdWlsZGVyKCkKK3sKKyAg
ICByZXR1cm4gY3VycmVudEJ1aWxkZXJHcm91cCgpLmlzVG9UV2ViS2l0OworfQorCit2YXIgZ19k
ZWZhdWx0QnVpbGRlck5hbWUsIGdfYnVpbGRlcnMsIGdfZXhwZWN0YXRpb25zQnVpbGRlcjsKK2Z1
bmN0aW9uIGluaXRCdWlsZGVycyhzdGF0ZSkKK3sKKyAgICBpZiAoc3RhdGUuYnVpbGREaXIpIHsK
KyAgICAgICAgLy8gSWYgYnVpbGREaXIgaXMgc2V0LCBwb2ludCB0byB0aGUgcmVzdWx0cy5qc29u
IGluIHRoZSBsb2NhbCB0cmVlLiBVc2VmdWwgZm9yIGRlYnVnZ2luZyBjaGFuZ2VzIHRvIHRoZSBw
eXRob24gSlNPTiBnZW5lcmF0b3IuCisgICAgICAgIGdfZGVmYXVsdEJ1aWxkZXJOYW1lID0gJ0RV
TU1ZX0JVSUxERVJfTkFNRSc7CisgICAgICAgIGdfYnVpbGRlcnMgPSB7J0RVTU1ZX0JVSUxERVJf
TkFNRSc6ICcnfTsKKyAgICAgICAgdmFyIGxvYyA9IGRvY3VtZW50LmxvY2F0aW9uLnRvU3RyaW5n
KCk7CisgICAgICAgIHZhciBvZmZzZXQgPSBsb2MuaW5kZXhPZignd2Via2l0LycpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiByZW1vdmUgc3VwcG9ydCBmb3IgbWFwcGluZyBmcm9t
IHRoZSBtYXN0ZXIgcGFyYW1ldGVyIHRvIHRoZSBncm91cAorICAgICAgICAvLyBvbmUgb25jZSB0
aGUgd2F0ZXJmYWxsIHN0YXJ0cyB0byBwYXNzIGluIHRoZSBidWlsZGVyIG5hbWUgaW5zdGVhZC4K
KyAgICAgICAgaWYgKHN0YXRlLm1hc3RlcikgeworICAgICAgICAgICAgc3RhdGUuZ3JvdXAgPSBM
RUdBQ1lfQlVJTERFUl9NQVNURVJTX1RPX0dST1VQU1tzdGF0ZS5tYXN0ZXJdOworICAgICAgICAg
ICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5yZXBsYWNlKCdt
YXN0ZXI9JyArIHN0YXRlLm1hc3RlciwgJ2dyb3VwPScgKyBzdGF0ZS5ncm91cCk7CisgICAgICAg
ICAgICBkZWxldGUgc3RhdGUubWFzdGVyOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRCdWls
ZGVyR3JvdXAoc3RhdGUpLnNldHVwKCk7CisgICAgfQorfQoraW5pdEJ1aWxkZXJzKGdfY3VycmVu
dFN0YXRlKTsKKworLy8gQXBwZW5kIEpTT04gc2NyaXB0IGVsZW1lbnRzLgordmFyIGdfcmVzdWx0
c0J5QnVpbGRlciA9IHt9OwordmFyIGdfZXhwZWN0YXRpb25zOworZnVuY3Rpb24gQUREX1JFU1VM
VFMoYnVpbGRzKQoreworICAgIHZhciBqc29uX3ZlcnNpb24gPSBidWlsZHNbJ3ZlcnNpb24nXTsK
KyAgICBmb3IgKHZhciBidWlsZGVyTmFtZSBpbiBidWlsZHMpIHsKKyAgICAgICAgaWYgKGJ1aWxk
ZXJOYW1lID09ICd2ZXJzaW9uJykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8v
IElmIGEgdGVzdCBzdWl0ZSBzdG9wcyBiZWluZyBydW4gb24gYSBnaXZlbiBidWlsZGVyLCB3ZSBk
b24ndCB3YW50IHRvIHNob3cgaXQuCisgICAgICAgIC8vIEFzc3VtZSBhbnkgYnVpbGRlciB3aXRo
b3V0IGEgcnVuIGluIHR3byB3ZWVrcyBmb3IgYSBnaXZlbiB0ZXN0IHN1aXRlIGlzbid0CisgICAg
ICAgIC8vIHJ1bm5pbmcgdGhhdCBzdWl0ZSBhbnltb3JlLgorICAgICAgICAvLyBGSVhNRTogR3Jh
YiB3aGljaCBib3RzIHJ1biB3aGljaCB0ZXN0cyBkaXJlY3RseSBmcm9tIHRoZSBidWlsZGJvdCBK
U09OIGluc3RlYWQuCisgICAgICAgIHZhciBsYXN0UnVuU2Vjb25kcyA9IGJ1aWxkc1tidWlsZGVy
TmFtZV0uc2Vjb25kc1NpbmNlRXBvY2hbMF07CisgICAgICAgIGlmICgoRGF0ZS5ub3coKSAvIDEw
MDApIC0gbGFzdFJ1blNlY29uZHMgPiBUV09fV0VFS1NfU0VDT05EUykKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGlmIChqc29uX3ZlcnNpb24gPj0gNCkKKyAgICAgICAgICAgIGJ1
aWxkc1tidWlsZGVyTmFtZV1bVEVTVFNfS0VZXSA9IGZsYXR0ZW5UcmllKGJ1aWxkc1tidWlsZGVy
TmFtZV1bVEVTVFNfS0VZXSk7CisgICAgICAgIGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyTmFt
ZV0gPSBidWlsZHNbYnVpbGRlck5hbWVdOworICAgIH0KKworICAgIGhhbmRsZVJlc291cmNlTG9h
ZCgpOworfQorCisvLyBUT0RPKGFib3hoYWxsKTogZmlndXJlIG91dCB3aGV0aGVyIHRoaXMgaXMg
YSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGFuZAorLy8gY2hhbmdlIGNhbGxpbmcgY29kZSB0byB1
bmRlcnN0YW5kIHRoZSB0cmllIHN0cnVjdHVyZSBpbnN0ZWFkIGlmIG5lY2Vzc2FyeS4KK2Z1bmN0
aW9uIGZsYXR0ZW5UcmllKHRyaWUsIHByZWZpeCkKK3sKKyAgICB2YXIgcmVzdWx0ID0ge307Cisg
ICAgZm9yICh2YXIgbmFtZSBpbiB0cmllKSB7CisgICAgICAgIHZhciBmdWxsTmFtZSA9IHByZWZp
eCA/IHByZWZpeCArICIvIiArIG5hbWUgOiBuYW1lOworICAgICAgICB2YXIgZGF0YSA9IHRyaWVb
bmFtZV07CisgICAgICAgIGlmICgicmVzdWx0cyIgaW4gZGF0YSkKKyAgICAgICAgICAgIHJlc3Vs
dFtmdWxsTmFtZV0gPSBkYXRhOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBwYXJ0
aWFsUmVzdWx0ID0gZmxhdHRlblRyaWUoZGF0YSwgZnVsbE5hbWUpOworICAgICAgICAgICAgZm9y
ICh2YXIga2V5IGluIHBhcnRpYWxSZXN1bHQpIHsKKyAgICAgICAgICAgICAgICByZXN1bHRba2V5
XSA9IHBhcnRpYWxSZXN1bHRba2V5XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitmdW5jdGlvbiBwYXRoVG9CdWlsZGVyUmVzdWx0c0Zp
bGUoYnVpbGRlck5hbWUpCit7CisgICAgcmV0dXJuIFRFU1RfUkVTVUxUU19TRVJWRVIgKyAndGVz
dGZpbGU/YnVpbGRlcj0nICsgYnVpbGRlck5hbWUgKworICAgICAgICAgICAgJyZtYXN0ZXI9JyAr
IGJ1aWxkZXJNYXN0ZXIoYnVpbGRlck5hbWUpLm5hbWUgKworICAgICAgICAgICAgJyZ0ZXN0dHlw
ZT0nICsgZ19jdXJyZW50U3RhdGUudGVzdFR5cGUgKyAnJm5hbWU9JzsKK30KKworLy8gRklYTUU6
IE1ha2UgdGhlIGRhc2hib2FyZCB1bmRlcnN0YW5kIGRpZmZlcmVudCBwb3J0cycgZXhwZWN0YXRp
b25zIGZpbGVzLgordmFyIENIUk9NSVVNX0VYUEVDVEFUSU9OU19VUkwgPSAnaHR0cDovL3N2bi53
ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rL0xheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCc7CisKK2Z1bmN0aW9uIHJlcXVlc3RFeHBlY3Rh
dGlvbnNGaWxlKCkKK3sKKyAgICByZXF1ZXN0KENIUk9NSVVNX0VYUEVDVEFUSU9OU19VUkwsIGZ1
bmN0aW9uKHhocikgeworICAgICAgICBnX3dhaXRpbmdPbkV4cGVjdGF0aW9ucyA9IGZhbHNlOwor
ICAgICAgICBnX2V4cGVjdGF0aW9ucyA9IHhoci5yZXNwb25zZVRleHQ7CisgICAgICAgIGhhbmRs
ZVJlc291cmNlTG9hZCgpOworICAgIH0sCisgICAgZnVuY3Rpb24oKSB7CisgICAgICAgIGNvbnNv
bGUuZXJyb3IoJ0NvdWxkIG5vdCBsb2FkIGV4cGVjdGF0aW9ucyBmaWxlIGZyb20gJyArIENIUk9N
SVVNX0VYUEVDVEFUSU9OU19VUkwpOworICAgIH0pOworfQorCit2YXIgZ193YWl0aW5nT25FeHBl
Y3RhdGlvbnMgPSBpc0xheW91dFRlc3RSZXN1bHRzKCkgJiYgIWlzVHJlZU1hcCgpOworCitmdW5j
dGlvbiBpc1RyZWVNYXAoKQoreworICAgIHJldHVybiBlbmRzV2l0aCh3aW5kb3cubG9jYXRpb24u
cGF0aG5hbWUsICd0cmVlbWFwLmh0bWwnKTsKK30KKworZnVuY3Rpb24gYXBwZW5kSlNPTlNjcmlw
dEVsZW1lbnRGb3IoYnVpbGRlck5hbWUpCit7CisgICAgdmFyIHJlc3VsdHNGaWxlbmFtZTsKKyAg
ICBpZiAoaXNUcmVlTWFwKCkpCisgICAgICAgIHJlc3VsdHNGaWxlbmFtZSA9ICd0aW1lc19tcy5q
c29uJzsKKyAgICBlbHNlIGlmIChnX2N1cnJlbnRTdGF0ZS5zaG93QWxsUnVucykKKyAgICAgICAg
cmVzdWx0c0ZpbGVuYW1lID0gJ3Jlc3VsdHMuanNvbic7CisgICAgZWxzZQorICAgICAgICByZXN1
bHRzRmlsZW5hbWUgPSAncmVzdWx0cy1zbWFsbC5qc29uJzsKKworICAgIGFwcGVuZFNjcmlwdChw
YXRoVG9CdWlsZGVyUmVzdWx0c0ZpbGUoYnVpbGRlck5hbWUpICsgcmVzdWx0c0ZpbGVuYW1lICsg
JyZjYWxsYmFjaz1BRERfUkVTVUxUUycsCisgICAgICAgICAgICBwYXJ0aWFsKGhhbmRsZVJlc291
cmNlTG9hZEVycm9yLCBidWlsZGVyTmFtZSksCisgICAgICAgICAgICBwYXJ0aWFsKGhhbmRsZVNj
cmlwdExvYWRlZCwgYnVpbGRlck5hbWUpKTsKK30KKworZnVuY3Rpb24gYXBwZW5kSlNPTlNjcmlw
dEVsZW1lbnRzKCkKK3sKKyAgICBjbGVhckVycm9ycygpOworCisgICAgaWYgKGlzVHJlZU1hcCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBwYXJzZVBhcmFtZXRlcnMoKTsKKworICAgIGlmIChn
X2N1cnJlbnRTdGF0ZS51c2VUZXN0RGF0YSkgeworICAgICAgICBhcHBlbmRTY3JpcHQoJ2ZsYWtp
bmVzc19kYXNoYm9hcmRfdGVzdHMuanMnKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGZvciAodmFyIGJ1aWxkZXJOYW1lIGluIGdfYnVpbGRlcnMpCisgICAgICAgIGFwcGVuZEpTT05T
Y3JpcHRFbGVtZW50Rm9yKGJ1aWxkZXJOYW1lKTsKKworICAgIGlmIChnX3dhaXRpbmdPbkV4cGVj
dGF0aW9ucykKKyAgICAgICAgcmVxdWVzdEV4cGVjdGF0aW9uc0ZpbGUoKTsKK30KKwordmFyIGdf
aGFzRG9uZUluaXRpYWxQYWdlR2VuZXJhdGlvbiA9IGZhbHNlOworLy8gU3RyaW5nIG9mIGVycm9y
IG1lc3NhZ2VzIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIuCit2YXIgZ19lcnJvck1lc3NhZ2VzID0g
Jyc7CisKK2Z1bmN0aW9uIGhhbmRsZVJlc291cmNlTG9hZCgpCit7CisgICAgLy8gSW4gY2FzZSB3
ZSBsb2FkIGEgcmVzdWx0cy5qc29uIHRoYXQncyBub3QgaW4gdGhlIGxpc3Qgb2YgYnVpbGRlcnMs
CisgICAgLy8gbWFrZSBzdXJlIHRvIG9ubHkgY2FsbCBoYW5kbGVMb2NhdGlvbkNoYW5nZSBvbmNl
IGZyb20gdGhlIHJlc291cmNlIGxvYWRzLgorICAgIGlmICghZ19oYXNEb25lSW5pdGlhbFBhZ2VH
ZW5lcmF0aW9uKQorICAgICAgICBoYW5kbGVMb2NhdGlvbkNoYW5nZSgpOworfQorCitmdW5jdGlv
biBoYW5kbGVTY3JpcHRMb2FkZWQoYnVpbGRlck5hbWUsIHNjcmlwdCkKK3sKKyAgICAvLyBXZSBu
ZWVkIHRoaXMgd29yay1hcm91bmQgZm9yIHdlYmtpdC5vcmcvYi81MDU4OS4KKyAgICBpZiAoIWdf
cmVzdWx0c0J5QnVpbGRlcltidWlsZGVyTmFtZV0pIHsKKyAgICAgICAgdmFyIGVycm9yID0gbmV3
IEVycm9yKCJCdWlsZGVyIGRhdGEgd2FzIGVtcHR5Iik7CisgICAgICAgIGVycm9yLnRhcmdldCA9
IHNjcmlwdDsKKyAgICAgICAgaGFuZGxlUmVzb3VyY2VMb2FkRXJyb3IoYnVpbGRlck5hbWUsIGVy
cm9yKTsKKyAgICB9Cit9CisKKy8vIEhhbmRsZSByZXNvdXJjZSBsb2FkaW5nIGVycm9ycyAtIDQw
NHMsIDUwMHMsIGV0Yy4gICAgUmVjb3ZlciBmcm9tIHRoZSBlcnJvciB0bworLy8gc3RpbGwgc2hv
dyBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUsIGJ1dCBzaG93IHNvbWUgVUkgYWJvdXQgdGhlIGZh
aWx1cmUsIGFuZAorLy8gZG8gbm90IHRyeSB1c2luZyB0aGlzIHJlc291cmNlIGFnYWluIHVudGls
IHVzZXIgcmVmcmVzaGVzLgorLy8KKy8vIEBwYXJhbSB7c3RyaW5nfSBidWlsZGVyTmFtZSBOYW1l
IG9mIGJ1aWxkZXIgdGhhdCB0aGUgcmVzb3VyY2UgZmFpbGVkIGZvci4KKy8vIEBwYXJhbSB7RXZl
bnR9IGUgVGhlIGVycm9yIGV2ZW50LgorZnVuY3Rpb24gaGFuZGxlUmVzb3VyY2VMb2FkRXJyb3Io
YnVpbGRlck5hbWUsIGUpCit7CisgICAgdmFyIGVycm9yID0gZS50YXJnZXQuc3JjICsgJyBmYWls
ZWQgdG8gbG9hZCBmb3IgJyArIGJ1aWxkZXJOYW1lICsgJy4nOworCisgICAgaWYgKGlzTGF5b3V0
VGVzdFJlc3VsdHMoKSkgeworICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKKyAgICAgICAg
YWRkRXJyb3IoZXJyb3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEF2b2lkIHRvIHNob3cg
ZXJyb3Ivd2FybmluZyBtZXNzYWdlcyBmb3Igbm9uLWxheW91dCB0ZXN0cy4gV2UgbWF5IGJlCisg
ICAgICAgIC8vIGNoZWNraW5nIHRoZSBidWlsZGVycyB0aGF0IGFyZSBub3QgcnVubmluZyB0aGUg
dGVzdHMuCisgICAgICAgIGNvbnNvbGUuaW5mbygnaW5mbzonICsgZXJyb3IpOworICAgIH0KKwor
ICAgIC8vIFJlbW92ZSB0aGlzIGJ1aWxkZXIgZnJvbSBidWlsZGVycywgc28gd2UgZG9uJ3QgdHJ5
IHRvIHVzZSB0aGUKKyAgICAvLyBkYXRhIHRoYXQgaXNuJ3QgdGhlcmUuCisgICAgZGVsZXRlIGdf
YnVpbGRlcnNbYnVpbGRlck5hbWVdOworCisgICAgLy8gQ2hhbmdlIHRoZSBkZWZhdWx0IGJ1aWxk
ZXIgbmFtZSBpZiBpdCBoYXMgYmVlbiBkZWxldGVkLgorICAgIGlmIChnX2RlZmF1bHRCdWlsZGVy
TmFtZSA9PSBidWlsZGVyTmFtZSkgeworICAgICAgICBnX2RlZmF1bHRCdWlsZGVyTmFtZSA9IG51
bGw7CisgICAgICAgIGZvciAodmFyIGF2YWlsYWJsZUJ1aWxkZXJOYW1lIGluIGdfYnVpbGRlcnMp
IHsKKyAgICAgICAgICAgIGdfZGVmYXVsdEJ1aWxkZXJOYW1lID0gYXZhaWxhYmxlQnVpbGRlck5h
bWU7CisgICAgICAgICAgICBnX2RlZmF1bHRTdGF0ZVZhbHVlcy5idWlsZGVyID0gYXZhaWxhYmxl
QnVpbGRlck5hbWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IWdfZGVmYXVsdEJ1aWxkZXJOYW1lKSB7CisgICAgICAgICAgICB2YXIgZXJyb3IgPSAnTm8gdGVz
dHMgcmVzdWx0cyBmb3VuZCBmb3IgJyArIGdfY3VycmVudFN0YXRlLnRlc3RUeXBlICsgJy4gUmVs
b2FkIHRoZSBwYWdlIHRvIHRyeSBmZXRjaGluZyBpdCBhZ2Fpbi4nOworICAgICAgICAgICAgY29u
c29sZS5lcnJvcihlcnJvcik7CisgICAgICAgICAgICBhZGRFcnJvcihlcnJvcik7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBQcm9jZWVkIGFzIGlmIHRoZSByZXNvdXJjZSBoYWQgbG9hZGVk
LgorICAgIGhhbmRsZVJlc291cmNlTG9hZCgpOworfQorCisKKy8vIFJlY29yZCBhIG5ldyBlcnJv
ciBtZXNzYWdlLgorLy8gQHBhcmFtIHtzdHJpbmd9IGVycm9yTXNnIFRoZSBtZXNzYWdlIHRvIHNo
b3cgdG8gdGhlIHVzZXIuCitmdW5jdGlvbiBhZGRFcnJvcihlcnJvck1zZykKK3sKKyAgICBnX2Vy
cm9yTWVzc2FnZXMgKz0gZXJyb3JNc2cgKyAnPGJyIC8+JzsKK30KKworLy8gQ2xlYXIgb3V0IGVy
cm9yIGFuZCB3YXJuaW5nIG1lc3NhZ2VzLgorZnVuY3Rpb24gY2xlYXJFcnJvcnMoKQoreworICAg
IGdfZXJyb3JNZXNzYWdlcyA9ICcnOworfQorCisvLyBJZiB0aGVyZSBhcmUgZXJyb3JzLCBzaG93
IGJpZyBhbmQgcmVkIFVJIGZvciBlcnJvcnMgc28gYXMgdG8gYmUgbm90aWNlZC4KK2Z1bmN0aW9u
IHNob3dFcnJvcnMoKQoreworICAgIHZhciBlcnJvcnMgPSAkKCdlcnJvcnMnKTsKKworICAgIGlm
ICghZ19lcnJvck1lc3NhZ2VzKSB7CisgICAgICAgIGlmIChlcnJvcnMpCisgICAgICAgICAgICBl
cnJvcnMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlcnJvcnMpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFlcnJvcnMpIHsKKyAgICAgICAgZXJyb3JzID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnSDInKTsKKyAgICAgICAgZXJyb3JzLnN0eWxlLmNvbG9yID0gJ3JlZCc7Cisg
ICAgICAgIGVycm9ycy5pZCA9ICdlcnJvcnMnOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVu
ZENoaWxkKGVycm9ycyk7CisgICAgfQorCisgICAgZXJyb3JzLmlubmVySFRNTCA9IGdfZXJyb3JN
ZXNzYWdlczsKK30KKworLy8gQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUganNvbiBmaWxl
cyBoYXZlIGFsbCBjb21wbGV0ZWQgbG9hZGluZy4KK2Z1bmN0aW9uIGhhdmVKc29uRmlsZXNMb2Fk
ZWQoKQoreworICAgIGlmIChnX3dhaXRpbmdPbkV4cGVjdGF0aW9ucykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKGlzVHJlZU1hcCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGZvciAodmFyIGJ1aWxkZXIgaW4gZ19idWlsZGVycykgeworICAgICAgICBpZiAoIWdfcmVz
dWx0c0J5QnVpbGRlcltidWlsZGVyXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIGhhbmRsZUxvY2F0aW9uQ2hhbmdlKCkK
K3sKKyAgICBpZighaGF2ZUpzb25GaWxlc0xvYWRlZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBnX2hhc0RvbmVJbml0aWFsUGFnZUdlbmVyYXRpb24gPSB0cnVlOworCisgICAgdmFyIHBhcmFt
cyA9IHBhcnNlUGFyYW1ldGVycygpOworICAgIHZhciBzaG91bGRHZW5lcmF0ZVBhZ2UgPSB0cnVl
OworICAgIGlmIChPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCkKKyAgICAgICAgc2hvdWxkR2Vu
ZXJhdGVQYWdlID0gaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2UocGFyYW1zKTsKKworICAgIHZh
ciBuZXdIYXNoID0gcGVybWFMaW5rVVJMSGFzaCgpOworICAgIHZhciB3aW5IYXNoID0gd2luZG93
LmxvY2F0aW9uLmhhc2ggfHwgIiMiOworICAgIC8vIE1ha2Ugc3VyZSB0aGUgbG9jYXRpb24gaXMg
dGhlIHNhbWUgYXMgdGhlIHN0YXRlIHdlIGFyZSB1c2luZyBpbnRlcm5hbGx5LgorICAgIC8vIFRo
ZXNlIGdldCBvdXQgb2Ygc3luYyBpZiBwcm9jZXNzUXVlcnlQYXJhbUNoYW5nZSBjaGFuZ2VkIHN0
YXRlLgorICAgIGlmIChuZXdIYXNoICE9IHdpbkhhc2gpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxs
IGNhdXNlIGFub3RoZXIgaGFzaGNoYW5nZSwgYW5kIHdoZW4gd2UgbG9vcAorICAgICAgICAvLyBi
YWNrIHRocm91Z2ggaGVyZSBuZXh0IHRpbWUsIHdlJ2xsIGdvIHRocm91Z2ggZ2VuZXJhdGVQYWdl
LgorICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IG5ld0hhc2g7CisgICAgfSBlbHNlIGlm
IChzaG91bGRHZW5lcmF0ZVBhZ2UpCisgICAgICAgIGdlbmVyYXRlUGFnZSgpOworfQorCit3aW5k
b3cub25oYXNoY2hhbmdlID0gaGFuZGxlTG9jYXRpb25DaGFuZ2U7CisKKy8vIFNldHMgdGhlIHBh
Z2Ugc3RhdGUuIFRha2VzIHZhcmFyZ3Mgb2Yga2V5LCB2YWx1ZSBwYWlycy4KK2Z1bmN0aW9uIHNl
dFF1ZXJ5UGFyYW1ldGVyKHZhcl9hcmdzKQoreworICAgIHZhciBzdGF0ZSA9IE9iamVjdC5jcmVh
dGUoZ19jdXJyZW50U3RhdGUpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxl
bmd0aDsgaSArPSAyKSB7CisgICAgICAgIHZhciBrZXkgPSBhcmd1bWVudHNbaV07CisgICAgICAg
IHN0YXRlW2tleV0gPSBhcmd1bWVudHNbaSArIDFdOworICAgIH0KKyAgICAvLyBOb3RlOiBXZSB1
c2Ugd2luZG93LmxvY2F0aW9uLmhhc2ggcmF0aGVyIHRoYXQgd2luZG93LmxvY2F0aW9uLnJlcGxh
Y2UKKyAgICAvLyBiZWNhdXNlIG9mIGJ1Z3MgaW4gQ2hyb21lIHdoZXJlIGV4dHJhIGVudHJpZXMg
d2VyZSBnZXR0aW5nIGNyZWF0ZWQKKyAgICAvLyB3aGVuIGJhY2sgYnV0dG9uIHdhcyBwcmVzc2Vk
IGFuZCBmdWxsIHBhZ2UgbmF2aWdhdGlvbiB3YXMgb2NjdXJpbmcuCisgICAgLy8gRklYTUU6IGZp
bGUgdGhvc2UgYnVncy4KKyAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IHBlcm1hTGlua1VSTEhh
c2goc3RhdGUpOworfQorCitmdW5jdGlvbiBwZXJtYUxpbmtVUkxIYXNoKG9wdF9zdGF0ZSkKK3sK
KyAgICB2YXIgc3RhdGUgPSBvcHRfc3RhdGUgfHwgZ19jdXJyZW50U3RhdGU7CisgICAgcmV0dXJu
ICcjJyArIGpvaW5QYXJhbWV0ZXJzKHN0YXRlKTsKK30KKworZnVuY3Rpb24gam9pblBhcmFtZXRl
cnMoc3RhdGVPYmplY3QpCit7CisgICAgdmFyIHN0YXRlID0gW107CisgICAgZm9yICh2YXIga2V5
IGluIHN0YXRlT2JqZWN0KSB7CisgICAgICAgIHZhciB2YWx1ZSA9IHN0YXRlT2JqZWN0W2tleV07
CisgICAgICAgIGlmICh2YWx1ZSAhPSBkZWZhdWx0VmFsdWUoa2V5KSkKKyAgICAgICAgICAgIHN0
YXRlLnB1c2goa2V5ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7CisgICAgfQor
ICAgIHJldHVybiBzdGF0ZS5qb2luKCcmJyk7Cit9CisKK2Z1bmN0aW9uIGxvZ1RpbWUobXNnLCBz
dGFydFRpbWUpCit7CisgICAgY29uc29sZS5sb2cobXNnICsgJzogJyArIChEYXRlLm5vdygpIC0g
c3RhcnRUaW1lKSk7Cit9CisKK2Z1bmN0aW9uIGhpZGVQb3B1cCgpCit7CisgICAgdmFyIHBvcHVw
ID0gJCgncG9wdXAnKTsKKyAgICBpZiAocG9wdXApCisgICAgICAgIHBvcHVwLnBhcmVudE5vZGUu
cmVtb3ZlQ2hpbGQocG9wdXApOworfQorCitmdW5jdGlvbiBzaG93UG9wdXAoZSwgaHRtbCkKK3sK
KyAgICB2YXIgcG9wdXAgPSAkKCdwb3B1cCcpOworICAgIGlmICghcG9wdXApIHsKKyAgICAgICAg
cG9wdXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgcG9wdXAuaWQg
PSAncG9wdXAnOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBvcHVwKTsKKyAg
ICB9CisKKyAgICAvLyBTZXQgaHRtbCBmaXJzdCBzbyB0aGF0IHdlIGNhbiBnZXQgYWNjdXJhdGUg
c2l6ZSBtZXRyaWNzIG9uIHRoZSBwb3B1cC4KKyAgICBwb3B1cC5pbm5lckhUTUwgPSBodG1sOwor
CisgICAgdmFyIHRhcmdldFJlY3QgPSBlLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsK
KworICAgIHZhciB4ID0gTWF0aC5taW4odGFyZ2V0UmVjdC5sZWZ0IC0gMTAsIGRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCAtIHBvcHVwLm9mZnNldFdpZHRoKTsKKyAgICB4ID0g
TWF0aC5tYXgoMCwgeCk7CisgICAgcG9wdXAuc3R5bGUubGVmdCA9IHggKyBkb2N1bWVudC5ib2R5
LnNjcm9sbExlZnQgKyAncHgnOworCisgICAgdmFyIHkgPSB0YXJnZXRSZWN0LnRvcCArIHRhcmdl
dFJlY3QuaGVpZ2h0OworICAgIGlmICh5ICsgcG9wdXAub2Zmc2V0SGVpZ2h0ID4gZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkKKyAgICAgICAgeSA9IHRhcmdldFJlY3QudG9w
IC0gcG9wdXAub2Zmc2V0SGVpZ2h0OworICAgIHkgPSBNYXRoLm1heCgwLCB5KTsKKyAgICBwb3B1
cC5zdHlsZS50b3AgPSB5ICsgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgKyAncHgnOworfQorCisv
LyBDcmVhdGUgYSBuZXcgZnVuY3Rpb24gd2l0aCBzb21lIG9mIGl0cyBhcmd1ZW1lbnRzCisvLyBw
cmUtZmlsbGVkLgorLy8gVGFrZW4gZnJvbSBnb29nLnBhcnRpYWwgaW4gdGhlIENsb3N1cmUgbGli
cmFyeS4KKy8vIEBwYXJhbSB7RnVuY3Rpb259IGZuIEEgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFw
cGx5LgorLy8gQHBhcmFtIHsuLi4qfSB2YXJfYXJncyBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0
IGFyZSBwYXJ0aWFsbHkKKy8vICAgICAgICAgYXBwbGllZCB0byBmbi4KKy8vIEByZXR1cm4geyFG
dW5jdGlvbn0gQSBwYXJ0aWFsbHktYXBwbGllZCBmb3JtIG9mIHRoZSBmdW5jdGlvbiBiaW5kKCkg
d2FzCisvLyAgICAgICAgIGludm9rZWQgYXMgYSBtZXRob2Qgb2YuCitmdW5jdGlvbiBwYXJ0aWFs
KGZuLCB2YXJfYXJncykKK3sKKyAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5j
YWxsKGFyZ3VtZW50cywgMSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAvLyBQ
cmVwZW5kIHRoZSBib3VuZCBhcmd1bWVudHMgdG8gdGhlIGN1cnJlbnQgYXJndW1lbnRzLgorICAg
ICAgICB2YXIgbmV3QXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7
CisgICAgICAgIG5ld0FyZ3MudW5zaGlmdC5hcHBseShuZXdBcmdzLCBhcmdzKTsKKyAgICAgICAg
cmV0dXJuIGZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpOworICAgIH07Cit9OworCisvLyBSZXR1cm5z
IHRoZSBhcHByb3ByaWF0ZSBleHBlY3RhdGlvc24gbWFwIGZvciB0aGUgY3VycmVudCB0ZXN0VHlw
ZS4KK2Z1bmN0aW9uIGV4cGVjdGF0aW9uc01hcCgpCit7CisgICAgcmV0dXJuIGlzTGF5b3V0VGVz
dFJlc3VsdHMoKSA/IExBWU9VVF9URVNUX0VYUEVDVEFUSU9OU19NQVBfIDogR1RFU1RfRVhQRUNU
QVRJT05TX01BUF87Cit9CisKK2Z1bmN0aW9uIHRvZ2dsZVF1ZXJ5UGFyYW1ldGVyKHBhcmFtKQor
eworICAgIHNldFF1ZXJ5UGFyYW1ldGVyKHBhcmFtLCAhZ19jdXJyZW50U3RhdGVbcGFyYW1dKTsK
K30KKworZnVuY3Rpb24gY2hlY2tib3hIVE1MKHF1ZXJ5UGFyYW1ldGVyLCBsYWJlbCwgaXNDaGVj
a2VkLCBvcHRfZXh0cmFKYXZhU2NyaXB0KQoreworICAgIHZhciBqcyA9IG9wdF9leHRyYUphdmFT
Y3JpcHQgfHwgJyc7CisgICAgcmV0dXJuICc8bGFiZWwgc3R5bGU9InBhZGRpbmctbGVmdDogMmVt
Ij4nICsKKyAgICAgICAgJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25jaGFuZ2U9InRvZ2dsZVF1
ZXJ5UGFyYW1ldGVyKFwnJyArIHF1ZXJ5UGFyYW1ldGVyICsgJ1wnKTsnICsganMgKyAnIiAnICsK
KyAgICAgICAgICAgIChpc0NoZWNrZWQgPyAnY2hlY2tlZCcgOiAnJykgKyAnPicgKyBsYWJlbCAr
CisgICAgICAgICc8L2xhYmVsPiAnOworfQorCitmdW5jdGlvbiBzZWxlY3RIVE1MKGxhYmVsLCBx
dWVyeVBhcmFtZXRlciwgb3B0aW9ucykKK3sKKyAgICB2YXIgaHRtbCA9ICc8bGFiZWwgc3R5bGU9
InBhZGRpbmctbGVmdDogMmVtIj4nICsgbGFiZWwgKyAnOiAnICsKKyAgICAgICAgJzxzZWxlY3Qg
b25jaGFuZ2U9InNldFF1ZXJ5UGFyYW1ldGVyKFwnJyArIHF1ZXJ5UGFyYW1ldGVyICsgJ1wnLCB0
aGlzW3RoaXMuc2VsZWN0ZWRJbmRleF0udmFsdWUpIj4nOworCisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciB2YWx1ZSA9IG9wdGlvbnNb
aV07CisgICAgICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9IicgKyB2YWx1ZSArICciICcgKwor
ICAgICAgICAgICAgKGdfY3VycmVudFN0YXRlW3F1ZXJ5UGFyYW1ldGVyXSA9PSB2YWx1ZSA/ICdz
ZWxlY3RlZCcgOiAnJykgKworICAgICAgICAgICAgJz4nICsgdmFsdWUgKyAnPC9vcHRpb24+Jwor
ICAgIH0KKyAgICBodG1sICs9ICc8L3NlbGVjdD48L2xhYmVsPiAnOworICAgIHJldHVybiBodG1s
OworfQorCisvLyBSZXR1cm5zIHRoZSBIVE1MIGZvciB0aGUgc2VsZWN0IGVsZW1lbnQgdG8gc3dp
dGNoIHRvIGRpZmZlcmVudCB0ZXN0VHlwZXMuCitmdW5jdGlvbiBodG1sRm9yVGVzdFR5cGVTd2l0
Y2hlcihvcHRfbm9CdWlsZGVyTWVudSwgb3B0X2V4dHJhSHRtbCwgb3B0X2luY2x1ZGVOb25lQnVp
bGRlcikKK3sKKyAgICB2YXIgaHRtbCA9ICc8ZGl2IHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBk
YXNoZWQiPic7CisgICAgaHRtbCArPSAnJyArCisgICAgICAgIGh0bWxGb3JEYXNoYm9hcmRMaW5r
KCdTdGF0cycsICdhZ2dyZWdhdGVfcmVzdWx0cy5odG1sJykgKworICAgICAgICBodG1sRm9yRGFz
aGJvYXJkTGluaygnVGltZWxpbmUnLCAndGltZWxpbmVfZXhwbG9yZXIuaHRtbCcpICsKKyAgICAg
ICAgaHRtbEZvckRhc2hib2FyZExpbmsoJ1Jlc3VsdHMnLCAnZmxha2luZXNzX2Rhc2hib2FyZC5o
dG1sJykgKworICAgICAgICBodG1sRm9yRGFzaGJvYXJkTGluaygnVHJlZW1hcCcsICd0cmVlbWFw
Lmh0bWwnKTsKKworICAgIGh0bWwgKz0gc2VsZWN0SFRNTCgnVGVzdCB0eXBlJywgJ3Rlc3RUeXBl
JywgVEVTVF9UWVBFUyk7CisKKyAgICBpZiAoIW9wdF9ub0J1aWxkZXJNZW51KSB7CisgICAgICAg
IHZhciBidWlsZGVyc0Zvck1lbnUgPSBPYmplY3Qua2V5cyhnX2J1aWxkZXJzKTsKKyAgICAgICAg
aWYgKG9wdF9pbmNsdWRlTm9uZUJ1aWxkZXIpCisgICAgICAgICAgICBidWlsZGVyc0Zvck1lbnUu
dW5zaGlmdCgnLS0tLS0tLS0tLS0tLS0nKTsKKyAgICAgICAgaHRtbCArPSBzZWxlY3RIVE1MKCdC
dWlsZGVyJywgJ2J1aWxkZXInLCBidWlsZGVyc0Zvck1lbnUpOworICAgIH0KKworICAgIGlmIChp
c0xheW91dFRlc3RSZXN1bHRzKCkpCisgICAgICAgIGh0bWwgKz0gc2VsZWN0SFRNTCgnR3JvdXAn
LCAnZ3JvdXAnLCBPYmplY3Qua2V5cyhMQVlPVVRfVEVTVFNfQlVJTERFUl9HUk9VUFMpKTsKKwor
ICAgIGlmICghaXNUcmVlTWFwKCkpCisgICAgICAgIGh0bWwgKz0gY2hlY2tib3hIVE1MKCdzaG93
QWxsUnVucycsICdTaG93IGFsbCBydW5zJywgZ19jdXJyZW50U3RhdGUuc2hvd0FsbFJ1bnMpOwor
CisgICAgaWYgKG9wdF9leHRyYUh0bWwpCisgICAgICAgIGh0bWwgKz0gb3B0X2V4dHJhSHRtbDsK
KyAgICByZXR1cm4gaHRtbCArICc8L2Rpdj4nOworfQorCitmdW5jdGlvbiBzZWxlY3RCdWlsZGVy
KGJ1aWxkZXIpCit7CisgICAgc2V0UXVlcnlQYXJhbWV0ZXIoJ2J1aWxkZXInLCBidWlsZGVyKTsK
K30KKworZnVuY3Rpb24gbG9hZERhc2hib2FyZChmaWxlTmFtZSkKK3sKKyAgICB2YXIgcGF0aE5h
bWUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CisgICAgcGF0aE5hbWUgPSBwYXRoTmFtZS5z
dWJzdHJpbmcoMCwgcGF0aE5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpOworICAgIHdpbmRvdy5s
b2NhdGlvbiA9IHBhdGhOYW1lICsgZmlsZU5hbWUgKyB3aW5kb3cubG9jYXRpb24uaGFzaDsKK30K
KworZnVuY3Rpb24gaHRtbEZvclRvcExpbmsoaHRtbCwgb25DbGljaywgaXNTZWxlY3RlZCkKK3sK
KyAgICB2YXIgY3NzVGV4dCA9IGlzU2VsZWN0ZWQgPyAnZm9udC13ZWlnaHQ6IGJvbGQ7JyA6ICdj
b2xvcjpibHVlO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXI7JzsKKyAg
ICBjc3NUZXh0ICs9ICdtYXJnaW46IDAgNXB4Oyc7CisgICAgcmV0dXJuICc8c3BhbiBzdHlsZT0i
JyArIGNzc1RleHQgKyAnIiBvbmNsaWNrPSInICsgb25DbGljayArICciPicgKyBodG1sICsgJzwv
c3Bhbj4nOworfQorCitmdW5jdGlvbiBodG1sRm9yRGFzaGJvYXJkTGluayhodG1sLCBmaWxlTmFt
ZSkKK3sKKyAgICB2YXIgcGF0aE5hbWUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CisgICAg
dmFyIGN1cnJlbnRGaWxlTmFtZSA9IHBhdGhOYW1lLnN1YnN0cmluZyhwYXRoTmFtZS5sYXN0SW5k
ZXhPZignLycpICsgMSk7CisgICAgdmFyIGlzU2VsZWN0ZWQgPSBjdXJyZW50RmlsZU5hbWUgPT0g
ZmlsZU5hbWU7CisgICAgdmFyIG9uQ2xpY2sgPSAnbG9hZERhc2hib2FyZChcJycgKyBmaWxlTmFt
ZSArICdcJyknOworICAgIHJldHVybiBodG1sRm9yVG9wTGluayhodG1sLCBvbkNsaWNrLCBpc1Nl
bGVjdGVkKTsKK30KKworZnVuY3Rpb24gcmV2aXNpb25MaW5rKHJlc3VsdHMsIGluZGV4LCBrZXks
IHNpbmdsZVVybFRlbXBsYXRlLCByYW5nZVVybFRlbXBsYXRlKQoreworICAgIHZhciBjdXJyZW50
UmV2aXNpb24gPSBwYXJzZUludChyZXN1bHRzW2tleV1baW5kZXhdLCAxMCk7CisgICAgdmFyIHBy
ZXZpb3VzUmV2aXNpb24gPSBwYXJzZUludChyZXN1bHRzW2tleV1baW5kZXggKyAxXSwgMTApOwor
CisgICAgZnVuY3Rpb24gc2luZ2xlVXJsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzaW5nbGVV
cmxUZW1wbGF0ZS5yZXBsYWNlKCc8cmV2PicsIGN1cnJlbnRSZXZpc2lvbik7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gcmFuZ2VVcmwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJhbmdlVXJsVGVt
cGxhdGUucmVwbGFjZSgnPHJldjE+JywgY3VycmVudFJldmlzaW9uKS5yZXBsYWNlKCc8cmV2Mj4n
LCBwcmV2aW91c1JldmlzaW9uICsgMSk7CisgICAgfQorCisgICAgaWYgKGN1cnJlbnRSZXZpc2lv
biA9PSBwcmV2aW91c1JldmlzaW9uKQorICAgICAgICByZXR1cm4gJ0F0IDxhIGhyZWY9IicgKyBz
aW5nbGVVcmwoKSArICciPnInICsgY3VycmVudFJldmlzaW9uICAgICsgJzwvYT4nOworICAgIGVs
c2UgaWYgKGN1cnJlbnRSZXZpc2lvbiAtIHByZXZpb3VzUmV2aXNpb24gPT0gMSkKKyAgICAgICAg
cmV0dXJuICc8YSBocmVmPSInICsgc2luZ2xlVXJsKCkgKyAnIj5yJyArIGN1cnJlbnRSZXZpc2lv
biAgICArICc8L2E+JzsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAnPGEgaHJlZj0iJyArIHJh
bmdlVXJsKCkgKyAnIj5yJyArIChwcmV2aW91c1JldmlzaW9uICsgMSkgKyAnIHRvIHInICsgY3Vy
cmVudFJldmlzaW9uICsgJzwvYT4nOworfQorCitmdW5jdGlvbiBjaHJvbWl1bVJldmlzaW9uTGlu
ayhyZXN1bHRzLCBpbmRleCkKK3sKKyAgICByZXR1cm4gcmV2aXNpb25MaW5rKAorICAgICAgICBy
ZXN1bHRzLAorICAgICAgICBpbmRleCwKKyAgICAgICAgQ0hST01FX1JFVklTSU9OU19LRVksCisg
ICAgICAgICdodHRwOi8vc3JjLmNocm9taXVtLm9yZy92aWV3dmMvY2hyb21lP3ZpZXc9cmV2JnJl
dmlzaW9uPTxyZXY+JywKKyAgICAgICAgJ2h0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9jaHJv
bWl1bS9wZXJmL2Rhc2hib2FyZC91aS9jaGFuZ2Vsb2cuaHRtbD91cmw9L3RydW5rL3NyYyZyYW5n
ZT08cmV2Mj46PHJldjE+Jm1vZGU9aHRtbCcpOworfQorCitmdW5jdGlvbiB3ZWJLaXRSZXZpc2lv
bkxpbmsocmVzdWx0cywgaW5kZXgpCit7CisgICAgcmV0dXJuIHJldmlzaW9uTGluaygKKyAgICAg
ICAgcmVzdWx0cywKKyAgICAgICAgaW5kZXgsCisgICAgICAgIFdFQktJVF9SRVZJU0lPTlNfS0VZ
LAorICAgICAgICAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvPHJldj4nLAorICAg
ICAgICAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9sb2cvdHJ1bmsvP3Jldj08cmV2MT4mc3RvcF9y
ZXY9PHJldjI+JmxpbWl0PTEwMCZ2ZXJib3NlPW9uJyk7Cit9CisKKy8vICJEZWNvbXByZXNzZXMi
IHRoZSBSTEUtZW5jb2Rpbmcgb2YgdGVzdCByZXN1bHRzIHNvIHRoYXQgd2UgY2FuIHF1ZXJ5IGl0
CisvLyBieSBidWlsZCBpbmRleCBhbmQgdGVzdCBuYW1lLgorLy8KKy8vIEBwYXJhbSB7T2JqZWN0
fSByZXN1bHRzIHJlc3VsdHMgZm9yIHRoZSBjdXJyZW50IGJ1aWxkZXIKKy8vIEByZXR1cm4gT2Jq
ZWN0IHdpdGggdGhlc2UgcHJvcGVydGllczoKKy8vICAgICAtIHRlc3ROYW1lczogYXJyYXkgbWFw
cGluZyB0ZXN0IGluZGV4IHRvIHRlc3QgbmFtZXMuCisvLyAgICAgLSByZXN1bHRzQnlCdWlsZDog
YXJyYXkgb2YgYnVpbGRzLCBmb3IgZWFjaCBidWlsZCBhIChzcGFyc2UpIGFycmF5IG9mIHRlc3Qg
cmVzdWx0cyBieSB0ZXN0IGluZGV4LgorLy8gICAgIC0gZmxha3lUZXN0czogYXJyYXkgd2l0aCB0
aGUgYm9vbGVhbiB2YWx1ZSB0cnVlIGF0IHRlc3QgaW5kaWNlcyB0aGF0IGFyZSBjb25zaWRlcmVk
IGZsYWt5IChtb3JlIHRoYW4gb25lIHNpbmdsZS1idWlsZCBmYWlsdXJlKS4KKy8vICAgICAtIGZs
YWt5RGVsdGFzQnlCdWlsZDogYXJyYXkgb2YgYnVpbGRzLCBmb3IgZWFjaCBidWlsZCBhIGNvdW50
IG9mIGZsYWt5IHRlc3QgcmVzdWx0cyBieSBleHBlY3RhdGlvbiwgYXMgd2VsbCBhcyBhIHRvdGFs
LgorZnVuY3Rpb24gZGVjb21wcmVzc1Jlc3VsdHMoYnVpbGRlclJlc3VsdHMpCit7CisgICAgdmFy
IGJ1aWxkZXJUZXN0UmVzdWx0cyA9IGJ1aWxkZXJSZXN1bHRzW1RFU1RTX0tFWV07CisgICAgdmFy
IGJ1aWxkQ291bnQgPSBidWlsZGVyUmVzdWx0c1tGSVhBQkxFX0NPVU5UU19LRVldLmxlbmd0aDsK
KyAgICB2YXIgcmVzdWx0c0J5QnVpbGQgPSBuZXcgQXJyYXkoYnVpbGRDb3VudCk7CisgICAgdmFy
IGZsYWt5RGVsdGFzQnlCdWlsZCA9IG5ldyBBcnJheShidWlsZENvdW50KTsKKworICAgIC8vIFBy
ZS1zaXppbmcgdGhlIHRlc3QgcmVzdWx0IGFycmF5cyBmb3IgZWFjaCBidWlsZCBzYXZlcyB1cyB+
MjUwbXMKKyAgICB2YXIgdGVzdENvdW50ID0gMDsKKyAgICBmb3IgKHZhciB0ZXN0TmFtZSBpbiBi
dWlsZGVyVGVzdFJlc3VsdHMpCisgICAgICAgIHRlc3RDb3VudCsrOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYnVpbGRDb3VudDsgaSsrKSB7CisgICAgICAgIHJlc3VsdHNCeUJ1aWxkW2ldID0g
bmV3IEFycmF5KHRlc3RDb3VudCk7CisgICAgICAgIHJlc3VsdHNCeUJ1aWxkW2ldW3Rlc3RDb3Vu
dCAtIDFdID0gdW5kZWZpbmVkOworICAgICAgICBmbGFreURlbHRhc0J5QnVpbGRbaV0gPSB7fTsK
KyAgICB9CisKKyAgICAvLyBVc2luZyBpbmRpY2VzIGluc3RlYWQgb2YgdGhlIGZ1bGwgdGVzdCBu
YW1lcyBmb3IgZWFjaCBidWlsZCBzYXZlcyB1cworICAgIC8vIH4xNTAwbXMKKyAgICB2YXIgdGVz
dEluZGV4ID0gMDsKKyAgICB2YXIgdGVzdE5hbWVzID0gbmV3IEFycmF5KHRlc3RDb3VudCk7Cisg
ICAgdmFyIGZsYWt5VGVzdHMgPSBuZXcgQXJyYXkodGVzdENvdW50KTsKKworICAgIC8vIERlY29t
cHJlc3MgYW5kICJpbnZlcnQiIHRlc3QgcmVzdWx0cyAoYnkgYnVpbGQgaW5zdGVhZCBvZiBieSB0
ZXN0KSBhbmQKKyAgICAvLyBkZXRlcm1pbmUgd2hpY2ggYXJlIGZsYWt5LgorICAgIGZvciAodmFy
IHRlc3ROYW1lIGluIGJ1aWxkZXJUZXN0UmVzdWx0cykgeworICAgICAgICB2YXIgb25lQnVpbGRG
YWlsdXJlQ291bnQgPSAwOworCisgICAgICAgIHRlc3ROYW1lc1t0ZXN0SW5kZXhdID0gdGVzdE5h
bWU7CisgICAgICAgIHZhciB0ZXN0UmVzdWx0cyA9IGJ1aWxkZXJUZXN0UmVzdWx0c1t0ZXN0TmFt
ZV0ucmVzdWx0czsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIHJsZVJlc3VsdCwgY3VycmVudEJ1
aWxkSW5kZXggPSAwOyAocmxlUmVzdWx0ID0gdGVzdFJlc3VsdHNbaV0pICYmIGN1cnJlbnRCdWls
ZEluZGV4IDwgYnVpbGRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgY291bnQgPSBybGVS
ZXN1bHRbUkxFLkxFTkdUSF07CisgICAgICAgICAgICB2YXIgdmFsdWUgPSBybGVSZXN1bHRbUkxF
LlZBTFVFXTsKKworICAgICAgICAgICAgaWYgKGNvdW50ID09IDEgJiYgdmFsdWUgaW4gRkFJTFVS
RV9FWFBFQ1RBVElPTlNfKQorICAgICAgICAgICAgICAgIG9uZUJ1aWxkRmFpbHVyZUNvdW50Kys7
CisKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY291bnQ7IGorKykgeworICAgICAg
ICAgICAgICAgIHJlc3VsdHNCeUJ1aWxkW2N1cnJlbnRCdWlsZEluZGV4KytdW3Rlc3RJbmRleF0g
PSB2YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJ1aWxkSW5kZXggPT0gYnVpbGRD
b3VudCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAob25lQnVpbGRGYWlsdXJlQ291bnQgPiAyKQorICAgICAgICAgICAg
Zmxha3lUZXN0c1t0ZXN0SW5kZXhdID0gdHJ1ZTsKKworICAgICAgICB0ZXN0SW5kZXgrKzsKKyAg
ICB9CisKKyAgICAvLyBOb3cgdGhhdCB3ZSBrbm93IHdoaWNoIHRlc3RzIGFyZSBmbGFreSwgY291
bnQgdGhlIHRlc3QgcmVzdWx0cyB0aGF0IGFyZQorICAgIC8vIGZyb20gZmxha3kgdGVzdHMgZm9y
IGVhY2ggYnVpbGQuCisgICAgdGVzdEluZGV4ID0gMDsKKyAgICBmb3IgKHZhciB0ZXN0TmFtZSBp
biBidWlsZGVyVGVzdFJlc3VsdHMpIHsKKyAgICAgICAgaWYgKCFmbGFreVRlc3RzW3Rlc3RJbmRl
eCsrXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHZhciB0ZXN0UmVzdWx0cyA9
IGJ1aWxkZXJUZXN0UmVzdWx0c1t0ZXN0TmFtZV0ucmVzdWx0czsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDAsIHJsZVJlc3VsdCwgY3VycmVudEJ1aWxkSW5kZXggPSAwOyAocmxlUmVzdWx0ID0gdGVz
dFJlc3VsdHNbaV0pICYmIGN1cnJlbnRCdWlsZEluZGV4IDwgYnVpbGRDb3VudDsgaSsrKSB7Cisg
ICAgICAgICAgICB2YXIgY291bnQgPSBybGVSZXN1bHRbUkxFLkxFTkdUSF07CisgICAgICAgICAg
ICB2YXIgdmFsdWUgPSBybGVSZXN1bHRbUkxFLlZBTFVFXTsKKworICAgICAgICAgICAgZm9yICh2
YXIgaiA9IDA7IGogPCBjb3VudDsgaisrKSB7CisgICAgICAgICAgICAgICAgdmFyIGJ1aWxkVGVz
dFJlc3VsdHMgPSBmbGFreURlbHRhc0J5QnVpbGRbY3VycmVudEJ1aWxkSW5kZXgrK107CisgICAg
ICAgICAgICAgICAgZnVuY3Rpb24gYWRkRmxha3lEZWx0YShrZXkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gYnVpbGRUZXN0UmVzdWx0cykpCisg
ICAgICAgICAgICAgICAgICAgICAgICBidWlsZFRlc3RSZXN1bHRzW2tleV0gPSAwOworICAgICAg
ICAgICAgICAgICAgICBidWlsZFRlc3RSZXN1bHRzW2tleV0rKzsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYWRkRmxha3lEZWx0YSh2YWx1ZSk7CisgICAgICAgICAgICAgICAg
aWYgKHZhbHVlICE9ICdQJyAmJiB2YWx1ZSAhPSAnTicpCisgICAgICAgICAgICAgICAgICAgIGFk
ZEZsYWt5RGVsdGEoJ3RvdGFsJyk7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCdWlsZElu
ZGV4ID09IGJ1aWxkQ291bnQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgdGVzdE5hbWVz
OiB0ZXN0TmFtZXMsCisgICAgICAgIHJlc3VsdHNCeUJ1aWxkOiByZXN1bHRzQnlCdWlsZCwKKyAg
ICAgICAgZmxha3lUZXN0czogZmxha3lUZXN0cywKKyAgICAgICAgZmxha3lEZWx0YXNCeUJ1aWxk
OiBmbGFreURlbHRhc0J5QnVpbGQKKyAgICB9OworfQorCisKK2FwcGVuZEpTT05TY3JpcHRFbGVt
ZW50cygpOworCitkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBmdW5jdGlv
bihlKSB7CisgICAgLy8gQ2xlYXIgdGhlIG9wZW4gcG9wdXAsIHVubGVzcyB0aGUgY2xpY2sgd2Fz
IGluc2lkZSB0aGUgcG9wdXAuCisgICAgdmFyIHBvcHVwID0gJCgncG9wdXAnKTsKKyAgICBpZiAo
cG9wdXAgJiYgZS50YXJnZXQgIT0gcG9wdXAgJiYgIShwb3B1cC5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbihlLnRhcmdldCkgJiAxNikpCisgICAgICAgIGhpZGVQb3B1cCgpOworfSwgZmFsc2UpOwor
Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkgeworICAgIC8vIFRo
aXMgZG9lc24ndCBzZWVtIHRvdGFsbHkgYWNjdXJhdGUgYXMgdGhlcmUgaXMgYSByYWNlIGJldHdl
ZW4KKyAgICAvLyBvbmxvYWQgZmlyaW5nIGFuZCB0aGUgbGFzdCBzY3JpcHQgdGFnIGJlaW5nIGV4
ZWN1dGVkLgorICAgIGxvZ1RpbWUoJ1RpbWUgdG8gbG9hZCBKUycsIGdfcGFnZUxvYWRTdGFydFRp
bWUpOworfSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIv
c3RhdGljLWRhc2hib2FyZHMvZHlncmFwaC1jb21iaW5lZC5qcyBiL1Rvb2xzL1Rlc3RzRGFzaGJv
YXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2R5Z3JhcGgtY29tYmluZWQuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNmE4ODA1OWU0MmExNjAwZmZkMDVjZWU5Y2ExZTVjMDZhYTY0ZjI3MAotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2R5Z3Jh
cGgtY29tYmluZWQuanMKQEAgLTAsMCArMSBAQAorRHlncmFwaExheW91dD1mdW5jdGlvbihiLGEp
e3RoaXMuZHlncmFwaF89Yjt0aGlzLm9wdGlvbnM9e307RHlncmFwaC51cGRhdGUodGhpcy5vcHRp
b25zLGE/YTp7fSk7dGhpcy5kYXRhc2V0cz1uZXcgQXJyYXkoKTt0aGlzLmFubm90YXRpb25zPW5l
dyBBcnJheSgpfTtEeWdyYXBoTGF5b3V0LnByb3RvdHlwZS5hdHRyXz1mdW5jdGlvbihhKXtyZXR1
cm4gdGhpcy5keWdyYXBoXy5hdHRyXyhhKX07RHlncmFwaExheW91dC5wcm90b3R5cGUuYWRkRGF0
YXNldD1mdW5jdGlvbihhLGIpe3RoaXMuZGF0YXNldHNbYV09Yn07RHlncmFwaExheW91dC5wcm90
b3R5cGUuc2V0QW5ub3RhdGlvbnM9ZnVuY3Rpb24oZCl7dmFyIGU9dGhpcy5hdHRyXygieFZhbHVl
UGFyc2VyIik7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe3ZhciBiPXt9O2lmKCFkW2NdLnh2
YWwmJiFkW2NdLngpe3RoaXMuZHlncmFwaF8uZXJyb3IoIkFubm90YXRpb25zIG11c3QgaGF2ZSBh
biAneCcgcHJvcGVydHkiKTtyZXR1cm59aWYoZFtjXS5pY29uJiYhKGRbY10uaGFzT3duUHJvcGVy
dHkoIndpZHRoIikmJmRbY10uaGFzT3duUHJvcGVydHkoImhlaWdodCIpKSl7dGhpcy5keWdyYXBo
Xy5lcnJvcigiTXVzdCBzZXQgd2lkdGggYW5kIGhlaWdodCB3aGVuIHNldHRpbmcgYW5ub3RhdGlv
bi5pY29uIHByb3BlcnR5Iik7cmV0dXJufUR5Z3JhcGgudXBkYXRlKGIsZFtjXSk7aWYoIWIueHZh
bCl7Yi54dmFsPWUoYi54KX10aGlzLmFubm90YXRpb25zLnB1c2goYil9fTtEeWdyYXBoTGF5b3V0
LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbigpe3RoaXMuX2V2YWx1YXRlTGltaXRzKCk7dGhp
cy5fZXZhbHVhdGVMaW5lQ2hhcnRzKCk7dGhpcy5fZXZhbHVhdGVMaW5lVGlja3MoKTt0aGlzLl9l
dmFsdWF0ZUFubm90YXRpb25zKCl9O0R5Z3JhcGhMYXlvdXQucHJvdG90eXBlLl9ldmFsdWF0ZUxp
bWl0cz1mdW5jdGlvbigpe3RoaXMubWlueHZhbD10aGlzLm1heHh2YWw9bnVsbDtpZih0aGlzLm9w
dGlvbnMuZGF0ZVdpbmRvdyl7dGhpcy5taW54dmFsPXRoaXMub3B0aW9ucy5kYXRlV2luZG93WzBd
O3RoaXMubWF4eHZhbD10aGlzLm9wdGlvbnMuZGF0ZVdpbmRvd1sxXX1lbHNle2Zvcih2YXIgYyBp
biB0aGlzLmRhdGFzZXRzKXtpZighdGhpcy5kYXRhc2V0cy5oYXNPd25Qcm9wZXJ0eShjKSl7Y29u
dGludWV9dmFyIGQ9dGhpcy5kYXRhc2V0c1tjXTt2YXIgYj1kWzBdWzBdO2lmKCF0aGlzLm1pbnh2
YWx8fGI8dGhpcy5taW54dmFsKXt0aGlzLm1pbnh2YWw9Yn12YXIgYT1kW2QubGVuZ3RoLTFdWzBd
O2lmKCF0aGlzLm1heHh2YWx8fGE+dGhpcy5tYXh4dmFsKXt0aGlzLm1heHh2YWw9YX19fXRoaXMu
eHJhbmdlPXRoaXMubWF4eHZhbC10aGlzLm1pbnh2YWw7dGhpcy54c2NhbGU9KHRoaXMueHJhbmdl
IT0wPzEvdGhpcy54cmFuZ2U6MSk7dGhpcy5taW55dmFsPXRoaXMub3B0aW9ucy55QXhpc1swXTt0
aGlzLm1heHl2YWw9dGhpcy5vcHRpb25zLnlBeGlzWzFdO3RoaXMueXJhbmdlPXRoaXMubWF4eXZh
bC10aGlzLm1pbnl2YWw7dGhpcy55c2NhbGU9KHRoaXMueXJhbmdlIT0wPzEvdGhpcy55cmFuZ2U6
MSl9O0R5Z3JhcGhMYXlvdXQucHJvdG90eXBlLl9ldmFsdWF0ZUxpbmVDaGFydHM9ZnVuY3Rpb24o
KXt0aGlzLnBvaW50cz1uZXcgQXJyYXkoKTtmb3IodmFyIGUgaW4gdGhpcy5kYXRhc2V0cyl7aWYo
IXRoaXMuZGF0YXNldHMuaGFzT3duUHJvcGVydHkoZSkpe2NvbnRpbnVlfXZhciBkPXRoaXMuZGF0
YXNldHNbZV07Zm9yKHZhciBiPTA7YjxkLmxlbmd0aDtiKyspe3ZhciBjPWRbYl07dmFyIGE9e3g6
KChwYXJzZUZsb2F0KGNbMF0pLXRoaXMubWlueHZhbCkqdGhpcy54c2NhbGUpLHk6MS0oKHBhcnNl
RmxvYXQoY1sxXSktdGhpcy5taW55dmFsKSp0aGlzLnlzY2FsZSkseHZhbDpwYXJzZUZsb2F0KGNb
MF0pLHl2YWw6cGFyc2VGbG9hdChjWzFdKSxuYW1lOmV9O2lmKGEueTw9MCl7YS55PTB9aWYoYS55
Pj0xKXthLnk9MX10aGlzLnBvaW50cy5wdXNoKGEpfX19O0R5Z3JhcGhMYXlvdXQucHJvdG90eXBl
Ll9ldmFsdWF0ZUxpbmVUaWNrcz1mdW5jdGlvbigpe3RoaXMueHRpY2tzPW5ldyBBcnJheSgpO2Zv
cih2YXIgYz0wO2M8dGhpcy5vcHRpb25zLnhUaWNrcy5sZW5ndGg7YysrKXt2YXIgYj10aGlzLm9w
dGlvbnMueFRpY2tzW2NdO3ZhciBhPWIubGFiZWw7dmFyIGQ9dGhpcy54c2NhbGUqKGIudi10aGlz
Lm1pbnh2YWwpO2lmKChkPj0wKSYmKGQ8PTEpKXt0aGlzLnh0aWNrcy5wdXNoKFtkLGFdKX19dGhp
cy55dGlja3M9bmV3IEFycmF5KCk7Zm9yKHZhciBjPTA7Yzx0aGlzLm9wdGlvbnMueVRpY2tzLmxl
bmd0aDtjKyspe3ZhciBiPXRoaXMub3B0aW9ucy55VGlja3NbY107dmFyIGE9Yi5sYWJlbDt2YXIg
ZD0xLSh0aGlzLnlzY2FsZSooYi52LXRoaXMubWlueXZhbCkpO2lmKChkPj0wKSYmKGQ8PTEpKXt0
aGlzLnl0aWNrcy5wdXNoKFtkLGFdKX19fTtEeWdyYXBoTGF5b3V0LnByb3RvdHlwZS5ldmFsdWF0
ZVdpdGhFcnJvcj1mdW5jdGlvbigpe3RoaXMuZXZhbHVhdGUoKTtpZighdGhpcy5vcHRpb25zLmVy
cm9yQmFycyl7cmV0dXJufXZhciBkPTA7Zm9yKHZhciBnIGluIHRoaXMuZGF0YXNldHMpe2lmKCF0
aGlzLmRhdGFzZXRzLmhhc093blByb3BlcnR5KGcpKXtjb250aW51ZX12YXIgYz0wO3ZhciBmPXRo
aXMuZGF0YXNldHNbZ107Zm9yKHZhciBjPTA7YzxmLmxlbmd0aDtjKyssZCsrKXt2YXIgZT1mW2Nd
O3ZhciBhPXBhcnNlRmxvYXQoZVswXSk7dmFyIGI9cGFyc2VGbG9hdChlWzFdKTtpZihhPT10aGlz
LnBvaW50c1tkXS54dmFsJiZiPT10aGlzLnBvaW50c1tkXS55dmFsKXt0aGlzLnBvaW50c1tkXS5l
cnJvck1pbnVzPXBhcnNlRmxvYXQoZVsyXSk7dGhpcy5wb2ludHNbZF0uZXJyb3JQbHVzPXBhcnNl
RmxvYXQoZVszXSl9fX19O0R5Z3JhcGhMYXlvdXQucHJvdG90eXBlLl9ldmFsdWF0ZUFubm90YXRp
b25zPWZ1bmN0aW9uKCl7dmFyIGY9e307Zm9yKHZhciBkPTA7ZDx0aGlzLmFubm90YXRpb25zLmxl
bmd0aDtkKyspe3ZhciBiPXRoaXMuYW5ub3RhdGlvbnNbZF07ZltiLnh2YWwrIiwiK2Iuc2VyaWVz
XT1ifXRoaXMuYW5ub3RhdGVkX3BvaW50cz1bXTtmb3IodmFyIGQ9MDtkPHRoaXMucG9pbnRzLmxl
bmd0aDtkKyspe3ZhciBlPXRoaXMucG9pbnRzW2RdO3ZhciBjPWUueHZhbCsiLCIrZS5uYW1lO2lm
KGMgaW4gZil7ZS5hbm5vdGF0aW9uPWZbY107dGhpcy5hbm5vdGF0ZWRfcG9pbnRzLnB1c2goZSl9
fX07RHlncmFwaExheW91dC5wcm90b3R5cGUucmVtb3ZlQWxsRGF0YXNldHM9ZnVuY3Rpb24oKXtk
ZWxldGUgdGhpcy5kYXRhc2V0czt0aGlzLmRhdGFzZXRzPW5ldyBBcnJheSgpfTtEeWdyYXBoTGF5
b3V0LnByb3RvdHlwZS51cGRhdGVPcHRpb25zPWZ1bmN0aW9uKGEpe0R5Z3JhcGgudXBkYXRlKHRo
aXMub3B0aW9ucyxhP2E6e30pfTtEeWdyYXBoQ2FudmFzUmVuZGVyZXI9ZnVuY3Rpb24oYyxiLGQs
YSl7dGhpcy5keWdyYXBoXz1jO3RoaXMub3B0aW9ucz17c3Ryb2tlV2lkdGg6MC41LGRyYXdYQXhp
czp0cnVlLGRyYXdZQXhpczp0cnVlLGF4aXNMaW5lQ29sb3I6ImJsYWNrIixheGlzTGluZVdpZHRo
OjAuNSxheGlzVGlja1NpemU6MyxheGlzTGFiZWxDb2xvcjoiYmxhY2siLGF4aXNMYWJlbEZvbnQ6
IkFyaWFsIixheGlzTGFiZWxGb250U2l6ZTo5LGF4aXNMYWJlbFdpZHRoOjUwLGRyYXdZR3JpZDp0
cnVlLGRyYXdYR3JpZDp0cnVlLGdyaWRMaW5lQ29sb3I6InJnYigxMjgsMTI4LDEyOCkiLGZpbGxB
bHBoYTowLjE1LHVuZGVybGF5Q2FsbGJhY2s6bnVsbH07RHlncmFwaC51cGRhdGUodGhpcy5vcHRp
b25zLGEpO3RoaXMubGF5b3V0PWQ7dGhpcy5lbGVtZW50PWI7dGhpcy5jb250YWluZXI9dGhpcy5l
bGVtZW50LnBhcmVudE5vZGU7dGhpcy5oZWlnaHQ9dGhpcy5lbGVtZW50LmhlaWdodDt0aGlzLndp
ZHRoPXRoaXMuZWxlbWVudC53aWR0aDtpZighdGhpcy5pc0lFJiYhKER5Z3JhcGhDYW52YXNSZW5k
ZXJlci5pc1N1cHBvcnRlZCh0aGlzLmVsZW1lbnQpKSl7dGhyb3ciQ2FudmFzIGlzIG5vdCBzdXBw
b3J0ZWQuIn10aGlzLnhsYWJlbHM9bmV3IEFycmF5KCk7dGhpcy55bGFiZWxzPW5ldyBBcnJheSgp
O3RoaXMuYW5ub3RhdGlvbnM9bmV3IEFycmF5KCk7dGhpcy5hcmVhPXt4OnRoaXMub3B0aW9ucy55
QXhpc0xhYmVsV2lkdGgrMip0aGlzLm9wdGlvbnMuYXhpc1RpY2tTaXplLHk6MH07dGhpcy5hcmVh
Lnc9dGhpcy53aWR0aC10aGlzLmFyZWEueC10aGlzLm9wdGlvbnMucmlnaHRHYXA7dGhpcy5hcmVh
Lmg9dGhpcy5oZWlnaHQtdGhpcy5vcHRpb25zLmF4aXNMYWJlbEZvbnRTaXplLTIqdGhpcy5vcHRp
b25zLmF4aXNUaWNrU2l6ZTt0aGlzLmNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUi
O3RoaXMuY29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMud2lkdGgrInB4In07RHlncmFwaENhbnZh
c1JlbmRlcmVyLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2lmKHRoaXMuaXNJRSl7dHJ5e2lm
KHRoaXMuY2xlYXJEZWxheSl7dGhpcy5jbGVhckRlbGF5LmNhbmNlbCgpO3RoaXMuY2xlYXJEZWxh
eT1udWxsfXZhciBiPXRoaXMuZWxlbWVudC5nZXRDb250ZXh0KCIyZCIpfWNhdGNoKGQpe3RoaXMu
Y2xlYXJEZWxheT1Nb2NoaUtpdC5Bc3luYy53YWl0KHRoaXMuSUVEZWxheSk7dGhpcy5jbGVhckRl
bGF5LmFkZENhbGxiYWNrKGJpbmQodGhpcy5jbGVhcix0aGlzKSk7cmV0dXJufX12YXIgYj10aGlz
LmVsZW1lbnQuZ2V0Q29udGV4dCgiMmQiKTtiLmNsZWFyUmVjdCgwLDAsdGhpcy53aWR0aCx0aGlz
LmhlaWdodCk7Zm9yKHZhciBhPTA7YTx0aGlzLnhsYWJlbHMubGVuZ3RoO2ErKyl7dmFyIGM9dGhp
cy54bGFiZWxzW2FdO2MucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKX1mb3IodmFyIGE9MDthPHRo
aXMueWxhYmVscy5sZW5ndGg7YSsrKXt2YXIgYz10aGlzLnlsYWJlbHNbYV07Yy5wYXJlbnROb2Rl
LnJlbW92ZUNoaWxkKGMpfWZvcih2YXIgYT0wO2E8dGhpcy5hbm5vdGF0aW9ucy5sZW5ndGg7YSsr
KXt2YXIgYz10aGlzLmFubm90YXRpb25zW2FdO2MucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKX10
aGlzLnhsYWJlbHM9bmV3IEFycmF5KCk7dGhpcy55bGFiZWxzPW5ldyBBcnJheSgpO3RoaXMuYW5u
b3RhdGlvbnM9bmV3IEFycmF5KCl9O0R5Z3JhcGhDYW52YXNSZW5kZXJlci5pc1N1cHBvcnRlZD1m
dW5jdGlvbihnKXt2YXIgYj1udWxsO3RyeXtpZih0eXBlb2YoZyk9PSJ1bmRlZmluZWQifHxnPT1u
dWxsKXtiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpfWVsc2V7Yj1nfXZhciBjPWIu
Z2V0Q29udGV4dCgiMmQiKX1jYXRjaChkKXt2YXIgZj1uYXZpZ2F0b3IuYXBwVmVyc2lvbi5tYXRj
aCgvTVNJRSAoXGRcLlxkKS8pO3ZhciBhPShuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNl
KCkuaW5kZXhPZigib3BlcmEiKSE9LTEpO2lmKCghZil8fChmWzFdPDYpfHwoYSkpe3JldHVybiBm
YWxzZX1yZXR1cm4gdHJ1ZX1yZXR1cm4gdHJ1ZX07RHlncmFwaENhbnZhc1JlbmRlcmVyLnByb3Rv
dHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmVsZW1lbnQuZ2V0Q29udGV4dCgiMmQi
KTtpZih0aGlzLm9wdGlvbnMudW5kZXJsYXlDYWxsYmFjayl7dGhpcy5vcHRpb25zLnVuZGVybGF5
Q2FsbGJhY2soYix0aGlzLmFyZWEsdGhpcy5sYXlvdXQsdGhpcy5keWdyYXBoXyl9aWYodGhpcy5v
cHRpb25zLmRyYXdZR3JpZCl7dmFyIGQ9dGhpcy5sYXlvdXQueXRpY2tzO2Iuc2F2ZSgpO2Iuc3Ry
b2tlU3R5bGU9dGhpcy5vcHRpb25zLmdyaWRMaW5lQ29sb3I7Yi5saW5lV2lkdGg9dGhpcy5vcHRp
b25zLmF4aXNMaW5lV2lkdGg7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe3ZhciBhPXRoaXMu
YXJlYS54O3ZhciBlPXRoaXMuYXJlYS55K2RbY11bMF0qdGhpcy5hcmVhLmg7Yi5iZWdpblBhdGgo
KTtiLm1vdmVUbyhhLGUpO2IubGluZVRvKGErdGhpcy5hcmVhLncsZSk7Yi5jbG9zZVBhdGgoKTti
LnN0cm9rZSgpfX1pZih0aGlzLm9wdGlvbnMuZHJhd1hHcmlkKXt2YXIgZD10aGlzLmxheW91dC54
dGlja3M7Yi5zYXZlKCk7Yi5zdHJva2VTdHlsZT10aGlzLm9wdGlvbnMuZ3JpZExpbmVDb2xvcjti
LmxpbmVXaWR0aD10aGlzLm9wdGlvbnMuYXhpc0xpbmVXaWR0aDtmb3IodmFyIGM9MDtjPGQubGVu
Z3RoO2MrKyl7dmFyIGE9dGhpcy5hcmVhLngrZFtjXVswXSp0aGlzLmFyZWEudzt2YXIgZT10aGlz
LmFyZWEueSt0aGlzLmFyZWEuaDtiLmJlZ2luUGF0aCgpO2IubW92ZVRvKGEsZSk7Yi5saW5lVG8o
YSx0aGlzLmFyZWEueSk7Yi5jbG9zZVBhdGgoKTtiLnN0cm9rZSgpfX10aGlzLl9yZW5kZXJMaW5l
Q2hhcnQoKTt0aGlzLl9yZW5kZXJBeGlzKCk7dGhpcy5fcmVuZGVyQW5ub3RhdGlvbnMoKX07RHln
cmFwaENhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fcmVuZGVyQXhpcz1mdW5jdGlvbigpe2lmKCF0
aGlzLm9wdGlvbnMuZHJhd1hBeGlzJiYhdGhpcy5vcHRpb25zLmRyYXdZQXhpcyl7cmV0dXJufXZh
ciBiPXRoaXMuZWxlbWVudC5nZXRDb250ZXh0KCIyZCIpO3ZhciBnPXtwb3NpdGlvbjoiYWJzb2x1
dGUiLGZvbnRTaXplOnRoaXMub3B0aW9ucy5heGlzTGFiZWxGb250U2l6ZSsicHgiLHpJbmRleDox
MCxjb2xvcjp0aGlzLm9wdGlvbnMuYXhpc0xhYmVsQ29sb3Isd2lkdGg6dGhpcy5vcHRpb25zLmF4
aXNMYWJlbFdpZHRoKyJweCIsb3ZlcmZsb3c6ImhpZGRlbiJ9O3ZhciBkPWZ1bmN0aW9uKG8pe3Zh
ciBxPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Zvcih2YXIgcCBpbiBnKXtpZihnLmhh
c093blByb3BlcnR5KHApKXtxLnN0eWxlW3BdPWdbcF19fXEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUobykpO3JldHVybiBxfTtiLnNhdmUoKTtiLnN0cm9rZVN0eWxlPXRoaXMu
b3B0aW9ucy5heGlzTGluZUNvbG9yO2IubGluZVdpZHRoPXRoaXMub3B0aW9ucy5heGlzTGluZVdp
ZHRoO2lmKHRoaXMub3B0aW9ucy5kcmF3WUF4aXMpe2lmKHRoaXMubGF5b3V0Lnl0aWNrcyYmdGhp
cy5sYXlvdXQueXRpY2tzLmxlbmd0aD4wKXtmb3IodmFyIGU9MDtlPHRoaXMubGF5b3V0Lnl0aWNr
cy5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLmxheW91dC55dGlja3NbZV07aWYodHlwZW9mKGYpPT0i
ZnVuY3Rpb24iKXtyZXR1cm59dmFyIGw9dGhpcy5hcmVhLng7dmFyIGo9dGhpcy5hcmVhLnkrZlsw
XSp0aGlzLmFyZWEuaDtiLmJlZ2luUGF0aCgpO2IubW92ZVRvKGwsaik7Yi5saW5lVG8obC10aGlz
Lm9wdGlvbnMuYXhpc1RpY2tTaXplLGopO2IuY2xvc2VQYXRoKCk7Yi5zdHJva2UoKTt2YXIgaz1k
KGZbMV0pO3ZhciBoPShqLXRoaXMub3B0aW9ucy5heGlzTGFiZWxGb250U2l6ZS8yKTtpZihoPDAp
e2g9MH1pZihoK3RoaXMub3B0aW9ucy5heGlzTGFiZWxGb250U2l6ZSszPnRoaXMuaGVpZ2h0KXtr
LnN0eWxlLmJvdHRvbT0iMHB4In1lbHNle2suc3R5bGUudG9wPWgrInB4In1rLnN0eWxlLmxlZnQ9
IjBweCI7ay5zdHlsZS50ZXh0QWxpZ249InJpZ2h0IjtrLnN0eWxlLndpZHRoPXRoaXMub3B0aW9u
cy55QXhpc0xhYmVsV2lkdGgrInB4Ijt0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChrKTt0aGlz
LnlsYWJlbHMucHVzaChrKX12YXIgbT10aGlzLnlsYWJlbHNbMF07dmFyIG49dGhpcy5vcHRpb25z
LmF4aXNMYWJlbEZvbnRTaXplO3ZhciBhPXBhcnNlSW50KG0uc3R5bGUudG9wKStuO2lmKGE+dGhp
cy5oZWlnaHQtbil7bS5zdHlsZS50b3A9KHBhcnNlSW50KG0uc3R5bGUudG9wKS1uLzIpKyJweCJ9
fWIuYmVnaW5QYXRoKCk7Yi5tb3ZlVG8odGhpcy5hcmVhLngsdGhpcy5hcmVhLnkpO2IubGluZVRv
KHRoaXMuYXJlYS54LHRoaXMuYXJlYS55K3RoaXMuYXJlYS5oKTtiLmNsb3NlUGF0aCgpO2Iuc3Ry
b2tlKCl9aWYodGhpcy5vcHRpb25zLmRyYXdYQXhpcyl7aWYodGhpcy5sYXlvdXQueHRpY2tzKXtm
b3IodmFyIGU9MDtlPHRoaXMubGF5b3V0Lnh0aWNrcy5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLmxh
eW91dC54dGlja3NbZV07aWYodHlwZW9mKGRhdGFzZXQpPT0iZnVuY3Rpb24iKXtyZXR1cm59dmFy
IGw9dGhpcy5hcmVhLngrZlswXSp0aGlzLmFyZWEudzt2YXIgaj10aGlzLmFyZWEueSt0aGlzLmFy
ZWEuaDtiLmJlZ2luUGF0aCgpO2IubW92ZVRvKGwsaik7Yi5saW5lVG8obCxqK3RoaXMub3B0aW9u
cy5heGlzVGlja1NpemUpO2IuY2xvc2VQYXRoKCk7Yi5zdHJva2UoKTt2YXIgaz1kKGZbMV0pO2su
c3R5bGUudGV4dEFsaWduPSJjZW50ZXIiO2suc3R5bGUuYm90dG9tPSIwcHgiO3ZhciBjPShsLXRo
aXMub3B0aW9ucy5heGlzTGFiZWxXaWR0aC8yKTtpZihjK3RoaXMub3B0aW9ucy5heGlzTGFiZWxX
aWR0aD50aGlzLndpZHRoKXtjPXRoaXMud2lkdGgtdGhpcy5vcHRpb25zLnhBeGlzTGFiZWxXaWR0
aDtrLnN0eWxlLnRleHRBbGlnbj0icmlnaHQifWlmKGM8MCl7Yz0wO2suc3R5bGUudGV4dEFsaWdu
PSJsZWZ0In1rLnN0eWxlLmxlZnQ9YysicHgiO2suc3R5bGUud2lkdGg9dGhpcy5vcHRpb25zLnhB
eGlzTGFiZWxXaWR0aCsicHgiO3RoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGspO3RoaXMueGxh
YmVscy5wdXNoKGspfX1iLmJlZ2luUGF0aCgpO2IubW92ZVRvKHRoaXMuYXJlYS54LHRoaXMuYXJl
YS55K3RoaXMuYXJlYS5oKTtiLmxpbmVUbyh0aGlzLmFyZWEueCt0aGlzLmFyZWEudyx0aGlzLmFy
ZWEueSt0aGlzLmFyZWEuaCk7Yi5jbG9zZVBhdGgoKTtiLnN0cm9rZSgpfWIucmVzdG9yZSgpfTtE
eWdyYXBoQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLl9yZW5kZXJBbm5vdGF0aW9ucz1mdW5jdGlv
bigpe3ZhciBoPXtwb3NpdGlvbjoiYWJzb2x1dGUiLGZvbnRTaXplOnRoaXMub3B0aW9ucy5heGlz
TGFiZWxGb250U2l6ZSsicHgiLHpJbmRleDoxMCxvdmVyZmxvdzoiaGlkZGVuIn07dmFyIGo9ZnVu
Y3Rpb24ocSxyLHMsYSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBwPXMuYW5ub3RhdGlvbjtpZihw
Lmhhc093blByb3BlcnR5KHEpKXtwW3FdKHAscyxhLmR5Z3JhcGhfLHQpfWVsc2V7aWYoYS5keWdy
YXBoXy5hdHRyXyhyKSl7YS5keWdyYXBoXy5hdHRyXyhyKShwLHMsYS5keWdyYXBoXyx0KX19fX07
dmFyIG09dGhpcy5sYXlvdXQuYW5ub3RhdGVkX3BvaW50cztmb3IodmFyIGc9MDtnPG0ubGVuZ3Ro
O2crKyl7dmFyIGU9bVtnXTtpZihlLmNhbnZhc3g8dGhpcy5hcmVhLnh8fGUuY2FudmFzeD50aGlz
LmFyZWEueCt0aGlzLmFyZWEudyl7Y29udGludWV9dmFyIGs9ZS5hbm5vdGF0aW9uO3ZhciBsPTY7
aWYoay5oYXNPd25Qcm9wZXJ0eSgidGlja0hlaWdodCIpKXtsPWsudGlja0hlaWdodH12YXIgYz1k
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3IodmFyIGIgaW4gaCl7aWYoaC5oYXNPd25Q
cm9wZXJ0eShiKSl7Yy5zdHlsZVtiXT1oW2JdfX1pZighay5oYXNPd25Qcm9wZXJ0eSgiaWNvbiIp
KXtjLmNsYXNzTmFtZT0iZHlncmFwaERlZmF1bHRBbm5vdGF0aW9uIn1pZihrLmhhc093blByb3Bl
cnR5KCJjc3NDbGFzcyIpKXtjLmNsYXNzTmFtZSs9IiAiK2suY3NzQ2xhc3N9dmFyIGQ9ay5oYXNP
d25Qcm9wZXJ0eSgid2lkdGgiKT9rLndpZHRoOjE2O3ZhciBuPWsuaGFzT3duUHJvcGVydHkoImhl
aWdodCIpP2suaGVpZ2h0OjE2O2lmKGsuaGFzT3duUHJvcGVydHkoImljb24iKSl7dmFyIGY9ZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7Zi5zcmM9ay5pY29uO2Yud2lkdGg9ZDtmLmhlaWdo
dD1uO2MuYXBwZW5kQ2hpbGQoZil9ZWxzZXtpZihlLmFubm90YXRpb24uaGFzT3duUHJvcGVydHko
InNob3J0VGV4dCIpKXtjLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUuYW5u
b3RhdGlvbi5zaG9ydFRleHQpKX19Yy5zdHlsZS5sZWZ0PShlLmNhbnZhc3gtZC8yKSsicHgiO2lm
KGsuYXR0YWNoQXRCb3R0b20pe2Muc3R5bGUudG9wPSh0aGlzLmFyZWEuaC1uLWwpKyJweCJ9ZWxz
ZXtjLnN0eWxlLnRvcD0oZS5jYW52YXN5LW4tbCkrInB4In1jLnN0eWxlLndpZHRoPWQrInB4Ijtj
LnN0eWxlLmhlaWdodD1uKyJweCI7Yy50aXRsZT1lLmFubm90YXRpb24udGV4dDtjLnN0eWxlLmNv
bG9yPXRoaXMuY29sb3JzW2UubmFtZV07Yy5zdHlsZS5ib3JkZXJDb2xvcj10aGlzLmNvbG9yc1tl
Lm5hbWVdO2suZGl2PWM7RHlncmFwaC5hZGRFdmVudChjLCJjbGljayIsaigiY2xpY2tIYW5kbGVy
IiwiYW5ub3RhdGlvbkNsaWNrSGFuZGxlciIsZSx0aGlzKSk7RHlncmFwaC5hZGRFdmVudChjLCJt
b3VzZW92ZXIiLGooIm1vdXNlT3ZlckhhbmRsZXIiLCJhbm5vdGF0aW9uTW91c2VPdmVySGFuZGxl
ciIsZSx0aGlzKSk7RHlncmFwaC5hZGRFdmVudChjLCJtb3VzZW91dCIsaigibW91c2VPdXRIYW5k
bGVyIiwiYW5ub3RhdGlvbk1vdXNlT3V0SGFuZGxlciIsZSx0aGlzKSk7RHlncmFwaC5hZGRFdmVu
dChjLCJkYmxjbGljayIsaigiZGJsQ2xpY2tIYW5kbGVyIiwiYW5ub3RhdGlvbkRibENsaWNrSGFu
ZGxlciIsZSx0aGlzKSk7dGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoYyk7dGhpcy5hbm5vdGF0
aW9ucy5wdXNoKGMpO3ZhciBvPXRoaXMuZWxlbWVudC5nZXRDb250ZXh0KCIyZCIpO28uc3Ryb2tl
U3R5bGU9dGhpcy5jb2xvcnNbZS5uYW1lXTtvLmJlZ2luUGF0aCgpO2lmKCFrLmF0dGFjaEF0Qm90
dG9tKXtvLm1vdmVUbyhlLmNhbnZhc3gsZS5jYW52YXN5KTtvLmxpbmVUbyhlLmNhbnZhc3gsZS5j
YW52YXN5LTItbCl9ZWxzZXtvLm1vdmVUbyhlLmNhbnZhc3gsdGhpcy5hcmVhLmgpO28ubGluZVRv
KGUuY2FudmFzeCx0aGlzLmFyZWEuaC0yLWwpfW8uY2xvc2VQYXRoKCk7by5zdHJva2UoKX19O0R5
Z3JhcGhDYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX3JlbmRlckxpbmVDaGFydD1mdW5jdGlvbigp
e3ZhciBjPXRoaXMuZWxlbWVudC5nZXRDb250ZXh0KCIyZCIpO3ZhciBmPXRoaXMub3B0aW9ucy5j
b2xvclNjaGVtZS5sZW5ndGg7dmFyIG89dGhpcy5vcHRpb25zLmNvbG9yU2NoZW1lO3ZhciB6PXRo
aXMub3B0aW9ucy5maWxsQWxwaGE7dmFyIEU9dGhpcy5sYXlvdXQub3B0aW9ucy5lcnJvckJhcnM7
dmFyIHQ9dGhpcy5sYXlvdXQub3B0aW9ucy5maWxsR3JhcGg7dmFyIGQ9dGhpcy5sYXlvdXQub3B0
aW9ucy5zdGFja2VkR3JhcGg7dmFyIGw9dGhpcy5sYXlvdXQub3B0aW9ucy5zdGVwUGxvdDt2YXIg
Rz1bXTtmb3IodmFyIEggaW4gdGhpcy5sYXlvdXQuZGF0YXNldHMpe2lmKHRoaXMubGF5b3V0LmRh
dGFzZXRzLmhhc093blByb3BlcnR5KEgpKXtHLnB1c2goSCl9fXZhciBBPUcubGVuZ3RoO3RoaXMu
Y29sb3JzPXt9O2Zvcih2YXIgQz0wO0M8QTtDKyspe3RoaXMuY29sb3JzW0dbQ11dPW9bQyVmXX1m
b3IodmFyIEM9MDtDPHRoaXMubGF5b3V0LnBvaW50cy5sZW5ndGg7QysrKXt2YXIgdj10aGlzLmxh
eW91dC5wb2ludHNbQ107di5jYW52YXN4PXRoaXMuYXJlYS53KnYueCt0aGlzLmFyZWEueDt2LmNh
bnZhc3k9dGhpcy5hcmVhLmgqdi55K3RoaXMuYXJlYS55fXZhciBwPWZ1bmN0aW9uKGope3JldHVy
biBqJiYhaXNOYU4oail9O3ZhciB1PWM7aWYoRSl7aWYodCl7dGhpcy5keWdyYXBoXy53YXJuKCJD
YW4ndCB1c2UgZmlsbEdyYXBoIG9wdGlvbiB3aXRoIGVycm9yIGJhcnMiKX1mb3IodmFyIEM9MDtD
PEE7QysrKXt2YXIgaz1HW0NdO3ZhciB4PXRoaXMuY29sb3JzW2tdO3Uuc2F2ZSgpO3ZhciBoPU5h
Tjt2YXIgZT1OYU47dmFyIGc9Wy0xLC0xXTt2YXIgRD10aGlzLmxheW91dC55c2NhbGU7dmFyIGE9
bmV3IFJHQkNvbG9yKHgpO3ZhciBGPSJyZ2JhKCIrYS5yKyIsIithLmcrIiwiK2EuYisiLCIreisi
KSI7dS5maWxsU3R5bGU9Rjt1LmJlZ2luUGF0aCgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sYXlvdXQu
cG9pbnRzLmxlbmd0aDt5Kyspe3ZhciB2PXRoaXMubGF5b3V0LnBvaW50c1t5XTtpZih2Lm5hbWU9
PWspe2lmKCFwKHYueSkpe2g9TmFOO2NvbnRpbnVlfWlmKGwpe3ZhciByPVtlLXYuZXJyb3JQbHVz
KkQsZSt2LmVycm9yTWludXMqRF07ZT12Lnl9ZWxzZXt2YXIgcj1bdi55LXYuZXJyb3JQbHVzKkQs
di55K3YuZXJyb3JNaW51cypEXX1yWzBdPXRoaXMuYXJlYS5oKnJbMF0rdGhpcy5hcmVhLnk7clsx
XT10aGlzLmFyZWEuaCpyWzFdK3RoaXMuYXJlYS55O2lmKCFpc05hTihoKSl7aWYobCl7dS5tb3Zl
VG8oaCxyWzBdKX1lbHNle3UubW92ZVRvKGgsZ1swXSl9dS5saW5lVG8odi5jYW52YXN4LHJbMF0p
O3UubGluZVRvKHYuY2FudmFzeCxyWzFdKTtpZihsKXt1LmxpbmVUbyhoLHJbMV0pfWVsc2V7dS5s
aW5lVG8oaCxnWzFdKX11LmNsb3NlUGF0aCgpfWc9cjtoPXYuY2FudmFzeH19dS5maWxsKCl9fWVs
c2V7aWYodCl7dmFyIGI9MSt0aGlzLmxheW91dC5taW55dmFsKnRoaXMubGF5b3V0LnlzY2FsZTtp
ZihiPDApe2I9MH1lbHNle2lmKGI+MSl7Yj0xfX1iPXRoaXMuYXJlYS5oKmIrdGhpcy5hcmVhLnk7
dmFyIHE9W107Zm9yKHZhciBDPUEtMTtDPj0wO0MtLSl7dmFyIGs9R1tDXTt2YXIgeD10aGlzLmNv
bG9yc1trXTt1LnNhdmUoKTt2YXIgaD1OYU47dmFyIGc9Wy0xLC0xXTt2YXIgRD10aGlzLmxheW91
dC55c2NhbGU7dmFyIGE9bmV3IFJHQkNvbG9yKHgpO3ZhciBGPSJyZ2JhKCIrYS5yKyIsIithLmcr
IiwiK2EuYisiLCIreisiKSI7dS5maWxsU3R5bGU9Rjt1LmJlZ2luUGF0aCgpO2Zvcih2YXIgeT0w
O3k8dGhpcy5sYXlvdXQucG9pbnRzLmxlbmd0aDt5Kyspe3ZhciB2PXRoaXMubGF5b3V0LnBvaW50
c1t5XTtpZih2Lm5hbWU9PWspe2lmKCFwKHYueSkpe2g9TmFOO2NvbnRpbnVlfXZhciByO2lmKGQp
e2xhc3RZPXFbdi5jYW52YXN4XTtpZihsYXN0WT09PXVuZGVmaW5lZCl7bGFzdFk9Yn1xW3YuY2Fu
dmFzeF09di5jYW52YXN5O3I9W3YuY2FudmFzeSxsYXN0WV19ZWxzZXtyPVt2LmNhbnZhc3ksYl19
aWYoIWlzTmFOKGgpKXt1Lm1vdmVUbyhoLGdbMF0pO2lmKGwpe3UubGluZVRvKHYuY2FudmFzeCxn
WzBdKX1lbHNle3UubGluZVRvKHYuY2FudmFzeCxyWzBdKX11LmxpbmVUbyh2LmNhbnZhc3gsclsx
XSk7dS5saW5lVG8oaCxnWzFdKTt1LmNsb3NlUGF0aCgpfWc9cjtoPXYuY2FudmFzeH19dS5maWxs
KCl9fX1mb3IodmFyIEM9MDtDPEE7QysrKXt2YXIgaz1HW0NdO3ZhciB4PXRoaXMuY29sb3JzW2td
O3ZhciBzPXRoaXMuZHlncmFwaF8uYXR0cl8oInN0cm9rZVdpZHRoIixrKTtjLnNhdmUoKTt2YXIg
dj10aGlzLmxheW91dC5wb2ludHNbMF07dmFyIG09dGhpcy5keWdyYXBoXy5hdHRyXygicG9pbnRT
aXplIixrKTt2YXIgaD1udWxsLGU9bnVsbDt2YXIgdz10aGlzLmR5Z3JhcGhfLmF0dHJfKCJkcmF3
UG9pbnRzIixrKTt2YXIgQj10aGlzLmxheW91dC5wb2ludHM7Zm9yKHZhciB5PTA7eTxCLmxlbmd0
aDt5Kyspe3ZhciB2PUJbeV07aWYodi5uYW1lPT1rKXtpZighcCh2LmNhbnZhc3kpKXtoPWU9bnVs
bH1lbHNle3ZhciBuPSghaCYmKHk9PUIubGVuZ3RoLTF8fCFwKEJbeSsxXS5jYW52YXN5KSkpO2lm
KCFoKXtoPXYuY2FudmFzeDtlPXYuY2FudmFzeX1lbHNle2lmKHMpe3UuYmVnaW5QYXRoKCk7dS5z
dHJva2VTdHlsZT14O3UubGluZVdpZHRoPXM7dS5tb3ZlVG8oaCxlKTtpZihsKXt1LmxpbmVUbyh2
LmNhbnZhc3gsZSl9aD12LmNhbnZhc3g7ZT12LmNhbnZhc3k7dS5saW5lVG8oaCxlKTt1LnN0cm9r
ZSgpfX1pZih3fHxuKXt1LmJlZ2luUGF0aCgpO3UuZmlsbFN0eWxlPXg7dS5hcmModi5jYW52YXN4
LHYuY2FudmFzeSxtLDAsMipNYXRoLlBJLGZhbHNlKTt1LmZpbGwoKX19fX19Yy5yZXN0b3JlKCl9
O0R5Z3JhcGg9ZnVuY3Rpb24oYyxiLGEpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MCl7aWYoYXJndW1l
bnRzLmxlbmd0aD09NCl7dGhpcy53YXJuKCJVc2luZyBkZXByZWNhdGVkIGZvdXItYXJndW1lbnQg
ZHlncmFwaCBjb25zdHJ1Y3RvciIpO3RoaXMuX19vbGRfaW5pdF9fKGMsYixhcmd1bWVudHNbMl0s
YXJndW1lbnRzWzNdKX1lbHNle3RoaXMuX19pbml0X18oYyxiLGEpfX19O0R5Z3JhcGguTkFNRT0i
RHlncmFwaCI7RHlncmFwaC5WRVJTSU9OPSIxLjIiO0R5Z3JhcGguX19yZXByX189ZnVuY3Rpb24o
KXtyZXR1cm4iWyIrdGhpcy5OQU1FKyIgIit0aGlzLlZFUlNJT04rIl0ifTtEeWdyYXBoLnRvU3Ry
aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZXByX18oKX07RHlncmFwaC5ERUZBVUxUX1JP
TExfUEVSSU9EPTE7RHlncmFwaC5ERUZBVUxUX1dJRFRIPTQ4MDtEeWdyYXBoLkRFRkFVTFRfSEVJ
R0hUPTMyMDtEeWdyYXBoLkFYSVNfTElORV9XSURUSD0wLjM7RHlncmFwaC5ERUZBVUxUX0FUVFJT
PXtoaWdobGlnaHRDaXJjbGVTaXplOjMscGl4ZWxzUGVyWExhYmVsOjYwLHBpeGVsc1BlcllMYWJl
bDozMCxsYWJlbHNEaXZXaWR0aDoyNTAsbGFiZWxzRGl2U3R5bGVzOnt9LGxhYmVsc1NlcGFyYXRl
TGluZXM6ZmFsc2UsbGFiZWxzU2hvd1plcm9WYWx1ZXM6dHJ1ZSxsYWJlbHNLTUI6ZmFsc2UsbGFi
ZWxzS01HMjpmYWxzZSxzaG93TGFiZWxzT25IaWdobGlnaHQ6dHJ1ZSx5VmFsdWVGb3JtYXR0ZXI6
ZnVuY3Rpb24oYSl7cmV0dXJuIER5Z3JhcGgucm91bmRfKGEsMil9LHN0cm9rZVdpZHRoOjEsYXhp
c1RpY2tTaXplOjMsYXhpc0xhYmVsRm9udFNpemU6MTQseEF4aXNMYWJlbFdpZHRoOjUwLHlBeGlz
TGFiZWxXaWR0aDo1MCx4QXhpc0xhYmVsRm9ybWF0dGVyOkR5Z3JhcGguZGF0ZUF4aXNGb3JtYXR0
ZXIscmlnaHRHYXA6NSxzaG93Um9sbGVyOmZhbHNlLHhWYWx1ZUZvcm1hdHRlcjpEeWdyYXBoLmRh
dGVTdHJpbmdfLHhWYWx1ZVBhcnNlcjpEeWdyYXBoLmRhdGVQYXJzZXIseFRpY2tlcjpEeWdyYXBo
LmRhdGVUaWNrZXIsZGVsaW1pdGVyOiIsIixsb2dTY2FsZTpmYWxzZSxzaWdtYToyLGVycm9yQmFy
czpmYWxzZSxmcmFjdGlvbnM6ZmFsc2Usd2lsc29uSW50ZXJ2YWw6dHJ1ZSxjdXN0b21CYXJzOmZh
bHNlLGZpbGxHcmFwaDpmYWxzZSxmaWxsQWxwaGE6MC4xNSxjb25uZWN0U2VwYXJhdGVkUG9pbnRz
OmZhbHNlLHN0YWNrZWRHcmFwaDpmYWxzZSxoaWRlT3ZlcmxheU9uTW91c2VPdXQ6dHJ1ZSxzdGVw
UGxvdDpmYWxzZX07RHlncmFwaC5ERUJVRz0xO0R5Z3JhcGguSU5GTz0yO0R5Z3JhcGguV0FSTklO
Rz0zO0R5Z3JhcGguRVJST1I9MztEeWdyYXBoLmFkZGVkQW5ub3RhdGlvbkNTUz1mYWxzZTtEeWdy
YXBoLnByb3RvdHlwZS5fX29sZF9pbml0X189ZnVuY3Rpb24oZixkLGUsYil7aWYoZSE9bnVsbCl7
dmFyIGE9WyJEYXRlIl07Zm9yKHZhciBjPTA7YzxlLmxlbmd0aDtjKyspe2EucHVzaChlW2NdKX1E
eWdyYXBoLnVwZGF0ZShiLHtsYWJlbHM6YX0pfXRoaXMuX19pbml0X18oZixkLGIpfTtEeWdyYXBo
LnByb3RvdHlwZS5fX2luaXRfXz1mdW5jdGlvbihjLGIsYSl7aWYoYT09bnVsbCl7YT17fX10aGlz
Lm1haW5kaXZfPWM7dGhpcy5maWxlXz1iO3RoaXMucm9sbFBlcmlvZF89YS5yb2xsUGVyaW9kfHxE
eWdyYXBoLkRFRkFVTFRfUk9MTF9QRVJJT0Q7dGhpcy5wcmV2aW91c1ZlcnRpY2FsWF89LTE7dGhp
cy5mcmFjdGlvbnNfPWEuZnJhY3Rpb25zfHxmYWxzZTt0aGlzLmRhdGVXaW5kb3dfPWEuZGF0ZVdp
bmRvd3x8bnVsbDt0aGlzLnZhbHVlUmFuZ2VfPWEudmFsdWVSYW5nZXx8bnVsbDt0aGlzLndpbHNv
bkludGVydmFsXz1hLndpbHNvbkludGVydmFsfHx0cnVlO3RoaXMuaXNfaW5pdGlhbF9kcmF3Xz10
cnVlO3RoaXMuYW5ub3RhdGlvbnNfPVtdO2MuaW5uZXJIVE1MPSIiO2lmKGMuc3R5bGUud2lkdGg9
PSIiKXtjLnN0eWxlLndpZHRoPWEud2lkdGh8fER5Z3JhcGguREVGQVVMVF9XSURUSCsicHgifWlm
KGMuc3R5bGUuaGVpZ2h0PT0iIil7Yy5zdHlsZS5oZWlnaHQ9YS5oZWlnaHR8fER5Z3JhcGguREVG
QVVMVF9IRUlHSFQrInB4In10aGlzLndpZHRoXz1wYXJzZUludChjLnN0eWxlLndpZHRoLDEwKTt0
aGlzLmhlaWdodF89cGFyc2VJbnQoYy5zdHlsZS5oZWlnaHQsMTApO2lmKGMuc3R5bGUud2lkdGgu
aW5kZXhPZigiJSIpPT1jLnN0eWxlLndpZHRoLmxlbmd0aC0xKXt0aGlzLndpZHRoXz1jLm9mZnNl
dFdpZHRofWlmKGMuc3R5bGUuaGVpZ2h0LmluZGV4T2YoIiUiKT09Yy5zdHlsZS5oZWlnaHQubGVu
Z3RoLTEpe3RoaXMuaGVpZ2h0Xz1jLm9mZnNldEhlaWdodH1pZih0aGlzLndpZHRoXz09MCl7dGhp
cy5lcnJvcigiZHlncmFwaCBoYXMgemVybyB3aWR0aC4gUGxlYXNlIHNwZWNpZnkgYSB3aWR0aCBp
biBwaXhlbHMuIil9aWYodGhpcy5oZWlnaHRfPT0wKXt0aGlzLmVycm9yKCJkeWdyYXBoIGhhcyB6
ZXJvIGhlaWdodC4gUGxlYXNlIHNwZWNpZnkgYSBoZWlnaHQgaW4gcGl4ZWxzLiIpfWlmKGEuc3Rh
Y2tlZEdyYXBoKXthLmZpbGxHcmFwaD10cnVlfXRoaXMudXNlcl9hdHRyc189e307RHlncmFwaC51
cGRhdGUodGhpcy51c2VyX2F0dHJzXyxhKTt0aGlzLmF0dHJzXz17fTtEeWdyYXBoLnVwZGF0ZSh0
aGlzLmF0dHJzXyxEeWdyYXBoLkRFRkFVTFRfQVRUUlMpO3RoaXMuYm91bmRhcnlJZHNfPVtdO3Ro
aXMubGFiZWxzRnJvbUNTVl89KHRoaXMuYXR0cl8oImxhYmVscyIpPT1udWxsKTtEeWdyYXBoLmFk
ZEFubm90YXRpb25SdWxlKCk7dGhpcy5jcmVhdGVJbnRlcmZhY2VfKCk7dGhpcy5zdGFydF8oKX07
RHlncmFwaC5wcm90b3R5cGUuYXR0cl89ZnVuY3Rpb24oYixhKXtpZihhJiZ0eXBlb2YodGhpcy51
c2VyX2F0dHJzX1thXSkhPSJ1bmRlZmluZWQiJiZ0aGlzLnVzZXJfYXR0cnNfW2FdIT1udWxsJiZ0
eXBlb2YodGhpcy51c2VyX2F0dHJzX1thXVtiXSkhPSJ1bmRlZmluZWQiKXtyZXR1cm4gdGhpcy51
c2VyX2F0dHJzX1thXVtiXX1lbHNle2lmKHR5cGVvZih0aGlzLnVzZXJfYXR0cnNfW2JdKSE9InVu
ZGVmaW5lZCIpe3JldHVybiB0aGlzLnVzZXJfYXR0cnNfW2JdfWVsc2V7aWYodHlwZW9mKHRoaXMu
YXR0cnNfW2JdKSE9InVuZGVmaW5lZCIpe3JldHVybiB0aGlzLmF0dHJzX1tiXX1lbHNle3JldHVy
biBudWxsfX19fTtEeWdyYXBoLnByb3RvdHlwZS5sb2c9ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2Yo
Y29uc29sZSkhPSJ1bmRlZmluZWQiKXtzd2l0Y2goYSl7Y2FzZSBEeWdyYXBoLkRFQlVHOmNvbnNv
bGUuZGVidWcoImR5Z3JhcGhzOiAiK2IpO2JyZWFrO2Nhc2UgRHlncmFwaC5JTkZPOmNvbnNvbGUu
aW5mbygiZHlncmFwaHM6ICIrYik7YnJlYWs7Y2FzZSBEeWdyYXBoLldBUk5JTkc6Y29uc29sZS53
YXJuKCJkeWdyYXBoczogIitiKTticmVhaztjYXNlIER5Z3JhcGguRVJST1I6Y29uc29sZS5lcnJv
cigiZHlncmFwaHM6ICIrYik7YnJlYWt9fX07RHlncmFwaC5wcm90b3R5cGUuaW5mbz1mdW5jdGlv
bihhKXt0aGlzLmxvZyhEeWdyYXBoLklORk8sYSl9O0R5Z3JhcGgucHJvdG90eXBlLndhcm49ZnVu
Y3Rpb24oYSl7dGhpcy5sb2coRHlncmFwaC5XQVJOSU5HLGEpfTtEeWdyYXBoLnByb3RvdHlwZS5l
cnJvcj1mdW5jdGlvbihhKXt0aGlzLmxvZyhEeWdyYXBoLkVSUk9SLGEpfTtEeWdyYXBoLnByb3Rv
dHlwZS5yb2xsUGVyaW9kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9sbFBlcmlvZF99O0R5Z3Jh
cGgucHJvdG90eXBlLnhBeGlzUmFuZ2U9ZnVuY3Rpb24oKXtpZih0aGlzLmRhdGVXaW5kb3dfKXty
ZXR1cm4gdGhpcy5kYXRlV2luZG93X312YXIgYj10aGlzLnJhd0RhdGFfWzBdWzBdO3ZhciBhPXRo
aXMucmF3RGF0YV9bdGhpcy5yYXdEYXRhXy5sZW5ndGgtMV1bMF07cmV0dXJuW2IsYV19O0R5Z3Jh
cGgucHJvdG90eXBlLnlBeGlzUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5ZWRZ
UmFuZ2VffTtEeWdyYXBoLnByb3RvdHlwZS50b0RvbUNvb3Jkcz1mdW5jdGlvbihiLGYpe3ZhciBj
PVtudWxsLG51bGxdO3ZhciBkPXRoaXMucGxvdHRlcl8uYXJlYTtpZihiIT09bnVsbCl7dmFyIGE9
dGhpcy54QXhpc1JhbmdlKCk7Y1swXT1kLngrKGItYVswXSkvKGFbMV0tYVswXSkqZC53fWlmKGYh
PT1udWxsKXt2YXIgZT10aGlzLnlBeGlzUmFuZ2UoKTtjWzFdPWQueSsoZVsxXS1mKS8oZVsxXS1l
WzBdKSpkLmh9cmV0dXJuIGN9O0R5Z3JhcGgucHJvdG90eXBlLnRvRGF0YUNvb3Jkcz1mdW5jdGlv
bihiLGYpe3ZhciBjPVtudWxsLG51bGxdO3ZhciBkPXRoaXMucGxvdHRlcl8uYXJlYTtpZihiIT09
bnVsbCl7dmFyIGE9dGhpcy54QXhpc1JhbmdlKCk7Y1swXT1hWzBdKyhiLWQueCkvZC53KihhWzFd
LWFbMF0pfWlmKGYhPT1udWxsKXt2YXIgZT10aGlzLnlBeGlzUmFuZ2UoKTtjWzFdPWVbMF0rKGQu
aC1mKS9kLmgqKGVbMV0tZVswXSl9cmV0dXJuIGN9O0R5Z3JhcGgucHJvdG90eXBlLm51bUNvbHVt
bnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYXdEYXRhX1swXS5sZW5ndGh9O0R5Z3JhcGgucHJv
dG90eXBlLm51bVJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYXdEYXRhXy5sZW5ndGh9O0R5
Z3JhcGgucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKGIsYSl7aWYoYjwwfHxiPnRoaXMucmF3
RGF0YV8ubGVuZ3RoKXtyZXR1cm4gbnVsbH1pZihhPDB8fGE+dGhpcy5yYXdEYXRhX1tiXS5sZW5n
dGgpe3JldHVybiBudWxsfXJldHVybiB0aGlzLnJhd0RhdGFfW2JdW2FdfTtEeWdyYXBoLmFkZEV2
ZW50PWZ1bmN0aW9uKGMsYSxiKXt2YXIgZD1mdW5jdGlvbihmKXtpZighZil7dmFyIGY9d2luZG93
LmV2ZW50fWIoZil9O2lmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtjLmFkZEV2ZW50TGlzdGVu
ZXIoYSxkLGZhbHNlKX1lbHNle2MuYXR0YWNoRXZlbnQoIm9uIithLGQpfX07RHlncmFwaC5jbGlw
Q2FudmFzXz1mdW5jdGlvbihiLGMpe3ZhciBhPWIuZ2V0Q29udGV4dCgiMmQiKTthLmJlZ2luUGF0
aCgpO2EucmVjdChjLmxlZnQsYy50b3AsYy53aWR0aCxjLmhlaWdodCk7YS5jbGlwKCl9O0R5Z3Jh
cGgucHJvdG90eXBlLmNyZWF0ZUludGVyZmFjZV89ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm1haW5k
aXZfO3RoaXMuZ3JhcGhEaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5ncmFw
aERpdi5zdHlsZS53aWR0aD10aGlzLndpZHRoXysicHgiO3RoaXMuZ3JhcGhEaXYuc3R5bGUuaGVp
Z2h0PXRoaXMuaGVpZ2h0XysicHgiO2EuYXBwZW5kQ2hpbGQodGhpcy5ncmFwaERpdik7dmFyIGM9
e3RvcDowLGxlZnQ6dGhpcy5hdHRyXygieUF4aXNMYWJlbFdpZHRoIikrMip0aGlzLmF0dHJfKCJh
eGlzVGlja1NpemUiKX07Yy53aWR0aD10aGlzLndpZHRoXy1jLmxlZnQtdGhpcy5hdHRyXygicmln
aHRHYXAiKTtjLmhlaWdodD10aGlzLmhlaWdodF8tdGhpcy5hdHRyXygiYXhpc0xhYmVsRm9udFNp
emUiKS0yKnRoaXMuYXR0cl8oImF4aXNUaWNrU2l6ZSIpO3RoaXMuY2xpcHBpbmdBcmVhXz1jO3Ro
aXMuY2FudmFzXz1EeWdyYXBoLmNyZWF0ZUNhbnZhcygpO3RoaXMuY2FudmFzXy5zdHlsZS5wb3Np
dGlvbj0iYWJzb2x1dGUiO3RoaXMuY2FudmFzXy53aWR0aD10aGlzLndpZHRoXzt0aGlzLmNhbnZh
c18uaGVpZ2h0PXRoaXMuaGVpZ2h0Xzt0aGlzLmNhbnZhc18uc3R5bGUud2lkdGg9dGhpcy53aWR0
aF8rInB4Ijt0aGlzLmNhbnZhc18uc3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0XysicHgiO3RoaXMu
aGlkZGVuXz10aGlzLmNyZWF0ZVBsb3RLaXRDYW52YXNfKHRoaXMuY2FudmFzXyk7dGhpcy5ncmFw
aERpdi5hcHBlbmRDaGlsZCh0aGlzLmhpZGRlbl8pO3RoaXMuZ3JhcGhEaXYuYXBwZW5kQ2hpbGQo
dGhpcy5jYW52YXNfKTt0aGlzLm1vdXNlRXZlbnRFbGVtZW50Xz10aGlzLmNhbnZhc187RHlncmFw
aC5jbGlwQ2FudmFzXyh0aGlzLmhpZGRlbl8sdGhpcy5jbGlwcGluZ0FyZWFfKTtEeWdyYXBoLmNs
aXBDYW52YXNfKHRoaXMuY2FudmFzXyx0aGlzLmNsaXBwaW5nQXJlYV8pO3ZhciBiPXRoaXM7RHln
cmFwaC5hZGRFdmVudCh0aGlzLm1vdXNlRXZlbnRFbGVtZW50XywibW91c2Vtb3ZlIixmdW5jdGlv
bihkKXtiLm1vdXNlTW92ZV8oZCl9KTtEeWdyYXBoLmFkZEV2ZW50KHRoaXMubW91c2VFdmVudEVs
ZW1lbnRfLCJtb3VzZW91dCIsZnVuY3Rpb24oZCl7Yi5tb3VzZU91dF8oZCl9KTt0aGlzLmxheW91
dE9wdGlvbnNfPXt4T3JpZ2luSXNaZXJvOmZhbHNlfTtEeWdyYXBoLnVwZGF0ZSh0aGlzLmxheW91
dE9wdGlvbnNfLHRoaXMuYXR0cnNfKTtEeWdyYXBoLnVwZGF0ZSh0aGlzLmxheW91dE9wdGlvbnNf
LHRoaXMudXNlcl9hdHRyc18pO0R5Z3JhcGgudXBkYXRlKHRoaXMubGF5b3V0T3B0aW9uc18se2Vy
cm9yQmFyczoodGhpcy5hdHRyXygiZXJyb3JCYXJzIil8fHRoaXMuYXR0cl8oImN1c3RvbUJhcnMi
KSl9KTt0aGlzLmxheW91dF89bmV3IER5Z3JhcGhMYXlvdXQodGhpcyx0aGlzLmxheW91dE9wdGlv
bnNfKTt0aGlzLnJlbmRlck9wdGlvbnNfPXtjb2xvclNjaGVtZTp0aGlzLmNvbG9yc18sc3Ryb2tl
Q29sb3I6bnVsbCxheGlzTGluZVdpZHRoOkR5Z3JhcGguQVhJU19MSU5FX1dJRFRIfTtEeWdyYXBo
LnVwZGF0ZSh0aGlzLnJlbmRlck9wdGlvbnNfLHRoaXMuYXR0cnNfKTtEeWdyYXBoLnVwZGF0ZSh0
aGlzLnJlbmRlck9wdGlvbnNfLHRoaXMudXNlcl9hdHRyc18pO3RoaXMucGxvdHRlcl89bmV3IER5
Z3JhcGhDYW52YXNSZW5kZXJlcih0aGlzLHRoaXMuaGlkZGVuXyx0aGlzLmxheW91dF8sdGhpcy5y
ZW5kZXJPcHRpb25zXyk7dGhpcy5jcmVhdGVTdGF0dXNNZXNzYWdlXygpO3RoaXMuY3JlYXRlUm9s
bEludGVyZmFjZV8oKTt0aGlzLmNyZWF0ZURyYWdJbnRlcmZhY2VfKCl9O0R5Z3JhcGgucHJvdG90
eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbihjKXt3aGlsZShjLmhhc0NoaWxk
Tm9kZXMoKSl7YShjLmZpcnN0Q2hpbGQpO2MucmVtb3ZlQ2hpbGQoYy5maXJzdENoaWxkKX19O2Eo
dGhpcy5tYWluZGl2Xyk7dmFyIGI9ZnVuY3Rpb24oYyl7Zm9yKHZhciBkIGluIGMpe2lmKHR5cGVv
ZihjW2RdKT09PSJvYmplY3QiKXtjW2RdPW51bGx9fX07Yih0aGlzLmxheW91dF8pO2IodGhpcy5w
bG90dGVyXyk7Yih0aGlzKX07RHlncmFwaC5wcm90b3R5cGUuY3JlYXRlUGxvdEtpdENhbnZhc189
ZnVuY3Rpb24oYSl7dmFyIGI9RHlncmFwaC5jcmVhdGVDYW52YXMoKTtiLnN0eWxlLnBvc2l0aW9u
PSJhYnNvbHV0ZSI7Yi5zdHlsZS50b3A9YS5zdHlsZS50b3A7Yi5zdHlsZS5sZWZ0PWEuc3R5bGUu
bGVmdDtiLndpZHRoPXRoaXMud2lkdGhfO2IuaGVpZ2h0PXRoaXMuaGVpZ2h0XztiLnN0eWxlLndp
ZHRoPXRoaXMud2lkdGhfKyJweCI7Yi5zdHlsZS5oZWlnaHQ9dGhpcy5oZWlnaHRfKyJweCI7cmV0
dXJuIGJ9O0R5Z3JhcGguaHN2VG9SR0I9ZnVuY3Rpb24oaCxnLGspe3ZhciBjO3ZhciBkO3ZhciBs
O2lmKGc9PT0wKXtjPWs7ZD1rO2w9a31lbHNle3ZhciBlPU1hdGguZmxvb3IoaCo2KTt2YXIgaj0o
aCo2KS1lO3ZhciBiPWsqKDEtZyk7dmFyIGE9ayooMS0oZypqKSk7dmFyIG09ayooMS0oZyooMS1q
KSkpO3N3aXRjaChlKXtjYXNlIDE6Yz1hO2Q9aztsPWI7YnJlYWs7Y2FzZSAyOmM9YjtkPWs7bD1t
O2JyZWFrO2Nhc2UgMzpjPWI7ZD1hO2w9azticmVhaztjYXNlIDQ6Yz1tO2Q9YjtsPWs7YnJlYWs7
Y2FzZSA1OmM9aztkPWI7bD1hO2JyZWFrO2Nhc2UgNjpjYXNlIDA6Yz1rO2Q9bTtsPWI7YnJlYWt9
fWM9TWF0aC5mbG9vcigyNTUqYyswLjUpO2Q9TWF0aC5mbG9vcigyNTUqZCswLjUpO2w9TWF0aC5m
bG9vcigyNTUqbCswLjUpO3JldHVybiJyZ2IoIitjKyIsIitkKyIsIitsKyIpIn07RHlncmFwaC5w
cm90b3R5cGUuc2V0Q29sb3JzXz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYXR0cl8oImxhYmVscyIp
Lmxlbmd0aC0xO3RoaXMuY29sb3JzXz1bXTt2YXIgYT10aGlzLmF0dHJfKCJjb2xvcnMiKTtpZigh
YSl7dmFyIGM9dGhpcy5hdHRyXygiY29sb3JTYXR1cmF0aW9uIil8fDE7dmFyIGI9dGhpcy5hdHRy
XygiY29sb3JWYWx1ZSIpfHwwLjU7dmFyIGo9TWF0aC5jZWlsKGUvMik7Zm9yKHZhciBkPTE7ZDw9
ZTtkKyspe2lmKCF0aGlzLnZpc2liaWxpdHkoKVtkLTFdKXtjb250aW51ZX12YXIgZz1kJTI/TWF0
aC5jZWlsKGQvMik6KGorZC8yKTt2YXIgZj0oMSpnLygxK2UpKTt0aGlzLmNvbG9yc18ucHVzaChE
eWdyYXBoLmhzdlRvUkdCKGYsYyxiKSl9fWVsc2V7Zm9yKHZhciBkPTA7ZDxlO2QrKyl7aWYoIXRo
aXMudmlzaWJpbGl0eSgpW2RdKXtjb250aW51ZX12YXIgaD1hW2QlYS5sZW5ndGhdO3RoaXMuY29s
b3JzXy5wdXNoKGgpfX10aGlzLnJlbmRlck9wdGlvbnNfLmNvbG9yU2NoZW1lPXRoaXMuY29sb3Jz
XztEeWdyYXBoLnVwZGF0ZSh0aGlzLnBsb3R0ZXJfLm9wdGlvbnMsdGhpcy5yZW5kZXJPcHRpb25z
Xyk7RHlncmFwaC51cGRhdGUodGhpcy5sYXlvdXRPcHRpb25zXyx0aGlzLnVzZXJfYXR0cnNfKTtE
eWdyYXBoLnVwZGF0ZSh0aGlzLmxheW91dE9wdGlvbnNfLHRoaXMuYXR0cnNfKX07RHlncmFwaC5w
cm90b3R5cGUuZ2V0Q29sb3JzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sb3JzX307RHlncmFw
aC5maW5kUG9zWD1mdW5jdGlvbihhKXt2YXIgYj0wO2lmKGEub2Zmc2V0UGFyZW50KXt3aGlsZSgx
KXtiKz1hLm9mZnNldExlZnQ7aWYoIWEub2Zmc2V0UGFyZW50KXticmVha31hPWEub2Zmc2V0UGFy
ZW50fX1lbHNle2lmKGEueCl7Yis9YS54fX1yZXR1cm4gYn07RHlncmFwaC5maW5kUG9zWT1mdW5j
dGlvbihiKXt2YXIgYT0wO2lmKGIub2Zmc2V0UGFyZW50KXt3aGlsZSgxKXthKz1iLm9mZnNldFRv
cDtpZighYi5vZmZzZXRQYXJlbnQpe2JyZWFrfWI9Yi5vZmZzZXRQYXJlbnR9fWVsc2V7aWYoYi55
KXthKz1iLnl9fXJldHVybiBhfTtEeWdyYXBoLnByb3RvdHlwZS5jcmVhdGVTdGF0dXNNZXNzYWdl
Xz1mdW5jdGlvbigpe3ZhciBkPXRoaXMudXNlcl9hdHRyc18ubGFiZWxzRGl2O2lmKGQmJm51bGwh
PWQmJih0eXBlb2YoZCk9PSJzdHJpbmcifHxkIGluc3RhbmNlb2YgU3RyaW5nKSl7dGhpcy51c2Vy
X2F0dHJzXy5sYWJlbHNEaXY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZCl9aWYoIXRoaXMuYXR0
cl8oImxhYmVsc0RpdiIpKXt2YXIgYT10aGlzLmF0dHJfKCJsYWJlbHNEaXZXaWR0aCIpO3ZhciBj
PXtwb3NpdGlvbjoiYWJzb2x1dGUiLGZvbnRTaXplOiIxNHB4Iix6SW5kZXg6MTAsd2lkdGg6YSsi
cHgiLHRvcDoiMHB4IixsZWZ0Oih0aGlzLndpZHRoXy1hLTIpKyJweCIsYmFja2dyb3VuZDoid2hp
dGUiLHRleHRBbGlnbjoibGVmdCIsb3ZlcmZsb3c6ImhpZGRlbiJ9O0R5Z3JhcGgudXBkYXRlKGMs
dGhpcy5hdHRyXygibGFiZWxzRGl2U3R5bGVzIikpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpO2Zvcih2YXIgYiBpbiBjKXtpZihjLmhhc093blByb3BlcnR5KGIpKXtlLnN0eWxl
W2JdPWNbYl19fXRoaXMuZ3JhcGhEaXYuYXBwZW5kQ2hpbGQoZSk7dGhpcy5hdHRyc18ubGFiZWxz
RGl2PWV9fTtEeWdyYXBoLnByb3RvdHlwZS5jcmVhdGVSb2xsSW50ZXJmYWNlXz1mdW5jdGlvbigp
e3ZhciBmPXRoaXMuYXR0cl8oInNob3dSb2xsZXIiKT8iYmxvY2siOiJub25lIjt2YXIgYj17cG9z
aXRpb246ImFic29sdXRlIix6SW5kZXg6MTAsdG9wOih0aGlzLnBsb3R0ZXJfLmFyZWEuaC0yNSkr
InB4IixsZWZ0Oih0aGlzLnBsb3R0ZXJfLmFyZWEueCsxKSsicHgiLGRpc3BsYXk6Zn07dmFyIGU9
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtlLnR5cGU9InRleHQiO2Uuc2l6ZT0iMiI7
ZS52YWx1ZT10aGlzLnJvbGxQZXJpb2RfO2Zvcih2YXIgYSBpbiBiKXtpZihiLmhhc093blByb3Bl
cnR5KGEpKXtlLnN0eWxlW2FdPWJbYV19fXZhciBkPXRoaXMuZ3JhcGhEaXY7ZC5hcHBlbmRDaGls
ZChlKTt2YXIgYz10aGlzO2Uub25jaGFuZ2U9ZnVuY3Rpb24oKXtjLmFkanVzdFJvbGwoZS52YWx1
ZSl9O3JldHVybiBlfTtEeWdyYXBoLnBhZ2VYPWZ1bmN0aW9uKGMpe2lmKGMucGFnZVgpe3JldHVy
bighYy5wYWdlWHx8Yy5wYWdlWDwwKT8wOmMucGFnZVh9ZWxzZXt2YXIgZD1kb2N1bWVudDt2YXIg
YT1kb2N1bWVudC5ib2R5O3JldHVybiBjLmNsaWVudFgrKGQuc2Nyb2xsTGVmdHx8YS5zY3JvbGxM
ZWZ0KS0oZC5jbGllbnRMZWZ0fHwwKX19O0R5Z3JhcGgucGFnZVk9ZnVuY3Rpb24oYyl7aWYoYy5w
YWdlWSl7cmV0dXJuKCFjLnBhZ2VZfHxjLnBhZ2VZPDApPzA6Yy5wYWdlWX1lbHNle3ZhciBkPWRv
Y3VtZW50O3ZhciBhPWRvY3VtZW50LmJvZHk7cmV0dXJuIGMuY2xpZW50WSsoZC5zY3JvbGxUb3B8
fGEuc2Nyb2xsVG9wKS0oZC5jbGllbnRUb3B8fDApfX07RHlncmFwaC5wcm90b3R5cGUuY3JlYXRl
RHJhZ0ludGVyZmFjZV89ZnVuY3Rpb24oKXt2YXIgbz10aGlzO3ZhciBjPWZhbHNlO3ZhciBlPWZh
bHNlO3ZhciBiPW51bGw7dmFyIGE9bnVsbDt2YXIgbj1udWxsO3ZhciBsPW51bGw7dmFyIGY9bnVs
bDt2YXIgbT1udWxsO3ZhciBrPW51bGw7dmFyIGc9MDt2YXIgZD0wO3ZhciBqPWZ1bmN0aW9uKHAp
e3JldHVybiBEeWdyYXBoLnBhZ2VYKHApLWd9O3ZhciBoPWZ1bmN0aW9uKHApe3JldHVybiBEeWdy
YXBoLnBhZ2VZKHApLWR9O0R5Z3JhcGguYWRkRXZlbnQodGhpcy5tb3VzZUV2ZW50RWxlbWVudF8s
Im1vdXNlbW92ZSIsZnVuY3Rpb24ocCl7aWYoYyl7bj1qKHApO2w9aChwKTtvLmRyYXdab29tUmVj
dF8oYixuLGYpO2Y9bn1lbHNle2lmKGUpe249aihwKTtsPWgocCk7by5kYXRlV2luZG93X1swXT1t
LShuL28ud2lkdGhfKSprO28uZGF0ZVdpbmRvd19bMV09by5kYXRlV2luZG93X1swXStrO28uZHJh
d0dyYXBoXyhvLnJhd0RhdGFfKX19fSk7RHlncmFwaC5hZGRFdmVudCh0aGlzLm1vdXNlRXZlbnRF
bGVtZW50XywibW91c2Vkb3duIixmdW5jdGlvbihwKXtnPUR5Z3JhcGguZmluZFBvc1goby5jYW52
YXNfKTtkPUR5Z3JhcGguZmluZFBvc1koby5jYW52YXNfKTtiPWoocCk7YT1oKHApO2lmKHAuYWx0
S2V5fHxwLnNoaWZ0S2V5KXtpZighby5kYXRlV2luZG93Xyl7cmV0dXJufWU9dHJ1ZTtrPW8uZGF0
ZVdpbmRvd19bMV0tby5kYXRlV2luZG93X1swXTttPShiL28ud2lkdGhfKSprK28uZGF0ZVdpbmRv
d19bMF19ZWxzZXtjPXRydWV9fSk7RHlncmFwaC5hZGRFdmVudChkb2N1bWVudCwibW91c2V1cCIs
ZnVuY3Rpb24ocCl7aWYoY3x8ZSl7Yz1mYWxzZTtiPW51bGw7YT1udWxsfWlmKGUpe2U9ZmFsc2U7
bT1udWxsO2s9bnVsbH19KTtEeWdyYXBoLmFkZEV2ZW50KHRoaXMubW91c2VFdmVudEVsZW1lbnRf
LCJtb3VzZW91dCIsZnVuY3Rpb24ocCl7aWYoYyl7bj1udWxsO2w9bnVsbH19KTtEeWdyYXBoLmFk
ZEV2ZW50KHRoaXMubW91c2VFdmVudEVsZW1lbnRfLCJtb3VzZXVwIixmdW5jdGlvbihyKXtpZihj
KXtjPWZhbHNlO249aihyKTtsPWgocik7dmFyIHU9TWF0aC5hYnMobi1iKTt2YXIgcz1NYXRoLmFi
cyhsLWEpO2lmKHU8MiYmczwyJiZvLmxhc3R4XyE9dW5kZWZpbmVkJiZvLmxhc3R4XyE9LTEpe2lm
KG8uYXR0cl8oImNsaWNrQ2FsbGJhY2siKSE9bnVsbCl7by5hdHRyXygiY2xpY2tDYWxsYmFjayIp
KHIsby5sYXN0eF8sby5zZWxQb2ludHNfKX1pZihvLmF0dHJfKCJwb2ludENsaWNrQ2FsbGJhY2si
KSl7dmFyIHg9LTE7dmFyIHk9MDtmb3IodmFyIHY9MDt2PG8uc2VsUG9pbnRzXy5sZW5ndGg7disr
KXt2YXIgdD1vLnNlbFBvaW50c19bdl07dmFyIHE9TWF0aC5wb3codC5jYW52YXN4LW4sMikrTWF0
aC5wb3codC5jYW52YXN5LWwsMik7aWYoeD09LTF8fHE8eSl7eT1xO3g9dn19dmFyIHc9by5hdHRy
XygiaGlnaGxpZ2h0Q2lyY2xlU2l6ZSIpKzI7aWYoeTw9NSo1KXtvLmF0dHJfKCJwb2ludENsaWNr
Q2FsbGJhY2siKShyLG8uc2VsUG9pbnRzX1t4XSl9fX1pZih1Pj0xMCl7by5kb1pvb21fKE1hdGgu
bWluKGIsbiksTWF0aC5tYXgoYixuKSl9ZWxzZXtvLmNhbnZhc18uZ2V0Q29udGV4dCgiMmQiKS5j
bGVhclJlY3QoMCwwLG8uY2FudmFzXy53aWR0aCxvLmNhbnZhc18uaGVpZ2h0KX1iPW51bGw7YT1u
dWxsfWlmKGUpe2U9ZmFsc2U7bT1udWxsO2s9bnVsbH19KTtEeWdyYXBoLmFkZEV2ZW50KHRoaXMu
bW91c2VFdmVudEVsZW1lbnRfLCJkYmxjbGljayIsZnVuY3Rpb24ocCl7aWYoby5kYXRlV2luZG93
Xz09bnVsbCl7cmV0dXJufW8uZGF0ZVdpbmRvd189bnVsbDtvLmRyYXdHcmFwaF8oby5yYXdEYXRh
Xyk7dmFyIHE9by5yYXdEYXRhX1swXVswXTt2YXIgcj1vLnJhd0RhdGFfW28ucmF3RGF0YV8ubGVu
Z3RoLTFdWzBdO2lmKG8uYXR0cl8oInpvb21DYWxsYmFjayIpKXtvLmF0dHJfKCJ6b29tQ2FsbGJh
Y2siKShxLHIpfX0pfTtEeWdyYXBoLnByb3RvdHlwZS5kcmF3Wm9vbVJlY3RfPWZ1bmN0aW9uKGMs
ZCxiKXt2YXIgYT10aGlzLmNhbnZhc18uZ2V0Q29udGV4dCgiMmQiKTtpZihiKXthLmNsZWFyUmVj
dChNYXRoLm1pbihjLGIpLDAsTWF0aC5hYnMoYy1iKSx0aGlzLmhlaWdodF8pfWlmKGQmJmMpe2Eu
ZmlsbFN0eWxlPSJyZ2JhKDEyOCwxMjgsMTI4LDAuMzMpIjthLmZpbGxSZWN0KE1hdGgubWluKGMs
ZCksMCxNYXRoLmFicyhkLWMpLHRoaXMuaGVpZ2h0Xyl9fTtEeWdyYXBoLnByb3RvdHlwZS5kb1pv
b21fPWZ1bmN0aW9uKGQsYSl7dmFyIGI9dGhpcy50b0RhdGFDb29yZHMoZCxudWxsKTt2YXIgYz1i
WzBdO2I9dGhpcy50b0RhdGFDb29yZHMoYSxudWxsKTt2YXIgZT1iWzBdO3RoaXMuZGF0ZVdpbmRv
d189W2MsZV07dGhpcy5kcmF3R3JhcGhfKHRoaXMucmF3RGF0YV8pO2lmKHRoaXMuYXR0cl8oInpv
b21DYWxsYmFjayIpKXt0aGlzLmF0dHJfKCJ6b29tQ2FsbGJhY2siKShjLGUpfX07RHlncmFwaC5w
cm90b3R5cGUubW91c2VNb3ZlXz1mdW5jdGlvbihiKXt2YXIgYT1EeWdyYXBoLnBhZ2VYKGIpLUR5
Z3JhcGguZmluZFBvc1godGhpcy5tb3VzZUV2ZW50RWxlbWVudF8pO3ZhciByPXRoaXMubGF5b3V0
Xy5wb2ludHM7dmFyIG09LTE7dmFyIGo9LTE7dmFyIG89MWUrMTAwO3ZhciBxPS0xO2Zvcih2YXIg
Zj0wO2Y8ci5sZW5ndGg7ZisrKXt2YXIgaD1NYXRoLmFicyhyW2ZdLmNhbnZhc3gtYSk7aWYoaD5v
KXtjb250aW51ZX1vPWg7cT1mfWlmKHE+PTApe209cltxXS54dmFsfWlmKGE+cltyLmxlbmd0aC0x
XS5jYW52YXN4KXttPXJbci5sZW5ndGgtMV0ueHZhbH10aGlzLnNlbFBvaW50c189W107dmFyIGQ9
ci5sZW5ndGg7aWYoIXRoaXMuYXR0cl8oInN0YWNrZWRHcmFwaCIpKXtmb3IodmFyIGY9MDtmPGQ7
ZisrKXtpZihyW2ZdLnh2YWw9PW0pe3RoaXMuc2VsUG9pbnRzXy5wdXNoKHJbZl0pfX19ZWxzZXt2
YXIgZz0wO2Zvcih2YXIgZj1kLTE7Zj49MDtmLS0pe2lmKHJbZl0ueHZhbD09bSl7dmFyIGM9e307
Zm9yKHZhciBlIGluIHJbZl0pe2NbZV09cltmXVtlXX1jLnl2YWwtPWc7Zys9Yy55dmFsO3RoaXMu
c2VsUG9pbnRzXy5wdXNoKGMpfX10aGlzLnNlbFBvaW50c18ucmV2ZXJzZSgpfWlmKHRoaXMuYXR0
cl8oImhpZ2hsaWdodENhbGxiYWNrIikpe3ZhciBuPXRoaXMubGFzdHhfO2lmKG4hPT1udWxsJiZt
IT1uKXt0aGlzLmF0dHJfKCJoaWdobGlnaHRDYWxsYmFjayIpKGIsbSx0aGlzLnNlbFBvaW50c18p
fX10aGlzLmxhc3R4Xz1tO3RoaXMudXBkYXRlU2VsZWN0aW9uXygpfTtEeWdyYXBoLnByb3RvdHlw
ZS51cGRhdGVTZWxlY3Rpb25fPWZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5jYW52YXNfLmdldENvbnRl
eHQoIjJkIik7aWYodGhpcy5wcmV2aW91c1ZlcnRpY2FsWF8+PTApe3ZhciBoPTA7dmFyIGo9dGhp
cy5hdHRyXygibGFiZWxzIik7Zm9yKHZhciBnPTE7ZzxqLmxlbmd0aDtnKyspe3ZhciBiPXRoaXMu
YXR0cl8oImhpZ2hsaWdodENpcmNsZVNpemUiLGpbZ10pO2lmKGI+aCl7aD1ifX12YXIgbz10aGlz
LnByZXZpb3VzVmVydGljYWxYXztxLmNsZWFyUmVjdChvLWgtMSwwLDIqaCsyLHRoaXMuaGVpZ2h0
Xyl9dmFyIHA9ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiFpc05hTihjKX07aWYodGhpcy5zZWxQb2lu
dHNfLmxlbmd0aD4wKXt2YXIgZD10aGlzLnNlbFBvaW50c19bMF0uY2FudmFzeDt2YXIgZT10aGlz
LmF0dHJfKCJ4VmFsdWVGb3JtYXR0ZXIiKSh0aGlzLmxhc3R4Xyx0aGlzKSsiOiI7dmFyIGY9dGhp
cy5hdHRyXygieVZhbHVlRm9ybWF0dGVyIik7dmFyIG09dGhpcy5jb2xvcnNfLmxlbmd0aDtpZih0
aGlzLmF0dHJfKCJzaG93TGFiZWxzT25IaWdobGlnaHQiKSl7Zm9yKHZhciBnPTA7Zzx0aGlzLnNl
bFBvaW50c18ubGVuZ3RoO2crKyl7aWYoIXRoaXMuYXR0cl8oImxhYmVsc1Nob3daZXJvVmFsdWVz
IikmJnRoaXMuc2VsUG9pbnRzX1tnXS55dmFsPT0wKXtjb250aW51ZX1pZighcCh0aGlzLnNlbFBv
aW50c19bZ10uY2FudmFzeSkpe2NvbnRpbnVlfWlmKHRoaXMuYXR0cl8oImxhYmVsc1NlcGFyYXRl
TGluZXMiKSl7ZSs9Ijxici8+In12YXIgbj10aGlzLnNlbFBvaW50c19bZ107dmFyIGw9bmV3IFJH
QkNvbG9yKHRoaXMuY29sb3JzX1tnJW1dKTt2YXIgaz1mKG4ueXZhbCk7ZSs9IiA8Yj48Zm9udCBj
b2xvcj0nIitsLnRvSGV4KCkrIic+IituLm5hbWUrIjwvZm9udD48L2I+OiIra310aGlzLmF0dHJf
KCJsYWJlbHNEaXYiKS5pbm5lckhUTUw9ZX1xLnNhdmUoKTtmb3IodmFyIGc9MDtnPHRoaXMuc2Vs
UG9pbnRzXy5sZW5ndGg7ZysrKXtpZighcCh0aGlzLnNlbFBvaW50c19bZ10uY2FudmFzeSkpe2Nv
bnRpbnVlfXZhciBhPXRoaXMuYXR0cl8oImhpZ2hsaWdodENpcmNsZVNpemUiLHRoaXMuc2VsUG9p
bnRzX1tnXS5uYW1lKTtxLmJlZ2luUGF0aCgpO3EuZmlsbFN0eWxlPXRoaXMucGxvdHRlcl8uY29s
b3JzW3RoaXMuc2VsUG9pbnRzX1tnXS5uYW1lXTtxLmFyYyhkLHRoaXMuc2VsUG9pbnRzX1tnXS5j
YW52YXN5LGEsMCwyKk1hdGguUEksZmFsc2UpO3EuZmlsbCgpfXEucmVzdG9yZSgpO3RoaXMucHJl
dmlvdXNWZXJ0aWNhbFhfPWR9fTtEeWdyYXBoLnByb3RvdHlwZS5zZXRTZWxlY3Rpb249ZnVuY3Rp
b24oYil7dGhpcy5zZWxQb2ludHNfPVtdO3ZhciBjPTA7aWYoYiE9PWZhbHNlKXtiPWItdGhpcy5i
b3VuZGFyeUlkc19bMF1bMF19aWYoYiE9PWZhbHNlJiZiPj0wKXtmb3IodmFyIGEgaW4gdGhpcy5s
YXlvdXRfLmRhdGFzZXRzKXtpZihiPHRoaXMubGF5b3V0Xy5kYXRhc2V0c1thXS5sZW5ndGgpe3Ro
aXMuc2VsUG9pbnRzXy5wdXNoKHRoaXMubGF5b3V0Xy5wb2ludHNbYytiXSl9Yys9dGhpcy5sYXlv
dXRfLmRhdGFzZXRzW2FdLmxlbmd0aH19aWYodGhpcy5zZWxQb2ludHNfLmxlbmd0aCl7dGhpcy5s
YXN0eF89dGhpcy5zZWxQb2ludHNfWzBdLnh2YWw7dGhpcy51cGRhdGVTZWxlY3Rpb25fKCl9ZWxz
ZXt0aGlzLmxhc3R4Xz0tMTt0aGlzLmNsZWFyU2VsZWN0aW9uKCl9fTtEeWdyYXBoLnByb3RvdHlw
ZS5tb3VzZU91dF89ZnVuY3Rpb24oYSl7aWYodGhpcy5hdHRyXygidW5oaWdobGlnaHRDYWxsYmFj
ayIpKXt0aGlzLmF0dHJfKCJ1bmhpZ2hsaWdodENhbGxiYWNrIikoYSl9aWYodGhpcy5hdHRyXygi
aGlkZU92ZXJsYXlPbk1vdXNlT3V0Iikpe3RoaXMuY2xlYXJTZWxlY3Rpb24oKX19O0R5Z3JhcGgu
cHJvdG90eXBlLmNsZWFyU2VsZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jYW52YXNfLmdl
dENvbnRleHQoIjJkIik7YS5jbGVhclJlY3QoMCwwLHRoaXMud2lkdGhfLHRoaXMuaGVpZ2h0Xyk7
dGhpcy5hdHRyXygibGFiZWxzRGl2IikuaW5uZXJIVE1MPSIiO3RoaXMuc2VsUG9pbnRzXz1bXTt0
aGlzLmxhc3R4Xz0tMX07RHlncmFwaC5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7
aWYoIXRoaXMuc2VsUG9pbnRzX3x8dGhpcy5zZWxQb2ludHNfLmxlbmd0aDwxKXtyZXR1cm4gLTF9
Zm9yKHZhciBhPTA7YTx0aGlzLmxheW91dF8ucG9pbnRzLmxlbmd0aDthKyspe2lmKHRoaXMubGF5
b3V0Xy5wb2ludHNbYV0ueD09dGhpcy5zZWxQb2ludHNfWzBdLngpe3JldHVybiBhK3RoaXMuYm91
bmRhcnlJZHNfWzBdWzBdfX1yZXR1cm4gLTF9O0R5Z3JhcGguemVyb3BhZD1mdW5jdGlvbihhKXtp
ZihhPDEwKXtyZXR1cm4iMCIrYX1lbHNle3JldHVybiIiK2F9fTtEeWdyYXBoLmhtc1N0cmluZ189
ZnVuY3Rpb24oYSl7dmFyIGM9RHlncmFwaC56ZXJvcGFkO3ZhciBiPW5ldyBEYXRlKGEpO2lmKGIu
Z2V0U2Vjb25kcygpKXtyZXR1cm4gYyhiLmdldEhvdXJzKCkpKyI6IitjKGIuZ2V0TWludXRlcygp
KSsiOiIrYyhiLmdldFNlY29uZHMoKSl9ZWxzZXtyZXR1cm4gYyhiLmdldEhvdXJzKCkpKyI6Iitj
KGIuZ2V0TWludXRlcygpKX19O0R5Z3JhcGguZGF0ZUF4aXNGb3JtYXR0ZXI9ZnVuY3Rpb24oYixj
KXtpZihjPj1EeWdyYXBoLk1PTlRITFkpe3JldHVybiBiLnN0cmZ0aW1lKCIlYiAleSIpfWVsc2V7
dmFyIGE9Yi5nZXRIb3VycygpKjM2MDArYi5nZXRNaW51dGVzKCkqNjArYi5nZXRTZWNvbmRzKCkr
Yi5nZXRNaWxsaXNlY29uZHMoKTtpZihhPT0wfHxjPj1EeWdyYXBoLkRBSUxZKXtyZXR1cm4gbmV3
IERhdGUoYi5nZXRUaW1lKCkrMzYwMCoxMDAwKS5zdHJmdGltZSgiJWQlYiIpfWVsc2V7cmV0dXJu
IER5Z3JhcGguaG1zU3RyaW5nXyhiLmdldFRpbWUoKSl9fX07RHlncmFwaC5kYXRlU3RyaW5nXz1m
dW5jdGlvbihiLGspe3ZhciBjPUR5Z3JhcGguemVyb3BhZDt2YXIgZz1uZXcgRGF0ZShiKTt2YXIg
aD0iIitnLmdldEZ1bGxZZWFyKCk7dmFyIGU9YyhnLmdldE1vbnRoKCkrMSk7dmFyIGo9YyhnLmdl
dERhdGUoKSk7dmFyIGY9IiI7dmFyIGE9Zy5nZXRIb3VycygpKjM2MDArZy5nZXRNaW51dGVzKCkq
NjArZy5nZXRTZWNvbmRzKCk7aWYoYSl7Zj0iICIrRHlncmFwaC5obXNTdHJpbmdfKGIpfXJldHVy
biBoKyIvIitlKyIvIitqK2Z9O0R5Z3JhcGgucm91bmRfPWZ1bmN0aW9uKGMsYil7dmFyIGE9TWF0
aC5wb3coMTAsYik7cmV0dXJuIE1hdGgucm91bmQoYyphKS9hfTtEeWdyYXBoLnByb3RvdHlwZS5s
b2FkZWRFdmVudF89ZnVuY3Rpb24oYSl7dGhpcy5yYXdEYXRhXz10aGlzLnBhcnNlQ1NWXyhhKTt0
aGlzLmRyYXdHcmFwaF8odGhpcy5yYXdEYXRhXyl9O0R5Z3JhcGgucHJvdG90eXBlLm1vbnRocz1b
IkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9j
dCIsIk5vdiIsIkRlYyJdO0R5Z3JhcGgucHJvdG90eXBlLnF1YXJ0ZXJzPVsiSmFuIiwiQXByIiwi
SnVsIiwiT2N0Il07RHlncmFwaC5wcm90b3R5cGUuYWRkWFRpY2tzXz1mdW5jdGlvbigpe3ZhciBh
LGM7aWYodGhpcy5kYXRlV2luZG93Xyl7YT10aGlzLmRhdGVXaW5kb3dfWzBdO2M9dGhpcy5kYXRl
V2luZG93X1sxXX1lbHNle2E9dGhpcy5yYXdEYXRhX1swXVswXTtjPXRoaXMucmF3RGF0YV9bdGhp
cy5yYXdEYXRhXy5sZW5ndGgtMV1bMF19dmFyIGI9dGhpcy5hdHRyXygieFRpY2tlciIpKGEsYyx0
aGlzKTt0aGlzLmxheW91dF8udXBkYXRlT3B0aW9ucyh7eFRpY2tzOmJ9KX07RHlncmFwaC5TRUNP
TkRMWT0wO0R5Z3JhcGguVFdPX1NFQ09ORExZPTE7RHlncmFwaC5GSVZFX1NFQ09ORExZPTI7RHln
cmFwaC5URU5fU0VDT05ETFk9MztEeWdyYXBoLlRISVJUWV9TRUNPTkRMWT00O0R5Z3JhcGguTUlO
VVRFTFk9NTtEeWdyYXBoLlRXT19NSU5VVEVMWT02O0R5Z3JhcGguRklWRV9NSU5VVEVMWT03O0R5
Z3JhcGguVEVOX01JTlVURUxZPTg7RHlncmFwaC5USElSVFlfTUlOVVRFTFk9OTtEeWdyYXBoLkhP
VVJMWT0xMDtEeWdyYXBoLlRXT19IT1VSTFk9MTE7RHlncmFwaC5TSVhfSE9VUkxZPTEyO0R5Z3Jh
cGguREFJTFk9MTM7RHlncmFwaC5XRUVLTFk9MTQ7RHlncmFwaC5NT05USExZPTE1O0R5Z3JhcGgu
UVVBUlRFUkxZPTE2O0R5Z3JhcGguQklBTk5VQUw9MTc7RHlncmFwaC5BTk5VQUw9MTg7RHlncmFw
aC5ERUNBREFMPTE5O0R5Z3JhcGguTlVNX0dSQU5VTEFSSVRJRVM9MjA7RHlncmFwaC5TSE9SVF9T
UEFDSU5HUz1bXTtEeWdyYXBoLlNIT1JUX1NQQUNJTkdTW0R5Z3JhcGguU0VDT05ETFldPTEwMDAq
MTtEeWdyYXBoLlNIT1JUX1NQQUNJTkdTW0R5Z3JhcGguVFdPX1NFQ09ORExZXT0xMDAwKjI7RHln
cmFwaC5TSE9SVF9TUEFDSU5HU1tEeWdyYXBoLkZJVkVfU0VDT05ETFldPTEwMDAqNTtEeWdyYXBo
LlNIT1JUX1NQQUNJTkdTW0R5Z3JhcGguVEVOX1NFQ09ORExZXT0xMDAwKjEwO0R5Z3JhcGguU0hP
UlRfU1BBQ0lOR1NbRHlncmFwaC5USElSVFlfU0VDT05ETFldPTEwMDAqMzA7RHlncmFwaC5TSE9S
VF9TUEFDSU5HU1tEeWdyYXBoLk1JTlVURUxZXT0xMDAwKjYwO0R5Z3JhcGguU0hPUlRfU1BBQ0lO
R1NbRHlncmFwaC5UV09fTUlOVVRFTFldPTEwMDAqNjAqMjtEeWdyYXBoLlNIT1JUX1NQQUNJTkdT
W0R5Z3JhcGguRklWRV9NSU5VVEVMWV09MTAwMCo2MCo1O0R5Z3JhcGguU0hPUlRfU1BBQ0lOR1Nb
RHlncmFwaC5URU5fTUlOVVRFTFldPTEwMDAqNjAqMTA7RHlncmFwaC5TSE9SVF9TUEFDSU5HU1tE
eWdyYXBoLlRISVJUWV9NSU5VVEVMWV09MTAwMCo2MCozMDtEeWdyYXBoLlNIT1JUX1NQQUNJTkdT
W0R5Z3JhcGguSE9VUkxZXT0xMDAwKjM2MDA7RHlncmFwaC5TSE9SVF9TUEFDSU5HU1tEeWdyYXBo
LlRXT19IT1VSTFldPTEwMDAqMzYwMCoyO0R5Z3JhcGguU0hPUlRfU1BBQ0lOR1NbRHlncmFwaC5T
SVhfSE9VUkxZXT0xMDAwKjM2MDAqNjtEeWdyYXBoLlNIT1JUX1NQQUNJTkdTW0R5Z3JhcGguREFJ
TFldPTEwMDAqODY0MDA7RHlncmFwaC5TSE9SVF9TUEFDSU5HU1tEeWdyYXBoLldFRUtMWV09MTAw
MCo2MDQ4MDA7RHlncmFwaC5wcm90b3R5cGUuTnVtWFRpY2tzPWZ1bmN0aW9uKGUsYixnKXtpZihn
PER5Z3JhcGguTU9OVEhMWSl7dmFyIGg9RHlncmFwaC5TSE9SVF9TUEFDSU5HU1tnXTtyZXR1cm4g
TWF0aC5mbG9vcigwLjUrMSooYi1lKS9oKX1lbHNle3ZhciBmPTE7dmFyIGQ9MTI7aWYoZz09RHln
cmFwaC5RVUFSVEVSTFkpe2Q9M31pZihnPT1EeWdyYXBoLkJJQU5OVUFMKXtkPTJ9aWYoZz09RHln
cmFwaC5BTk5VQUwpe2Q9MX1pZihnPT1EeWdyYXBoLkRFQ0FEQUwpe2Q9MTtmPTEwfXZhciBjPTM2
NS4yNTI0KjI0KjM2MDAqMTAwMDt2YXIgYT0xKihiLWUpL2M7cmV0dXJuIE1hdGguZmxvb3IoMC41
KzEqYSpkL2YpfX07RHlncmFwaC5wcm90b3R5cGUuR2V0WEF4aXM9ZnVuY3Rpb24obSxoLGEpe3Zh
ciByPXRoaXMuYXR0cl8oInhBeGlzTGFiZWxGb3JtYXR0ZXIiKTt2YXIgeT1bXTtpZihhPER5Z3Jh
cGguTU9OVEhMWSl7dmFyIGM9RHlncmFwaC5TSE9SVF9TUEFDSU5HU1thXTt2YXIgdT0iJWQlYiI7
dmFyIHY9Yy8xMDAwO3ZhciB3PW5ldyBEYXRlKG0pO2lmKHY8PTYwKXt2YXIgZj13LmdldFNlY29u
ZHMoKTt3LnNldFNlY29uZHMoZi1mJXYpfWVsc2V7dy5zZXRTZWNvbmRzKDApO3YvPTYwO2lmKHY8
PTYwKXt2YXIgZj13LmdldE1pbnV0ZXMoKTt3LnNldE1pbnV0ZXMoZi1mJXYpfWVsc2V7dy5zZXRN
aW51dGVzKDApO3YvPTYwO2lmKHY8PTI0KXt2YXIgZj13LmdldEhvdXJzKCk7dy5zZXRIb3Vycyhm
LWYldil9ZWxzZXt3LnNldEhvdXJzKDApO3YvPTI0O2lmKHY9PTcpe3cuc2V0RGF0ZSh3LmdldERh
dGUoKS13LmdldERheSgpKX19fX1tPXcuZ2V0VGltZSgpO2Zvcih2YXIgaz1tO2s8PWg7ays9Yyl7
eS5wdXNoKHt2OmssbGFiZWw6cihuZXcgRGF0ZShrKSxhKX0pfX1lbHNle3ZhciBlO3ZhciBuPTE7
aWYoYT09RHlncmFwaC5NT05USExZKXtlPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyXX1l
bHNle2lmKGE9PUR5Z3JhcGguUVVBUlRFUkxZKXtlPVswLDMsNiw5XX1lbHNle2lmKGE9PUR5Z3Jh
cGguQklBTk5VQUwpe2U9WzAsNl19ZWxzZXtpZihhPT1EeWdyYXBoLkFOTlVBTCl7ZT1bMF19ZWxz
ZXtpZihhPT1EeWdyYXBoLkRFQ0FEQUwpe2U9WzBdO249MTB9fX19fXZhciBxPW5ldyBEYXRlKG0p
LmdldEZ1bGxZZWFyKCk7dmFyIG89bmV3IERhdGUoaCkuZ2V0RnVsbFllYXIoKTt2YXIgYj1EeWdy
YXBoLnplcm9wYWQ7Zm9yKHZhciBzPXE7czw9bztzKyspe2lmKHMlbiE9MCl7Y29udGludWV9Zm9y
KHZhciBwPTA7cDxlLmxlbmd0aDtwKyspe3ZhciBsPXMrIi8iK2IoMStlW3BdKSsiLzAxIjt2YXIg
az1EYXRlLnBhcnNlKGwpO2lmKGs8bXx8az5oKXtjb250aW51ZX15LnB1c2goe3Y6ayxsYWJlbDpy
KG5ldyBEYXRlKGspLGEpfSl9fX1yZXR1cm4geX07RHlncmFwaC5kYXRlVGlja2VyPWZ1bmN0aW9u
KGEsZixkKXt2YXIgYj0tMTtmb3IodmFyIGU9MDtlPER5Z3JhcGguTlVNX0dSQU5VTEFSSVRJRVM7
ZSsrKXt2YXIgYz1kLk51bVhUaWNrcyhhLGYsZSk7aWYoZC53aWR0aF8vYz49ZC5hdHRyXygicGl4
ZWxzUGVyWExhYmVsIikpe2I9ZTticmVha319aWYoYj49MCl7cmV0dXJuIGQuR2V0WEF4aXMoYSxm
LGIpfWVsc2V7fX07RHlncmFwaC5udW1lcmljVGlja3M9ZnVuY3Rpb24odix1LGwpe2lmKGwuYXR0
cl8oImxhYmVsc0tNRzIiKSl7dmFyIGY9WzEsMiw0LDhdfWVsc2V7dmFyIGY9WzEsMiw1XX12YXIg
eCxwLGEscTt2YXIgaD1sLmF0dHJfKCJwaXhlbHNQZXJZTGFiZWwiKTtmb3IodmFyIHQ9LTEwO3Q8
NTA7dCsrKXtpZihsLmF0dHJfKCJsYWJlbHNLTUcyIikpe3ZhciBjPU1hdGgucG93KDE2LHQpfWVs
c2V7dmFyIGM9TWF0aC5wb3coMTAsdCl9Zm9yKHZhciBzPTA7czxmLmxlbmd0aDtzKyspe3g9Yypm
W3NdO3A9TWF0aC5mbG9vcih2L3gpKng7YT1NYXRoLmNlaWwodS94KSp4O3E9TWF0aC5hYnMoYS1w
KS94O3ZhciBkPWwuaGVpZ2h0Xy9xO2lmKGQ+aCl7YnJlYWt9fWlmKGQ+aCl7YnJlYWt9fXZhciB3
PVtdO3ZhciByO3ZhciBvPVtdO2lmKGwuYXR0cl8oImxhYmVsc0tNQiIpKXtyPTEwMDA7bz1bIksi
LCJNIiwiQiIsIlQiXX1pZihsLmF0dHJfKCJsYWJlbHNLTUcyIikpe2lmKHIpe2wud2FybigiU2V0
dGluZyBib3RoIGxhYmVsc0tNQiBhbmQgbGFiZWxzS01HMi4gUGljayBvbmUhIil9cj0xMDI0O289
WyJrIiwiTSIsIkciLCJUIl19aWYocD5hKXt4Kj0tMX1mb3IodmFyIHQ9MDt0PHE7dCsrKXt2YXIg
Zz1wK3QqeDt2YXIgYj1NYXRoLmFicyhnKTt2YXIgZT1EeWdyYXBoLnJvdW5kXyhnLDIpO2lmKG8u
bGVuZ3RoKXt2YXIgbT1yKnIqcipyO2Zvcih2YXIgcz0zO3M+PTA7cy0tLG0vPXIpe2lmKGI+PW0p
e2U9RHlncmFwaC5yb3VuZF8oZy9tLDEpK29bc107YnJlYWt9fX13LnB1c2goe2xhYmVsOmUsdjpn
fSl9cmV0dXJuIHd9O0R5Z3JhcGgucHJvdG90eXBlLmFkZFlUaWNrc189ZnVuY3Rpb24oYyxiKXt2
YXIgYT1EeWdyYXBoLm51bWVyaWNUaWNrcyhjLGIsdGhpcyk7dGhpcy5sYXlvdXRfLnVwZGF0ZU9w
dGlvbnMoe3lBeGlzOltjLGJdLHlUaWNrczphfSl9O0R5Z3JhcGgucHJvdG90eXBlLmV4dHJlbWVW
YWx1ZXNfPWZ1bmN0aW9uKGQpe3ZhciBoPW51bGwsZj1udWxsO3ZhciBiPXRoaXMuYXR0cl8oImVy
cm9yQmFycyIpfHx0aGlzLmF0dHJfKCJjdXN0b21CYXJzIik7aWYoYil7Zm9yKHZhciBjPTA7Yzxk
Lmxlbmd0aDtjKyspe3ZhciBnPWRbY11bMV1bMF07aWYoIWcpe2NvbnRpbnVlfXZhciBhPWctZFtj
XVsxXVsxXTt2YXIgZT1nK2RbY11bMV1bMl07aWYoYT5nKXthPWd9aWYoZTxnKXtlPWd9aWYoZj09
bnVsbHx8ZT5mKXtmPWV9aWYoaD09bnVsbHx8YTxoKXtoPWF9fX1lbHNle2Zvcih2YXIgYz0wO2M8
ZC5sZW5ndGg7YysrKXt2YXIgZz1kW2NdWzFdO2lmKGc9PT1udWxsfHxpc05hTihnKSl7Y29udGlu
dWV9aWYoZj09bnVsbHx8Zz5mKXtmPWd9aWYoaD09bnVsbHx8ZzxoKXtoPWd9fX1yZXR1cm5baCxm
XX07RHlncmFwaC5wcm90b3R5cGUuZHJhd0dyYXBoXz1mdW5jdGlvbihEKXt2YXIgbj10aGlzLmlz
X2luaXRpYWxfZHJhd187dGhpcy5pc19pbml0aWFsX2RyYXdfPWZhbHNlO3ZhciB6PW51bGwseT1u
dWxsO3RoaXMubGF5b3V0Xy5yZW1vdmVBbGxEYXRhc2V0cygpO3RoaXMuc2V0Q29sb3JzXygpO3Ro
aXMuYXR0cnNfLnBvaW50U2l6ZT0wLjUqdGhpcy5hdHRyXygiaGlnaGxpZ2h0Q2lyY2xlU2l6ZSIp
O3ZhciBkPVtdO3ZhciBmPVtdO2Zvcih2YXIgdz1EWzBdLmxlbmd0aC0xO3c+PTE7dy0tKXtpZigh
dGhpcy52aXNpYmlsaXR5KClbdy0xXSl7Y29udGludWV9dmFyIGI9dGhpcy5hdHRyXygiY29ubmVj
dFNlcGFyYXRlZFBvaW50cyIsdyk7dmFyIG09W107Zm9yKHZhciB1PTA7dTxELmxlbmd0aDt1Kysp
e2lmKERbdV1bd10hPW51bGx8fCFiKXt2YXIgQT1EW3VdWzBdO20ucHVzaChbQSxEW3VdW3ddXSl9
fW09dGhpcy5yb2xsaW5nQXZlcmFnZShtLHRoaXMucm9sbFBlcmlvZF8pO3ZhciBwPXRoaXMuYXR0
cl8oImVycm9yQmFycyIpfHx0aGlzLmF0dHJfKCJjdXN0b21CYXJzIik7aWYodGhpcy5kYXRlV2lu
ZG93Xyl7dmFyIEY9dGhpcy5kYXRlV2luZG93X1swXTt2YXIgZz10aGlzLmRhdGVXaW5kb3dfWzFd
O3ZhciBxPVtdO3ZhciBlPW51bGwsRT1udWxsO2Zvcih2YXIgdD0wO3Q8bS5sZW5ndGg7dCsrKXtp
ZihtW3RdWzBdPj1GJiZlPT09bnVsbCl7ZT10fWlmKG1bdF1bMF08PWcpe0U9dH19aWYoZT09PW51
bGwpe2U9MH1pZihlPjApe2UtLX1pZihFPT09bnVsbCl7RT1tLmxlbmd0aC0xfWlmKEU8bS5sZW5n
dGgtMSl7RSsrfXRoaXMuYm91bmRhcnlJZHNfW3ctMV09W2UsRV07Zm9yKHZhciB0PWU7dDw9RTt0
Kyspe3EucHVzaChtW3RdKX1tPXF9ZWxzZXt0aGlzLmJvdW5kYXJ5SWRzX1t3LTFdPVswLG0ubGVu
Z3RoLTFdfXZhciBhPXRoaXMuZXh0cmVtZVZhbHVlc18obSk7dmFyIHI9YVswXTt2YXIgbz1hWzFd
O2lmKHo9PT1udWxsfHxyPHope3o9cn1pZih5PT09bnVsbHx8bz55KXt5PW99aWYocCl7Zm9yKHZh
ciB1PTA7dTxtLmxlbmd0aDt1Kyspe3ZhbD1bbVt1XVswXSxtW3VdWzFdWzBdLG1bdV1bMV1bMV0s
bVt1XVsxXVsyXV07bVt1XT12YWx9fWVsc2V7aWYodGhpcy5hdHRyXygic3RhY2tlZEdyYXBoIikp
e3ZhciBzPW0ubGVuZ3RoO3ZhciBCO2Zvcih2YXIgdT0wO3U8czt1Kyspe3ZhciBoPW1bdV1bMF07
aWYoZFtoXT09PXVuZGVmaW5lZCl7ZFtoXT0wfUI9bVt1XVsxXTtkW2hdKz1CO21bdV09W2gsZFto
XV07aWYoIXl8fGRbaF0+eSl7eT1kW2hdfX19fWZbd109bX1mb3IodmFyIHc9MTt3PGYubGVuZ3Ro
O3crKyl7aWYoIXRoaXMudmlzaWJpbGl0eSgpW3ctMV0pe2NvbnRpbnVlfXRoaXMubGF5b3V0Xy5h
ZGREYXRhc2V0KHRoaXMuYXR0cl8oImxhYmVscyIpW3ddLGZbd10pfWlmKHRoaXMudmFsdWVSYW5n
ZV8hPW51bGwpe3RoaXMuYWRkWVRpY2tzXyh0aGlzLnZhbHVlUmFuZ2VfWzBdLHRoaXMudmFsdWVS
YW5nZV9bMV0pO3RoaXMuZGlzcGxheWVkWVJhbmdlXz10aGlzLnZhbHVlUmFuZ2VffWVsc2V7aWYo
dGhpcy5hdHRyXygiaW5jbHVkZVplcm8iKSYmej4wKXt6PTB9dmFyIHY9eS16O2lmKHY9PTApe3Y9
eX12YXIgYz15KzAuMSp2O3ZhciBDPXotMC4xKnY7aWYoQzwwJiZ6Pj0wKXtDPTB9aWYoYz4wJiZ5
PD0wKXtjPTB9aWYodGhpcy5hdHRyXygiaW5jbHVkZVplcm8iKSl7aWYoeTwwKXtjPTB9aWYoej4w
KXtDPTB9fXRoaXMuYWRkWVRpY2tzXyhDLGMpO3RoaXMuZGlzcGxheWVkWVJhbmdlXz1bQyxjXX10
aGlzLmFkZFhUaWNrc18oKTt0aGlzLmxheW91dF8udXBkYXRlT3B0aW9ucyh7ZGF0ZVdpbmRvdzp0
aGlzLmRhdGVXaW5kb3dffSk7dGhpcy5sYXlvdXRfLmV2YWx1YXRlV2l0aEVycm9yKCk7dGhpcy5w
bG90dGVyXy5jbGVhcigpO3RoaXMucGxvdHRlcl8ucmVuZGVyKCk7dGhpcy5jYW52YXNfLmdldENv
bnRleHQoIjJkIikuY2xlYXJSZWN0KDAsMCx0aGlzLmNhbnZhc18ud2lkdGgsdGhpcy5jYW52YXNf
LmhlaWdodCk7aWYodGhpcy5hdHRyXygiZHJhd0NhbGxiYWNrIikhPT1udWxsKXt0aGlzLmF0dHJf
KCJkcmF3Q2FsbGJhY2siKSh0aGlzLG4pfX07RHlncmFwaC5wcm90b3R5cGUucm9sbGluZ0F2ZXJh
Z2U9ZnVuY3Rpb24obSxkKXtpZihtLmxlbmd0aDwyKXtyZXR1cm4gbX12YXIgZD1NYXRoLm1pbihk
LG0ubGVuZ3RoLTEpO3ZhciBiPVtdO3ZhciBzPXRoaXMuYXR0cl8oInNpZ21hIik7aWYodGhpcy5m
cmFjdGlvbnNfKXt2YXIgaz0wO3ZhciBoPTA7dmFyIGU9MTAwO2Zvcih2YXIgeD0wO3g8bS5sZW5n
dGg7eCsrKXtrKz1tW3hdWzFdWzBdO2grPW1beF1bMV1bMV07aWYoeC1kPj0wKXtrLT1tW3gtZF1b
MV1bMF07aC09bVt4LWRdWzFdWzFdfXZhciBCPW1beF1bMF07dmFyIHY9aD9rL2g6MDtpZih0aGlz
LmF0dHJfKCJlcnJvckJhcnMiKSl7aWYodGhpcy53aWxzb25JbnRlcnZhbF8pe2lmKGgpe3ZhciB0
PXY8MD8wOnYsdT1oO3ZhciBBPXMqTWF0aC5zcXJ0KHQqKDEtdCkvdStzKnMvKDQqdSp1KSk7dmFy
IGE9MStzKnMvaDt2YXIgRj0odCtzKnMvKDIqaCktQSkvYTt2YXIgbz0odCtzKnMvKDIqaCkrQSkv
YTtiW3hdPVtCLFt0KmUsKHQtRikqZSwoby10KSplXV19ZWxzZXtiW3hdPVtCLFswLDAsMF1dfX1l
bHNle3ZhciB6PWg/cypNYXRoLnNxcnQodiooMS12KS9oKToxO2JbeF09W0IsW2UqdixlKnosZSp6
XV19fWVsc2V7Ylt4XT1bQixlKnZdfX19ZWxzZXtpZih0aGlzLmF0dHJfKCJjdXN0b21CYXJzIikp
e3ZhciBGPTA7dmFyIEM9MDt2YXIgbz0wO3ZhciBnPTA7Zm9yKHZhciB4PTA7eDxtLmxlbmd0aDt4
Kyspe3ZhciBFPW1beF1bMV07dmFyIGw9RVsxXTtiW3hdPVttW3hdWzBdLFtsLGwtRVswXSxFWzJd
LWxdXTtpZihsIT1udWxsJiYhaXNOYU4obCkpe0YrPUVbMF07Qys9bDtvKz1FWzJdO2crPTF9aWYo
eC1kPj0wKXt2YXIgcj1tW3gtZF07aWYoclsxXVsxXSE9bnVsbCYmIWlzTmFOKHJbMV1bMV0pKXtG
LT1yWzFdWzBdO0MtPXJbMV1bMV07by09clsxXVsyXTtnLT0xfX1iW3hdPVttW3hdWzBdLFsxKkMv
ZywxKihDLUYpL2csMSooby1DKS9nXV19fWVsc2V7dmFyIHE9TWF0aC5taW4oZC0xLG0ubGVuZ3Ro
LTIpO2lmKCF0aGlzLmF0dHJfKCJlcnJvckJhcnMiKSl7aWYoZD09MSl7cmV0dXJuIG19Zm9yKHZh
ciB4PTA7eDxtLmxlbmd0aDt4Kyspe3ZhciBjPTA7dmFyIEQ9MDtmb3IodmFyIHc9TWF0aC5tYXgo
MCx4LWQrMSk7dzx4KzE7dysrKXt2YXIgbD1tW3ddWzFdO2lmKGw9PW51bGx8fGlzTmFOKGwpKXtj
b250aW51ZX1EKys7Yys9bVt3XVsxXX1pZihEKXtiW3hdPVttW3hdWzBdLGMvRF19ZWxzZXtiW3hd
PVttW3hdWzBdLG51bGxdfX19ZWxzZXtmb3IodmFyIHg9MDt4PG0ubGVuZ3RoO3grKyl7dmFyIGM9
MDt2YXIgZj0wO3ZhciBEPTA7Zm9yKHZhciB3PU1hdGgubWF4KDAseC1kKzEpO3c8eCsxO3crKyl7
dmFyIGw9bVt3XVsxXVswXTtpZihsPT1udWxsfHxpc05hTihsKSl7Y29udGludWV9RCsrO2MrPW1b
d11bMV1bMF07Zis9TWF0aC5wb3cobVt3XVsxXVsxXSwyKX1pZihEKXt2YXIgej1NYXRoLnNxcnQo
ZikvRDtiW3hdPVttW3hdWzBdLFtjL0Qscyp6LHMqel1dfWVsc2V7Ylt4XT1bbVt4XVswXSxbbnVs
bCxudWxsLG51bGxdXX19fX19cmV0dXJuIGJ9O0R5Z3JhcGguZGF0ZVBhcnNlcj1mdW5jdGlvbihi
LGEpe3ZhciBjO3ZhciBlO2lmKGIuc2VhcmNoKCItIikhPS0xKXtjPWIucmVwbGFjZSgiLSIsIi8i
LCJnIik7d2hpbGUoYy5zZWFyY2goIi0iKSE9LTEpe2M9Yy5yZXBsYWNlKCItIiwiLyIpfWU9RGF0
ZS5wYXJzZShjKX1lbHNle2lmKGIubGVuZ3RoPT04KXtjPWIuc3Vic3RyKDAsNCkrIi8iK2Iuc3Vi
c3RyKDQsMikrIi8iK2Iuc3Vic3RyKDYsMik7ZT1EYXRlLnBhcnNlKGMpfWVsc2V7ZT1EYXRlLnBh
cnNlKGIpfX1pZighZXx8aXNOYU4oZSkpe2EuZXJyb3IoIkNvdWxkbid0IHBhcnNlICIrYisiIGFz
IGEgZGF0ZSIpfXJldHVybiBlfTtEeWdyYXBoLnByb3RvdHlwZS5kZXRlY3RUeXBlRnJvbVN0cmlu
Z189ZnVuY3Rpb24oYil7dmFyIGE9ZmFsc2U7aWYoYi5pbmRleE9mKCItIik+PTB8fGIuaW5kZXhP
ZigiLyIpPj0wfHxpc05hTihwYXJzZUZsb2F0KGIpKSl7YT10cnVlfWVsc2V7aWYoYi5sZW5ndGg9
PTgmJmI+IjE5NzAwMTAxIiYmYjwiMjAzNzEyMzEiKXthPXRydWV9fWlmKGEpe3RoaXMuYXR0cnNf
LnhWYWx1ZUZvcm1hdHRlcj1EeWdyYXBoLmRhdGVTdHJpbmdfO3RoaXMuYXR0cnNfLnhWYWx1ZVBh
cnNlcj1EeWdyYXBoLmRhdGVQYXJzZXI7dGhpcy5hdHRyc18ueFRpY2tlcj1EeWdyYXBoLmRhdGVU
aWNrZXI7dGhpcy5hdHRyc18ueEF4aXNMYWJlbEZvcm1hdHRlcj1EeWdyYXBoLmRhdGVBeGlzRm9y
bWF0dGVyfWVsc2V7dGhpcy5hdHRyc18ueFZhbHVlRm9ybWF0dGVyPWZ1bmN0aW9uKGMpe3JldHVy
biBjfTt0aGlzLmF0dHJzXy54VmFsdWVQYXJzZXI9ZnVuY3Rpb24oYyl7cmV0dXJuIHBhcnNlRmxv
YXQoYyl9O3RoaXMuYXR0cnNfLnhUaWNrZXI9RHlncmFwaC5udW1lcmljVGlja3M7dGhpcy5hdHRy
c18ueEF4aXNMYWJlbEZvcm1hdHRlcj10aGlzLmF0dHJzXy54VmFsdWVGb3JtYXR0ZXJ9fTtEeWdy
YXBoLnByb3RvdHlwZS5wYXJzZUNTVl89ZnVuY3Rpb24oaCl7dmFyIG49W107dmFyIHI9aC5zcGxp
dCgiXG4iKTt2YXIgYj10aGlzLmF0dHJfKCJkZWxpbWl0ZXIiKTtpZihyWzBdLmluZGV4T2YoYik9
PS0xJiZyWzBdLmluZGV4T2YoIlx0Iik+PTApe2I9Ilx0In12YXIgYT0wO2lmKHRoaXMubGFiZWxz
RnJvbUNTVl8pe2E9MTt0aGlzLmF0dHJzXy5sYWJlbHM9clswXS5zcGxpdChiKX12YXIgaz1mdW5j
dGlvbihqKXt2YXIgcz1wYXJzZUZsb2F0KGopO3JldHVybiBpc05hTihzKT9udWxsOnN9O3ZhciBj
O3ZhciBwPWZhbHNlO3ZhciBkPXRoaXMuYXR0cl8oImxhYmVscyIpLmxlbmd0aDt2YXIgbT1mYWxz
ZTtmb3IodmFyIGc9YTtnPHIubGVuZ3RoO2crKyl7dmFyIHE9cltnXTtpZihxLmxlbmd0aD09MCl7
Y29udGludWV9aWYocVswXT09IiMiKXtjb250aW51ZX12YXIgZj1xLnNwbGl0KGIpO2lmKGYubGVu
Z3RoPDIpe2NvbnRpbnVlfXZhciBsPVtdO2lmKCFwKXt0aGlzLmRldGVjdFR5cGVGcm9tU3RyaW5n
XyhmWzBdKTtjPXRoaXMuYXR0cl8oInhWYWx1ZVBhcnNlciIpO3A9dHJ1ZX1sWzBdPWMoZlswXSx0
aGlzKTtpZih0aGlzLmZyYWN0aW9uc18pe2Zvcih2YXIgZT0xO2U8Zi5sZW5ndGg7ZSsrKXt2YXIg
bz1mW2VdLnNwbGl0KCIvIik7bFtlXT1bayhvWzBdKSxrKG9bMV0pXX19ZWxzZXtpZih0aGlzLmF0
dHJfKCJlcnJvckJhcnMiKSl7Zm9yKHZhciBlPTE7ZTxmLmxlbmd0aDtlKz0yKXtsWyhlKzEpLzJd
PVtrKGZbZV0pLGsoZltlKzFdKV19fWVsc2V7aWYodGhpcy5hdHRyXygiY3VzdG9tQmFycyIpKXtm
b3IodmFyIGU9MTtlPGYubGVuZ3RoO2UrKyl7dmFyIG89ZltlXS5zcGxpdCgiOyIpO2xbZV09W2so
b1swXSksayhvWzFdKSxrKG9bMl0pXX19ZWxzZXtmb3IodmFyIGU9MTtlPGYubGVuZ3RoO2UrKyl7
bFtlXT1rKGZbZV0pfX19fWlmKG4ubGVuZ3RoPjAmJmxbMF08bltuLmxlbmd0aC0xXVswXSl7bT10
cnVlfW4ucHVzaChsKTtpZihsLmxlbmd0aCE9ZCl7dGhpcy5lcnJvcigiTnVtYmVyIG9mIGNvbHVt
bnMgaW4gbGluZSAiK2crIiAoIitsLmxlbmd0aCsiKSBkb2VzIG5vdCBhZ3JlZSB3aXRoIG51bWJl
ciBvZiBsYWJlbHMgKCIrZCsiKSAiK3EpfX1pZihtKXt0aGlzLndhcm4oIkNTViBpcyBvdXQgb2Yg
b3JkZXI7IG9yZGVyIGl0IGNvcnJlY3RseSB0byBzcGVlZCBsb2FkaW5nLiIpO24uc29ydChmdW5j
dGlvbihzLGope3JldHVybiBzWzBdLWpbMF19KX1yZXR1cm4gbn07RHlncmFwaC5wcm90b3R5cGUu
cGFyc2VBcnJheV89ZnVuY3Rpb24oYil7aWYoYi5sZW5ndGg9PTApe3RoaXMuZXJyb3IoIkNhbid0
IHBsb3QgZW1wdHkgZGF0YSBzZXQiKTtyZXR1cm4gbnVsbH1pZihiWzBdLmxlbmd0aD09MCl7dGhp
cy5lcnJvcigiRGF0YSBzZXQgY2Fubm90IGNvbnRhaW4gYW4gZW1wdHkgcm93Iik7cmV0dXJuIG51
bGx9aWYodGhpcy5hdHRyXygibGFiZWxzIik9PW51bGwpe3RoaXMud2FybigiVXNpbmcgZGVmYXVs
dCBsYWJlbHMuIFNldCBsYWJlbHMgZXhwbGljaXRseSB2aWEgJ2xhYmVscycgaW4gdGhlIG9wdGlv
bnMgcGFyYW1ldGVyIik7dGhpcy5hdHRyc18ubGFiZWxzPVsiWCJdO2Zvcih2YXIgYT0xO2E8Ylsw
XS5sZW5ndGg7YSsrKXt0aGlzLmF0dHJzXy5sYWJlbHMucHVzaCgiWSIrYSl9fWlmKER5Z3JhcGgu
aXNEYXRlTGlrZShiWzBdWzBdKSl7dGhpcy5hdHRyc18ueFZhbHVlRm9ybWF0dGVyPUR5Z3JhcGgu
ZGF0ZVN0cmluZ187dGhpcy5hdHRyc18ueEF4aXNMYWJlbEZvcm1hdHRlcj1EeWdyYXBoLmRhdGVB
eGlzRm9ybWF0dGVyO3RoaXMuYXR0cnNfLnhUaWNrZXI9RHlncmFwaC5kYXRlVGlja2VyO3ZhciBj
PUR5Z3JhcGguY2xvbmUoYik7Zm9yKHZhciBhPTA7YTxiLmxlbmd0aDthKyspe2lmKGNbYV0ubGVu
Z3RoPT0wKXt0aGlzLmVycm9yKCJSb3cgIisoMSthKSsiIG9mIGRhdGEgaXMgZW1wdHkiKTtyZXR1
cm4gbnVsbH1pZihjW2FdWzBdPT1udWxsfHx0eXBlb2YoY1thXVswXS5nZXRUaW1lKSE9ImZ1bmN0
aW9uInx8aXNOYU4oY1thXVswXS5nZXRUaW1lKCkpKXt0aGlzLmVycm9yKCJ4IHZhbHVlIGluIHJv
dyAiKygxK2EpKyIgaXMgbm90IGEgRGF0ZSIpO3JldHVybiBudWxsfWNbYV1bMF09Y1thXVswXS5n
ZXRUaW1lKCl9cmV0dXJuIGN9ZWxzZXt0aGlzLmF0dHJzXy54VmFsdWVGb3JtYXR0ZXI9ZnVuY3Rp
b24oZCl7cmV0dXJuIGR9O3RoaXMuYXR0cnNfLnhUaWNrZXI9RHlncmFwaC5udW1lcmljVGlja3M7
cmV0dXJuIGJ9fTtEeWdyYXBoLnByb3RvdHlwZS5wYXJzZURhdGFUYWJsZV89ZnVuY3Rpb24odil7
dmFyIGc9di5nZXROdW1iZXJPZkNvbHVtbnMoKTt2YXIgZj12LmdldE51bWJlck9mUm93cygpO3Zh
ciBlPXYuZ2V0Q29sdW1uVHlwZSgwKTtpZihlPT0iZGF0ZSJ8fGU9PSJkYXRldGltZSIpe3RoaXMu
YXR0cnNfLnhWYWx1ZUZvcm1hdHRlcj1EeWdyYXBoLmRhdGVTdHJpbmdfO3RoaXMuYXR0cnNfLnhW
YWx1ZVBhcnNlcj1EeWdyYXBoLmRhdGVQYXJzZXI7dGhpcy5hdHRyc18ueFRpY2tlcj1EeWdyYXBo
LmRhdGVUaWNrZXI7dGhpcy5hdHRyc18ueEF4aXNMYWJlbEZvcm1hdHRlcj1EeWdyYXBoLmRhdGVB
eGlzRm9ybWF0dGVyfWVsc2V7aWYoZT09Im51bWJlciIpe3RoaXMuYXR0cnNfLnhWYWx1ZUZvcm1h
dHRlcj1mdW5jdGlvbihqKXtyZXR1cm4gan07dGhpcy5hdHRyc18ueFZhbHVlUGFyc2VyPWZ1bmN0
aW9uKGope3JldHVybiBwYXJzZUZsb2F0KGopfTt0aGlzLmF0dHJzXy54VGlja2VyPUR5Z3JhcGgu
bnVtZXJpY1RpY2tzO3RoaXMuYXR0cnNfLnhBeGlzTGFiZWxGb3JtYXR0ZXI9dGhpcy5hdHRyc18u
eFZhbHVlRm9ybWF0dGVyfWVsc2V7dGhpcy5lcnJvcigib25seSAnZGF0ZScsICdkYXRldGltZScg
YW5kICdudW1iZXInIHR5cGVzIGFyZSBzdXBwb3J0ZWQgZm9yIGNvbHVtbiAxIG9mIERhdGFUYWJs
ZSBpbnB1dCAoR290ICciK2UrIicpIik7cmV0dXJuIG51bGx9fXZhciBsPVtdO3ZhciBzPXt9O3Zh
ciByPWZhbHNlO2Zvcih2YXIgcD0xO3A8ZztwKyspe3ZhciBiPXYuZ2V0Q29sdW1uVHlwZShwKTtp
ZihiPT0ibnVtYmVyIil7bC5wdXNoKHApfWVsc2V7aWYoYj09InN0cmluZyImJnRoaXMuYXR0cl8o
ImRpc3BsYXlBbm5vdGF0aW9ucyIpKXt2YXIgcT1sW2wubGVuZ3RoLTFdO2lmKCFzLmhhc093blBy
b3BlcnR5KHEpKXtzW3FdPVtwXX1lbHNle3NbcV0ucHVzaChwKX1yPXRydWV9ZWxzZXt0aGlzLmVy
cm9yKCJPbmx5ICdudW1iZXInIGlzIHN1cHBvcnRlZCBhcyBhIGRlcGVuZGVudCB0eXBlIHdpdGgg
R3Zpei4gJ3N0cmluZycgaXMgb25seSBzdXBwb3J0ZWQgaWYgZGlzcGxheUFubm90YXRpb25zIGlz
IHRydWUiKX19fXZhciB0PVt2LmdldENvbHVtbkxhYmVsKDApXTtmb3IodmFyIHA9MDtwPGwubGVu
Z3RoO3ArKyl7dC5wdXNoKHYuZ2V0Q29sdW1uTGFiZWwobFtwXSkpfXRoaXMuYXR0cnNfLmxhYmVs
cz10O2c9dC5sZW5ndGg7dmFyIHU9W107dmFyIGg9ZmFsc2U7dmFyIGE9W107Zm9yKHZhciBwPTA7
cDxmO3ArKyl7dmFyIGQ9W107aWYodHlwZW9mKHYuZ2V0VmFsdWUocCwwKSk9PT0idW5kZWZpbmVk
Inx8di5nZXRWYWx1ZShwLDApPT09bnVsbCl7dGhpcy53YXJuKCJJZ25vcmluZyByb3cgIitwKyIg
b2YgRGF0YVRhYmxlIGJlY2F1c2Ugb2YgdW5kZWZpbmVkIG9yIG51bGwgZmlyc3QgY29sdW1uLiIp
O2NvbnRpbnVlfWlmKGU9PSJkYXRlInx8ZT09ImRhdGV0aW1lIil7ZC5wdXNoKHYuZ2V0VmFsdWUo
cCwwKS5nZXRUaW1lKCkpfWVsc2V7ZC5wdXNoKHYuZ2V0VmFsdWUocCwwKSl9aWYoIXRoaXMuYXR0
cl8oImVycm9yQmFycyIpKXtmb3IodmFyIG49MDtuPGwubGVuZ3RoO24rKyl7dmFyIGM9bFtuXTtk
LnB1c2godi5nZXRWYWx1ZShwLGMpKTtpZihyJiZzLmhhc093blByb3BlcnR5KGMpJiZ2LmdldFZh
bHVlKHAsc1tjXVswXSkhPW51bGwpe3ZhciBvPXt9O28uc2VyaWVzPXYuZ2V0Q29sdW1uTGFiZWwo
Yyk7by54dmFsPWRbMF07by5zaG9ydFRleHQ9U3RyaW5nLmZyb21DaGFyQ29kZSg2NSthLmxlbmd0
aCk7by50ZXh0PSIiO2Zvcih2YXIgbT0wO208c1tjXS5sZW5ndGg7bSsrKXtpZihtKXtvLnRleHQr
PSJcbiJ9by50ZXh0Kz12LmdldFZhbHVlKHAsc1tjXVttXSl9YS5wdXNoKG8pfX19ZWxzZXtmb3Io
dmFyIG49MDtuPGctMTtuKyspe2QucHVzaChbdi5nZXRWYWx1ZShwLDErMipuKSx2LmdldFZhbHVl
KHAsMisyKm4pXSl9fWlmKHUubGVuZ3RoPjAmJmRbMF08dVt1Lmxlbmd0aC0xXVswXSl7aD10cnVl
fXUucHVzaChkKX1pZihoKXt0aGlzLndhcm4oIkRhdGFUYWJsZSBpcyBvdXQgb2Ygb3JkZXI7IG9y
ZGVyIGl0IGNvcnJlY3RseSB0byBzcGVlZCBsb2FkaW5nLiIpO3Uuc29ydChmdW5jdGlvbihrLGop
e3JldHVybiBrWzBdLWpbMF19KX10aGlzLnJhd0RhdGFfPXU7aWYoYS5sZW5ndGg+MCl7dGhpcy5z
ZXRBbm5vdGF0aW9ucyhhLHRydWUpfX07RHlncmFwaC51cGRhdGU9ZnVuY3Rpb24oYixjKXtpZih0
eXBlb2YoYykhPSJ1bmRlZmluZWQiJiZjIT09bnVsbCl7Zm9yKHZhciBhIGluIGMpe2lmKGMuaGFz
T3duUHJvcGVydHkoYSkpe2JbYV09Y1thXX19fXJldHVybiBifTtEeWdyYXBoLmlzQXJyYXlMaWtl
PWZ1bmN0aW9uKGIpe3ZhciBhPXR5cGVvZihiKTtpZigoYSE9Im9iamVjdCImJiEoYT09ImZ1bmN0
aW9uIiYmdHlwZW9mKGIuaXRlbSk9PSJmdW5jdGlvbiIpKXx8Yj09PW51bGx8fHR5cGVvZihiLmxl
bmd0aCkhPSJudW1iZXIifHxiLm5vZGVUeXBlPT09Myl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVl
fTtEeWdyYXBoLmlzRGF0ZUxpa2U9ZnVuY3Rpb24oYSl7aWYodHlwZW9mKGEpIT0ib2JqZWN0Inx8
YT09PW51bGx8fHR5cGVvZihhLmdldFRpbWUpIT0iZnVuY3Rpb24iKXtyZXR1cm4gZmFsc2V9cmV0
dXJuIHRydWV9O0R5Z3JhcGguY2xvbmU9ZnVuY3Rpb24oYyl7dmFyIGI9W107Zm9yKHZhciBhPTA7
YTxjLmxlbmd0aDthKyspe2lmKER5Z3JhcGguaXNBcnJheUxpa2UoY1thXSkpe2IucHVzaChEeWdy
YXBoLmNsb25lKGNbYV0pKX1lbHNle2IucHVzaChjW2FdKX19cmV0dXJuIGJ9O0R5Z3JhcGgucHJv
dG90eXBlLnN0YXJ0Xz1mdW5jdGlvbigpe2lmKHR5cGVvZiB0aGlzLmZpbGVfPT0iZnVuY3Rpb24i
KXt0aGlzLmxvYWRlZEV2ZW50Xyh0aGlzLmZpbGVfKCkpfWVsc2V7aWYoRHlncmFwaC5pc0FycmF5
TGlrZSh0aGlzLmZpbGVfKSl7dGhpcy5yYXdEYXRhXz10aGlzLnBhcnNlQXJyYXlfKHRoaXMuZmls
ZV8pO3RoaXMuZHJhd0dyYXBoXyh0aGlzLnJhd0RhdGFfKX1lbHNle2lmKHR5cGVvZiB0aGlzLmZp
bGVfPT0ib2JqZWN0IiYmdHlwZW9mIHRoaXMuZmlsZV8uZ2V0Q29sdW1uUmFuZ2U9PSJmdW5jdGlv
biIpe3RoaXMucGFyc2VEYXRhVGFibGVfKHRoaXMuZmlsZV8pO3RoaXMuZHJhd0dyYXBoXyh0aGlz
LnJhd0RhdGFfKX1lbHNle2lmKHR5cGVvZiB0aGlzLmZpbGVfPT0ic3RyaW5nIil7aWYodGhpcy5m
aWxlXy5pbmRleE9mKCJcbiIpPj0wKXt0aGlzLmxvYWRlZEV2ZW50Xyh0aGlzLmZpbGVfKX1lbHNl
e3ZhciBiPW5ldyBYTUxIdHRwUmVxdWVzdCgpO3ZhciBhPXRoaXM7Yi5vbnJlYWR5c3RhdGVjaGFu
Z2U9ZnVuY3Rpb24oKXtpZihiLnJlYWR5U3RhdGU9PTQpe2lmKGIuc3RhdHVzPT0yMDApe2EubG9h
ZGVkRXZlbnRfKGIucmVzcG9uc2VUZXh0KX19fTtiLm9wZW4oIkdFVCIsdGhpcy5maWxlXyx0cnVl
KTtiLnNlbmQobnVsbCl9fWVsc2V7dGhpcy5lcnJvcigiVW5rbm93biBkYXRhIGZvcm1hdDogIiso
dHlwZW9mIHRoaXMuZmlsZV8pKX19fX19O0R5Z3JhcGgucHJvdG90eXBlLnVwZGF0ZU9wdGlvbnM9
ZnVuY3Rpb24oYSl7aWYoYS5yb2xsUGVyaW9kKXt0aGlzLnJvbGxQZXJpb2RfPWEucm9sbFBlcmlv
ZH1pZihhLmRhdGVXaW5kb3cpe3RoaXMuZGF0ZVdpbmRvd189YS5kYXRlV2luZG93fWlmKGEudmFs
dWVSYW5nZSl7dGhpcy52YWx1ZVJhbmdlXz1hLnZhbHVlUmFuZ2V9RHlncmFwaC51cGRhdGUodGhp
cy51c2VyX2F0dHJzXyxhKTtEeWdyYXBoLnVwZGF0ZSh0aGlzLnJlbmRlck9wdGlvbnNfLGEpO3Ro
aXMubGFiZWxzRnJvbUNTVl89KHRoaXMuYXR0cl8oImxhYmVscyIpPT1udWxsKTt0aGlzLmxheW91
dF8udXBkYXRlT3B0aW9ucyh7ZXJyb3JCYXJzOnRoaXMuYXR0cl8oImVycm9yQmFycyIpfSk7aWYo
YS5maWxlKXt0aGlzLmZpbGVfPWEuZmlsZTt0aGlzLnN0YXJ0XygpfWVsc2V7dGhpcy5kcmF3R3Jh
cGhfKHRoaXMucmF3RGF0YV8pfX07RHlncmFwaC5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGIs
YSl7aWYodGhpcy5yZXNpemVfbG9jayl7cmV0dXJufXRoaXMucmVzaXplX2xvY2s9dHJ1ZTtpZigo
Yj09PW51bGwpIT0oYT09PW51bGwpKXt0aGlzLndhcm4oIkR5Z3JhcGgucmVzaXplKCkgc2hvdWxk
IGJlIGNhbGxlZCB3aXRoIHplcm8gcGFyYW1ldGVycyBvciB0d28gbm9uLU5VTEwgcGFyYW1ldGVy
cy4gUHJldGVuZGluZyBpdCB3YXMgemVyby4iKTtiPWE9bnVsbH10aGlzLm1haW5kaXZfLmlubmVy
SFRNTD0iIjt0aGlzLmF0dHJzXy5sYWJlbHNEaXY9bnVsbDtpZihiKXt0aGlzLm1haW5kaXZfLnN0
eWxlLndpZHRoPWIrInB4Ijt0aGlzLm1haW5kaXZfLnN0eWxlLmhlaWdodD1hKyJweCI7dGhpcy53
aWR0aF89Yjt0aGlzLmhlaWdodF89YX1lbHNle3RoaXMud2lkdGhfPXRoaXMubWFpbmRpdl8ub2Zm
c2V0V2lkdGg7dGhpcy5oZWlnaHRfPXRoaXMubWFpbmRpdl8ub2Zmc2V0SGVpZ2h0fXRoaXMuY3Jl
YXRlSW50ZXJmYWNlXygpO3RoaXMuZHJhd0dyYXBoXyh0aGlzLnJhd0RhdGFfKTt0aGlzLnJlc2l6
ZV9sb2NrPWZhbHNlfTtEeWdyYXBoLnByb3RvdHlwZS5hZGp1c3RSb2xsPWZ1bmN0aW9uKGEpe3Ro
aXMucm9sbFBlcmlvZF89YTt0aGlzLmRyYXdHcmFwaF8odGhpcy5yYXdEYXRhXyl9O0R5Z3JhcGgu
cHJvdG90eXBlLnZpc2liaWxpdHk9ZnVuY3Rpb24oKXtpZighdGhpcy5hdHRyXygidmlzaWJpbGl0
eSIpKXt0aGlzLmF0dHJzXy52aXNpYmlsaXR5PVtdfXdoaWxlKHRoaXMuYXR0cl8oInZpc2liaWxp
dHkiKS5sZW5ndGg8dGhpcy5yYXdEYXRhX1swXS5sZW5ndGgtMSl7dGhpcy5hdHRyXygidmlzaWJp
bGl0eSIpLnB1c2godHJ1ZSl9cmV0dXJuIHRoaXMuYXR0cl8oInZpc2liaWxpdHkiKX07RHlncmFw
aC5wcm90b3R5cGUuc2V0VmlzaWJpbGl0eT1mdW5jdGlvbihiLGMpe3ZhciBhPXRoaXMudmlzaWJp
bGl0eSgpO2lmKGI8MCYmYj49YS5sZW5ndGgpe3RoaXMud2FybigiaW52YWxpZCBzZXJpZXMgbnVt
YmVyIGluIHNldFZpc2liaWxpdHk6ICIrYil9ZWxzZXthW2JdPWM7dGhpcy5kcmF3R3JhcGhfKHRo
aXMucmF3RGF0YV8pfX07RHlncmFwaC5wcm90b3R5cGUuc2V0QW5ub3RhdGlvbnM9ZnVuY3Rpb24o
YixhKXt0aGlzLmFubm90YXRpb25zXz1iO3RoaXMubGF5b3V0Xy5zZXRBbm5vdGF0aW9ucyh0aGlz
LmFubm90YXRpb25zXyk7aWYoIWEpe3RoaXMuZHJhd0dyYXBoXyh0aGlzLnJhd0RhdGFfKX19O0R5
Z3JhcGgucHJvdG90eXBlLmFubm90YXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYW5ub3Rh
dGlvbnNffTtEeWdyYXBoLnByb3RvdHlwZS5pbmRleEZyb21TZXROYW1lPWZ1bmN0aW9uKGEpe3Zh
ciBjPXRoaXMuYXR0cl8oImxhYmVscyIpO2Zvcih2YXIgYj0wO2I8Yy5sZW5ndGg7YisrKXtpZihj
W2JdPT1hKXtyZXR1cm4gYn19cmV0dXJuIG51bGx9O0R5Z3JhcGguYWRkQW5ub3RhdGlvblJ1bGU9
ZnVuY3Rpb24oKXtpZihEeWdyYXBoLmFkZGVkQW5ub3RhdGlvbkNTUyl7cmV0dXJufXZhciBhO2lm
KGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aD4wKXthPWRvY3VtZW50LnN0eWxlU2hlZXRzWzBd
fWVsc2V7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtjLnR5cGU9InRleHQv
Y3NzIjtkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxk
KGMpO2ZvcihpPTA7aTxkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7aSsrKXtpZihkb2N1bWVu
dC5zdHlsZVNoZWV0c1tpXS5kaXNhYmxlZCl7Y29udGludWV9YT1kb2N1bWVudC5zdHlsZVNoZWV0
c1tpXX19dmFyIGI9ImJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBiYWNrZ3JvdW5kLWNvbG9yOiB3
aGl0ZTsgdGV4dC1hbGlnbjogY2VudGVyOyI7aWYoYS5pbnNlcnRSdWxlKXthLmluc2VydFJ1bGUo
Ii5keWdyYXBoRGVmYXVsdEFubm90YXRpb24geyAiK2IrIiB9IiwwKX1lbHNle2lmKGEuYWRkUnVs
ZSl7YS5hZGRSdWxlKCIuZHlncmFwaERlZmF1bHRBbm5vdGF0aW9uIixiKX19RHlncmFwaC5hZGRl
ZEFubm90YXRpb25DU1M9dHJ1ZX07RHlncmFwaC5jcmVhdGVDYW52YXM9ZnVuY3Rpb24oKXt2YXIg
YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtpc0lFPSgvTVNJRS8udGVzdChuYXZp
Z2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5vcGVyYSk7aWYoaXNJRSl7YT1HX3ZtbENhbnZhc01h
bmFnZXIuaW5pdEVsZW1lbnQoYSl9cmV0dXJuIGF9O0R5Z3JhcGguR1ZpekNoYXJ0PWZ1bmN0aW9u
KGEpe3RoaXMuY29udGFpbmVyPWF9O0R5Z3JhcGguR1ZpekNoYXJ0LnByb3RvdHlwZS5kcmF3PWZ1
bmN0aW9uKGIsYSl7dGhpcy5jb250YWluZXIuaW5uZXJIVE1MPSIiO3RoaXMuZGF0ZV9ncmFwaD1u
ZXcgRHlncmFwaCh0aGlzLmNvbnRhaW5lcixiLGEpfTtEeWdyYXBoLkdWaXpDaGFydC5wcm90b3R5
cGUuc2V0U2VsZWN0aW9uPWZ1bmN0aW9uKGIpe3ZhciBhPWZhbHNlO2lmKGIubGVuZ3RoKXthPWJb
MF0ucm93fXRoaXMuZGF0ZV9ncmFwaC5zZXRTZWxlY3Rpb24oYSl9O0R5Z3JhcGguR1ZpekNoYXJ0
LnByb3RvdHlwZS5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgYj1bXTt2YXIgYz10aGlzLmRh
dGVfZ3JhcGguZ2V0U2VsZWN0aW9uKCk7aWYoYzwwKXtyZXR1cm4gYn1jb2w9MTtmb3IodmFyIGEg
aW4gdGhpcy5kYXRlX2dyYXBoLmxheW91dF8uZGF0YXNldHMpe2IucHVzaCh7cm93OmMsY29sdW1u
OmNvbH0pO2NvbCsrfXJldHVybiBifTtEYXRlR3JhcGg9RHlncmFwaDtmdW5jdGlvbiBSR0JDb2xv
cihnKXt0aGlzLm9rPWZhbHNlO2lmKGcuY2hhckF0KDApPT0iIyIpe2c9Zy5zdWJzdHIoMSw2KX1n
PWcucmVwbGFjZSgvIC9nLCIiKTtnPWcudG9Mb3dlckNhc2UoKTt2YXIgYT17YWxpY2VibHVlOiJm
MGY4ZmYiLGFudGlxdWV3aGl0ZToiZmFlYmQ3IixhcXVhOiIwMGZmZmYiLGFxdWFtYXJpbmU6Ijdm
ZmZkNCIsYXp1cmU6ImYwZmZmZiIsYmVpZ2U6ImY1ZjVkYyIsYmlzcXVlOiJmZmU0YzQiLGJsYWNr
OiIwMDAwMDAiLGJsYW5jaGVkYWxtb25kOiJmZmViY2QiLGJsdWU6IjAwMDBmZiIsYmx1ZXZpb2xl
dDoiOGEyYmUyIixicm93bjoiYTUyYTJhIixidXJseXdvb2Q6ImRlYjg4NyIsY2FkZXRibHVlOiI1
ZjllYTAiLGNoYXJ0cmV1c2U6IjdmZmYwMCIsY2hvY29sYXRlOiJkMjY5MWUiLGNvcmFsOiJmZjdm
NTAiLGNvcm5mbG93ZXJibHVlOiI2NDk1ZWQiLGNvcm5zaWxrOiJmZmY4ZGMiLGNyaW1zb246ImRj
MTQzYyIsY3lhbjoiMDBmZmZmIixkYXJrYmx1ZToiMDAwMDhiIixkYXJrY3lhbjoiMDA4YjhiIixk
YXJrZ29sZGVucm9kOiJiODg2MGIiLGRhcmtncmF5OiJhOWE5YTkiLGRhcmtncmVlbjoiMDA2NDAw
IixkYXJra2hha2k6ImJkYjc2YiIsZGFya21hZ2VudGE6IjhiMDA4YiIsZGFya29saXZlZ3JlZW46
IjU1NmIyZiIsZGFya29yYW5nZToiZmY4YzAwIixkYXJrb3JjaGlkOiI5OTMyY2MiLGRhcmtyZWQ6
IjhiMDAwMCIsZGFya3NhbG1vbjoiZTk5NjdhIixkYXJrc2VhZ3JlZW46IjhmYmM4ZiIsZGFya3Ns
YXRlYmx1ZToiNDgzZDhiIixkYXJrc2xhdGVncmF5OiIyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IjAw
Y2VkMSIsZGFya3Zpb2xldDoiOTQwMGQzIixkZWVwcGluazoiZmYxNDkzIixkZWVwc2t5Ymx1ZToi
MDBiZmZmIixkaW1ncmF5OiI2OTY5NjkiLGRvZGdlcmJsdWU6IjFlOTBmZiIsZmVsZHNwYXI6ImQx
OTI3NSIsZmlyZWJyaWNrOiJiMjIyMjIiLGZsb3JhbHdoaXRlOiJmZmZhZjAiLGZvcmVzdGdyZWVu
OiIyMjhiMjIiLGZ1Y2hzaWE6ImZmMDBmZiIsZ2FpbnNib3JvOiJkY2RjZGMiLGdob3N0d2hpdGU6
ImY4ZjhmZiIsZ29sZDoiZmZkNzAwIixnb2xkZW5yb2Q6ImRhYTUyMCIsZ3JheToiODA4MDgwIixn
cmVlbjoiMDA4MDAwIixncmVlbnllbGxvdzoiYWRmZjJmIixob25leWRldzoiZjBmZmYwIixob3Rw
aW5rOiJmZjY5YjQiLGluZGlhbnJlZDoiY2Q1YzVjIixpbmRpZ286IjRiMDA4MiIsaXZvcnk6ImZm
ZmZmMCIsa2hha2k6ImYwZTY4YyIsbGF2ZW5kZXI6ImU2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiZmZm
MGY1IixsYXduZ3JlZW46IjdjZmMwMCIsbGVtb25jaGlmZm9uOiJmZmZhY2QiLGxpZ2h0Ymx1ZToi
YWRkOGU2IixsaWdodGNvcmFsOiJmMDgwODAiLGxpZ2h0Y3lhbjoiZTBmZmZmIixsaWdodGdvbGRl
bnJvZHllbGxvdzoiZmFmYWQyIixsaWdodGdyZXk6ImQzZDNkMyIsbGlnaHRncmVlbjoiOTBlZTkw
IixsaWdodHBpbms6ImZmYjZjMSIsbGlnaHRzYWxtb246ImZmYTA3YSIsbGlnaHRzZWFncmVlbjoi
MjBiMmFhIixsaWdodHNreWJsdWU6Ijg3Y2VmYSIsbGlnaHRzbGF0ZWJsdWU6Ijg0NzBmZiIsbGln
aHRzbGF0ZWdyYXk6Ijc3ODg5OSIsbGlnaHRzdGVlbGJsdWU6ImIwYzRkZSIsbGlnaHR5ZWxsb3c6
ImZmZmZlMCIsbGltZToiMDBmZjAwIixsaW1lZ3JlZW46IjMyY2QzMiIsbGluZW46ImZhZjBlNiIs
bWFnZW50YToiZmYwMGZmIixtYXJvb246IjgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiNjZjZGFh
IixtZWRpdW1ibHVlOiIwMDAwY2QiLG1lZGl1bW9yY2hpZDoiYmE1NWQzIixtZWRpdW1wdXJwbGU6
IjkzNzBkOCIsbWVkaXVtc2VhZ3JlZW46IjNjYjM3MSIsbWVkaXVtc2xhdGVibHVlOiI3YjY4ZWUi
LG1lZGl1bXNwcmluZ2dyZWVuOiIwMGZhOWEiLG1lZGl1bXR1cnF1b2lzZToiNDhkMWNjIixtZWRp
dW12aW9sZXRyZWQ6ImM3MTU4NSIsbWlkbmlnaHRibHVlOiIxOTE5NzAiLG1pbnRjcmVhbToiZjVm
ZmZhIixtaXN0eXJvc2U6ImZmZTRlMSIsbW9jY2FzaW46ImZmZTRiNSIsbmF2YWpvd2hpdGU6ImZm
ZGVhZCIsbmF2eToiMDAwMDgwIixvbGRsYWNlOiJmZGY1ZTYiLG9saXZlOiI4MDgwMDAiLG9saXZl
ZHJhYjoiNmI4ZTIzIixvcmFuZ2U6ImZmYTUwMCIsb3JhbmdlcmVkOiJmZjQ1MDAiLG9yY2hpZDoi
ZGE3MGQ2IixwYWxlZ29sZGVucm9kOiJlZWU4YWEiLHBhbGVncmVlbjoiOThmYjk4IixwYWxldHVy
cXVvaXNlOiJhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6ImQ4NzA5MyIscGFwYXlhd2hpcDoiZmZlZmQ1
IixwZWFjaHB1ZmY6ImZmZGFiOSIscGVydToiY2Q4NTNmIixwaW5rOiJmZmMwY2IiLHBsdW06ImRk
YTBkZCIscG93ZGVyYmx1ZToiYjBlMGU2IixwdXJwbGU6IjgwMDA4MCIscmVkOiJmZjAwMDAiLHJv
c3licm93bjoiYmM4ZjhmIixyb3lhbGJsdWU6IjQxNjllMSIsc2FkZGxlYnJvd246IjhiNDUxMyIs
c2FsbW9uOiJmYTgwNzIiLHNhbmR5YnJvd246ImY0YTQ2MCIsc2VhZ3JlZW46IjJlOGI1NyIsc2Vh
c2hlbGw6ImZmZjVlZSIsc2llbm5hOiJhMDUyMmQiLHNpbHZlcjoiYzBjMGMwIixza3libHVlOiI4
N2NlZWIiLHNsYXRlYmx1ZToiNmE1YWNkIixzbGF0ZWdyYXk6IjcwODA5MCIsc25vdzoiZmZmYWZh
IixzcHJpbmdncmVlbjoiMDBmZjdmIixzdGVlbGJsdWU6IjQ2ODJiNCIsdGFuOiJkMmI0OGMiLHRl
YWw6IjAwODA4MCIsdGhpc3RsZToiZDhiZmQ4Iix0b21hdG86ImZmNjM0NyIsdHVycXVvaXNlOiI0
MGUwZDAiLHZpb2xldDoiZWU4MmVlIix2aW9sZXRyZWQ6ImQwMjA5MCIsd2hlYXQ6ImY1ZGViMyIs
d2hpdGU6ImZmZmZmZiIsd2hpdGVzbW9rZToiZjVmNWY1Iix5ZWxsb3c6ImZmZmYwMCIseWVsbG93
Z3JlZW46IjlhY2QzMiJ9O2Zvcih2YXIgYyBpbiBhKXtpZihnPT1jKXtnPWFbY119fXZhciBoPVt7
cmU6L15yZ2JcKChcZHsxLDN9KSxccyooXGR7MSwzfSksXHMqKFxkezEsM30pXCkkLyxleGFtcGxl
OlsicmdiKDEyMywgMjM0LCA0NSkiLCJyZ2IoMjU1LDIzNCwyNDUpIl0scHJvY2VzczpmdW5jdGlv
bihqKXtyZXR1cm5bcGFyc2VJbnQoalsxXSkscGFyc2VJbnQoalsyXSkscGFyc2VJbnQoalszXSld
fX0se3JlOi9eKFx3ezJ9KShcd3syfSkoXHd7Mn0pJC8sZXhhbXBsZTpbIiMwMGZmMDAiLCIzMzY2
OTkiXSxwcm9jZXNzOmZ1bmN0aW9uKGope3JldHVybltwYXJzZUludChqWzFdLDE2KSxwYXJzZUlu
dChqWzJdLDE2KSxwYXJzZUludChqWzNdLDE2KV19fSx7cmU6L14oXHd7MX0pKFx3ezF9KShcd3sx
fSkkLyxleGFtcGxlOlsiI2ZiMCIsImYwZiJdLHByb2Nlc3M6ZnVuY3Rpb24oail7cmV0dXJuW3Bh
cnNlSW50KGpbMV0ralsxXSwxNikscGFyc2VJbnQoalsyXStqWzJdLDE2KSxwYXJzZUludChqWzNd
K2pbM10sMTYpXX19XTtmb3IodmFyIGI9MDtiPGgubGVuZ3RoO2IrKyl7dmFyIGU9aFtiXS5yZTt2
YXIgZD1oW2JdLnByb2Nlc3M7dmFyIGY9ZS5leGVjKGcpO2lmKGYpe2NoYW5uZWxzPWQoZik7dGhp
cy5yPWNoYW5uZWxzWzBdO3RoaXMuZz1jaGFubmVsc1sxXTt0aGlzLmI9Y2hhbm5lbHNbMl07dGhp
cy5vaz10cnVlfX10aGlzLnI9KHRoaXMucjwwfHxpc05hTih0aGlzLnIpKT8wOigodGhpcy5yPjI1
NSk/MjU1OnRoaXMucik7dGhpcy5nPSh0aGlzLmc8MHx8aXNOYU4odGhpcy5nKSk/MDooKHRoaXMu
Zz4yNTUpPzI1NTp0aGlzLmcpO3RoaXMuYj0odGhpcy5iPDB8fGlzTmFOKHRoaXMuYikpPzA6KCh0
aGlzLmI+MjU1KT8yNTU6dGhpcy5iKTt0aGlzLnRvUkdCPWZ1bmN0aW9uKCl7cmV0dXJuInJnYigi
K3RoaXMucisiLCAiK3RoaXMuZysiLCAiK3RoaXMuYisiKSJ9O3RoaXMudG9IZXg9ZnVuY3Rpb24o
KXt2YXIgbD10aGlzLnIudG9TdHJpbmcoMTYpO3ZhciBrPXRoaXMuZy50b1N0cmluZygxNik7dmFy
IGo9dGhpcy5iLnRvU3RyaW5nKDE2KTtpZihsLmxlbmd0aD09MSl7bD0iMCIrbH1pZihrLmxlbmd0
aD09MSl7az0iMCIra31pZihqLmxlbmd0aD09MSl7aj0iMCIran1yZXR1cm4iIyIrbCtrK2p9fURh
dGUuZXh0PXt9O0RhdGUuZXh0LnV0aWw9e307RGF0ZS5leHQudXRpbC54UGFkPWZ1bmN0aW9uKGEs
YyxiKXtpZih0eXBlb2YoYik9PSJ1bmRlZmluZWQiKXtiPTEwfWZvcig7cGFyc2VJbnQoYSwxMCk8
YiYmYj4xO2IvPTEwKXthPWMudG9TdHJpbmcoKSthfXJldHVybiBhLnRvU3RyaW5nKCl9O0RhdGUu
cHJvdG90eXBlLmxvY2FsZT0iZW4tR0IiO2lmKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJodG1sIikmJmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF0ubGFuZyl7
RGF0ZS5wcm90b3R5cGUubG9jYWxlPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1s
IilbMF0ubGFuZ31EYXRlLmV4dC5sb2NhbGVzPXt9O0RhdGUuZXh0LmxvY2FsZXMuZW49e2E6WyJT
dW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxBOlsiU3VuZGF5IiwiTW9u
ZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXki
XSxiOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2Vw
IiwiT2N0IiwiTm92IiwiRGVjIl0sQjpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXBy
aWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJO
b3ZlbWJlciIsIkRlY2VtYmVyIl0sYzoiJWEgJWQgJWIgJVkgJVQgJVoiLHA6WyJBTSIsIlBNIl0s
UDpbImFtIiwicG0iXSx4OiIlZC8lbS8leSIsWDoiJVQifTtEYXRlLmV4dC5sb2NhbGVzWyJlbi1V
UyJdPURhdGUuZXh0LmxvY2FsZXMuZW47RGF0ZS5leHQubG9jYWxlc1siZW4tVVMiXS5jPSIlYSAl
ZCAlYiAlWSAlciAlWiI7RGF0ZS5leHQubG9jYWxlc1siZW4tVVMiXS54PSIlRCI7RGF0ZS5leHQu
bG9jYWxlc1siZW4tVVMiXS5YPSIlciI7RGF0ZS5leHQubG9jYWxlc1siZW4tR0IiXT1EYXRlLmV4
dC5sb2NhbGVzLmVuO0RhdGUuZXh0LmxvY2FsZXNbImVuLUFVIl09RGF0ZS5leHQubG9jYWxlc1si
ZW4tR0IiXTtEYXRlLmV4dC5mb3JtYXRzPXthOmZ1bmN0aW9uKGEpe3JldHVybiBEYXRlLmV4dC5s
b2NhbGVzW2EubG9jYWxlXS5hW2EuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKGEpe3JldHVybiBEYXRl
LmV4dC5sb2NhbGVzW2EubG9jYWxlXS5BW2EuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKGEpe3JldHVy
biBEYXRlLmV4dC5sb2NhbGVzW2EubG9jYWxlXS5iW2EuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24o
YSl7cmV0dXJuIERhdGUuZXh0LmxvY2FsZXNbYS5sb2NhbGVdLkJbYS5nZXRNb250aCgpXX0sYzoi
dG9Mb2NhbGVTdHJpbmciLEM6ZnVuY3Rpb24oYSl7cmV0dXJuIERhdGUuZXh0LnV0aWwueFBhZChw
YXJzZUludChhLmdldEZ1bGxZZWFyKCkvMTAwLDEwKSwwKX0sZDpbImdldERhdGUiLCIwIl0sZTpb
ImdldERhdGUiLCIgIl0sZzpmdW5jdGlvbihhKXtyZXR1cm4gRGF0ZS5leHQudXRpbC54UGFkKHBh
cnNlSW50KERhdGUuZXh0LnV0aWwuRyhhKS8xMDAsMTApLDApfSxHOmZ1bmN0aW9uKGMpe3ZhciBl
PWMuZ2V0RnVsbFllYXIoKTt2YXIgYj1wYXJzZUludChEYXRlLmV4dC5mb3JtYXRzLlYoYyksMTAp
O3ZhciBhPXBhcnNlSW50KERhdGUuZXh0LmZvcm1hdHMuVyhjKSwxMCk7aWYoYT5iKXtlKyt9ZWxz
ZXtpZihhPT09MCYmYj49NTIpe2UtLX19cmV0dXJuIGV9LEg6WyJnZXRIb3VycyIsIjAiXSxJOmZ1
bmN0aW9uKGIpe3ZhciBhPWIuZ2V0SG91cnMoKSUxMjtyZXR1cm4gRGF0ZS5leHQudXRpbC54UGFk
KGE9PT0wPzEyOmEsMCl9LGo6ZnVuY3Rpb24oYyl7dmFyIGE9Yy1uZXcgRGF0ZSgiIitjLmdldEZ1
bGxZZWFyKCkrIi8xLzEgR01UIik7YSs9Yy5nZXRUaW1lem9uZU9mZnNldCgpKjYwMDAwO3ZhciBi
PXBhcnNlSW50KGEvNjAwMDAvNjAvMjQsMTApKzE7cmV0dXJuIERhdGUuZXh0LnV0aWwueFBhZChi
LDAsMTAwKX0sbTpmdW5jdGlvbihhKXtyZXR1cm4gRGF0ZS5leHQudXRpbC54UGFkKGEuZ2V0TW9u
dGgoKSsxLDApfSxNOlsiZ2V0TWludXRlcyIsIjAiXSxwOmZ1bmN0aW9uKGEpe3JldHVybiBEYXRl
LmV4dC5sb2NhbGVzW2EubG9jYWxlXS5wW2EuZ2V0SG91cnMoKT49MTI/MTowXX0sUDpmdW5jdGlv
bihhKXtyZXR1cm4gRGF0ZS5leHQubG9jYWxlc1thLmxvY2FsZV0uUFthLmdldEhvdXJzKCk+PTEy
PzE6MF19LFM6WyJnZXRTZWNvbmRzIiwiMCJdLHU6ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXREYXko
KTtyZXR1cm4gYj09PTA/NzpifSxVOmZ1bmN0aW9uKGUpe3ZhciBhPXBhcnNlSW50KERhdGUuZXh0
LmZvcm1hdHMuaihlKSwxMCk7dmFyIGM9Ni1lLmdldERheSgpO3ZhciBiPXBhcnNlSW50KChhK2Mp
LzcsMTApO3JldHVybiBEYXRlLmV4dC51dGlsLnhQYWQoYiwwKX0sVjpmdW5jdGlvbihlKXt2YXIg
Yz1wYXJzZUludChEYXRlLmV4dC5mb3JtYXRzLlcoZSksMTApO3ZhciBhPShuZXcgRGF0ZSgiIitl
LmdldEZ1bGxZZWFyKCkrIi8xLzEiKSkuZ2V0RGF5KCk7dmFyIGI9YysoYT40fHxhPD0xPzA6MSk7
aWYoYj09NTMmJihuZXcgRGF0ZSgiIitlLmdldEZ1bGxZZWFyKCkrIi8xMi8zMSIpKS5nZXREYXko
KTw0KXtiPTF9ZWxzZXtpZihiPT09MCl7Yj1EYXRlLmV4dC5mb3JtYXRzLlYobmV3IERhdGUoIiIr
KGUuZ2V0RnVsbFllYXIoKS0xKSsiLzEyLzMxIikpfX1yZXR1cm4gRGF0ZS5leHQudXRpbC54UGFk
KGIsMCl9LHc6ImdldERheSIsVzpmdW5jdGlvbihlKXt2YXIgYT1wYXJzZUludChEYXRlLmV4dC5m
b3JtYXRzLmooZSksMTApO3ZhciBjPTctRGF0ZS5leHQuZm9ybWF0cy51KGUpO3ZhciBiPXBhcnNl
SW50KChhK2MpLzcsMTApO3JldHVybiBEYXRlLmV4dC51dGlsLnhQYWQoYiwwLDEwKX0seTpmdW5j
dGlvbihhKXtyZXR1cm4gRGF0ZS5leHQudXRpbC54UGFkKGEuZ2V0RnVsbFllYXIoKSUxMDAsMCl9
LFk6ImdldEZ1bGxZZWFyIix6OmZ1bmN0aW9uKGMpe3ZhciBiPWMuZ2V0VGltZXpvbmVPZmZzZXQo
KTt2YXIgYT1EYXRlLmV4dC51dGlsLnhQYWQocGFyc2VJbnQoTWF0aC5hYnMoYi82MCksMTApLDAp
O3ZhciBlPURhdGUuZXh0LnV0aWwueFBhZChiJTYwLDApO3JldHVybihiPjA/Ii0iOiIrIikrYStl
fSxaOmZ1bmN0aW9uKGEpe3JldHVybiBhLnRvU3RyaW5nKCkucmVwbGFjZSgvXi4qXCgoW14pXSsp
XCkkLywiJDEiKX0sIiUiOmZ1bmN0aW9uKGEpe3JldHVybiIlIn19O0RhdGUuZXh0LmFnZ3JlZ2F0
ZXM9e2M6ImxvY2FsZSIsRDoiJW0vJWQvJXkiLGg6IiViIixuOiJcbiIscjoiJUk6JU06JVMgJXAi
LFI6IiVIOiVNIix0OiJcdCIsVDoiJUg6JU06JVMiLHg6ImxvY2FsZSIsWDoibG9jYWxlIn07RGF0
ZS5leHQuYWdncmVnYXRlcy56PURhdGUuZXh0LmZvcm1hdHMueihuZXcgRGF0ZSgpKTtEYXRlLmV4
dC5hZ2dyZWdhdGVzLlo9RGF0ZS5leHQuZm9ybWF0cy5aKG5ldyBEYXRlKCkpO0RhdGUuZXh0LnVu
c3VwcG9ydGVkPXt9O0RhdGUucHJvdG90eXBlLnN0cmZ0aW1lPWZ1bmN0aW9uKGEpe2lmKCEodGhp
cy5sb2NhbGUgaW4gRGF0ZS5leHQubG9jYWxlcykpe2lmKHRoaXMubG9jYWxlLnJlcGxhY2UoLy1b
YS16QS1aXSskLywiIikgaW4gRGF0ZS5leHQubG9jYWxlcyl7dGhpcy5sb2NhbGU9dGhpcy5sb2Nh
bGUucmVwbGFjZSgvLVthLXpBLVpdKyQvLCIiKX1lbHNle3RoaXMubG9jYWxlPSJlbi1HQiJ9fXZh
ciBjPXRoaXM7d2hpbGUoYS5tYXRjaCgvJVtjRGhuclJ0VHhYelpdLykpe2E9YS5yZXBsYWNlKC8l
KFtjRGhuclJ0VHhYelpdKS9nLGZ1bmN0aW9uKGUsZCl7dmFyIGc9RGF0ZS5leHQuYWdncmVnYXRl
c1tkXTtyZXR1cm4oZz09ImxvY2FsZSI/RGF0ZS5leHQubG9jYWxlc1tjLmxvY2FsZV1bZF06Zyl9
KX12YXIgYj1hLnJlcGxhY2UoLyUoW2FBYkJDZGVnR0hJam1NcFBTdVVWd1d5WSVdKS9nLGZ1bmN0
aW9uKGUsZCl7dmFyIGc9RGF0ZS5leHQuZm9ybWF0c1tkXTtpZih0eXBlb2YoZyk9PSJzdHJpbmci
KXtyZXR1cm4gY1tnXSgpfWVsc2V7aWYodHlwZW9mKGcpPT0iZnVuY3Rpb24iKXtyZXR1cm4gZy5j
YWxsKGMsYyl9ZWxzZXtpZih0eXBlb2YoZyk9PSJvYmplY3QiJiZ0eXBlb2YoZ1swXSk9PSJzdHJp
bmciKXtyZXR1cm4gRGF0ZS5leHQudXRpbC54UGFkKGNbZ1swXV0oKSxnWzFdKX1lbHNle3JldHVy
biBkfX19fSk7Yz1udWxsO3JldHVybiBifTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9m
bGFraW5lc3NfZGFzaGJvYXJkLmh0bWwgYi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0
aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmNlNDM3
ZGUxZWMwZDUwZjkwMzViYmRlNGJmZmE3M2ZhYTQ1N2U0NQotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNo
Ym9hcmQuaHRtbApAQCAtMCwwICsxLDI1MTAgQEAKKzwhLS0gQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgoraW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KK3RoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CistLT4KKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisKKzxoZWFkPgorPHRpdGxlPkNocm9taXVt
L1dlYktpdCBUZXN0IEhpc3Rvcnk8L3RpdGxlPgorPHN0eWxlPgorYm9keSB7CisgICAgZm9udC1m
YW1pbHk6IGFyaWFsOworICAgIGZvbnQtc2l6ZTogMTNweDsKK30KK2gyIHsKKyAgICBmb250LXNp
emU6IDE2cHg7CisgICAgbWFyZ2luLWJvdHRvbTogLjI1ZW07Cit9CitoMyB7CisgICAgZm9udC1z
aXplOiAxM3B4OworICAgIG1hcmdpbjogMDsKK30KK2lucHV0IHsKKyAgICBtYXJnaW4tcmlnaHQ6
IDE1cHg7Cit9CitsYWJlbCB7CisgICAgcGFkZGluZy1sZWZ0OiAyZW07CisgICAgd2hpdGUtc3Bh
Y2U6IG5vd3JhcDsKK30KKy5mb3JtcyB7CisgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7Cit9Cisu
Zm9ybXMgPiAqIHsKKyAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKK30KKy5mb3JtcyBzcGFuIHsK
KyAgICBwYWRkaW5nOiAwcHggM3B4OworfQorI3Rlc3RzLWZvcm0geworICAgIGRpc3BsYXk6IC13
ZWJraXQtYm94OworICAgIC13ZWJraXQtYm94LWZsZXg6IDE7Cit9CisjdGVzdHMtZm9ybSA+ICog
eworICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OworfQorI3Rlc3RzLWlucHV0IHsKKyAgICBkaXNw
bGF5OiAtd2Via2l0LWJveDsKKyAgICAtd2Via2l0LWJveC1mbGV4OiAxOworfQorI3Jlc3VsdC1p
bnB1dCB7CisgICAgd2lkdGg6IDdlbTsKK30KKy50ZXN0LWxpbmsuYnVpbGRlci1uYW1lIHsKKyAg
ICB3aGl0ZS1zcGFjZTogbm93cmFwOworfQorLnRlc3QtbGluaywgLm9wdGlvbnMtY29udGFpbmVy
IHsKKyAgICBwYWRkaW5nOiAwIDJweDsKK30KKy50ZXN0LXRhYmxlIHsKKyAgICB3aGl0ZS1zcGFj
ZTogbm93cmFwOworICAgIGJvcmRlci1zcGFjaW5nOiAxcHg7Cit9CisvKiBMZXQgdGhlIGJ1Z3Mg
Y29sdW1uIHdyYXAuICovCisudGVzdC10YWJsZSB0ciA+IHRkOm50aC1jaGlsZCgyKSB7CisgICAg
d2hpdGUtc3BhY2U6IG5vcm1hbDsKK30KKy50ZXN0LXRhYmxlIHsKKyAgICB3aWR0aDogMTAwJTsK
K30KKy50ZXN0LXRhYmxlIHRyIHsKKyAgICBib3JkZXI6IDFweCBzb2xpZCByZWQ7CisgICAgYmFj
a2dyb3VuZC1jb2xvcjogI0U4RThFODsKK30KKy50ZXN0LXRhYmxlIHRib2R5IHRyOmhvdmVyIHsK
KyAgICBvcGFjaXR5OiAuNzsKK30KKy50ZXN0LXRhYmxlIHRoIHsKKyAgICAtd2Via2l0LXVzZXIt
c2VsZWN0OiBub25lOworICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7Cit9CisubGluaywgLnNv
cnRhYmxlIC5oZWFkZXItdGV4dCB7CisgICAgY29sb3I6IGJsdWU7CisgICAgdGV4dC1kZWNvcmF0
aW9uOiB1bmRlcmxpbmU7CisgICAgY3Vyc29yOiBwb2ludGVyOworfQorLnRhYmxlLWhlYWRlci1j
b250ZW50LAorLnRhYmxlLWhlYWRlci1jb250ZW50ICogeworICAgIGRpc3BsYXk6IC13ZWJraXQt
Ym94OworfQorLnRhYmxlLWhlYWRlci1jb250ZW50ICogeworICAgIC13ZWJraXQtYm94LWZsZXg6
IDE7CisgICAgY3Vyc29yOiBwb2ludGVyOworICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7Cit9Cisu
cmVzdWx0cyB7CisgICAgY3Vyc29yOiBwb2ludGVyOworICAgIHBhZGRpbmc6IDAgMXB4OworICAg
IGZvbnQtc2l6ZTogMTBweDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisjbGVnZW5kIHsK
KyAgICBwb3NpdGlvbjogZml4ZWQ7CisgICAgdG9wOiA1cHg7CisgICAgcmlnaHQ6IDVweDsKKyAg
ICB3aWR0aDogNDAwcHg7CisgICAgcGFkZGluZzogMnB4OworICAgIGJvcmRlcjogMnB4IHNvbGlk
IGdyZXk7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgei1pbmRleDogMTsKK30K
KyNsZWdlbmQgdWwsICNsZWdlbmQgb2wgeworICAgIG1hcmdpbi10b3A6IDA7CisgICAgbWFyZ2lu
LWJvdHRvbTogNXB4OworfQorI2xlZ2VuZC1jb250ZW50cyAqIHsKKyAgICBtYXJnaW46IDNweCAw
OworICAgIHBhZGRpbmc6IDAgMnB4OworICAgIGZsb2F0OiBsZWZ0OworICAgIGJvcmRlcjogMXB4
IHNvbGlkIGdyZXk7Cit9CisudGVzdC10YWJsZSAud3JvbmctZXhwZWN0YXRpb25zLAorLndyb25n
LWV4cGVjdGF0aW9ucyB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI3Bpbms7Cit9CisuUCB7Cisg
ICAgYmFja2dyb3VuZC1jb2xvcjogIzhmZGY1ZjsKK30KKy5OIHsKKyAgICBiYWNrZ3JvdW5kLWNv
bG9yOiAjZmZmOworfQorLkMgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmMzNDM7Cit9Cisu
VCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmM2YzsKK30KKy5JIHsKKyAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiAjNjlmOworfQorLlMgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNjNmM7Cit9
CisuRiB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2U5ODA4MDsKK30KKy5PIHsKKyAgICBiYWNr
Z3JvdW5kLWNvbG9yOiAjOGE3NzAwOworfQorLlogeworICAgIGJhY2tncm91bmQtY29sb3I6ICM5
NmY7Cit9CisjbGVnZW5kIC5tZXJnZSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7Cisg
ICAgY29sb3I6IHdoaXRlOworfQorLnRlc3QtdGFibGUgLm1lcmdlIHsKKyAgICBib3JkZXItcmln
aHQ6IHNvbGlkIDJweCAjMDAwOworICAgIHBhZGRpbmctcmlnaHQ6IDA7Cit9Cisuc2VwYXJhdG9y
IHsKKyAgICBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyYXk7CisgICAgaGVpZ2h0OiAwcHg7Cit9
CisjcGFzc2luZy10ZXN0cywKKyNza2lwcGVkLXRlc3RzIHsKKyAgICAtd2Via2l0LWNvbHVtbi1j
b3VudDogMzsKKyAgICAtd2Via2l0LWNvbHVtbi1nYXA6IDI1cHg7CisgICAgLXdlYmtpdC1jb2x1
bW4tcnVsZTogMXB4IGRhc2hlZCBibGFjazsKKyAgICAtbW96LWNvbHVtbi1jb3VudDogMzsKKyAg
ICAtbW96LWNvbHVtbi1nYXA6IDI1cHg7CisgICAgLW1vei1jb2x1bW4tcnVsZTogMXB4IGRhc2hl
ZCBibGFjazsKK30KKy5ub3QtZm91bmQgeworICAgIGNvbG9yOiByZWQ7CisgICAgZm9udC1zaXpl
OiBsYXJnZTsKK30KKyNsb2FkaW5nLXVpIHsKKyAgICBwb3NpdGlvbjogZml4ZWQ7CisgICAgdG9w
OiAwOworICAgIGxlZnQ6IDA7CisgICAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OworICAgIHBh
ZGRpbmc6IDVweDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgZm9udC13ZWlnaHQ6IGJv
bGQ7Cit9CisjcG9wdXAgeworICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworICAgIHotaW5k
ZXg6IDE7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGJvcmRlcjogM3B4IHNvbGlkIGdy
ZXk7CisgICAgcGFkZGluZzogM3B4OworICAgIC13ZWJraXQtYm94LXNoYWRvdzogNXB4IDVweCA1
cHggcmdiYSgwLCAwLCAwLCAwLjUpOworICAgIC1tb3otYm94LXNoYWRvdzogNXB4IDVweCA1cHgg
cmdiYSgwLCAwLCAwLCAwLjUpOworICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4OworICAg
IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OworfQorI3BvcHVwID4gdWwgeworICAgIG1hcmdpbjog
MDsKKyAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7Cit9CisuZXhwZWN0YXRpb25zLWNvbnRhaW5lciB7
CisgICAgY2xlYXI6IGJvdGg7Cit9CisuZXhwZWN0YXRpb25zLWl0ZW0geworICAgIGZsb2F0OiBs
ZWZ0OworICAgIGJvcmRlcjogMXB4IHNvbGlkIGdyZXk7CisgICAgZGlzcGxheTogLXdlYmtpdC1i
b3g7CisgICAgZGlzcGxheTogLW1vei1ib3g7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAg
IC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7CisgICAgLW1vei1ib3gtb3JpZW50OiB2ZXJ0
aWNhbDsKK30KKy5leHBlY3RhdGlvbnMtaXRlbSAuZXhwZWN0YXRpb24geworICAgIHdpZHRoOiA0
MDBweDsKKyAgICBoZWlnaHQ6IDMwMHB4OworICAgIGJvcmRlcjogMDsKKyAgICBib3JkZXItdG9w
OiAxcHggc29saWQgZ3JleTsKKyAgICBvdmVyZmxvdzogYXV0bzsKKyAgICBkaXNwbGF5OiAtd2Vi
a2l0LWJveDsKKyAgICBkaXNwbGF5OiAtbW96LWJveDsKKyAgICAtd2Via2l0LWJveC1mbGV4OiAx
OworICAgIC1tb3otYm94LWZsZXg6IDE7Cit9CitwcmUuZXhwZWN0YXRpb24geworICAgIHBhZGRp
bmc6IDhweDsKKyAgICBtYXJnaW46IDA7CisgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKK30K
Ky5leHBlY3RhdGlvbnMtaXRlbSAubGFyZ2UgeworICAgIHdpZHRoOiA4MDBweDsKKyAgICBoZWln
aHQ6IDYwMHB4OworfQorLm5vbi13ZWJraXQtcmVzdWx0cyB7CisgICAgd2lkdGg6IDk5JTsKK30K
Ky51c2VkLXBsYXRmb3JtIHsKKyAgICBmbG9hdDogcmlnaHQ7CisgICAgY29sb3I6IGRhcmtibHVl
OworICAgIG1hcmdpbjogMCA1cHg7Cit9CisuZXhwZWN0YXRpb25zLXRpdGxlIHsKKyAgICAvKiBI
YWNrIHRvIG1ha2UgYSBjb250YWluaW5nIGJsb2NrIGZvciBhYnNvbHV0ZSBwb3NpdGlvbmVkIGVs
ZW1lbnRzLiAqLworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBjbGVhcjogYm90aDsKK30K
Ky50aXRsZSB7CisgICAgLyogUG9zaXRpb24gYWJzb2x1dGVseSBzbyB0aGUgY29udGFpbmVyIGRv
ZXMgbm90IGdyb3cgdG8gY29udGFpbiB0aGlzLiAqLworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
K30KKy5wbGF0Zm9ybXMgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsK
KyAgICB6LWluZGV4OiAxOworfQorLmZpbGUtYnVnIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsK
KyAgICBmb250LXNpemU6IDExcHg7Cit9CisucG5nY2hlY2tzdW0geworICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICBib3R0b206IDA7CisgICAgYmFja2dyb3VuZC1j
b2xvcjogI2ZmZmZjODsKKyAgICB2aXNpYmlsaXR5OiBoaWRkZW47Cit9CisuZXhwZWN0YXRpb25z
LWl0ZW06aG92ZXIgLnBuZ2NoZWNrc3VtIHsKKyAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOworfQor
PC9zdHlsZT4KKworPHNjcmlwdCBzcmM9ImJ1aWxkZXJzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJkYXNoYm9hcmRfYmFzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisvLyBDT05TVEFOVFMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordmFyIEFMTCA9
ICdBTEwnOwordmFyIEZPUldBUkQgPSAnZm9yd2FyZCc7Cit2YXIgQkFDS1dBUkQgPSAnYmFja3dh
cmQnOwordmFyIEdURVNUX01PRElGSUVSUyA9IFsnRkxBS1knLCAnRkFJTFMnLCAnTUFZQkUnLCAn
RElTQUJMRUQnXTsKK3ZhciBURVNUX1VSTF9CQVNFX1BBVEhfVFJBQyA9ICdodHRwOi8vdHJhYy53
ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvTGF5b3V0VGVzdHMvJzsKK3ZhciBURVNUX1VSTF9CQVNF
X1BBVEggPSAiaHR0cDovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rL0xh
eW91dFRlc3RzLyI7Cit2YXIgVEVTVF9SRVNVTFRTX0JBU0VfUEFUSCA9ICdodHRwOi8vYnVpbGQu
Y2hyb21pdW0ub3JnL2YvY2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0cy8nOworCisvLyBGSVhN
RTogVGhlc2UgcGxhdGZvcm0gbmFtZXMgc2hvdWxkIHByb2JhYmx5IGJlIGNoYW5nZWQgdG8gbWF0
Y2ggdGhlIGRpcmVjdG9yaWVzIGluIExheW91dFRlc3RzL3BsYXRmb3JtCisvLyBpbnN0ZWFkIG9m
IG1hdGNoaW5nIHRoZSB2YWx1ZXMgd2UgdXNlIGluIHRoZSB0ZXN0X2V4cGVjdGF0aW9ucy50eHQg
ZmlsZS4KK3ZhciBQTEFURk9STVMgPSBbJ1NOT1dMRU9QQVJEJywgJ0xFT1BBUkQnLCAnWFAnLCAn
VklTVEEnLCAnV0lONycsICdMVUNJRCcsICdBUFBMRV9MRU9QQVJEJywgJ0FQUExFX1NOT1dMRU9Q
QVJEJywgJ0FQUExFX1hQJywgJ0FQUExFX1dJTjcnLCAnR1RLX0xJTlVYJywgJ1FUX0xJTlVYJ107
Cit2YXIgUExBVEZPUk1fVU5JT05TID0geworICAgICdNQUMnOiBbJ0xFT1BBUkQnLCAnU05PV0xF
T1BBUkQnXSwKKyAgICAnV0lOJzogWydYUCcsICdWSVNUQScsICdXSU43J10sCisgICAgJ0xJTlVY
JzogWydMVUNJRCddCit9CisKKy8vIEZJWE1FOiBNYWtlIHRoZSBnX2FsbEV4cGVjdGF0aW9ucyBk
YXRhIHN0cnVjdHVyZSBleHBsaWNpdGx5IGxpc3QgZXZlcnkgcGxhdGZvcm0gaW5zdGVhZCBvZiBo
YXZpbmcgYSBmYWxsYmFja3MgY29uY2VwdC4KK3ZhciBQTEFURk9STV9GQUxMQkFDS1MgPSB7Cisg
ICAgJ1dJTic6ICdBTEwnLAorICAgICdYUCc6ICdXSU4nLAorICAgICdWSVNUQSc6ICdXSU4nLAor
ICAgICdNQUMnOiAnQUxMJywKKyAgICAnU05PV0xFT1BBUkQnOiAnTUFDJywKKyAgICAnTEVPUEFS
RCc6ICdNQUMnLAorICAgICdMSU5VWCc6ICdBTEwnLAorICAgICdMVUNJRCc6ICdMSU5VWCcKK307
Cit2YXIgQlVJTERfVFlQRVMgPSB7J0RFQlVHJzogJ0RCRycsICdSRUxFQVNFJzogJ1JFTEVBU0Un
fTsKK3ZhciBNSU5fU0VDT05EU19GT1JfU0xPV19URVNUID0gNDsKK3ZhciBNSU5fU0VDT05EU19G
T1JfU0xPV19URVNUX0RFQlVHID0gMiAqIE1JTl9TRUNPTkRTX0ZPUl9TTE9XX1RFU1Q7Cit2YXIg
RkFJTF9SRVNVTFRTID0gWydJTUFHRScsICdJTUFHRStURVhUJywgJ1RFWFQnLCAnTUlTU0lORydd
OwordmFyIENIVU5LX1NJWkUgPSAyNTsKK3ZhciBNQVhfUkVTVUxUUyA9IDE1MDA7CisKKy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworLy8gTWV0aG9kcyBhbmQgb2JqZWN0cyBmcm9tIGRhc2hib2FyZF9i
YXNlLmpzIHRvIG92ZXJyaWRlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitmdW5jdGlvbiBnZW5l
cmF0ZVBhZ2UoKQoreworICAgIGlmIChnX2N1cnJlbnRTdGF0ZS51c2VUZXN0RGF0YSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdXBkYXRlRGVmYXVsdEJ1aWxkZXJTdGF0ZSgpOworICAgIGRvY3Vt
ZW50LmJvZHkuaW5uZXJIVE1MID0gJzxkaXYgaWQ9ImxvYWRpbmctdWkiPkxPQURJTkcuLi48L2Rp
dj4nOworICAgIHNob3dFcnJvcnMoKTsKKworICAgIC8vIHRlc3RzIGV4cGFuZHMgdG8gYWxsIHRl
c3RzIHRoYXQgbWF0Y2ggdGhlIENTViBsaXN0LgorICAgIC8vIHJlc3VsdCBleHBhbmRzIHRvIGFs
bCB0ZXN0cyB0aGF0IGV2ZXIgaGF2ZSB0aGUgZ2l2ZW4gcmVzdWx0CisgICAgaWYgKGdfY3VycmVu
dFN0YXRlLnRlc3RzIHx8IGdfY3VycmVudFN0YXRlLnJlc3VsdCkKKyAgICAgICAgZ2VuZXJhdGVQ
YWdlRm9ySW5kaXZpZHVhbFRlc3RzKGluZGl2aWR1YWxUZXN0cygpKTsKKyAgICBlbHNlIGlmIChn
X2N1cnJlbnRTdGF0ZS5leHBlY3RhdGlvbnNVcGRhdGUpCisgICAgICAgIGdlbmVyYXRlUGFnZUZv
ckV4cGVjdGF0aW9uc1VwZGF0ZSgpOworICAgIGVsc2UKKyAgICAgICAgZ2VuZXJhdGVQYWdlRm9y
QnVpbGRlcihnX2N1cnJlbnRTdGF0ZS5idWlsZGVyKTsKKworICAgIGZvciAodmFyIGJ1aWxkZXIg
aW4gZ19idWlsZGVycykKKyAgICAgICAgcHJvY2Vzc1Rlc3RSZXN1bHRzRm9yQnVpbGRlckFzeW5j
KGJ1aWxkZXIpOworfQorCitmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2
YWx1ZSkKK3sKKyAgICBzd2l0Y2goa2V5KSB7CisgICAgY2FzZSAndGVzdHMnOgorICAgICAgICB2
YWxpZGF0ZVBhcmFtZXRlcihnX2N1cnJlbnRTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgICAg
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkTmFtZSh2YWx1ZSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlICdyZXN1
bHQnOgorICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvVXBwZXJDYXNlKCk7CisgICAgICAgIHZhbGlk
YXRlUGFyYW1ldGVyKGdfY3VycmVudFN0YXRlLCBrZXksIHZhbHVlLAorICAgICAgICAgICAgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgcmVzdWx0IGluIExBWU9VVF9URVNU
X0VYUEVDVEFUSU9OU19NQVBfKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBM
QVlPVVRfVEVTVF9FWFBFQ1RBVElPTlNfTUFQX1tyZXN1bHRdKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGNhc2UgJ2J1aWxkZXInOgorICAgICAgICB2YWxpZGF0ZVBhcmFtZXRlcihnX2N1cnJlbnRTdGF0
ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZSBpbiBnX2J1aWxkZXJzOworICAgICAgICAgICAgfSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgY2FzZSAnc29ydENvbHVtbic6CisgICAgICAgIHZhbGlkYXRlUGFy
YW1ldGVyKGdfY3VycmVudFN0YXRlLCBrZXksIHZhbHVlLAorICAgICAgICAgICAgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgLy8gR2V0IGFsbCBwb3NzaWJsZSBoZWFkZXJzIHNpbmNlIHRo
ZSBhY3R1YWwgdXNlZCBzZXQgb2YgaGVhZGVycworICAgICAgICAgICAgICAgIC8vIGRlcGVuZHMg
b24gdGhlIHZhbHVlcyBpbiBnX2N1cnJlbnRTdGF0ZSwgd2hpY2ggYXJlIGN1cnJlbnRseSBiZWlu
ZyBzZXQuCisgICAgICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSB0YWJsZUhlYWRlcnModHJ1ZSk7
CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBzb3J0Q29sdW1uRnJvbVRhYmxl
SGVhZGVyKGhlYWRlcnNbaV0pKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSAndGVz
dCcgfHwgdmFsdWUgPT0gJ2J1aWxkZXInOworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgY2FzZSAnc29ydE9yZGVyJzoKKyAgICAgICAgdmFsaWRhdGVQYXJhbWV0
ZXIoZ19jdXJyZW50U3RhdGUsIGtleSwgdmFsdWUsCisgICAgICAgICAgICBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gRk9SV0FSRCB8fCB2YWx1ZSA9PSBCQUNL
V0FSRDsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2Ug
J3Jlc3VsdHNIZWlnaHQnOgorICAgIGNhc2UgJ3VwZGF0ZUluZGV4JzoKKyAgICBjYXNlICdyZXZp
c2lvbic6CisgICAgICAgIHZhbGlkYXRlUGFyYW1ldGVyKGdfY3VycmVudFN0YXRlLCBrZXksIE51
bWJlcih2YWx1ZSksCisgICAgICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUubWF0Y2goL15cZCskLyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBjYXNlICdzaG93Q29ycmVjdEV4cGVjdGF0aW9ucyc6CisgICAgY2Fz
ZSAnc2hvd1dyb25nRXhwZWN0YXRpb25zJzoKKyAgICBjYXNlICdzaG93RXhwZWN0YXRpb25zJzoK
KyAgICBjYXNlICdzaG93Rmxha3knOgorICAgIGNhc2UgJ3Nob3dMYXJnZUV4cGVjdGF0aW9ucyc6
CisgICAgY2FzZSAnbGVnYWN5RXhwZWN0YXRpb25zU2VtYW50aWNzJzoKKyAgICBjYXNlICdzaG93
U2tpcHBlZCc6CisgICAgY2FzZSAnc2hvd1Nsb3cnOgorICAgIGNhc2UgJ3Nob3dVbmV4cGVjdGVk
UGFzc2VzJzoKKyAgICBjYXNlICdzaG93V29udEZpeFNraXAnOgorICAgIGNhc2UgJ2V4cGVjdGF0
aW9uc1VwZGF0ZSc6CisgICAgICAgIGdfY3VycmVudFN0YXRlW2tleV0gPSB2YWx1ZSA9PSAndHJ1
ZSc7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworZ19kZWZhdWx0U3RhdGVWYWx1ZXMgPSB7CisgICAgc29ydE9y
ZGVyOiBCQUNLV0FSRCwKKyAgICBzb3J0Q29sdW1uOiAnZmxha2luZXNzJywKKyAgICBzaG93RXhw
ZWN0YXRpb25zOiBmYWxzZSwKKyAgICBzaG93Rmxha3k6IHRydWUsCisgICAgc2hvd0xhcmdlRXhw
ZWN0YXRpb25zOiBmYWxzZSwKKyAgICBsZWdhY3lFeHBlY3RhdGlvbnNTZW1hbnRpY3M6IHRydWUs
CisgICAgc2hvd0NvcnJlY3RFeHBlY3RhdGlvbnM6ICFpc0xheW91dFRlc3RSZXN1bHRzKCksCisg
ICAgc2hvd1dyb25nRXhwZWN0YXRpb25zOiAhaXNMYXlvdXRUZXN0UmVzdWx0cygpLAorICAgIHNo
b3dXb250Rml4U2tpcDogIWlzTGF5b3V0VGVzdFJlc3VsdHMoKSwKKyAgICBzaG93U2xvdzogIWlz
TGF5b3V0VGVzdFJlc3VsdHMoKSwKKyAgICBzaG93U2tpcHBlZDogIWlzTGF5b3V0VGVzdFJlc3Vs
dHMoKSwKKyAgICBzaG93VW5leHBlY3RlZFBhc3NlczogIWlzTGF5b3V0VGVzdFJlc3VsdHMoKSwK
KyAgICBleHBlY3RhdGlvbnNVcGRhdGU6IGZhbHNlLAorICAgIHVwZGF0ZUluZGV4OiAwLAorICAg
IGJ1aWxkZXI6IGdfZGVmYXVsdEJ1aWxkZXJOYW1lLAorICAgIHJlc3VsdHNIZWlnaHQ6IDMwMCwK
KyAgICByZXZpc2lvbjogbnVsbAorfTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBHTE9C
QUxTCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordmFyIGdfcGVyQnVpbGRlclBsYXRmb3JtQW5k
QnVpbGRUeXBlID0ge307Cit2YXIgZ19wZXJCdWlsZGVyRmFpbHVyZXMgPSB7fTsKKy8vIE1hcCBv
ZiBidWlsZGVyIHRvIGFycmF5cyBvZiB0ZXN0cyB0aGF0IGFyZSBsaXN0ZWQgaW4gdGhlIGV4cGVj
dGF0aW9ucyBmaWxlCisvLyBidXQgaGF2ZSBmb3IgdGhhdCBidWlsZGVyLgordmFyIGdfcGVyQnVp
bGRlcldpdGhFeHBlY3RhdGlvbnNCdXROb0ZhaWx1cmVzID0ge307CisvLyBNYXAgb2YgYnVpbGRl
ciB0byBhcnJheXMgb2YgcGF0aHMgdGhhdCBhcmUgc2tpcHBlZC4gVGhpcyBzaG93cyB0aGUgcmF3
CisvLyBwYXRoIHVzZWQgaW4gdGVzdF9leHBlY3RhdGlvbnMudHh0IHJhdGhlciB0aGFuIHRoZSB0
ZXN0IHBhdGggc2luY2Ugd2UKKy8vIGRvbid0IGFjdHVhbGx5IGhhdmUgYW55IGRhdGEgaGVyZSBm
b3Igc2tpcHBlZCB0ZXN0cy4KK3ZhciBnX3BlckJ1aWxkZXJTa2lwcGVkUGF0aHMgPSB7fTsKKy8v
IE1hcHMgdGVzdCBwYXRoIHRvIGFuIGFycmF5IG9mIHtidWlsZGVyLCB0ZXN0UmVzdWx0c30gb2Jq
ZWN0cy4KK3ZhciBnX3Rlc3RUb1Jlc3VsdHNNYXAgPSB7fTsKKy8vIFRlc3RzIHRoYXQgdGhlIHVz
ZXIgd2FudHMgdG8gdXBkYXRlIGV4cGVjdGF0aW9ucyBmb3IuCit2YXIgZ19jb25maXJtZWRUZXN0
cyA9IHt9OworCitmdW5jdGlvbiBjcmVhdGVSZXN1bHRzT2JqZWN0Rm9yVGVzdCh0ZXN0LCBidWls
ZGVyKQoreworICAgIHJldHVybiB7CisgICAgICAgIHRlc3Q6IHRlc3QsCisgICAgICAgIGJ1aWxk
ZXI6IGJ1aWxkZXIsCisgICAgICAgIC8vIEhUTUwgZm9yIGRpc3BsYXkgb2YgdGhlIHJlc3VsdHMg
aW4gdGhlIGZsYWtpbmVzcyBjb2x1bW4KKyAgICAgICAgaHRtbDogJycsCisgICAgICAgIGZsaXBz
OiAwLAorICAgICAgICBzbG93ZXN0VGltZTogMCwKKyAgICAgICAgc2xvd2VzdE5vblRpbWVvdXRD
cmFzaFRpbWU6IDAsCisgICAgICAgIG1lZXRzRXhwZWN0YXRpb25zOiB0cnVlLAorICAgICAgICBp
c1dvbnRGaXhTa2lwOiBmYWxzZSwKKyAgICAgICAgaXNGbGFreTogZmFsc2UsCisgICAgICAgIC8v
IFNvcnRlZCBzdHJpbmcgb2YgbWlzc2luZyBleHBlY3RhdGlvbnMKKyAgICAgICAgbWlzc2luZzog
JycsCisgICAgICAgIC8vIFN0cmluZyBvZiBleHRyYSBleHBlY3RhdGlvbnMgKGkuZS4gZXhwZWN0
YXRpb25zIHRoYXQgbmV2ZXIgb2NjdXIpLgorICAgICAgICBleHRyYTogJycsCisgICAgICAgIG1v
ZGlmaWVyczogJycsCisgICAgICAgIGV4cGVjdGF0aW9ucyA6ICcnLAorICAgICAgICByYXdSZXN1
bHRzOiAnJywKKyAgICAgICAgcGVyY2VudEZhaWxlZDogMCwKKyAgICAgICAgLy8gTGlzdCBvZiBh
bGwgdGhlIHJlc3VsdHMgdGhlIHRlc3QgYWN0dWFsbHkgaGFzLgorICAgICAgICBhY3R1YWxSZXN1
bHRzOiBbXQorICAgIH07Cit9CisKK2Z1bmN0aW9uIG1hdGNoaW5nRWxlbWVudChzdHJpbmdUb01h
dGNoLCBlbGVtZW50c01hcCkKK3sKKyAgICBmb3IgKHZhciBlbGVtZW50IGluIGVsZW1lbnRzTWFw
KSB7CisgICAgICAgIGlmIChzdHJpbmdDb250YWlucyhzdHJpbmdUb01hdGNoLCBlbGVtZW50c01h
cFtlbGVtZW50XSkpCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9Cit9CisKK2Z1
bmN0aW9uIG5vbkNocm9taXVtUGxhdGZvcm0oYnVpbGRlck5hbWVVcHBlckNhc2UpCit7CisgICAg
aWYgKHN0cmluZ0NvbnRhaW5zKGJ1aWxkZXJOYW1lVXBwZXJDYXNlLCAnU05PV0xFT1BBUkQnKSkK
KyAgICAgICAgcmV0dXJuICdBUFBMRV9TTk9XTEVPUEFSRCc7CisgICAgaWYgKHN0cmluZ0NvbnRh
aW5zKGJ1aWxkZXJOYW1lVXBwZXJDYXNlLCAnTEVPUEFSRCcpKQorICAgICAgICByZXR1cm4gJ0FQ
UExFX0xFT1BBUkQnOworICAgIGlmIChzdHJpbmdDb250YWlucyhidWlsZGVyTmFtZVVwcGVyQ2Fz
ZSwgJ1dJTkRPV1MgNycpKQorICAgICAgICByZXR1cm4gJ0FQUExFX1dJTjcnOworICAgIGlmIChz
dHJpbmdDb250YWlucyhidWlsZGVyTmFtZVVwcGVyQ2FzZSwgJ1dJTkRPV1MgWFAnKSkKKyAgICAg
ICAgcmV0dXJuICdBUFBMRV9YUCc7CisgICAgaWYgKHN0cmluZ0NvbnRhaW5zKGJ1aWxkZXJOYW1l
VXBwZXJDYXNlLCAnR1RLIExJTlVYJykpCisgICAgICAgIHJldHVybiAnR1RLX0xJTlVYJzsKKyAg
ICBpZiAoc3RyaW5nQ29udGFpbnMoYnVpbGRlck5hbWVVcHBlckNhc2UsICdRVCBMSU5VWCcpKQor
ICAgICAgICByZXR1cm4gJ1FUX0xJTlVYJzsKK30KKworZnVuY3Rpb24gY2hyb21pdW1QbGF0Zm9y
bShidWlsZGVyTmFtZVVwcGVyQ2FzZSkKK3sKKyAgICBpZiAoc3RyaW5nQ29udGFpbnMoYnVpbGRl
ck5hbWVVcHBlckNhc2UsICdNQUMnKSkgeworICAgICAgICBpZiAoc3RyaW5nQ29udGFpbnMoYnVp
bGRlck5hbWVVcHBlckNhc2UsICcxMC41JykpCisgICAgICAgICAgICByZXR1cm4gJ0xFT1BBUkQn
OworICAgICAgICByZXR1cm4gJ1NOT1dMRU9QQVJEJzsKKyAgICB9CisgICAgaWYgKHN0cmluZ0Nv
bnRhaW5zKGJ1aWxkZXJOYW1lVXBwZXJDYXNlLCAnV0lONycpKQorICAgICAgICByZXR1cm4gJ1dJ
TjcnOworICAgIGlmIChzdHJpbmdDb250YWlucyhidWlsZGVyTmFtZVVwcGVyQ2FzZSwgJ1ZJU1RB
JykpCisgICAgICAgIHJldHVybiAnVklTVEEnOworICAgIGlmIChzdHJpbmdDb250YWlucyhidWls
ZGVyTmFtZVVwcGVyQ2FzZSwgJ1dJTicpIHx8IHN0cmluZ0NvbnRhaW5zKGJ1aWxkZXJOYW1lVXBw
ZXJDYXNlLCAnWFAnKSkKKyAgICAgICAgcmV0dXJuICdYUCc7CisgICAgaWYgKHN0cmluZ0NvbnRh
aW5zKGJ1aWxkZXJOYW1lVXBwZXJDYXNlLCAnTElOVVgnKSkKKyAgICAgICAgcmV0dXJuICdMVUNJ
RCc7CisgICAgLy8gVGhlIGludGVyYWN0aXZlIGJvdCBpcyBYUCwgYnV0IGRvZXNuJ3QgaGF2ZSBh
biBPUyBpbiBpdCdzIG5hbWUuCisgICAgaWYgKHN0cmluZ0NvbnRhaW5zKGJ1aWxkZXJOYW1lVXBw
ZXJDYXNlLCAnSU5URVJBQ1RJVkUnKSkKKyAgICAgICAgcmV0dXJuICdYUCc7Cit9CisKKworZnVu
Y3Rpb24gcGxhdGZvcm1BbmRCdWlsZFR5cGUoYnVpbGRlck5hbWUpCit7CisgICAgaWYgKCFnX3Bl
ckJ1aWxkZXJQbGF0Zm9ybUFuZEJ1aWxkVHlwZVtidWlsZGVyTmFtZV0pIHsKKyAgICAgICAgdmFy
IGJ1aWxkZXJOYW1lVXBwZXJDYXNlID0gYnVpbGRlck5hbWUudG9VcHBlckNhc2UoKTsKKyAgICAg
ICAgCisgICAgICAgIHZhciBwbGF0Zm9ybSA9ICcnOworICAgICAgICBpZiAoaXNMYXlvdXRUZXN0
UmVzdWx0cygpICYmIGdfY3VycmVudFN0YXRlLmdyb3VwID09ICdAVG9UIC0gd2Via2l0Lm9yZycg
JiYgIXN0cmluZ0NvbnRhaW5zKGJ1aWxkZXJOYW1lVXBwZXJDYXNlLCAnQ0hST01JVU0nKSkKKyAg
ICAgICAgICAgIHBsYXRmb3JtID0gbm9uQ2hyb21pdW1QbGF0Zm9ybShidWlsZGVyTmFtZVVwcGVy
Q2FzZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBsYXRmb3JtID0gY2hyb21pdW1QbGF0
Zm9ybShidWlsZGVyTmFtZVVwcGVyQ2FzZSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXBsYXRm
b3JtKQorICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHJlc29sdmUgcGxhdGZv
cm0gZm9yIGJ1aWxkZXI6ICcgKyBidWlsZGVyTmFtZSk7CisKKyAgICAgICAgdmFyIGJ1aWxkVHlw
ZSA9IHN0cmluZ0NvbnRhaW5zKGJ1aWxkZXJOYW1lVXBwZXJDYXNlLCAnREJHJykgfHwgc3RyaW5n
Q29udGFpbnMoYnVpbGRlck5hbWVVcHBlckNhc2UsICdERUJVRycpID8gJ0RFQlVHJyA6ICdSRUxF
QVNFJzsKKyAgICAgICAgZ19wZXJCdWlsZGVyUGxhdGZvcm1BbmRCdWlsZFR5cGVbYnVpbGRlck5h
bWVdID0ge3BsYXRmb3JtOiBwbGF0Zm9ybSwgYnVpbGRUeXBlOiBidWlsZFR5cGV9OworICAgIH0K
KyAgICByZXR1cm4gZ19wZXJCdWlsZGVyUGxhdGZvcm1BbmRCdWlsZFR5cGVbYnVpbGRlck5hbWVd
OworfQorCitmdW5jdGlvbiBpc0RlYnVnKGJ1aWxkZXJOYW1lKQoreworICAgIHJldHVybiBwbGF0
Zm9ybUFuZEJ1aWxkVHlwZShidWlsZGVyTmFtZSkuYnVpbGRUeXBlID09ICdERUJVRyc7Cit9CisK
Ky8vIFJldHVybnMgdGhlIGV4cGVjdGF0aW9uIHN0cmluZyBmb3IgdGhlIGdpdmVuIHNpbmdsZSBj
aGFyYWN0ZXIgcmVzdWx0LgorLy8gVGhpcyBzdHJpbmcgc2hvdWxkIG1hdGNoIHRoZSBleHBlY3Rh
dGlvbnMgdGhhdCBhcmUgcHV0IGludG8KKy8vIHRlc3RfZXhwZWN0YXRpb25zLnB5LgorLy8KKy8v
IEZvciBleGFtcGxlLCBpZiB3ZSBzdGFydCBleHBsaWNpdGx5IGxpc3RpbmcgSU1BR0UgcmVzdWx0
IGZhaWx1cmVzLAorLy8gdGhpcyBmdW5jdGlvbiBzaG91bGQgc3RhcnQgcmV0dXJuaW5nICdJTUFH
RScuCitmdW5jdGlvbiBleHBlY3RhdGlvbnNGaWxlU3RyaW5nRm9yUmVzdWx0KHJlc3VsdCkKK3sK
KyAgICAvLyBGb3IgdGhlIHB1cnBvc2VzIG9mIGNvbXBhcmluZyBhZ2FpbnN0IHRoZSBleHBlY2F0
aW9ucyBvZiBhIHRlc3QsCisgICAgLy8gY29uc2lkZXIgc2ltcGxpZmllZCBkaWZmIGZhaWx1cmVz
IGFzIGp1c3QgdGV4dCBmYWlsdXJlcyBzaW5jZQorICAgIC8vIHRoZSB0ZXN0X2V4cGVjdGF0aW9u
cyBmaWxlIGRvZXNuJ3QgdHJlYXQgdGhlbSBzcGVjaWFsbHkuCisgICAgaWYgKHJlc3VsdCA9PSAn
UycpCisgICAgICAgIHJldHVybiAnVEVYVCc7CisKKyAgICBpZiAocmVzdWx0ID09ICdOJykKKyAg
ICAgICAgcmV0dXJuICcnOworCisgICAgcmV0dXJuIGV4cGVjdGF0aW9uc01hcCgpW3Jlc3VsdF07
Cit9CisKKy8vIE1hcCBvZiBhbGwgdGVzdHMgdG8gdHJ1ZSB2YWx1ZXMuIFRoaXMgaXMganVzdCBz
byB3ZSBjYW4gaGF2ZSB0aGUgbGlzdCBvZgorLy8gYWxsIHRlc3RzIGFjcm9zcyBhbGwgdGhlIGJ1
aWxkZXJzLgordmFyIGdfYWxsVGVzdHM7CisKKy8vIFJldHVybnMgYSBtYXAgb2YgYWxsIHRlc3Rz
IHRvIHRydWUgdmFsdWVzLiBUaGlzIGlzIGp1c3Qgc28gd2UgY2FuIGhhdmUgdGhlCisvLyBsaXN0
IG9mIGFsbCB0ZXN0cyBhY3Jvc3MgYWxsIHRoZSBidWlsZGVycy4KK2Z1bmN0aW9uIGdldEFsbFRl
c3RzKCkKK3sKKyAgICBpZiAoIWdfYWxsVGVzdHMpIHsKKyAgICAgICAgZ19hbGxUZXN0cyA9IHt9
OworICAgICAgICBmb3IgKHZhciBidWlsZGVyIGluIGdfYnVpbGRlcnMpCisgICAgICAgICAgICBh
ZGRUZXN0c0ZvckJ1aWxkZXIoYnVpbGRlciwgZ19hbGxUZXN0cyk7CisgICAgfQorICAgIHJldHVy
biBnX2FsbFRlc3RzOworfQorCisvLyBSZXR1cm5zIGFuIGFycmF5IG9mIHRlc3RzIHRvIGJlIGRp
c3BsYXllZCBpbiB0aGUgaW5kaXZpZHVhbCB0ZXN0cyB2aWV3LgorLy8gTm90ZSB0aGF0IGEgZGly
ZWN0b3J5IGNhbiBiZSBsaXN0ZWQgYXMgYSB0ZXN0LCBzbyB3ZSBleHBhbmQgdGhhdCBpbnRvIGFs
bAorLy8gdGVzdHMgaW4gdGhlIGRpcmVjdG9yeS4KK2Z1bmN0aW9uIGluZGl2aWR1YWxUZXN0cygp
Cit7CisgICAgaWYgKGdfY3VycmVudFN0YXRlLnJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGFsbFRl
c3RzV2l0aFJlc3VsdChnX2N1cnJlbnRTdGF0ZS5yZXN1bHQpOworCisgICAgaWYgKCFnX2N1cnJl
bnRTdGF0ZS50ZXN0cykKKyAgICAgICAgcmV0dXJuIFtdOworCisgICAgcmV0dXJuIGluZGl2aWR1
YWxUZXN0c0ZvclN1YnN0cmluZ0xpc3QoKTsKK30KKworZnVuY3Rpb24gc3Vic3RyaW5nTGlzdCgp
Cit7CisgICAgLy8gQ29udmVydCB3aW5kb3dzIHNsYXNoZXMgdG8gdW5peCBzbGFzaGVzLgorICAg
IHZhciB0ZXN0cyA9IGdfY3VycmVudFN0YXRlLnRlc3RzLnJlcGxhY2UoL1xcL2csICcvJyk7Cisg
ICAgdmFyIHNlcGFyYXRvciA9IHN0cmluZ0NvbnRhaW5zKHRlc3RzLCAnICcpID8gJyAnIDogJywn
OworICAgIHZhciB0ZXN0TGlzdCA9IHRlc3RzLnNwbGl0KHNlcGFyYXRvcik7CisKKyAgICBpZiAo
aXNMYXlvdXRUZXN0UmVzdWx0cygpKQorICAgICAgICByZXR1cm4gdGVzdExpc3Q7CisKKyAgICB2
YXIgdGVzdExpc3RXaXRob3V0TW9kaWZpZXJzID0gW107CisgICAgdGVzdExpc3QuZm9yRWFjaChm
dW5jdGlvbihwYXRoKSB7CisgICAgICAgIEdURVNUX01PRElGSUVSUy5mb3JFYWNoKGZ1bmN0aW9u
KG1vZGlmaWVyKSB7CisgICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCcuJyArIG1vZGlm
aWVyICsgJ18nLCAnLicpOworICAgICAgICB9KTsKKyAgICAgICAgdGVzdExpc3RXaXRob3V0TW9k
aWZpZXJzLnB1c2gocGF0aCk7CisgICAgfSk7CisgICAgcmV0dXJuIHRlc3RMaXN0V2l0aG91dE1v
ZGlmaWVyczsKK30KKworZnVuY3Rpb24gaW5kaXZpZHVhbFRlc3RzRm9yU3Vic3RyaW5nTGlzdCgp
Cit7CisgICAgdmFyIHRlc3RMaXN0ID0gc3Vic3RyaW5nTGlzdCgpOworCisgICAgLy8gUHV0IHRo
ZSB0ZXN0cyBpbnRvIGFuIG9iamVjdCBmaXJzdCBhbmQgdGhlbiBtb3ZlIHRoZW0gaW50byBhbiBh
cnJheQorICAgIC8vIGFzIGEgd2F5IG9mIGRlZHVwaW5nLgorICAgIHZhciB0ZXN0c01hcCA9IHt9
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdExpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgdmFyIHBhdGggPSB0ZXN0TGlzdFtpXTsKKworICAgICAgICAvLyBJZ25vcmUgd2hpdGVzcGFj
ZSBlbnRyaWVzIGFzIHRoZXknZCBtYXRjaCBldmVyeSB0ZXN0LgorICAgICAgICBpZiAocGF0aC5t
YXRjaCgvXlxzKiQvKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHZhciBhbGxU
ZXN0cyA9IGdldEFsbFRlc3RzKCk7CisgICAgICAgIHZhciBoYXNBbnlNYXRjaGVzID0gZmFsc2U7
CisgICAgICAgIGZvciAodmFyIHRlc3QgaW4gYWxsVGVzdHMpIHsKKyAgICAgICAgICAgIGlmIChj
YXNlSW5zZW5zaXRpdmVDb250YWlucyh0ZXN0LCBwYXRoKSkgeworICAgICAgICAgICAgICAgIHRl
c3RzTWFwW3Rlc3RdID0gMTsKKyAgICAgICAgICAgICAgICBoYXNBbnlNYXRjaGVzID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIGEgcGF0aCBkb2Vzbid0
IG1hdGNoIGFueSB0ZXN0cywgdGhlbiBhc3N1bWUgaXQncyBhIGZ1bGwgcGF0aAorICAgICAgICAv
LyB0byBhIHRlc3QgdGhhdCBwYXNzZXMgb24gYWxsIGJ1aWxkZXJzLgorICAgICAgICBpZiAoIWhh
c0FueU1hdGNoZXMpCisgICAgICAgICAgICB0ZXN0c01hcFtwYXRoXSA9IDE7CisgICAgfQorCisg
ICAgdmFyIHRlc3RzQXJyYXkgPSBbXTsKKyAgICBmb3IgKHZhciB0ZXN0IGluIHRlc3RzTWFwKQor
ICAgICAgICB0ZXN0c0FycmF5LnB1c2godGVzdCk7CisgICAgcmV0dXJuIHRlc3RzQXJyYXk7Cit9
CisKKy8vIFJldHVybnMgd2hldGhlciB0aGlzIHRlc3QncyBzbG93ZXN0IHRpbWUgaXMgYWJvdmUg
dGhlIGN1dG9mZiBmb3IKKy8vIGJlaW5nIGEgc2xvdyB0ZXN0LgorZnVuY3Rpb24gaXNTbG93VGVz
dChyZXN1bHRzRm9yVGVzdCkKK3sKKyAgICB2YXIgbWF4VGltZSA9IGlzRGVidWcocmVzdWx0c0Zv
clRlc3QuYnVpbGRlcikgPyBNSU5fU0VDT05EU19GT1JfU0xPV19URVNUX0RFQlVHIDogTUlOX1NF
Q09ORFNfRk9SX1NMT1dfVEVTVDsKKyAgICByZXR1cm4gcmVzdWx0c0ZvclRlc3Quc2xvd2VzdE5v
blRpbWVvdXRDcmFzaFRpbWUgPiBtYXhUaW1lOworfQorCisvLyBSZXR1cm5zIHdoZXRoZXIgdGhp
cyB0ZXN0J3Mgc2xvd2VzdCB0aW1lIGlzICp3ZWxsKiBiZWxvdyB0aGUgY3V0b2ZmIGZvcgorLy8g
YmVpbmcgYSBzbG93IHRlc3QuCitmdW5jdGlvbiBpc0Zhc3RUZXN0KHJlc3VsdHNGb3JUZXN0KQor
eworICAgIHZhciBtYXhUaW1lID0gaXNEZWJ1ZyhyZXN1bHRzRm9yVGVzdC5idWlsZGVyKSA/IE1J
Tl9TRUNPTkRTX0ZPUl9TTE9XX1RFU1RfREVCVUcgOiBNSU5fU0VDT05EU19GT1JfU0xPV19URVNU
OworICAgIHJldHVybiByZXN1bHRzRm9yVGVzdC5zbG93ZXN0Tm9uVGltZW91dENyYXNoVGltZSA8
IG1heFRpbWUgLyAyOworfQorCitmdW5jdGlvbiBhbGxUZXN0c1dpdGhSZXN1bHQocmVzdWx0KQor
eworICAgIHByb2Nlc3NUZXN0UnVuc0ZvckFsbEJ1aWxkZXJzKCk7CisgICAgdmFyIHRlc3RzID0g
Z2V0QWxsVGVzdHMoKTsKKyAgICB2YXIgcmV0VmFsID0gW107CisgICAgZm9yICh2YXIgdGVzdCBp
biB0ZXN0cykgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdfdGVzdFRvUmVzdWx0c01h
cFt0ZXN0XS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGdfdGVzdFRvUmVzdWx0c01h
cFt0ZXN0XVtpXS5hY3R1YWxSZXN1bHRzLmluZGV4T2YocmVzdWx0KSAhPSAtMSkgeworICAgICAg
ICAgICAgICAgIHJldFZhbC5wdXNoKHRlc3QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXRWYWw7Cit9CisKKwor
Ly8gQWRkcyBhbGwgdGhlIHRlc3RzIGZvciB0aGUgZ2l2ZW4gYnVpbGRlciB0byB0aGUgdGVzdE1h
cFRvUG9wdWxhdGUuCitmdW5jdGlvbiBhZGRUZXN0c0ZvckJ1aWxkZXIoYnVpbGRlciwgdGVzdE1h
cFRvUG9wdWxhdGUpCit7CisgICAgdmFyIHRlc3RzID0gZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxk
ZXJdLnRlc3RzOworICAgIGZvciAodmFyIHRlc3QgaW4gdGVzdHMpIHsKKyAgICAgICAgdGVzdE1h
cFRvUG9wdWxhdGVbdGVzdF0gPSB0cnVlOworICAgIH0KK30KKworLy8gTWFwIG9mIGFsbCB0ZXN0
cyB0byB0cnVlIHZhbHVlcyBieSBwbGF0Zm9ybSBhbmQgYnVpbGQgdHlwZS4KKy8vIGUuZy4gZ19h
bGxUZXN0c0J5UGxhdGZvcm1BbmRCdWlsZFR5cGVbJ1hQJ11bJ0RFQlVHJ10gd2lsbCBoYXZlIHRo
ZSB1bmlvbgorLy8gb2YgYWxsIHRlc3RzIHJ1biBvbiB0aGUgeHAtZGVidWcgYnVpbGRlcnMuCit2
YXIgZ19hbGxUZXN0c0J5UGxhdGZvcm1BbmRCdWlsZFR5cGUgPSB7fTsKK1BMQVRGT1JNUy5mb3JF
YWNoKGZ1bmN0aW9uKHBsYXRmb3JtKSB7IGdfYWxsVGVzdHNCeVBsYXRmb3JtQW5kQnVpbGRUeXBl
W3BsYXRmb3JtXSA9IHt9OyB9KTsKKworLy8gTWFwIG9mIGFsbCB0ZXN0cyB0byB0cnVlIHZhbHVl
cyBieSBwbGF0Zm9ybSBhbmQgYnVpbGQgdHlwZS4KKy8vIGUuZy4gZ19hbGxUZXN0c0J5UGxhdGZv
cm1BbmRCdWlsZFR5cGVbJ1dJTiddWydERUJVRyddIHdpbGwgaGF2ZSB0aGUgdW5pb24KKy8vIG9m
IGFsbCB0ZXN0cyBydW4gb24gdGhlIHdpbi1kZWJ1ZyBidWlsZGVycy4KK2Z1bmN0aW9uIGFsbFRl
c3RzV2l0aFNhbWVQbGF0Zm9ybUFuZEJ1aWxkVHlwZShwbGF0Zm9ybSwgYnVpbGRUeXBlKQorewor
ICAgIGlmICghZ19hbGxUZXN0c0J5UGxhdGZvcm1BbmRCdWlsZFR5cGVbcGxhdGZvcm1dW2J1aWxk
VHlwZV0pIHsKKyAgICAgICAgdmFyIHRlc3RzID0ge307CisgICAgICAgIGZvciAodmFyIHRoaXNC
dWlsZGVyIGluIGdfYnVpbGRlcnMpIHsKKyAgICAgICAgICAgIHZhciB0aGlzQnVpbGRlckJ1aWxk
SW5mbyA9IHBsYXRmb3JtQW5kQnVpbGRUeXBlKHRoaXNCdWlsZGVyKTsKKyAgICAgICAgICAgIGlm
ICh0aGlzQnVpbGRlckJ1aWxkSW5mby5idWlsZFR5cGUgPT0gYnVpbGRUeXBlICYmIHRoaXNCdWls
ZGVyQnVpbGRJbmZvLnBsYXRmb3JtID09IHBsYXRmb3JtKSB7CisgICAgICAgICAgICAgICAgYWRk
VGVzdHNGb3JCdWlsZGVyKHRoaXNCdWlsZGVyLCB0ZXN0cyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZ19hbGxUZXN0c0J5UGxhdGZvcm1BbmRCdWlsZFR5cGVbcGxhdGZvcm1d
W2J1aWxkVHlwZV0gPSB0ZXN0czsKKyAgICB9CisKKyAgICByZXR1cm4gZ19hbGxUZXN0c0J5UGxh
dGZvcm1BbmRCdWlsZFR5cGVbcGxhdGZvcm1dW2J1aWxkVHlwZV07Cit9CisKK2Z1bmN0aW9uIGdl
dEV4cGVjdGF0aW9ucyh0ZXN0LCBwbGF0Zm9ybSwgYnVpbGRUeXBlKQoreworICAgIHZhciB0ZXN0
T2JqZWN0ID0gZ19hbGxFeHBlY3RhdGlvbnNbdGVzdF07CisgICAgaWYgKCF0ZXN0T2JqZWN0KQor
ICAgICAgICByZXR1cm4gbnVsbDsKKworICAgIHZhciBwbGF0Zm9ybU9iamVjdCA9IHRlc3RPYmpl
Y3RbcGxhdGZvcm1dOworICAgIGlmICghcGxhdGZvcm1PYmplY3QpCisgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICAKKyAgICByZXR1cm4gcGxhdGZvcm1PYmplY3RbYnVpbGRUeXBlXTsKK30K
KworZnVuY3Rpb24gZmlsdGVyQnVncyhtb2RpZmllcnMpCit7CisgICAgdmFyIGJ1Z3MgPSBtb2Rp
ZmllcnMubWF0Y2goL1xiQlVHXFMqL2cpOworICAgIGlmICghYnVncykKKyAgICAgICAgcmV0dXJu
IHtidWdzOiAnJywgbW9kaWZpZXJzOiBtb2RpZmllcnN9OworICAgIGZvciAodmFyIGogPSAwOyBq
IDwgYnVncy5sZW5ndGg7IGorKykKKyAgICAgICAgbW9kaWZpZXJzID0gbW9kaWZpZXJzLnJlcGxh
Y2UoYnVnc1tqXSwgJycpOworICAgIHJldHVybiB7YnVnczogYnVncy5qb2luKCcgJyksIG1vZGlm
aWVyczogY29sbGFwc2VXaGl0ZXNwYWNlKHRyaW1TdHJpbmcobW9kaWZpZXJzKSl9OworfQorCitm
dW5jdGlvbiBwb3B1bGF0ZUV4cGVjdGF0aW9uc0RhdGEocmVzdWx0c09iamVjdCkKK3sKKyAgICB2
YXIgYnVpbGRJbmZvID0gcGxhdGZvcm1BbmRCdWlsZFR5cGUocmVzdWx0c09iamVjdC5idWlsZGVy
KTsKKyAgICB2YXIgZXhwZWN0YXRpb25zID0gZ2V0RXhwZWN0YXRpb25zKHJlc3VsdHNPYmplY3Qu
dGVzdCwgYnVpbGRJbmZvLnBsYXRmb3JtLCBidWlsZEluZm8uYnVpbGRUeXBlKTsKKyAgICBpZiAo
IWV4cGVjdGF0aW9ucykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVzdWx0c09iamVjdC5leHBl
Y3RhdGlvbnMgPSBleHBlY3RhdGlvbnMuZXhwZWN0YXRpb25zOworICAgIHJlc3VsdHNPYmplY3Qu
bW9kaWZpZXJzID0gZXhwZWN0YXRpb25zLm1vZGlmaWVyczsKKyAgICByZXN1bHRzT2JqZWN0Lmlz
V29udEZpeFNraXAgPSBzdHJpbmdDb250YWlucyhleHBlY3RhdGlvbnMubW9kaWZpZXJzLCAnV09O
VEZJWCcpIHx8IHN0cmluZ0NvbnRhaW5zKGV4cGVjdGF0aW9ucy5tb2RpZmllcnMsICdTS0lQJyk7
IAorfQorCitmdW5jdGlvbiBhZGRUZXN0VG9BbGxFeHBlY3RhdGlvbnModGVzdCwgZXhwZWN0YXRp
b25zLCBtb2RpZmllcnMpCit7CisgICAgaWYgKCFnX2FsbEV4cGVjdGF0aW9uc1t0ZXN0XSkKKyAg
ICAgICAgZ19hbGxFeHBlY3RhdGlvbnNbdGVzdF0gPSB7fTsKKworICAgIHZhciBhbGxQbGF0Zm9y
bXMgPSBbXTsKKyAgICB2YXIgYWxsQnVpbGRUeXBlcyA9IFtdOworICAgIG1vZGlmaWVycy5zcGxp
dCgnICcpLmZvckVhY2goZnVuY3Rpb24obW9kaWZpZXIpIHsKKyAgICAgICAgaWYgKG1vZGlmaWVy
IGluIEJVSUxEX1RZUEVTKSB7CisgICAgICAgICAgICBhbGxCdWlsZFR5cGVzLnB1c2gobW9kaWZp
ZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoUExBVEZPUk1TLmluZGV4T2YobW9kaWZpZXIpICE9IC0xKSB7CisgICAgICAgICAgICBhbGxQ
bGF0Zm9ybXMucHVzaChtb2RpZmllcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChtb2RpZmllciBpbiBQTEFURk9STV9VTklPTlMpIHsKKyAg
ICAgICAgICAgIFBMQVRGT1JNX1VOSU9OU1ttb2RpZmllcl0uZm9yRWFjaChmdW5jdGlvbihwbGF0
Zm9ybSkgeworICAgICAgICAgICAgICAgIGFsbFBsYXRmb3Jtcy5wdXNoKHBsYXRmb3JtKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfSkKKyAgICAKKyAgICBpZiAoIWFsbFBsYXRm
b3Jtcy5sZW5ndGgpCisgICAgICAgIGFsbFBsYXRmb3JtcyA9IFBMQVRGT1JNUzsKKyAgICAgICAg
CisgICAgaWYgKCFhbGxCdWlsZFR5cGVzLmxlbmd0aCkKKyAgICAgICAgYWxsQnVpbGRUeXBlcyA9
IE9iamVjdC5rZXlzKEJVSUxEX1RZUEVTKTsKKyAgICAKKyAgICBhbGxQbGF0Zm9ybXMuZm9yRWFj
aChmdW5jdGlvbihwbGF0Zm9ybSkgeworICAgICAgICBpZiAoIWdfYWxsRXhwZWN0YXRpb25zW3Rl
c3RdW3BsYXRmb3JtXSkKKyAgICAgICAgICAgIGdfYWxsRXhwZWN0YXRpb25zW3Rlc3RdW3BsYXRm
b3JtXSA9IHt9OworCisgICAgICAgIGFsbEJ1aWxkVHlwZXMuZm9yRWFjaChmdW5jdGlvbihidWls
ZFR5cGUpIHsKKyAgICAgICAgICAgIGdfYWxsRXhwZWN0YXRpb25zW3Rlc3RdW3BsYXRmb3JtXVti
dWlsZFR5cGVdID0ge21vZGlmaWVyczogbW9kaWZpZXJzLCBleHBlY3RhdGlvbnM6IGV4cGVjdGF0
aW9uc307CisgICAgICAgIH0pOyAKKyAgICB9KTsKK30KKworLy8gRGF0YSBzdHJ1Y3R1cmUgdG8g
aG9sZCB0aGUgcHJvY2Vzc2VkIGV4cGVjdGF0aW9ucy4KKy8vIGdfYWxsRXhwZWN0YXRpb25zW3Rl
c3RQYXRoXVtwbGF0Zm9ybV1bYnVpbGRUeXBlXSBnZXRzIHRoZSBvYmplY3QgdGhhdCBoYXMKKy8v
IGV4cGVjdGF0aW9ucyBhbmQgbW9kaWZpZXJzIHByb3BlcnRpZXMgZm9yIHRoaXMgcGxhdGZvcm0v
YnVpbGRUeXBlLgorLy8KKy8vIHBsYXRmb3JtIGFuZCBidWlsZFR5cGUgYm90aCBnbyB0aHJvdWdo
IGZhbGxiYWNrIHNldHMgb2Yga2V5cyBmcm9tIG1vc3QKKy8vIHNwZWNpZmljIGtleSB0byBsZWFz
dCBzcGVjaWZpYy4gRm9yIGV4YW1wbGUsIG9uIFdpbmRvd3MgVmlzdGEsIHdlIGZpcnN0CisvLyBj
aGVjayB0aGUgcGxhdGZvcm0gV0lOLVZJU1RBLCBpZiB0aGVyZSdzIG5vIHN1Y2ggb2JqZWN0LCB3
ZSBjaGVjayBXSU4sCisvLyB0aGVuIGZpbmFsbHkgd2UgY2hlY2sgQUxMLiBGb3IgYnVpbGQgdHlw
ZXMsIHdlIGNoZWNrIHRoZSBjdXJyZW50CisvLyBidWlsZFR5cGUsIHRoZW4gQUxMLgordmFyIGdf
YWxsRXhwZWN0YXRpb25zOworCitmdW5jdGlvbiBwYXJzZWRFeHBlY3RhdGlvbnMoKQoreworICAg
IGlmICghZ19leHBlY3RhdGlvbnMpCisgICAgICAgIHJldHVybiBbXTsKKyAgICAKKyAgICB2YXIg
ZXhwZWN0YXRpb25zID0gW107CisgICAgdmFyIGxpbmVzID0gZ19leHBlY3RhdGlvbnMuc3BsaXQo
J1xuJyk7CisgICAgbGluZXMuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7CisgICAgICAgIGxpbmUg
PSB0cmltU3RyaW5nKGxpbmUpOworICAgICAgICBpZiAoIWxpbmUgfHwgc3RhcnRzV2l0aChsaW5l
LCAnLy8nKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBGSVhNRTogTWFrZSB0
aGlzIHJvYnVzdCBhZ2FpbnN0IG5vdCBoYXZpbmcgbW9kaWZpZXJzIGFuZC9vciBleHBlY3RhdGlv
bnMuCisgICAgICAgIC8vIFJpZ2h0IG5vdywgcnVuLXdlYmtpdC10ZXN0cyBkb2Vzbid0IGFsbG93
IHN1Y2ggbGluZXMsIGJ1dCBpdCBtYXkgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgdmFyIG1hdGNo
ID0gbGluZS5tYXRjaCgvKFteOl0rKSo6KFtePV0rKT0oLiopLyk7CisgICAgICAgIGlmICghbWF0
Y2gpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0xpbmUgY291bGQgbm90IGJlIHBhcnNl
ZDogJyArIGxpbmUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gRklYTUU6IFNob3VsZCB3ZSBpbmNsdWRlIGxpbmUgbnVtYmVyIGFuZCBjb21tZW50IGxpbmVz
IGhlcmU/CisgICAgICAgIGV4cGVjdGF0aW9ucy5wdXNoKHsKKyAgICAgICAgICAgIG1vZGlmaWVy
czogdHJpbVN0cmluZyhtYXRjaFsxXSksCisgICAgICAgICAgICBwYXRoOiB0cmltU3RyaW5nKG1h
dGNoWzJdKSwKKyAgICAgICAgICAgIGV4cGVjdGF0aW9uczogdHJpbVN0cmluZyhtYXRjaFszXSkK
KyAgICAgICAgfSk7CisgICAgfSk7CisgICAgcmV0dXJuIGV4cGVjdGF0aW9uczsKK30KKworZnVu
Y3Rpb24gcHJvY2Vzc0V4cGVjdGF0aW9ucygpCit7CisgICAgaWYgKGdfYWxsRXhwZWN0YXRpb25z
KQorICAgICAgICByZXR1cm4gZ19hbGxFeHBlY3RhdGlvbnM7CisKKyAgICBnX2FsbEV4cGVjdGF0
aW9ucyA9IHt9OworCisgICAgdmFyIGV4cGVjdGF0aW9uc0FycmF5ID0gcGFyc2VkRXhwZWN0YXRp
b25zKCk7CisKKyAgICAvLyBTb3J0IHRoZSBhcnJheSB0byBoaXQgbW9yZSBzcGVjaWZpYyBwYXRo
cyBsYXN0LiBNb3JlIHNwZWNpZmljCisgICAgLy8gcGF0aHMgKGUuZy4gZm9vL2Jhci9iYXouaHRt
bCkgb3ZlcnJpZGUgZW50cmllcyBmb3IgbGVzcy1zcGVjaWZpYyBvbmVzIChlLmcuIGZvby9iYXIp
LgorICAgIGV4cGVjdGF0aW9uc0FycmF5LnNvcnQoYWxwaGFudW1lcmljQ29tcGFyZSgncGF0aCcp
KTsKKworICAgIHZhciBhbGxUZXN0cyA9IGdldEFsbFRlc3RzKCk7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBleHBlY3RhdGlvbnNBcnJheS5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgcGF0
aCA9IGV4cGVjdGF0aW9uc0FycmF5W2ldLnBhdGg7CisgICAgICAgIHZhciBtb2RpZmllcnMgPSBl
eHBlY3RhdGlvbnNBcnJheVtpXS5tb2RpZmllcnM7CisgICAgICAgIHZhciBleHBlY3RhdGlvbnMg
PSBleHBlY3RhdGlvbnNBcnJheVtpXS5leHBlY3RhdGlvbnM7CisKKyAgICAgICAgdmFyIHBhdGhN
YXRjaGVzQW55VGVzdCA9IGZhbHNlOworICAgICAgICBpZiAoYWxsVGVzdHNbcGF0aF0pIHsKKyAg
ICAgICAgICAgIHBhdGhNYXRjaGVzQW55VGVzdCA9IHRydWU7CisgICAgICAgICAgICBhZGRUZXN0
VG9BbGxFeHBlY3RhdGlvbnMocGF0aCwgZXhwZWN0YXRpb25zLCBtb2RpZmllcnMpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICh2YXIgdGVzdCBpbiBhbGxUZXN0cykgeworICAg
ICAgICAgICAgICAgIGlmIChzdGFydHNXaXRoKHRlc3QsIHBhdGgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHBhdGhNYXRjaGVzQW55VGVzdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGFk
ZFRlc3RUb0FsbEV4cGVjdGF0aW9ucyh0ZXN0LCBleHBlY3RhdGlvbnMsIG1vZGlmaWVycyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KCFwYXRoTWF0Y2hlc0FueVRlc3QpCisgICAgICAgICAgICBhZGRUZXN0VG9BbGxFeHBlY3RhdGlv
bnMocGF0aCwgZXhwZWN0YXRpb25zLCBtb2RpZmllcnMpOworICAgIH0KK30KKworZnVuY3Rpb24g
cHJvY2Vzc01pc3NpbmdUZXN0c1dpdGhFeHBlY3RhdGlvbnMoYnVpbGRlciwgcGxhdGZvcm0sIGJ1
aWxkVHlwZSkKK3sKKyAgICB2YXIgbm9GYWlsdXJlcyA9IFtdOworICAgIHZhciBza2lwcGVkID0g
W107CisKKyAgICB2YXIgYWxsVGVzdHNGb3JQbGF0Zm9ybUFuZEJ1aWxkVHlwZSA9IGFsbFRlc3Rz
V2l0aFNhbWVQbGF0Zm9ybUFuZEJ1aWxkVHlwZShwbGF0Zm9ybSwgYnVpbGRUeXBlKTsKKyAgICBm
b3IgKHZhciB0ZXN0IGluIGdfYWxsRXhwZWN0YXRpb25zKSB7CisgICAgICAgIHZhciBleHBlY3Rh
dGlvbnMgPSBnZXRFeHBlY3RhdGlvbnModGVzdCwgcGxhdGZvcm0sIGJ1aWxkVHlwZSk7CisKKyAg
ICAgICAgaWYgKCFleHBlY3RhdGlvbnMpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAvLyBUZXN0IGhhcyBleHBlY3RhdGlvbnMsIGJ1dCBubyByZXN1bHQgaW4gdGhlIGJ1aWxkZXJz
IHJlc3VsdHMuCisgICAgICAgIC8vIFRoaXMgbWVhbnMgaXQncyBlaXRoZXIgU0tJUCBvciBwYXNz
ZXMgb24gYWxsIGJ1aWxkcy4KKyAgICAgICAgaWYgKCFhbGxUZXN0c0ZvclBsYXRmb3JtQW5kQnVp
bGRUeXBlW3Rlc3RdICYmICFzdHJpbmdDb250YWlucyhleHBlY3RhdGlvbnMubW9kaWZpZXJzLCAn
V09OVEZJWCcpKSB7CisgICAgICAgICAgICBpZiAoc3RyaW5nQ29udGFpbnMoZXhwZWN0YXRpb25z
Lm1vZGlmaWVycywgJ1NLSVAnKSkKKyAgICAgICAgICAgICAgICBza2lwcGVkLnB1c2godGVzdCk7
CisgICAgICAgICAgICBlbHNlIGlmICghZXhwZWN0YXRpb25zLmV4cGVjdGF0aW9ucy5tYXRjaCgv
XlxzKlBBU1NccyokLykpIHsKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBzaG93IHRlc3RzIGV4
cGVjdGVkIHRvIGFsd2F5cyBwYXNzLiBUaGlzIGlzIHVzZWQgaW4gd2F5cyBsaWtlCisgICAgICAg
ICAgICAgICAgLy8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAvLyBmb28vYmFyID0g
RkFJTAorICAgICAgICAgICAgICAgIC8vIGZvby9iYXIvYmF6Lmh0bWwgPSBQQVNTCisgICAgICAg
ICAgICAgICAgbm9GYWlsdXJlcy5wdXNoKHt0ZXN0OiB0ZXN0LCBleHBlY3RhdGlvbnM6IGV4cGVj
dGF0aW9ucy5leHBlY3RhdGlvbnMsIG1vZGlmaWVyczogZXhwZWN0YXRpb25zLm1vZGlmaWVyc30p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZ19wZXJCdWlsZGVyU2tp
cHBlZFBhdGhzW2J1aWxkZXJdID0gc2tpcHBlZC5zb3J0KCk7CisgICAgZ19wZXJCdWlsZGVyV2l0
aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXNbYnVpbGRlcl0gPSBub0ZhaWx1cmVzLnNvcnQoKTsK
K30KKworZnVuY3Rpb24gcHJvY2Vzc1Rlc3RSZXN1bHRzRm9yQnVpbGRlckFzeW5jKGJ1aWxkZXIp
Cit7CisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgcHJvY2Vzc1Rlc3RSdW5zRm9yQnVpbGRl
cihidWlsZGVyKTsgfSwgMCk7Cit9CisKK2Z1bmN0aW9uIHByb2Nlc3NUZXN0UnVuc0ZvckFsbEJ1
aWxkZXJzKCkKK3sKKyAgICBmb3IgKHZhciBidWlsZGVyIGluIGdfYnVpbGRlcnMpCisgICAgICAg
IHByb2Nlc3NUZXN0UnVuc0ZvckJ1aWxkZXIoYnVpbGRlcik7Cit9CisKK2Z1bmN0aW9uIHByb2Nl
c3NUZXN0UnVuc0ZvckJ1aWxkZXIoYnVpbGRlck5hbWUpCit7CisgICAgaWYgKGdfcGVyQnVpbGRl
ckZhaWx1cmVzW2J1aWxkZXJOYW1lXSkKKyAgICAgIHJldHVybjsKKworICAgIGlmICghZ19yZXN1
bHRzQnlCdWlsZGVyW2J1aWxkZXJOYW1lXSkgeworICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0
ZXN0cyBmb3VuZCBmb3IgJyArIGJ1aWxkZXJOYW1lKTsKKyAgICAgICAgZ19wZXJCdWlsZGVyRmFp
bHVyZXNbYnVpbGRlck5hbWVdID0gW107CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2
YXIgc3RhcnQgPSBEYXRlLm5vdygpOworICAgIHByb2Nlc3NFeHBlY3RhdGlvbnMoKTsKKworICAg
IHZhciBidWlsZEluZm8gPSBwbGF0Zm9ybUFuZEJ1aWxkVHlwZShidWlsZGVyTmFtZSk7CisgICAg
dmFyIHBsYXRmb3JtID0gYnVpbGRJbmZvLnBsYXRmb3JtOworICAgIHZhciBidWlsZFR5cGUgPSBi
dWlsZEluZm8uYnVpbGRUeXBlOworICAgIHByb2Nlc3NNaXNzaW5nVGVzdHNXaXRoRXhwZWN0YXRp
b25zKGJ1aWxkZXJOYW1lLCBwbGF0Zm9ybSwgYnVpbGRUeXBlKTsKKworICAgIHZhciBmYWlsdXJl
cyA9IFtdOworICAgIHZhciBhbGxUZXN0c0ZvclRoaXNCdWlsZGVyID0gZ19yZXN1bHRzQnlCdWls
ZGVyW2J1aWxkZXJOYW1lXS50ZXN0czsKKworICAgIGZvciAodmFyIHRlc3QgaW4gYWxsVGVzdHNG
b3JUaGlzQnVpbGRlcikgeworICAgICAgICB2YXIgcmVzdWx0c0ZvclRlc3QgPSBjcmVhdGVSZXN1
bHRzT2JqZWN0Rm9yVGVzdCh0ZXN0LCBidWlsZGVyTmFtZSk7CisgICAgICAgIHBvcHVsYXRlRXhw
ZWN0YXRpb25zRGF0YShyZXN1bHRzRm9yVGVzdCk7CisKKyAgICAgICAgdmFyIHJhd1Rlc3QgPSBn
X3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlck5hbWVdLnRlc3RzW3Rlc3RdOworICAgICAgICByZXN1
bHRzRm9yVGVzdC5yYXdUaW1lcyA9IHJhd1Rlc3QudGltZXM7CisgICAgICAgIHZhciByYXdSZXN1
bHRzID0gcmF3VGVzdC5yZXN1bHRzOworICAgICAgICByZXN1bHRzRm9yVGVzdC5yYXdSZXN1bHRz
ID0gcmF3UmVzdWx0czsKKworICAgICAgICAvLyBGSVhNRTogU3dpdGNoIHRvIHJlc3VsdHNCeUJ1
aWxkCisgICAgICAgIHZhciB0aW1lcyA9IHJlc3VsdHNGb3JUZXN0LnJhd1RpbWVzOworICAgICAg
ICB2YXIgbnVtVGltZXNTZWVuID0gMDsKKyAgICAgICAgdmFyIG51bVJlc3VsdHNTZWVuID0gMDsK
KyAgICAgICAgdmFyIHJlc3VsdHNJbmRleCA9IDA7CisgICAgICAgIHZhciBjdXJyZW50UmVzdWx0
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRpbWVzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICBudW1UaW1lc1NlZW4gKz0gdGltZXNbaV1bUkxFLkxFTkdUSF07CisKKyAgICAgICAg
ICAgIHdoaWxlIChyYXdSZXN1bHRzW3Jlc3VsdHNJbmRleF0gJiYgbnVtVGltZXNTZWVuID4gKG51
bVJlc3VsdHNTZWVuICsgcmF3UmVzdWx0c1tyZXN1bHRzSW5kZXhdW1JMRS5MRU5HVEhdKSkgewor
ICAgICAgICAgICAgICAgIG51bVJlc3VsdHNTZWVuICs9IHJhd1Jlc3VsdHNbcmVzdWx0c0luZGV4
XVtSTEUuTEVOR1RIXTsKKyAgICAgICAgICAgICAgICByZXN1bHRzSW5kZXgrKzsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKHJhd1Jlc3VsdHMgJiYgcmF3UmVzdWx0c1tyZXN1bHRz
SW5kZXhdKQorICAgICAgICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSByYXdSZXN1bHRzW3Jlc3Vs
dHNJbmRleF1bUkxFLlZBTFVFXTsKKworICAgICAgICAgICAgdmFyIHRpbWUgPSB0aW1lc1tpXVtS
TEUuVkFMVUVdCisKKyAgICAgICAgICAgIC8vIElnbm9yZSB0aW1lcyBmb3IgY3Jhc2hpbmcvdGlt
ZW91dCBydW5zIGZvciB0aGUgc2FrZSBvZiBzZWVpbmcgaWYKKyAgICAgICAgICAgIC8vIGEgdGVz
dCBzaG91bGQgYmUgbWFya2VkIHNsb3cuCisgICAgICAgICAgICBpZiAoY3VycmVudFJlc3VsdCAh
PSAnQycgJiYgY3VycmVudFJlc3VsdCAhPSAnVCcpCisgICAgICAgICAgICAgICAgcmVzdWx0c0Zv
clRlc3Quc2xvd2VzdE5vblRpbWVvdXRDcmFzaFRpbWUgPSBNYXRoLm1heChyZXN1bHRzRm9yVGVz
dC5zbG93ZXN0Tm9uVGltZW91dENyYXNoVGltZSwgdGltZSk7CisgICAgICAgICAgICByZXN1bHRz
Rm9yVGVzdC5zbG93ZXN0VGltZSA9IE1hdGgubWF4KHJlc3VsdHNGb3JUZXN0LnNsb3dlc3RUaW1l
LCB0aW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIHByb2Nlc3NNaXNzaW5nQW5kRXh0cmFFeHBl
Y3RhdGlvbnMocmVzdWx0c0ZvclRlc3QpOworICAgICAgICBmYWlsdXJlcy5wdXNoKHJlc3VsdHNG
b3JUZXN0KTsKKworICAgICAgICBpZiAoIWdfdGVzdFRvUmVzdWx0c01hcFt0ZXN0XSkKKyAgICAg
ICAgICAgIGdfdGVzdFRvUmVzdWx0c01hcFt0ZXN0XSA9IFtdOworICAgICAgICBnX3Rlc3RUb1Jl
c3VsdHNNYXBbdGVzdF0ucHVzaChyZXN1bHRzRm9yVGVzdCk7CisgICAgfQorCisgICAgZ19wZXJC
dWlsZGVyRmFpbHVyZXNbYnVpbGRlck5hbWVdID0gZmFpbHVyZXM7CisgICAgbG9nVGltZSgncHJv
Y2Vzc1Rlc3RSdW5zRm9yQnVpbGRlcjogJyArIGJ1aWxkZXJOYW1lLCBzdGFydCk7Cit9CisKK2Z1
bmN0aW9uIHByb2Nlc3NNaXNzaW5nQW5kRXh0cmFFeHBlY3RhdGlvbnMocmVzdWx0c0ZvclRlc3Qp
Cit7CisgICAgLy8gSGV1cmlzdGljIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIGV4cGVjdGF0aW9u
cyBhcHBseSB0byBhIGdpdmVuIHRlc3Q6CisgICAgLy8gLUlmIGEgdGVzdCByZXN1bHQgaGFwcGVu
cyA8IE1JTl9SVU5TX0ZPUl9GTEFLRSwgdGhlbiBjb25zaWRlciBpdCBhIGZsYWt5CisgICAgLy8g
cmVzdWx0IGFuZCBpbmNsdWRlIGl0IGluIHRoZSBsaXN0IG9mIGV4cGVjdGVkIHJlc3VsdHMuCisg
ICAgLy8gLU90aGVyd2lzZSwgZ3JhYiB0aGUgZmlyc3QgY29udGlndW91cyBzZXQgb2YgcnVucyB3
aXRoIHRoZSBzYW1lIHJlc3VsdAorICAgIC8vIGZvciA+PSBNSU5fUlVOU19GT1JfRkxBS0UgYW5k
IGlnbm9yZSBhbGwgZm9sbG93aW5nIHJ1bnMgPj0KKyAgICAvLyBNSU5fUlVOU19GT1JfRkxBS0Uu
CisgICAgLy8gVGhpcyBsZXRzIHVzIHJ1bGUgb3V0IGNvbW1vbiBjYXNlcyBvZiBhIHRlc3QgY2hh
bmdpbmcgZXhwZWN0YXRpb25zIGZvcgorICAgIC8vIGEgZmV3IHJ1bnMsIHRoZW4gYmVpbmcgZml4
ZWQgb3Igb3RoZXJ3aXNlIG1vZGlmaWVkIGluIGEgbm9uLWZsYWt5IHdheS4KKyAgICB2YXIgcmF3
UmVzdWx0cyA9IHJlc3VsdHNGb3JUZXN0LnJhd1Jlc3VsdHM7CisKKyAgICAvLyBJZiB0aGUgZmly
c3QgcmVzdWx0IGlzIG5vLWRhdGEgdGhhdCBtZWFucyB0aGUgdGVzdCBpcyBza2lwcGVkIG9yIGlz
CisgICAgLy8gYmVpbmcgcnVuIG9uIGEgZGlmZmVyZW50IGJ1aWxkZXIgKGUuZy4gbW92ZWQgZnJv
bSBvbmUgc2hhcmQgdG8gYW5vdGhlcikuCisgICAgLy8gSWdub3JlIHRoZXNlIHJlc3VsdHMgc2lu
Y2Ugd2UgaGF2ZSBubyByZWFsIGRhdGEgYWJvdXQgd2hhdCdzIGdvaW5nIG9uLgorICAgIGlmIChy
YXdSZXN1bHRzWzBdW1JMRS5WQUxVRV0gPT0gJ04nKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBPbmx5IGNvbnNpZGVyIGZsYWtlIGlmIGl0IGRvZXNuJ3QgaGFwcGVuIHR3aWNlIGluIGEgcm93
LgorICAgIHZhciBNSU5fUlVOU19GT1JfRkxBS0UgPSAyOworICAgIHZhciByZXN1bHRzTWFwID0g
e30KKyAgICB2YXIgbnVtUmVzdWx0c1NlZW4gPSAwOworICAgIHZhciBoYXZlU2Vlbk5vbkZsYWtl
UmVzdWx0ID0gZmFsc2U7CisgICAgdmFyIG51bVJlYWxSZXN1bHRzID0gMDsKKyAgICB2YXIgZmFp
bGVkQ291bnQgPSAwOworCisgICAgdmFyIHNlZW5SZXN1bHRzID0ge307CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCByYXdSZXN1bHRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBudW1SZXN1
bHRzID0gcmF3UmVzdWx0c1tpXVtSTEUuTEVOR1RIXTsKKyAgICAgICAgbnVtUmVzdWx0c1NlZW4g
Kz0gbnVtUmVzdWx0czsKKworICAgICAgICB2YXIgcmVzdWx0ID0gcmF3UmVzdWx0c1tpXVtSTEUu
VkFMVUVdOworICAgICAgICBpZiAoaXNGYWlsaW5nUmVzdWx0KHJlc3VsdCkpCisgICAgICAgICAg
ICBmYWlsZWRDb3VudCArPSBudW1SZXN1bHRzOworCisgICAgICAgIHZhciBoYXNNaW5SdW5zID0g
bnVtUmVzdWx0cyA+PSBNSU5fUlVOU19GT1JfRkxBS0U7CisgICAgICAgIGlmIChoYXZlU2Vlbk5v
bkZsYWtlUmVzdWx0ICYmIGhhc01pblJ1bnMpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgZWxzZSBpZiAoaGFzTWluUnVucykKKyAgICAgICAgICAgIGhhdmVTZWVuTm9uRmxha2VSZXN1
bHQgPSB0cnVlOworICAgICAgICBlbHNlIGlmICghc2VlblJlc3VsdHNbcmVzdWx0XSkgeworICAg
ICAgICAgICAgLy8gT25seSBjb25zaWRlciBhIHNob3J0LWxpdmVkIHJlc3VsdCBpZiB3ZSd2ZSBz
ZWVuIGl0IG1vcmUgdGhhbiBvbmNlLgorICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBpbmNs
dWRlIGxvdHMgb2YgZmFsc2UtcG9zaXRpdmVzIGR1ZSB0byB0ZXN0cyB0aGF0IGZhaWwKKyAgICAg
ICAgICAgIC8vIGZvciBhIGNvdXBsZSBydW5zIGFuZCB0aGVuIHN0YXJ0IHBhc3NpbmcuCisgICAg
ICAgICAgICBzZWVuUmVzdWx0c1tyZXN1bHRdID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisKKyAgICAgICAgdmFyIGV4cGVjdGF0aW9uID0gZXhwZWN0YXRpb25zRmls
ZVN0cmluZ0ZvclJlc3VsdChyZXN1bHQpOworICAgICAgICByZXN1bHRzTWFwW2V4cGVjdGF0aW9u
XSA9IHRydWU7CisgICAgICAgIG51bVJlYWxSZXN1bHRzKys7CisgICAgfQorCisgICAgcmVzdWx0
c0ZvclRlc3QuZmxpcHMgPSBpIC0gMTsKKyAgICByZXN1bHRzRm9yVGVzdC5pc0ZsYWt5ID0gbnVt
UmVhbFJlc3VsdHMgPiAxOworICAgIC8vIENhbGN1bGF0ZSB0aGUgJSBvZiB0aW1lcyB0aGUgdGVz
dCBmYWlsZWQgLSBob3cgZmxha3kgaXMgaXQ/CisgICAgcmVzdWx0c0ZvclRlc3QucGVyY2VudEZh
aWxlZCA9IE1hdGgucm91bmQoZmFpbGVkQ291bnQgLyBudW1SZXN1bHRzU2VlbiAqIDEwMCk7CisK
KyAgICB2YXIgbWlzc2luZ0V4cGVjdGF0aW9ucyA9IFtdOworICAgIHZhciBleHRyYUV4cGVjdGF0
aW9ucyA9IFtdOworCisgICAgaWYgKGlzTGF5b3V0VGVzdFJlc3VsdHMoKSkgeworICAgICAgICB2
YXIgZXhwZWN0YXRpb25zQXJyYXkgPSByZXN1bHRzRm9yVGVzdC5leHBlY3RhdGlvbnMgPyByZXN1
bHRzRm9yVGVzdC5leHBlY3RhdGlvbnMuc3BsaXQoJyAnKSA6IFtdOworICAgICAgICBleHRyYUV4
cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9uc0FycmF5LmZpbHRlcigKKyAgICAgICAgICAgIGZ1bmN0
aW9uKGVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogT25jZSBhbGwgdGhlIEZB
SUwgbGluZXMgYXJlIHJlbW92ZWQgZnJvbQorICAgICAgICAgICAgICAgIC8vIHRlc3RfZXhwZWN0
YXRpb25zLnR4dCwgZGVsZXRlIGFsbCB0aGUgbGVnYWN5RXhwZWN0YXRpb25zU2VtYW50aWNzCisg
ICAgICAgICAgICAgICAgLy8gY29kZS4KKyAgICAgICAgICAgICAgICBpZiAoZ19jdXJyZW50U3Rh
dGUubGVnYWN5RXhwZWN0YXRpb25zU2VtYW50aWNzKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChlbGVtZW50ID09ICdGQUlMJykgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBGQUlMX1JFU1VMVFMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0c01hcFtGQUlMX1JFU1VMVFNbaV1dKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBlbGVt
ZW50ICYmICFyZXN1bHRzTWFwW2VsZW1lbnRdICYmICFzdHJpbmdDb250YWlucyhlbGVtZW50LCAn
QlVHJyk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICBmb3IgKHZhciByZXN1bHQgaW4gcmVz
dWx0c01hcCkgeworICAgICAgICAgICAgcmVzdWx0c0ZvclRlc3QuYWN0dWFsUmVzdWx0cy5wdXNo
KHJlc3VsdCk7CisgICAgICAgICAgICB2YXIgaGFzRXhwZWN0YXRpb24gPSBmYWxzZTsKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0YXRpb25zQXJyYXkubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgICAgICB2YXIgZXhwZWN0YXRpb24gPSBleHBlY3RhdGlvbnNBcnJheVtp
XTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogT25jZSBhbGwgdGhlIEZBSUwgbGluZXMgYXJl
IHJlbW92ZWQgZnJvbQorICAgICAgICAgICAgICAgIC8vIHRlc3RfZXhwZWN0YXRpb25zLnR4dCwg
ZGVsZXRlIGFsbCB0aGUgbGVnYWN5RXhwZWN0YXRpb25zU2VtYW50aWNzCisgICAgICAgICAgICAg
ICAgLy8gY29kZS4KKyAgICAgICAgICAgICAgICBpZiAoZ19jdXJyZW50U3RhdGUubGVnYWN5RXhw
ZWN0YXRpb25zU2VtYW50aWNzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RhdGlv
biA9PSAnRkFJTCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgRkFJTF9SRVNVTFRTLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBGQUlMX1JFU1VMVFNbal0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGFzRXhwZWN0YXRpb24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IGV4cGVjdGF0aW9uKQorICAgICAg
ICAgICAgICAgICAgICBoYXNFeHBlY3RhdGlvbiA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBp
ZiAoaGFzRXhwZWN0YXRpb24pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBleHBlY3RhdGlvbnMgZm9yIGEgdGVz
dCBhbmQgaXQgb25seSBwYXNzZXMsIHRoZW4gZG9uJ3QKKyAgICAgICAgICAgIC8vIGxpc3QgUEFT
UyBhcyBhIG1pc3NpbmcgZXhwZWN0YXRpb24uIFdlIG9ubHkgd2FudCB0byBsaXN0IFBBU1MgaWYg
aXQKKyAgICAgICAgICAgIC8vIGZsYWt5IHBhc3Nlcywgc28gdGhlcmUgd291bGQgYmUgb3RoZXIg
ZXhwZWN0YXRpb25zLgorICAgICAgICAgICAgaWYgKCFoYXNFeHBlY3RhdGlvbiAmJiAhKCFleHBl
Y3RhdGlvbnNBcnJheS5sZW5ndGggJiYgcmVzdWx0ID09ICdQQVNTJyAmJiBudW1SZWFsUmVzdWx0
cyA9PSAxKSkKKyAgICAgICAgICAgICAgICBtaXNzaW5nRXhwZWN0YXRpb25zLnB1c2gocmVzdWx0
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9ubHkgaGlnaGxpZ2h0IHRlc3RzIHRoYXQgdGFr
ZSA+IDIgc2Vjb25kcyBhcyBuZWVkaW5nIHRvIGJlIG1hcmtlZCBhcworICAgICAgICAvLyBzbG93
LiBUaGVyZSBhcmUgdG9vIG1hbnkgdGVzdHMgdGhhdCB0YWtlIH4yIHNlY29uZHMgZXZlcnkgY291
cGxlCisgICAgICAgIC8vIGh1bmRyZWQgcnVucy4gSXQncyBub3Qgd29ydGggdGhlIG1hbnVhbCBt
YWludGVuYW5jZSBlZmZvcnQuCisgICAgICAgIC8vIEFsc28sIGlmIGEgdGVzdCB0aW1lcyBvdXQs
IHRoZW4gaXQgc2hvdWxkIG5vdCBiZSBtYXJrZWQgYXMgc2xvdy4KKyAgICAgICAgdmFyIG1pblRp
bWVGb3JOZWVkc1Nsb3cgPSBpc0RlYnVnKHJlc3VsdHNGb3JUZXN0LmJ1aWxkZXIpID8gMiA6IDE7
CisgICAgICAgIGlmIChpc1Nsb3dUZXN0KHJlc3VsdHNGb3JUZXN0KSAmJiAhcmVzdWx0c01hcFsn
VElNRU9VVCddICYmICghcmVzdWx0c0ZvclRlc3QubW9kaWZpZXJzIHx8ICFzdHJpbmdDb250YWlu
cyhyZXN1bHRzRm9yVGVzdC5tb2RpZmllcnMsICdTTE9XJykpKQorICAgICAgICAgICAgbWlzc2lu
Z0V4cGVjdGF0aW9ucy5wdXNoKCdTTE9XJyk7CisgICAgICAgIGVsc2UgaWYgKGlzRmFzdFRlc3Qo
cmVzdWx0c0ZvclRlc3QpICYmIHJlc3VsdHNGb3JUZXN0Lm1vZGlmaWVycyAmJiBzdHJpbmdDb250
YWlucyhyZXN1bHRzRm9yVGVzdC5tb2RpZmllcnMsICdTTE9XJykpCisgICAgICAgICAgICBleHRy
YUV4cGVjdGF0aW9ucy5wdXNoKCdTTE9XJyk7CisKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5v
IG1pc3NpbmcgcmVzdWx0cyBvciBtb2RpZmllcnMgYmVzaWRlcyBidWlsZAorICAgICAgICAvLyB0
eXBlLCBwbGF0Zm9ybSwgb3IgYnVnIGFuZCB0aGUgZXhwZWN0YXRpb25zIGFyZSBhbGwgZXh0cmEK
KyAgICAgICAgLy8gdGhhdCBpcywgZXh0cmFFeHBlY3RhdGlvbnMgLSBleHBlY3RhdGlvbnMgPSBQ
QVNTLAorICAgICAgICAvLyBpbmNsdWRlIFBBU1MgYXMgZXh0cmEsIHNpbmNlIHRoYXQgbWVhbnMg
dGhpcyBsaW5lIGluCisgICAgICAgIC8vIHRlc3RfZXhwZWN0YXRpb25zIGNhbiBiZSBkZWxldGVk
Li4KKyAgICAgICAgaWYgKCFtaXNzaW5nRXhwZWN0YXRpb25zLmxlbmd0aCAmJiAhKHJlc3VsdHNG
b3JUZXN0Lm1vZGlmaWVycyAmJiByZWFsTW9kaWZpZXJzKHJlc3VsdHNGb3JUZXN0Lm1vZGlmaWVy
cykpKSB7CisgICAgICAgICAgICB2YXIgZXh0cmFQbHVzUGFzcyA9IGV4dHJhRXhwZWN0YXRpb25z
LmNvbmNhdChbJ1BBU1MnXSk7CisgICAgICAgICAgICBpZiAoZXh0cmFQbHVzUGFzcy5zb3J0KCku
dG9TdHJpbmcoKSA9PSBleHBlY3RhdGlvbnNBcnJheS5zbGljZSgwKS5zb3J0KCkudG9TdHJpbmco
KSkKKyAgICAgICAgICAgICAgICBleHRyYUV4cGVjdGF0aW9ucy5wdXNoKCdQQVNTJyk7CisgICAg
ICAgIH0KKworICAgIH0KKworICAgIHJlc3VsdHNGb3JUZXN0Lm1lZXRzRXhwZWN0YXRpb25zID0g
IW1pc3NpbmdFeHBlY3RhdGlvbnMubGVuZ3RoICYmICFleHRyYUV4cGVjdGF0aW9ucy5sZW5ndGg7
CisgICAgcmVzdWx0c0ZvclRlc3QubWlzc2luZyA9IG1pc3NpbmdFeHBlY3RhdGlvbnMuc29ydCgp
LmpvaW4oJyAnKTsKKyAgICByZXN1bHRzRm9yVGVzdC5leHRyYSA9IGV4dHJhRXhwZWN0YXRpb25z
LnNvcnQoKS5qb2luKCcgJyk7Cit9CisKKwordmFyIEJVR19VUkxfUFJFRklYID0gJzxhIGhyZWY9
Imh0dHA6Ly8nOwordmFyIEJVR19VUkxfUE9TVEZJWCA9ICcvJDIiPmNyYnVnLmNvbS8kMjwvYT4g
JzsKK3ZhciBXRUJLSVRfQlVHX1VSTF9QT1NURklYID0gJy8kMiI+d2Via2l0Lm9yZy9iLyQyPC9h
PiAnOwordmFyIElOVEVSTkFMX0JVR19SRVBMQUNFX1ZBTFVFID0gQlVHX1VSTF9QUkVGSVggKyAn
YicgKyBCVUdfVVJMX1BPU1RGSVg7Cit2YXIgRVhURVJOQUxfQlVHX1JFUExBQ0VfVkFMVUUgPSBC
VUdfVVJMX1BSRUZJWCArICdjcmJ1Zy5jb20nICsgQlVHX1VSTF9QT1NURklYOwordmFyIFdFQktJ
VF9CVUdfUkVQTEFDRV9WQUxVRSA9IEJVR19VUkxfUFJFRklYICsgJ3dlYmtpdC5vcmcvYicgKyBX
RUJLSVRfQlVHX1VSTF9QT1NURklYOworCitmdW5jdGlvbiBodG1sRm9yQnVncyhidWdzKQorewor
ICAgIGJ1Z3MgPSBidWdzLnJlcGxhY2UoL0JVRyhDUik/KFxkezR9KShcIHwkKS9nLCBFWFRFUk5B
TF9CVUdfUkVQTEFDRV9WQUxVRSk7CisgICAgYnVncyA9IGJ1Z3MucmVwbGFjZSgvQlVHKENSKT8o
XGR7NX0pKFwgfCQpL2csIEVYVEVSTkFMX0JVR19SRVBMQUNFX1ZBTFVFKTsKKyAgICBidWdzID0g
YnVncy5yZXBsYWNlKC9CVUcoQ1IpPygxXGR7NX0pKFwgfCQpL2csIEVYVEVSTkFMX0JVR19SRVBM
QUNFX1ZBTFVFKTsKKyAgICBidWdzID0gYnVncy5yZXBsYWNlKC9CVUcoQ1IpPyhbMi05XVxkezV9
KShcIHwkKS9nLCBJTlRFUk5BTF9CVUdfUkVQTEFDRV9WQUxVRSk7CisgICAgYnVncyA9IGJ1Z3Mu
cmVwbGFjZSgvQlVHKENSKT8oXGR7N30pKFwgfCQpL2csIElOVEVSTkFMX0JVR19SRVBMQUNFX1ZB
TFVFKTsKKyAgICBidWdzID0gYnVncy5yZXBsYWNlKC9CVUcoV0spKFxkezV9XGQqPykoXCB8JCkv
ZywgV0VCS0lUX0JVR19SRVBMQUNFX1ZBTFVFKTsKKyAgICByZXR1cm4gYnVnczsKK30KKworZnVu
Y3Rpb24gbGlua0hUTUxUb09wZW5XaW5kb3codXJsLCB0ZXh0KQoreworICAgIHJldHVybiAnPGEg
aHJlZj0iJyArIHVybCArICciIHRhcmdldD0iX2JsYW5rIj4nICsgdGV4dCArICc8L2E+JzsKK30K
KworLy8gRklYTUU6IHJlcGxhY2VkIHdpdGggY2hyb21pdW1SZXZpc2lvbkxpbmsvd2ViS2l0UmV2
aXNpb25MaW5rCitmdW5jdGlvbiBjcmVhdGVCbGFtZUxpc3RIVE1MKHJldmlzaW9ucywgaW5kZXgs
IHVybEJhc2UsIHNlcGFyYXRvciwgcmVwbykKK3sKKyAgICB2YXIgdGhpc1JldmlzaW9uID0gcmV2
aXNpb25zW2luZGV4XTsKKyAgICBpZiAoIXRoaXNSZXZpc2lvbikKKyAgICAgICAgcmV0dXJuICcn
OworCisgICAgdmFyIHByZXZpb3VzUmV2aXNpb24gPSByZXZpc2lvbnNbaW5kZXggKyAxXTsKKyAg
ICBpZiAocHJldmlvdXNSZXZpc2lvbiAmJiBwcmV2aW91c1JldmlzaW9uICE9IHRoaXNSZXZpc2lv
bikgeworICAgICAgICBwcmV2aW91c1JldmlzaW9uKys7CisgICAgICAgIHJldHVybiBsaW5rSFRN
TFRvT3BlbldpbmRvdyh1cmxCYXNlICsgdGhpc1JldmlzaW9uICsgc2VwYXJhdG9yICsgcHJldmlv
dXNSZXZpc2lvbiwKKyAgICAgICAgICAgIHJlcG8gKyAnIGJsYW1lbGlzdCByJyArIHByZXZpb3Vz
UmV2aXNpb24gKyAnOnInICsgdGhpc1JldmlzaW9uKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0
dXJuICdBdCAnICsgcmVwbyArICcgcmV2aXNpb246ICcgKyB0aGlzUmV2aXNpb247Cit9CisKKy8v
IFJldHVybnMgd2hldGhlciB0aGUgcmVzdWx0IGZvciBpbmRleCd0aCByZXN1bHQgZm9yIHRlc3RO
YW1lIG9uIGJ1aWxkZXIgd2FzCisvLyBhIGZhaWx1cmUuCitmdW5jdGlvbiBpc0ZhaWx1cmUoYnVp
bGRlciwgdGVzdE5hbWUsIGluZGV4KQoreworICAgIHZhciBjdXJyZW50SW5kZXggPSAwOworICAg
IHZhciByYXdSZXN1bHRzID0gZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLnRlc3RzW3Rlc3RO
YW1lXS5yZXN1bHRzOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3UmVzdWx0cy5sZW5ndGg7
IGkrKykgeworICAgICAgICBjdXJyZW50SW5kZXggKz0gcmF3UmVzdWx0c1tpXVtSTEUuTEVOR1RI
XTsKKyAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+IGluZGV4KQorICAgICAgICAgICAgcmV0dXJu
IGlzRmFpbGluZ1Jlc3VsdChyYXdSZXN1bHRzW2ldW1JMRS5WQUxVRV0pOworICAgIH0KKyAgICBj
b25zb2xlLmVycm9yKCdJbmRleCBleGNlZWRzIG51bWJlciBvZiByZXN1bHRzOiAnICsgaW5kZXgp
OworfQorCisvLyBSZXR1cm5zIGFuIGFycmF5IG9mIGJ1aWxkTnVtYmVycyBmb3IgYWxsIGJ1aWxk
cyB3aGVyZSB0aGlzIHRlc3QgZmFpbGVkLgorZnVuY3Rpb24gYnVpbGROdW1iZXJzRm9yRmFpbHVy
ZXMoYnVpbGRlciwgdGVzdE5hbWUpCit7CisgICAgdmFyIHJhd1Jlc3VsdHMgPSBnX3Jlc3VsdHNC
eUJ1aWxkZXJbYnVpbGRlcl0udGVzdHNbdGVzdE5hbWVdLnJlc3VsdHM7CisgICAgdmFyIGJ1aWxk
TnVtYmVycyA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJlcnM7CisgICAg
dmFyIGluZGV4ID0gMDsKKyAgICB2YXIgZmFpbHVyZXMgPSBbXTsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHJhd1Jlc3VsdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIG51bVJlc3VsdHMg
PSByYXdSZXN1bHRzW2ldW1JMRS5MRU5HVEhdOworICAgICAgICBpZiAoaXNGYWlsaW5nUmVzdWx0
KHJhd1Jlc3VsdHNbaV1bUkxFLlZBTFVFXSkpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAw
OyBqIDwgbnVtUmVzdWx0czsgaisrKQorICAgICAgICAgICAgICAgIGZhaWx1cmVzLnB1c2goYnVp
bGROdW1iZXJzW2luZGV4ICsgal0pOworICAgICAgICB9CisgICAgICAgIGluZGV4ICs9IG51bVJl
c3VsdHM7CisgICAgfQorICAgIHJldHVybiBmYWlsdXJlczsKK30KKworLy8gUmV0dXJucyB0aGUg
cGF0aCB0byB0aGUgZmFpbHVyZSBsb2cgZm9yIHRoaXMgbm9uLXdlYmtpdCB0ZXN0LgorZnVuY3Rp
b24gcGF0aFRvRmFpbHVyZUxvZyh0ZXN0TmFtZSkKK3sKKyAgICByZXR1cm4gJy9zdGVwcy8nICsg
Z19jdXJyZW50U3RhdGUudGVzdFR5cGUgKyAnL2xvZ3MvJyArIHRlc3ROYW1lLnNwbGl0KCcuJylb
MV0KK30KKworZnVuY3Rpb24gc2hvd1BvcHVwRm9yQnVpbGQoZSwgYnVpbGRlciwgaW5kZXgsIG9w
dF90ZXN0TmFtZSkKK3sKKyAgICB2YXIgaHRtbCA9ICcnOworCisgICAgdmFyIHRpbWUgPSBnX3Jl
c3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0uc2Vjb25kc1NpbmNlRXBvY2hbaW5kZXhdOworICAgIGlm
ICh0aW1lKSB7CisgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUodGltZSAqIDEwMDApOworICAg
ICAgICBodG1sICs9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkgKyAnICcgKyBkYXRlLnRvTG9j
YWxlVGltZVN0cmluZygpOworICAgIH0KKworICAgIHZhciBidWlsZE51bWJlciA9IGdfcmVzdWx0
c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJlcnNbaW5kZXhdOworICAgIHZhciBtYXN0ZXIg
PSBidWlsZGVyTWFzdGVyKGJ1aWxkZXIpOworICAgIHZhciBidWlsZEJhc2VQYXRoID0gbWFzdGVy
LmdldExvZ1BhdGgoYnVpbGRlciwgYnVpbGROdW1iZXIpOworCisgICAgaHRtbCArPSAnPHVsPjxs
aT4nICsgbGlua0hUTUxUb09wZW5XaW5kb3coYnVpbGRCYXNlUGF0aCwgJ0J1aWxkIGxvZycpICsK
KyAgICAgICAgJzwvbGk+PGxpPicgKworICAgICAgICBjcmVhdGVCbGFtZUxpc3RIVE1MKGdfcmVz
dWx0c0J5QnVpbGRlcltidWlsZGVyXS53ZWJraXRSZXZpc2lvbiwgaW5kZXgsCisgICAgICAgICAg
ICAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9sb2cvP3ZlcmJvc2U9b24mcmV2PScsICcmc3RvcF9y
ZXY9JywKKyAgICAgICAgICAgICdXZWJLaXQnKSArCisgICAgICAgICc8L2xpPic7CisKKyAgICBp
ZiAobWFzdGVyID09IFdFQktJVF9CVUlMREVSX01BU1RFUikgeworICAgICAgICB2YXIgcmV2aXNp
b24gPSBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0ud2Via2l0UmV2aXNpb25baW5kZXhdOwor
ICAgICAgICBodG1sICs9ICc8bGk+PHNwYW4gY2xhc3M9bGluayBvbmNsaWNrPSJzZXRRdWVyeVBh
cmFtZXRlcihcJ3JldmlzaW9uXCcsJyArCisgICAgICAgICAgICByZXZpc2lvbiArICcpIj5TaG93
IHJlc3VsdHMgZm9yIFdlYktpdCByJyArIHJldmlzaW9uICsKKyAgICAgICAgICAgICc8L3NwYW4+
PC9saT4nOworICAgIH0gZWxzZSB7CisgICAgICAgIGh0bWwgKz0gJzxsaT4nICsKKyAgICAgICAg
ICAgIGNyZWF0ZUJsYW1lTGlzdEhUTUwoZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLmNocm9t
ZVJldmlzaW9uLCBpbmRleCwKKyAgICAgICAgICAgICAgICAnaHR0cDovL2J1aWxkLmNocm9taXVt
Lm9yZy9mL2Nocm9taXVtL3BlcmYvZGFzaGJvYXJkL3VpL2NoYW5nZWxvZy5odG1sP3VybD0vdHJ1
bmsvc3JjJm1vZGU9aHRtbCZyYW5nZT0nLCAnOicsICdDaHJvbWUnKSArCisgICAgICAgICAgICAn
PC9saT4nOworCisgICAgICAgIHZhciBjaHJvbWVSZXZpc2lvbiA9IGdfcmVzdWx0c0J5QnVpbGRl
cltidWlsZGVyXS5jaHJvbWVSZXZpc2lvbltpbmRleF07CisgICAgICAgIGlmIChjaHJvbWVSZXZp
c2lvbiAmJiBpc0xheW91dFRlc3RSZXN1bHRzKCkpIHsKKyAgICAgICAgICAgIGh0bWwgKz0gJzxs
aT48YSBocmVmPSInICsgVEVTVF9SRVNVTFRTX0JBU0VfUEFUSCArIGdfYnVpbGRlcnNbYnVpbGRl
cl0gKworICAgICAgICAgICAgICAgICcvJyArIGNocm9tZVJldmlzaW9uICsgJy9sYXlvdXQtdGVz
dC1yZXN1bHRzLnppcCI+bGF5b3V0LXRlc3QtcmVzdWx0cy56aXA8L2E+PC9saT4nOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKCFpc0xheW91dFRlc3RSZXN1bHRzKCkgJiYgb3B0X3Rlc3RO
YW1lICYmIGlzRmFpbHVyZShidWlsZGVyLCBvcHRfdGVzdE5hbWUsIGluZGV4KSkKKyAgICAgICAg
aHRtbCArPSAnPGxpPicgKyBsaW5rSFRNTFRvT3BlbldpbmRvdyhidWlsZEJhc2VQYXRoICsgcGF0
aFRvRmFpbHVyZUxvZyhvcHRfdGVzdE5hbWUpLCAnRmFpbHVyZSBsb2cnKSArICc8L2xpPic7CisK
KyAgICBodG1sICs9ICc8L3VsPic7CisgICAgc2hvd1BvcHVwKGUsIGh0bWwpOworfQorCitmdW5j
dGlvbiBodG1sRm9yVGVzdFJlc3VsdHModGVzdCkKK3sKKyAgICB2YXIgaHRtbCA9ICcnOworICAg
IHZhciByZXN1bHRzID0gdGVzdC5yYXdSZXN1bHRzLmNvbmNhdCgpOworICAgIHZhciB0aW1lcyA9
IHRlc3QucmF3VGltZXMuY29uY2F0KCk7CisgICAgdmFyIGJ1aWxkZXIgPSB0ZXN0LmJ1aWxkZXI7
CisgICAgdmFyIG1hc3RlciA9IGJ1aWxkZXJNYXN0ZXIoYnVpbGRlcik7CisgICAgdmFyIGJ1aWxk
TnVtYmVycyA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJlcnM7CisKKyAg
ICB2YXIgaW5kZXhUb1JlcGxhY2VDdXJyZW50UmVzdWx0ID0gLTE7CisgICAgdmFyIGluZGV4VG9S
ZXBsYWNlQ3VycmVudFRpbWUgPSAtMTsKKyAgICB2YXIgY3VycmVudFJlc3VsdEFycmF5LCBjdXJy
ZW50VGltZUFycmF5LCBjdXJyZW50UmVzdWx0LCBpbm5lckhUTUwsIHJlc3VsdFN0cmluZzsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1aWxkTnVtYmVycy5sZW5ndGg7IGkrKykgeworICAgICAg
ICBpZiAoaSA+IGluZGV4VG9SZXBsYWNlQ3VycmVudFJlc3VsdCkgeworICAgICAgICAgICAgY3Vy
cmVudFJlc3VsdEFycmF5ID0gcmVzdWx0cy5zaGlmdCgpOworICAgICAgICAgICAgaWYgKGN1cnJl
bnRSZXN1bHRBcnJheSkgeworICAgICAgICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSBjdXJyZW50
UmVzdWx0QXJyYXlbUkxFLlZBTFVFXTsKKyAgICAgICAgICAgICAgICAvLyBUcmVhdCBzaW1wbGlm
aWVkIGRpZmYgZmFpbHVyZXMgYXMganVzdCB0ZXh0IGZhaWx1cmVzLgorICAgICAgICAgICAgICAg
IGlmIChjdXJyZW50UmVzdWx0ID09ICdTJykKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFJl
c3VsdCA9ICdGJzsKKyAgICAgICAgICAgICAgICBpbmRleFRvUmVwbGFjZUN1cnJlbnRSZXN1bHQg
Kz0gY3VycmVudFJlc3VsdEFycmF5W1JMRS5MRU5HVEhdOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBjdXJyZW50UmVzdWx0ID0gJ04nOworICAgICAgICAgICAgICAgIGlu
ZGV4VG9SZXBsYWNlQ3VycmVudFJlc3VsdCArPSBidWlsZE51bWJlcnMubGVuZ3RoOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmVzdWx0U3RyaW5nID0gZXhwZWN0YXRpb25zRmlsZVN0cmlu
Z0ZvclJlc3VsdChjdXJyZW50UmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpID4g
aW5kZXhUb1JlcGxhY2VDdXJyZW50VGltZSkgeworICAgICAgICAgICAgY3VycmVudFRpbWVBcnJh
eSA9IHRpbWVzLnNoaWZ0KCk7CisgICAgICAgICAgICB2YXIgY3VycmVudFRpbWUgPSAwOworICAg
ICAgICAgICAgaWYgKGN1cnJlbnRSZXN1bHRBcnJheSkgeworICAgICAgICAgICAgICBjdXJyZW50
VGltZSA9IGN1cnJlbnRUaW1lQXJyYXlbUkxFLlZBTFVFXTsKKyAgICAgICAgICAgICAgaW5kZXhU
b1JlcGxhY2VDdXJyZW50VGltZSArPSBjdXJyZW50VGltZUFycmF5W1JMRS5MRU5HVEhdOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgIGluZGV4VG9SZXBsYWNlQ3VycmVudFRpbWUg
Kz0gYnVpbGROdW1iZXJzLmxlbmd0aDsKKworICAgICAgICAgICAgaW5uZXJIVE1MID0gY3VycmVu
dFRpbWUgfHwgJyZuYnNwOyc7CisgICAgICAgIH0KKworICAgICAgICB2YXIgZXh0cmFDbGFzc05h
bWVzID0gJyc7CisgICAgICAgIHZhciB3ZWJraXRSZXZpc2lvbiA9IGdfcmVzdWx0c0J5QnVpbGRl
cltidWlsZGVyXS53ZWJraXRSZXZpc2lvbjsKKyAgICAgICAgdmFyIGlzV2Via2l0TWVyZ2UgPSB3
ZWJraXRSZXZpc2lvbltpICsgMV0gJiYgd2Via2l0UmV2aXNpb25baV0gIT0gd2Via2l0UmV2aXNp
b25baSArIDFdOworICAgICAgICBpZiAoaXNXZWJraXRNZXJnZSAmJiBtYXN0ZXIgIT0gV0VCS0lU
X0JVSUxERVJfTUFTVEVSKQorICAgICAgICAgICAgZXh0cmFDbGFzc05hbWVzICs9ICcgbWVyZ2Un
OworCisgICAgICAgIGh0bWwgKz0gJzx0ZCB0aXRsZT0iJyArIChyZXN1bHRTdHJpbmcgfHwgJ05P
IERBVEEnKSArICcuIENsaWNrIGZvciBtb3JlIGluZm8uIiBjbGFzcz0icmVzdWx0cyAnICsgY3Vy
cmVudFJlc3VsdCArCisgICAgICAgICAgZXh0cmFDbGFzc05hbWVzICsgJyIgb25jbGljaz1cJ3No
b3dQb3B1cEZvckJ1aWxkKGV2ZW50LCAiJyArIGJ1aWxkZXIgKyAnIiwnICsgaSArICcsIicgKyB0
ZXN0LnRlc3QgKyAnIilcJz4nICsgaW5uZXJIVE1MOworICAgIH0KKyAgICByZXR1cm4gaHRtbDsK
K30KKworZnVuY3Rpb24gaHRtbEZvclRlc3RzV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXMo
YnVpbGRlcikKK3sKKyAgICB2YXIgdGVzdHMgPSBnX3BlckJ1aWxkZXJXaXRoRXhwZWN0YXRpb25z
QnV0Tm9GYWlsdXJlc1tidWlsZGVyXTsKKyAgICB2YXIgc2tpcHBlZFBhdGhzID0gZ19wZXJCdWls
ZGVyU2tpcHBlZFBhdGhzW2J1aWxkZXJdOworCisgICAgdmFyIGh0bWwgPSAnJzsKKyAgICBpZiAo
dGVzdHMubGVuZ3RoIHx8IHNraXBwZWRQYXRocy5sZW5ndGgpIHsKKyAgICAgICAgdmFyIGJ1aWxk
SW5mbyA9IHBsYXRmb3JtQW5kQnVpbGRUeXBlKGJ1aWxkZXIpOworICAgICAgICBodG1sICs9ICc8
aDI+RXhwZWN0YXRpb25zIGZvciAnICsgYnVpbGRJbmZvLnBsYXRmb3JtICsgJy0nICsgYnVpbGRJ
bmZvLmJ1aWxkVHlwZSArICc6PC9oMj4nOworICAgIH0KKworICAgIHZhciBvcGVuID0gJzxkaXYg
b25jbGljaz0ic2VsZWN0Q29udGVudHModGhpcykiPic7CisKKyAgICBpZiAodGVzdHMubGVuZ3Ro
KSB7CisgICAgICAgIGh0bWwgKz0gICc8aDM+JyArIGxpbmtIVE1MVG9Ub2dnbGVTdGF0ZSgnc2hv
d1VuZXhwZWN0ZWRQYXNzZXMnLCAndGVzdHMgdGhhdCBoYXZlIG5vdCBmYWlsZWQgaW4gbGFzdCAn
ICsgZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLmJ1aWxkTnVtYmVycy5sZW5ndGggKyAnIHJ1
bnMuJykgKyAnPC9oMz4nOworICAgICAgICAKKyAgICAgICAgaWYgKGdfY3VycmVudFN0YXRlLnNo
b3dVbmV4cGVjdGVkUGFzc2VzKSB7CisgICAgICAgICAgICBodG1sICs9ICc8ZGl2IGlkPSJwYXNz
aW5nLXRlc3RzIj4nOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5n
dGg7IGkrKykKKyAgICAgICAgICAgICAgICBodG1sICs9IG9wZW4gKyB0ZXN0c1tpXS50ZXN0ICsg
JzwvZGl2Pic7CisgICAgICAgICAgICBodG1sICs9ICc8L2Rpdj4nOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKHNraXBwZWRQYXRocy5sZW5ndGgpIHsKKyAgICAgICAgaHRtbCArPSAnPGgz
PicgKyBsaW5rSFRNTFRvVG9nZ2xlU3RhdGUoJ3Nob3dTa2lwcGVkJywgJ3NraXBwZWQgdGVzdHMg
aW4gdGVzdF9leHBlY3RhdGlvbnMudHh0JykgKyAnPC9oMz4nOworCisgICAgICAgIGlmIChnX2N1
cnJlbnRTdGF0ZS5zaG93U2tpcHBlZCkKKyAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgaWQ9InNr
aXBwZWQtdGVzdHMiPicgKyBvcGVuICsgc2tpcHBlZFBhdGhzLmpvaW4oJzwvZGl2PicgKyBvcGVu
KSArICc8L2Rpdj48L2Rpdj4nOworICAgIH0KKyAgICByZXR1cm4gaHRtbDsKK30KKworLy8gUmV0
dXJucyB3aGV0aGVyIHdlIHNob3VsZCBleGNsdWRlIHRlc3QgcmVzdWx0cyBmcm9tIHRoZSB0ZXN0
IHRhYmxlLgorZnVuY3Rpb24gc2hvdWxkSGlkZVRlc3QodGVzdFJlc3VsdCkKK3sKKyAgICBpZiAo
dGVzdFJlc3VsdC5pc1dvbnRGaXhTa2lwKQorICAgICAgICByZXR1cm4gIWdfY3VycmVudFN0YXRl
LnNob3dXb250Rml4U2tpcDsKKworICAgIGlmICh0ZXN0UmVzdWx0LmlzRmxha3kpCisgICAgICAg
IHJldHVybiAhZ19jdXJyZW50U3RhdGUuc2hvd0ZsYWt5OworCisgICAgaWYgKGlzU2xvd1Rlc3Qo
dGVzdFJlc3VsdCkpCisgICAgICAgIHJldHVybiAhZ19jdXJyZW50U3RhdGUuc2hvd1Nsb3c7CisK
KyAgICBpZiAodGVzdFJlc3VsdC5tZWV0c0V4cGVjdGF0aW9ucykKKyAgICAgICAgcmV0dXJuICFn
X2N1cnJlbnRTdGF0ZS5zaG93Q29ycmVjdEV4cGVjdGF0aW9uczsKKworICAgIHJldHVybiAhZ19j
dXJyZW50U3RhdGUuc2hvd1dyb25nRXhwZWN0YXRpb25zOworfQorCisvLyBTZXRzIHRoZSBicm93
c2VyJ3Mgc2VsZWN0aW9uIHRvIHRoZSBlbGVtZW50J3MgY29udGVudHMuCitmdW5jdGlvbiBzZWxl
Y3RDb250ZW50cyhlbGVtZW50KQoreworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RB
bGxDaGlsZHJlbihlbGVtZW50KTsKK30KKworZnVuY3Rpb24gY3JlYXRlQnVnSFRNTCh0ZXN0KQor
eworICAgIHZhciBzeW1wdG9tID0gdGVzdC5pc0ZsYWt5ID8gJ2ZsYWt5JyA6ICdmYWlsaW5nJzsK
KyAgICB2YXIgdGl0bGUgPSBlbmNvZGVVUklDb21wb25lbnQoJ0xheW91dCBUZXN0ICcgKyB0ZXN0
LnRlc3QgKyAnIGlzICcgKyBzeW1wdG9tKTsKKyAgICB2YXIgZGVzY3JpcHRpb24gPSBlbmNvZGVV
UklDb21wb25lbnQoJ1RoZSBmb2xsb3dpbmcgbGF5b3V0IHRlc3QgaXMgJyArIHN5bXB0b20gKyAn
IG9uICcgKworICAgICAgICAnW2luc2VydCBwbGF0Zm9ybV1cblxuJyArIHRlc3QudGVzdCArICdc
blxuUHJvYmFibGUgY2F1c2U6XG5cbicgKworICAgICAgICAnW2luc2VydCBwcm9iYWJsZSBjYXVz
ZV0nKTsKKyAgICAKKyAgICB2YXIgY29tcG9uZW50ID0gZW5jb2RlVVJJQ29tcG9uZW50KCdUb29s
cyAvIFRlc3RzJyk7CisgICAgdXJsID0gJ2h0dHBzOi8vYnVncy53ZWJraXQub3JnL2VudGVyX2J1
Zy5jZ2k/YXNzaWduZWRfdG89d2Via2l0LXVuYXNzaWduZWQlNDBsaXN0cy53ZWJraXQub3JnJnBy
b2R1Y3Q9V2ViS2l0JmZvcm1fbmFtZT1lbnRlcl9idWcmY29tcG9uZW50PScgKyBjb21wb25lbnQg
KyAnJnNob3J0X2Rlc2M9JyArIHRpdGxlICsgJyZjb21tZW50PScgKyBkZXNjcmlwdGlvbjsKKyAg
ICByZXR1cm4gJzxhIGhyZWY9IicgKyB1cmwgKyAnIiBjbGFzcz0iZmlsZS1idWciPkZJTEUgQlVH
PC9hPic7Cit9CisKK2Z1bmN0aW9uIGlzQ3Jvc3NCdWlsZGVyVmlldygpCit7CisgICAgcmV0dXJu
IGdfY3VycmVudFN0YXRlLnRlc3RzIHx8IGdfY3VycmVudFN0YXRlLnJlc3VsdCB8fCBnX2N1cnJl
bnRTdGF0ZS5leHBlY3RhdGlvbnNVcGRhdGU7Cit9CisKK2Z1bmN0aW9uIHRhYmxlSGVhZGVycyhv
cHRfZ2V0QWxsKQoreworICAgIHZhciBoZWFkZXJzID0gW107CisgICAgaWYgKGlzQ3Jvc3NCdWls
ZGVyVmlldygpIHx8IG9wdF9nZXRBbGwpCisgICAgICAgIGhlYWRlcnMucHVzaCgnYnVpbGRlcicp
OworCisgICAgaWYgKCFpc0Nyb3NzQnVpbGRlclZpZXcoKSB8fCBvcHRfZ2V0QWxsKQorICAgICAg
ICBoZWFkZXJzLnB1c2goJ3Rlc3QnKTsKKworICAgIGlmIChpc0xheW91dFRlc3RSZXN1bHRzKCkg
fHwgb3B0X2dldEFsbCkKKyAgICAgICAgaGVhZGVycy5wdXNoKCdidWdzJywgJ21vZGlmaWVycycs
ICdleHBlY3RhdGlvbnMnKTsKKworICAgIGhlYWRlcnMucHVzaCgnc2xvd2VzdCBydW4nLCAnJSBm
YWlsJywgJ2ZsYWtpbmVzcyAobnVtYmVycyBhcmUgcnVudGltZXMgaW4gc2Vjb25kcyknKTsKKyAg
ICByZXR1cm4gaGVhZGVyczsKK30KKworZnVuY3Rpb24gaHRtbEZvclNpbmdsZVRlc3RSb3codGVz
dCkKK3sKKyAgICBpZiAoIWlzQ3Jvc3NCdWlsZGVyVmlldygpICYmIHNob3VsZEhpZGVUZXN0KHRl
c3QpKSB7CisgICAgICAgIC8vIFRoZSBpbm5lckhUTUwgY2FsbCBpcyBjb25zaWRlcmFibHkgZmFz
dGVyIGlmIHdlIGV4Y2x1ZGUgdGhlIHJvd3MgZm9yCisgICAgICAgIC8vIGl0ZW1zIHdlJ3JlIG5v
dCBzaG93aW5nIHRoYW4gaWYgd2UgaGlkZSB0aGVtIHVzaW5nIGRpc3BsYXk6bm9uZS4KKyAgICAg
ICAgLy8gRm9yIHRoZSBjcm9zc0J1aWxkZXJWaWV3LCB3ZSB3YW50IHRvIHNob3cgYWxsIHJvd3Mg
dGhlIHVzZXIgaXMKKyAgICAgICAgLy8gZXhwbGljaXRseSBsaXN0aW5nIHRlc3RzIHRvIHZpZXcu
CisgICAgICAgIHJldHVybiAnJzsKKyAgICB9CisKKyAgICB2YXIgaGVhZGVycyA9IHRhYmxlSGVh
ZGVycygpOworICAgIHZhciBodG1sID0gJyc7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFk
ZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBoZWFkZXIgPSBoZWFkZXJzW2ldOworICAg
ICAgICB2YXIgZmlsdGVyZWRNb2RpZmllcnMgPSBmaWx0ZXJCdWdzKHRlc3QubW9kaWZpZXJzKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChzdGFydHNXaXRoKGhlYWRlciwgJ3Rlc3QnKSB8fCBzdGFy
dHNXaXRoKGhlYWRlciwgJ2J1aWxkZXInKSkgeworICAgICAgICAgICAgLy8gSWYgaXNDcm9zc0J1
aWxkZXJWaWV3KCkgaXMgdHJ1ZSwgd2UncmUganVzdCB2aWV3aW5nIGEgc2luZ2xlIHRlc3QKKyAg
ICAgICAgICAgIC8vIHdpdGggcmVzdWx0cyBmb3IgbWFueSBidWlsZGVycywgc28gdGhlIGZpcnN0
IGNvbHVtbiBpcyBidWlsZGVyIG5hbWVzCisgICAgICAgICAgICAvLyBpbnN0ZWFkIG9mIHRlc3Qg
cGF0aHMuCisgICAgICAgICAgICB2YXIgdGVzdENlbGxDbGFzc05hbWUgPSAndGVzdC1saW5rJyAr
IChpc0Nyb3NzQnVpbGRlclZpZXcoKSA/ICcgYnVpbGRlci1uYW1lJyA6ICcnKTsKKyAgICAgICAg
ICAgIHZhciB0ZXN0Q2VsbEhUTUwgPSBpc0Nyb3NzQnVpbGRlclZpZXcoKSA/IHRlc3QuYnVpbGRl
ciA6ICc8c3BhbiBjbGFzcz0ibGluayIgb25jbGljaz0ic2V0UXVlcnlQYXJhbWV0ZXIoXCd0ZXN0
c1wnLFwnJyArIHRlc3QudGVzdCArJ1wnKTsiPicgKyB0ZXN0LnRlc3QgKyAnPC9zcGFuPic7CisK
KyAgICAgICAgICAgIGh0bWwgKz0gJzx0ciBjbGFzcz0iJyArICh0ZXN0Lm1lZXRzRXhwZWN0YXRp
b25zID8gJycgOiAnd3JvbmctZXhwZWN0YXRpb25zJykgKyAnIj48dGQgY2xhc3M9IicgKyB0ZXN0
Q2VsbENsYXNzTmFtZSArICciPicgKyB0ZXN0Q2VsbEhUTUw7CisgICAgICAgIH0gZWxzZSBpZiAo
c3RhcnRzV2l0aChoZWFkZXIsICdidWdzJykpCisgICAgICAgICAgICBodG1sICs9ICc8dGQgY2xh
c3M9b3B0aW9ucy1jb250YWluZXI+JyArIChmaWx0ZXJlZE1vZGlmaWVycy5idWdzID8gaHRtbEZv
ckJ1Z3MoZmlsdGVyZWRNb2RpZmllcnMuYnVncykgOiBjcmVhdGVCdWdIVE1MKHRlc3QpKTsKKyAg
ICAgICAgZWxzZSBpZiAoc3RhcnRzV2l0aChoZWFkZXIsICdtb2RpZmllcnMnKSkKKyAgICAgICAg
ICAgIGh0bWwgKz0gJzx0ZCBjbGFzcz1vcHRpb25zLWNvbnRhaW5lcj4nICsgZmlsdGVyZWRNb2Rp
ZmllcnMubW9kaWZpZXJzOworICAgICAgICBlbHNlIGlmIChzdGFydHNXaXRoKGhlYWRlciwgJ2V4
cGVjdGF0aW9ucycpKQorICAgICAgICAgICAgaHRtbCArPSAnPHRkIGNsYXNzPW9wdGlvbnMtY29u
dGFpbmVyPicgKyB0ZXN0LmV4cGVjdGF0aW9uczsKKyAgICAgICAgZWxzZSBpZiAoc3RhcnRzV2l0
aChoZWFkZXIsICdzbG93ZXN0JykpCisgICAgICAgICAgICBodG1sICs9ICc8dGQ+JyArICh0ZXN0
LnNsb3dlc3RUaW1lID8gdGVzdC5zbG93ZXN0VGltZSArICdzJyA6ICcnKTsKKyAgICAgICAgZWxz
ZSBpZiAoc3RhcnRzV2l0aChoZWFkZXIsICclIGZhaWwnKSkKKyAgICAgICAgICAgIGh0bWwgKz0g
Jzx0ZD4nICsgdGVzdC5wZXJjZW50RmFpbGVkOworICAgICAgICBlbHNlIGlmIChzdGFydHNXaXRo
KGhlYWRlciwgJ2ZsYWtpbmVzcycpKQorICAgICAgICAgICAgaHRtbCArPSBodG1sRm9yVGVzdFJl
c3VsdHModGVzdCwgaXNDcm9zc0J1aWxkZXJWaWV3KCkpOworICAgIH0KKyAgICByZXR1cm4gaHRt
bDsKK30KKworZnVuY3Rpb24gc29ydENvbHVtbkZyb21UYWJsZUhlYWRlcihoZWFkZXJUZXh0KQor
eworICAgIHJldHVybiBoZWFkZXJUZXh0LnNwbGl0KCcgJywgMSlbMF07Cit9CisKK2Z1bmN0aW9u
IGh0bWxGb3JUYWJsZUNvbHVtbkhlYWRlcihoZWFkZXJOYW1lLCBvcHRfZmlsbENvbFNwYW4pCit7
CisgICAgLy8gVXNlIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBoZWFkZXIgdGl0bGUgYXMgdGhlIHNv
cnRrZXkKKyAgICB2YXIgdGhpc1NvcnRWYWx1ZSA9IHNvcnRDb2x1bW5Gcm9tVGFibGVIZWFkZXIo
aGVhZGVyTmFtZSk7CisgICAgdmFyIGFycm93SFRNTCA9IHRoaXNTb3J0VmFsdWUgPT0gZ19jdXJy
ZW50U3RhdGUuc29ydENvbHVtbiA/CisgICAgICAgICc8c3BhbiBjbGFzcz0nICsgZ19jdXJyZW50
U3RhdGUuc29ydE9yZGVyICsgJz4nICsgKGdfY3VycmVudFN0YXRlLnNvcnRPcmRlciA9PSBGT1JX
QVJEID8gJyZ1YXJyOycgOiAnJmRhcnI7JyApICsgJzwvc3Bhbj4nIDogJyc7CisgICAgcmV0dXJu
ICc8dGggc29ydFZhbHVlPScgKyB0aGlzU29ydFZhbHVlICsKKyAgICAgICAgLy8gRXh0ZW5kIGxh
c3QgdGggdGhyb3VnaCBhbGwgdGhlIHJlc3Qgb2YgdGhlIGNvbHVtbnMuCisgICAgICAgIChvcHRf
ZmlsbENvbFNwYW4gPyAnIGNvbHNwYW49MTAwMDAnIDogJycpICsKKyAgICAgICAgLy8gRXh0cmEg
c3BhbiBoZXJlIGlzIHNvIGZsZXggYm94aW5nIGFjdHVhbGx5IGNlbnRlcnMuCisgICAgICAgIC8v
IFRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgd2l0aCBDU1Mgb25seSB0
aG91Z2guCisgICAgICAgICc+PGRpdiBjbGFzcz10YWJsZS1oZWFkZXItY29udGVudD48c3Bhbj48
L3NwYW4+JyArIGFycm93SFRNTCArCisgICAgICAgICc8c3BhbiBjbGFzcz1oZWFkZXItdGV4dD4n
ICsgaGVhZGVyTmFtZSArICc8L3NwYW4+JyArIGFycm93SFRNTCArICc8L2Rpdj48L3RoPic7Cit9
CisKK2Z1bmN0aW9uIGh0bWxGb3JUZXN0VGFibGUocm93c0hUTUwsIG9wdF9leGNsdWRlSGVhZGVy
cykKK3sKKyAgICB2YXIgaHRtbCA9ICc8dGFibGUgY2xhc3M9dGVzdC10YWJsZT4nOworICAgIGlm
ICghb3B0X2V4Y2x1ZGVIZWFkZXJzKSB7CisgICAgICAgIGh0bWwgKz0gJzx0aGVhZD48dHI+JzsK
KyAgICAgICAgdmFyIGhlYWRlcnMgPSB0YWJsZUhlYWRlcnMoKTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgaHRtbCArPSBodG1s
Rm9yVGFibGVDb2x1bW5IZWFkZXIoaGVhZGVyc1tpXSwgaSA9PSBoZWFkZXJzLmxlbmd0aCAtIDEp
OworICAgICAgICBodG1sICs9ICc8L3RyPjwvdGhlYWQ+JzsKKyAgICB9CisgICAgcmV0dXJuIGh0
bWwgKyAnPHRib2R5PicgKyByb3dzSFRNTCArICc8L3Rib2R5PjwvdGFibGU+JzsKK30KKworZnVu
Y3Rpb24gYXBwZW5kSFRNTChodG1sKQoreworICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygp
OworICAgIC8vIElubmVySFRNTCB0byBhIGRpdiB0aGF0J3Mgbm90IGluIHRoZSBkb2N1bWVudC4g
VGhpcyBpcworICAgIC8vIH4zMDBtcyBmYXN0ZXIgaW4gU2FmYXJpIDQgYW5kIENocm9tZSA0IG9u
IG1hYy4KKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAg
ZGl2LmlubmVySFRNTCA9IGh0bWw7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYp
OworICAgIGxvZ1RpbWUoJ1RpbWUgdG8gaW5uZXJIVE1MJywgc3RhcnRUaW1lKTsKK30KKworZnVu
Y3Rpb24gYWxwaGFudW1lcmljQ29tcGFyZShjb2x1bW4sIHJldmVyc2UpCit7CisgICAgcmV0dXJu
IHJldmVyc2libGVDb21wYXJlRnVuY3Rpb24oZnVuY3Rpb24oYSwgYikgeworICAgICAgICAvLyBQ
dXQgbnVsbCBlbnRyaWVzIGF0IHRoZSBib3R0b20KKyAgICAgICAgdmFyIGEgPSBhW2NvbHVtbl0g
PyBTdHJpbmcoYVtjb2x1bW5dKSA6ICd6JzsKKyAgICAgICAgdmFyIGIgPSBiW2NvbHVtbl0gPyBT
dHJpbmcoYltjb2x1bW5dKSA6ICd6JzsKKworICAgICAgICBpZiAoYSA8IGIpCisgICAgICAgICAg
ICByZXR1cm4gLTE7CisgICAgICAgIGVsc2UgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICB9LCByZXZlcnNl
KTsKK30KKworZnVuY3Rpb24gbnVtZXJpY1NvcnQoY29sdW1uLCByZXZlcnNlKQoreworICAgIHJl
dHVybiByZXZlcnNpYmxlQ29tcGFyZUZ1bmN0aW9uKGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAg
YSA9IHBhcnNlRmxvYXQoYVtjb2x1bW5dKTsKKyAgICAgICAgYiA9IHBhcnNlRmxvYXQoYltjb2x1
bW5dKTsKKyAgICAgICAgcmV0dXJuIGEgLSBiOworICAgIH0sIHJldmVyc2UpOworfQorCitmdW5j
dGlvbiByZXZlcnNpYmxlQ29tcGFyZUZ1bmN0aW9uKGNvbXBhcmUsIHJldmVyc2UpCit7CisgICAg
cmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAgcmV0dXJuIGNvbXBhcmUocmV2ZXJzZSA/
IGIgOiBhLCByZXZlcnNlID8gYSA6IGIpOworICAgIH07Cit9CisKK2Z1bmN0aW9uIGNoYW5nZVNv
cnQoZSkKK3sKKyAgICB2YXIgdGFyZ2V0ID0gZS5jdXJyZW50VGFyZ2V0OworICAgIGUucHJldmVu
dERlZmF1bHQoKTsKKworICAgIHZhciBzb3J0VmFsdWUgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdz
b3J0VmFsdWUnKTsKKyAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldC50YWdOYW1lICE9ICdUQUJM
RScpCisgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlOworCisgICAgdmFyIHNvcnQg
PSAnc29ydENvbHVtbic7CisgICAgdmFyIG9yZGVyS2V5ID0gJ3NvcnRPcmRlcic7CisgICAgaWYg
KHNvcnRWYWx1ZSA9PSBnX2N1cnJlbnRTdGF0ZVtzb3J0XSAmJiBnX2N1cnJlbnRTdGF0ZVtvcmRl
cktleV0gPT0gRk9SV0FSRCkKKyAgICAgICAgb3JkZXIgPSBCQUNLV0FSRDsKKyAgICBlbHNlCisg
ICAgICAgIG9yZGVyID0gRk9SV0FSRDsKKworICAgIHNldFF1ZXJ5UGFyYW1ldGVyKHNvcnQsIHNv
cnRWYWx1ZSwgb3JkZXJLZXksIG9yZGVyKTsKK30KKworZnVuY3Rpb24gc29ydFRlc3RzKHRlc3Rz
LCBjb2x1bW4sIG9yZGVyKQoreworICAgIHZhciByZXN1bHRzUHJvcGVydHksIHNvcnRGdW5jdGlv
bkdldHRlcjsKKyAgICBpZiAoY29sdW1uID09ICdmbGFraW5lc3MnKSB7CisgICAgICAgIHNvcnRG
dW5jdGlvbkdldHRlciA9IG51bWVyaWNTb3J0OworICAgICAgICByZXN1bHRzUHJvcGVydHkgPSAn
ZmxpcHMnOworICAgIH0gZWxzZSBpZiAoY29sdW1uID09ICdzbG93ZXN0JykgeworICAgICAgICBz
b3J0RnVuY3Rpb25HZXR0ZXIgPSBudW1lcmljU29ydDsKKyAgICAgICAgcmVzdWx0c1Byb3BlcnR5
ID0gJ3Nsb3dlc3RUaW1lJzsKKyAgICB9IGVsc2UgaWYgKGNvbHVtbiA9PSAnJScpIHsKKyAgICAg
ICAgc29ydEZ1bmN0aW9uR2V0dGVyID0gbnVtZXJpY1NvcnQ7CisgICAgICAgIHJlc3VsdHNQcm9w
ZXJ0eSA9ICdwZXJjZW50RmFpbGVkJzsKKyAgICB9IGVsc2UgeworICAgICAgICBzb3J0RnVuY3Rp
b25HZXR0ZXIgPSBhbHBoYW51bWVyaWNDb21wYXJlOworICAgICAgICByZXN1bHRzUHJvcGVydHkg
PSBjb2x1bW47CisgICAgfQorCisgICAgdGVzdHMuc29ydChzb3J0RnVuY3Rpb25HZXR0ZXIocmVz
dWx0c1Byb3BlcnR5LCBvcmRlciA9PSBCQUNLV0FSRCkpOworfQorCisvLyBTb3J0cyBhIHNwYWNl
IHNlcGFyYXRlZCBleHBlY3RhdGlvbnMgc3RyaW5nIGluIGFscGhhbnVtZXJpYyBvcmRlci4KKy8v
IEBwYXJhbSB7c3RyaW5nfSBzdHIgVGhlIGV4cGVjdGF0aW9ucyBzdHJpbmcuCisvLyBAcmV0dXJu
IHtzdHJpbmd9IFRoZSBzb3J0ZWQgc3RyaW5nLgorZnVuY3Rpb24gc29ydEV4cGVjdGF0aW9uc1N0
cmluZyhzdHIpCit7CisgICAgcmV0dXJuIHN0ci5zcGxpdCgnICcpLnNvcnQoKS5qb2luKCcgJyk7
Cit9CisKK2Z1bmN0aW9uIGFkZFVwZGF0ZSh0ZXN0c05lZWRpbmdVcGRhdGUsIHRlc3QsIGJ1aWxk
ZXJOYW1lLCBtaXNzaW5nLCBleHRyYSkKK3sKKyAgICBpZiAoIXRlc3RzTmVlZGluZ1VwZGF0ZVt0
ZXN0XSkKKyAgICAgICAgdGVzdHNOZWVkaW5nVXBkYXRlW3Rlc3RdID0ge307CisKKyAgICB2YXIg
YnVpbGRJbmZvID0gcGxhdGZvcm1BbmRCdWlsZFR5cGUoYnVpbGRlck5hbWUpOworICAgIHZhciBi
dWlsZGVyID0gYnVpbGRJbmZvLnBsYXRmb3JtICsgJyAnICsgYnVpbGRJbmZvLmJ1aWxkVHlwZTsK
KyAgICBpZiAoIXRlc3RzTmVlZGluZ1VwZGF0ZVt0ZXN0XVtidWlsZGVyXSkKKyAgICAgICAgdGVz
dHNOZWVkaW5nVXBkYXRlW3Rlc3RdW2J1aWxkZXJdID0ge307CisKKyAgICBpZiAobWlzc2luZykK
KyAgICAgICAgdGVzdHNOZWVkaW5nVXBkYXRlW3Rlc3RdW2J1aWxkZXJdLm1pc3NpbmcgPSBzb3J0
RXhwZWN0YXRpb25zU3RyaW5nKG1pc3NpbmcpOworCisgICAgaWYgKGV4dHJhKQorICAgICAgICB0
ZXN0c05lZWRpbmdVcGRhdGVbdGVzdF1bYnVpbGRlcl0uZXh0cmEgPSBzb3J0RXhwZWN0YXRpb25z
U3RyaW5nKGV4dHJhKTsKK30KKworCisvLyBGcm9tIGEgc3RyaW5nIG9mIG1vZGlmaWVycywgcmV0
dXJucyBhIHN0cmluZyBvZiBtb2RpZmllcnMgdGhhdAorLy8gYXJlIGZvciByZWFsIHJlc3VsdCBj
aGFuZ2VzLCBsaWtlIFNMT1csIGFuZCBleGNsdWRlcyBtb2RpZmllcnMKKy8vIHRoYXQgc3BlY2lm
aWN5IHRoaW5ncyBsaWtlIHBsYXRmb3JtLCBidWlsZF90eXBlLCBidWcuCisvLyBAcGFyYW0ge3N0
cmluZ30gbW9kaWZpZXJTdHJpbmcgU3RyaW5nIGNvbnRhaW5pbmcgYWxsIG1vZGlmaWVycy4KKy8v
IEByZXR1cm4ge3N0cmluZ30gU3RyaW5nIGNvbnRhaW5pbmcgb25seSBtb2RpZmllcnMgdGhhdCBl
ZmZlY3QgdGhlIHJlc3VsdHMuCitmdW5jdGlvbiByZWFsTW9kaWZpZXJzKG1vZGlmaWVyU3RyaW5n
KQoreworICAgIHZhciBtb2RpZmllcnMgPSBtb2RpZmllclN0cmluZy5zcGxpdCgnICcpOzsKKyAg
ICByZXR1cm4gbW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbihtb2RpZmllcikgeworICAgICAgICBy
ZXR1cm4gIShtb2RpZmllciBpbiBCVUlMRF9UWVBFUykgJiYgUExBVEZPUk1TLmluZGV4T2YobW9k
aWZpZXIpID09IC0xICYmICEobW9kaWZpZXIgaW4gUExBVEZPUk1fVU5JT05TKSAmJiAhc3RhcnRz
V2l0aChtb2RpZmllciwgJ0JVRycpOworICAgIH0pLmpvaW4oJyAnKTsKK30KKworZnVuY3Rpb24g
Z2VuZXJhdGVQYWdlRm9yRXhwZWN0YXRpb25zVXBkYXRlKCkKK3sKKyAgICAvLyBBbHdheXMgc2hv
dyBhbGwgcnVucyB3aGVuIGF1dG8tdXBkYXRpbmcgZXhwZWN0YXRpb25zLgorICAgIGlmICghZ19j
dXJyZW50U3RhdGUuc2hvd0FsbFJ1bnMpCisgICAgICAgIHNldFF1ZXJ5UGFyYW1ldGVyKCdzaG93
QWxsUnVucycsIHRydWUpOworCisgICAgcHJvY2Vzc1Rlc3RSdW5zRm9yQWxsQnVpbGRlcnMoKTsK
KyAgICB2YXIgdGVzdHNOZWVkaW5nVXBkYXRlID0ge307CisgICAgZm9yICh2YXIgdGVzdCBpbiBn
X3Rlc3RUb1Jlc3VsdHNNYXApIHsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBnX3Rlc3RUb1Jlc3Vs
dHNNYXBbdGVzdF07CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgdmFyIHRoaXNSZXN1bHQgPSByZXN1bHRzW2ldOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoIXRoaXNSZXN1bHQubWlzc2luZyAmJiAhdGhpc1Jlc3Vs
dC5leHRyYSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdmFyIGFs
bFBhc3Nlc09yTm9EYXRhcyA9IHRoaXNSZXN1bHQucmF3UmVzdWx0cy5maWx0ZXIoZnVuY3Rpb24g
KHgpIHsgcmV0dXJuIHhbMV0gIT0gIlAiICYmIHhbMV0gIT0gIk4iOyB9KS5sZW5ndGggPT0gMDsK
KworICAgICAgICAgICAgaWYgKGFsbFBhc3Nlc09yTm9EYXRhcykKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAgICAgYWRkVXBkYXRlKHRlc3RzTmVlZGluZ1VwZGF0ZSwgdGVz
dCwgdGhpc1Jlc3VsdC5idWlsZGVyLCB0aGlzUmVzdWx0Lm1pc3NpbmcsIHRoaXNSZXN1bHQuZXh0
cmEpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgYnVpbGRlciBpbiBnX2J1aWxk
ZXJzKSB7CisgICAgICAgIHZhciB0ZXN0cyA9IGdfcGVyQnVpbGRlcldpdGhFeHBlY3RhdGlvbnNC
dXROb0ZhaWx1cmVzW2J1aWxkZXJdCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIC8vIEFueXRoaW5nIGV4dHJhIGluIHRoaXMgY2Fz
ZSBpcyB3aGF0IGlzIGxpc3RlZCBpbiBleHBlY3RhdGlvbnMKKyAgICAgICAgICAgIC8vIHBsdXMg
bW9kaWZpZXJzIG90aGVyIHRoYW4gYnVnLCBwbGF0Zm9ybSwgYnVpbGQgdHlwZS4KKyAgICAgICAg
ICAgIHZhciBtb2RpZmllcnMgPSByZWFsTW9kaWZpZXJzKHRlc3RzW2ldLm1vZGlmaWVycyk7Cisg
ICAgICAgICAgICB2YXIgZXh0cmFzID0gdGVzdHNbaV0uZXhwZWN0YXRpb25zOworICAgICAgICAg
ICAgZXh0cmFzICs9IG1vZGlmaWVycyA/ICcgJyArIG1vZGlmaWVycyA6ICcnOworICAgICAgICAg
ICAgYWRkVXBkYXRlKHRlc3RzTmVlZGluZ1VwZGF0ZSwgdGVzdHNbaV0udGVzdCwgYnVpbGRlciwg
bnVsbCwgZXh0cmFzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEdldCB0aGUga2V5cyBp
biBhbHBoYWJldGljYWwgb3JkZXIsIHNvIGl0IGlzIGVhc3kgdG8gcHJvY2VzcyBncm91cHMKKyAg
ICAvLyBvZiB0ZXN0cy4KKyAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRlc3RzTmVlZGluZ1Vw
ZGF0ZSkuc29ydCgpOworICAgIHNob3dVcGRhdGVJbmZvRm9yVGVzdCh0ZXN0c05lZWRpbmdVcGRh
dGUsIGtleXMpOworfQorCisvLyBTaG93IHRoZSB0ZXN0IHJlc3VsdHMgYW5kIHRoZSBqc29uIGZv
ciBkaWZmZXJpbmcgZXhwZWN0YXRpb25zLCBhbmQKKy8vIGFsbG93IHRoZSB1c2VyIHRvIGluY2x1
ZGUgb3IgZXhjbHVkZSB0aGlzIHVwZGF0ZS4KKy8vCisvLyBAcGFyYW0ge09iamVjdH0gdGVzdHNO
ZWVkaW5nVXBkYXRlIFRlc3RzIHRoYXQgbmVlZCB1cGRhdGluZy4KKy8vIEBwYXJhbSB7QXJyYXku
PHN0cmluZz59IGtleXMgS2V5cyBpbnRvIHRoZSB0ZXN0TmVlZGluZ1VwZGF0ZSBvYmplY3QuCitm
dW5jdGlvbiBzaG93VXBkYXRlSW5mb0ZvclRlc3QodGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlzKQor
eworICAgIHZhciB0ZXN0ID0ga2V5c1tnX2N1cnJlbnRTdGF0ZS51cGRhdGVJbmRleF07CisgICAg
ZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAnJzsKKworICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMg
RE9NIGNyZWF0aW9uIGxlc3MgdmVyYm9zZS4KKyAgICB2YXIgaW5kZXggPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKTsKKyAgICBpbmRleC5zdHlsZS5jc3NGbG9hdCA9ICdyaWdodCc7Cisg
ICAgaW5kZXgudGV4dENvbnRlbnQgPSAoZ19jdXJyZW50U3RhdGUudXBkYXRlSW5kZXggKyAxKSAr
ICcgb2YgJyArIGtleXMubGVuZ3RoICsgJyB0ZXN0cyc7CisgICAgZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChpbmRleCk7CisKKyAgICB2YXIgYnV0dG9uUmVnaW9uID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2Jyk7CisgICAgdmFyIGluY2x1ZGVCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdpbnB1dCcpOworICAgIGluY2x1ZGVCdG4udHlwZSA9ICdidXR0b24nOworICAgIGluY2x1
ZGVCdG4udmFsdWUgPSAnaW5jbHVkZSBzZWxlY3RlZCc7CisgICAgaW5jbHVkZUJ0bi5hZGRFdmVu
dExpc3RlbmVyKCdjbGljaycsIHBhcnRpYWwoaGFuZGxlVXBkYXRlLCB0ZXN0c05lZWRpbmdVcGRh
dGUsIGtleXMpLCBmYWxzZSk7CisgICAgYnV0dG9uUmVnaW9uLmFwcGVuZENoaWxkKGluY2x1ZGVC
dG4pOworCisgICAgdmFyIHByZXZpb3VzQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5w
dXQnKTsKKyAgICBwcmV2aW91c0J0bi50eXBlID0gJ2J1dHRvbic7CisgICAgcHJldmlvdXNCdG4u
dmFsdWUgPSAncHJldmlvdXMnOworICAgIHByZXZpb3VzQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2Ns
aWNrJywKKyAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgc2V0VXBkYXRlSW5kZXgoZ19j
dXJyZW50U3RhdGUudXBkYXRlSW5kZXggLSAxLCB0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpOwor
ICAgICAgICB9LAorICAgICAgICBmYWxzZSk7CisgICAgYnV0dG9uUmVnaW9uLmFwcGVuZENoaWxk
KHByZXZpb3VzQnRuKTsKKworICAgIHZhciBuZXh0QnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnaW5wdXQnKTsKKyAgICBuZXh0QnRuLnR5cGUgPSAnYnV0dG9uJzsKKyAgICBuZXh0QnRuLnZh
bHVlID0gJ25leHQnOworICAgIG5leHRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBwYXJ0
aWFsKG5leHRVcGRhdGUsIHRlc3RzTmVlZGluZ1VwZGF0ZSwga2V5cyksIGZhbHNlKTsKKyAgICBi
dXR0b25SZWdpb24uYXBwZW5kQ2hpbGQobmV4dEJ0bik7CisKKyAgICB2YXIgZG9uZUJ0biA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgZG9uZUJ0bi50eXBlID0gJ2J1dHRv
bic7CisgICAgZG9uZUJ0bi52YWx1ZSA9ICdkb25lJzsKKyAgICBkb25lQnRuLmFkZEV2ZW50TGlz
dGVuZXIoJ2NsaWNrJywgZmluaXNoVXBkYXRlLCBmYWxzZSk7CisgICAgYnV0dG9uUmVnaW9uLmFw
cGVuZENoaWxkKGRvbmVCdG4pOworCisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChidXR0
b25SZWdpb24pOworCisgICAgdmFyIHVwZGF0ZXMgPSB0ZXN0c05lZWRpbmdVcGRhdGVbdGVzdF07
CisgICAgdmFyIGNoZWNrYm94ZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAg
ICBmb3IgKHZhciBidWlsZGVyIGluIHVwZGF0ZXMpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgY2hl
Y2tib3ggZm9yIGVhY2ggYnVpbGRlci4KKyAgICAgICAgdmFyIGNoZWNrYm94UmVnaW9uID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIHZhciBjaGVja2JveCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgICAgIGNoZWNrYm94LnR5cGUgPSAnY2hl
Y2tib3gnOworICAgICAgICBjaGVja2JveC5pZCA9IGJ1aWxkZXI7CisgICAgICAgIGNoZWNrYm94
LmNoZWNrZWQgPSB0cnVlOworICAgICAgICBjaGVja2JveFJlZ2lvbi5hcHBlbmRDaGlsZChjaGVj
a2JveCk7CisgICAgICAgIGNoZWNrYm94UmVnaW9uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKGJ1aWxkZXIgKyAnIDogJyArIEpTT04uc3RyaW5naWZ5KHVwZGF0ZXNbYnVpbGRl
cl0pKSk7CisgICAgICAgIGNoZWNrYm94ZXMuYXBwZW5kQ2hpbGQoY2hlY2tib3hSZWdpb24pOwor
ICAgIH0KKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNoZWNrYm94ZXMpOworCisgICAg
dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIGRpdi5pbm5lckhU
TUwgPSBodG1sRm9ySW5kaXZpZHVsVGVzdE9uQWxsQnVpbGRlcnModGVzdCk7CisgICAgZG9jdW1l
bnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOworICAgIGFwcGVuZEV4cGVjdGF0aW9ucygpOworfQor
CisKKy8vIFdoZW4gdGhlIHVzZXIgaGFzIGZpbmlzaGVkIHNlbGVjdGluZyBleHBlY3RhdGlvbnMg
dG8gdXBkYXRlLCBwcm92aWRlIHRoZW0KKy8vIHdpdGgganNvbiB0byBjb3B5IG92ZXIuCitmdW5j
dGlvbiBmaW5pc2hVcGRhdGUoKQoreworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJ1Ro
ZSBuZXh0IHN0ZXAgaXMgdG8gY29weSB0aGUgb3V0cHV0IGJlbG93ICcgKworICAgICAgICAnaW50
byBhIGxvY2FsIGZpbGUgYW5kIHNhdmUgaXQuICBUaGVuLCBydW48YnI+PGNvZGU+cHl0aG9uICcg
KworICAgICAgICAnc3JjL3dlYmtpdC90b29scy9sYXlvdXRfdGVzdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3VwZGF0ZV9leHBlY3RhdCcgKworICAgICAgICAnaW9uc19mcm9tX2Rhc2hib2FyZC5w
eSBwYXRoL3RvL2xvY2FsL2ZpbGU8L2NvZGU+PGJyPmluIG9yZGVyIHRvICcgKworICAgICAgICAn
dXBkYXRlIHRoZSBleHBlY3RhdGlvbnMgZmlsZS48YnI+PHRleHRhcmVhIGlkPSJyZXN1bHRzIiAn
KworICAgICAgICAnc3R5bGU9IndpZHRoOjYwMHB4O2hlaWdodDo2MDBweDsiPiAnICsKKyAgICAg
ICAgSlNPTi5zdHJpbmdpZnkoZ19jb25maXJtZWRUZXN0cykgKyAnPC90ZXh0YXJlYT4nOworICAg
IHJlc3VsdHMuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnU2VsZWN0QWxsJyk7
Cit9CisKKy8vIEhhbmRsZSB1c2VyIGNsaWNrIG9uICJpbmNsdWRlIHNlbGVjdGVkIiBidXR0b24u
CisvLyBJbmNsdWRlcyB0aGUgdGVzdHMgdGhhdCBhcmUgc2VsZWN0ZWQgYW5kIGV4Y2x1ZGUgdGhl
IHJlc3QuCisvLyBAcGFyYW0ge09iamVjdH0gdGVzdHNOZWVkaW5nVXBkYXRlIFRlc3RzIHRoYXQg
bmVlZCB1cGRhdGluZy4KKy8vIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGtleXMgS2V5cyBpbnRv
IHRoZSB0ZXN0TmVlZGluZ1VwZGF0ZSBvYmplY3QuCitmdW5jdGlvbiBoYW5kbGVVcGRhdGUodGVz
dHNOZWVkaW5nVXBkYXRlLCBrZXlzKQoreworICAgIHZhciB0ZXN0ID0ga2V5c1tnX2N1cnJlbnRT
dGF0ZS51cGRhdGVJbmRleF07CisgICAgdmFyIHVwZGF0ZXMgPSB0ZXN0c05lZWRpbmdVcGRhdGVb
dGVzdF07CisgICAgZm9yICh2YXIgYnVpbGRlciBpbiB1cGRhdGVzKSB7CisgICAgICAgIC8vIEFk
ZCBpbmNsdWRlZCB0ZXN0cywgYW5kIGRlbGV0ZSBleGNsdWRlZCB0ZXN0cyBpZgorICAgICAgICAv
LyB0aGV5IHdlcmUgcHJldmlvdXNseSBpbmNsdWRlZC4KKyAgICAgICAgaWYgKCQoYnVpbGRlciku
Y2hlY2tlZCkgeworICAgICAgICAgICAgaWYgKCFnX2NvbmZpcm1lZFRlc3RzW3Rlc3RdKQorICAg
ICAgICAgICAgICAgIGdfY29uZmlybWVkVGVzdHNbdGVzdF0gPSB7fTsKKyAgICAgICAgICAgIGdf
Y29uZmlybWVkVGVzdHNbdGVzdF1bYnVpbGRlcl0gPSB0ZXN0c05lZWRpbmdVcGRhdGVbdGVzdF1b
YnVpbGRlcl07CisgICAgICAgIH0gZWxzZSBpZiAoZ19jb25maXJtZWRUZXN0c1t0ZXN0XSAmJiBn
X2NvbmZpcm1lZFRlc3RzW3Rlc3RdW2J1aWxkZXJdKSB7CisgICAgICAgICAgICBkZWxldGUgZ19j
b25maXJtZWRUZXN0c1t0ZXN0XVtidWlsZGVyXTsKKyAgICAgICAgICAgIGlmICghT2JqZWN0Lmtl
eXMoZ19jb25maXJtZWRUZXN0c1t0ZXN0XSkubGVuZ3RoKQorICAgICAgICAgICAgICAgIGRlbGV0
ZSBnX2NvbmZpcm1lZFRlc3RzW3Rlc3RdOworICAgICAgICB9CisgICAgfQorICAgIG5leHRVcGRh
dGUodGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlzKTsKK30KKworCisvLyBNb3ZlIHRvIHRoZSBuZXh0
IGl0ZW0gdG8gdXBkYXRlLgorLy8gQHBhcmFtIHtPYmplY3R9IHRlc3RzTmVlZGluZ1VwZGF0ZSBU
ZXN0cyB0aGF0IG5lZWQgdXBkYXRpbmcuCisvLyBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBrZXlz
IEtleXMgaW50byB0aGUgdGVzdE5lZWRpbmdVcGRhdGUgb2JqZWN0LgorZnVuY3Rpb24gbmV4dFVw
ZGF0ZSh0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpCit7CisgICAgc2V0VXBkYXRlSW5kZXgoZ19j
dXJyZW50U3RhdGUudXBkYXRlSW5kZXggKyAxLCB0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpOwor
fQorCisKKy8vIEFkdmFuY2UgdGhlIGluZGV4IHdlIGFyZSB1cGRhdGluZyBhdC4gIElmIHdlIHdh
bGsgb3ZlciB0aGUgZW5kCisvLyBvciBiZWdpbm5pbmcsIGp1c3QgbG9vcC4KKy8vIEBwYXJhbSB7
c3RyaW5nfSBuZXdJbmRleCBUaGUgaW5kZXggaW50byB0aGUga2V5cyB0byBtb3ZlIHRvLgorLy8g
QHBhcmFtIHtPYmplY3R9IHRlc3RzTmVlZGluZ1VwZGF0ZSBUZXN0cyB0aGF0IG5lZWQgdXBkYXRp
bmcuCisvLyBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBrZXlzIEtleXMgaW50byB0aGUgdGVzdE5l
ZWRpbmdVcGRhdGUgb2JqZWN0LgorZnVuY3Rpb24gc2V0VXBkYXRlSW5kZXgobmV3SW5kZXgsIHRl
c3RzTmVlZGluZ1VwZGF0ZSwga2V5cykKK3sKKyAgICBpZiAobmV3SW5kZXggPT0gLTEpCisgICAg
ICAgIG5ld0luZGV4ID0ga2V5cy5sZW5ndGggLSAxOworICAgIGVsc2UgaWYgKG5ld0luZGV4ID09
IGtleXMubGVuZ3RoKQorICAgICAgICBuZXdJbmRleCA9IDA7CisgICAgc2V0UXVlcnlQYXJhbWV0
ZXIoInVwZGF0ZUluZGV4IiwgbmV3SW5kZXgpOworICAgIHNob3dVcGRhdGVJbmZvRm9yVGVzdCh0
ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpOworfQorCitmdW5jdGlvbiBodG1sRm9ySW5kaXZpZHVs
VGVzdE9uQWxsQnVpbGRlcnModGVzdCkKK3sKKyAgICBwcm9jZXNzVGVzdFJ1bnNGb3JBbGxCdWls
ZGVycygpOworCisgICAgdmFyIHRlc3RSZXN1bHRzID0gZ190ZXN0VG9SZXN1bHRzTWFwW3Rlc3Rd
OworICAgIHZhciBtYXN0ZXI7CisgICAgdmFyIGh0bWwgPSAnJzsKKyAgICBpZiAoaXNMYXlvdXRU
ZXN0UmVzdWx0cygpKSB7CisgICAgICAgIHZhciB0cmFjVVJMID0gVEVTVF9VUkxfQkFTRV9QQVRI
X1RSQUMgKyB0ZXN0CisgICAgICAgIGh0bWwgKz0gJzxoMj4nICsgbGlua0hUTUxUb09wZW5XaW5k
b3codHJhY1VSTCwgdGVzdCkgKyAnPC9oMj4nOworICAgIH0gZWxzZQorICAgICAgICBodG1sICs9
ICc8aDI+JyArIHRlc3QgKyAnPC9oMj4nOworCisgICAgaWYgKHRlc3RSZXN1bHRzICYmIHRlc3RS
ZXN1bHRzLmxlbmd0aCkgeworICAgICAgICBtYXN0ZXIgPSBidWlsZGVyTWFzdGVyKHRlc3RSZXN1
bHRzWzBdLmJ1aWxkZXIpOworCisgICAgICAgIGh0bWwgKz0nPGRpdj48Yj5JZiBhIGJ1aWxkZXIg
aXMgbm90IGxpc3RlZCwgdGhhdCBtZWFucyB0aGUgYnVpbGRlciAnICsKKyAgICAgICAgICAgICdk
b2VzIG5vdCBydW4gdGhhdCB0ZXN0IChlLmcuIGl0IGlzIHNraXBwZWQpIG9yIGFsbCBydW5zIG9m
IHRoZSAnICsKKyAgICAgICAgICAgICd0ZXN0IHBhc3NlZC48L2I+PC9kaXY+JzsKKworICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IHRlc3RSZXN1bHRzLmxlbmd0aDsgaisrKQorICAgICAgICAg
ICAgaHRtbCArPSBodG1sRm9yU2luZ2xlVGVzdFJvdyh0ZXN0UmVzdWx0c1tqXSk7CisgICAgICAg
IGh0bWwgPSBodG1sRm9yVGVzdFRhYmxlKGh0bWwpOworICAgIH0gZWxzZSB7CisgICAgICAgIGh0
bWwgKz0gJzxkaXYgY2xhc3M9Im5vdC1mb3VuZCI+VGVzdCBub3QgZm91bmQuIEVpdGhlciBpdCBk
b2VzICcgKworICAgICAgICAgICAgJ25vdCBleGlzdCwgaXMgc2tpcHBlZCBvciBwYXNzZXMgb24g
YWxsIHBsYXRmb3Jtcy48L2Rpdj4nOworICAgIH0KKworICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9
ZXhwZWN0YXRpb25zIHRlc3Q9JyArIHRlc3QgKyAnPjxkaXY+JyArCisgICAgICAgIGxpbmtIVE1M
VG9Ub2dnbGVTdGF0ZSgnc2hvd0V4cGVjdGF0aW9ucycsICdyZXN1bHRzJykKKworICAgIGlmIChp
c0xheW91dFRlc3RSZXN1bHRzKCkpIHsKKyAgICAgICAgaHRtbCArPSAnIHwgJyArIGxpbmtIVE1M
VG9Ub2dnbGVTdGF0ZSgnc2hvd0xhcmdlRXhwZWN0YXRpb25zJywgJ2xhcmdlIHRodW1ibmFpbHMn
KTsKKyAgICAgICAgaWYgKG1hc3RlciA9PSBXRUJLSVRfQlVJTERFUl9NQVNURVIpIHsKKyAgICAg
ICAgICAgIHZhciByZXZpc2lvbiA9IGdfY3VycmVudFN0YXRlLnJldmlzaW9uIHx8ICcnOworICAg
ICAgICAgICAgaHRtbCArPSAnPGZvcm0gb25zdWJtaXQ9InNldFF1ZXJ5UGFyYW1ldGVyKFwncmV2
aXNpb25cJywgcmV2aXNpb24udmFsdWUpOycgKworICAgICAgICAgICAgICAgICdyZXR1cm4gZmFs
c2U7Ij5TaG93IHJlc3VsdHMgZm9yIFdlYktpdCByZXZpc2lvbjogJyArCisgICAgICAgICAgICAg
ICAgJzxpbnB1dCBuYW1lPXJldmlzaW9uIHBsYWNlaG9sZGVyPSJlLmcuIDY1NTQwIiB2YWx1ZT0i
JyArIHJldmlzaW9uICsKKyAgICAgICAgICAgICAgICAnIiBpZD1yZXZpc2lvbi1pbnB1dD48L2Zv
cm0+JzsKKyAgICAgIH0gZWxzZQorICAgICAgICBodG1sICs9ICcgfCA8Yj5Pbmx5IHNob3dzIGFj
dHVhbCByZXN1bHRzL2RpZmZzIGZyb20gdGhlIG1vc3QgcmVjZW50ICpmYWlsdXJlKiBvbiBlYWNo
IGJvdC48L2I+JzsKKyAgICB9IGVsc2UgeworICAgICAgaHRtbCArPSAnIHwgPHNwYW4+UmVzdWx0
cyBoZWlnaHQ6PGlucHV0ICcgKworICAgICAgICAgICdvbmNoYW5nZT0ic2V0UXVlcnlQYXJhbWV0
ZXIoXCdyZXN1bHRzSGVpZ2h0XCcsdGhpcy52YWx1ZSkiIHZhbHVlPSInICsKKyAgICAgICAgICBn
X2N1cnJlbnRTdGF0ZS5yZXN1bHRzSGVpZ2h0ICsgJyIgc3R5bGU9IndpZHRoOjIuNWVtIj5weDwv
c3Bhbj4nOworICAgIH0KKyAgICBodG1sICs9ICc8L2Rpdj48L2Rpdj4nOworICAgIHJldHVybiBo
dG1sOworfQorCitmdW5jdGlvbiBnZXRFeHBlY3RhdGlvbnNDb250YWluZXIoZXhwZWN0YXRpb25z
Q29udGFpbmVycywgcGFyZW50Q29udGFpbmVyLCBleHBlY3RhdGlvbnNUeXBlKQoreworICAgIGlm
ICghZXhwZWN0YXRpb25zQ29udGFpbmVyc1tleHBlY3RhdGlvbnNUeXBlXSkgeworICAgICAgICB2
YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIGNv
bnRhaW5lci5jbGFzc05hbWUgPSAnZXhwZWN0YXRpb25zLWNvbnRhaW5lcic7CisgICAgICAgIHBh
cmVudENvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpOworICAgICAgICBleHBlY3RhdGlv
bnNDb250YWluZXJzW2V4cGVjdGF0aW9uc1R5cGVdID0gY29udGFpbmVyOworICAgIH0KKyAgICBy
ZXR1cm4gZXhwZWN0YXRpb25zQ29udGFpbmVyc1tleHBlY3RhdGlvbnNUeXBlXTsKK30KKworZnVu
Y3Rpb24gZW5zdXJlVHJhaWxpbmdTbGFzaChwYXRoKQoreworICAgIGlmIChwYXRoLm1hdGNoKC9c
LyQvKSkKKyAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgcmV0dXJuIHBhdGggKyAnLyc7Cit9CisK
K2Z1bmN0aW9uIG1heWJlQWRkUG5nQ2hlY2tzdW0oZXhwZWN0YXRpb25EaXYsIHBuZ1VybCkKK3sK
KyAgICAvLyBwbmdVcmwgZ2V0cyBzZXJ2ZWQgZnJvbSB0aGUgYnJvd3NlciBjYWNoZSBzaW5jZSB3
ZSBqdXN0IGxvYWRlZCBpdCBpbiBhbgorICAgIC8vIDxpbWc+IHRhZy4KKyAgICByZXF1ZXN0KHBu
Z1VybCwKKyAgICAgICAgZnVuY3Rpb24oeGhyKSB7CisgICAgICAgICAgICAvLyBDb252ZXJ0IHRo
ZSBmaXJzdCAyayBvZiB0aGUgcmVzcG9uc2UgdG8gYSBieXRlIHN0cmluZy4KKyAgICAgICAgICAg
IHZhciBieXRlcyA9IHhoci5yZXNwb25zZVRleHQuc3Vic3RyaW5nKDAsIDIwNDgpOworICAgICAg
ICAgICAgZm9yICh2YXIgcG9zaXRpb24gPSAwOyBwb3NpdGlvbiA8IGJ5dGVzLmxlbmd0aDsgKytw
b3NpdGlvbikKKyAgICAgICAgICAgICAgICBieXRlc1twb3NpdGlvbl0gPSBieXRlc1twb3NpdGlv
bl0gJiAweGZmOworCisgICAgICAgICAgICAvLyBMb29rIGZvciB0aGUgY29tbWVudC4KKyAgICAg
ICAgICAgIHZhciBjb21tZW50S2V5ID0gJ3RFWHRjaGVja3N1bVx4MDAnOworICAgICAgICAgICAg
dmFyIGNoZWNrc3VtUG9zaXRpb24gPSBieXRlcy5pbmRleE9mKGNvbW1lbnRLZXkpOworICAgICAg
ICAgICAgaWYgKGNoZWNrc3VtUG9zaXRpb24gPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICB2YXIgY2hlY2tzdW0gPSBieXRlcy5zdWJzdHJpbmcoY2hlY2tzdW1Q
b3NpdGlvbiArIGNvbW1lbnRLZXkubGVuZ3RoLCBjaGVja3N1bVBvc2l0aW9uICsgY29tbWVudEtl
eS5sZW5ndGggKyAzMik7CisgICAgICAgICAgICB2YXIgY2hlY2tzdW1Db250YWluZXIgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisgICAgICAgICAgICBjaGVja3N1bUNvbnRhaW5l
ci5pbm5lclRleHQgPSAnRW1iZWRkZWQgY2hlY2tzdW06ICcgKyBjaGVja3N1bTsKKyAgICAgICAg
ICAgIGNoZWNrc3VtQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncG5nY2hlY2tzdW0n
KTsKKyAgICAgICAgICAgIGV4cGVjdGF0aW9uRGl2LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoY2hl
Y2tzdW1Db250YWluZXIpOworICAgICAgICB9LAorICAgICAgICBmdW5jdGlvbih4aHIpIHt9LAor
ICAgICAgICB0cnVlKTsKK30KKworLy8gQWRkcyBhIHNwZWNpZmljIGV4cGVjdGF0aW9uLiBJZiBp
dCdzIGFuIGltYWdlLCBpdCdzIG9ubHkgYWRkZWQgb24gdGhlCisvLyBpbWFnZSdzIG9ubG9hZCBo
YW5kbGVyLiBJZiBpdCdzIGEgdGV4dCBmaWxlLCB0aGVuIGEgc2NyaXB0IHRhZyBpcyBhcHBlbmRl
ZAorLy8gYXMgYSBoYWNrIHRvIHNlZSBpZiB0aGUgZmlsZSA0MDRzIChuZWNlc3Nhcnkgc2luY2Ug
aXQncyBjcm9zcy1kb21haW4pLgorLy8gT25jZSBhbGwgdGhlIGV4cGVjdGF0aW9ucyBmb3IgYSBz
cGVjaWZpYyB0eXBlIGhhdmUgbG9hZGVkIG9yIGVycm9yZWQKKy8vIChlLmcuIGFsbCB0aGUgdGV4
dCByZXN1bHRzKSwgdGhlbiB3ZSBnbyB0aHJvdWdoIGFuZCBpZGVudGlmeSB3aGljaCBwbGF0Zm9y
bQorLy8gdXNlcyB3aGljaCBleHBlY3RhdGlvbi4KKy8vCisvLyBAcGFyYW0ge09iamVjdH0gZXhw
ZWN0YXRpb25zQ29udGFpbmVycyBNYXAgZnJvbSBleHBlY3RhdGlvbnMgdHlwZSB0bworLy8gICAg
IGNvbnRhaW5lciBESVYuCisvLyBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudENvbnRhaW5lciBDb250
YWluZXIgZWxlbWVudCBmb3IKKy8vICAgICBleHBlY3RhdGlvbnNDb250YWluZXIgZGl2cy4KKy8v
IEBwYXJhbSB7c3RyaW5nfSBwbGF0Zm9ybSBQbGF0Zm9ybSBzdHJpbmcuIEVtcHR5IHN0cmluZyBm
b3Igbm9uLXBsYXRmb3JtCisvLyAgICAgc3BlY2lmaWMgZXhwZWN0YXRpb25zLgorLy8gQHBhcmFt
IHtzdHJpbmd9IHBhdGggUmVsYXRpdmUgcGF0aCB0byB0aGUgZXhwZWN0YXRpb24uCisvLyBAcGFy
YW0ge3N0cmluZ30gYmFzZSBCYXNlIHBhdGggZm9yIHRoZSBleHBlY3RhdGlvbiBVUkwuCisvLyBA
cGFyYW0ge3N0cmluZ30gb3B0X2J1aWxkZXIgQnVpbGRlciB3aG9zZSBhY3R1YWwgcmVzdWx0cyB0
aGlzIGV4cGVjdGF0aW9uCisvLyAgICAgcG9pbnRzIHRvLgorZnVuY3Rpb24gYWRkRXhwZWN0YXRp
b25JdGVtKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIHBhcmVudENvbnRhaW5lciwgcGxhdGZvcm0s
IHBhdGgsIGJhc2UsIG9wdF9idWlsZGVyKQoreworICAgIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQo
Jy4nKQorICAgIHZhciBmaWxlRXh0ZW5zaW9uID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07Cisg
ICAgaWYgKGZpbGVFeHRlbnNpb24gPT0gJ2h0bWwnKQorICAgICAgICBmaWxlRXh0ZW5zaW9uID0g
J3R4dCc7CisgICAgCisgICAgdmFyIGNvbnRhaW5lciA9IGdldEV4cGVjdGF0aW9uc0NvbnRhaW5l
cihleHBlY3RhdGlvbnNDb250YWluZXJzLCBwYXJlbnRDb250YWluZXIsIGZpbGVFeHRlbnNpb24p
OworICAgIHZhciBpc0ltYWdlID0gcGF0aC5tYXRjaCgvXC5wbmckLyk7CisKKyAgICAvLyBGSVhN
RTogU3RvcCB1c2luZyBzY3JpcHQgdGFncyBvbmNlIGFsbCB0aGUgcGxhY2VzIHdlIHB1bGwgZnJv
bSBzdXBwb3J0IENPUlMuCisgICAgdmFyIHBsYXRmb3JtUGFydCA9IHBsYXRmb3JtID8gZW5zdXJl
VHJhaWxpbmdTbGFzaChwbGF0Zm9ybSkgOiAnJzsKKworICAgIHZhciBjaGlsZENvbnRhaW5lciA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKKyAgICBjaGlsZENvbnRhaW5lci5jbGFz
c05hbWUgPSAndW5sb2FkZWQnOworCisgICAgdmFyIGFwcGVuZEV4cGVjdGF0aW9uc0l0ZW0gPSBm
dW5jdGlvbihpdGVtKSB7CisgICAgICAgIGNoaWxkQ29udGFpbmVyLmFwcGVuZENoaWxkKGV4cGVj
dGF0aW9uc1RpdGxlKHBsYXRmb3JtLCBwYXRoLCBvcHRfYnVpbGRlciB8fCAnJykpOworICAgICAg
ICBjaGlsZENvbnRhaW5lci5jbGFzc05hbWUgPSAnZXhwZWN0YXRpb25zLWl0ZW0nOworICAgICAg
ICBpdGVtLmNsYXNzTmFtZSA9ICdleHBlY3RhdGlvbiAnICsgZmlsZUV4dGVuc2lvbjsKKyAgICAg
ICAgaWYgKGdfY3VycmVudFN0YXRlLnNob3dMYXJnZUV4cGVjdGF0aW9ucykKKyAgICAgICAgICAg
IGl0ZW0uY2xhc3NOYW1lICs9ICcgbGFyZ2UnOworICAgICAgICBjaGlsZENvbnRhaW5lci5hcHBl
bmRDaGlsZChpdGVtKTsKKyAgICAgICAgaGFuZGxlRmluaXNoZWRMb2FkaW5nRXhwZWN0YXRpb25z
KGNvbnRhaW5lcik7CisgICAgfTsKKworICAgIHZhciB1cmwgPSBiYXNlICsgcGxhdGZvcm1QYXJ0
ICsgcGF0aDsKKyAgICBpZiAoaXNJbWFnZSB8fCAhc3RhcnRzV2l0aChiYXNlLCAnaHR0cDovL3N2
bi53ZWJraXQub3JnJykpIHsKKyAgICAgICAgdmFyIGR1bW15Tm9kZSA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoaXNJbWFnZSA/ICdpbWcnIDogJ3NjcmlwdCcpOworICAgICAgICBkdW1teU5vZGUu
c3JjID0gdXJsOworICAgICAgICBkdW1teU5vZGUub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICB2YXIgaXRlbTsKKyAgICAgICAgICAgIGlmIChpc0ltYWdlKSB7CisgICAgICAgICAg
ICAgICAgaXRlbSA9IGR1bW15Tm9kZTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnRzV2l0aChi
YXNlLCAnaHR0cDovL3N2bi53ZWJraXQub3JnJykpCisgICAgICAgICAgICAgICAgICAgIG1heWJl
QWRkUG5nQ2hlY2tzdW0oaXRlbSwgdXJsKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworICAgICAg
ICAgICAgICAgIGl0ZW0uc3JjID0gdXJsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXBw
ZW5kRXhwZWN0YXRpb25zSXRlbShpdGVtKTsKKyAgICAgICAgfQorICAgICAgICBkdW1teU5vZGUu
b25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgY2hpbGRDb250YWluZXIucGFyZW50
Tm9kZS5yZW1vdmVDaGlsZChjaGlsZENvbnRhaW5lcik7CisgICAgICAgICAgICBoYW5kbGVGaW5p
c2hlZExvYWRpbmdFeHBlY3RhdGlvbnMoY29udGFpbmVyKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEFwcGVuZCBzY3JpcHQgZWxlbWVudHMgbm93IHNvIHRoYXQgdGhleSBsb2FkLiBJbWFnZXMg
bG9hZCB3aXRob3V0IGJlaW5nCisgICAgICAgIC8vIGFwcGVuZGVkIHRvIHRoZSBET00uCisgICAg
ICAgIGlmICghaXNJbWFnZSkKKyAgICAgICAgICAgIGNoaWxkQ29udGFpbmVyLmFwcGVuZENoaWxk
KGR1bW15Tm9kZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVxdWVzdCh1cmwsCisgICAgICAg
ICAgICBmdW5jdGlvbih4aHIpIHsKKyAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ3ByZScpOworICAgICAgICAgICAgICAgIGl0ZW0uaW5uZXJUZXh0ID0g
eGhyLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgICAgICAgICBhcHBlbmRFeHBlY3RhdGlvbnNJdGVt
KGl0ZW0pOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGZ1bmN0aW9uKHhocikgey8qIERv
IG5vdGhpbmcgb24gZXJyb3JzIHNpbmNlIHRoZXkncmUgZXhwZWN0ZWQgKi99KTsKKyAgICB9CisK
KyAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY2hpbGRDb250YWluZXIpOworfQorCisKKy8vIElk
ZW50aWZpZXMgd2hpY2ggZXhwZWN0YXRpb25zIGFyZSB1c2VkIG9uIHdoaWNoIHBsYXRmb3JtIG9u
Y2UgYWxsIHRoZQorLy8gZXhwZWN0YXRpb25zIG9mIGEgZ2l2ZW4gdHlwZSBoYXZlIGxvYWRlZCAo
ZS5nLiB0aGUgY29udGFpbmVyIGZvciBwbmcKKy8vIGV4cGVjdGF0aW9ucyBmb3IgdGhpcyB0ZXN0
IGhhZCBubyBjaGlsZCBlbGVtZW50cyB3aXRoIHRoZSBjbGFzcworLy8gInVubG9hZGVkIikuCisv
LworLy8gQHBhcmFtIHtzdHJpbmd9IGNvbnRhaW5lciBFbGVtZW50IGNvbnRhaW5pbmcgdGhlIGV4
cGVjdGF0aW9ucyBmb3IgYSBnaXZlbgorLy8gICAgIHRlc3QgYW5kIGEgZ2l2ZW4gdHlwZSAoZS5n
LiBwbmcpLgorZnVuY3Rpb24gaGFuZGxlRmluaXNoZWRMb2FkaW5nRXhwZWN0YXRpb25zKGNvbnRh
aW5lcikKK3sKKyAgICBpZiAoY29udGFpbmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3VubG9h
ZGVkJykubGVuZ3RoKQorICAgICAgICByZXR1cm47CisKKyAgICB2YXIgdGl0bGVzID0gY29udGFp
bmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2V4cGVjdGF0aW9ucy10aXRsZScpOworICAgIGZv
ciAodmFyIHBsYXRmb3JtIGluIGdfZmFsbGJhY2tzTWFwKSB7CisgICAgICAgIHZhciBmYWxsYmFj
a3MgPSBnX2ZhbGxiYWNrc01hcFtwbGF0Zm9ybV07CisgICAgICAgIHZhciB3aW5uZXIgPSBudWxs
OworICAgICAgICB2YXIgd2lubmluZ0luZGV4ID0gLTE7CisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGl0bGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgdGl0bGUgPSB0aXRs
ZXNbaV07CisKKyAgICAgICAgICAgIGlmICghd2lubmVyICYmIHRpdGxlLnBsYXRmb3JtID09ICIi
KSB7CisgICAgICAgICAgICAgICAgd2lubmVyID0gdGl0bGU7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciByYXdQbGF0Zm9ybSA9IHRp
dGxlLnBsYXRmb3JtICYmIHRpdGxlLnBsYXRmb3JtLnJlcGxhY2UoJ3BsYXRmb3JtLycsICcnKTsK
KyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZmFsbGJhY2tzLmxlbmd0aDsgaisrKSB7
CisgICAgICAgICAgICAgICAgaWYgKCh3aW5uaW5nSW5kZXggPT0gLTEgfHwgd2lubmluZ0luZGV4
ID4gaikgJiYgcmF3UGxhdGZvcm0gPT0gZmFsbGJhY2tzW2pdKSB7CisgICAgICAgICAgICAgICAg
ICAgIHdpbm5pbmdJbmRleCA9IGo7CisgICAgICAgICAgICAgICAgICAgIHdpbm5lciA9IHRpdGxl
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdpbm5lcikKKyAgICAgICAgICAgIHdpbm5l
ci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwbGF0Zm9ybXMnKVswXS5pbm5lckhUTUwgKz0gJzxk
aXYgY2xhc3M9dXNlZC1wbGF0Zm9ybT4nICsgcGxhdGZvcm0gKyAnPC9kaXY+JzsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBjb25zb2xlLmxvZygnTm8gZXhwZWN0YXRpb25zIGlkZW50aWZp
ZWQgZm9yIHRoaXMgdGVzdC4gVGhpcyBtZWFucyAnICsKKyAgICAgICAgICAgICAgICAndGhlcmUg
aXMgYSBsb2dpYyBidWcgaW4gdGhlIGRhc2hib2FyZCBmb3Igd2hpY2ggZXhwZWN0YXRpb25zIGEg
JyArCisgICAgICAgICAgICAgICAgJ3BsYXRmb3JtIHVzZXMgb3IgdHJhYy53ZWJraXQub3JnL3Ny
Yy5jaHJvbWl1bS5vcmcgaXMgZ2l2aW5nIDVYWHMuJyk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBjb25zb2xpZGF0ZVVzZWRQbGF0Zm9ybXMoY29udGFpbmVyKTsKK30KKworLy8gQ29uc29saWRh
dGUgcGxhdGZvcm1zIHdoZW4gYWxsIHN1Yi1wbGF0Zm9ybXMgZm9yIGEgZ2l2ZW4gcGxhdGZvcm0g
YXJlIHJlcHJlc2VudGVkLgorLy8gZS5nLiwgaWYgYWxsIG9mIHRoZSBXSU4tIHBsYXRmb3JtcyBh
cmUgdGhlcmUsIHJlcGxhY2UgdGhlbSB3aXRoIGp1c3QgV0lOLgorLy8gRklYTUU6IFNob3VsZCB3
ZSBhbHNvIGNvbnNvbGlkYXRlICJNQUMtU05PV0xFT1BBUkQgTUFDLVNOT1dMRU9QQVJELUdQVSIg
dG8gTUFDLVNOT1dMRU9QQVJECisvLyBvciBpcyB0aGF0IG1vcmUgY29uZnVzaW5nPworZnVuY3Rp
b24gY29uc29saWRhdGVVc2VkUGxhdGZvcm1zKGNvbnRhaW5lcikKK3sKKyAgICB2YXIgYWxsUGxh
dGZvcm1zID0gT2JqZWN0LmtleXMoZ19mYWxsYmFja3NNYXApOworCisgICAgdmFyIHBsYXRmb3Jt
RWxlbWVudHMgPSBjb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncGxhdGZvcm1zJyk7
CisgICAgZm9yICh2YXIgaSA9IDAsIHBsYXRmb3Jtc0xlbmd0aCA9IHBsYXRmb3JtRWxlbWVudHMu
bGVuZ3RoOyBpIDwgcGxhdGZvcm1zTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHVzZWRQbGF0
Zm9ybXMgPSBwbGF0Zm9ybUVsZW1lbnRzW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3VzZWQt
cGxhdGZvcm0nKTsKKyAgICAgICAgaWYgKCF1c2VkUGxhdGZvcm1zLmxlbmd0aCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIHZhciBwbGF0Zm9ybXMgPSB7fTsKKyAgICAgICAgcGxh
dGZvcm1zWydNQUMnXSA9IHt9OworICAgICAgICBwbGF0Zm9ybXNbJ1dJTiddID0ge307CisgICAg
ICAgIHBsYXRmb3Jtc1snTElOVVgnXSA9IHt9OworICAgICAgICBhbGxQbGF0Zm9ybXMuZm9yRWFj
aChmdW5jdGlvbihwbGF0Zm9ybSkgeworICAgICAgICAgICAgaWYgKHN0YXJ0c1dpdGgocGxhdGZv
cm0sICdNQUMnKSkKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybXNbJ01BQyddW3BsYXRmb3JtXSA9
IDE7CisgICAgICAgICAgICBlbHNlIGlmIChzdGFydHNXaXRoKHBsYXRmb3JtLCAnV0lOJykpCisg
ICAgICAgICAgICAgICAgcGxhdGZvcm1zWydXSU4nXVtwbGF0Zm9ybV0gPSAxOworICAgICAgICAg
ICAgZWxzZSBpZiAoc3RhcnRzV2l0aChwbGF0Zm9ybSwgJ0xJTlVYJykpCisgICAgICAgICAgICAg
ICAgcGxhdGZvcm1zWydMSU5VWCddW3BsYXRmb3JtXSA9IDE7CisgICAgICAgIH0pOworCisgICAg
ICAgIGZvciAodmFyIGogPSAwLCB1c2VkUGxhdGZvcm1zTGVuZ3RoID0gdXNlZFBsYXRmb3Jtcy5s
ZW5ndGg7IGogPCB1c2VkUGxhdGZvcm1zTGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgIGZvciAo
dmFyIHBsYXRmb3JtIGluIHBsYXRmb3JtcykKKyAgICAgICAgICAgICAgICBkZWxldGUgcGxhdGZv
cm1zW3BsYXRmb3JtXVt1c2VkUGxhdGZvcm1zW2pdLnRleHRDb250ZW50XTsKKyAgICAgICAgfQor
CisgICAgICAgIGZvciAodmFyIHBsYXRmb3JtIGluIHBsYXRmb3JtcykgeworICAgICAgICAgICAg
aWYgKCFPYmplY3Qua2V5cyhwbGF0Zm9ybXNbcGxhdGZvcm1dKS5sZW5ndGgpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgbm9kZXNUb1JlbW92ZSA9IFtdOworICAgICAgICAgICAgICAgIGZvciAodmFy
IGogPSAwLCB1c2VkUGxhdGZvcm1zTGVuZ3RoID0gdXNlZFBsYXRmb3Jtcy5sZW5ndGg7IGogPCB1
c2VkUGxhdGZvcm1zTGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHVzZWRQ
bGF0Zm9ybSA9IHVzZWRQbGF0Zm9ybXNbal07CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFy
dHNXaXRoKHVzZWRQbGF0Zm9ybS50ZXh0Q29udGVudCwgcGxhdGZvcm0pKQorICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZXNUb1JlbW92ZS5wdXNoKHVzZWRQbGF0Zm9ybSk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgbm9kZXNUb1JlbW92ZS5mb3JFYWNoKGZ1bmN0aW9u
KGVsZW1lbnQpIHsgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpOyB9KTsK
KyAgICAgICAgICAgICAgICBwbGF0Zm9ybUVsZW1lbnRzW2ldLmluc2VydEFkamFjZW50SFRNTCgn
YWZ0ZXJCZWdpbicsICc8ZGl2IGNsYXNzPXVzZWQtcGxhdGZvcm0+JyArIHBsYXRmb3JtICsgJzwv
ZGl2PicpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBh
ZGRFeHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zQ29udGFpbmVycywgY29udGFpbmVyLCBiYXNlLAor
ICAgIHBsYXRmb3JtLCB0ZXh0LCBwbmcsIHJlZnRlc3RfaHRtbF9maWxlLCByZWZ0ZXN0X21pc21h
dGNoX2h0bWxfZmlsZSkKK3sKKyAgICBhZGRFeHBlY3RhdGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29u
dGFpbmVycywgY29udGFpbmVyLCBwbGF0Zm9ybSwgdGV4dCwgYmFzZSk7CisgICAgYWRkRXhwZWN0
YXRpb25JdGVtKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIGNvbnRhaW5lciwgcGxhdGZvcm0sIHBu
ZywgYmFzZSk7CisgICAgYWRkRXhwZWN0YXRpb25JdGVtKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMs
IGNvbnRhaW5lciwgcGxhdGZvcm0sIHJlZnRlc3RfaHRtbF9maWxlLCBiYXNlKTsKKyAgICBhZGRF
eHBlY3RhdGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29udGFpbmVycywgY29udGFpbmVyLCBwbGF0Zm9y
bSwgcmVmdGVzdF9taXNtYXRjaF9odG1sX2ZpbGUsIGJhc2UpOworfQorCitmdW5jdGlvbiBleHBl
Y3RhdGlvbnNUaXRsZShwbGF0Zm9ybSwgcGF0aCwgYnVpbGRlcikKK3sKKyAgICB2YXIgaGVhZGVy
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDMnKTsKKyAgICBoZWFkZXIuY2xhc3NOYW1lID0g
J2V4cGVjdGF0aW9ucy10aXRsZSc7CisKKyAgICB2YXIgaW5uZXJIVE1MOworICAgIGlmIChidWls
ZGVyKSB7CisgICAgICAgIHZhciByZXN1bHRzVHlwZTsKKyAgICAgICAgaWYgKGVuZHNXaXRoKHBh
dGgsICctY3Jhc2gtbG9nLnR4dCcpKQorICAgICAgICAgICAgcmVzdWx0c1R5cGUgPSAnU1RBQ0tU
UkFDRSc7CisgICAgICAgIGVsc2UgaWYgKGVuZHNXaXRoKHBhdGgsICctYWN0dWFsLnR4dCcpIHx8
IGVuZHNXaXRoKHBhdGgsICctYWN0dWFsLnBuZycpKQorICAgICAgICAgICAgcmVzdWx0c1R5cGUg
PSAnQUNUVUFMIFJFU1VMVFMnOworICAgICAgICBlbHNlIGlmIChlbmRzV2l0aChwYXRoLCAnLXdk
aWZmLmh0bWwnKSkKKyAgICAgICAgICAgIHJlc3VsdHNUeXBlID0gJ1dESUZGJzsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmVzdWx0c1R5cGUgPSAnRElGRic7CisKKyAgICAgICAgaW5uZXJI
VE1MID0gcmVzdWx0c1R5cGUgKyAnOiAnICsgYnVpbGRlcjsKKyAgICB9IGVsc2UgaWYgKHBsYXRm
b3JtID09PSAiIikgeworICAgICAgICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7CisgICAg
ICAgIGlubmVySFRNTCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdOworICAgIH0gZWxzZQorICAg
ICAgICBpbm5lckhUTUwgPSBwbGF0Zm9ybSB8fCBwYXRoOworCisgICAgaGVhZGVyLmlubmVySFRN
TCA9ICc8ZGl2IGNsYXNzPXRpdGxlPicgKyBpbm5lckhUTUwgKworICAgICAgICAnPC9kaXY+PGRp
diBzdHlsZT0iZmxvYXQ6bGVmdCI+Jm5ic3A7PC9kaXY+JyArCisgICAgICAgICc8ZGl2IGNsYXNz
PXBsYXRmb3JtcyBzdHlsZT0iZmxvYXQ6cmlnaHQiPjwvZGl2Pic7CisgICAgaGVhZGVyLnBsYXRm
b3JtID0gcGxhdGZvcm07CisgICAgcmV0dXJuIGhlYWRlcjsKK30KKworZnVuY3Rpb24gbG9hZEV4
cGVjdGF0aW9ucyhleHBlY3RhdGlvbnNDb250YWluZXIpCit7CisgICAgaWYgKGlzTGF5b3V0VGVz
dFJlc3VsdHMoKSkKKyAgICAgICAgbG9hZEV4cGVjdGF0aW9uc0xheW91dFRlc3RzKGV4cGVjdGF0
aW9uc0NvbnRhaW5lcik7CisgICAgZWxzZSB7CisgICAgICAgIHZhciB0ZXN0ID0gZXhwZWN0YXRp
b25zQ29udGFpbmVyLmdldEF0dHJpYnV0ZSgndGVzdCcpOworICAgICAgICB2YXIgcmVzdWx0cyA9
IGdfdGVzdFRvUmVzdWx0c01hcFt0ZXN0XTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBy
ZXN1bHRzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgbG9hZE5vbldlYktpdFJlc3VsdHNGb3JC
dWlsZGVyKHJlc3VsdHNbaV0uYnVpbGRlciwgdGVzdCwgZXhwZWN0YXRpb25zQ29udGFpbmVyKTsK
KyAgICB9Cit9CisKK2Z1bmN0aW9uIGxvYWROb25XZWJLaXRSZXN1bHRzRm9yQnVpbGRlcihidWls
ZGVyLCB0ZXN0LCBleHBlY3RhdGlvbnNDb250YWluZXIpCit7CisgICAgdmFyIGZhaWx1cmVzID0g
YnVpbGROdW1iZXJzRm9yRmFpbHVyZXMoYnVpbGRlciwgdGVzdCk7CisgICAgdmFyIGNvbnRhaW5l
ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIGNvbnRhaW5lci5pbm5lckhU
TUwgPSAnPGRpdj48Yj4nICsgYnVpbGRlciArICc8L2I+PC9kaXY+JzsKKyAgICBleHBlY3RhdGlv
bnNDb250YWluZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGZhaWx1cmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNu
J3Qgc2VlbSB0byB3b3JrIGFueW1vcmUuIERpZCB0aGUgcGF0aHMgY2hhbmdlPworICAgICAgICAv
LyBPbmNlIHRoYXQncyByZXNvbHZlZCwgc2VlIGlmIHdlIG5lZWQgdG8gdHJ5IGVhY2ggR1RFU1Rf
TU9ESUZJRVJTIHByZWZpeCBhcyB3ZWxsLgorICAgICAgICB2YXIgcGF0aFRvTG9nID0gYnVpbGRl
ck1hc3RlcihidWlsZGVyKS5nZXRMb2dQYXRoKGJ1aWxkZXIsIGZhaWx1cmVzW2ldKSArIHBhdGhU
b0ZhaWx1cmVMb2codGVzdCk7CisgICAgICAgIGFwcGVuZE5vbldlYktpdFJlc3VsdHMoY29udGFp
bmVyLCBwYXRoVG9Mb2cpOworICAgIH0KK30KKworZnVuY3Rpb24gYXBwZW5kTm9uV2ViS2l0UmVz
dWx0cyhjb250YWluZXIsIHVybCkKK3sKKyAgICAvLyBVc2UgYSBzY3JpcHQgdGFnIHRvIGRldGVj
dCB3aGV0aGVyIHRoZSBVUkwgNDA0cy4KKyAgICAvLyBOZWVkIHRvIHVzZSBhIHNjcmlwdCB0YWcg
c2luY2UgdGhlIFVSTCBpcyBjcm9zcy1kb21haW4uCisgICAgdmFyIGR1bW15Tm9kZSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworICAgIGR1bW15Tm9kZS5zcmMgPSB1cmw7CisK
KyAgICBkdW1teU5vZGUub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpdGVtID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAgICAgIGl0ZW0uc3JjID0gZHVt
bXlOb2RlLnNyYzsKKyAgICAgICAgaXRlbS5jbGFzc05hbWUgPSAnbm9uLXdlYmtpdC1yZXN1bHRz
JzsKKyAgICAgICAgaXRlbS5zdHlsZS5oZWlnaHQgPSBnX2N1cnJlbnRTdGF0ZS5yZXN1bHRzSGVp
Z2h0ICsgJ3B4JzsKKyAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGl0ZW0pOworICAgIH0K
KyAgICBkdW1teU5vZGUub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBjb250YWluZXIu
cGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjaGlsZENvbnRhaW5lcik7CisgICAgfQorCisgICAgY29u
dGFpbmVyLmFwcGVuZENoaWxkKGR1bW15Tm9kZSk7Cit9CisKK2Z1bmN0aW9uIGJ1aWxkSW5mb0Zv
clJldmlzaW9uKGJ1aWxkZXIsIHJldmlzaW9uKQoreworICAgIHZhciByZXZpc2lvbnMgPSBnX3Jl
c3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0ud2Via2l0UmV2aXNpb247CisgICAgdmFyIHJldmlzaW9u
U3RhcnQgPSAwLCByZXZpc2lvbkVuZCA9IDAsIGJ1aWxkTnVtYmVyID0gMDsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHJldmlzaW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAocmV2aXNp
b24gPiByZXZpc2lvbnNbaV0pIHsKKyAgICAgICAgICAgIHJldmlzaW9uU3RhcnQgPSByZXZpc2lv
bnNbaSAtIDFdOworICAgICAgICAgICAgcmV2aXNpb25FbmQgPSByZXZpc2lvbnNbaV07CisgICAg
ICAgICAgICBidWlsZE51bWJlciA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51
bWJlcnNbaSAtIDFdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAocmV2aXNpb25FbmQpCisgICAgICByZXZpc2lvbkVuZCsrOworICAgIGVsc2UKKyAgICAg
IHJldmlzaW9uRW5kID0gJyc7CisKKyAgICByZXR1cm4ge3JldmlzaW9uU3RhcnQ6IHJldmlzaW9u
U3RhcnQsIHJldmlzaW9uRW5kOiByZXZpc2lvbkVuZCwgYnVpbGROdW1iZXI6IGJ1aWxkTnVtYmVy
fTsKK30KKworZnVuY3Rpb24gbG9hZEV4cGVjdGF0aW9uc0xheW91dFRlc3RzKGV4cGVjdGF0aW9u
c0NvbnRhaW5lcikKK3sKKyAgICAvLyBNYXAgZnJvbSBmaWxlIGV4dGVuc2lvbiB0byBjb250YWlu
ZXIgZGl2IGZvciBleHBlY3RhdGlvbnMgb2YgdGhhdCB0eXBlLgorICAgIHZhciBleHBlY3RhdGlv
bnNDb250YWluZXJzID0ge307CisgICAgdmFyIHRlc3QgPSBleHBlY3RhdGlvbnNDb250YWluZXIu
Z2V0QXR0cmlidXRlKCd0ZXN0Jyk7CisKKyAgICB2YXIgcmV2aXNpb25Db250YWluZXIgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICByZXZpc2lvbkNvbnRhaW5lci50ZXh0Q29u
dGVudCA9ICJTaG93aW5nIHJlc3VsdHMgZm9yOiAiCisgICAgZXhwZWN0YXRpb25zQ29udGFpbmVy
LmFwcGVuZENoaWxkKHJldmlzaW9uQ29udGFpbmVyKTsKKyAgICBmb3IgKHZhciBidWlsZGVyIGlu
IGdfYnVpbGRlcnMpIHsKKyAgICAgICAgaWYgKGJ1aWxkZXJNYXN0ZXIoYnVpbGRlcikgPT0gV0VC
S0lUX0JVSUxERVJfTUFTVEVSKSB7CisgICAgICAgICAgICB2YXIgbGF0ZXN0UmV2aXNpb24gPSBn
X2N1cnJlbnRTdGF0ZS5yZXZpc2lvbiB8fCBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0ud2Vi
a2l0UmV2aXNpb25bMF07CisgICAgICAgICAgICB2YXIgYnVpbGRJbmZvID0gYnVpbGRJbmZvRm9y
UmV2aXNpb24oYnVpbGRlciwgbGF0ZXN0UmV2aXNpb24pOworICAgICAgICAgICAgdmFyIHJldmlz
aW9uSW5mbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICAgICAgcmV2
aXNpb25JbmZvLnN0eWxlLmNzc1RleHQgPSAnYmFja2dyb3VuZDpsaWdodGdyYXk7bWFyZ2luOjAg
M3B4O3BhZGRpbmc6MCAycHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7JzsKKyAgICAgICAgICAgIHJl
dmlzaW9uSW5mby5pbm5lckhUTUwgPSBidWlsZGVyICsgJyByJyArIGJ1aWxkSW5mby5yZXZpc2lv
bkVuZCArCisgICAgICAgICAgICAgICAgJzpyJyArIGJ1aWxkSW5mby5yZXZpc2lvblN0YXJ0ICsg
JywgYnVpbGQgJyArIGJ1aWxkSW5mby5idWlsZE51bWJlcjsKKyAgICAgICAgICAgIHJldmlzaW9u
Q29udGFpbmVyLmFwcGVuZENoaWxkKHJldmlzaW9uSW5mbyk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBhZGRFeHBlY3RhdGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29udGFpbmVycywgZXhwZWN0YXRp
b25zQ29udGFpbmVyLCBudWxsLCB0ZXN0LCBURVNUX1VSTF9CQVNFX1BBVEgpOworCisgICAgdmFy
IHRlc3RXaXRob3V0U3VmZml4ID0gdGVzdC5zdWJzdHJpbmcoMCwgdGVzdC5sYXN0SW5kZXhPZign
LicpKTsKKyAgICB2YXIgdGV4dCA9IHRlc3RXaXRob3V0U3VmZml4ICsgIi1leHBlY3RlZC50eHQi
OworICAgIHZhciBwbmcgPSB0ZXN0V2l0aG91dFN1ZmZpeCArICItZXhwZWN0ZWQucG5nIjsKKyAg
ICB2YXIgcmVmdGVzdF9odG1sX2ZpbGUgPSB0ZXN0V2l0aG91dFN1ZmZpeCArICItZXhwZWN0ZWQu
aHRtbCI7CisgICAgdmFyIHJlZnRlc3RfbWlzbWF0Y2hfaHRtbF9maWxlID0gdGVzdFdpdGhvdXRT
dWZmaXggKyAiLWV4cGVjdGVkLW1pc21hdGNoLmh0bWwiOworCisgICAgYWRkRXhwZWN0YXRpb25z
KGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIGV4cGVjdGF0aW9uc0NvbnRhaW5lciwKKyAgICAgICAg
VEVTVF9VUkxfQkFTRV9QQVRILCAnJywgdGV4dCwgcG5nLCByZWZ0ZXN0X2h0bWxfZmlsZSwgcmVm
dGVzdF9taXNtYXRjaF9odG1sX2ZpbGUpOworCisgICAgdmFyIGZhbGxiYWNrcyA9IGFsbEZhbGxi
YWNrcygpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmFsbGJhY2tzLmxlbmd0aDsgaSsrKSB7
CisgICAgICB2YXIgZmFsbGJhY2sgPSAncGxhdGZvcm0vJyArIGZhbGxiYWNrc1tpXTsKKyAgICAg
IGFkZEV4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnNDb250YWluZXJzLCBleHBlY3RhdGlvbnNDb250
YWluZXIsIFRFU1RfVVJMX0JBU0VfUEFUSCwgZmFsbGJhY2ssIHRleHQsIHBuZywKKyAgICAgICAg
ICByZWZ0ZXN0X2h0bWxfZmlsZSwgcmVmdGVzdF9taXNtYXRjaF9odG1sX2ZpbGUpOworICAgIH0K
KworICAgIHZhciBhY3R1YWxSZXN1bHRTdWZmaXhlcyA9IFsnLWFjdHVhbC50eHQnLCAnLWFjdHVh
bC5wbmcnLCAnLWNyYXNoLWxvZy50eHQnLCAnLWRpZmYudHh0JywgJy13ZGlmZi5odG1sJywgJy1k
aWZmLnBuZyddOworCisgICAgZm9yICh2YXIgYnVpbGRlciBpbiBnX2J1aWxkZXJzKSB7CisgICAg
ICAgIHZhciBhY3R1YWxSZXN1bHRzQmFzZTsKKyAgICAgICAgaWYgKGJ1aWxkZXJNYXN0ZXIoYnVp
bGRlcikgPT0gV0VCS0lUX0JVSUxERVJfTUFTVEVSKSB7CisgICAgICAgICAgICB2YXIgbGF0ZXN0
UmV2aXNpb24gPSBnX2N1cnJlbnRTdGF0ZS5yZXZpc2lvbiB8fCBnX3Jlc3VsdHNCeUJ1aWxkZXJb
YnVpbGRlcl0ud2Via2l0UmV2aXNpb25bMF07CisgICAgICAgICAgICB2YXIgYnVpbGRJbmZvID0g
YnVpbGRJbmZvRm9yUmV2aXNpb24oYnVpbGRlciwgbGF0ZXN0UmV2aXNpb24pOworICAgICAgICAg
ICAgYWN0dWFsUmVzdWx0c0Jhc2UgPSAnaHR0cDovL2J1aWxkLndlYmtpdC5vcmcvcmVzdWx0cy8n
ICsgYnVpbGRlciArCisgICAgICAgICAgICAgICAgJy9yJyArIGJ1aWxkSW5mby5yZXZpc2lvblN0
YXJ0ICsgJyAoJyArIGJ1aWxkSW5mby5idWlsZE51bWJlciArICcpLyc7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgYWN0dWFsUmVzdWx0c0Jhc2UgPSBURVNUX1JFU1VMVFNfQkFTRV9QQVRI
ICsgZ19idWlsZGVyc1tidWlsZGVyXSArICcvcmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzLyc7
CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3R1YWxSZXN1bHRTdWZmaXhlcy5sZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgYWRkRXhwZWN0YXRpb25JdGVtKGV4cGVjdGF0aW9uc0Nv
bnRhaW5lcnMsIGV4cGVjdGF0aW9uc0NvbnRhaW5lciwgbnVsbCwKKyAgICAgICAgICAgICAgICB0
ZXN0V2l0aG91dFN1ZmZpeCArIGFjdHVhbFJlc3VsdFN1ZmZpeGVzW2ldLCBhY3R1YWxSZXN1bHRz
QmFzZSwgYnVpbGRlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBZGQgYSBjbGVhcmlu
ZyBlbGVtZW50IHNvIGZsb2F0ZWQgZWxlbWVudHMgZG9uJ3QgYmxlZWQgb3V0IG9mIHRoZWlyCisg
ICAgLy8gY29udGFpbmluZyBibG9jay4KKyAgICB2YXIgYnIgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdicicpOworICAgIGJyLnN0eWxlLmNsZWFyID0gJ2JvdGgnOworICAgIGV4cGVjdGF0aW9u
c0NvbnRhaW5lci5hcHBlbmRDaGlsZChicik7Cit9CisKK3ZhciBnX2FsbEZhbGxiYWNrczsKKwor
Ly8gUmV0dXJucyB0aGUgcmV2ZXJzZSBzb3J0ZWQsIGRlZHVwZWQgbGlzdCBvZiBhbGwgcGxhdGZv
cm0gZmFsbGJhY2sKKy8vIGRpcmVjdG9yaWVzLgorZnVuY3Rpb24gYWxsRmFsbGJhY2tzKCkKK3sK
KyAgICBpZiAoIWdfYWxsRmFsbGJhY2tzKSB7CisgICAgICAgIHZhciBob2xkZXIgPSB7fTsKKyAg
ICAgICAgZm9yICh2YXIgcGxhdGZvcm0gaW4gZ19mYWxsYmFja3NNYXApIHsKKyAgICAgICAgICAg
IHZhciBmYWxsYmFja3MgPSBnX2ZhbGxiYWNrc01hcFtwbGF0Zm9ybV07CisgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGZhbGxiYWNrcy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAg
ICBob2xkZXJbZmFsbGJhY2tzW2ldXSA9IDE7CisgICAgICAgIH0KKworICAgICAgICBnX2FsbEZh
bGxiYWNrcyA9IFtdOworICAgICAgICBmb3IgKHZhciBmYWxsYmFjayBpbiBob2xkZXIpCisgICAg
ICAgICAgICBnX2FsbEZhbGxiYWNrcy5wdXNoKGZhbGxiYWNrKTsKKworICAgICAgICBnX2FsbEZh
bGxiYWNrcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAgICAgIGlmIChhID09IGIpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gYSA8IGI7CisgICAg
ICAgIH0pOworICAgIH0KKyAgICByZXR1cm4gZ19hbGxGYWxsYmFja3M7Cit9CisKK2Z1bmN0aW9u
IGFwcGVuZEV4cGVjdGF0aW9ucygpCit7CisgICAgdmFyIGV4cGVjdGF0aW9ucyA9IGdfY3VycmVu
dFN0YXRlLnNob3dFeHBlY3RhdGlvbnMgPyBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1l
KCdleHBlY3RhdGlvbnMnKSA6IFtdOworICAgIC8vIExvYWRpbmcgZXhwZWN0YXRpb25zIGlzICp2
ZXJ5KiBzbG93LiBVc2UgYSBsYXJnZSB0aW1lb3V0IHRvIGF2b2lkCisgICAgLy8gdG90YWxseSBo
YW5naW5nIHRoZSByZW5kZXJlci4KKyAgICBwZXJmb3JtQ2h1bmtlZEFjdGlvbihleHBlY3RhdGlv
bnMsIGZ1bmN0aW9uKGNodW5rKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBjaHVu
ay5sZW5ndGg7IGkgPCBsZW47IGkrKykKKyAgICAgICAgICAgIGxvYWRFeHBlY3RhdGlvbnMoY2h1
bmtbaV0pOworICAgIH0sIGhpZGVMb2FkaW5nVUksIDEwMDAwKTsKK30KKworZnVuY3Rpb24gaGlk
ZUxvYWRpbmdVSSgpCit7CisgICAgdmFyIGxvYWRpbmdEaXYgPSAkKCdsb2FkaW5nLXVpJyk7Cisg
ICAgaWYgKGxvYWRpbmdEaXYpCisgICAgICAgIGxvYWRpbmdEaXYuc3R5bGUuZGlzcGxheSA9ICdu
b25lJzsKK30KKworZnVuY3Rpb24gZ2VuZXJhdGVQYWdlRm9ySW5kaXZpZHVhbFRlc3RzKHRlc3Rz
KQoreworICAgIGNvbnNvbGUubG9nKCdOdW1iZXIgb2YgdGVzdHM6ICcgKyB0ZXN0cy5sZW5ndGgp
OworICAgIGFwcGVuZEhUTUwoaHRtbEZvck5hdkJhcigpKTsKKyAgICBwZXJmb3JtQ2h1bmtlZEFj
dGlvbih0ZXN0cywgZnVuY3Rpb24oY2h1bmspIHsKKyAgICAgICAgYXBwZW5kSFRNTChodG1sRm9y
SW5kaXZpZHVhbFRlc3RzKGNodW5rKSk7CisgICAgfSwgYXBwZW5kRXhwZWN0YXRpb25zLCA1MDAp
OworICAgICQoJ3Rlc3RzLWlucHV0JykudmFsdWUgPSBnX2N1cnJlbnRTdGF0ZS50ZXN0czsKK30K
KworZnVuY3Rpb24gcGVyZm9ybUNodW5rZWRBY3Rpb24odGVzdHMsIGhhbmRsZUNodW5rLCBvbkNv
bXBsZXRlLCB0aW1lb3V0LCBvcHRfaW5kZXgpIHsKKyAgICB2YXIgaW5kZXggPSBvcHRfaW5kZXgg
fHwgMDsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgY2h1bmsgPSBB
cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0ZXN0cywgaW5kZXggKiBDSFVOS19TSVpFLCAoaW5k
ZXggKyAxKSAqIENIVU5LX1NJWkUpOworICAgICAgICBpZiAoY2h1bmsubGVuZ3RoKSB7CisgICAg
ICAgICAgICBoYW5kbGVDaHVuayhjaHVuayk7CisgICAgICAgICAgICBwZXJmb3JtQ2h1bmtlZEFj
dGlvbih0ZXN0cywgaGFuZGxlQ2h1bmssIG9uQ29tcGxldGUsIHRpbWVvdXQsICsraW5kZXgpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9uQ29tcGxldGUoKTsKKyAgICAvLyBObyBuZWVk
IGZvciBhIHRpbWVvdXQgb24gdGhlIGZpcnN0IGNodW5rZWQgYWN0aW9uLgorICAgIH0sIGluZGV4
ID8gdGltZW91dCA6IDApOworfQorCitmdW5jdGlvbiBodG1sRm9ySW5kaXZpZHVhbFRlc3RzKHRl
c3RzKQoreworICAgIHZhciB0ZXN0c0hUTUwgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRlc3RzLmxlbmd0aDsgaSsrKQorICAgICAgICB0ZXN0c0hUTUwucHVzaChodG1sRm9ySW5kaXZp
ZHVsVGVzdE9uQWxsQnVpbGRlcnModGVzdHNbaV0pKTsKKyAgICByZXR1cm4gdGVzdHNIVE1MLmpv
aW4oJzxocj4nKTsKK30KKworZnVuY3Rpb24gaHRtbEZvck5hdkJhcigpCit7CisgICAgdmFyIGV4
dHJhSFRNTCA9ICcnOworICAgIHZhciBodG1sID0gaHRtbEZvclRlc3RUeXBlU3dpdGNoZXIoZmFs
c2UsIGV4dHJhSFRNTCwgaXNDcm9zc0J1aWxkZXJWaWV3KCkpOworICAgIGh0bWwgKz0gJzxkaXYg
Y2xhc3M9Zm9ybXM+PGZvcm0gaWQ9cmVzdWx0LWZvcm0gJyArCisgICAgICAgICdvbnN1Ym1pdD0i
c2V0UXVlcnlQYXJhbWV0ZXIoXCdyZXN1bHRcJywgcmVzdWx0LnZhbHVlKTsnICsKKyAgICAgICAg
J3JldHVybiBmYWxzZTsiPlNob3cgYWxsIHRlc3RzIHdpdGggcmVzdWx0OiAnICsKKyAgICAgICAg
JzxpbnB1dCBuYW1lPXJlc3VsdCBwbGFjZWhvbGRlcj0iZS5nLiBDUkFTSCIgaWQ9cmVzdWx0LWlu
cHV0PicgKworICAgICAgICAnPC9mb3JtPjxmb3JtIGlkPXRlc3RzLWZvcm0gJyArCisgICAgICAg
ICdvbnN1Ym1pdD0ic2V0UXVlcnlQYXJhbWV0ZXIoXCd0ZXN0c1wnLCB0ZXN0cy52YWx1ZSk7JyAr
CisgICAgICAgICdyZXR1cm4gZmFsc2U7Ij48c3Bhbj5TaG93IHRlc3RzIG9uIGFsbCBwbGF0Zm9y
bXM6IDwvc3Bhbj4nICsKKyAgICAgICAgJzxpbnB1dCBuYW1lPXRlc3RzICcgKworICAgICAgICAn
cGxhY2Vob2xkZXI9IkNvbW1hIG9yIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHRlc3RzIG9yIHBh
cnRpYWwgJyArCisgICAgICAgICdwYXRocyB0byBzaG93IHRlc3QgcmVzdWx0cyBhY3Jvc3MgYWxs
IGJ1aWxkZXJzLCBlLmcuLCAnICsKKyAgICAgICAgJ2Zvby9iYXIuaHRtbCxmb28vYmF6LGRvbXN0
b3JhZ2UiIGlkPXRlc3RzLWlucHV0PjwvZm9ybT4nICsKKyAgICAgICAgJzxzcGFuIGNsYXNzPWxp
bmsgb25jbGljaz0ic2hvd0xlZ2VuZCgpIj5TaG93IGxlZ2VuZCBbdHlwZSA/XTwvc3Bhbj48L2Rp
dj4nOworICAgIHJldHVybiBodG1sOworfQorCitmdW5jdGlvbiBjaGVja0JveFRvVG9nZ2xlU3Rh
dGUoa2V5LCB0ZXh0KQoreworICAgIHZhciBzdGF0ZUVuYWJsZWQgPSBnX2N1cnJlbnRTdGF0ZVtr
ZXldOworICAgIHJldHVybiAnPGxhYmVsPjxpbnB1dCB0eXBlPWNoZWNrYm94ICcgKyAoc3RhdGVF
bmFibGVkID8gJ2NoZWNrZWQgJyA6ICcnKSArICdvbmNsaWNrPSJzZXRRdWVyeVBhcmFtZXRlcihc
JycgKyBrZXkgKyAnXCcsICcgKyAhc3RhdGVFbmFibGVkICsgJykiPicgKyB0ZXh0ICsgJzwvbGFi
ZWw+ICc7Cit9CisKK2Z1bmN0aW9uIGxpbmtIVE1MVG9Ub2dnbGVTdGF0ZShrZXksIGxpbmtUZXh0
KQoreworICAgIHZhciBzdGF0ZUVuYWJsZWQgPSBnX2N1cnJlbnRTdGF0ZVtrZXldOworICAgIHJl
dHVybiAnPHNwYW4gY2xhc3M9bGluayBvbmNsaWNrPSJzZXRRdWVyeVBhcmFtZXRlcihcJycgKyBr
ZXkgKyAnXCcsICcgKyAhc3RhdGVFbmFibGVkICsgJykiPicgKyAoc3RhdGVFbmFibGVkID8gJ0hp
ZGUnIDogJ1Nob3cnKSArICcgJyArIGxpbmtUZXh0ICsgJzwvc3Bhbj4nOworfQorCitmdW5jdGlv
biBoZWFkZXJGb3JUZXN0VGFibGVIdG1sKCkKK3sKKyAgICByZXR1cm4gJzxoMiBzdHlsZT0iZGlz
cGxheTppbmxpbmUtYmxvY2siPkZhaWxpbmcgdGVzdHM8L2gyPicgKworICAgICAgICBjaGVja0Jv
eFRvVG9nZ2xlU3RhdGUoJ3Nob3dXb250Rml4U2tpcCcsICdXT05URklYL1NLSVAnKSArCisgICAg
ICAgIGNoZWNrQm94VG9Ub2dnbGVTdGF0ZSgnc2hvd0NvcnJlY3RFeHBlY3RhdGlvbnMnLCAndGVz
dHMgd2l0aCBjb3JyZWN0IGV4cGVjdGF0aW9ucycpICsKKyAgICAgICAgY2hlY2tCb3hUb1RvZ2ds
ZVN0YXRlKCdzaG93V3JvbmdFeHBlY3RhdGlvbnMnLCAndGVzdHMgd2l0aCB3cm9uZyBleHBlY3Rh
dGlvbnMnKSArCisgICAgICAgIGNoZWNrQm94VG9Ub2dnbGVTdGF0ZSgnc2hvd0ZsYWt5JywgJ2Zs
YWt5JykgKworICAgICAgICBjaGVja0JveFRvVG9nZ2xlU3RhdGUoJ3Nob3dTbG93JywgJ3Nsb3cn
KTsKK30KKworZnVuY3Rpb24gZ2VuZXJhdGVQYWdlRm9yQnVpbGRlcihidWlsZGVyTmFtZSkKK3sK
KyAgICBwcm9jZXNzVGVzdFJ1bnNGb3JCdWlsZGVyKGJ1aWxkZXJOYW1lKTsKKworICAgIHZhciBy
ZXN1bHRzID0gZ19wZXJCdWlsZGVyRmFpbHVyZXNbYnVpbGRlck5hbWVdOworICAgIHNvcnRUZXN0
cyhyZXN1bHRzLCBnX2N1cnJlbnRTdGF0ZS5zb3J0Q29sdW1uLCBnX2N1cnJlbnRTdGF0ZS5zb3J0
T3JkZXIpOworCisgICAgdmFyIHRlc3RzSFRNTCA9ICcnOworICAgIGlmIChyZXN1bHRzLmxlbmd0
aCkgeworICAgICAgICB2YXIgdGFibGVSb3dzSFRNTCA9ICcnOworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICB0YWJsZVJvd3NIVE1M
ICs9IGh0bWxGb3JTaW5nbGVUZXN0Um93KHJlc3VsdHNbaV0pCisgICAgICAgIHRlc3RzSFRNTCA9
IGh0bWxGb3JUZXN0VGFibGUodGFibGVSb3dzSFRNTCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
dGVzdHNIVE1MID0gJzxkaXY+Tm8gdGVzdHMgZm91bmQuICc7CisgICAgICAgIGlmIChpc0xheW91
dFRlc3RSZXN1bHRzKCkpCisgICAgICAgICAgICB0ZXN0c0hUTUwgKz0gJ1RyeSBzaG93aW5nIHRl
c3RzIHdpdGggY29ycmVjdCBleHBlY3RhdGlvbnMuPC9kaXY+JzsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdGVzdHNIVE1MICs9ICdUaGlzIG1lYW5zIG5vIHRlc3RzIGhhdmUgZmFpbGVkITwv
ZGl2Pic7CisgICAgfQorCisgICAgdmFyIGh0bWwgPSBodG1sRm9yTmF2QmFyKCk7CisKKyAgICBp
ZiAoaXNMYXlvdXRUZXN0UmVzdWx0cygpKQorICAgICAgICBodG1sICs9IGh0bWxGb3JUZXN0c1dp
dGhFeHBlY3RhdGlvbnNCdXROb0ZhaWx1cmVzKGJ1aWxkZXJOYW1lKSArIGhlYWRlckZvclRlc3RU
YWJsZUh0bWwoKTsKKworICAgIGh0bWwgKz0gJzxicj4nICsgdGVzdHNIVE1MOworICAgIGFwcGVu
ZEhUTUwoaHRtbCk7CisKKyAgICB2YXIgdGhzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ3RoJyk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgdGhzW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2hhbmdlU29ydCwgZmFsc2Up
OworICAgICAgICB0aHNbaV0uY2xhc3NOYW1lID0gInNvcnRhYmxlIjsKKyAgICB9CisKKyAgICBo
aWRlTG9hZGluZ1VJKCk7Cit9CisKK3ZhciBWQUxJRF9LRVlTX0ZPUl9DUk9TU19CVUlMREVSX1ZJ
RVcgPSB7CisgICAgdGVzdHM6IDEsCisgICAgcmVzdWx0OiAxLAorICAgIHNob3dFeHBlY3RhdGlv
bnM6IDEsCisgICAgc2hvd0xhcmdlRXhwZWN0YXRpb25zOiAxLAorICAgIGxlZ2FjeUV4cGVjdGF0
aW9uc1NlbWFudGljczogMSwKKyAgICByZXN1bHRzSGVpZ2h0OiAxLAorICAgIHJldmlzaW9uOiAx
Cit9OworCitmdW5jdGlvbiBpc0ludmFsaWRLZXlGb3JDcm9zc0J1aWxkZXJWaWV3KGtleSkKK3sK
KyAgICByZXR1cm4gIShrZXkgaW4gVkFMSURfS0VZU19GT1JfQ1JPU1NfQlVJTERFUl9WSUVXKSAm
JiAhKGtleSBpbiBnX2RlZmF1bHRDcm9zc0Rhc2hib2FyZFN0YXRlVmFsdWVzKTsKK30KKworZnVu
Y3Rpb24gdXBkYXRlRGVmYXVsdEJ1aWxkZXJTdGF0ZSgpCit7CisgICAgaWYgKGlzQ3Jvc3NCdWls
ZGVyVmlldygpKQorICAgICAgICBkZWxldGUgZ19kZWZhdWx0U3RhdGVWYWx1ZXMuYnVpbGRlcjsK
KyAgICBlbHNlCisgICAgICAgIGdfZGVmYXVsdFN0YXRlVmFsdWVzLmJ1aWxkZXIgPSBnX2RlZmF1
bHRCdWlsZGVyTmFtZTsKK30KKworLy8gU2V0cyB0aGUgcGFnZSBzdGF0ZSB0byByZWdlbmVyYXRl
IHRoZSBwYWdlLgorLy8gQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBOZXcgb3IgbW9kaWZpZWQgcXVl
cnkgcGFyYW1ldGVycyBhcyBrZXk6IHZhbHVlLgorZnVuY3Rpb24gaGFuZGxlUXVlcnlQYXJhbWV0
ZXJDaGFuZ2UocGFyYW1zKQoreworICAgIGZvciAoa2V5IGluIHBhcmFtcykgeworICAgICAgICBp
ZiAoa2V5ID09ICd0ZXN0cycpIHsKKyAgICAgICAgICAgIC8vIEVudGVyaW5nIGNyb3NzLWJ1aWxk
ZXIgdmlldywgb25seSBrZWVwIHZhbGlkIGtleXMgZm9yIHRoYXQgdmlldy4KKyAgICAgICAgICAg
IGZvciAodmFyIGN1cnJlbnRLZXkgaW4gZ19jdXJyZW50U3RhdGUpIHsKKyAgICAgICAgICAgICAg
aWYgKGlzSW52YWxpZEtleUZvckNyb3NzQnVpbGRlclZpZXcoY3VycmVudEtleSkpIHsKKyAgICAg
ICAgICAgICAgICBkZWxldGUgZ19jdXJyZW50U3RhdGVbY3VycmVudEtleV07CisgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChpc0ludmFsaWRLZXlGb3JD
cm9zc0J1aWxkZXJWaWV3KGtleSkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBnX2N1cnJlbnRTdGF0
ZS50ZXN0czsKKyAgICAgICAgICAgIGRlbGV0ZSBnX2N1cnJlbnRTdGF0ZS5yZXN1bHQ7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB1cGRhdGVEZWZhdWx0QnVpbGRlclN0YXRlKCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIGhpZGVMZWdlbmQoKQoreworICAgIHZhciBsZWdlbmQg
PSAkKCdsZWdlbmQnKTsKKyAgICBpZiAobGVnZW5kKQorICAgICAgICBsZWdlbmQucGFyZW50Tm9k
ZS5yZW1vdmVDaGlsZChsZWdlbmQpOworfQorCit2YXIgZ19mYWxsYmFja3NNYXAgPSB7fTsKK2df
ZmFsbGJhY2tzTWFwWydXSU4tWFAnXSA9IFsnY2hyb21pdW0td2luLXhwJywgJ2Nocm9taXVtLXdp
bi12aXN0YScsICdjaHJvbWl1bS13aW4nLCAnY2hyb21pdW0nLCAnd2luJywgJ21hYyddOworZ19m
YWxsYmFja3NNYXBbJ1dJTi1WSVNUQSddID0gWydjaHJvbWl1bS13aW4tdmlzdGEnLCAnY2hyb21p
dW0td2luJywgJ2Nocm9taXVtJywgJ3dpbicsICdtYWMnXTsKK2dfZmFsbGJhY2tzTWFwWydXSU4t
NyddID0gWydjaHJvbWl1bS13aW4nLCAnY2hyb21pdW0nLCAnd2luJywgJ21hYyddOworZ19mYWxs
YmFja3NNYXBbJ1dJTi03LUdQVSddID0gWydjaHJvbWl1bS1ncHUtd2luJ10uY29uY2F0KGdfZmFs
bGJhY2tzTWFwWydXSU4tNyddKTsKK2dfZmFsbGJhY2tzTWFwWydNQUMtTEVPUEFSRCddID0gWydj
aHJvbWl1bS1jZy1tYWMtbGVvcGFyZCcsICdjaHJvbWl1bS1jZy1tYWMtc25vd2xlb3BhcmQnLCAn
Y2hyb21pdW0tY2ctbWFjJywgJ2Nocm9taXVtJywgJ21hYy1sZW9wYXJkJywgJ21hYy1zbm93bGVv
cGFyZCcsICdtYWMnXTsKK2dfZmFsbGJhY2tzTWFwWydNQUMtU05PV0xFT1BBUkQnXSA9IFsnY2hy
b21pdW0tY2ctbWFjLXNub3dsZW9wYXJkJywgJ2Nocm9taXVtLWNnLW1hYycsICdjaHJvbWl1bScs
ICdtYWMtc25vd2xlb3BhcmQnLCAnbWFjJ107CitnX2ZhbGxiYWNrc01hcFsnTUFDLVNOT1dMRU9Q
QVJELUdQVSddID0gWydjaHJvbWl1bS1ncHUtbWFjJ10uY29uY2F0KGdfZmFsbGJhY2tzTWFwWydN
QUMtU05PV0xFT1BBUkQnXSk7CitnX2ZhbGxiYWNrc01hcFsnTElOVVgtMzInXSA9IFsnY2hyb21p
dW0tbGludXgteDg2JywgJ2Nocm9taXVtLWxpbnV4JywgJ2Nocm9taXVtLXdpbicsICdjaHJvbWl1
bScsICd3aW4nLCAnbWFjJ107CitnX2ZhbGxiYWNrc01hcFsnTElOVVgtNjQnXSA9IFsnY2hyb21p
dW0tbGludXgnLCAnY2hyb21pdW0td2luJywgJ2Nocm9taXVtJywgJ3dpbicsICdtYWMnXTsKK2df
ZmFsbGJhY2tzTWFwWydMSU5VWC0zMi1HUFUnXSA9IFsnY2hyb21pdW0tZ3B1LWxpbnV4J10uY29u
Y2F0KGdfZmFsbGJhY2tzTWFwWydMSU5VWC0zMiddKTsKKworZnVuY3Rpb24gaHRtbEZvckZhbGxi
YWNrSGVscChmYWxsYmFja3MpCit7CisgICAgcmV0dXJuICc8b2wgY2xhc3M9ZmFsbGJhY2stbGlz
dD48bGk+JyArIGZhbGxiYWNrcy5qb2luKCc8L2xpPjxsaT4nKSArICc8L2xpPjwvb2w+JzsKK30K
KworZnVuY3Rpb24gc2hvd0xlZ2VuZCgpCit7CisgICAgdmFyIGxlZ2VuZCA9ICQoJ2xlZ2VuZCcp
OworICAgIGlmICghbGVnZW5kKSB7CisgICAgICAgIGxlZ2VuZCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpOworICAgICAgICBsZWdlbmQuaWQgPSAnbGVnZW5kJzsKKyAgICAgICAgZG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZChsZWdlbmQpOworICAgIH0KKworICAgIHZhciBodG1sID0g
JzxkaXYgaWQ9bGVnZW5kLXRvZ2dsZSBvbmNsaWNrPSJoaWRlTGVnZW5kKCkiPkhpZGUgJyArCisg
ICAgICAgICdsZWdlbmQgW3R5cGUgZXNjXTwvZGl2PjxkaXY+TnVtYmVyIG9mIGZsYWt5IHRlc3Rz
IGxpc3RlZCBuZXh0IHRvICcgKworICAgICAgICAnZWFjaCBidWlsZGVyPC9kaXY+PGRpdiBpZD1s
ZWdlbmQtY29udGVudHM+JzsKKyAgICBmb3IgKHZhciBleHBlY3RhdGlvbiBpbiBleHBlY3RhdGlv
bnNNYXAoKSkKKyAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0nICsgZXhwZWN0YXRpb24gKyAn
PicgKyBleHBlY3RhdGlvbnNNYXAoKVtleHBlY3RhdGlvbl0gKyAnPC9kaXY+JzsKKworICAgIGh0
bWwgKz0gJzxkaXYgY2xhc3M9bWVyZ2U+V0VCS0lUIE1FUkdFPC9kaXY+JzsKKyAgICBpZiAoaXNM
YXlvdXRUZXN0UmVzdWx0cygpKSB7CisgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPXdyb25nLWV4
cGVjdGF0aW9ucz5XUk9ORyBFWFBFQ1RBVElPTlM8L2Rpdj4nICsKKyAgICAgICAgICAnPC9kaXY+
PGJyIHN0eWxlPSJjbGVhcjpib3RoIj4nICsKKyAgICAgICAgICAnPC9kaXY+PGgzPlRlc3QgZXhw
ZWN0YXRvbnMgZmFsbGJhY2sgb3JkZXIuPC9oMz4nOworCisgICAgICBmb3IgKHZhciBwbGF0Zm9y
bSBpbiBnX2ZhbGxiYWNrc01hcCkKKyAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPWZhbGxi
YWNrLWhlYWRlcj4nICsgcGxhdGZvcm0gKyAnPC9kaXY+JyArIGh0bWxGb3JGYWxsYmFja0hlbHAo
Z19mYWxsYmFja3NNYXBbcGxhdGZvcm1dKTsKKworICAgICAgaHRtbCArPSAnPGRpdj5USU1FUzo8
L2Rpdj4nICsKKyAgICAgICAgICBodG1sRm9yU2xvd1RpbWVzKE1JTl9TRUNPTkRTX0ZPUl9TTE9X
X1RFU1QpICsKKyAgICAgICAgICAnPGRpdj5ERUJVRyBUSU1FUzo8L2Rpdj4nICsKKyAgICAgICAg
ICBodG1sRm9yU2xvd1RpbWVzKE1JTl9TRUNPTkRTX0ZPUl9TTE9XX1RFU1RfREVCVUcpOworICAg
IH0KKworICAgIGxlZ2VuZC5pbm5lckhUTUwgPSBodG1sOworfQorCitmdW5jdGlvbiBodG1sRm9y
U2xvd1RpbWVzKG1pblRpbWUpCit7CisgICAgcmV0dXJuICc8dWw+PGxpPiZsdDsxIHNlY29uZCA9
PSAhU0xPVzwvbGk+PGxpPiZndDsxIHNlY29uZCAmJiAmbHQ7JyArCisgICAgICAgIG1pblRpbWUg
KyAnIHNlY29uZHMgPT0gU0xPVyB8fCAhU0xPVyBpcyBmaW5lPC9saT48bGk+Jmd0OycgKworICAg
ICAgICBtaW5UaW1lICsgJyBzZWNvbmRzID09IFNMT1c8L2xpPjwvdWw+JzsKK30KKworZG9jdW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKKyAgICBpZiAoZS5r
ZXlJZGVudGlmaWVyID09ICdVKzAwM0YnIHx8IGUua2V5SWRlbnRpZmllciA9PSAnVSswMEJGJykg
eworICAgICAgICAvLyBXZWJLaXQgTUFDIHJldHVyc24gM0YuIFdlYktpdCBXSU4gcmV0dXJucyBC
Ri4gVGhpcyBpcyBhIGJ1ZyEKKyAgICAgICAgLy8gPyBrZXkKKyAgICAgICAgc2hvd0xlZ2VuZCgp
OworICAgIH0gZWxzZSBpZiAoZS5rZXlJZGVudGlmaWVyID09ICdVKzAwMUInKSB7CisgICAgICAg
IC8vIGVzY2FwZSBrZXkKKyAgICAgICAgaGlkZUxlZ2VuZCgpOworICAgICAgICBoaWRlUG9wdXAo
KTsKKyAgICB9Cit9LCBmYWxzZSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+PC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvc3RhdGlj
LWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF90ZXN0cy5qcyBiL1Rvb2xzL1Rlc3RzRGFz
aGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdGVzdHMu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMGJjYzJiNzgyZmJhNzRlODMyZTM1ZjAxYzVmYjE0YjliMDdiNDFlNQot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNo
Ym9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdGVzdHMuanMKQEAgLTAsMCArMSw0MTIgQEAKKy8v
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8K
Ky8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0
cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisv
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisvLyBAZmlsZW92ZXJ2
aWV3IFBvb3ItbWFuJ3MgdW5pdHRlc3RzIGZvciBzb21lIG9mIHRoZSB0cmlja2llciBsb2dpYyBi
aXRzIG9mCisvLyB0aGUgZmxha2luZXNzIGRhc2hib2FyZC4KKy8vCisvLyBDdXJyZW50bHkgb25s
eSB0ZXN0cyBwcm9jZXNzRXhwZWN0YXRpb25zIGFuZCBwb3B1bGF0ZUV4cGVjdGF0aW9uc0RhdGEu
CisvLyBBIHRlc3QganVzdCBjb25zaXN0cyBvZiBjYWxsaW5nIHJ1bkV4cGVjdGF0aW9uc1Rlc3Qg
d2l0aCB0aGUgYXBwcm9wcmlhdGUKKy8vIGFyZ3VtZW50cy4KKworLy8gRklYTUU6IG1vdmUgdGhp
cyBvdmVyIHRvIHVzaW5nIHF1bml0CisvLyBJbiB0aGUgbWVhbndoaWxlLCB5b3UgY2FuIHJ1biB0
aGVzZSB0ZXN0cyBieSBsb2FkaW5nCisvLyBmbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwjdXNlVGVz
dERhdGE9dHJ1ZSBpbiBhIGJyb3dzZXIuCisKKy8vIENsZWFycyBvdXQgdGhlIGdsb2JhbCBvYmpl
Y3RzIG1vZGlmaWVkIG9yIHVzZWQgYnkgcHJvY2Vzc0V4cGVjdGF0aW9ucyBhbmQKKy8vIHBvcHVs
YXRlRXhwZWN0YXRpb25zRGF0YS4gQSBiaXQgZ3Jvc3Mgc2luY2UgaXQncyBkaWdnaW5nIGludG8g
aW1wbGVtZW50YXRpb24KKy8vIGRldGFpbHMsIGJ1dCBpdCdzIGdvb2QgZW5vdWdoIGZvciBub3cu
CitmdW5jdGlvbiBzZXR1cEV4cGVjdGF0aW9uc1Rlc3QoKQoreworICAgIGFsbEV4cGVjdGF0aW9u
cyA9IG51bGw7CisgICAgYWxsVGVzdHMgPSBudWxsOworICAgIGdfZXhwZWN0YXRpb25zID0gJyc7
CisgICAgZ19yZXN1bHRzQnlCdWlsZGVyID0ge307CisgICAgZ19idWlsZGVycyA9IHt9OworICAg
IGdfYWxsRXhwZWN0YXRpb25zID0gbnVsbDsKKyAgICBnX2FsbFRlc3RzID0gbnVsbDsKKyAgICBn
X2N1cnJlbnRTdGF0ZSA9IHt9OworICAgIGZvciAodmFyIGtleSBpbiBnX2RlZmF1bHRDcm9zc0Rh
c2hib2FyZFN0YXRlVmFsdWVzKSB7CisgICAgICAgIGdfY3VycmVudFN0YXRlW2tleV0gPSBnX2Rl
ZmF1bHRDcm9zc0Rhc2hib2FyZFN0YXRlVmFsdWVzW2tleV07CisgICAgfQorfQorCisvLyBQcm9j
ZXNzZXMgdGhlIGV4cGVjdGF0aW9ucyBmb3IgYSB0ZXN0IGFuZCBhc3NlcnRzIHRoYXQgdGhlIGZp
bmFsIGV4cGVjdGF0aW9ucworLy8gYW5kIG1vZGlmaWVycyB3ZSBhcHBseSB0byBhIHRlc3QgbWF0
Y2ggd2hhdCB3ZSBleHBlY3QuCisvLworLy8gQHBhcmFtIHtzdHJpbmd9IGJ1aWxkZXIgQnVpbGRl
ciB0aGUgdGVzdCBpcyBydW4gb24uCisvLyBAcGFyYW0ge3N0cmluZ30gdGVzdCBUaGUgdGVzdCBu
YW1lLgorLy8gQHBhcmFtIHtzdHJpbmd9IGV4cGVjdGF0aW9ucyBTb3J0ZWQgc3RyaW5nIG9mIHdo
YXQgdGhlIGV4cGVjdGF0aW9ucyBmb3IgdGhpcworLy8gICAgICAgIHRlc3Qgb3VnaHQgdG8gYmUg
Zm9yIHRoaXMgYnVpbGRlci4KKy8vIEBwYXJhbSB7c3RyaW5nfSBtb2RpZmllcnMgU29ydGVkIHN0
cmluZyBvZiB3aGF0IHRoZSBtb2RpZmllcnMgZm9yIHRoaXMKKy8vICAgICAgICB0ZXN0IG91Z2h0
IHRvIGJlIGZvciB0aGlzIGJ1aWxkZXIuCitmdW5jdGlvbiBydW5FeHBlY3RhdGlvbnNUZXN0KGJ1
aWxkZXIsIHRlc3QsIGV4cGVjdGF0aW9ucywgbW9kaWZpZXJzKQoreworICAgIGdfYnVpbGRlcnNb
YnVpbGRlcl0gPSB0cnVlOworCisgICAgLy8gUHV0IGluIHNvbWUgZHVtbXkgcmVzdWx0cy4gcHJv
Y2Vzc0V4cGVjdGF0aW9ucyBleHBlY3RzIHRoZSB0ZXN0IHRvIGJlCisgICAgLy8gdGhlcmUuCisg
ICAgdmFyIHRlc3RzID0ge307CisgICAgdGVzdHNbdGVzdF0gPSB7J3Jlc3VsdHMnOiBbWzEwMCwg
J0YnXV0sICd0aW1lcyc6IFtbMTAwLCAwXV19OworICAgIGdfcmVzdWx0c0J5QnVpbGRlcltidWls
ZGVyXSA9IHsndGVzdHMnOiB0ZXN0c307CisKKyAgICBwcm9jZXNzRXhwZWN0YXRpb25zKCk7Cisg
ICAgdmFyIHJlc3VsdHNGb3JUZXN0ID0gY3JlYXRlUmVzdWx0c09iamVjdEZvclRlc3QodGVzdCwg
YnVpbGRlcik7CisgICAgcG9wdWxhdGVFeHBlY3RhdGlvbnNEYXRhKHJlc3VsdHNGb3JUZXN0KTsK
KworICAgIHZhciBtZXNzYWdlID0gJ0J1aWxkZXI6ICcgKyByZXN1bHRzRm9yVGVzdC5idWlsZGVy
ICsgJyB0ZXN0OiAnICsgcmVzdWx0c0ZvclRlc3QudGVzdDsKKyAgICBhc3NlcnRFcXVhbHMocmVz
dWx0c0ZvclRlc3QuZXhwZWN0YXRpb25zLCBleHBlY3RhdGlvbnMsIG1lc3NhZ2UpOworICAgIGFz
c2VydEVxdWFscyhyZXN1bHRzRm9yVGVzdC5tb2RpZmllcnMsIG1vZGlmaWVycywgbWVzc2FnZSk7
Cit9CisKK2Z1bmN0aW9uIGFzc2VydEVxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKQor
eworICAgIGlmIChleHBlY3RlZCAhPT0gYWN0dWFsKSB7CisgICAgICAgIGlmIChtZXNzYWdlKQor
ICAgICAgICAgICAgbWVzc2FnZSArPSAnICc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1l
c3NhZ2UgPSAnJzsKKworICAgICAgICB0aHJvdyBFcnJvcihtZXNzYWdlICsgJ2dvdDogJyArIGFj
dHVhbCArICcgZXhwZWN0ZWQ6ICcgKyBleHBlY3RlZCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0
ZXN0RmxhdHRlblRyaWUoKQoreworICAgIHZhciB0ZXN0cyA9IHsKKyAgICAgICAgJ2Jhci5odG1s
JzogeydyZXN1bHRzJzogW1sxMDAsICdGJ11dLCAndGltZXMnOiBbWzEwMCwgMF1dfSwKKyAgICAg
ICAgJ2Zvbyc6IHsKKyAgICAgICAgICAgICdiYXInOiB7CisgICAgICAgICAgICAgICAgJ2Jhei5o
dG1sJzogeydyZXN1bHRzJzogW1sxMDAsICdGJ11dLCAndGltZXMnOiBbWzEwMCwgMF1dfSwKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgdmFyIGV4cGVjdGVkRmxhdHRlbmVk
VGVzdHMgPSB7CisgICAgICAgICdiYXIuaHRtbCc6IHsncmVzdWx0cyc6IFtbMTAwLCAnRiddXSwg
J3RpbWVzJzogW1sxMDAsIDBdXX0sCisgICAgICAgICdmb28vYmFyL2Jhei5odG1sJzogeydyZXN1
bHRzJzogW1sxMDAsICdGJ11dLCAndGltZXMnOiBbWzEwMCwgMF1dfSwKKyAgICB9OworICAgIGFz
c2VydEVxdWFscyhKU09OLnN0cmluZ2lmeShmbGF0dGVuVHJpZSh0ZXN0cykpLCBKU09OLnN0cmlu
Z2lmeShleHBlY3RlZEZsYXR0ZW5lZFRlc3RzKSkKK30KKworZnVuY3Rpb24gdGVzdFJlbGVhc2VG
YWlsKCkKK3sKKyAgICB2YXIgYnVpbGRlciA9ICdXZWJraXQgV2luJzsKKyAgICB2YXIgdGVzdCA9
ICdmb28vMS5odG1sJzsKKyAgICB2YXIgZXhwZWN0YXRpb25zQXJyYXkgPSBbCisgICAgICAgIHsn
bW9kaWZpZXJzJzogJ1JFTEVBU0UnLCAnZXhwZWN0YXRpb25zJzogJ0ZBSUwnfQorICAgIF07Cisg
ICAgZ19leHBlY3RhdGlvbnMgPSAnUkVMRUFTRSA6ICcgKyB0ZXN0ICsgJyA9IEZBSUwnOworICAg
IHJ1bkV4cGVjdGF0aW9uc1Rlc3QoYnVpbGRlciwgdGVzdCwgJ0ZBSUwnLCAnUkVMRUFTRScpOwor
fQorCitmdW5jdGlvbiB0ZXN0UmVsZWFzZUZhaWxEZWJ1Z0NyYXNoUmVsZWFzZUJ1aWxkZXIoKQor
eworICAgIHZhciBidWlsZGVyID0gJ1dlYmtpdCBXaW4nOworICAgIHZhciB0ZXN0ID0gJ2Zvby8x
Lmh0bWwnOworICAgIHZhciBleHBlY3RhdGlvbnNBcnJheSA9IFsKKyAgICAgICAgeydtb2RpZmll
cnMnOiAnUkVMRUFTRScsICdleHBlY3RhdGlvbnMnOiAnRkFJTCd9LAorICAgICAgICB7J21vZGlm
aWVycyc6ICdERUJVRycsICdleHBlY3RhdGlvbnMnOiAnQ1JBU0gnfQorICAgIF07CisgICAgZ19l
eHBlY3RhdGlvbnMgPSAnUkVMRUFTRSA6ICcgKyB0ZXN0ICsgJyA9IEZBSUxcbicgKworICAgICAg
ICAnREVCVUcgOiAnICsgdGVzdCArICcgPSBDUkFTSCc7CisgICAgcnVuRXhwZWN0YXRpb25zVGVz
dChidWlsZGVyLCB0ZXN0LCAnRkFJTCcsICdSRUxFQVNFJyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RS
ZWxlYXNlRmFpbERlYnVnQ3Jhc2hEZWJ1Z0J1aWxkZXIoKQoreworICAgIHZhciBidWlsZGVyID0g
J1dlYmtpdCBXaW4gKGRiZyknOworICAgIHZhciB0ZXN0ID0gJ2Zvby8xLmh0bWwnOworICAgIHZh
ciBleHBlY3RhdGlvbnNBcnJheSA9IFsKKyAgICAgICAgeydtb2RpZmllcnMnOiAnUkVMRUFTRScs
ICdleHBlY3RhdGlvbnMnOiAnRkFJTCd9LAorICAgICAgICB7J21vZGlmaWVycyc6ICdERUJVRycs
ICdleHBlY3RhdGlvbnMnOiAnQ1JBU0gnfQorICAgIF07CisgICAgZ19leHBlY3RhdGlvbnMgPSAn
UkVMRUFTRSA6ICcgKyB0ZXN0ICsgJyA9IEZBSUxcbicgKworICAgICAgICAnREVCVUcgOiAnICsg
dGVzdCArICcgPSBDUkFTSCc7CisgICAgcnVuRXhwZWN0YXRpb25zVGVzdChidWlsZGVyLCB0ZXN0
LCAnQ1JBU0gnLCAnREVCVUcnKTsKK30KKworZnVuY3Rpb24gdGVzdE92ZXJyaWRlSnVzdEJ1aWxk
VHlwZSgpCit7CisgICAgdmFyIHRlc3QgPSAnYmFyLzEuaHRtbCc7CisgICAgZ19leHBlY3RhdGlv
bnMgPSAnV09OVEZJWCA6IGJhciA9IEZBSUwgUEFTUyBUSU1FT1VUXG4nICsKKyAgICAgICAgJ1dP
TlRGSVggTUFDIDogJyArIHRlc3QgKyAnID0gRkFJTFxuJyArCisgICAgICAgICdMSU5VWCBERUJV
RyA6ICcgKyB0ZXN0ICsgJyA9IENSQVNIJzsKKyAgICAKKyAgICBydW5FeHBlY3RhdGlvbnNUZXN0
KCdXZWJraXQgV2luJywgdGVzdCwgJ0ZBSUwgUEFTUyBUSU1FT1VUJywgJ1dPTlRGSVgnKTsKKyAg
ICBydW5FeHBlY3RhdGlvbnNUZXN0KCdXZWJraXQgV2luIChkYmcpKDMpJywgdGVzdCwgJ0ZBSUwg
UEFTUyBUSU1FT1VUJywgJ1dPTlRGSVgnKTsKKyAgICBydW5FeHBlY3RhdGlvbnNUZXN0KCdXZWJr
aXQgTGludXgnLCB0ZXN0LCAnRkFJTCBQQVNTIFRJTUVPVVQnLCAnV09OVEZJWCcpOworICAgIHJ1
bkV4cGVjdGF0aW9uc1Rlc3QoJ1dlYmtpdCBMaW51eCAoZGJnKSgzKScsIHRlc3QsICdDUkFTSCcs
ICdMSU5VWCBERUJVRycpOworICAgIHJ1bkV4cGVjdGF0aW9uc1Rlc3QoJ1dlYmtpdCBNYWMxMC41
IChDRyknLCB0ZXN0LCAnRkFJTCcsICdXT05URklYIE1BQycpOworICAgIHJ1bkV4cGVjdGF0aW9u
c1Rlc3QoJ1dlYmtpdCBNYWMxMC41IChDRykoZGJnKSgzKScsIHRlc3QsICdGQUlMJywgJ1dPTlRG
SVggTUFDJyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RQbGF0Zm9ybUFuZEJ1aWxkVHlwZSgpCit7Cisg
ICAgdmFyIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCA9IGZ1bmN0aW9uKGJ1aWxkZXIsIGV4
cGVjdGVkUGxhdGZvcm0sIGV4cGVjdGVkQnVpbGRUeXBlKSB7CisgICAgICAgIGdfcGVyQnVpbGRl
clBsYXRmb3JtQW5kQnVpbGRUeXBlID0ge307CisgICAgICAgIGJ1aWxkSW5mbyA9IHBsYXRmb3Jt
QW5kQnVpbGRUeXBlKGJ1aWxkZXIpOworICAgICAgICB2YXIgbWVzc2FnZSA9ICdCdWlsZGVyOiAn
ICsgYnVpbGRlcjsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGJ1aWxkSW5mby5wbGF0Zm9ybSwgZXhw
ZWN0ZWRQbGF0Zm9ybSwgbWVzc2FnZSk7CisgICAgICAgIGFzc2VydEVxdWFscyhidWlsZEluZm8u
YnVpbGRUeXBlLCBleHBlY3RlZEJ1aWxkVHlwZSwgbWVzc2FnZSk7CisgICAgfQorICAgIHJ1blBs
YXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Via2l0IFdpbiAoZGVwcyknLCAnWFAnLCAnUkVMRUFT
RScpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Via2l0IFdpbiAoZGVwcyko
ZGJnKSgxKScsICdYUCcsICdERUJVRycpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVz
dCgnV2Via2l0IFdpbiAoZGVwcykoZGJnKSgyKScsICdYUCcsICdERUJVRycpOworICAgIHJ1blBs
YXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Via2l0IExpbnV4IChkZXBzKScsICdMVUNJRCcsICdS
RUxFQVNFJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXZWJraXQgTGludXgg
KGRlcHMpKGRiZykoMSknLCAnTFVDSUQnLCAnREVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1
aWxkVHlwZVRlc3QoJ1dlYmtpdCBMaW51eCAoZGVwcykoZGJnKSgyKScsICdMVUNJRCcsICdERUJV
RycpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Via2l0IE1hYzEwLjYgKENH
KShkZXBzKScsICdTTk9XTEVPUEFSRCcsICdSRUxFQVNFJyk7CisgICAgcnVuUGxhdGZvcm1BbmRC
dWlsZFR5cGVUZXN0KCdXZWJraXQgTWFjMTAuNiAoQ0cpKGRlcHMpKGRiZykoMSknLCAnU05PV0xF
T1BBUkQnLCAnREVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ1dlYmtp
dCBNYWMxMC42IChDRykoZGVwcykoZGJnKSgyKScsICdTTk9XTEVPUEFSRCcsICdERUJVRycpOwor
ICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Via2l0IFdpbicsICdYUCcsICdSRUxF
QVNFJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXZWJraXQgVmlzdGEnLCAn
VklTVEEnLCAnUkVMRUFTRScpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Vi
a2l0IFdpbjcnLCAnV0lONycsICdSRUxFQVNFJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5
cGVUZXN0KCdXZWJraXQgV2luIChkYmcpKDEpJywgJ1hQJywgJ0RFQlVHJyk7CisgICAgcnVuUGxh
dGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXZWJraXQgV2luIChkYmcpKDIpJywgJ1hQJywgJ0RFQlVH
Jyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXZWJraXQgTGludXgnLCAnTFVD
SUQnLCAnUkVMRUFTRScpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Via2l0
IExpbnV4IDMyJywgJ0xVQ0lEJywgJ1JFTEVBU0UnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxk
VHlwZVRlc3QoJ1dlYmtpdCBMaW51eCAoZGJnKSgxKScsICdMVUNJRCcsICdERUJVRycpOworICAg
IHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Via2l0IExpbnV4IChkYmcpKDIpJywgJ0xV
Q0lEJywgJ0RFQlVHJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXZWJraXQg
TWFjMTAuNSAoQ0cpJywgJ0xFT1BBUkQnLCAnUkVMRUFTRScpOworICAgIHJ1blBsYXRmb3JtQW5k
QnVpbGRUeXBlVGVzdCgnV2Via2l0IE1hYzEwLjUgKENHKShkYmcpKDEpJywgJ0xFT1BBUkQnLCAn
REVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ1dlYmtpdCBNYWMxMC41
IChDRykoZGJnKSgyKScsICdMRU9QQVJEJywgJ0RFQlVHJyk7CisgICAgcnVuUGxhdGZvcm1BbmRC
dWlsZFR5cGVUZXN0KCdXZWJraXQgTWFjMTAuNiAoQ0cpJywgJ1NOT1dMRU9QQVJEJywgJ1JFTEVB
U0UnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ1dlYmtpdCBNYWMxMC42IChD
RykoZGJnKScsICdTTk9XTEVPUEFSRCcsICdERUJVRycpOworICAgIHJ1blBsYXRmb3JtQW5kQnVp
bGRUeXBlVGVzdCgnV2Via2l0IFdpbiAtIEdQVScsICdYUCcsICdSRUxFQVNFJyk7CisgICAgcnVu
UGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXZWJraXQgVmlzdGEgLSBHUFUnLCAnVklTVEEnLCAn
UkVMRUFTRScpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Via2l0IFdpbjcg
LSBHUFUnLCAnV0lONycsICdSRUxFQVNFJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVU
ZXN0KCdXZWJraXQgV2luIChkYmcpKDEpIC0gR1BVJywgJ1hQJywgJ0RFQlVHJyk7CisgICAgcnVu
UGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXZWJraXQgV2luIChkYmcpKDIpIC0gR1BVJywgJ1hQ
JywgJ0RFQlVHJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXZWJraXQgTGlu
dXggLSBHUFUnLCAnTFVDSUQnLCAnUkVMRUFTRScpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRU
eXBlVGVzdCgnV2Via2l0IExpbnV4IDMyIC0gR1BVJywgJ0xVQ0lEJywgJ1JFTEVBU0UnKTsKKyAg
ICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ1dlYmtpdCBMaW51eCAoZGJnKSgxKSAtIEdQ
VScsICdMVUNJRCcsICdERUJVRycpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgn
V2Via2l0IExpbnV4IChkYmcpKDIpIC0gR1BVJywgJ0xVQ0lEJywgJ0RFQlVHJyk7CisgICAgcnVu
UGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXZWJraXQgTWFjMTAuNSAtIEdQVScsICdMRU9QQVJE
JywgJ1JFTEVBU0UnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ1dlYmtpdCBN
YWMxMC41IChkYmcpKDEpIC0gR1BVJywgJ0xFT1BBUkQnLCAnREVCVUcnKTsKKyAgICBydW5QbGF0
Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ1dlYmtpdCBNYWMxMC41IChkYmcpKDIpIC0gR1BVJywgJ0xF
T1BBUkQnLCAnREVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ1dlYmtp
dCBNYWMxMC42IC0gR1BVJywgJ1NOT1dMRU9QQVJEJywgJ1JFTEVBU0UnKTsKKyAgICBydW5QbGF0
Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ1dlYmtpdCBNYWMxMC42IChkYmcpIC0gR1BVJywgJ1NOT1dM
RU9QQVJEJywgJ0RFQlVHJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdHUFUg
V2luNyBUZXN0cyAtIEdQVScsICdXSU43JywgJ1JFTEVBU0UnKTsKKyAgICBydW5QbGF0Zm9ybUFu
ZEJ1aWxkVHlwZVRlc3QoJ0dQVSBXaW43IFRlc3RzIChkYmcpKDEpIC0gR1BVJywgJ1dJTjcnLCAn
REVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ0dQVSBXaW43IFRlc3Rz
IChkYmcpKDIpIC0gR1BVJywgJ1dJTjcnLCAnREVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1
aWxkVHlwZVRlc3QoJ0dQVSBXaW43IHg2NCBUZXN0cyAoZGJnKSgxKSAtIEdQVScsICdXSU43Jywg
J0RFQlVHJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdHUFUgV2luNyB4NjQg
VGVzdHMgKGRiZykoMikgLSBHUFUnLCAnV0lONycsICdERUJVRycpOworICAgIHJ1blBsYXRmb3Jt
QW5kQnVpbGRUeXBlVGVzdCgnR1BVIFZpc3RhIFRlc3RzIChkYmcpKDEpIC0gR1BVJywgJ1ZJU1RB
JywgJ0RFQlVHJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdHUFUgVmlzdGEg
VGVzdHMgKGRiZykoMikgLSBHUFUnLCAnVklTVEEnLCAnREVCVUcnKTsKKyAgICBydW5QbGF0Zm9y
bUFuZEJ1aWxkVHlwZVRlc3QoJ0dQVSBWaXN0YSB4NjQgVGVzdHMgKGRiZykgLSBHUFUnLCAnVklT
VEEnLCAnREVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ0dQVSBNYWMg
MTAuNiBUZXN0cyAtIEdQVScsICdTTk9XTEVPUEFSRCcsICdSRUxFQVNFJyk7CisgICAgcnVuUGxh
dGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdHUFUgTWFjIDEwLjYgVGVzdHMgKGRiZykgLSBHUFUnLCAn
U05PV0xFT1BBUkQnLCAnREVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3Qo
J0dQVSBNYWMgMTAuNSBUZXN0cyAoZGJnKSAtIEdQVScsICdMRU9QQVJEJywgJ0RFQlVHJyk7Cisg
ICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdHUFUgTGludXggVGVzdHMgKGRiZykoMSkg
LSBHUFUnLCAnTFVDSUQnLCAnREVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRl
c3QoJ0dQVSBMaW51eCBUZXN0cyAoZGJnKSgyKSAtIEdQVScsICdMVUNJRCcsICdERUJVRycpOwor
ICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnR1BVIFdpbjcgVGVzdHMgKGRiZykoMSkg
LSBHUFUnLCAnV0lONycsICdERUJVRycpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVz
dCgnR1BVIFdpbjcgVGVzdHMgKGRiZykoMikgLSBHUFUnLCAnV0lONycsICdERUJVRycpOworICAg
IHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnR1BVIExpbnV4IFRlc3RzIHg2NCAtIEdQVScs
ICdMVUNJRCcsICdSRUxFQVNFJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdY
UCBUZXN0cycsICdYUCcsICdSRUxFQVNFJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVU
ZXN0KCdJbnRlcmFjdGl2ZSBUZXN0cyAoZGJnKScsICdYUCcsICdERUJVRycpOworICAgIAorICAg
IGdfY3VycmVudFN0YXRlLmdyb3VwID0gJ0BUb1QgLSB3ZWJraXQub3JnJzsKKyAgICBydW5QbGF0
Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ0Nocm9taXVtIFdpbiBSZWxlYXNlIChUZXN0cyknLCAnWFAn
LCAnUkVMRUFTRScpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnQ2hyb21pdW0g
TGludXggUmVsZWFzZSAoVGVzdHMpJywgJ0xVQ0lEJywgJ1JFTEVBU0UnKTsKKyAgICBydW5QbGF0
Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ0Nocm9taXVtIE1hYyBSZWxlYXNlIChUZXN0cyknLCAnU05P
V0xFT1BBUkQnLCAnUkVMRUFTRScpOworICAgIAorICAgIC8vIEZJWE1FOiBUaGVzZSBwbGF0Zm9y
bXMgc2hvdWxkIG1hdGNoIHdoYXRldmVyIHdlIHVzZSBpbiB0aGUgdGVzdF9leHBlY3RhdGlvbnMu
dHh0IGZvcm1hdC4KKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ0xlb3BhcmQgSW50
ZWwgUmVsZWFzZSAoVGVzdHMpJywgJ0FQUExFX0xFT1BBUkQnLCAnUkVMRUFTRScpOworICAgIHJ1
blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnTGVvcGFyZCBJbnRlbCBEZWJ1ZyAoVGVzdHMpJywg
J0FQUExFX0xFT1BBUkQnLCAnREVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRl
c3QoJ1Nub3dMZW9wYXJkIEludGVsIFJlbGVhc2UgKFRlc3RzKScsICdBUFBMRV9TTk9XTEVPUEFS
RCcsICdSRUxFQVNFJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdTbm93TGVv
cGFyZCBJbnRlbCBMZWFrcycsICdBUFBMRV9TTk9XTEVPUEFSRCcsICdSRUxFQVNFJyk7CisgICAg
cnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdTbm93TGVvcGFyZCBJbnRlbCBEZWJ1ZyAoVGVz
dHMpJywgJ0FQUExFX1NOT1dMRU9QQVJEJywgJ0RFQlVHJyk7CisgICAgcnVuUGxhdGZvcm1BbmRC
dWlsZFR5cGVUZXN0KCdHVEsgTGludXggMzItYml0IFJlbGVhc2UnLCAnR1RLX0xJTlVYJywgJ1JF
TEVBU0UnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ0dUSyBMaW51eCAzMi1i
aXQgRGVidWcnLCAnR1RLX0xJTlVYJywgJ0RFQlVHJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWls
ZFR5cGVUZXN0KCdHVEsgTGludXggNjQtYml0IERlYnVnJywgJ0dUS19MSU5VWCcsICdERUJVRycp
OworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnUXQgTGludXggUmVsZWFzZScsICdR
VF9MSU5VWCcsICdSRUxFQVNFJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdX
aW5kb3dzIDcgUmVsZWFzZSAoVGVzdHMpJywgJ0FQUExFX1dJTjcnLCAnUkVMRUFTRScpOworICAg
IHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2luZG93cyBYUCBEZWJ1ZyAoVGVzdHMpJywg
J0FQUExFX1hQJywgJ0RFQlVHJyk7CisgICAgCisgICAgLy8gRklYTUU6IFNob3VsZCBXZWJLaXQy
IGJlIGl0J3Mgb3duIHBsYXRmb3JtPworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgn
U25vd0xlb3BhcmQgSW50ZWwgUmVsZWFzZSAoV2ViS2l0MiBUZXN0cyknLCAnQVBQTEVfU05PV0xF
T1BBUkQnLCAnUkVMRUFTRScpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnU25v
d0xlb3BhcmQgSW50ZWwgRGVidWcgKFdlYktpdDIgVGVzdHMpJywgJ0FQUExFX1NOT1dMRU9QQVJE
JywgJ0RFQlVHJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXaW5kb3dzIDcg
UmVsZWFzZSAoV2ViS2l0MiBUZXN0cyknLCAnQVBQTEVfV0lONycsICdSRUxFQVNFJyk7ICAgIAor
fQorCitmdW5jdGlvbiB0ZXN0UmVhbE1vZGlmaWVycygpCit7CisgICAgYXNzZXJ0RXF1YWxzKHJl
YWxNb2RpZmllcnMoJ0JVR0ZPTyBMSU5VWCBMRU9QQVJEIFdJTiBERUJVRyBTTE9XJyksICdTTE9X
Jyk7CisgICAgYXNzZXJ0RXF1YWxzKHJlYWxNb2RpZmllcnMoJ0JVR0ZPTyBMVUNJRCBNQUMgWFAg
UkVMRUFTRSBTS0lQJyksICdTS0lQJyk7CisgICAgYXNzZXJ0RXF1YWxzKHJlYWxNb2RpZmllcnMo
J0JVR0ZPTycpLCAnJyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RBbGxUZXN0c1dpdGhTYW1lUGxhdGZv
cm1BbmRCdWlsZFR5cGUoKQoreworICAgIC8vIEZJWE1FOiB0ZXN0IHRoYXQgYWxsVGVzdHNXaXRo
U2FtZVBsYXRmb3JtQW5kQnVpbGRUeXBlIGFjdHVhbGx5IHJldHVybnMgdGhlIHJpZ2h0IHNldCBv
ZiB0ZXN0cy4KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IFBMQVRGT1JNUy5sZW5ndGg7IGkrKykg
eworICAgICAgICBpZiAoIWdfYWxsVGVzdHNCeVBsYXRmb3JtQW5kQnVpbGRUeXBlW1BMQVRGT1JN
U1tpXV0pCisgICAgICAgICAgICB0aHJvdyBFcnJvcihQTEFURk9STVNbaV0gKyAnIGlzIG5vdCBp
biBnX2FsbFRlc3RzQnlQbGF0Zm9ybUFuZEJ1aWxkVHlwZScpOworICAgIH0KK30KKworZnVuY3Rp
b24gdGVzdEZpbHRlckJ1Z3MoKQoreworICAgIHZhciBmaWx0ZXJlZCA9IGZpbHRlckJ1Z3MoJ1NL
SVAgQlVHMTIzIEJVR0NSMTIzIEJVR1dLMTIzIFNMT1cgQlVHX1RPTlkgREVCVUcnKQorICAgIGFz
c2VydEVxdWFscyhmaWx0ZXJlZC5tb2RpZmllcnMsICdTS0lQIFNMT1cgREVCVUcnKTsKKyAgICBh
c3NlcnRFcXVhbHMoZmlsdGVyZWQuYnVncywgJ0JVRzEyMyBCVUdDUjEyMyBCVUdXSzEyMyBCVUdf
VE9OWScpOworCisgICAgZmlsdGVyZWQgPSBmaWx0ZXJCdWdzKCdTS0lQIFNMT1cgREVCVUcnKQor
ICAgIGFzc2VydEVxdWFscyhmaWx0ZXJlZC5tb2RpZmllcnMsICdTS0lQIFNMT1cgREVCVUcnKTsK
KyAgICBhc3NlcnRFcXVhbHMoZmlsdGVyZWQuYnVncywgJycpOworfQorCitmdW5jdGlvbiB0ZXN0
R2V0RXhwZWN0YXRpb25zKCkKK3sKKyAgICBnX2J1aWxkZXJzWydXZWJLaXQgV2luJ10gPSB0cnVl
OworICAgIGdfcmVzdWx0c0J5QnVpbGRlciA9IHsKKyAgICAgICAgJ1dlYktpdCBXaW4nOiB7Cisg
ICAgICAgICAgICAndGVzdHMnOiB7CisgICAgICAgICAgICAgICAgJ2Zvby90ZXN0MS5odG1sJzog
eydyZXN1bHRzJzogW1sxMDAsICdGJ11dLCAndGltZXMnOiBbWzEwMCwgMF1dfSwKKyAgICAgICAg
ICAgICAgICAnZm9vL3Rlc3QzLmh0bWwnOiB7J3Jlc3VsdHMnOiBbWzEwMCwgJ0YnXV0sICd0aW1l
cyc6IFtbMTAwLCAwXV19LAorICAgICAgICAgICAgICAgICd0ZXN0MS5odG1sJzogeydyZXN1bHRz
JzogW1sxMDAsICdGJ11dLCAndGltZXMnOiBbWzEwMCwgMF1dfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgZ19leHBlY3RhdGlvbnMgPSAnQlVHMTIzIDogZm9vID0gRkFJ
TCBQQVNTIENSQVNIXG4nICsKKyAgICAgICAgJ1JFTEVBU0UgQlVHRk9PIDogZm9vL3Rlc3QxLmh0
bWwgPSBGQUlMXG4nICsKKyAgICAgICAgJ0RFQlVHIDogZm9vL3Rlc3QxLmh0bWwgPSBDUkFTSFxu
JyArCisgICAgICAgICdCVUc0NTYgOiBmb28vdGVzdDIuaHRtbCA9IEZBSUxcbicgKworICAgICAg
ICAnTElOVVggREVCVUcgOiBmb28vdGVzdDIuaHRtbCA9IENSQVNIXG4nICsKKyAgICAgICAgJ1JF
TEVBU0UgOiB0ZXN0MS5odG1sID0gRkFJTFxuJyArCisgICAgICAgICdERUJVRyA6IHRlc3QxLmh0
bWwgPSBDUkFTSFxuJyArCisgICAgICAgICdXSU43IDogaHR0cC90ZXN0cy9hcHBjYWNoZS9pbnRl
cnJ1cHRlZC11cGRhdGUuaHRtbCA9IFRJTUVPVVRcbicgKworICAgICAgICAnTUFDIExJTlVYIFhQ
IFZJU1RBIDogaHR0cC90ZXN0cy9hcHBjYWNoZS9pbnRlcnJ1cHRlZC11cGRhdGUuaHRtbCA9IEZB
SUxcbic7CisKKyAgICBwcm9jZXNzRXhwZWN0YXRpb25zKCk7CisgICAgCisgICAgdmFyIGV4cGVj
dGF0aW9ucyA9IGdldEV4cGVjdGF0aW9ucygnZm9vL3Rlc3QxLmh0bWwnLCAnWFAnLCAnREVCVUcn
KTsKKyAgICBhc3NlcnRFcXVhbHMoSlNPTi5zdHJpbmdpZnkoZXhwZWN0YXRpb25zKSwgJ3sibW9k
aWZpZXJzIjoiREVCVUciLCJleHBlY3RhdGlvbnMiOiJDUkFTSCJ9Jyk7CisKKyAgICB2YXIgZXhw
ZWN0YXRpb25zID0gZ2V0RXhwZWN0YXRpb25zKCdmb28vdGVzdDEuaHRtbCcsICdMVUNJRCcsICdS
RUxFQVNFJyk7CisgICAgYXNzZXJ0RXF1YWxzKEpTT04uc3RyaW5naWZ5KGV4cGVjdGF0aW9ucyks
ICd7Im1vZGlmaWVycyI6IlJFTEVBU0UgQlVHRk9PIiwiZXhwZWN0YXRpb25zIjoiRkFJTCJ9Jyk7
CisKKyAgICB2YXIgZXhwZWN0YXRpb25zID0gZ2V0RXhwZWN0YXRpb25zKCdmb28vdGVzdDIuaHRt
bCcsICdMVUNJRCcsICdSRUxFQVNFJyk7CisgICAgYXNzZXJ0RXF1YWxzKEpTT04uc3RyaW5naWZ5
KGV4cGVjdGF0aW9ucyksICd7Im1vZGlmaWVycyI6IkJVRzQ1NiIsImV4cGVjdGF0aW9ucyI6IkZB
SUwifScpOworCisgICAgdmFyIGV4cGVjdGF0aW9ucyA9IGdldEV4cGVjdGF0aW9ucygnZm9vL3Rl
c3QyLmh0bWwnLCAnTEVPUEFSRCcsICdERUJVRycpOworICAgIGFzc2VydEVxdWFscyhKU09OLnN0
cmluZ2lmeShleHBlY3RhdGlvbnMpLCAneyJtb2RpZmllcnMiOiJCVUc0NTYiLCJleHBlY3RhdGlv
bnMiOiJGQUlMIn0nKTsKKworICAgIHZhciBleHBlY3RhdGlvbnMgPSBnZXRFeHBlY3RhdGlvbnMo
J2Zvby90ZXN0Mi5odG1sJywgJ0xVQ0lEJywgJ0RFQlVHJyk7CisgICAgYXNzZXJ0RXF1YWxzKEpT
T04uc3RyaW5naWZ5KGV4cGVjdGF0aW9ucyksICd7Im1vZGlmaWVycyI6IkxJTlVYIERFQlVHIiwi
ZXhwZWN0YXRpb25zIjoiQ1JBU0gifScpOworCisgICAgdmFyIGV4cGVjdGF0aW9ucyA9IGdldEV4
cGVjdGF0aW9ucygnZm9vL3Rlc3QzLmh0bWwnLCAnTFVDSUQnLCAnREVCVUcnKTsKKyAgICBhc3Nl
cnRFcXVhbHMoSlNPTi5zdHJpbmdpZnkoZXhwZWN0YXRpb25zKSwgJ3sibW9kaWZpZXJzIjoiQlVH
MTIzIiwiZXhwZWN0YXRpb25zIjoiRkFJTCBQQVNTIENSQVNIIn0nKTsKKworICAgIHZhciBleHBl
Y3RhdGlvbnMgPSBnZXRFeHBlY3RhdGlvbnMoJ3Rlc3QxLmh0bWwnLCAnWFAnLCAnREVCVUcnKTsK
KyAgICBhc3NlcnRFcXVhbHMoSlNPTi5zdHJpbmdpZnkoZXhwZWN0YXRpb25zKSwgJ3sibW9kaWZp
ZXJzIjoiREVCVUciLCJleHBlY3RhdGlvbnMiOiJDUkFTSCJ9Jyk7CisKKyAgICB2YXIgZXhwZWN0
YXRpb25zID0gZ2V0RXhwZWN0YXRpb25zKCd0ZXN0MS5odG1sJywgJ0xVQ0lEJywgJ1JFTEVBU0Un
KTsKKyAgICBhc3NlcnRFcXVhbHMoSlNPTi5zdHJpbmdpZnkoZXhwZWN0YXRpb25zKSwgJ3sibW9k
aWZpZXJzIjoiUkVMRUFTRSIsImV4cGVjdGF0aW9ucyI6IkZBSUwifScpOworCisgICAgdmFyIGV4
cGVjdGF0aW9ucyA9IGdldEV4cGVjdGF0aW9ucygnaHR0cC90ZXN0cy9hcHBjYWNoZS9pbnRlcnJ1
cHRlZC11cGRhdGUuaHRtbCcsICdXSU43JywgJ1JFTEVBU0UnKTsKKyAgICBhc3NlcnRFcXVhbHMo
SlNPTi5zdHJpbmdpZnkoZXhwZWN0YXRpb25zKSwgJ3sibW9kaWZpZXJzIjoiV0lONyIsImV4cGVj
dGF0aW9ucyI6IlRJTUVPVVQifScpOworCisgICAgdmFyIGV4cGVjdGF0aW9ucyA9IGdldEV4cGVj
dGF0aW9ucygnaHR0cC90ZXN0cy9hcHBjYWNoZS9pbnRlcnJ1cHRlZC11cGRhdGUuaHRtbCcsICdM
RU9QQVJEJywgJ1JFTEVBU0UnKTsKKyAgICBhc3NlcnRFcXVhbHMoSlNPTi5zdHJpbmdpZnkoZXhw
ZWN0YXRpb25zKSwgJ3sibW9kaWZpZXJzIjoiTUFDIExJTlVYIFhQIFZJU1RBIiwiZXhwZWN0YXRp
b25zIjoiRkFJTCJ9Jyk7CisKKyAgICB2YXIgZXhwZWN0YXRpb25zID0gZ2V0RXhwZWN0YXRpb25z
KCdodHRwL3Rlc3RzL2FwcGNhY2hlL2ludGVycnVwdGVkLXVwZGF0ZS5odG1sJywgJ0xVQ0lEJywg
J1JFTEVBU0UnKTsKKyAgICBhc3NlcnRFcXVhbHMoSlNPTi5zdHJpbmdpZnkoZXhwZWN0YXRpb25z
KSwgJ3sibW9kaWZpZXJzIjoiTUFDIExJTlVYIFhQIFZJU1RBIiwiZXhwZWN0YXRpb25zIjoiRkFJ
TCJ9Jyk7CisKKyAgICB2YXIgZXhwZWN0YXRpb25zID0gZ2V0RXhwZWN0YXRpb25zKCdodHRwL3Rl
c3RzL2FwcGNhY2hlL2ludGVycnVwdGVkLXVwZGF0ZS5odG1sJywgJ1ZJU1RBJywgJ1JFTEVBU0Un
KTsKKyAgICBhc3NlcnRFcXVhbHMoSlNPTi5zdHJpbmdpZnkoZXhwZWN0YXRpb25zKSwgJ3sibW9k
aWZpZXJzIjoiTUFDIExJTlVYIFhQIFZJU1RBIiwiZXhwZWN0YXRpb25zIjoiRkFJTCJ9Jyk7Cit9
CisKK2Z1bmN0aW9uIHRlc3RTdWJzdHJpbmdMaXN0KCkKK3sKKyAgICBnX2N1cnJlbnRTdGF0ZS50
ZXN0VHlwZSA9ICdndGVzdCc7CisgICAgZ19jdXJyZW50U3RhdGUudGVzdHMgPSAndGVzdC5GTEFL
WV9mb28gdGVzdC5GQUlMU19mb28xIHRlc3QuRElTQUJMRURfZm9vMiB0ZXN0Lk1BWUJFX2ZvbzMg
dGVzdC5mb280JzsKKyAgICBhc3NlcnRFcXVhbHMoc3Vic3RyaW5nTGlzdCgpLnRvU3RyaW5nKCks
ICd0ZXN0LmZvbyx0ZXN0LmZvbzEsdGVzdC5mb28yLHRlc3QuZm9vMyx0ZXN0LmZvbzQnKTsKKwor
ICAgIGdfY3VycmVudFN0YXRlLnRlc3RUeXBlID0gJ2xheW91dC10ZXN0cyc7CisgICAgZ19jdXJy
ZW50U3RhdGUudGVzdHMgPSAnZm9vL2Jhci5GTEFLWV9mb28uaHRtbCc7CisgICAgYXNzZXJ0RXF1
YWxzKHN1YnN0cmluZ0xpc3QoKS50b1N0cmluZygpLCAnZm9vL2Jhci5GTEFLWV9mb28uaHRtbCcp
OworfQorCitmdW5jdGlvbiB0ZXN0SHRtbEZvclRlc3RzV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFp
bHVyZXMoKQoreworICAgIHZhciBidWlsZGVyID0gJ1dlYktpdCBXaW4nOworICAgIGdfcGVyQnVp
bGRlcldpdGhFeHBlY3RhdGlvbnNCdXROb0ZhaWx1cmVzW2J1aWxkZXJdID0gWydwYXNzaW5nLXRl
c3QxLmh0bWwnLCAncGFzc2luZy10ZXN0Mi5odG1sJ107CisgICAgZ19wZXJCdWlsZGVyU2tpcHBl
ZFBhdGhzW2J1aWxkZXJdID0gWydza2lwcGVkLXRlc3QxLmh0bWwnXTsKKyAgICBnX3Jlc3VsdHNC
eUJ1aWxkZXJbYnVpbGRlcl0gPSB7IGJ1aWxkTnVtYmVyczogWzUsIDQsIDMsIDFdIH07CisKKyAg
ICBnX2N1cnJlbnRTdGF0ZS5zaG93VW5leHBlY3RlZFBhc3NlcyA9IHRydWU7CisgICAgZ19jdXJy
ZW50U3RhdGUuc2hvd1NraXBwZWQgPSB0cnVlOworICAgIAorICAgIHZhciBjb250YWluZXIgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBjb250YWluZXIuaW5uZXJIVE1MID0g
aHRtbEZvclRlc3RzV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXMoYnVpbGRlcik7CisgICAg
YXNzZXJ0RXF1YWxzKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcjcGFzc2luZy10ZXN0cyA+
IGRpdicpLmxlbmd0aCwgMik7CisgICAgYXNzZXJ0RXF1YWxzKGNvbnRhaW5lci5xdWVyeVNlbGVj
dG9yQWxsKCcjc2tpcHBlZC10ZXN0cyA+IGRpdicpLmxlbmd0aCwgMSk7CisgICAgCisgICAgZ19j
dXJyZW50U3RhdGUuc2hvd1VuZXhwZWN0ZWRQYXNzZXMgPSBmYWxzZTsKKyAgICBnX2N1cnJlbnRT
dGF0ZS5zaG93U2tpcHBlZCA9IGZhbHNlOworICAgIAorICAgIHZhciBjb250YWluZXIgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBjb250YWluZXIuaW5uZXJIVE1MID0gaHRt
bEZvclRlc3RzV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXMoYnVpbGRlcik7CisgICAgYXNz
ZXJ0RXF1YWxzKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcjcGFzc2luZy10ZXN0cyA+IGRp
dicpLmxlbmd0aCwgMCk7CisgICAgYXNzZXJ0RXF1YWxzKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9y
QWxsKCcjc2tpcHBlZC10ZXN0cyA+IGRpdicpLmxlbmd0aCwgMCk7Cit9CisKK2Z1bmN0aW9uIHRl
c3RIZWFkZXJGb3JUZXN0VGFibGVIdG1sKCkKK3sKKyAgICB2YXIgY29udGFpbmVyID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGhlYWRl
ckZvclRlc3RUYWJsZUh0bWwoKTsKKyAgICBhc3NlcnRFcXVhbHMoY29udGFpbmVyLnF1ZXJ5U2Vs
ZWN0b3JBbGwoJ2lucHV0JykubGVuZ3RoLCA1KTsKK30KKworZnVuY3Rpb24gcnVuVGVzdHMoKQor
eworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJzxwcmUgaWQ9dW5pdHRlc3QtcmVzdWx0
cz48L3ByZT4nOworICAgIGZvciAodmFyIG5hbWUgaW4gd2luZG93KSB7CisgICAgICAgIGlmICh0
eXBlb2Ygd2luZG93W25hbWVdID09ICdmdW5jdGlvbicgJiYgL150ZXN0Ly50ZXN0KG5hbWUpKSB7
CisgICAgICAgICAgICBzZXR1cEV4cGVjdGF0aW9uc1Rlc3QoKTsKKworICAgICAgICAgICAgdmFy
IHRlc3QgPSB3aW5kb3dbbmFtZV07CisgICAgICAgICAgICB2YXIgZXJyb3IgPSBudWxsOworCisg
ICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHRlc3QoKTsKKyAgICAgICAgICAgIH0g
Y2F0Y2ggKGVycikgeworICAgICAgICAgICAgICAgIGVycm9yID0gZXJyOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZXJyb3IgPyBlcnJvci50b1N0cmluZygpIDog
J1BBU1NFRCc7CisgICAgICAgICAgICAkKCd1bml0dGVzdC1yZXN1bHRzJykuaW5zZXJ0QWRqYWNl
bnRIVE1MKCJiZWZvcmVFbmQiLCBuYW1lICsgJzogJyArIHJlc3VsdCArICdcbicpOworICAgICAg
ICB9CisgICAgfQorfQorCitpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PSAnY29tcGxldGUnKQor
ICAgIHJ1blRlc3RzKCk7CitlbHNlCisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQn
LCBydW5UZXN0cywgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2
ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuaHRtbCBiL1Rvb2xzL1Rlc3Rz
RGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RpbWVsaW5lX2V4cGxvcmVyLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTRiMDZiNTBlZTc4M2MxZjUwNTliOGU3M2U2MTVmMTYzNTQyMGE5ZgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9h
cmRzL3RpbWVsaW5lX2V4cGxvcmVyLmh0bWwKQEAgLTAsMCArMSw0NTYgQEAKKzwhLS0gQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgoraW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KK3RoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCistLT4KKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisKKzxoZWFkPgor
PHRpdGxlPlRlc3QgVGltZWxpbmUgRXhwbG9yZXI8L3RpdGxlPgorPHN0eWxlPgorYm9keSB7Cisg
ICAgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CisgICAgZm9udC1z
aXplOiAxMnB4OworfQorCisjdGltZWxpbmUtY29udGFpbmVyIHsKKyAgICBwb3NpdGlvbjogcmVs
YXRpdmU7Cit9CisKKyNpbnNwZWN0b3ItY29udGFpbmVyIHsKKyAgICB3aWR0aDogMzAwcHg7Cisg
ICAgZmxvYXQ6IHJpZ2h0OworICAgIGJvcmRlci1sZWZ0OiAxcHggZGFzaGVkOworICAgIHBhZGRp
bmctbGVmdDogNXB4OworICAgIG1hcmdpbi1sZWZ0OiA1cHg7Cit9CisKKyNpbnNwZWN0b3ItY29u
dGFpbmVyIGNhcHRpb24geworICAgIGJhY2tncm91bmQ6ICNlZWU7CisgICAgZm9udC13ZWlnaHQ6
IGJvbGQ7CisgICAgcGFkZGluZzogMnB4OworICAgIGZvbnQtc2l6ZTogMTRweDsKKyAgICB0ZXh0
LWFsaWduOiBsZWZ0OworfQorCisjaW5zcGVjdG9yLXRhYmxlIHsKKyAgICB3aWR0aDogMTAwJTsK
K30KKworI2luc3BlY3Rvci10YWJsZSB0ZCB7CisgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKK30K
KworI2luc3BlY3Rvci10YWJsZSAubGFiZWwgeworICAgIGNvbG9yOiAjNjY2OworICAgIHRleHQt
YWxpZ246IHJpZ2h0OworICAgIHdpZHRoOiAxMGVtOworfQorCisjaW5zcGVjdG9yLXRhYmxlIC5k
ZWx0YS5wb3NpdGl2ZSB7CisgICAgY29sb3I6ICMwOTA7Cit9CisKKyNpbnNwZWN0b3ItdGFibGUg
LmRlbHRhLm5lZ2F0aXZlIHsKKyAgICBjb2xvcjogIzkwMDsKK30KKworI2luc3BlY3Rvci1jb250
YWluZXIgLmJ1dHRvbnMgeworICAgIHBhZGRpbmc6IDFlbSAwOworICAgIHRleHQtYWxpZ246IGNl
bnRlcjsKK30KKworI2luc3BlY3Rvci1jb250YWluZXIgI2J1aWxkLWJ1dHRvbnMgeworICAgIGJv
cmRlci10b3A6IDFweCBkYXNoZWQ7Cit9CisKKyNpbmRpY2F0b3IgeworICAgIHRvcDogMDsKKyAg
ICB3aWR0aDogMXB4OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBiYWNrZ3JvdW5kOiBy
ZWQ7Cit9Cis8L3N0eWxlPgorPHNjcmlwdCBzcmM9ImR5Z3JhcGgtY29tYmluZWQuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9ImJ1aWxkZXJzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJk
YXNoYm9hcmRfYmFzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgordmFyIEZBSUxJTkdfVEVTVFNf
REFUQVNFVF9OQU1FID0gJ0ZhaWxpbmcgdGVzdHMnOworCit2YXIgZ19zaG91bGRTaG93V2ViS2l0
UmV2aXNpb25zT25seSA9IGlzVGlwT2ZUcmVlV2ViS2l0QnVpbGRlcigpOwordmFyIGdfZHlncmFw
aDsKK3ZhciBnX2J1aWxkSW5kaWNlc0J5VGltZXN0YW1wID0ge307Cit2YXIgZ19jdXJyZW50QnVp
bGRJbmRleCA9IC0xOwordmFyIGdfY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0czsKKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCisvLyBNZXRob2RzIGFuZCBvYmplY3RzIGZyb20gZGFzaGJvYXJkX2Jh
c2UuanMgdG8gb3ZlcnJpZGUuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2Z1bmN0aW9uIGdlbmVy
YXRlUGFnZSgpCit7CisgICAgZ19idWlsZEluZGljZXNCeVRpbWVzdGFtcCA9IHt9OworICAgIHZh
ciByZXN1bHRzID0gZ19yZXN1bHRzQnlCdWlsZGVyW2dfY3VycmVudFN0YXRlLmJ1aWxkZXJdOwor
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV0ubGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgdmFyIGJ1aWxkRGF0ZSA9IG5ldyBEYXRlKHJlc3VsdHNbVElN
RVNUQU1QU19LRVldW2ldICogMTAwMCk7CisgICAgICAgIGdfYnVpbGRJbmRpY2VzQnlUaW1lc3Rh
bXBbYnVpbGREYXRlLmdldFRpbWUoKV0gPSBpOworICAgIH0KKworICAgIGlmIChnX2N1cnJlbnRT
dGF0ZS5idWlsZFRpbWVzdGFtcCAhPSAtMSAmJiBnX2N1cnJlbnRTdGF0ZS5idWlsZFRpbWVzdGFt
cCBpbiBnX2J1aWxkSW5kaWNlc0J5VGltZXN0YW1wKSB7CisgICAgICAgIHZhciBuZXdCdWlsZElu
ZGV4ID0gZ19idWlsZEluZGljZXNCeVRpbWVzdGFtcFtnX2N1cnJlbnRTdGF0ZS5idWlsZFRpbWVz
dGFtcF07CisKKyAgICAgICAgaWYgKG5ld0J1aWxkSW5kZXggPT0gZ19jdXJyZW50QnVpbGRJbmRl
eCkgeworICAgICAgICAgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gc2VsZWN0QnVpbGQgaXMgY2Fs
bGVkLCB3aGljaCB1cGRhdGVzIHRoZSBVSQorICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHksIGlu
IGFkZGl0aW9uIHRvIHVwZGF0aW5nIHRoZSBsb2NhdGlvbiBoYXNoICh3ZSBkb24ndAorICAgICAg
ICAgICAgLy8ganVzdCByZWx5IG9uIHRoZSBoYXNoIGNoYW5nZSBzaW5jZSB3ZSBkb24ndCB3YW50
IHRvIHJlZ2VuZXJhdGUgdGhlCisgICAgICAgICAgICAvLyB3aG9sZSBwYWdlIGp1c3QgYmVjYXVz
ZSB0aGUgdXNlciBjbGlja2VkIG9uIHNvbWV0aGluZykKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfSBlbHNlIGlmIChuZXdCdWlsZEluZGV4KQorICAgICAgICAgICAgZ19jdXJyZW50QnVp
bGRJbmRleCA9IG5ld0J1aWxkSW5kZXg7CisgICAgfQorCisgICAgaW5pdEN1cnJlbnRCdWlsZGVy
VGVzdFJlc3VsdHMoKTsKKworICAgICQoJ3Rlc3QtdHlwZS1zd2l0Y2hlcicpLmlubmVySFRNTCA9
IGh0bWxGb3JUZXN0VHlwZVN3aXRjaGVyKCBmYWxzZSwKKyAgICAgICAgY2hlY2tib3hIVE1MKCdp
Z25vcmVGbGFreVRlc3RzJywgJ0lnbm9yZSBmbGFreSB0ZXN0cycsIGdfY3VycmVudFN0YXRlLmln
bm9yZUZsYWt5VGVzdHMsICdnX2N1cnJlbnRCdWlsZEluZGV4ID0gLTEnKQorICAgICk7CisKKyAg
ICB1cGRhdGVUaW1lbGluZUZvckJ1aWxkZXIoKTsKK30KKworZnVuY3Rpb24gaW5pdEN1cnJlbnRC
dWlsZGVyVGVzdFJlc3VsdHMoKQoreworICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpOwor
ICAgIGdfY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cyA9IGRlY29tcHJlc3NSZXN1bHRzKGdfcmVz
dWx0c0J5QnVpbGRlcltnX2N1cnJlbnRTdGF0ZS5idWlsZGVyXSk7CisgICAgY29uc29sZS5sb2co
ICdUaW1lIHRvIGdldCB0ZXN0IHJlc3VsdHMgYnkgYnVpbGQ6ICcgKyAoRGF0ZS5ub3coKSAtIHN0
YXJ0VGltZSkpOworfQorCitmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2
YWx1ZSkKK3sKKyAgICBzd2l0Y2goa2V5KSB7CisgICAgY2FzZSAnYnVpbGRUaW1lc3RhbXAnOgor
ICAgICAgICBnX2N1cnJlbnRTdGF0ZS5idWlsZFRpbWVzdGFtcCA9IHBhcnNlSW50KHZhbHVlLCAx
MCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgJ2lnbm9yZUZsYWt5VGVzdHMnOgor
ICAgICAgICBnX2N1cnJlbnRTdGF0ZS5pZ25vcmVGbGFreVRlc3RzID0gdmFsdWUgPT0gJ3RydWUn
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCitnX2RlZmF1bHRTdGF0ZVZhbHVlcyA9IHsKKyAgICBidWlsZFRpbWVz
dGFtcDogLTEsCisgICAgYnVpbGRlcjogZ19kZWZhdWx0QnVpbGRlck5hbWUsCisgICAgaWdub3Jl
Rmxha3lUZXN0czogdHJ1ZQorfTsKKworZnVuY3Rpb24gdXBkYXRlVGltZWxpbmVGb3JCdWlsZGVy
KCkKK3sKKyAgICB2YXIgYnVpbGRlciA9IGdfY3VycmVudFN0YXRlLmJ1aWxkZXI7CisgICAgdmFy
IHJlc3VsdHMgPSBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl07CisgICAgdmFyIGdyYXBoRGF0
YSA9IFtdOworCisgICAgdmFyIGFubm90YXRpb25zID0gW107CisKKyAgICAvLyBEeWdyYXBoIHBy
ZWZlcnMgdG8gYmUgaGFuZGVkIGRhdGEgaW4gY2hyb25vbG9naWNhbCBvcmRlci4KKyAgICBmb3Ig
KHZhciBpID0gcmVzdWx0c1tGSVhBQkxFX0NPVU5UU19LRVldLmxlbmd0aCAtIDE7IGkgPj0gMDsg
aS0tKSB7CisgICAgICAgIHZhciBidWlsZERhdGUgPSBuZXcgRGF0ZShyZXN1bHRzW1RJTUVTVEFN
UFNfS0VZXVtpXSAqIDEwMDApOworICAgICAgICAvLyBGSVhNRTogRmluZCBhIGJldHRlciB3YXkg
dG8gZXhjbHVkZSBvdXRsaWVycy4gVGhpcyBpcyBqdXN0IHNvIHdlCisgICAgICAgIC8vIGV4Y2x1
ZGUgcnVucyB3aGVyZSBldmVyeSB0ZXN0IGZhaWxlZC4KKyAgICAgICAgdmFyIGZhaWx1cmVDb3Vu
dCA9IE1hdGgubWluKHJlc3VsdHNbRklYQUJMRV9DT1VOVF9LRVldW2ldLCAxMDAwMCk7CisKKyAg
ICAgICAgaWYgKGdfY3VycmVudFN0YXRlLmlnbm9yZUZsYWt5VGVzdHMpCisgICAgICAgICAgICBm
YWlsdXJlQ291bnQgLT0gZ19jdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzLmZsYWt5RGVsdGFzQnlC
dWlsZFtpXS50b3RhbCB8fCAwOworCisgICAgICAgIGdyYXBoRGF0YS5wdXNoKFtidWlsZERhdGUs
IGZhaWx1cmVDb3VudF0pOworCisgICAgICAgIGlmICghZ19zaG91bGRTaG93V2ViS2l0UmV2aXNp
b25zT25seSAmJiAocmVzdWx0c1tXRUJLSVRfUkVWSVNJT05TX0tFWV1baV0gIT0gcmVzdWx0c1tX
RUJLSVRfUkVWSVNJT05TX0tFWV1baSArIDFdKSkgeworICAgICAgICAgICAgYW5ub3RhdGlvbnMu
cHVzaCh7CisgICAgICAgICAgICAgICAgc2VyaWVzOiBGQUlMSU5HX1RFU1RTX0RBVEFTRVRfTkFN
RSwKKyAgICAgICAgICAgICAgICB4OiBidWlsZERhdGUsCisgICAgICAgICAgICAgICAgc2hvcnRU
ZXh0OiAnUicsCisgICAgICAgICAgICAgICAgdGV4dDogJ1dlYktpdCByb2xsOiByJyArIHJlc3Vs
dHNbV0VCS0lUX1JFVklTSU9OU19LRVldW2kgKyAxXSArICcgdG8gJyArIHJlc3VsdHNbV0VCS0lU
X1JFVklTSU9OU19LRVldW2ldCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHZhciB3aW5kb3dXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0
aDsKKyAgICB2YXIgd2luZG93SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVu
dEhlaWdodDsKKyAgICB2YXIgc3dpdGNoZXJOb2RlID0gJCgndGVzdC10eXBlLXN3aXRjaGVyJyk7
CisgICAgdmFyIGluc3BlY3Rvck5vZGUgPSAkKCdpbnNwZWN0b3ItY29udGFpbmVyJyk7CisgICAg
dmFyIGdyYXBoV2lkdGggPSB3aW5kb3dXaWR0aCAtIDIwIC0gaW5zcGVjdG9yTm9kZS5vZmZzZXRX
aWR0aDsKKyAgICB2YXIgZ3JhcGhIZWlnaHQgPSB3aW5kb3dIZWlnaHQgLSBzd2l0Y2hlck5vZGUu
b2Zmc2V0VG9wIC0gc3dpdGNoZXJOb2RlLm9mZnNldEhlaWdodCAtIDIwOworCisgICAgdmFyIGNv
bnRhaW5lck5vZGUgPSAkKCd0aW1lbGluZS1jb250YWluZXInKTsKKyAgICBjb250YWluZXJOb2Rl
LnN0eWxlLmhlaWdodCA9IGdyYXBoSGVpZ2h0ICsgJ3B4JzsKKyAgICBjb250YWluZXJOb2RlLnN0
eWxlLndpZHRoID0gZ3JhcGhXaWR0aCArICdweCc7CisgICAgaW5zcGVjdG9yTm9kZS5zdHlsZS5o
ZWlnaHQgPSBncmFwaEhlaWdodCArICdweCc7CisKKyAgICBnX2R5Z3JhcGggPSBuZXcgRHlncmFw
aCgKKyAgICAgICAgY29udGFpbmVyTm9kZSwKKyAgICAgICAgZ3JhcGhEYXRhLCB7CisgICAgICAg
ICAgICBsYWJlbHM6IFsnRGF0ZScsIEZBSUxJTkdfVEVTVFNfREFUQVNFVF9OQU1FXSwKKyAgICAg
ICAgICAgIHdpZHRoOiBncmFwaFdpZHRoLAorICAgICAgICAgICAgaGVpZ2h0OiBncmFwaEhlaWdo
dCwKKyAgICAgICAgICAgIGNsaWNrQ2FsbGJhY2s6IGZ1bmN0aW9uKGV2ZW50LCBkYXRlKSB7Cisg
ICAgICAgICAgICAgICAgc2VsZWN0QnVpbGQocmVzdWx0cywgYnVpbGRlciwgZ19keWdyYXBoLCBn
X2J1aWxkSW5kaWNlc0J5VGltZXN0YW1wW2RhdGVdKTsKKyAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICBkcmF3Q2FsbGJhY2s6IGZ1bmN0aW9uKGR5Z3JhcGgsIGlzSW5pdGlhbCkgeworICAgICAg
ICAgICAgICAgIGlmIChpc0luaXRpYWwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB1cGRhdGVCdWlsZEluZGljYXRvcihyZXN1bHRzLCBkeWdyYXBoKTsKKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAvLyB4VmFsdWVQYXJzZXIgaXMgbmVjZXNzYXJ5IGZv
ciBhbm5vdGF0aW9ucyB0byB3b3JrLCBldmVuIHRob3VnaCB3ZQorICAgICAgICAgICAgLy8gYWxy
ZWFkeSBoYXZlIERhdGUgaW5zdGFuY2VzCisgICAgICAgICAgICB4VmFsdWVQYXJzZXI6IGZ1bmN0
aW9uKGlucHV0KSB7IHJldHVybiBpbnB1dC5nZXRUaW1lKCk7IH0KKyAgICAgICAgfSk7CisgICAg
aWYgKGFubm90YXRpb25zLmxlbmd0aCkKKyAgICAgICAgZ19keWdyYXBoLnNldEFubm90YXRpb25z
KGFubm90YXRpb25zKTsKKworICAgIGluc3BlY3Rvck5vZGUuc3R5bGUudmlzaWJpbGl0eSA9ICd2
aXNpYmxlJzsKKworICAgIGlmIChnX2N1cnJlbnRCdWlsZEluZGV4ICE9IC0xKQorICAgICAgICBz
ZWxlY3RCdWlsZChyZXN1bHRzLCBidWlsZGVyLCBnX2R5Z3JhcGgsIGdfY3VycmVudEJ1aWxkSW5k
ZXgpOworfQorCitmdW5jdGlvbiBzZWxlY3RCdWlsZChyZXN1bHRzLCBidWlsZGVyLCBkeWdyYXBo
LCBpbmRleCkKK3sKKyAgICBnX2N1cnJlbnRCdWlsZEluZGV4ID0gaW5kZXg7CisgICAgdXBkYXRl
QnVpbGRJbmRpY2F0b3IocmVzdWx0cywgZHlncmFwaCk7CisgICAgdXBkYXRlQnVpbGRJbnNwZWN0
b3IocmVzdWx0cywgYnVpbGRlciwgZHlncmFwaCwgaW5kZXgpOworICAgIHNldFF1ZXJ5UGFyYW1l
dGVyKCdidWlsZFRpbWVzdGFtcCcsIHJlc3VsdHNbVElNRVNUQU1QU19LRVldW2luZGV4XSAqIDEw
MDApOworfQorCitmdW5jdGlvbiB1cGRhdGVCdWlsZEluZGljYXRvcihyZXN1bHRzLCBkeWdyYXBo
KQoreworICAgIHZhciBpbmRpY2F0b3JOb2RlID0gJCgnaW5kaWNhdG9yJyk7CisKKyAgICBpZiAo
IWluZGljYXRvck5vZGUpIHsKKyAgICAgICAgdmFyIGNvbnRhaW5lck5vZGUgPSAkKCd0aW1lbGlu
ZS1jb250YWluZXInKTsKKyAgICAgICAgaW5kaWNhdG9yTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpOworICAgICAgICBpbmRpY2F0b3JOb2RlLmlkID0gJ2luZGljYXRvcic7Cisg
ICAgICAgIGluZGljYXRvck5vZGUuc3R5bGUuaGVpZ2h0ID0gY29udGFpbmVyTm9kZS5vZmZzZXRI
ZWlnaHQgKyAncHgnOworICAgICAgICBjb250YWluZXJOb2RlLmFwcGVuZENoaWxkKGluZGljYXRv
ck5vZGUpOworICAgIH0KKworICAgIGlmIChnX2N1cnJlbnRCdWlsZEluZGV4ID09IC0xKQorICAg
ICAgICBpbmRpY2F0b3JOb2RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgZWxzZSB7Cisg
ICAgICAgIGluZGljYXRvck5vZGUuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CisgICAgICAgIHZh
ciBidWlsZERhdGUgPSBuZXcgRGF0ZShyZXN1bHRzW1RJTUVTVEFNUFNfS0VZXVtnX2N1cnJlbnRC
dWlsZEluZGV4XSAqIDEwMDApOworICAgICAgICB2YXIgZG9tQ29vcmRzID0gZHlncmFwaC50b0Rv
bUNvb3JkcyhidWlsZERhdGUsIDApOworICAgICAgICBpbmRpY2F0b3JOb2RlLnN0eWxlLmxlZnQg
PSBkb21Db29yZHNbMF0gKyAncHgnOworICAgIH0KK30KKworZnVuY3Rpb24gdXBkYXRlQnVpbGRJ
bnNwZWN0b3IocmVzdWx0cywgYnVpbGRlciwgZHlncmFwaCwgaW5kZXgpCit7CisgICAgdmFyIGh0
bWwgPSAnPHRhYmxlIGlkPSJpbnNwZWN0b3ItdGFibGUiPjxjYXB0aW9uPkRldGFpbHM8L2NhcHRp
b24+JzsKKworICAgIGZ1bmN0aW9uIGFkZFJvdyhsYWJlbCwgdmFsdWUpCisgICAgeworICAgICAg
ICBodG1sICs9ICc8dHI+PHRkIGNsYXNzPSJsYWJlbCI+JyArIGxhYmVsICsgJzwvdGQ+PHRkPicg
KyB2YWx1ZSArICc8L3RkPjwvdHI+JzsKKyAgICB9CisKKyAgICAvLyBCdWlsZGVyIGFuZCByZXN1
bHRzIGxpbmtzCisgICAgdmFyIGJ1aWxkTnVtYmVyID0gcmVzdWx0c1tCVUlMRF9OVU1CRVJTX0tF
WV1baW5kZXhdOworICAgIGFkZFJvdygnJywgJycpOworICAgIHZhciBtYXN0ZXIgPSBidWlsZGVy
TWFzdGVyKGJ1aWxkZXIpOworICAgIHZhciBidWlsZFVybCA9IG1hc3Rlci5nZXRMb2dQYXRoKGJ1
aWxkZXIsIHJlc3VsdHNbQlVJTERfTlVNQkVSU19LRVldW2luZGV4XSk7CisgICAgaWYgKG1hc3Rl
ciA9PSBXRUJLSVRfQlVJTERFUl9NQVNURVIpIHsKKyAgICAgICAgdmFyIHJlc3VsdHNVcmwgPSAn
aHR0cDovL2J1aWxkLndlYmtpdC5vcmcvcmVzdWx0cy8nICsgYnVpbGRlciArICcvcicgKyByZXN1
bHRzW1dFQktJVF9SRVZJU0lPTlNfS0VZXVtpbmRleF0gKworICAgICAgICAgICAgJyAoJyArIHJl
c3VsdHNbQlVJTERfTlVNQkVSU19LRVldW2luZGV4XSArICcpJzsKKyAgICB9IGVsc2UgeworICAg
ICAgICB2YXIgcmVzdWx0c1VybCA9ICdodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21p
dW0vbGF5b3V0X3Rlc3RfcmVzdWx0cy8nICsKKyAgICAgICAgICAgIGdfYnVpbGRlcnNbYnVpbGRl
cl0gKyAnLycgKyByZXN1bHRzW0NIUk9NRV9SRVZJU0lPTlNfS0VZXVtpbmRleF07CisgICAgfQor
CisgICAgYWRkUm93KCdCdWlsZDonLCAnPGEgaHJlZj0iJyArIGJ1aWxkVXJsICsgJyIgdGFyZ2V0
PSJfYmxhbmsiPicgKyBidWlsZE51bWJlciArICc8L2E+ICg8YSBocmVmPSInICsgcmVzdWx0c1Vy
bCArICciIHRhcmdldD0iX2JsYW5rIj5yZXN1bHRzPC9hPiknKTsKKworICAgIC8vIFJldmlzaW9u
IGxpbmsocykKKyAgICBpZiAoIWdfc2hvdWxkU2hvd1dlYktpdFJldmlzaW9uc09ubHkpCisgICAg
ICAgIGFkZFJvdygnQ2hyb21pdW0gY2hhbmdlOicsIGNocm9taXVtUmV2aXNpb25MaW5rKHJlc3Vs
dHMsIGluZGV4KSk7CisgICAgYWRkUm93KCdXZWJLaXQgY2hhbmdlOicsIHdlYktpdFJldmlzaW9u
TGluayhyZXN1bHRzLCBpbmRleCkpOworCisgICAgLy8gVGVzdCBzdGF0dXMvY291bnRzCisgICAg
YWRkUm93KCcnLCAnJyk7CisKKyAgICBmdW5jdGlvbiBhZGROdW1iZXJSb3cobGFiZWwsIGN1cnJl
bnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSkKKyAgICB7CisgICAgICAgIHZhciBkZWx0YSA9IGN1cnJl
bnRWYWx1ZSAtIHByZXZpb3VzVmFsdWU7CisgICAgICAgIHZhciBkZWx0YVRleHQgPSAnJworICAg
ICAgICBpZiAoZGVsdGEgPCAwKQorICAgICAgICAgICAgZGVsdGFUZXh0ID0gJyA8c3BhbiBjbGFz
cz0iZGVsdGEgbmVnYXRpdmUiPicgKyBkZWx0YSArICc8L3NwYW4+JzsKKyAgICAgICAgZWxzZSBp
ZiAoZGVsdGEgPiAwKQorICAgICAgICAgICAgZGVsdGFUZXh0ID0gJyA8c3BhbiBjbGFzcz0iZGVs
dGEgcG9zaXRpdmUiPisnICsgZGVsdGEgKyAnPC9zcGFuPic7CisKKyAgICAgICAgYWRkUm93KGxh
YmVsLCBjdXJyZW50VmFsdWUgKyBkZWx0YVRleHQpOworICAgIH0KKworICAgIHZhciBleHBlY3Rh
dGlvbnMgPSBleHBlY3RhdGlvbnNNYXAoKTsKKyAgICB2YXIgZmxha3lEZWx0YXNCeUJ1aWxkID0g
Z19jdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzLmZsYWt5RGVsdGFzQnlCdWlsZDsKKyAgICBmb3Ig
KHZhciBleHBlY3RhdGlvbktleSBpbiBleHBlY3RhdGlvbnMpIHsKKyAgICAgICAgaWYgKGV4cGVj
dGF0aW9uS2V5IGluIHJlc3VsdHNbRklYQUJMRV9DT1VOVFNfS0VZXVtpbmRleF0pIHsKKyAgICAg
ICAgICAgIHZhciBjdXJyZW50Q291bnQgPSByZXN1bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV1baW5k
ZXhdW2V4cGVjdGF0aW9uS2V5XTsKKyAgICAgICAgICAgIHZhciBwcmV2aW91c0NvdW50ID0gcmVz
dWx0c1tGSVhBQkxFX0NPVU5UU19LRVldW2luZGV4ICsgMV1bZXhwZWN0YXRpb25LZXldOworICAg
ICAgICAgICAgaWYgKGdfY3VycmVudFN0YXRlLmlnbm9yZUZsYWt5VGVzdHMpIHsKKyAgICAgICAg
ICAgICAgICBjdXJyZW50Q291bnQgLT0gZmxha3lEZWx0YXNCeUJ1aWxkW2luZGV4XVtleHBlY3Rh
dGlvbktleV0gfHwgMDsKKyAgICAgICAgICAgICAgICBwcmV2aW91c0NvdW50IC09IGZsYWt5RGVs
dGFzQnlCdWlsZFtpbmRleCArIDFdW2V4cGVjdGF0aW9uS2V5XSB8fCAwOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYWRkTnVtYmVyUm93KGV4cGVjdGF0aW9uc1tleHBlY3RhdGlvbktleV0s
IGN1cnJlbnRDb3VudCwgcHJldmlvdXNDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
YXIgY3VycmVudFRvdGFsID0gcmVzdWx0c1tGSVhBQkxFX0NPVU5UX0tFWV1baW5kZXhdOworICAg
IHZhciBwcmV2aW91c1RvdGFsID0gcmVzdWx0c1tGSVhBQkxFX0NPVU5UX0tFWV1baW5kZXggKyAx
XTsKKyAgICBpZiAoZ19jdXJyZW50U3RhdGUuaWdub3JlRmxha3lUZXN0cykgeworICAgICAgICBj
dXJyZW50VG90YWwgLT0gZmxha3lEZWx0YXNCeUJ1aWxkW2luZGV4XS50b3RhbCB8fCAwOworICAg
ICAgICBwcmV2aW91c1RvdGFsIC09IGZsYWt5RGVsdGFzQnlCdWlsZFtpbmRleCArIDFdLnRvdGFs
IHx8IDA7CisgICAgfQorICAgIGFkZE51bWJlclJvdygnVG90YWwgZmFpbGluZyB0ZXN0czonLCBj
dXJyZW50VG90YWwsIHByZXZpb3VzVG90YWwpOworCisgICAgaHRtbCArPSAnPC90YWJsZT4nOwor
CisgICAgaHRtbCArPSAnPGRpdiBpZD0iY2hhbmdlcy1idXR0b24iIGNsYXNzPSJidXR0b25zIj4n
OworICAgIGh0bWwgKz0gJzxidXR0b24+U2hvdyBjaGFuZ2VkIHRlc3QgcmVzdWx0czwvYnV0dG9u
Pic7CisgICAgaHRtbCArPSAnPC9kaXY+JzsKKworICAgIGh0bWwgKz0gJzxkaXYgaWQ9ImJ1aWxk
LWJ1dHRvbnMiIGNsYXNzPSJidXR0b25zIj4nOworICAgIGh0bWwgKz0gJzxidXR0b24+UHJldmlv
dXMgYnVpbGQ8L2J1dHRvbj4gPGJ1dHRvbj5OZXh0IGJ1aWxkPC9idXR0b24+JzsKKyAgICBodG1s
ICs9ICc8L2Rpdj4nOworCisgICAgdmFyIGluc3BlY3Rvck5vZGUgPSAkKCdpbnNwZWN0b3ItY29u
dGFpbmVyJyk7CisgICAgaW5zcGVjdG9yTm9kZS5pbm5lckhUTUwgPSBodG1sOworCisgICAgaW5z
cGVjdG9yTm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylbMF0ub25jbGljayA9IGZ1
bmN0aW9uKCkgeworICAgICAgICBzaG93UmVzdWx0c0RlbHRhKGluZGV4LCBidWlsZE51bWJlciwg
YnVpbGRVcmwsIHJlc3VsdHNVcmwpOworICAgIH07CisgICAgaW5zcGVjdG9yTm9kZS5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgnYnV0dG9uJylbMV0ub25jbGljayA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICBzZWxlY3RCdWlsZChyZXN1bHRzLCBidWlsZGVyLCBkeWdyYXBoLCBpbmRleCArIDEpOworICAg
IH07CisgICAgaW5zcGVjdG9yTm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylbMl0u
b25jbGljayA9IGZ1bmN0aW9uKCkgeworICAgICAgICBzZWxlY3RCdWlsZChyZXN1bHRzLCBidWls
ZGVyLCBkeWdyYXBoLCBpbmRleCAtIDEpOworICAgIH07Cit9CisKK2Z1bmN0aW9uIHNob3dSZXN1
bHRzRGVsdGEoaW5kZXgsIGJ1aWxkTnVtYmVyLCBidWlsZFVybCwgcmVzdWx0c1VybCkKK3sKKyAg
ICB2YXIgZmxha3lUZXN0cyA9IGdfY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cy5mbGFreVRlc3Rz
OworICAgIHZhciBjdXJyZW50UmVzdWx0cyA9IGdfY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cy5y
ZXN1bHRzQnlCdWlsZFtpbmRleF07CisgICAgdmFyIHRlc3ROYW1lcyA9IGdfY3VycmVudEJ1aWxk
ZXJUZXN0UmVzdWx0cy50ZXN0TmFtZXM7CisgICAgdmFyIHByZXZpb3VzUmVzdWx0cyA9IGdfY3Vy
cmVudEJ1aWxkZXJUZXN0UmVzdWx0cy5yZXN1bHRzQnlCdWlsZFtpbmRleCArIDFdOworICAgIHZh
ciBleHBlY3RhdGlvbnMgPSBleHBlY3RhdGlvbnNNYXAoKTsKKworICAgIHZhciBkZWx0YXMgPSB7
fTsKKyAgICBmdW5jdGlvbiBhZGREZWx0YShjYXRlZ29yeSwgdGVzdEluZGV4KQorICAgIHsKKyAg
ICAgICAgaWYgKGdfY3VycmVudFN0YXRlLmlnbm9yZUZsYWt5VGVzdHMgJiYgZmxha3lUZXN0c1t0
ZXN0SW5kZXhdKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIShjYXRlZ29yeSBp
biBkZWx0YXMpKQorICAgICAgICAgICAgZGVsdGFzW2NhdGVnb3J5XSA9IFtdOworICAgICAgICB2
YXIgdGVzdE5hbWUgPSB0ZXN0TmFtZXNbdGVzdEluZGV4XTsKKyAgICAgICAgdmFyIGZsYWtpbmVz
c0Rhc2hib2FyZFVybCA9ICdmbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwnICsgKGxvY2F0aW9uLmhh
c2ggPyBsb2NhdGlvbi5oYXNoICsgJyYnIDogJyMnKSArICd0ZXN0cz0nICsgdGVzdE5hbWU7Cisg
ICAgICAgIHZhciBodG1sID0gJzxhIGhyZWY9IicgKyBmbGFraW5lc3NEYXNoYm9hcmRVcmwgKyAn
Ij4nICsgdGVzdE5hbWUgKyAnPC9hPic7CisgICAgICAgIGlmIChmbGFreVRlc3RzW3Rlc3RJbmRl
eF0pCisgICAgICAgICAgICBodG1sICs9ICcgPHNwYW4gc3R5bGU9ImNvbG9yOiAjZjY2Ij5wb3Nz
aWJseSBmbGFreTwvc3Bhbj4nOworICAgICAgICBkZWx0YXNbY2F0ZWdvcnldLnB1c2goaHRtbCk7
CisgICAgfQorCisgICAgZm9yICh2YXIgdGVzdEluZGV4ID0gMDsgdGVzdEluZGV4IDwgY3VycmVu
dFJlc3VsdHMubGVuZ3RoOyB0ZXN0SW5kZXgrKykgeworICAgICAgICBpZiAoY3VycmVudFJlc3Vs
dHNbdGVzdEluZGV4XSA9PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgaWYgKHByZXZpb3VzUmVzdWx0c1t0ZXN0SW5kZXhdICE9PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICAgIGlmIChjdXJyZW50UmVzdWx0c1t0ZXN0SW5kZXhdID09IHByZXZpb3VzUmVzdWx0
c1t0ZXN0SW5kZXhdKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYWRk
RGVsdGEoJ1dhcyA8Yj4nICsgZXhwZWN0YXRpb25zW3ByZXZpb3VzUmVzdWx0c1t0ZXN0SW5kZXhd
XSArICc8L2I+IG5vdyA8Yj4nICsgZXhwZWN0YXRpb25zW2N1cnJlbnRSZXN1bHRzW3Rlc3RJbmRl
eF1dICsgJzwvYj4nLCB0ZXN0SW5kZXgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGFk
ZERlbHRhKCdOZXdseSA8Yj4nICsgZXhwZWN0YXRpb25zW2N1cnJlbnRSZXN1bHRzW3Rlc3RJbmRl
eF1dICsgJzwvYj4nLCB0ZXN0SW5kZXgpOworICAgIH0KKworICAgIGZvciAodmFyIHRlc3RJbmRl
eCA9IDA7IHRlc3RJbmRleCA8IHByZXZpb3VzUmVzdWx0cy5sZW5ndGg7IHRlc3RJbmRleCsrKSB7
CisgICAgICAgIGlmIChwcmV2aW91c1Jlc3VsdHNbdGVzdEluZGV4XSA9PT0gdW5kZWZpbmVkKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjdXJyZW50UmVzdWx0c1t0ZXN0SW5k
ZXhdID09PSB1bmRlZmluZWQpCisgICAgICAgICAgICBhZGREZWx0YSgnV2FzIDxiPicgKyBleHBl
Y3RhdGlvbnNbcHJldmlvdXNSZXN1bHRzW3Rlc3RJbmRleF1dICsgJzwvYj4nLCB0ZXN0SW5kZXgp
OworICAgIH0KKworICAgIHZhciBodG1sID0gJyc7CisKKyAgICBodG1sICs9ICc8aGVhZD48YmFz
ZSB0YXJnZXQ9Il9ibGFuayI+PC9oZWFkPic7CisgICAgaHRtbCArPSAnPGgxPkNoYW5nZXMgaW4g
dGVzdCByZXN1bHRzPC9oMT4nOworCisgICAgaHRtbCArPSAnPHA+Rm9yIGJ1aWxkIDxhIGhyZWY9
IicgKyBidWlsZFVybCArICciIHRhcmdldD0iX2JsYW5rIj4nICsKKyAgICAgICAgYnVpbGROdW1i
ZXIgKyAnPC9hPiAnICsgJyg8YSBocmVmPSInICsgcmVzdWx0c1VybCArCisgICAgICAgICciIHRh
cmdldD0iX2JsYW5rIj5yZXN1bHRzPC9hPik8L3A+JzsKKworICAgIGZvciAodmFyIGRlbHRhQ2F0
ZWdvcnkgaW4gZGVsdGFzKSB7CisgICAgICAgIGh0bWwgKz0gJzxwPjxkaXY+JyArIGRlbHRhQ2F0
ZWdvcnkgKyAnICgnICsgZGVsdGFzW2RlbHRhQ2F0ZWdvcnldLmxlbmd0aCArICcpPC9kaXY+PHVs
Pic7CisgICAgICAgIGRlbHRhc1tkZWx0YUNhdGVnb3J5XS5mb3JFYWNoKGZ1bmN0aW9uKGRlbHRh
SHRtbCkgeworICAgICAgICAgICAgaHRtbCArPSAnPGxpPicgKyBkZWx0YUh0bWwgKyAnPC9saT4n
OworICAgICAgICB9KTsKKyAgICAgICAgaHRtbCArPSAnPC91bD48L3A+JzsKKyAgICB9CisKKyAg
ICB2YXIgZGVsdGFXaW5kb3cgPSB3aW5kb3cub3BlbigpOworICAgIGRlbHRhV2luZG93LmRvY3Vt
ZW50LndyaXRlKGh0bWwpOworfQorCitkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3du
JywgZnVuY3Rpb24oZSkgeworICAgIGlmIChnX2N1cnJlbnRCdWlsZEluZGV4ID09IC0xKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKGUua2V5SWRlbnRpZmllcikgeworICAgIGNhc2Ug
J0xlZnQnOgorICAgICAgICBzZWxlY3RCdWlsZCgKKyAgICAgICAgICAgIGdfcmVzdWx0c0J5QnVp
bGRlcltnX2N1cnJlbnRTdGF0ZS5idWlsZGVyXSwKKyAgICAgICAgICAgIGdfY3VycmVudFN0YXRl
LmJ1aWxkZXIsCisgICAgICAgICAgICBnX2R5Z3JhcGgsCisgICAgICAgICAgICBnX2N1cnJlbnRC
dWlsZEluZGV4ICsgMSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ1JpZ2h0JzoKKyAgICAg
ICAgc2VsZWN0QnVpbGQoCisgICAgICAgICAgICBnX3Jlc3VsdHNCeUJ1aWxkZXJbZ19jdXJyZW50
U3RhdGUuYnVpbGRlcl0sCisgICAgICAgICAgICBnX2N1cnJlbnRTdGF0ZS5idWlsZGVyLAorICAg
ICAgICAgICAgZ19keWdyYXBoLAorICAgICAgICAgICAgZ19jdXJyZW50QnVpbGRJbmRleCAtIDEp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9KTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
CisgICAgPGRpdiBpZD0idGVzdC10eXBlLXN3aXRjaGVyIj48L2Rpdj4KKworICAgIDxkaXYgaWQ9
Imluc3BlY3Rvci1jb250YWluZXIiIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW4iPgorICAgICAg
ICA8cD5DbGljayBvbiBhIHBvaW50IG9uIHRoZSBncmFwaCB0byBzZWUgZGV0YWlscyBhYm91dCB0
aGF0IGJ1aWxkLjwvcD4KKyAgICAgICAgPHA+Q2xpY2sgYW5kIGRyYWcgb24gdGhlIGdyYXBoIHRv
IHpvb20gaW4gdG8gdGhhdCBwZXJpb2QuPC9wPgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9InRp
bWVsaW5lLWNvbnRhaW5lciI+TG9hZGluZy4uLjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdHJl
ZW1hcC5odG1sIGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMv
dHJlZW1hcC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1ZDhmYzI0MmUwMTk5YThjMTRlMTA0ZmVmYWYwMTlh
OTM5ZDVmMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9z
dGF0aWMtZGFzaGJvYXJkcy90cmVlbWFwLmh0bWwKQEAgLTAsMCArMSwzODYgQEAKKzwhLS0gQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgoraW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KK3RoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
K1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCistLT4KKzwhRE9DVFlQRSBodG1sPgorPHRpdGxlPlRlc3QgUnVu
dGltZXM8L3RpdGxlPgorPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPSd3ZWJ0cmVlbWFwLmNz
cyc+PC9saW5rPgorPHN0eWxlPgorYm9keSB7CisgICAgZGlzcGxheTogLW1vei1ib3g7CisgICAg
ZGlzcGxheTogLXdlYmtpdC1ib3g7CisgICAgZGlzcGxheTogYm94OworICAgIC1tb3otYm94LW9y
aWVudDogdmVydGljYWw7CisgICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKKyAgICBi
b3gtb3JpZW50OiB2ZXJ0aWNhbDsKKworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6
IDA7CisgICAgcmlnaHQ6IDA7CisgICAgYm90dG9tOiAwOworICAgIGxlZnQ6IDA7Cit9CisKK3Rk
OmZpcnN0LWNoaWxkIHsKKyAgICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCit0ZCB7CisgICAgdGV4
dC1hbGlnbjogcmlnaHQ7Cit9CisKKyNtYXAgeworICAgIGRpc3BsYXk6IC1tb3otYm94OworICAg
IGRpc3BsYXk6IC13ZWJraXQtYm94OworICAgIGRpc3BsYXk6IGJveDsKKworICAgIC1tb3otYm94
LWZsZXg6IDE7CisgICAgLXdlYmtpdC1ib3gtZmxleDogMTsKKyAgICBib3gtZmxleDogMTsKKwor
ICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBjdXJzb3I6IHBvaW50ZXI7CisgICAgLXdlYmtp
dC11c2VyLXNlbGVjdDogbm9uZTsKKyAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOworfQorCisu
ZXh0cmEtZG9tIHsKKyAgICBkaXNwbGF5OiBub25lOworICAgIGJvcmRlcjogbm9uZTsKKyAgICBi
b3JkZXItdG9wOiAxcHggZGFzaGVkOworICAgIHBhZGRpbmc6IDRweDsKKyAgICBtYXJnaW46IDA7
CisgICAgb3ZlcmZsb3c6IGF1dG87CisgICAgY3Vyc29yOiBhdXRvOworICAgIC13ZWJraXQtdXNl
ci1zZWxlY3Q6IHRleHQ7CisgICAgLW1vei11c2VyLXNlbGVjdDogdGV4dDsKK30KKworI2ZvY3Vz
ZWQtbGVhZiB7CisgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CisgICAgZGlzcGxheTogLW1vei1i
b3g7CisgICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKKyAgICAtbW96LWJveC1vcmll
bnQ6IHZlcnRpY2FsOworfQorCisjZm9jdXNlZC1sZWFmID4gLmV4dHJhLWRvbSB7CisgICAgZGlz
cGxheTogLXdlYmtpdC1ib3g7CisgICAgZGlzcGxheTogLW1vei1ib3g7CisgICAgLXdlYmtpdC1i
b3gtZmxleDogMTsKKyAgICAtbW96LWJveC1mbGV4OiAxOworfQorCisjZm9jdXNlZC1sZWFmLndl
YnRyZWVtYXAtbm9kZTpob3ZlciB7CisgICAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisKKyNmb2N1
c2VkLWxlYWYgLndlYnRyZWVtYXAtY2FwdGlvbjpob3ZlciB7CisgICAgYmFja2dyb3VuZDogI2Vl
ZTsKK30KKworLmVycm9yIHsKKyAgICBjb2xvcjogcmVkOworICAgIGZvbnQtc3R5bGU6IGl0YWxp
YzsKK30KKzwvc3R5bGU+Cis8c2NyaXB0IHNyYz0iYnVpbGRlcnMuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9ImRhc2hib2FyZF9iYXNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSd3ZWJ0
cmVlbWFwLmpzJz48L3NjcmlwdD4KKworPGRpdiBpZD0naGVhZGVyLWNvbnRhaW5lcic+PC9kaXY+
Cis8cD5DbGljayBvbiBhIGJveCB0byB6b29tIGluLiBDbGljayBvbiB0aGUgb3V0ZXJtb3N0IGJv
eCB0byB6b29tIG91dC4gPGEgaHJlZj0iIiBvbmNsaWNrPSJzaG93QXZlcmFnZXMoKTtyZXR1cm4g
ZmFsc2U7Ij5TaG93IGF2ZXJhZ2VzPC9hPjwvcD4KKzxkaXYgaWQ9J21hcCc+PC9kaXY+CisKKzxz
Y3JpcHQ+CiskKCdoZWFkZXItY29udGFpbmVyJykuaW5uZXJIVE1MID0gaHRtbEZvclRlc3RUeXBl
U3dpdGNoZXIoKTsKKwordmFyIFRFU1RfVVJMX0JBU0VfUEFUSCA9ICJodHRwOi8vc3ZuLndlYmtp
dC5vcmcvcmVwb3NpdG9yeS93ZWJraXQvdHJ1bmsvIjsKKworZnVuY3Rpb24gaHVtYW5SZWFkYWJs
ZVRpbWUobWlsbGlzZWNvbmRzKQoreworICAgIGlmIChtaWxsaXNlY29uZHMgPCAxMDAwKQorICAg
ICAgICByZXR1cm4gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMpICsgJ21zJzsKKyAgICBlbHNlIGlm
IChtaWxsaXNlY29uZHMgPCA2MDAwMCkKKyAgICAgICAgcmV0dXJuIChtaWxsaXNlY29uZHMgLyAx
MDAwKS50b1ByZWNpc2lvbigyKSArICdzJzsKKworICAgIHZhciBtaW51dGVzID0gTWF0aC5mbG9v
cihtaWxsaXNlY29uZHMgLyA2MDAwMCk7CisgICAgdmFyIHNlY29uZHMgPSBNYXRoLmZsb29yKCht
aWxsaXNlY29uZHMgLSBtaW51dGVzICogNjAwMDApIC8gMTAwMCk7CisgICAgcmV0dXJuIG1pbnV0
ZXMgKyAnbScgKyBzZWNvbmRzICsgJ3MnOworfQorCisvLyBUaGlzIGxvb2tzIGxpa2U6CisvLyB7
ICJkYXRhIjogeyIkYXJlYSI6IChzdW0gb2YgYWxsIHRpbWluZ3MpfSwKKy8vICAgIm5hbWUiOiAo
bmFtZSBvZiB0aGlzIG5vZGUpLAorLy8gICAiY2hpbGRyZW4iOiBbIChjaGlsZCBub2RlcywgaW4g
dGhlIHNhbWUgZm9ybWF0IGFzIHRoaXMpIF0gfQorLy8gY2hpbGRDb3VudCBpcyBhZGRlZCBqdXN0
IHRvIGJlIGluY2x1ZGVzIGluIHRoZSBub2RlJ3MgbmFtZQorZnVuY3Rpb24gY29udmVydFRvV2Vi
VHJlZW1hcEZvcm1hdCh0cmVlbmFtZSwgdHJlZSwgcGF0aCkKK3sKKyAgICB2YXIgdG90YWwgPSAw
OworICAgIHZhciBjaGlsZENvdW50ID0gMDsKKyAgICB2YXIgY2hpbGRyZW4gPSBbXTsKKyAgICBm
b3IgKHZhciBuYW1lIGluIHRyZWUpIHsKKyAgICAgICAgdmFyIHRyZWVOb2RlID0gdHJlZVtuYW1l
XTsKKyAgICAgICAgaWYgKHR5cGVvZiB0cmVlTm9kZSA9PSAibnVtYmVyIikgeworICAgICAgICAg
ICAgdmFyIHRpbWUgPSB0cmVlTm9kZTsKKyAgICAgICAgICAgIHZhciBub2RlID0geworICAgICAg
ICAgICAgICAgICJkYXRhIjogeyIkYXJlYSI6IHRpbWV9LAorICAgICAgICAgICAgICAgICJuYW1l
IjogbmFtZSArICIgKCIgKyBodW1hblJlYWRhYmxlVGltZSh0aW1lKSArICIpIgorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gobm9kZSk7CisgICAgICAgICAgICB0b3Rh
bCArPSB0aW1lOworICAgICAgICAgICAgY2hpbGRDb3VudCsrOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgdmFyIG5ld1BhdGggPSBwYXRoID8gcGF0aCArICcvJyArIG5hbWUgOiBuYW1l
OworICAgICAgICAgICAgdmFyIHN1YnRyZWUgPSBjb252ZXJ0VG9XZWJUcmVlbWFwRm9ybWF0KG5h
bWUsIHRyZWVOb2RlLCBuZXdQYXRoKTsKKyAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goc3VidHJl
ZSk7CisgICAgICAgICAgICB0b3RhbCArPSBzdWJ0cmVlWyJkYXRhIl1bIiRhcmVhIl07CisgICAg
ICAgICAgICBjaGlsZENvdW50ICs9IHN1YnRyZWVbImNoaWxkQ291bnQiXTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGNoaWxkcmVuLnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICBhVGlt
ZSA9IGEuZGF0YVsiJGFyZWEiXQorICAgICAgICBiVGltZSA9IGIuZGF0YVsiJGFyZWEiXQorICAg
ICAgICByZXR1cm4gYlRpbWUgLSBhVGltZTsKKyAgICB9KTsKKworICAgIHJldHVybiB7CisgICAg
ICAgICJkYXRhIjogeyIkYXJlYSI6IHRvdGFsfSwKKyAgICAgICAgIm5hbWUiOiB0cmVlbmFtZSAr
ICIgKCIgKyBodW1hblJlYWRhYmxlVGltZSh0b3RhbCkgKyAiIC0gIiArIGNoaWxkQ291bnQgKyAi
IHRlc3RzKSIsCisgICAgICAgICJjaGlsZHJlbiI6IGNoaWxkcmVuLAorICAgICAgICAiY2hpbGRD
b3VudCI6IGNoaWxkQ291bnQsCisgICAgICAgICJwYXRoIjogcGF0aAorICAgIH07Cit9CisKK2Z1
bmN0aW9uIGxpc3RPZkFsbE5vbkxlYWZOb2Rlcyh0cmVlLCBsaXN0KQoreworICAgIGlmICghdHJl
ZS5jaGlsZHJlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFsaXN0KQorICAgICAgICBs
aXN0ID0gW107CisgICAgbGlzdC5wdXNoKHRyZWUpOworCisgICAgdHJlZS5jaGlsZHJlbi5mb3JF
YWNoKGZ1bmN0aW9uKGNoaWxkKSB7CisgICAgICAgIGxpc3RPZkFsbE5vbkxlYWZOb2RlcyhjaGls
ZCwgbGlzdCk7CisgICAgfSk7CisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK2Z1bmN0aW9uIHJldmVy
c2VTb3J0QnlBdmVyYWdlKGxpc3QpCit7CisgICAgbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsK
KyAgICAgICAgdmFyIGF2Z0EgPSBhLmRhdGFbJyRhcmVhJ10gLyBhLmNoaWxkQ291bnQ7CisgICAg
ICAgIHZhciBhdmdCID0gYi5kYXRhWyckYXJlYSddIC8gYi5jaGlsZENvdW50OworICAgICAgICBy
ZXR1cm4gYXZnQiAtIGF2Z0E7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHNob3dBdmVyYWdlcygp
Cit7CisgICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFwJykpCisgICAgICAgIHJl
dHVybjsKKworICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7
CisgICAgdGFibGUuaW5uZXJIVE1MID0gJzx0aD5kaXJlY3Rvcnk8L3RoPjx0aD4jIHRlc3RzPC90
aD48dGg+YXZnIHRpbWUgLyB0ZXN0PC90aD4nOworCisgICAgdmFyIGFsbE5vZGVzID0gbGlzdE9m
QWxsTm9uTGVhZk5vZGVzKGdfd2ViVHJlZSk7CisgICAgcmV2ZXJzZVNvcnRCeUF2ZXJhZ2UoYWxs
Tm9kZXMpOworICAgIGFsbE5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSkgeworICAgICAgICB2
YXIgYXZlcmFnZSA9IG5vZGUuZGF0YVsnJGFyZWEnXSAvIG5vZGUuY2hpbGRDb3VudDsKKyAgICAg
ICAgaWYgKGF2ZXJhZ2UgPiAxMDAgJiYgbm9kZS5jaGlsZENvdW50ICE9IDEpIHsKKyAgICAgICAg
ICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CisgICAgICAgICAgICB0
ci5pbm5lckhUTUwgPSAnPHRkPjwvdGQ+PHRkPicgKyBub2RlLmNoaWxkQ291bnQgKyAnPC90ZD48
dGQ+JyArIGh1bWFuUmVhZGFibGVUaW1lKGF2ZXJhZ2UpICsgJzwvdGQ+JzsKKyAgICAgICAgICAg
IHRyLnF1ZXJ5U2VsZWN0b3IoJ3RkJykuaW5uZXJUZXh0ID0gbm9kZS5wYXRoOworICAgICAgICAg
ICAgdGFibGUuYXBwZW5kQ2hpbGQodHIpOworICAgICAgICB9CisgICAgfSk7CisKKyAgICB2YXIg
bWFwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpOworICAgIG1hcC5wYXJlbnROb2Rl
LnJlcGxhY2VDaGlsZCh0YWJsZSwgbWFwKTsKK30KKwordmFyIGdfcmVzdWx0c0J5QnVpbGRlciA9
IHt9OworCitmdW5jdGlvbiBBRERfUkVTVUxUUyhkYXRhKQoreworICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgcHJvYmFibHkgaW5jbHVkZSB0aGUgYnVpbGRlck5hbWUgaW4gdGhlIEpTT04KKyAgICAv
LyByYXRoZXIgdGhhbiByZWx5aW5nIG9uIG9ubHkgbG9hZGluZyBvbmUgSlNPTiBmaWxlIHBlciBw
YWdlLgorICAgIGlmICghZ19yZXN1bHRzQnlCdWlsZGVyW2dfY3VycmVudFN0YXRlLmJ1aWxkZXJd
KQorICAgICAgICBnX3Jlc3VsdHNCeUJ1aWxkZXJbZ19jdXJyZW50U3RhdGUuYnVpbGRlcl0gPSBk
YXRhOworCisgICAgaGFuZGxlTG9jYXRpb25DaGFuZ2UoKTsKK30KKwordmFyIGdfaXNHZW5lcmF0
aW5nUGFnZSA9IGZhbHNlOwordmFyIGdfd2ViVHJlZTsKKworZnVuY3Rpb24gZ2VuZXJhdGVQYWdl
KCkKK3sKKyAgICBpZiAoIWdfcmVzdWx0c0J5QnVpbGRlcltnX2N1cnJlbnRTdGF0ZS5idWlsZGVy
XSkgeworICAgICAgICBoYW5kbGVSZXNvdXJjZUxvYWRFcnJvcihnX2N1cnJlbnRTdGF0ZS5idWls
ZGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGdfaXNHZW5lcmF0aW5nUGFnZSA9
IHRydWU7CisKKyAgICB2YXIgcmF3VHJlZSA9IGdfcmVzdWx0c0J5QnVpbGRlcltnX2N1cnJlbnRT
dGF0ZS5idWlsZGVyXTsKKyAgICBnX3dlYlRyZWUgPSBjb252ZXJ0VG9XZWJUcmVlbWFwRm9ybWF0
KCdMYXlvdXRUZXN0cycsIHJhd1RyZWUpOworICAgIGFwcGVuZFRyZWVtYXAoJCgnbWFwJyksIGdf
d2ViVHJlZSk7CisKKyAgICBpZiAoZ19jdXJyZW50U3RhdGUudHJlZW1hcGZvY3VzKQorICAgICAg
ICBmb2N1c1BhdGgoZ193ZWJUcmVlLCBnX2N1cnJlbnRTdGF0ZS50cmVlbWFwZm9jdXMpCisKKyAg
ICBnX2lzR2VuZXJhdGluZ1BhZ2UgPSBmYWxzZTsKK30KKworZnVuY3Rpb24gZm9jdXNQYXRoKHRy
ZWUsIHBhdGgpCit7CisgICAgdmFyIHBhcnRzID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhdGgpLnNw
bGl0KCcvJyk7CisgICAgaWYgKGV4dHJhY3ROYW1lKHRyZWUpICE9IHBhcnRzWzBdKSB7CisgICAg
ICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBmb2N1cyB0cmVlIHJvb3RlZCBhdCAnICsgcGFy
dHNbMF0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDE7IGkg
PCBwYXJ0cy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgY2hpbGRyZW4gPSB0cmVlLmNoaWxk
cmVuOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNoaWxkcmVuLmxlbmd0aDsgaisrKSB7
CisgICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltqXTsKKyAgICAgICAgICAgIGlmIChl
eHRyYWN0TmFtZShjaGlsZCkgPT0gcGFydHNbaV0pIHsKKyAgICAgICAgICAgICAgICB0cmVlID0g
Y2hpbGQ7CisgICAgICAgICAgICAgICAgZm9jdXModHJlZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGogPT0gY2hpbGRyZW4u
bGVuZ3RoKSB7CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgZmluZCB0cmVl
IGF0ICcgKyBwYXJ0c1tpXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworfQorCitmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkKK3sK
KyAgICBzd2l0Y2goa2V5KSB7CisgICAgY2FzZSAnYnVpbGRlcic6CisgICAgICAgIHZhbGlkYXRl
UGFyYW1ldGVyKGdfY3VycmVudFN0YXRlLCBrZXksIHZhbHVlLAorICAgICAgICAgICAgZnVuY3Rp
b24oKSB7IHJldHVybiB2YWx1ZSBpbiBnX2J1aWxkZXJzOyB9KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBjYXNlICd0cmVlbWFwZm9jdXMnOgorICAgICAgICB2YWxpZGF0ZVBhcmFtZXRl
cihnX2N1cnJlbnRTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGVyZSdzIHByb2JhYmx5IGEgc2ltcGxlciByZWdl
eHAgaGVyZS4gSnVzdCB0cnlpbmcgdG8gbWF0Y2ggYXNjaWkgKyBmb3J3YXJkLXNsYXNoLgorICAg
ICAgICAgICAgICAgIC8vIGUuZy4gTGF5b3V0VGVzdHMvZm9vL2Jhci5odG1sCisgICAgICAgICAg
ICAgICAgcmV0dXJuICh2YWx1ZS5tYXRjaCgvXihcdytcL1x3KikqJC8pKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK2dfZGVmYXVsdFN0YXRlVmFsdWVzID0geworICAgIGJ1aWxk
ZXI6IGdfZGVmYXVsdEJ1aWxkZXJOYW1lCit9OworCitmdW5jdGlvbiBoYW5kbGVRdWVyeVBhcmFt
ZXRlckNoYW5nZShwYXJhbXMpCit7CisgICAgaWYgKCFnX3Jlc3VsdHNCeUJ1aWxkZXJbZ19jdXJy
ZW50U3RhdGUuYnVpbGRlcl0pCisgICAgICAgIGFwcGVuZEpTT05TY3JpcHRFbGVtZW50Rm9yKGdf
Y3VycmVudFN0YXRlLmJ1aWxkZXIpOworCisgICAgZm9yICh2YXIgcGFyYW0gaW4gcGFyYW1zKSB7
CisgICAgICAgIGlmIChwYXJhbSAhPSAndHJlZW1hcGZvY3VzJykgeworICAgICAgICAgICAgJCgn
bWFwJykuaW5uZXJIVE1MID0gJ0xvYWRpbmcuLi4nOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBPdmVycmlkZXMg
aGFuZGxlUmVzb3VyY2VMb2FkRXJyb3IgaW4gZGFzaGJvYXJkX2Jhc2UuanMuCitmdW5jdGlvbiBo
YW5kbGVSZXNvdXJjZUxvYWRFcnJvcihidWlsZGVyTmFtZSwgZSkKK3sKKyAgICAkKCdtYXAnKS5p
bm5lckhUTUwgPSAnPHNwYW4gY2xhc3M9ZXJyb3I+Q291bGQgbm90IGxvYWQgZGF0YSBmb3IgJyAr
IGJ1aWxkZXJOYW1lICsgJy4gJyArCisgICAgICAgICdFaXRoZXIgdGhlcmUgd2FzIGEgc2VydmVy
LXNpZGUgZXJyb3Igb3IgJyArIGJ1aWxkZXJOYW1lICsgJyBkb2VzIG5vdCBydW4gJyArCisgICAg
ICAgIGdfY3VycmVudFN0YXRlLnRlc3RUeXBlICsgJy48L3NwYW4+JzsKK30KKworZnVuY3Rpb24g
ZXh0cmFjdE5hbWUobm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZS5uYW1lLnNwbGl0KCcgJylbMF07
Cit9CisKK2Z1bmN0aW9uIGZ1bGxOYW1lKG5vZGUpCit7CisgICAgdmFyIGJ1ZmZlciA9IFtleHRy
YWN0TmFtZShub2RlKV07CisgICAgd2hpbGUgKG5vZGUucGFyZW50KSB7CisgICAgICAgIG5vZGUg
PSBub2RlLnBhcmVudDsKKyAgICAgICAgYnVmZmVyLnVuc2hpZnQoZXh0cmFjdE5hbWUobm9kZSkp
OworICAgIH0KKyAgICByZXR1cm4gYnVmZmVyLmpvaW4oJy8nKTsKK30KKworZnVuY3Rpb24gaGFu
ZGxlRm9jdXModHJlZSkKK3sKKyAgICB2YXIgY3VycmVudGx5Rm9jdXNlZE5vZGUgPSAkKCdmb2N1
c2VkLWxlYWYnKTsKKyAgICBpZiAoY3VycmVudGx5Rm9jdXNlZE5vZGUpCisgICAgICAgIGN1cnJl
bnRseUZvY3VzZWROb2RlLmlkID0gJyc7CisKKyAgICBpZiAoIXRyZWUuY2hpbGRyZW4pCisgICAg
ICAgIHRyZWUuZG9tLmlkID0gJ2ZvY3VzZWQtbGVhZic7CisKKyAgICB2YXIgbmFtZSA9IGZ1bGxO
YW1lKHRyZWUpOworCisgICAgaWYgKCF0cmVlLmNoaWxkcmVuICYmICF0cmVlLmV4dHJhRG9tICYm
IGlzTGF5b3V0VGVzdFJlc3VsdHMoKSkgeworICAgICAgICB0cmVlLmV4dHJhRG9tID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgncHJlJyk7CisgICAgICAgIHRyZWUuZXh0cmFEb20uY2xhc3NOYW1l
ID0gJ2V4dHJhLWRvbSc7CisgICAgICAgIHRyZWUuZG9tLmFwcGVuZENoaWxkKHRyZWUuZXh0cmFE
b20pOworCisgICAgICAgIHJlcXVlc3QoVEVTVF9VUkxfQkFTRV9QQVRIICsgbmFtZSwKKyAgICAg
ICAgICAgIGZ1bmN0aW9uKHhocikgeworICAgICAgICAgICAgICAgIHRyZWUuZXh0cmFEb20ub25t
b3VzZWRvd24gPSBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3Bh
Z2F0aW9uKCk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB0cmVlLmV4dHJh
RG9tLnRleHRDb250ZW50ID0geGhyLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICBmdW5jdGlvbiAoeGhyKSB7CisgICAgICAgICAgICAgICAgdHJlZS5leHRyYURvbS50
ZXh0Q29udGVudCA9ICJDb3VsZCBub3QgbG9hZCB0ZXN0LiIKKyAgICAgICAgfSk7CisgICAgfQor
CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgZm9jdXMgY2FsbHMgZHVyaW5nIGdlbmVyYXRlUGFn
ZSB0byB0cnkgdG8gbW9kaWZ5IHRoZSBxdWVyeSBzdGF0ZS4KKyAgICBpZiAoIWdfaXNHZW5lcmF0
aW5nUGFnZSkKKyAgICAgICAgc2V0UXVlcnlQYXJhbWV0ZXIoJ3RyZWVtYXBmb2N1cycsIG5hbWUp
OworfQorCitwYXJzZVBhcmFtZXRlcnMoKTsKK2FwcGVuZEpTT05TY3JpcHRFbGVtZW50Rm9yKGdf
Y3VycmVudFN0YXRlLmJ1aWxkZXIpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy93ZWJ0cmVlbWFwLmNzcyBiL1Rvb2xz
L1Rlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3dlYnRyZWVtYXAuY3NzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmEwNzg2NTAxNjNkZjJjMDIwMWQ0NjRiZjE2ZTQ0OTBhZGM5Yjk3YjEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJk
cy93ZWJ0cmVlbWFwLmNzcwpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLndlYnRyZWVtYXAtbm9kZSB7CisgIC8q
IFJlcXVpcmVkIGF0dHJpYnV0ZXMuICovCisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgb3ZlcmZs
b3c6IGhpZGRlbjsgICAvKiBUbyBoaWRlIG92ZXJsb25nIGNhcHRpb25zLiAqLworICBiYWNrZ3Jv
dW5kOiB3aGl0ZTsgIC8qIE5vZGVzIG11c3QgYmUgb3BhcXVlIGZvciB6SW5kZXggbGF5ZXJpbmcu
ICovCisgIGJvcmRlcjogc29saWQgMXB4IGJsYWNrOyAgLyogQ2FsY3VsYXRpb25zIGFzc3VtZSAx
cHggYm9yZGVyLiAqLworCisgIC8qIE9wdGlvbmFsOiBDU1MgYW5pbWF0aW9uLiAqLworICAtd2Vi
a2l0LXRyYW5zaXRpb246IHRvcCAgICAwLjNzLAorICAgICAgICAgICAgICAgICAgICAgIGxlZnQg
ICAwLjNzLAorICAgICAgICAgICAgICAgICAgICAgIHdpZHRoICAwLjNzLAorICAgICAgICAgICAg
ICAgICAgICAgIGhlaWdodCAwLjNzOworfQorCisvKiBPcHRpb25hbDogaGlnaGxpZ2h0IG5vZGVz
IG9uIG1vdXNlb3Zlci4gKi8KKy53ZWJ0cmVlbWFwLW5vZGU6aG92ZXIgeworICBiYWNrZ3JvdW5k
OiAjZWVlOworfQorCisvKiBPcHRpb25hbDogRGlmZmVyZW50IGJvcmRlcnMgZGVwZW5kaW5nIG9u
IGxldmVsLiAqLworLndlYnRyZWVtYXAtbGV2ZWwwIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHggIzQ0
NDsKK30KKy53ZWJ0cmVlbWFwLWxldmVsMSB7CisgIGJvcmRlcjogc29saWQgMXB4ICM2NjY7Cit9
Cisud2VidHJlZW1hcC1sZXZlbDIgeworICBib3JkZXI6IHNvbGlkIDFweCAjODg4OworfQorLndl
YnRyZWVtYXAtbGV2ZWwzIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHggI2FhYTsKK30KKy53ZWJ0cmVl
bWFwLWxldmVsNCB7CisgIGJvcmRlcjogc29saWQgMXB4ICNjY2M7Cit9CisKKy8qIE9wdGlvbmFs
OiBzdHlsaW5nIG9uIG5vZGUgY2FwdGlvbnMuICovCisud2VidHJlZW1hcC1jYXB0aW9uIHsKKyAg
Zm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CisgIGZvbnQtc2l6ZTogMTFweDsKKyAgcGFkZGluZzog
MnB4OworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy8qIE9wdGlvbmFsOiBzdHlsaW5nIG9u
IGNhcHRpb25zIG9uIG1vdXNlIGhvdmVyLiAqLworLyoud2VidHJlZW1hcC1ub2RlOmhvdmVyID4g
LndlYnRyZWVtYXAtY2FwdGlvbiB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfSov
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJk
cy93ZWJ0cmVlbWFwLmpzIGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvd2VidHJlZW1hcC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNWMwM2M2OGI4ZTNmYWFiZTNjOTE5ZTlh
ZTdjNTQ2NzQ4NGMwYTViCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRT
ZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvd2VidHJlZW1hcC5qcwpAQCAtMCwwICsxLDI0MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IFNpemUgb2YgYm9yZGVyIGFyb3VuZCBub2Rlcy4KKy8vIFdlIGNvdWxkIHN1cHBvcnQgYXJiaXRy
YXJ5IGJvcmRlcnMgdXNpbmcgZ2V0Q29tcHV0ZWRTdHlsZSgpLCBidXQgSSBhbQorLy8gc2tlcHRp
Y2FsIHRoZSBleHRyYSBjb21wbGV4aXR5IChhbmQgcGVyZm9ybWFuY2UgaGl0KSBpcyB3b3J0aCBp
dC4KK3ZhciBrQm9yZGVyV2lkdGggPSAxOworCisvLyBQYWRkaW5nIGFyb3VuZCBjb250ZW50cy4K
Ky8vIFRPRE86IGRvIHRoaXMgd2l0aCBhIG5lc3RlZCBkaXYgdG8gYWxsb3cgaXQgdG8gYmUgQ1NT
LXN0eWxlYWJsZS4KK3ZhciBrUGFkZGluZyA9IDQ7CisKK3ZhciBmb2N1c2VkID0gbnVsbDsKKwor
Ly8gQ2FsbGJhY2sgZm9yIGVtYmVkZGluZyBwYWdlIHRvIHVwZGF0ZSBhZnRlciBhIGZvY3VzLgor
ZnVuY3Rpb24gaGFuZGxlRm9jdXModHJlZSkge30KKworZnVuY3Rpb24gZm9jdXModHJlZSkgewor
ICBmb2N1c2VkID0gdHJlZTsKKworICAvLyBIaWRlIGFsbCB2aXNpYmxlIHNpYmxpbmdzIG9mIGFs
bCBvdXIgYW5jZXN0b3JzIGJ5IGxvd2VyaW5nIHRoZW0uCisgIHZhciBsZXZlbCA9IDA7CisgIHZh
ciByb290ID0gdHJlZTsKKyAgd2hpbGUgKHJvb3QucGFyZW50KSB7CisgICAgcm9vdCA9IHJvb3Qu
cGFyZW50OworICAgIGxldmVsICs9IDE7CisgICAgZm9yICh2YXIgaSA9IDAsIHNpYmxpbmc7IHNp
YmxpbmcgPSByb290LmNoaWxkcmVuW2ldOyArK2kpIHsKKyAgICAgIGlmIChzaWJsaW5nLmRvbSkK
KyAgICAgICAgc2libGluZy5kb20uc3R5bGUuekluZGV4ID0gMDsKKyAgICB9CisgIH0KKyAgdmFy
IHdpZHRoID0gcm9vdC5kb20ub2Zmc2V0V2lkdGg7CisgIHZhciBoZWlnaHQgPSByb290LmRvbS5v
ZmZzZXRIZWlnaHQ7CisgIC8vIFVuaGlkZSAocmFpc2UpIGFuZCBtYXhpbWl6ZSB1cyBhbmQgb3Vy
IGFuY2VzdG9ycy4KKyAgZm9yICh2YXIgdCA9IHRyZWU7IHQucGFyZW50OyB0ID0gdC5wYXJlbnQp
IHsKKyAgICAvLyBTaGlmdCBvZmYgYnkgYm9yZGVyIHNvIHdlIGRvbid0IGdldCBuZXN0ZWQgYm9y
ZGVycy4KKyAgICAvLyBUT0RPOiBhY3R1YWxseSBtYWtlIG5lc3RlZCBib3JkZXJzIHdvcmsgKG5l
ZWQgdG8gYWRqdXN0IHdpZHRoL2hlaWdodCkuCisgICAgcG9zaXRpb24odC5kb20sIC1rQm9yZGVy
V2lkdGgsIC1rQm9yZGVyV2lkdGgsIHdpZHRoLCBoZWlnaHQpOworICAgIHQuZG9tLnN0eWxlLnpJ
bmRleCA9IDE7CisgIH0KKyAgLy8gQW5kIGxheW91dCBpbnRvIHRoZSB0b3Btb3N0IGJveC4KKyAg
bGF5b3V0KHRyZWUsIGxldmVsLCB3aWR0aCwgaGVpZ2h0KTsKKyAgaGFuZGxlRm9jdXModHJlZSk7
Cit9CisKK2Z1bmN0aW9uIG1ha2VEb20odHJlZSwgbGV2ZWwpIHsKKyAgdmFyIGRvbSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICBkb20uc3R5bGUuekluZGV4ID0gMTsKKyAgZG9t
LmNsYXNzTmFtZSA9ICd3ZWJ0cmVlbWFwLW5vZGUgd2VidHJlZW1hcC1sZXZlbCcgKyBNYXRoLm1p
bihsZXZlbCwgNCk7CisKKyAgZG9tLm9ubW91c2Vkb3duID0gZnVuY3Rpb24oZSkgeworICAgIGlm
IChlLmJ1dHRvbiA9PSAwKSB7CisgICAgICBpZiAoZm9jdXNlZCAmJiB0cmVlID09IGZvY3VzZWQg
JiYgZm9jdXNlZC5wYXJlbnQpIHsKKyAgICAgICAgZm9jdXMoZm9jdXNlZC5wYXJlbnQpOworICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgZm9jdXModHJlZSk7CisgICAgICB9CisgICAgfQorICAgIGUu
c3RvcFByb3BhZ2F0aW9uKCk7CisgICAgcmV0dXJuIHRydWU7CisgIH07CisKKyAgdmFyIGNhcHRp
b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgY2FwdGlvbi5jbGFzc05hbWUg
PSAnd2VidHJlZW1hcC1jYXB0aW9uJzsKKyAgY2FwdGlvbi5pbm5lckhUTUwgPSB0cmVlLm5hbWU7
CisgIGRvbS5hcHBlbmRDaGlsZChjYXB0aW9uKTsKKworICB0cmVlLmRvbSA9IGRvbTsKKyAgcmV0
dXJuIGRvbTsKK30KKworZnVuY3Rpb24gcG9zaXRpb24oZG9tLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
KSB7CisgIC8vIENTUyB3aWR0aC9oZWlnaHQgZG9lcyBub3QgaW5jbHVkZSBib3JkZXIuCisgIHdp
ZHRoIC09IGtCb3JkZXJXaWR0aCoyOworICBoZWlnaHQgLT0ga0JvcmRlcldpZHRoKjI7CisKKyAg
ZG9tLnN0eWxlLmxlZnQgICA9IHggKyAncHgnOworICBkb20uc3R5bGUudG9wICAgID0geSArICdw
eCc7CisgIGRvbS5zdHlsZS53aWR0aCAgPSBNYXRoLm1heCh3aWR0aCwgMCkgKyAncHgnOworICBk
b20uc3R5bGUuaGVpZ2h0ID0gTWF0aC5tYXgoaGVpZ2h0LCAwKSArICdweCc7Cit9CisKKy8vIEdp
dmVuIGEgbGlzdCBvZiByZWN0YW5nbGVzIHxub2Rlc3wsIHRoZSAxLWQgc3BhY2UgYXZhaWxhYmxl
CisvLyB8c3BhY2V8LCBhbmQgYSBzdGFydGluZyByZWN0YW5nbGUgaW5kZXggfHN0YXJ0fCwgY29t
cHV0ZSBhbiBzcGFuIG9mCisvLyByZWN0YW5nbGVzIHRoYXQgb3B0aW1pemVzIGEgcGxlYXNhbnQg
YXNwZWN0IHJhdGlvLgorLy8KKy8vIFJldHVybnMgW2VuZCwgc3VtXSwgd2hlcmUgZW5kIGlzIG9u
ZSBwYXN0IHRoZSBsYXN0IHJlY3RhbmdsZSBhbmQgc3VtIGlzIHRoZQorLy8gMi1kIHN1bSBvZiB0
aGUgcmVjdGFuZ2xlcycgYXJlYXMuCitmdW5jdGlvbiBzZWxlY3RTcGFuKG5vZGVzLCBzcGFjZSwg
c3RhcnQpIHsKKyAgLy8gQWRkIHJlY3RhbmdsZSBvbmUgYnkgb25lLCBzdG9wcGluZyB3aGVuIGFz
cGVjdCByYXRpb3MgYmVnaW4gdG8gZ28KKyAgLy8gYmFkLiAgUmVzdWx0IGlzIFtzdGFydCxlbmQp
IGNvdmVyaW5nIHRoZSBiZXN0IHJ1biBmb3IgdGhpcyBzcGFuLgorICAvLyBodHRwOi8vc2Nob2xh
ci5nb29nbGUuY29tL3NjaG9sYXI/Y2x1c3Rlcj01OTcyNTEyMTA3ODQ1NjE1NDc0CisgIHZhciBu
b2RlID0gbm9kZXNbc3RhcnRdOworICB2YXIgcm1pbiA9IG5vZGUuZGF0YVsnJGFyZWEnXTsgIC8v
IFNtYWxsZXN0IHNlZW4gY2hpbGQgc28gZmFyLgorICB2YXIgcm1heCA9IHJtaW47ICAgICAgICAg
ICAgICAgIC8vIExhcmdlc3QgY2hpbGQuCisgIHZhciByc3VtID0gMDsgICAgICAgICAgICAgICAg
ICAgLy8gU3VtIG9mIGNoaWxkcmVuIGluIHRoaXMgc3Bhbi4KKyAgdmFyIGxhc3Rfc2NvcmUgPSAw
OyAgICAgICAgICAgICAvLyBCZXN0IHNjb3JlIHlldCBmb3VuZC4KKyAgZm9yICh2YXIgZW5kID0g
c3RhcnQ7IG5vZGUgPSBub2Rlc1tlbmRdOyArK2VuZCkgeworICAgIHZhciBzaXplID0gbm9kZS5k
YXRhWyckYXJlYSddOworICAgIGlmIChzaXplIDwgcm1pbikKKyAgICAgIHJtaW4gPSBzaXplOwor
ICAgIGlmIChzaXplID4gcm1heCkKKyAgICAgIHJtYXggPSBzaXplOworICAgIHJzdW0gKz0gc2l6
ZTsKKworICAgIC8vIFRoaXMgZm9ybXVsYSBpcyBmcm9tIHRoZSBwYXBlciwgYnV0IHlvdSBjYW4g
ZWFzaWx5IHByb3ZlIHRvCisgICAgLy8geW91cnNlbGYgaXQncyB0YWtpbmcgdGhlIGxhcmdlciBv
ZiB0aGUgeC95IGFzcGVjdCByYXRpbyBvciB0aGUKKyAgICAvLyB5L3ggYXNwZWN0IHJhdGlvLiAg
VGhlIGFkZGl0aW9uYWwgbWFnaWMgZnVkZ2UgY29uc3RhbnQgb2YgNQorICAgIC8vIG1ha2VzIHVz
IHByZWZlciB3aWRlciByZWN0YW5nbGVzIHRvIHRhbGxlciBvbmVzLgorICAgIHZhciBzY29yZSA9
IE1hdGgubWF4KDUqc3BhY2Uqc3BhY2Uqcm1heCAvIChyc3VtKnJzdW0pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIDEqcnN1bSpyc3VtIC8gKHNwYWNlKnNwYWNlKnJtaW4pKTsKKyAgICBpZiAo
bGFzdF9zY29yZSAmJiBzY29yZSA+IGxhc3Rfc2NvcmUpIHsKKyAgICAgIHJzdW0gLT0gc2l6ZTsg
IC8vIFVuZG8gc2l6ZSBhZGRpdGlvbiBmcm9tIGp1c3QgYWJvdmUuCisgICAgICBicmVhazsKKyAg
ICB9CisgICAgbGFzdF9zY29yZSA9IHNjb3JlOworICB9CisgIHJldHVybiBbZW5kLCByc3VtXTsK
K30KKworZnVuY3Rpb24gbGF5b3V0KHRyZWUsIGxldmVsLCB3aWR0aCwgaGVpZ2h0KSB7CisgIGlm
ICghKCdjaGlsZHJlbicgaW4gdHJlZSkpCisgICAgcmV0dXJuOworCisgIHZhciB0b3RhbCA9IHRy
ZWUuZGF0YVsnJGFyZWEnXTsKKworICAvLyBYWFggd2h5IGRvIEkgbmVlZCBhbiBleHRyYSAtMS8t
MiBoZXJlIGZvciB3aWR0aC9oZWlnaHQgdG8gbG9vayByaWdodD8KKyAgdmFyIHgxID0gMCwgeTEg
PSAwLCB4MiA9IHdpZHRoIC0gMSwgeTIgPSBoZWlnaHQgLSAyOworICB4MSArPSBrUGFkZGluZzsg
eTEgKz0ga1BhZGRpbmc7CisgIHgyIC09IGtQYWRkaW5nOyB5MiAtPSBrUGFkZGluZzsKKyAgeTEg
Kz0gMTQ7ICAvLyBYWFggZ2V0IGZpcnN0IGNoaWxkIGhlaWdodCBmb3IgY2FwdGlvbiBzcGFjaW5n
CisKKyAgdmFyIHBpeGVsc190b191bml0cyA9IE1hdGguc3FydCh0b3RhbCAvICgoeDIgLSB4MSkg
KiAoeTIgLSB5MSkpKTsKKworICBmb3IgKHZhciBzdGFydCA9IDAsIGNoaWxkOyBjaGlsZCA9IHRy
ZWUuY2hpbGRyZW5bc3RhcnRdOyArK3N0YXJ0KSB7CisgICAgaWYgKHgyIC0geDEgPCA2MCB8fCB5
MiAtIHkxIDwgNDApIHsKKyAgICAgIGlmIChjaGlsZC5kb20pIHsKKyAgICAgICAgY2hpbGQuZG9t
LnN0eWxlLnpJbmRleCA9IDA7CisgICAgICAgIHBvc2l0aW9uKGNoaWxkLmRvbSwgLTIsIC0yLCAw
LCAwKTsKKyAgICAgIH0KKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8vIEluIHRoZW9y
eSB3ZSBjYW4gZHluYW1pY2FsbHkgZGVjaWRlIHdoZXRoZXIgdG8gc3BsaXQgaW4geCBvciB5IGJh
c2VkCisgICAgLy8gb24gYXNwZWN0IHJhdGlvLiAgSW4gcHJhY3RpY2UsIGNoYW5naW5nIHNwbGl0
IGRpcmVjdGlvbiB3aXRoIHRoaXMKKyAgICAvLyBsYXlvdXQgZG9lc24ndCBsb29rIHZlcnkgZ29v
ZC4KKyAgICAvLyAgIHZhciB5c3BsaXQgPSAoeTIgLSB5MSkgPiAoeDIgLSB4MSk7CisgICAgdmFy
IHlzcGxpdCA9IHRydWU7CisKKyAgICB2YXIgc3BhY2U7ICAvLyBTcGFjZSBhdmFpbGFibGUgYWxv
bmcgbGF5b3V0IGF4aXMuCisgICAgaWYgKHlzcGxpdCkKKyAgICAgIHNwYWNlID0gKHkyIC0geTEp
ICogcGl4ZWxzX3RvX3VuaXRzOworICAgIGVsc2UKKyAgICAgIHNwYWNlID0gKHgyIC0geDEpICog
cGl4ZWxzX3RvX3VuaXRzOworCisgICAgdmFyIHNwYW4gPSBzZWxlY3RTcGFuKHRyZWUuY2hpbGRy
ZW4sIHNwYWNlLCBzdGFydCk7CisgICAgdmFyIGVuZCA9IHNwYW5bMF0sIHJzdW0gPSBzcGFuWzFd
OworCisgICAgLy8gTm93IHRoYXQgd2UndmUgc2VsZWN0ZWQgYSBzcGFuLCBsYXkgb3V0IHJlY3Rh
bmdsZXMgW3N0YXJ0LGVuZCkgaW4gb3VyCisgICAgLy8gYXZhaWxhYmxlIHNwYWNlLgorICAgIHZh
ciB4ID0geDEsIHkgPSB5MTsKKyAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkg
eworICAgICAgY2hpbGQgPSB0cmVlLmNoaWxkcmVuW2ldOworICAgICAgaWYgKCFjaGlsZC5kb20p
IHsKKyAgICAgICAgY2hpbGQucGFyZW50ID0gdHJlZTsKKyAgICAgICAgY2hpbGQuZG9tID0gbWFr
ZURvbShjaGlsZCwgbGV2ZWwgKyAxKTsKKyAgICAgICAgdHJlZS5kb20uYXBwZW5kQ2hpbGQoY2hp
bGQuZG9tKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNoaWxkLmRvbS5zdHlsZS56SW5kZXgg
PSAxOworICAgICAgfQorICAgICAgdmFyIHNpemUgPSBjaGlsZC5kYXRhWyckYXJlYSddOworICAg
ICAgdmFyIGZyYWMgPSBzaXplIC8gcnN1bTsKKyAgICAgIGlmICh5c3BsaXQpIHsKKyAgICAgICAg
d2lkdGggPSByc3VtIC8gc3BhY2U7CisgICAgICAgIGhlaWdodCA9IHNpemUgLyB3aWR0aDsKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIGhlaWdodCA9IHJzdW0gLyBzcGFjZTsKKyAgICAgICAgd2lk
dGggPSBzaXplIC8gaGVpZ2h0OworICAgICAgfQorICAgICAgd2lkdGggLz0gcGl4ZWxzX3RvX3Vu
aXRzOworICAgICAgaGVpZ2h0IC89IHBpeGVsc190b191bml0czsKKyAgICAgIHdpZHRoID0gTWF0
aC5yb3VuZCh3aWR0aCk7CisgICAgICBoZWlnaHQgPSBNYXRoLnJvdW5kKGhlaWdodCk7CisgICAg
ICBwb3NpdGlvbihjaGlsZC5kb20sIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgaWYgKCdj
aGlsZHJlbicgaW4gY2hpbGQpIHsKKyAgICAgICAgbGF5b3V0KGNoaWxkLCBsZXZlbCArIDEsIHdp
ZHRoLCBoZWlnaHQpOworICAgICAgfQorICAgICAgaWYgKHlzcGxpdCkKKyAgICAgICAgeSArPSBo
ZWlnaHQ7CisgICAgICBlbHNlCisgICAgICAgIHggKz0gd2lkdGg7CisgICAgfQorCisgICAgLy8g
U2hyaW5rIG91ciBhdmFpbGFibGUgc3BhY2UgYmFzZWQgb24gdGhlIGFtb3VudCB3ZSB1c2VkLgor
ICAgIGlmICh5c3BsaXQpCisgICAgICB4MSArPSBNYXRoLnJvdW5kKChyc3VtIC8gc3BhY2UpIC8g
cGl4ZWxzX3RvX3VuaXRzKTsKKyAgICBlbHNlCisgICAgICB5MSArPSBNYXRoLnJvdW5kKChyc3Vt
IC8gc3BhY2UpIC8gcGl4ZWxzX3RvX3VuaXRzKTsKKworICAgIC8vIGVuZCBwb2ludHMgb25lIHBh
c3Qgd2hlcmUgd2UgZW5kZWQsIHdoaWNoIGlzIHdoZXJlIHdlIHdhbnQgdG8KKyAgICAvLyBiZWdp
biB0aGUgbmV4dCBpdGVyYXRpb24sIGJ1dCBzdWJ0cmFjdCBvbmUgdG8gYmFsYW5jZSB0aGUgKysg
aW4KKyAgICAvLyB0aGUgbG9vcC4KKyAgICBzdGFydCA9IGVuZCAtIDE7CisgIH0KK30KKworZnVu
Y3Rpb24gYXBwZW5kVHJlZW1hcChkb20sIGRhdGEpIHsKKyAgdmFyIHN0eWxlID0gZ2V0Q29tcHV0
ZWRTdHlsZShkb20sIG51bGwpOworICB2YXIgd2lkdGggPSBwYXJzZUludChzdHlsZS53aWR0aCk7
CisgIHZhciBoZWlnaHQgPSBwYXJzZUludChzdHlsZS5oZWlnaHQpOworICBpZiAoIWRhdGEuZG9t
KQorICAgIG1ha2VEb20oZGF0YSwgMCk7CisgIGRvbS5hcHBlbmRDaGlsZChkYXRhLmRvbSk7Cisg
IHBvc2l0aW9uKGRhdGEuZG9tLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgbGF5b3V0KGRhdGEs
IDAsIHdpZHRoLCBoZWlnaHQpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3RlbXBsYXRlcy9maWxlbGlzdC5odG1s
IGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvdGVtcGxhdGVzL2ZpbGVsaXN0Lmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMmVkYjVhZDg0YmFkMzk0MjI5ODYxNmE5YWNmOTViYzhkMzFhZGRmYgotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3RlbXBsYXRlcy9maWxlbGlz
dC5odG1sCkBAIC0wLDAgKzEsNTYgQEAKKzwhRE9DVFlQRSBodG1sPgorPHRpdGxlPlRlc3QgUmVz
dWx0cyAtIHt7Lk1hc3Rlcn19IHt7LkJ1aWxkZXJ9fSB7ey5UZXN0VHlwZX19IHt7Lk5hbWV9fTwv
dGl0bGU+Cis8c3R5bGU+Citib2R5IHsKKyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEhlbHZldGlj
YSwgc2Fucy1zZXJpZjsKK30KK2gxIHsKKyAgY29sb3I6ICM0NDQ7CisgIGZvbnQtc2l6ZTogMTRw
dDsKKyAgZm9udC1zdHlsZTogaXRhbGljOworICBtYXJnaW46IDBweDsKKyAgcGFkZGluZzogNXB4
OworfQordGFibGUgeworICBib3JkZXItc3BhY2luZzogMHB4OworfQordGggeworICBiYWNrZ3Jv
dW5kLWNvbG9yOiAjQUFBOworICBjb2xvcjogd2hpdGU7CisgIHRleHQtYWxpZ246IGxlZnQ7Cisg
IHBhZGRpbmc6IDVweDsKKyAgZm9udC1zaXplOiAxMnB0OworfQordGQgeworICBmb250LXNpemU6
IDExcHQ7CisgIHBhZGRpbmc6IDNweDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KK3RyOmhvdmVy
IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI0VFRTsKK30KKzwvc3R5bGU+Cis8aDE+VGVzdCBSZXN1
bHRzIC0ge3suTWFzdGVyfX0ge3suQnVpbGRlcn19IHt7LlRlc3RUeXBlfX0ge3suTmFtZX19PC9o
MT4KKzxkaXY+CisgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGg+TWFz
dGVyPC90aD4KKyAgICAgICAgICAgIDx0aD5CdWlsZGVyPC90aD4KKyAgICAgICAgICAgIDx0aD5U
ZXN0IFR5cGU8L3RoPgorICAgICAgICAgICAgPHRoPkZpbGU8L3RoPgorICAgICAgICAgICAgPHRo
PkRhdGU8L3RoPgorICAgICAgICAgICAgPHRoPjwvdGg+CisgICAgICAgIDwvdHI+CisKKyAgICAg
ICAge3tyYW5nZSAuRmlsZXNXaXRoS2V5c319CisgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0
ZD48YSBocmVmPSJ0ZXN0ZmlsZT9tYXN0ZXI9e3suRmlsZS5NYXN0ZXJ9fSI+e3suRmlsZS5NYXN0
ZXJ9fTwvYT48L3RkPgorICAgICAgICAgICAgPHRkPjxhIGhyZWY9InRlc3RmaWxlP2J1aWxkZXI9
e3suRmlsZS5CdWlsZGVyfX0iPnt7LkZpbGUuQnVpbGRlcn19PC9hPjwvdGQ+CisgICAgICAgICAg
ICA8dGQ+PGEgaHJlZj0idGVzdGZpbGU/dGVzdHR5cGU9e3suRmlsZS5UZXN0VHlwZX19Ij57ey5G
aWxlLlRlc3RUeXBlfX08L2E+PC90ZD4KKyAgICAgICAgICAgIDx0ZD48YSBocmVmPSJ0ZXN0Zmls
ZT9tYXN0ZXI9e3suRmlsZS5NYXN0ZXJ9fSZidWlsZGVyPXt7LkZpbGUuQnVpbGRlcn19Jm5hbWU9
e3suRmlsZS5OYW1lfX0mdGVzdHR5cGU9e3suRmlsZS5UZXN0VHlwZX19Ij57ey5GaWxlLk5hbWV9
fTwvYT48L3RkPgorICAgICAgICAgICAgPHRkPjxzY3JpcHQ+ZG9jdW1lbnQud3JpdGUobmV3IERh
dGUoe3suRmlsZS5EYXRlTWljcm9zZWNvbmRzfX0gLyAxMDAwKS50b0xvY2FsZVN0cmluZygpKTwv
c2NyaXB0PjwvdGQ+CisgICAgICAgICAgICA8dGQ+PGEgaHJlZj0idGVzdGZpbGUvZGVsZXRlP2tl
eT17ey5LZXkuRW5jb2RlfX0iPkRlbGV0ZTwvYT48L3RkPgorICAgICAgICA8L3RyPgorICAgICAg
ICB7e2VuZH19CisgICAgPC90YWJsZT4KKzwvZGl2PgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdHNE
YXNoYm9hcmRTZXJ2ZXIvdGVtcGxhdGVzL2ZpbGVsaXN0Lmpzb25wIGIvVG9vbHMvVGVzdHNEYXNo
Ym9hcmRTZXJ2ZXIvdGVtcGxhdGVzL2ZpbGVsaXN0Lmpzb25wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkYjY4OGVh
MWJhYjA1YTQ1OTIxZjgxMzRiNzAzN2Y4YmZhMzJhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0c0Rhc2hib2FyZFNlcnZlci90ZW1wbGF0ZXMvZmlsZWxpc3QuanNvbnAKQEAgLTAsMCAr
MSBAQAore3suQ2FsbGJhY2t9fShbe3tyYW5nZSAuS2V5c319e2tleToie3suRW5jb2RlfX0ifSx7
e2VuZH19XSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci90ZW1wbGF0
ZXMvbWVudS5odG1sIGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvdGVtcGxhdGVzL21lbnUu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lMDNiZGY1NDlkNTBiZDVhZjdjNzhlZjA1ZDYyY2Q2NjhlNTIxMWEx
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvdGVtcGxhdGVz
L21lbnUuaHRtbApAQCAtMCwwICsxLDMyIEBACis8IURPQ1RZUEUgaHRtbD4KKzx0aXRsZT5UZXN0
IFJlc3VsdCBTZXJ2ZXI8L3RpdGxlPgorPHN0eWxlPgorYm9keSB7CisgIGZvbnQtZmFtaWx5OiBW
ZXJkYW5hLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Cit9Cit1bCB7CisgIGxpc3Qtc3R5bGU6IG5v
bmU7Cit9CitsaSB7CisgIHBhZGRpbmc6IDVweCAwOworfQorPC9zdHlsZT4KKworPGgyPkRhc2hi
b2FyZHM8L2gyPgorPGRpdj4KKyAgICA8dWw+CisgICAgICAgIDxsaT48YSBocmVmPSJkYXNoYm9h
cmRzL2ZsYWtpbmVzc19kYXNoYm9hcmQuaHRtbCIgPlJlc3VsdHM8L2E+PC9saT4KKyAgICAgICAg
PGxpPjxhIGhyZWY9ImRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuaHRtbCIgPlRpbWVsaW5l
PC9hPjwvbGk+CisgICAgICAgIDxsaT48YSBocmVmPSJkYXNoYm9hcmRzL3RyZWVtYXAuaHRtbCIg
PlRyZWVtYXA8L2E+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9ImRhc2hib2FyZHMvYWdncmVn
YXRlX3Jlc3VsdHMuaHRtbCIgPlN0YXRzPC9hPjwvbGk+CisgICAgPC91bD4KKzwvZGl2PgorCis8
aDI+SlNPTiBmaWxlczwvaDI+Cis8ZGl2PgorICAgIDx1bD4KKyAgICAgICAgPGxpPjxhIGhyZWY9
InRlc3RmaWxlIiA+TGlzdCBvZiB0ZXN0IGZpbGVzPC9hPjwvbGk+CisgICAgICAgIDxsaT48YSBo
cmVmPSJ0ZXN0ZmlsZT9uYW1lPXJlc3VsdHMuanNvbiIgPkxpc3Qgb2YgcmVzdWx0cy5qc29uIGZp
bGVzPC9hPjwvbGk+CisgICAgICAgIDxsaT48YSBocmVmPSJ0ZXN0ZmlsZS91cGxvYWRmb3JtIiA+
VXBsb2FkIHRlc3QgZmlsZTwvYT48L2xpPgorICAgIDwvdWw+Cis8L2Rpdj4KZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3RlbXBsYXRlcy91cGxvYWRmb3JtLmh0bWwgYi9U
b29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci90ZW1wbGF0ZXMvdXBsb2FkZm9ybS5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmI5YzhjOGNkYjE0NjVhZDM0NTY3NTAwMGZiZTBjZTZhODBhZDc4NDAKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci90ZW1wbGF0ZXMvdXBsb2FkZm9y
bS5odG1sCkBAIC0wLDAgKzEsNDcgQEAKKzwhRE9DVFlQRSBodG1sPgorPHRpdGxlPlVwbG9hZCBU
ZXN0IFJlc3VsdCBGaWxlPC90aXRsZT4KKzxzdHlsZT4KK2JvZHkgeworICBmb250LWZhbWlseTog
VmVyZGFuYTsKKyAgY29sb3I6ICM0NDQ7Cit9CitoMSB7CisgIGZvbnQtc2l6ZTogMTRwdDsKKyAg
Zm9udC1zdHlsZTogaXRhbGljOworICBtYXJnaW46IDBweDsKKyAgcGFkZGluZzogNXB4OworfQor
LmxhYmVsIHsKKyAgbWFyZ2luOiAxcHg7CisgIHBhZGRpbmc6IDVweDsKKyAgZm9udC1zaXplOiAx
MXB0OworICB3aWR0aDogOTBweDsKK30KKy5pbnB1dHRleHQgeworICBmb250LXNpemU6IDExcHQ7
Cit9CisuYnV0dG9uIHsKKyAgbWFyZ2luOiAxcHg7CisgIHBhZGRpbmc6IDFweDsKKyAgZm9udC1z
aXplOiAxMXB0OworfQorPC9zdHlsZT4KKzxoMT5VcGxvYWQgVGVzdCBSZXN1bHQgRmlsZTwvaDE+
Cis8Zm9ybSBpZD0idXBsb2FkRm9ybSIgbmFtZT0idGVzdF9yZXN1bHRfdXBsb2FkIiBhY2NlcHQ9
InRleHQvaHRtbCIgYWN0aW9uPSJ1cGxvYWQiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEi
IG1ldGhvZD0icG9zdCI+CisgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgICA8
dGQgY2xhc3M9bGFiZWw+PGxhYmVsPk1hc3Rlcjo8L2xhYmVsPjwvdGQ+CisgICAgICAgICAgICA8
dGQ+PGlucHV0IGNsYXNzPWlucHV0dGV4dCBuYW1lPSJtYXN0ZXIiIHBsYWNlaG9sZGVyPSJDaHJv
bWl1bSIvPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0
ZCBjbGFzcz1sYWJlbD48bGFiZWw+QnVpbGRlcjo8L2xhYmVsPjwvdGQ+CisgICAgICAgICAgICA8
dGQ+PGlucHV0IGNsYXNzPWlucHV0dGV4dCBuYW1lPSJidWlsZGVyIiBwbGFjZWhvbGRlcj0iV2Vi
a2l0Ii8+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgICAgPHRk
IGNsYXNzPWxhYmVsPjxsYWJlbD5UZXN0IFR5cGU6PC9sYWJlbD48L3RkPgorICAgICAgICAgICAg
PHRkPjxpbnB1dCBjbGFzcz1pbnB1dHRleHQgbmFtZT0idGVzdHR5cGUiIHBsYWNlaG9sZGVyPSJs
YXlvdXQtdGVzdHMiLz48L3RkPgorICAgICAgICA8L3RyPgorICAgIDwvdGFibGU+CisgICAgPGRp
dj48aW5wdXQgY2xhc3M9YnV0dG9uIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiIG11bHRpcGxlPjwv
ZGl2PgorICAgIDxkaXY+PGlucHV0IGNsYXNzPWJ1dHRvbiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJV
cGxvYWQiPjwvZGl2PgorPC9mb3JtPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118275</attachid>
            <date>2011-12-07 14:10:27 -0800</date>
            <delta_ts>2011-12-09 14:25:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73956-20111207141026.patch</filename>
            <type>text/plain</type>
            <size>339620</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMTg3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmIyODE2ZTIyODE5NGRhNzRlZjNkZTRlMjQ5MzFmMmZm
YTFhODQzMy4uM2U5NGIxNzcwNzk4OWZjZDc4ZTkyMzc3OGM4ZjNlMGUyYjY0N2QzYSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4
IEBACisyMDExLTEyLTA2ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV3cml0ZSB0aGUgdGVzdCByZXN1bHRzIHNlcnZlciBpbiBHbworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5NTYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwgZXZlbnR1YWxseSByZXBs
YWNlIHRoZSBQeXRob24gc2VydmVyLgorICAgICAgICBUaGUgb3JpZ2luYWwgaW50ZW50aW9uIHdh
cyB0byBhZGRyZXNzIHNvbWUgbWVtb3J5IGFuZCBwZXJmb3JtYW5jZQorICAgICAgICBwcm9ibGVt
cy4gVGhpcyBzZXJ2ZXIgZG9lc24ndCBkbyB0aGF0LCBidXQgaG9wZWZ1bGx5IHdpbGwgbWFrZSBp
dAorICAgICAgICBwb3NzaWJsZS4KKworICAgICAgICBUaGUgaW1tZWRpYXRlIGJlbmVmaXRzIG9m
IHRoaXMgY29kZSBvdmVyIHRoZSBQeXRob24gY29kZSBhcmU6CisgICAgICAgIC1UaGUgY29kZSBp
cyB0aG9yb3VnaGx5IHVuaXQgdGVzdGVkLgorICAgICAgICAtVGhlIHRlc3RzIGNhbiBiZSBydW4g
d2l0aG91dCBuZWVkaW5nIHRvIG1hbmdsZSB5b3VyIFBZVEhPTlBBVEgKKyAgICAgICAgb3IgZXZl
biBnZXR0aW5nIHRoZSBhcHBlbmdpbmUgU0RLLiBZb3UganVzdCBuZWVkIGdvdGVzdC4KKworICAg
ICAgICBUaGlzIGNvZGUgZG9lc24ndCBtYXRjaCBvdGhlciBXZWJLaXQgc3R5bGUgYmVjYXVzZSBH
byBzdHlsZQorICAgICAgICBpcyBzdHJpY3RseSBjb250cm9sbGVkIGJ5IGdvZm10IGFuZCBpdCBk
b2Vzbid0IG1ha2Ugc2Vuc2UgdG8KKyAgICAgICAgZGVwYXJ0IGZyb20gdGhhdC4KKworICAgICAg
ICAqIFRlc3RzRGFzaGJvYXJkU2VydmVyL2FwcC55YW1sOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0
c0Rhc2hib2FyZFNlcnZlci9iYXNlL01ha2VmaWxlOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0c0Rh
c2hib2FyZFNlcnZlci9iYXNlL2Jhc2UuZ286IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJv
YXJkU2VydmVyL2Jhc2UvYmFzZV90ZXN0LmdvOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0c0Rhc2hi
b2FyZFNlcnZlci9iYXNlL2h0dHAuZ286IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJvYXJk
U2VydmVyL2Jhc2UvaHR0cF90ZXN0LmdvOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0c0Rhc2hib2Fy
ZFNlcnZlci9iYXNlL2pzb24uZ286IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJvYXJkU2Vy
dmVyL2Jhc2UvanNvbl90ZXN0LmdvOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0c0Rhc2hib2FyZFNl
cnZlci9ydW4vcnVuLmdvOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0c0Rhc2hib2FyZFNlcnZlci9z
dGF0aWMtZGFzaGJvYXJkcy9MSUNFTlNFLmR5Z3JhcGgudHh0OiBBZGRlZC4KKyAgICAgICAgKiBU
ZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9SRUFETUUuZHlncmFwaC50eHQ6
IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L1JFQURNRS53ZWJ0cmVlbWFwLnR4dDogQWRkZWQuCisgICAgICAgICogVGVzdHNEYXNoYm9hcmRT
ZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvYWdncmVnYXRlX3Jlc3VsdHMuaHRtbDogQWRkZWQuCisg
ICAgICAgICogVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvYnVpbGRlcnMu
anM6IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9h
cmRzL2Rhc2hib2FyZF9iYXNlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0c0Rhc2hib2FyZFNl
cnZlci9zdGF0aWMtZGFzaGJvYXJkcy9keWdyYXBoLWNvbWJpbmVkLmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBUZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFz
aGJvYXJkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRp
Yy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdGVzdHMuanM6IEFkZGVkLgorICAgICAg
ICAqIFRlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3dlYnRyZWVtYXAuanM6
IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJvYXJkU2VydmVyL3RlbXBsYXRlcy9maWxlbGlz
dC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0c0Rhc2hib2FyZFNlcnZlci90ZW1wbGF0ZXMv
ZmlsZWxpc3QuanNvbnA6IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJvYXJkU2VydmVyL3Rl
bXBsYXRlcy9tZW51Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RzRGFzaGJvYXJkU2VydmVy
L3RlbXBsYXRlcy91cGxvYWRmb3JtLmh0bWw6IEFkZGVkLgorCiAyMDExLTEyLTA2ICBBZGFtIFJv
YmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBwaWQgcGFyYW1ldGVyIHRv
IENyYXNoTG9ncy5maW5kX25ld2VzdF9sb2cKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RzRGFzaGJv
YXJkU2VydmVyL2FwcC55YW1sIGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvYXBwLnlhbWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNmUyMTc2YTlmYjBjNTZkMTMxZDFhNzMyZjVkMDBjMDZkOTQ5M2U4MgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL2FwcC55YW1sCkBAIC0w
LDAgKzEsMTQgQEAKK2FwcGxpY2F0aW9uOiB0ZXN0c2Rhc2hib2FyZAordmVyc2lvbjogMQorcnVu
dGltZTogZ28KK2FwaV92ZXJzaW9uOiAzCisKK2hhbmRsZXJzOgorLSB1cmw6IC9zdHlsZXNoZWV0
cworICBzdGF0aWNfZGlyOiBzdHlsZXNoZWV0cworCistIHVybDogL2Rhc2hib2FyZHMKKyAgc3Rh
dGljX2Rpcjogc3RhdGljLWRhc2hib2FyZHMKKworLSB1cmw6IC8uKgorICBzY3JpcHQ6IF9nb19h
cHAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL2Jhc2UvTWFrZWZpbGUg
Yi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9iYXNlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRj
ZTMzMDU5ZWRhNDZhMDQ1NWNjZDhlNWJjMWU3MWEzMWE4MGQ1YjcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9iYXNlL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBA
QAoraW5jbHVkZSAkKEdPUk9PVCkvc3JjL01ha2UuaW5jCisKK1RBUkc9YmFzZQorR09GSUxFUz1c
CisJYmFzZS5nb1wKKwlodHRwLmdvXAorCWpzb24uZ29cCisKK2luY2x1ZGUgJChHT1JPT1QpL3Ny
Yy9NYWtlLnBrZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RzRGFzaGJvYXJkU2VydmVyL2Jhc2UvYmFzZS5nbyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJk
U2VydmVyL2Jhc2UvYmFzZS5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZTRiODFjNDhkMWY4MDY2MTEyOTNlZGIw
YTQxNjhiMDg0YjczNTg5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRT
ZXJ2ZXIvYmFzZS9iYXNlLmdvCkBAIC0wLDAgKzEsMzUgQEAKK3BhY2thZ2UgYmFzZQorCitpbXBv
cnQgKAorCSJvcyIKKwkicnVudGltZS9kZWJ1ZyIKKykKKworZnVuYyBFcnJvcih2YWx1ZSBpbnRl
cmZhY2V7fSkgb3MuRXJyb3IgeworCWlmIHZhbHVlID09IG5pbCB7CisJCXJldHVybiBuaWwKKwl9
CisJdmFyIG1lc3NhZ2Ugc3RyaW5nCisJc3dpdGNoIHR5cGVkVmFsdWUgOj0gdmFsdWUuKHR5cGUp
IHsKKwljYXNlIHN0cmluZzoKKwkJbWVzc2FnZSA9IHR5cGVkVmFsdWUgKyAiXG4iCisJY2FzZSBv
cy5FcnJvcjoKKwkJbWVzc2FnZSA9IHR5cGVkVmFsdWUuU3RyaW5nKCkgKyAiXG4iCisJZGVmYXVs
dDoKKwkJbWVzc2FnZSA9ICIiCisJfQorCXJldHVybiBvcy5OZXdFcnJvcihtZXNzYWdlICsgc3Ry
aW5nKGRlYnVnLlN0YWNrKCkpKQorfQorCitmdW5jIE11bHRpRXJyb3IoZXJyb3JzIC4uLm9zLkVy
cm9yKSBvcy5FcnJvciB7CisJbWVzc2FnZSA6PSAiIgorCWZvciBfLCBlcnIgOj0gcmFuZ2UgZXJy
b3JzIHsKKwkJaWYgZXJyICE9IG5pbCB7CisJCQltZXNzYWdlID0gZXJyLlN0cmluZygpICsgIlxu
XG4iICsgbWVzc2FnZQorCQl9CisJfQorCWlmIG1lc3NhZ2UgPT0gIiIgeworCQlyZXR1cm4gbmls
CisJfQorCXJldHVybiBvcy5OZXdFcnJvcihtZXNzYWdlKQorfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdHNEYXNoYm9hcmRTZXJ2ZXIvYmFzZS9iYXNlX3Rlc3QuZ28gYi9Ub29scy9UZXN0c0Rhc2hi
b2FyZFNlcnZlci9iYXNlL2Jhc2VfdGVzdC5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2M2NjY0NWI4NTM5MWEx
MWZkOTU1Y2UyMGQxYzYzNTY5YTMyZTdjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdHNE
YXNoYm9hcmRTZXJ2ZXIvYmFzZS9iYXNlX3Rlc3QuZ28KQEAgLTAsMCArMSwxOCBAQAorcGFja2Fn
ZSBiYXNlCisKK2ltcG9ydCAoCisJInN0cmluZ3MiCisJInRlc3RpbmciCispCisKK2Z1bmMgYXNz
ZXJ0RXF1YWwodCAqdGVzdGluZy5ULCBtZXNzYWdlIHN0cmluZywgYWN0dWFsIGludGVyZmFjZXt9
LCBleHBlY3RlZCBpbnRlcmZhY2V7fSkgeworCWlmIGV4cGVjdGVkICE9IGFjdHVhbCB7CisJCXQu
RXJyb3JmKCIlcyBleHBlY3RlZDpcbiclcydcbmdvdDpcbiclcyciLCBtZXNzYWdlLCBleHBlY3Rl
ZCwgYWN0dWFsKQorCX0KK30KKworZnVuYyBhc3NlcnRDb250YWlucyh0ICp0ZXN0aW5nLlQsIG1l
c3NhZ2Ugc3RyaW5nLCBhY3R1YWwgc3RyaW5nLCBzdWJzdHJpbmcgc3RyaW5nKSB7CisJaWYgIXN0
cmluZ3MuQ29udGFpbnMoYWN0dWFsLCBzdWJzdHJpbmcpIHsKKwkJdC5FcnJvcmYoIiVzICVzIHNo
b3VsZCBjb250YWluICVzJyIsIG1lc3NhZ2UsIGFjdHVhbCwgc3Vic3RyaW5nKQorCX0KK30KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL2Jhc2UvaHR0cC5nbyBiL1Rvb2xz
L1Rlc3RzRGFzaGJvYXJkU2VydmVyL2Jhc2UvaHR0cC5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDNmNzE4YWQ1
MTY0NjhhOWJkZTE5ZTdhMDg2NjM3YTQ1Njg1NDZhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
VGVzdHNEYXNoYm9hcmRTZXJ2ZXIvYmFzZS9odHRwLmdvCkBAIC0wLDAgKzEsMTg2IEBACitwYWNr
YWdlIGJhc2UKKworaW1wb3J0ICgKKwkiaHR0cCIKKwkiaW8iCisJImlvL2lvdXRpbCIKKwkibWlt
ZS9tdWx0aXBhcnQiCisJIm9zIgorCSJyZWdleHAiCisJInJ1bnRpbWUvZGVidWciCisJInN0cmNv
bnYiCispCisKKy8vIFBpY2tlZCBhIHZlcnkgbGFyZ2UgbnVtYmVyLiAxME1CIHNob3VsZCBiZSBw
bGVudHkuCisvLyBJbiB0aGVvcnksIHdoZW4gdGhpcyBudW1iZXIgaXMgZXhjZWVkZWQgdGhlIHJl
c3Qgb2YgdGhlIGZvcm0gaXMgd3JpdHRlbiB0byBkaXNrLgorLy8gSW4gcHJhY3RpY2UsIG9uIGFw
cGVuZ2luZSwgeW91IGp1c3QgZ2V0IGEgbmlsIE11bHRpcGFydEZvcm0gYW5kIGFuCisvLyAib3Bl
cmF0aW9uIG5vdCBwZXJtaXR0ZWQiIGVycm9yLgorY29uc3QgKAorCW1heE1lbW9yeUZvckZvcm0g
ICAgICA9IDEwIDw8IDIwCisJbWFzdGVyUGFyYW1ldGVyICAgICAgID0gIm1hc3RlciIKKwlidWls
ZGVyUGFyYW1ldGVyICAgICAgPSAiYnVpbGRlciIKKwlmaWxlUGFyYW1ldGVyICAgICAgICAgPSAi
ZmlsZSIKKwluYW1lUGFyYW1ldGVyICAgICAgICAgPSAibmFtZSIKKwl0ZXN0VHlwZVBhcmFtZXRl
ciAgICAgPSAidGVzdHR5cGUiCisJbGltaXRQYXJhbWV0ZXIgICAgICAgID0gImxpbWl0IgorCXRl
c3RMaXN0SnNvblBhcmFtZXRlciA9ICJ0ZXN0bGlzdGpzb24iCisJa2V5UGFyYW1ldGVyICAgICAg
ICAgID0gImtleSIKKwljYWxsYmFja1BhcmFtZXRlciAgICAgPSAiY2FsbGJhY2siCispCisKK3R5
cGUgVGVzdEZpbGVRdWVyeURhdGEgc3RydWN0IHsKKwlCdWlsZGVyICAgICAgc3RyaW5nCisJTWFz
dGVyICAgICAgIHN0cmluZworCVRlc3RUeXBlICAgICBzdHJpbmcKKwlDYWxsYmFjayAgICAgc3Ry
aW5nCisJTmFtZSAgICAgICAgIHN0cmluZworCUtleSAgICAgICAgICBzdHJpbmcKKwlMaW1pdCAg
ICAgICAgaW50CisJVGVzdExpc3RKc29uIGJvb2wKK30KKwordHlwZSBVcGxvYWRGb3JtRGF0YSBz
dHJ1Y3QgeworCUJ1aWxkZXIgIHN0cmluZworCU1hc3RlciAgIHN0cmluZworCVRlc3RUeXBlIHN0
cmluZworCUZpbGVzICAgIFtdKm11bHRpcGFydC5GaWxlSGVhZGVyCit9CisKK2Z1bmMgc2VydmVI
dG1sKHdyaXRlciBodHRwLlJlc3BvbnNlV3JpdGVyLCBzdGF0dXMgaW50LCBodG1sIC4uLnN0cmlu
Zykgb3MuRXJyb3IgeworCXdyaXRlci5IZWFkZXIoKS5TZXQoIkNvbnRlbnQtVHlwZSIsICJ0ZXh0
L2h0bWwiKQorCXdyaXRlci5Xcml0ZUhlYWRlcihzdGF0dXMpCisJZm9yIF8sIHN0ciA6PSByYW5n
ZSBodG1sIHsKKwkJaWYgXywgZXJyIDo9IGlvLldyaXRlU3RyaW5nKHdyaXRlciwgc3RyKTsgZXJy
ICE9IG5pbCB7CisJCQlyZXR1cm4gZXJyCisJCX0KKwl9CisJcmV0dXJuIG5pbAorfQorCitmdW5j
IFNlcnZlNDAzKHdyaXRlciBodHRwLlJlc3BvbnNlV3JpdGVyLCBodG1sIC4uLnN0cmluZykgb3Mu
RXJyb3IgeworCXJldHVybiBzZXJ2ZUh0bWwod3JpdGVyLCA0MDMsIGh0bWwuLi4pCit9CisKK2Z1
bmMgU2VydmU0MDQod3JpdGVyIGh0dHAuUmVzcG9uc2VXcml0ZXIsIGh0bWwgLi4uc3RyaW5nKSBv
cy5FcnJvciB7CisJcmV0dXJuIHNlcnZlSHRtbCh3cml0ZXIsIDQwNCwgaHRtbC4uLikKK30KKwor
ZnVuYyBTZXJ2ZTUwMCh3cml0ZXIgaHR0cC5SZXNwb25zZVdyaXRlciwgaHRtbCAuLi5zdHJpbmcp
IG9zLkVycm9yIHsKKwlzZXJ2ZUh0bWxFcnIgOj0gc2VydmVIdG1sKHdyaXRlciwgNTAwLCBodG1s
Li4uKQorCV8sIGRlYnVnU3RhY2tFcnIgOj0gaW8uV3JpdGVTdHJpbmcod3JpdGVyLCAiXG4iK3N0
cmluZyhkZWJ1Zy5TdGFjaygpKSkKKwlyZXR1cm4gTXVsdGlFcnJvcihzZXJ2ZUh0bWxFcnIsIGRl
YnVnU3RhY2tFcnIpCit9CisKK2Z1bmMgU2VydmUyMDAod3JpdGVyIGh0dHAuUmVzcG9uc2VXcml0
ZXIsIGh0bWwgLi4uc3RyaW5nKSBvcy5FcnJvciB7CisJcmV0dXJuIHNlcnZlSHRtbCh3cml0ZXIs
IDIwMCwgaHRtbC4uLikKK30KKworZnVuYyBQYXJzZVRlc3RGaWxlUXVlcnlEYXRhKHJlcXVlc3Qg
Kmh0dHAuUmVxdWVzdCkgKFRlc3RGaWxlUXVlcnlEYXRhLCBvcy5FcnJvcikgeworCXZhciBkYXRh
IFRlc3RGaWxlUXVlcnlEYXRhCisKKwlxdWVyeVBhcmFtZXRlcnMgOj0gcmVxdWVzdC5VUkwuUXVl
cnkoKQorCWNhbGxiYWNrIDo9IHF1ZXJ5UGFyYW1ldGVycy5HZXQoY2FsbGJhY2tQYXJhbWV0ZXIp
CisJaWYgY2FsbGJhY2sgIT0gIiIgeworCQlpZiBtYXRjaGVkLCBfIDo9IHJlZ2V4cC5NYXRjaFN0
cmluZygiXltBLVphLXowLTlfXSskIiwgY2FsbGJhY2spOyAhbWF0Y2hlZCB7CisJCQlyZXR1cm4g
ZGF0YSwgRXJyb3IoIkludmFsaWQgY2FsbGJhY2sgbmFtZTogIiArIGNhbGxiYWNrKQorCQl9CisJ
fQorCisJbGltaXQgOj0gMTAwCisJaWYgcXVlcnlQYXJhbWV0ZXJzLkdldChsaW1pdFBhcmFtZXRl
cikgIT0gIiIgeworCQlpZiBudW1iZXIsIGVyciA6PSBzdHJjb252LkF0b2kocXVlcnlQYXJhbWV0
ZXJzLkdldChsaW1pdFBhcmFtZXRlcikpOyBlcnIgPT0gbmlsIHsKKwkJCWxpbWl0ID0gbnVtYmVy
CisJCX0KKwl9CisKKwkvLyBGSVhNRTogRGlzYWxsb3cgc3VwcGx5aW5nIGtleVBhcmFtZXRlciB3
aXRoIHBhcmFtZXRlcnMgb3RoZXIgdGhhbiBjYWxsYmFja1BhcmFtZXRlciBhbmQgdGVzdExpc3RK
c29uUGFyYW1ldGVyCisJcmV0dXJuIFRlc3RGaWxlUXVlcnlEYXRheworCQlCdWlsZGVyOiAgICAg
IHF1ZXJ5UGFyYW1ldGVycy5HZXQoYnVpbGRlclBhcmFtZXRlciksCisJCU1hc3RlcjogICAgICAg
cXVlcnlQYXJhbWV0ZXJzLkdldChtYXN0ZXJQYXJhbWV0ZXIpLAorCQlUZXN0VHlwZTogICAgIHF1
ZXJ5UGFyYW1ldGVycy5HZXQodGVzdFR5cGVQYXJhbWV0ZXIpLAorCQlDYWxsYmFjazogICAgIGNh
bGxiYWNrLAorCQlOYW1lOiAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycy5HZXQobmFtZVBhcmFtZXRl
ciksCisJCUtleTogICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzLkdldChrZXlQYXJhbWV0ZXIpLAor
CQlMaW1pdDogICAgICAgIGxpbWl0LAorCQlUZXN0TGlzdEpzb246IHF1ZXJ5UGFyYW1ldGVycy5H
ZXQodGVzdExpc3RKc29uUGFyYW1ldGVyKSAhPSAiIiwKKwl9LCBuaWwKK30KKworZnVuYyBQYXJz
ZVVwbG9hZEZvcm1EYXRhKHJlcXVlc3QgKmh0dHAuUmVxdWVzdCkgKFVwbG9hZEZvcm1EYXRhLCBv
cy5FcnJvcikgeworCXZhciBmb3JtRGF0YSBVcGxvYWRGb3JtRGF0YQorCWlmIGVyciA6PSByZXF1
ZXN0LlBhcnNlTXVsdGlwYXJ0Rm9ybShtYXhNZW1vcnlGb3JGb3JtKTsgZXJyICE9IG5pbCB7CisJ
CXJldHVybiBmb3JtRGF0YSwgRXJyb3IoZXJyKQorCX0KKworCWZvcm0gOj0gcmVxdWVzdC5NdWx0
aXBhcnRGb3JtCisJaWYgZm9ybSA9PSBuaWwgeworCQlyZXR1cm4gZm9ybURhdGEsIEVycm9yKCJG
QUlMOiBtaXNzaW5nIHBvc3QgZGF0YS4iKQorCX0KKworCWJ1aWxkZXIgOj0gZm9ybS5WYWx1ZVti
dWlsZGVyUGFyYW1ldGVyXQorCWlmIGJ1aWxkZXIgPT0gbmlsIHx8IGJ1aWxkZXJbMF0gPT0gIiIg
eworCQlyZXR1cm4gZm9ybURhdGEsIEVycm9yKCJGQUlMOiBtaXNzaW5nICdidWlsZGVyJyBxdWVy
eSBwYXJhbWV0ZXIuIikKKwl9CisKKwltYXN0ZXIgOj0gZm9ybS5WYWx1ZVttYXN0ZXJQYXJhbWV0
ZXJdCisJaWYgbWFzdGVyID09IG5pbCB8fCBtYXN0ZXJbMF0gPT0gIiIgeworCQlyZXR1cm4gZm9y
bURhdGEsIEVycm9yKCJGQUlMOiBtaXNzaW5nICdtYXN0ZXInIHF1ZXJ5IHBhcmFtZXRlci4iKQor
CX0KKworCXRlc3RUeXBlIDo9IGZvcm0uVmFsdWVbdGVzdFR5cGVQYXJhbWV0ZXJdCisJaWYgdGVz
dFR5cGUgPT0gbmlsIHx8IHRlc3RUeXBlWzBdID09ICIiIHsKKwkJcmV0dXJuIGZvcm1EYXRhLCBF
cnJvcigiRkFJTDogbWlzc2luZyAndGVzdHR5cGUnIHF1ZXJ5IHBhcmFtZXRlci4iKQorCX0KKwor
CWZpbGVzIDo9IGZvcm0uRmlsZVtmaWxlUGFyYW1ldGVyXQorCWlmIGZpbGVzID09IG5pbCB7CisJ
CXJldHVybiBmb3JtRGF0YSwgRXJyb3IoIkZBSUw6IG1pc3NpbmcgJ2ZpbGUnIHBvc3QgZGF0YS4i
KQorCX0KKworCWZvcm1EYXRhID0gVXBsb2FkRm9ybURhdGF7CisJCUJ1aWxkZXI6ICBidWlsZGVy
WzBdLAorCQlNYXN0ZXI6ICAgbWFzdGVyWzBdLAorCQlUZXN0VHlwZTogdGVzdFR5cGVbMF0sCisJ
CUZpbGVzOiAgICBmaWxlcywKKwl9CisJcmV0dXJuIGZvcm1EYXRhLCBuaWwKK30KKworZnVuYyBT
ZXJ2ZUpzb24od3JpdGVyIGh0dHAuUmVzcG9uc2VXcml0ZXIsIGpzb25SZWFkZXIgaW8uUmVhZGVy
LCBjYWxsYmFjayBzdHJpbmcpIG9zLkVycm9yIHsKKwlqc29uQnl0ZXMsIGVyciA6PSBpb3V0aWwu
UmVhZEFsbChqc29uUmVhZGVyKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gRXJyb3IoZXJy
KQorCX0KKworCXdyaXRlci5IZWFkZXIoKS5TZXQoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlv
bi9qc29uIikKKworCWlzUHVyZUpzb24gOj0ganNvbkJ5dGVzWzBdID09ICd7JyAmJiBqc29uQnl0
ZXNbbGVuKGpzb25CeXRlcyktMV0gPT0gJ30nCisJaWYgY2FsbGJhY2sgPT0gIiIgeworCQlpZiAh
aXNQdXJlSnNvbiB7CisJCQlqc29uQnl0ZXMgPSBTdHJpcEpzb25wQ2FsbGJhY2soanNvbkJ5dGVz
KQorCQl9CisJCV8sIGVyciA6PSBpby5Xcml0ZVN0cmluZyh3cml0ZXIsIHN0cmluZyhqc29uQnl0
ZXMpKQorCQlyZXR1cm4gRXJyb3IoZXJyKQorCX0KKworCWlmIGlzUHVyZUpzb24geworCQlpZiBf
LCBlcnIgOj0gaW8uV3JpdGVTdHJpbmcod3JpdGVyLCBjYWxsYmFjaysiKCIpOyBlcnIgIT0gbmls
IHsKKwkJCXJldHVybiBFcnJvcihlcnIpCisJCX0KKwl9IGVsc2UgeworCQljYWxsYmFja1JlZ2V4
cCA6PSByZWdleHAuTXVzdENvbXBpbGUoIl5bQS1aYS16MC05X10rWyhdIikKKwkJanNvbkJ5dGVz
ID0gY2FsbGJhY2tSZWdleHAuUmVwbGFjZUFsbChqc29uQnl0ZXMsIFtdYnl0ZShjYWxsYmFjaysi
KCIpKQorCX0KKworCWlmIF8sIGVyciA6PSBpby5Xcml0ZVN0cmluZyh3cml0ZXIsIHN0cmluZyhq
c29uQnl0ZXMpKTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBFcnJvcihlcnIpCisJfQorCisJaWYg
aXNQdXJlSnNvbiB7CisJCWlmIF8sIGVyciA6PSBpby5Xcml0ZVN0cmluZyh3cml0ZXIsICIpIik7
IGVyciAhPSBuaWwgeworCQkJcmV0dXJuIEVycm9yKGVycikKKwkJfQorCX0KKworCXJldHVybiBu
aWwKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL2Jhc2UvaHR0cF90
ZXN0LmdvIGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvYmFzZS9odHRwX3Rlc3QuZ28KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uY2M4YjBmNTg0N2JjZTU0YzNhODVjNGU5OWNhNzU0OWNiOWFiMjlkYQotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL2Jhc2UvaHR0cF90ZXN0Lmdv
CkBAIC0wLDAgKzEsMjMwIEBACitwYWNrYWdlIGJhc2UKKworaW1wb3J0ICgKKwkiYnl0ZXMiCisJ
ImZtdCIKKwkiaHR0cCIKKwkibWltZS9tdWx0aXBhcnQiCisJIm9zIgorCSJzdHJpbmdzIgorCSJ0
ZXN0aW5nIgorKQorCitmdW5jIG5ld01vY2tIdHRwUmVzcG9uc2VXcml0ZXIoKSAqbW9ja0h0dHBS
ZXNwb25zZVdyaXRlciB7CisJbW9ja1dyaXRlciA6PSBuZXcobW9ja0h0dHBSZXNwb25zZVdyaXRl
cikKKwltb2NrV3JpdGVyLmhlYWRlciA9IG1ha2UoaHR0cC5IZWFkZXIpCisJbW9ja1dyaXRlci5i
dWZmZXIgPSBuZXcoYnl0ZXMuQnVmZmVyKQorCXJldHVybiBtb2NrV3JpdGVyCit9CisKK3R5cGUg
bW9ja0h0dHBSZXNwb25zZVdyaXRlciBzdHJ1Y3QgeworCWhlYWRlciBodHRwLkhlYWRlcgorCWJ1
ZmZlciAqYnl0ZXMuQnVmZmVyCisJc3RhdHVzIGludAorfQorCitmdW5jICh3ICptb2NrSHR0cFJl
c3BvbnNlV3JpdGVyKSBIZWFkZXIoKSBodHRwLkhlYWRlciB7CisJcmV0dXJuIHcuaGVhZGVyCit9
CisKK2Z1bmMgKHcgKm1vY2tIdHRwUmVzcG9uc2VXcml0ZXIpIFdyaXRlKGRhdGEgW11ieXRlKSAo
aW50LCBvcy5FcnJvcikgeworCXJldHVybiB3LmJ1ZmZlci5Xcml0ZShkYXRhKQorfQorCitmdW5j
ICh3ICptb2NrSHR0cFJlc3BvbnNlV3JpdGVyKSBXcml0ZUhlYWRlcihjb2RlIGludCkgeworCXcu
c3RhdHVzID0gY29kZQorfQorCitmdW5jICh3IG1vY2tIdHRwUmVzcG9uc2VXcml0ZXIpIFN0cmlu
ZygpIHN0cmluZyB7CisJcmV0dXJuIHN0cmluZyh3LmJ1ZmZlci5CeXRlcygpKQorfQorCitmdW5j
IFRlc3RTZXJ2ZTQwNCh0ICp0ZXN0aW5nLlQpIHsKKwltb2NrV3JpdGVyIDo9IG5ld01vY2tIdHRw
UmVzcG9uc2VXcml0ZXIoKQorCVNlcnZlNDA0KG1vY2tXcml0ZXIsICJmb28iLCAiYmFyIikKKwlh
c3NlcnRFcXVhbCh0LCAiU2hvdWxkIHdyaXRlIG91dCBmdWxsIGlucHV0LiIsIG1vY2tXcml0ZXIu
U3RyaW5nKCksICJmb29iYXIiKQorCWFzc2VydEVxdWFsKHQsICJTdGF0dXMgc2hvdWxkIGJlIDQw
NC4iLCBtb2NrV3JpdGVyLnN0YXR1cywgNDA0KQorfQorCitmdW5jIFRlc3RTZXJ2ZTUwMCh0ICp0
ZXN0aW5nLlQpIHsKKwltb2NrV3JpdGVyIDo9IG5ld01vY2tIdHRwUmVzcG9uc2VXcml0ZXIoKQor
CVNlcnZlNTAwKG1vY2tXcml0ZXIsICJmb28iLCAiYmFyIikKKwlhc3NlcnRDb250YWlucyh0LCAi
U2hvdWxkIHdyaXRlIG91dCBmdWxsIGlucHV0LiIsIG1vY2tXcml0ZXIuU3RyaW5nKCksICJmb29i
YXIiKQorCWFzc2VydEVxdWFsKHQsICJTdGF0dXMgc2hvdWxkIGJlIDUwMC4iLCBtb2NrV3JpdGVy
LnN0YXR1cywgNTAwKQorfQorCitmdW5jIFRlc3RQYXJzZVRlc3RGaWxlUXVlcnlEYXRhKHQgKnRl
c3RpbmcuVCkgeworCXJlcXVlc3QsIF8gOj0gaHR0cC5OZXdSZXF1ZXN0KCJHRVQiLCAiaHR0cDov
L2Zvby5jb20vdGVzdGZpbGUiLCBuaWwpCisJaWYgcmVzdWx0LCBlcnIgOj0gUGFyc2VUZXN0Rmls
ZVF1ZXJ5RGF0YShyZXF1ZXN0KTsgZXJyICE9IG5pbCB7CisJCXQuRXJyb3JmKGVyci5TdHJpbmco
KSkKKwl9IGVsc2UgeworCQlhc3NlcnRFcXVhbCh0LCAiQnVpbGRlciBzaG91bGQgYmUgZW1wdHku
IiwgcmVzdWx0LkJ1aWxkZXIsICIiKQorCQlhc3NlcnRFcXVhbCh0LCAiTWFzdGVyIHNob3VsZCBi
ZSBlbXB0eS4iLCByZXN1bHQuTWFzdGVyLCAiIikKKwkJYXNzZXJ0RXF1YWwodCwgIlRlc3RUeXBl
IHNob3VsZCBiZSBlbXB0eS4iLCByZXN1bHQuVGVzdFR5cGUsICIiKQorCQlhc3NlcnRFcXVhbCh0
LCAiQ2FsbGJhY2sgc2hvdWxkIGJlIGVtcHR5LiIsIHJlc3VsdC5DYWxsYmFjaywgIiIpCisJCWFz
c2VydEVxdWFsKHQsICJOYW1lIHNob3VsZCBiZSBlbXB0eS4iLCByZXN1bHQuTmFtZSwgIiIpCisJ
CWFzc2VydEVxdWFsKHQsICJLZXkgc2hvdWxkIGJlIGVtcHR5LiIsIHJlc3VsdC5LZXksICIiKQor
CQlhc3NlcnRFcXVhbCh0LCAiTGltaXQgc2hvdWxkIGJlIDEwMC4iLCByZXN1bHQuTGltaXQsIDEw
MCkKKwkJYXNzZXJ0RXF1YWwodCwgIlRlc3RMaXN0SnNvbiBzaG91bGQgYmUgZmFsc2UuIiwgcmVz
dWx0LlRlc3RMaXN0SnNvbiwgZmFsc2UpCisJfQorCisJcmVxdWVzdCwgXyA9IGh0dHAuTmV3UmVx
dWVzdCgiR0VUIiwgImh0dHA6Ly9mb28uY29tL3Rlc3RmaWxlP2J1aWxkZXI9bXlidWlsZGVyJm1h
c3Rlcj1teW1hc3RlciZ0ZXN0dHlwZT1teXRlc3R0eXBlJm5hbWU9bXluYW1lLmpzb24ma2V5PW15
a2V5JmNhbGxiYWNrPW15Y2FsbGJhY2smbGltaXQ9NSZ0ZXN0bGlzdGpzb249dHJ1ZSIsIG5pbCkK
KwlpZiByZXN1bHQsIGVyciA6PSBQYXJzZVRlc3RGaWxlUXVlcnlEYXRhKHJlcXVlc3QpOyBlcnIg
IT0gbmlsIHsKKwkJdC5FcnJvcmYoZXJyLlN0cmluZygpKQorCX0gZWxzZSB7CisJCWFzc2VydEVx
dWFsKHQsICJCdWlsZGVyOiIsIHJlc3VsdC5CdWlsZGVyLCAibXlidWlsZGVyIikKKwkJYXNzZXJ0
RXF1YWwodCwgIk1hc3RlcjoiLCByZXN1bHQuTWFzdGVyLCAibXltYXN0ZXIiKQorCQlhc3NlcnRF
cXVhbCh0LCAiVGVzdFR5cGU6IiwgcmVzdWx0LlRlc3RUeXBlLCAibXl0ZXN0dHlwZSIpCisJCWFz
c2VydEVxdWFsKHQsICJDYWxsYmFjazoiLCByZXN1bHQuQ2FsbGJhY2ssICJteWNhbGxiYWNrIikK
KwkJYXNzZXJ0RXF1YWwodCwgIk5hbWU6IiwgcmVzdWx0Lk5hbWUsICJteW5hbWUuanNvbiIpCisJ
CWFzc2VydEVxdWFsKHQsICJLZXk6IiwgcmVzdWx0LktleSwgIm15a2V5IikKKwkJYXNzZXJ0RXF1
YWwodCwgIkxpbWl0OiIsIHJlc3VsdC5MaW1pdCwgNSkKKwkJYXNzZXJ0RXF1YWwodCwgIlRlc3RM
aXN0SnNvbjoiLCByZXN1bHQuVGVzdExpc3RKc29uLCB0cnVlKQorCX0KKworfQorCitmdW5jIFRl
c3RQYXJzZVVwbG9hZEZvcm1EYXRhKHQgKnRlc3RpbmcuVCkgeworCWZpbGVEYXRhIDo9IGAKKy0t
TXlCb3VuZGFyeQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaWxlIjsg
ZmlsZW5hbWU9ImZpcnN0ZmlsZS50eHQiCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworRklS
U1QtRklMRS1DT05URU5UUworLS1NeUJvdW5kYXJ5CitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3Jt
LWRhdGE7IG5hbWU9ImZpbGUiOyBmaWxlbmFtZT0ic2Vjb25kZmlsZS50eHQiCitDb250ZW50LVR5
cGU6IHRleHQvcGxhaW4KKworU0VDT05ELUZJTEUtQ09OVEVOVFMKK2AKKworCXZhbHVlIDo9IGAt
LU15Qm91bmRhcnkKK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iJXMiCisK
KyVzCitgCisKKwlkYXRhRW5kIDo9ICItLSIgKyBmb3JtQm91bmRhcnkgKyAiXG4iCisJYnVpbGRl
ciA6PSBmbXQuU3ByaW50Zih2YWx1ZSwgYnVpbGRlclBhcmFtZXRlciwgIm15QnVpbGRlciIpCisJ
bWFzdGVyIDo9IGZtdC5TcHJpbnRmKHZhbHVlLCBtYXN0ZXJQYXJhbWV0ZXIsICJteU1hc3RlciIp
CisJdGVzdFR5cGUgOj0gZm10LlNwcmludGYodmFsdWUsIHRlc3RUeXBlUGFyYW1ldGVyLCAibXlU
ZXN0VHlwZSIpCisKKwlkYXRhIDo9IGZpbGVEYXRhICsgYnVpbGRlciArIG1hc3RlciArIHRlc3RU
eXBlICsgZGF0YUVuZAorCXJlcXVlc3QgOj0gbmV3UG9zdFJlcXVlc3QodCwgZGF0YSkKKwlpZiBy
ZXN1bHQsIGVyciA6PSBQYXJzZVVwbG9hZEZvcm1EYXRhKHJlcXVlc3QpOyBlcnIgIT0gbmlsIHsK
KwkJdC5FcnJvcmYoZXJyLlN0cmluZygpKQorCX0gZWxzZSB7CisJCWFzc2VydEVxdWFsKHQsICJC
dWlsZGVyOiIsIHJlc3VsdC5CdWlsZGVyLCAibXlCdWlsZGVyIikKKwkJYXNzZXJ0RXF1YWwodCwg
Ik1hc3RlcjoiLCByZXN1bHQuTWFzdGVyLCAibXlNYXN0ZXIiKQorCQlhc3NlcnRFcXVhbCh0LCAi
VGVzdFR5cGU6IiwgcmVzdWx0LlRlc3RUeXBlLCAibXlUZXN0VHlwZSIpCisJCWFzc2VydEVxdWFs
KHQsICJOdW1iZXIgb2YgZmlsZXM6IiwgbGVuKHJlc3VsdC5GaWxlcyksIDIpCisJfQorCisJZGF0
YSA9IGJ1aWxkZXIgKyBtYXN0ZXIgKyB0ZXN0VHlwZSArIGRhdGFFbmQKKwlyZXF1ZXN0ID0gbmV3
UG9zdFJlcXVlc3QodCwgZGF0YSkKKwlpZiBfLCBlcnIgOj0gUGFyc2VVcGxvYWRGb3JtRGF0YShy
ZXF1ZXN0KTsgZXJyICE9IG5pbCB7CisJCWFzc2VydENvbnRhaW5zKHQsICJFcnJvciBtZXNzYWdl
OiIsIGVyci5TdHJpbmcoKSwgZmlsZVBhcmFtZXRlcikKKwl9IGVsc2UgeworCQl0LkVycm9yZigi
RmlsZXMgc2hvdWxkIGJlIHJlcXVpcmVkLiIpCisJfQorCisJZGF0YSA9IGZpbGVEYXRhICsgbWFz
dGVyICsgdGVzdFR5cGUgKyBkYXRhRW5kCisJcmVxdWVzdCA9IG5ld1Bvc3RSZXF1ZXN0KHQsIGRh
dGEpCisJaWYgXywgZXJyIDo9IFBhcnNlVXBsb2FkRm9ybURhdGEocmVxdWVzdCk7IGVyciAhPSBu
aWwgeworCQlhc3NlcnRDb250YWlucyh0LCAiRXJyb3IgbWVzc2FnZToiLCBlcnIuU3RyaW5nKCks
IGJ1aWxkZXJQYXJhbWV0ZXIpCisJfSBlbHNlIHsKKwkJdC5FcnJvcmYoIkJ1aWxkZXIgc2hvdWxk
IGJlIHJlcXVpcmVkLiIpCisJfQorCisJZGF0YSA9IGZpbGVEYXRhICsgYnVpbGRlciArIHRlc3RU
eXBlICsgZGF0YUVuZAorCXJlcXVlc3QgPSBuZXdQb3N0UmVxdWVzdCh0LCBkYXRhKQorCWlmIF8s
IGVyciA6PSBQYXJzZVVwbG9hZEZvcm1EYXRhKHJlcXVlc3QpOyBlcnIgIT0gbmlsIHsKKwkJYXNz
ZXJ0Q29udGFpbnModCwgIkVycm9yIG1lc3NhZ2U6IiwgZXJyLlN0cmluZygpLCBtYXN0ZXJQYXJh
bWV0ZXIpCisJfSBlbHNlIHsKKwkJdC5FcnJvcmYoIk1hc3RlciBzaG91bGQgYmUgcmVxdWlyZWQu
IikKKwl9CisKKwlkYXRhID0gZmlsZURhdGEgKyBidWlsZGVyICsgbWFzdGVyICsgZGF0YUVuZAor
CXJlcXVlc3QgPSBuZXdQb3N0UmVxdWVzdCh0LCBkYXRhKQorCWlmIF8sIGVyciA6PSBQYXJzZVVw
bG9hZEZvcm1EYXRhKHJlcXVlc3QpOyBlcnIgIT0gbmlsIHsKKwkJYXNzZXJ0Q29udGFpbnModCwg
IkVycm9yIG1lc3NhZ2U6IiwgZXJyLlN0cmluZygpLCB0ZXN0VHlwZVBhcmFtZXRlcikKKwl9IGVs
c2UgeworCQl0LkVycm9yZigiVGVzdFR5cGUgc2hvdWxkIGJlIHJlcXVpcmVkLiIpCisJfQorCisJ
ZGF0YSA9IGZpbGVEYXRhICsgZm10LlNwcmludGYodmFsdWUsIGJ1aWxkZXJQYXJhbWV0ZXIsICIi
KSArIG1hc3RlciArIHRlc3RUeXBlICsgZGF0YUVuZAorCXJlcXVlc3QgPSBuZXdQb3N0UmVxdWVz
dCh0LCBkYXRhKQorCWlmIF8sIGVyciA6PSBQYXJzZVVwbG9hZEZvcm1EYXRhKHJlcXVlc3QpOyBl
cnIgIT0gbmlsIHsKKwkJYXNzZXJ0Q29udGFpbnModCwgIkVycm9yIG1lc3NhZ2U6IiwgZXJyLlN0
cmluZygpLCBidWlsZGVyUGFyYW1ldGVyKQorCX0gZWxzZSB7CisJCXQuRXJyb3JmKCJCdWlsZGVy
IHNob3VsZCBiZSBub24tZW1wdHkuIikKKwl9CisKKwlkYXRhID0gZmlsZURhdGEgKyBmbXQuU3By
aW50Zih2YWx1ZSwgbWFzdGVyUGFyYW1ldGVyLCAiIikgKyBidWlsZGVyICsgdGVzdFR5cGUgKyBk
YXRhRW5kCisJcmVxdWVzdCA9IG5ld1Bvc3RSZXF1ZXN0KHQsIGRhdGEpCisJaWYgXywgZXJyIDo9
IFBhcnNlVXBsb2FkRm9ybURhdGEocmVxdWVzdCk7IGVyciAhPSBuaWwgeworCQlhc3NlcnRDb250
YWlucyh0LCAiRXJyb3IgbWVzc2FnZToiLCBlcnIuU3RyaW5nKCksIG1hc3RlclBhcmFtZXRlcikK
Kwl9IGVsc2UgeworCQl0LkVycm9yZigiTWFzdGVyIHNob3VsZCBiZSBub24tZW1wdHkuIikKKwl9
CisKKwlkYXRhID0gZmlsZURhdGEgKyBmbXQuU3ByaW50Zih2YWx1ZSwgdGVzdFR5cGVQYXJhbWV0
ZXIsICIiKSArIG1hc3RlciArIGJ1aWxkZXIgKyBkYXRhRW5kCisJcmVxdWVzdCA9IG5ld1Bvc3RS
ZXF1ZXN0KHQsIGRhdGEpCisJaWYgXywgZXJyIDo9IFBhcnNlVXBsb2FkRm9ybURhdGEocmVxdWVz
dCk7IGVyciAhPSBuaWwgeworCQlhc3NlcnRDb250YWlucyh0LCAiRXJyb3IgbWVzc2FnZToiLCBl
cnIuU3RyaW5nKCksIHRlc3RUeXBlUGFyYW1ldGVyKQorCX0gZWxzZSB7CisJCXQuRXJyb3JmKCJU
ZXN0VHlwZSBzaG91bGQgYmUgbm9uLWVtcHR5LiIpCisJfQorfQorCitmdW5jIG5ld1Bvc3RSZXF1
ZXN0KHQgKnRlc3RpbmcuVCwgcG9zdERhdGEgc3RyaW5nKSAqaHR0cC5SZXF1ZXN0IHsKKwlyZXF1
ZXN0LCBfIDo9IGh0dHAuTmV3UmVxdWVzdCgiUE9TVCIsICJodHRwOi8vZm9vLmNvbS9iYXIuaHRt
bCIsIHN0cmluZ3MuTmV3UmVhZGVyKHBvc3REYXRhKSkKKwlyZXF1ZXN0LkhlYWRlci5TZXQoIkNv
bnRlbnQtVHlwZSIsICJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK2Zvcm1Cb3VuZGFy
eSkKKwlyZXR1cm4gcmVxdWVzdAorfQorCitjb25zdCBmb3JtQm91bmRhcnkgPSAiTXlCb3VuZGFy
eSIKKworZnVuYyBuZXdGb3JtKHQgKnRlc3RpbmcuVCwgZGF0YSBzdHJpbmcpICptdWx0aXBhcnQu
Rm9ybSB7CisJcmVhZGVyIDo9IG11bHRpcGFydC5OZXdSZWFkZXIoYnl0ZXMuTmV3QnVmZmVyU3Ry
aW5nKGRhdGEpLCBmb3JtQm91bmRhcnkpCisJZm9ybSwgZXJyIDo9IHJlYWRlci5SZWFkRm9ybSgy
NSkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJdC5GYXRhbCgiUmVhZEZvcm06IiwgZXJyKQorCX0KKwly
ZXR1cm4gZm9ybQorfQorCitmdW5jIFRlc3RTZXJ2ZUpzb24odCAqdGVzdGluZy5UKSB7CisJLy8g
RklYTUU6IFRlc3QgYSByZWFkZXIgdGhhdCByZXR1cm5zIGFuIEVycm9yLgorCW1vY2tXcml0ZXIg
Oj0gbmV3TW9ja0h0dHBSZXNwb25zZVdyaXRlcigpCisJanNvblN0cmluZyA6PSBgeyJmb28iOiJi
YXIifWAKKwljYWxsYmFjayA6PSAiIgorCVNlcnZlSnNvbihtb2NrV3JpdGVyLCBzdHJpbmdzLk5l
d1JlYWRlcihqc29uU3RyaW5nKSwgY2FsbGJhY2spCisJYXNzZXJ0RXF1YWwodCwgIkpTT04gb3V0
cHV0OiIsIG1vY2tXcml0ZXIuU3RyaW5nKCksIGpzb25TdHJpbmcpCisJYXNzZXJ0RXF1YWwodCwg
IlN0YXR1cyBjb2RlOiIsIG1vY2tXcml0ZXIuc3RhdHVzLCAwKQorCWFzc2VydEVxdWFsKHQsICJD
b250ZW50LVR5cGU6IiwgbW9ja1dyaXRlci5IZWFkZXIoKS5HZXQoIkNvbnRlbnQtVHlwZSIpLCAi
YXBwbGljYXRpb24vanNvbiIpCisKKwltb2NrV3JpdGVyID0gbmV3TW9ja0h0dHBSZXNwb25zZVdy
aXRlcigpCisJanNvblN0cmluZyA9IGB7ImZvbyI6ImJhciJ9YAorCWNhbGxiYWNrID0gImRvRm9v
IgorCVNlcnZlSnNvbihtb2NrV3JpdGVyLCBzdHJpbmdzLk5ld1JlYWRlcihqc29uU3RyaW5nKSwg
Y2FsbGJhY2spCisJYXNzZXJ0RXF1YWwodCwgIkpTT04gb3V0cHV0OiIsIG1vY2tXcml0ZXIuU3Ry
aW5nKCksICJkb0ZvbygiK2pzb25TdHJpbmcrIikiKQorCWFzc2VydEVxdWFsKHQsICJTdGF0dXMg
Y29kZToiLCBtb2NrV3JpdGVyLnN0YXR1cywgMCkKKwlhc3NlcnRFcXVhbCh0LCAiQ29udGVudC1U
eXBlOiIsIG1vY2tXcml0ZXIuSGVhZGVyKCkuR2V0KCJDb250ZW50LVR5cGUiKSwgImFwcGxpY2F0
aW9uL2pzb24iKQorCisJbW9ja1dyaXRlciA9IG5ld01vY2tIdHRwUmVzcG9uc2VXcml0ZXIoKQor
CWpzb25TdHJpbmcgPSBgZG9CYXIoeyJmb28iOiJiYXIifSlgCisJY2FsbGJhY2sgPSAiIgorCVNl
cnZlSnNvbihtb2NrV3JpdGVyLCBzdHJpbmdzLk5ld1JlYWRlcihqc29uU3RyaW5nKSwgY2FsbGJh
Y2spCisJYXNzZXJ0RXF1YWwodCwgIkpTT04gb3V0cHV0OiIsIG1vY2tXcml0ZXIuU3RyaW5nKCks
IGB7ImZvbyI6ImJhciJ9YCkKKwlhc3NlcnRFcXVhbCh0LCAiU3RhdHVzIGNvZGU6IiwgbW9ja1dy
aXRlci5zdGF0dXMsIDApCisJYXNzZXJ0RXF1YWwodCwgIkNvbnRlbnQtVHlwZToiLCBtb2NrV3Jp
dGVyLkhlYWRlcigpLkdldCgiQ29udGVudC1UeXBlIiksICJhcHBsaWNhdGlvbi9qc29uIikKKwor
CW1vY2tXcml0ZXIgPSBuZXdNb2NrSHR0cFJlc3BvbnNlV3JpdGVyKCkKKwlqc29uU3RyaW5nID0g
YGRvQmFyKHsiZm9vIjoiYmFyIn0pYAorCWNhbGxiYWNrID0gImRvRm9vIgorCVNlcnZlSnNvbiht
b2NrV3JpdGVyLCBzdHJpbmdzLk5ld1JlYWRlcihqc29uU3RyaW5nKSwgY2FsbGJhY2spCisJYXNz
ZXJ0RXF1YWwodCwgIkpTT04gb3V0cHV0OiIsIG1vY2tXcml0ZXIuU3RyaW5nKCksIGBkb0Zvbyh7
ImZvbyI6ImJhciJ9KWApCisJYXNzZXJ0RXF1YWwodCwgIlN0YXR1cyBjb2RlOiIsIG1vY2tXcml0
ZXIuc3RhdHVzLCAwKQorCWFzc2VydEVxdWFsKHQsICJDb250ZW50LVR5cGU6IiwgbW9ja1dyaXRl
ci5IZWFkZXIoKS5HZXQoIkNvbnRlbnQtVHlwZSIpLCAiYXBwbGljYXRpb24vanNvbiIpCit9CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9iYXNlL2pzb24uZ28gYi9Ub29s
cy9UZXN0c0Rhc2hib2FyZFNlcnZlci9iYXNlL2pzb24uZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTNkYzc0MjFm
ZTg1Y2JhOGE3YzY2MTdhMDIyMmQ2YmMwN2MxZDQwYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1Rlc3RzRGFzaGJvYXJkU2VydmVyL2Jhc2UvanNvbi5nbwpAQCAtMCwwICsxLDMxNyBAQAorcGFj
a2FnZSBiYXNlCisKK2ltcG9ydCAoCisJImJ5dGVzIgorCSJmbXQiCisJImlvIgorCSJqc29uIgor
CSJtaW1lL211bHRpcGFydCIKKwkicmVnZXhwIgorCSJzdHJpbmdzIgorCSJvcyIKKykKKworY29u
c3QgVEVTVFNfS0VZID0gInRlc3RzIgorY29uc3QgVElNRVNfS0VZID0gInRpbWVzIgorY29uc3Qg
UkVTVUxUU19LRVkgPSAicmVzdWx0cyIKK2NvbnN0IFZFUlNJT05fS0VZID0gInZlcnNpb24iCitj
b25zdCBDVVJSRU5UX0pTT05fVkVSU0lPTiA9IDQKKwordHlwZSBSZXN1bHRzSnNvbiBtYXBbc3Ry
aW5nXWludGVyZmFjZXt9CisKK2Z1bmMgKG0gUmVzdWx0c0pzb24pIEJ1aWxkZXIoKSBzdHJpbmcg
eworCWZvciBrIDo9IHJhbmdlIG0geworCQlpZiBrICE9IFZFUlNJT05fS0VZIHsKKwkJCXJldHVy
biBrCisJCX0KKwl9CisJcmV0dXJuICIiCit9CisKK2Z1bmMgKG0gUmVzdWx0c0pzb24pIFZlcnNp
b24oKSBpbnQgeworCWZvciBrLCB2IDo9IHJhbmdlIG0geworCQlpZiBrID09IFZFUlNJT05fS0VZ
IHsKKwkJCXJldHVybiBpbnQodi4oZmxvYXQ2NCkpCisJCX0KKwl9CisJcmV0dXJuIDAKK30KKwor
ZnVuYyAobSBSZXN1bHRzSnNvbikgQnVpbGRlckRhdGEoKSBtYXBbc3RyaW5nXWludGVyZmFjZXt9
IHsKKwlyZXR1cm4gbVttLkJ1aWxkZXIoKV0uKG1hcFtzdHJpbmddaW50ZXJmYWNle30pCit9CisK
K2Z1bmMgKG0gUmVzdWx0c0pzb24pIFRlc3RzUm9vdCgpIHRlc3RKc29uIHsKKwlyZXR1cm4gdGVz
dEpzb257dmFsOiBtLkJ1aWxkZXJEYXRhKClbVEVTVFNfS0VZXX0KK30KKwordHlwZSB0ZXN0SnNv
biBzdHJ1Y3QgeworCXZhbCBpbnRlcmZhY2V7fQorfQorCitmdW5jIChmIHRlc3RKc29uKSBJc0Rp
cmVjdG9yeSgpIGJvb2wgeworCXJldHVybiBmLkFzTWFwKClbUkVTVUxUU19LRVldID09IG5pbAor
fQorCitmdW5jIChmIHRlc3RKc29uKSBBc01hcCgpIG1hcFtzdHJpbmddaW50ZXJmYWNle30gewor
CXJldHVybiBmLnZhbC4obWFwW3N0cmluZ11pbnRlcmZhY2V7fSkKK30KKworZnVuYyAoZiB0ZXN0
SnNvbikgQ2hpbGRyZW4oKSBbXXRlc3RKc29uIHsKKwl2YXIgZnMgW110ZXN0SnNvbgorCWZvciBf
LCB2IDo9IHJhbmdlIGYuQXNNYXAoKSB7CisJCWZzID0gYXBwZW5kKGZzLCB0ZXN0SnNvbnt2YWw6
IHZ9KQorCX0KKwlyZXR1cm4gZnMKK30KKworZnVuYyAoZiB0ZXN0SnNvbikgRGVsZXRlUmVzdWx0
c0FuZFRpbWVzKCkgeworCXRlc3RNYXAgOj0gZi5Bc01hcCgpCisJdGVzdE1hcFtSRVNVTFRTX0tF
WV0gPSAwLCBmYWxzZQorCXRlc3RNYXBbVElNRVNfS0VZXSA9IDAsIGZhbHNlCit9CisKK2Z1bmMg
U3RyaXBKc29ucENhbGxiYWNrKGpzb24gW11ieXRlKSBbXWJ5dGUgeworCXZhciBlbXB0eUJ5dGUg
W11ieXRlCisJanNvbiA9IHJlZ2V4cC5NdXN0Q29tcGlsZSgiXltBLVphLXowLTlfXStbKF0iKS5S
ZXBsYWNlQWxsKGpzb24sIGVtcHR5Qnl0ZSkKKwlyZXR1cm4gcmVnZXhwLk11c3RDb21waWxlKCJb
KV1bO1x0XG5cZlxyIF0qJCIpLlJlcGxhY2VBbGwoanNvbiwgZW1wdHlCeXRlKQorfQorCitmdW5j
IHJlbW92ZVJlc3VsdHNBbmRUaW1lcyh0ZXN0cyB0ZXN0SnNvbikgeworCWZvciBfLCB0ZXN0IDo9
IHJhbmdlIHRlc3RzLkNoaWxkcmVuKCkgeworCQlpZiB0ZXN0LklzRGlyZWN0b3J5KCkgeworCQkJ
cmVtb3ZlUmVzdWx0c0FuZFRpbWVzKHRlc3QpCisJCX0gZWxzZSB7CisJCQl0ZXN0LkRlbGV0ZVJl
c3VsdHNBbmRUaW1lcygpCisJCX0KKwl9Cit9CisKK2Z1bmMgcmVkdWNlVG9UZXN0TGlzdChidWls
ZGVyIHN0cmluZywganNvbiBSZXN1bHRzSnNvbikgUmVzdWx0c0pzb24geworCWJ1aWxkZXJEYXRh
IDo9IGpzb24uQnVpbGRlckRhdGEoKQorCWZvciBrZXksIF8gOj0gcmFuZ2UgYnVpbGRlckRhdGEg
eworCQlpZiBrZXkgIT0gVEVTVFNfS0VZIHsKKwkJCWJ1aWxkZXJEYXRhW2tleV0gPSAwLCBmYWxz
ZQorCQl9CisJfQorCXJlbW92ZVJlc3VsdHNBbmRUaW1lcyhqc29uLlRlc3RzUm9vdCgpKQorCXJl
dHVybiBqc29uCit9CisKK2Z1bmMgVGVzdEZpbGVKc29uKHJlYWRlciBpby5SZWFkZXIpIChSZXN1
bHRzSnNvbiwgb3MuRXJyb3IpIHsKKwl2YXIganNvbk9iamVjdCBSZXN1bHRzSnNvbgorCWVyciA6
PSBqc29uLk5ld0RlY29kZXIocmVhZGVyKS5EZWNvZGUoJmpzb25PYmplY3QpCisJaWYgZXJyICE9
IG5pbCB7CisJCWVyciA9IEVycm9yKGVycikKKwl9CisJcmV0dXJuIGpzb25PYmplY3QsIGVycgor
fQorCitmdW5jIFdyaXRlVGVzdExpc3RKc29uKHdyaXRlciBpby5Xcml0ZXIsIHJlYWRlciBpby5S
ZWFkZXIsIGJ1aWxkZXIgc3RyaW5nLCBjYWxsYmFja05hbWUgc3RyaW5nKSBvcy5FcnJvciB7CisJ
anNvbk9iamVjdCwgZXJyIDo9IFRlc3RGaWxlSnNvbihyZWFkZXIpCisJaWYgZXJyICE9IG5pbCB7
CisJCXJldHVybiBFcnJvcihlcnIpCisJfQorCXJlZHVjZVRvVGVzdExpc3QoYnVpbGRlciwganNv
bk9iamVjdCkKKworCWlmIGNhbGxiYWNrTmFtZSAhPSAiIiB7CisJCWZtdC5GcHJpbnQod3JpdGVy
LCBjYWxsYmFja05hbWUrIigiKQorCX0KKwlqc29uLk5ld0VuY29kZXIod3JpdGVyKS5FbmNvZGUo
anNvbk9iamVjdCkKKwlpZiBjYWxsYmFja05hbWUgIT0gIiIgeworCQlmbXQuRnByaW50KHdyaXRl
ciwgIikiKQorCX0KKwlyZXR1cm4gbmlsCit9CisKK2Z1bmMgbWVyZ2VSdW5MZW5ndGhFbmNvZGVk
KGFnZ3JlZ2F0ZSBpbnRlcmZhY2V7fSwgaW5jcmVtZW50YWwgaW50ZXJmYWNle30sIG51bVJ1bnMg
aW50KSAoaW50ZXJmYWNle30sIGJvb2wpIHsKKwlhZ2dyZWdhdGVBcnJheSA6PSBhZ2dyZWdhdGUu
KFtdaW50ZXJmYWNle30pCisJaW5jcmVtZW50YWxBcnJheSA6PSBpbmNyZW1lbnRhbC4oW11pbnRl
cmZhY2V7fSkKKworCWFnZ3JlZ2F0ZUZpcnN0VmFsdWUgOj0gYWdncmVnYXRlQXJyYXlbMF0uKFtd
aW50ZXJmYWNle30pCisJaW5jcmVtZXRhbEZpcnN0VmFsdWUgOj0gaW5jcmVtZW50YWxBcnJheVsw
XS4oW11pbnRlcmZhY2V7fSkKKworCWlmIGFnZ3JlZ2F0ZUZpcnN0VmFsdWVbMV0gPT0gaW5jcmVt
ZXRhbEZpcnN0VmFsdWVbMV0geworCQlhZ2dyZWdhdGVGaXJzdFZhbHVlWzBdID0gYWdncmVnYXRl
Rmlyc3RWYWx1ZVswXS4oZmxvYXQ2NCkgKyAxCisJfSBlbHNlIHsKKwkJYWdncmVnYXRlQXJyYXkg
PSBhcHBlbmQoaW5jcmVtZW50YWxBcnJheSwgYWdncmVnYXRlQXJyYXkuLi4pCisJfQorCisJZmlu
YWxJbmRleCA6PSAtMQorCXNob3VsZFJlbW92ZSA6PSB0cnVlCisJZm9yIGluZGV4LCB2YWx1ZSA6
PSByYW5nZSBhZ2dyZWdhdGVBcnJheSB7CisJCXZhbHVlQXJyYXkgOj0gdmFsdWUuKFtdaW50ZXJm
YWNle30pCisJCW51bVJ1bnNJblZhbHVlIDo9IGludCh2YWx1ZUFycmF5WzBdLihmbG9hdDY0KSkK
KworCQlzd2l0Y2ggdmFsdWUgOj0gdmFsdWVBcnJheVsxXS4odHlwZSkgeworCQljYXNlIGZsb2F0
NjQ6CisJCQlzaG91bGRSZW1vdmUgPSBzaG91bGRSZW1vdmUgJiYgaW50KHZhbHVlKSA9PSAwCisJ
CWNhc2Ugc3RyaW5nOgorCQkJc2hvdWxkUmVtb3ZlID0gc2hvdWxkUmVtb3ZlICYmICh2YWx1ZSA9
PSAiTiIgfHwgdmFsdWUgPT0gIlAiKQorCQl9CisKKwkJaWYgbnVtUnVuc0luVmFsdWUgPj0gbnVt
UnVucyB7CisJCQlmaW5hbEluZGV4ID0gaW5kZXgKKwkJCXZhbHVlQXJyYXlbMF0gPSBudW1SdW5z
CisJCX0gZWxzZSB7CisJCQludW1SdW5zIC09IG51bVJ1bnNJblZhbHVlCisJCX0KKwl9CisKKwlp
ZiBmaW5hbEluZGV4ICE9IC0xIHsKKwkJcmV0dXJuIGFnZ3JlZ2F0ZUFycmF5WzAgOiBmaW5hbElu
ZGV4KzFdLCBzaG91bGRSZW1vdmUKKwl9CisJcmV0dXJuIGFnZ3JlZ2F0ZUFycmF5LCBzaG91bGRS
ZW1vdmUKK30KKwordmFyIG5vRGF0YVJlc3VsdCA9IG1hcFtzdHJpbmddaW50ZXJmYWNle317CisJ
InJlc3VsdHMiOiBbXWludGVyZmFjZXt9e1tdaW50ZXJmYWNle317ZmxvYXQ2NCgxKSwgIk4ifX0s
CisJInRpbWVzIjogICBbXWludGVyZmFjZXt9e1tdaW50ZXJmYWNle317ZmxvYXQ2NCgxKSwgZmxv
YXQ2NCgwKX19LAorfQorCitmdW5jIG1lcmdlUmVzdWx0c0FuZFRpbWVzKGFnZ3JlZ2F0ZVRlc3Rz
IG1hcFtzdHJpbmddaW50ZXJmYWNle30sIGluY3JlbWVudGFsVGVzdHMgbWFwW3N0cmluZ11pbnRl
cmZhY2V7fSwgbnVtUnVucyBpbnQpIG9zLkVycm9yIHsKKwlhbGxUZXN0cyA6PSBtYWtlKG1hcFtz
dHJpbmddYm9vbCkKKwlmb3IgdGVzdE5hbWUsIF8gOj0gcmFuZ2UgYWdncmVnYXRlVGVzdHMgewor
CQlhbGxUZXN0c1t0ZXN0TmFtZV0gPSB0cnVlCisJfQorCWZvciB0ZXN0TmFtZSwgXyA6PSByYW5n
ZSBpbmNyZW1lbnRhbFRlc3RzIHsKKwkJYWxsVGVzdHNbdGVzdE5hbWVdID0gdHJ1ZQorCX0KKwor
CWZvciB0ZXN0TmFtZSwgXyA6PSByYW5nZSBhbGxUZXN0cyB7CisJCWFnZ3JlZ2F0ZSwgYWdncmVn
YXRlRXhpc3RzIDo9IGFnZ3JlZ2F0ZVRlc3RzW3Rlc3ROYW1lXS4obWFwW3N0cmluZ11pbnRlcmZh
Y2V7fSkKKwkJaW5jcmVtZW50YWwsIGluY3JlbWVudGFsRXhpc3RzIDo9IGluY3JlbWVudGFsVGVz
dHNbdGVzdE5hbWVdLihtYXBbc3RyaW5nXWludGVyZmFjZXt9KQorCisJCWlmICFhZ2dyZWdhdGVF
eGlzdHMgJiYgIWluY3JlbWVudGFsRXhpc3RzIHsKKwkJCXJldHVybiBFcnJvcigiVGVzdCBuYW1l
IGRvZXMgbm90IGV4aXN0IGluIGVpdGhlciBhZ2dyZWdhdGUgb3IgaW5jcmVtZW50YWwgSlNPTjog
IiArIHRlc3ROYW1lKQorCQl9CisKKwkJaWYgIWFnZ3JlZ2F0ZUV4aXN0cyB7CisJCQlhZ2dyZWdh
dGVUZXN0c1t0ZXN0TmFtZV0gPSBpbmNyZW1lbnRhbAorCQkJY29udGludWUKKwkJfQorCisJCWlm
IGFnZ3JlZ2F0ZVJlc3VsdCwgYWdncmVnYXRlUmVzdWx0RXhpc3RzIDo9IGFnZ3JlZ2F0ZVtSRVNV
TFRTX0tFWV07ICFhZ2dyZWdhdGVSZXN1bHRFeGlzdHMgeworCQkJaWYgZXJyIDo9IG1lcmdlUmVz
dWx0c0FuZFRpbWVzKGFnZ3JlZ2F0ZSwgaW5jcmVtZW50YWwsIG51bVJ1bnMpOyBlcnIgIT0gbmls
IHsKKwkJCQlyZXR1cm4gZXJyCisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAhaW5jcmVtZW50YWxF
eGlzdHMgeworCQkJCWluY3JlbWVudGFsID0gbm9EYXRhUmVzdWx0CisJCQl9CisKKwkJCWluY3Jl
bWVudGFsUmVzdWx0LCBpbmNyZW1lbnRhbFJlc3VsdEV4aXN0cyA6PSBpbmNyZW1lbnRhbFtSRVNV
TFRTX0tFWV0KKwkJCWlmICFpbmNyZW1lbnRhbFJlc3VsdEV4aXN0cyB7CisJCQkJcmV0dXJuIEVy
cm9yKCJBZ2dyZWdhdGUgSlNPTiBoYXMgYSByZXN1bHRzIGVudHJ5IHdoZXJlIHRoZSBpbmNyZW1l
bnRhbCBKU09OIGRvZXMgbm90IGZvciAiICsgdGVzdE5hbWUpCisJCQl9CisKKwkJCWFnZ3JlZ2F0
ZVRpbWVzLCBhZ2dyZWdhdGVUaW1lc0V4aXN0cyA6PSBhZ2dyZWdhdGVbVElNRVNfS0VZXQorCQkJ
aWYgIWFnZ3JlZ2F0ZVRpbWVzRXhpc3RzIHsKKwkJCQlyZXR1cm4gRXJyb3IoIkFnZ3JlZ2F0ZSBK
U09OIGhhcyBhIHJlc3VsdHMgZW50cnksIGJ1dCBubyB0aW1lcyBlbnRyeSBmb3IgIiArIHRlc3RO
YW1lKQorCQkJfQorCisJCQlpbmNyZW1lbnRhbFRpbWUsIGluY3JlbWVudGFsVGltZUV4aXN0cyA6
PSBpbmNyZW1lbnRhbFtUSU1FU19LRVldCisJCQlpZiAhaW5jcmVtZW50YWxUaW1lRXhpc3RzIHsK
KwkJCQlyZXR1cm4gRXJyb3IoIkFnZ3JlZ2F0ZSBKU09OIGhhcyBhIHRpbWVzIGVudHJ5IHdoZXJl
IHRoZSBpbmNyZW1lbnRhbCBKU09OIGRvZXMgbm90IGZvciAiICsgdGVzdE5hbWUpCisJCQl9CisK
KwkJCW5ld1Jlc3VsdHMsIHNob3VsZFJlbW92ZVJlc3VsdHMgOj0gbWVyZ2VSdW5MZW5ndGhFbmNv
ZGVkKGFnZ3JlZ2F0ZVJlc3VsdCwgaW5jcmVtZW50YWxSZXN1bHQsIG51bVJ1bnMpCisJCQluZXdU
aW1lcywgc2hvdWxkUmVtb3ZlVGltZXMgOj0gbWVyZ2VSdW5MZW5ndGhFbmNvZGVkKGFnZ3JlZ2F0
ZVRpbWVzLCBpbmNyZW1lbnRhbFRpbWUsIG51bVJ1bnMpCisKKwkJCWlmIHNob3VsZFJlbW92ZVJl
c3VsdHMgJiYgc2hvdWxkUmVtb3ZlVGltZXMgeworCQkJCWFnZ3JlZ2F0ZVRlc3RzW3Rlc3ROYW1l
XSA9IDAsIGZhbHNlCisJCQl9IGVsc2UgeworCQkJCWFnZ3JlZ2F0ZVRlc3RzW3Rlc3ROYW1lXSA9
IG1hcFtzdHJpbmddaW50ZXJmYWNle317CisJCQkJCSJyZXN1bHRzIjogbmV3UmVzdWx0cywKKwkJ
CQkJInRpbWVzIjogICBuZXdUaW1lcywKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIG5p
bAorfQorCitmdW5jIHJlbW92ZUdUZXN0TW9kaWZpZXJzKHRlc3RzIG1hcFtzdHJpbmddaW50ZXJm
YWNle30pIHsKKwlmb3IgbmFtZSwgdmFsdWUgOj0gcmFuZ2UgdGVzdHMgeworCQluZXdOYW1lIDo9
IHN0cmluZ3MuUmVwbGFjZShuYW1lLCAiLkZMQUtZXyIsICIuIiwgMSkKKwkJbmV3TmFtZSA9IHN0
cmluZ3MuUmVwbGFjZShuZXdOYW1lLCAiLkZBSUxTXyIsICIuIiwgMSkKKwkJbmV3TmFtZSA9IHN0
cmluZ3MuUmVwbGFjZShuZXdOYW1lLCAiLk1BWUJFXyIsICIuIiwgMSkKKwkJbmV3TmFtZSA9IHN0
cmluZ3MuUmVwbGFjZShuZXdOYW1lLCAiLkRJU0FCTEVEXyIsICIuIiwgMSkKKwkJaWYgbmV3TmFt
ZSA9PSBuYW1lIHsKKwkJCWNvbnRpbnVlCisJCX0KKworCQlpZiB0ZXN0c1tuZXdOYW1lXSA9PSBu
aWwgeworCQkJdGVzdHNbbmV3TmFtZV0gPSB2YWx1ZQorCQkJdGVzdHNbbmFtZV0gPSAwLCBmYWxz
ZQorCQl9CisKKwkJcmVzdWx0LCBleGlzdHMgOj0gdmFsdWUuKG1hcFtzdHJpbmddaW50ZXJmYWNl
e30pW1JFU1VMVFNfS0VZXQorCQlpZiBleGlzdHMgeworCQkJdGVzdHNbbmFtZV0gPSAwLCBmYWxz
ZQorCQkJcnVuVmFsdWUgOj0gcmVzdWx0LihbXWludGVyZmFjZXt9KVswXS4oW11pbnRlcmZhY2V7
fSlbMV0KKwkJCWlmIHJ1blZhbHVlICE9ICJOIiB7CisJCQkJdGVzdHNbbmV3TmFtZV0gPSB2YWx1
ZQorCQkJfQorCQl9CisJfQorfQorCitmdW5jIFdyaXRlTWVyZ2VkSnNvbkZyb21GaWxlSGVhZGVy
KGFnZ3JlZ2F0ZSBpby5SZWFkZXIsIGluY3JlbWVudGFsICptdWx0aXBhcnQuRmlsZUhlYWRlciwg
YnVpbGRlciBzdHJpbmcsIG51bVJ1bnMgaW50KSAoKmJ5dGVzLkJ1ZmZlciwgb3MuRXJyb3IpIHsK
KwlidWZmZXIgOj0gYnl0ZXMuTmV3QnVmZmVyKG1ha2UoW11ieXRlLCAwKSkKKwlpbmNyZW1lbnRh
bEZpbGUsIGVyciA6PSBpbmNyZW1lbnRhbC5PcGVuKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0
dXJuIGJ1ZmZlciwgRXJyb3IoZXJyKQorCX0KKwlpZiBlcnIgPSB3cml0ZU1lcmdlZEpzb24oYnVm
ZmVyLCBhZ2dyZWdhdGUsIGluY3JlbWVudGFsRmlsZSwgYnVpbGRlciwgbnVtUnVucyk7IGVyciAh
PSBuaWwgeworCQlyZXR1cm4gYnVmZmVyLCBFcnJvcihlcnIpCisJfQorCWVyciA9IGluY3JlbWVu
dGFsRmlsZS5DbG9zZSgpCisJcmV0dXJuIGJ1ZmZlciwgRXJyb3IoZXJyKQorfQorCitmdW5jIHdy
aXRlTWVyZ2VkSnNvbih3cml0ZXIgaW8uV3JpdGVyLCBhZ2dyZWdhdGVKc29uUmVhZGVyIGlvLlJl
YWRlciwgaW5jcmVtZW50YWxKc29uUmVhZGVyIGlvLlJlYWRlciwgYnVpbGRlciBzdHJpbmcsIG51
bVJ1bnMgaW50KSBvcy5FcnJvciB7CisJYWdncmVnYXRlLCBlcnIgOj0gVGVzdEZpbGVKc29uKGFn
Z3JlZ2F0ZUpzb25SZWFkZXIpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBFcnJvcihlcnIp
CisJfQorCisJaW5jcmVtZW50YWwsIGVyciA6PSBUZXN0RmlsZUpzb24oaW5jcmVtZW50YWxKc29u
UmVhZGVyKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gRXJyb3IoZXJyKQorCX0KKworCWlm
IGluY3JlbWVudGFsLlZlcnNpb24oKSA8IENVUlJFTlRfSlNPTl9WRVJTSU9OIHsKKwkJcmV0dXJu
IEVycm9yKGZtdC5TcHJpbnRmKCJKU09OIHZlcnNpb24gJWQgbm8gbG9uZ2VyIHN1cHBvcnRlZC4i
LCBpbmNyZW1lbnRhbC5WZXJzaW9uKCkpKQorCX0KKworCWlmIGFnZ3JlZ2F0ZS5CdWlsZGVyKCkg
IT0gaW5jcmVtZW50YWwuQnVpbGRlcigpIHx8IGluY3JlbWVudGFsLkJ1aWxkZXIoKSAhPSBidWls
ZGVyIHsKKwkJcmV0dXJuIEVycm9yKGZtdC5TcHJpbnRmKGBCdWlsZGVycyBkb24ndCBtYXRjaC4g
QWdncmVnYXRlIEpTT046ICIlcyIsIGluY3JlbWVudGFsIEpTT04gIiVzIiwgcXVlcnkgcGFyYW1l
dGVyICIlcyIuYCwgYWdncmVnYXRlLkJ1aWxkZXIoKSwgaW5jcmVtZW50YWwuQnVpbGRlcigpLCBi
dWlsZGVyKSkKKwl9CisKKwlhZ2dyZWdhdGVbVkVSU0lPTl9LRVldID0gQ1VSUkVOVF9KU09OX1ZF
UlNJT04KKworCWFnZ3JlZ2F0ZURhdGEgOj0gYWdncmVnYXRlLkJ1aWxkZXJEYXRhKCkKKwlpbmNy
ZW1lbnRhbERhdGEgOj0gaW5jcmVtZW50YWwuQnVpbGRlckRhdGEoKQorCisJZm9yIGtleSwgdmFs
dWUgOj0gcmFuZ2UgaW5jcmVtZW50YWxEYXRhIHsKKwkJaWYga2V5ICE9IFRFU1RTX0tFWSB7CisJ
CQlpbmNyZW1lbnRhbFZhbHVlcyA6PSB2YWx1ZS4oW11pbnRlcmZhY2V7fSkKKwkJCWlmIGxlbihp
bmNyZW1lbnRhbFZhbHVlcykgIT0gMSB7CisJCQkJcmV0dXJuIEVycm9yKGZtdC5TcHJpbnRmKCJJ
bmNyZW1lbnRhbCByZXN1bHRzIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIHJ1bidzIHdvcnRoIG9m
IGRhdGEuIEhhZCAlZCBmb3Iga2V5ICVzLiIsIGxlbihpbmNyZW1lbnRhbFZhbHVlcyksIGtleSkp
CisJCQl9CisJCQluZXdWYWx1ZSA6PSBhcHBlbmQoaW5jcmVtZW50YWxWYWx1ZXMsIGFnZ3JlZ2F0
ZURhdGFba2V5XS4oW11pbnRlcmZhY2V7fSkuLi4pCisJCQlpZiBsZW4obmV3VmFsdWUpID4gbnVt
UnVucyB7CisJCQkJbmV3VmFsdWUgPSBuZXdWYWx1ZVswOm51bVJ1bnNdCisJCQl9CisJCQlhZ2dy
ZWdhdGVEYXRhW2tleV0gPSBuZXdWYWx1ZQorCQl9CisJfQorCisJcmVtb3ZlR1Rlc3RNb2RpZmll
cnMoaW5jcmVtZW50YWwuVGVzdHNSb290KCkuQXNNYXAoKSkKKworCW1lcmdlUmVzdWx0c0FuZFRp
bWVzKGFnZ3JlZ2F0ZS5UZXN0c1Jvb3QoKS5Bc01hcCgpLCBpbmNyZW1lbnRhbC5UZXN0c1Jvb3Qo
KS5Bc01hcCgpLCBudW1SdW5zKQorCWpzb24uTmV3RW5jb2Rlcih3cml0ZXIpLkVuY29kZShhZ2dy
ZWdhdGUpCisKKwlyZXR1cm4gbmlsCit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0c0Rhc2hib2Fy
ZFNlcnZlci9iYXNlL2pzb25fdGVzdC5nbyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL2Jh
c2UvanNvbl90ZXN0LmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhZmRjODM5ZDMxNGMxNTRiNTg3Mzc2YjUwMzU2
YmE2ODFlNjg0NTcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZl
ci9iYXNlL2pzb25fdGVzdC5nbwpAQCAtMCwwICsxLDY1NiBAQAorcGFja2FnZSBiYXNlCisKK2lt
cG9ydCAoCisJImJ5dGVzIgorCSJmbXQiCisJImpzb24iCisJIm1pbWUvbXVsdGlwYXJ0IgorCSJz
dHJpbmdzIgorCSJ0ZXN0aW5nIgorKQorCitmdW5jIGFzUmVzdWx0c0pzb24odCAqdGVzdGluZy5U
LCBqc29uIHN0cmluZykgUmVzdWx0c0pzb24geworCWpzb25PYmplY3QsIGVyciA6PSBUZXN0Rmls
ZUpzb24oc3RyaW5ncy5OZXdSZWFkZXIoanNvbikpCisJaWYgZXJyICE9IG5pbCB7CisJCWZtdC5Q
cmludGYoZXJyLlN0cmluZygpKQorCQl0LkZhaWxOb3coKQorCX0KKwlyZXR1cm4ganNvbk9iamVj
dAorfQorCitmdW5jIGFzU3RyaW5nKHQgKnRlc3RpbmcuVCwgcmVzdWx0c0pzb24gUmVzdWx0c0pz
b24pIHN0cmluZyB7CisJYnl0ZXMsIGVyciA6PSBqc29uLk1hcnNoYWwocmVzdWx0c0pzb24pCisJ
aWYgZXJyICE9IG5pbCB7CisJCWZtdC5QcmludGYoZXJyLlN0cmluZygpKQorCQl0LkZhaWxOb3co
KQorCX0KKwlyZXR1cm4gc3RyaW5nKGJ5dGVzKQorfQorCisvLyBBbGxvd3MgdXMgdG8gd3JpdGUg
cmVhZGFibGUgZXhwZWN0ZWQgSlNPTiwgYnV0IGdldCB0aGUgc2FtZSB3aGl0ZXNwYWNlIHN0cmlw
cGVkIGFzIHRoZSByZXN1bHRzIEpTT04uCitmdW5jIHJvdW5kVHJpcEpzb24odCAqdGVzdGluZy5U
LCBqc29uIHN0cmluZykgc3RyaW5nIHsKKwlyZXR1cm4gYXNTdHJpbmcodCwgYXNSZXN1bHRzSnNv
bih0LCBqc29uKSkKK30KKworZnVuYyBUZXN0U3RyaXBKc29ucENhbGxiYWNrKHQgKnRlc3Rpbmcu
VCkgeworCXN0cmlwcGVkIDo9IHN0cmluZyhTdHJpcEpzb25wQ2FsbGJhY2soW11ieXRlKCJDQUxM
QkFDSyhbY29udGVudF0pIikpKQorCWV4cGVjdGVkIDo9ICJbY29udGVudF0iCisJYXNzZXJ0RXF1
YWwodCwgIlN0cmlwcGVkIGpzb246Iiwgc3RyaXBwZWQsIGV4cGVjdGVkKQorCisJc3RyaXBwZWQg
PSBzdHJpbmcoU3RyaXBKc29ucENhbGxiYWNrKFtdYnl0ZSgiQ0FMTEJBQ0soW2NvbnRlbnRdKTsg
IikpKQorCWFzc2VydEVxdWFsKHQsICJTdHJpcHBlZCBqc29uOiIsIHN0cmlwcGVkLCBleHBlY3Rl
ZCkKKworCXN0cmlwcGVkID0gc3RyaW5nKFN0cmlwSnNvbnBDYWxsYmFjayhbXWJ5dGUoZXhwZWN0
ZWQpKSkKKwlhc3NlcnRFcXVhbCh0LCAiU3RyaXBwZWQganNvbjoiLCBzdHJpcHBlZCwgZXhwZWN0
ZWQpCit9CisKK2Z1bmMgVGVzdFdyaXRlVGVzdExpc3RKc29uKHQgKnRlc3RpbmcuVCkgeworCWlu
aXRpYWxKc29uIDo9IGB7CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVp
bGRlciI6IHsKKyAgICAgICAgICAgICJidWlsZHMiOiBbMywgMiwgMV0sCisgICAgICAgICAgICAi
dGVzdHMiOiB7CisgICAgICAgICAgICAgICAgImZvbyI6IHsKKyAgICAgICAgICAgICAgICAgICAg
IjAwMS5odG1sIjogeyJyZXN1bHRzIjogW1sxLCAiRiJdXSwgInRpbWVzIjogW1sxLCAwXV19Cisg
ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiMDAyLmh0bWwiOiB7InJlc3VsdHMi
OiBbWzEsICJGIl1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH1gCisKKwlidWZmZXIgOj0gYnl0ZXMuTmV3QnVmZmVyU3RyaW5nKCIiKQorCVdyaXRl
VGVzdExpc3RKc29uKGJ1ZmZlciwgc3RyaW5ncy5OZXdSZWFkZXIoaW5pdGlhbEpzb24pLCAiRHVt
bXlCdWlsZGVyIiwgIiIpCisKKwlleHBlY3RlZEpzb24gOj0gcm91bmRUcmlwSnNvbih0LCBgewor
ICAgICAgICAidmVyc2lvbiI6IDQsCisgICAgICAgICJEdW1teUJ1aWxkZXIiOiB7CisgICAgICAg
ICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgImZvbyI6IHsKKyAgICAgICAgICAgICAg
ICAgICAgIjAwMS5odG1sIjoge30KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
ICIwMDIuaHRtbCI6IHt9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9YCkKKworCS8v
IFRoaXMgaXMgb2Jub3hpb3VzLCBidXQgdGhlIGpzb24gZW5jb2RlciB0aGF0IFdyaXRlVGVzdExp
c3RKc29uIGNhbGxzIGFkZHMgYW4gZXh0cmEgbmV3bGluZS4KKwlhc3NlcnRFcXVhbCh0LCAiV3Jp
dHRlbiBKU09OOiIsIHN0cmluZyhidWZmZXIuQnl0ZXMoKSksIGV4cGVjdGVkSnNvbisiXG4iKQor
CisJY2FsbGJhY2sgOj0gIkZPTyIKKwlidWZmZXIgPSBieXRlcy5OZXdCdWZmZXJTdHJpbmcoIiIp
CisJV3JpdGVUZXN0TGlzdEpzb24oYnVmZmVyLCBzdHJpbmdzLk5ld1JlYWRlcihpbml0aWFsSnNv
biksICJEdW1teUJ1aWxkZXIiLCBjYWxsYmFjaykKKwlhc3NlcnRFcXVhbCh0LCAiV3JpdHRlbiBK
U09OIHdpdGggY2FsbGJhY2s6Iiwgc3RyaW5nKGJ1ZmZlci5CeXRlcygpKSwgY2FsbGJhY2srIigi
K2V4cGVjdGVkSnNvbisiXG4pIikKK30KKworZnVuYyBUZXN0V3JpdGVNZXJnZWRKc29uSW52YWxp
ZFZhbHVlcyh0ICp0ZXN0aW5nLlQpIHsKKwlidWZmZXIgOj0gYnl0ZXMuTmV3QnVmZmVyU3RyaW5n
KCIiKQorCWVyciA6PSB3cml0ZU1lcmdlZEpzb24oYnVmZmVyLCBzdHJpbmdzLk5ld1JlYWRlcigi
IiksIHN0cmluZ3MuTmV3UmVhZGVyKCIiKSwgIiIsIDUpCisJaWYgZXJyID09IG5pbCB7CisJCXQu
RXJyb3JmKCJXcml0aW5nIGVtcHR5IHN0cmluZyBzaG91bGQgZmFpbC4iKQorCX0KKworCWFnZ3Jl
Z2F0ZSA6PSBgeworICAgICAgICAidmVyc2lvbiI6IDQsCisgICAgICAgICJEdW1teUJ1aWxkZXIi
OiB7CisgICAgICAgICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgImZvbyI6IHsKKyAg
ICAgICAgICAgICAgICAgICAgIjAwMS5odG1sIjogeyJyZXN1bHRzIjogW1sxLCAiRiJdXSwgInRp
bWVzIjogW1sxLCAwXV19CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiMDAy
Lmh0bWwiOiB7InJlc3VsdHMiOiBbWzEsICJGIl1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH1gCisKKwlpbmNyZW1lbnRhbCA6PSBgeworICAgICAg
ICAidmVyc2lvbiI6IDQsCisgICAgICAgICJPdGhlckJ1aWxkZXIiOiB7CisgICAgICAgICAgICAi
dGVzdHMiOiB7CisgICAgICAgICAgICAgICAgImZvbyI6IHsKKyAgICAgICAgICAgICAgICAgICAg
IjAwMS5odG1sIjogeyJyZXN1bHRzIjogW1sxLCAiRiJdXSwgInRpbWVzIjogW1sxLCAwXV19Cisg
ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiMDAyLmh0bWwiOiB7InJlc3VsdHMi
OiBbWzEsICJGIl1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH1gCisKKwllcnIgPSB3cml0ZU1lcmdlZEpzb24oYnVmZmVyLCBzdHJpbmdzLk5ld1Jl
YWRlcihhZ2dyZWdhdGUpLCBzdHJpbmdzLk5ld1JlYWRlcihpbmNyZW1lbnRhbCksICJEdW1teUJ1
aWxkZXIiLCA1KQorCWlmIGVyciA9PSBuaWwgeworCQl0LkVycm9yZigiQnVpbGRlciBuYW1lcyBt
dXN0IGJlIHRoZSBzYW1lLiIpCisJfQorCisJaW5jcmVtZW50YWwgPSBgeworICAgICAgICAidmVy
c2lvbiI6IDMsCisgICAgICAgICJEdW1teUJ1aWxkZXIiOiB7CisgICAgICAgICAgICAidGVzdHMi
OiB7CisgICAgICAgICAgICAgICAgImZvbyI6IHsKKyAgICAgICAgICAgICAgICAgICAgIjAwMS5o
dG1sIjogeyJyZXN1bHRzIjogW1sxLCAiRiJdXSwgInRpbWVzIjogW1sxLCAwXV19CisgICAgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiMDAyLmh0bWwiOiB7InJlc3VsdHMiOiBbWzEs
ICJGIl1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH1gCisKKwllcnIgPSB3cml0ZU1lcmdlZEpzb24oYnVmZmVyLCBzdHJpbmdzLk5ld1JlYWRlcihh
Z2dyZWdhdGUpLCBzdHJpbmdzLk5ld1JlYWRlcihpbmNyZW1lbnRhbCksICJEdW1teUJ1aWxkZXIi
LCA1KQorCWlmIGVyciA9PSBuaWwgeworCQl0LkVycm9yZigiVmVyc2lvbnMgbGVzcyB0aGFuIDQg
YXJlIG5vdCBzdXBwb3J0ZWQuIikKKwl9CisKKwlpbmNyZW1lbnRhbCA9IGB7CisgICAgICAgICJ2
ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAgICAgICAgICAgICJ0ZXN0
cyI6IHsKKyAgICAgICAgICAgICAgICAiZm9vIjogeworICAgICAgICAgICAgICAgICAgICAiMDAx
Lmh0bWwiOiB7InJlc3VsdHMiOiBbWzEsICJGIl1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICIwMDIuaHRtbCI6IHsicmVzdWx0cyI6IFtb
MSwgIkYiXV0sICJ0aW1lcyI6IFtbMSwgMF1dfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfWAKKworCWVyciA9IHdyaXRlTWVyZ2VkSnNvbihidWZmZXIsIHN0cmluZ3MuTmV3UmVhZGVy
KGFnZ3JlZ2F0ZSksIHN0cmluZ3MuTmV3UmVhZGVyKGluY3JlbWVudGFsKSwgIk90aGVyQnVpbGRl
ciIsIDUpCisJaWYgZXJyID09IG5pbCB7CisJCXQuRXJyb3JmKCJCdWlsZGVyIGFyZ3VtZW50IHNo
b3VsZCBtYXRjaCBidWlsZGVyIG5hbWVzIGluIEpTT04uIikKKwl9Cit9CisKK2Z1bmMgVGVzdFdy
aXRlTWVyZ2VkSnNvblNhbWVCdWlsZCh0ICp0ZXN0aW5nLlQpIHsKKwlhZ2dyZWdhdGUgOj0gYHsK
KyAgICAgICAgInZlcnNpb24iOiA0LAorICAgICAgICAiRHVtbXlCdWlsZGVyIjogeworICAgICAg
ICAgICAgImJ1aWxkTnVtYmVycyI6IFsiMiIsICIxIl0sCisgICAgICAgICAgICAidGVzdHMiOiB7
fQorICAgICAgICB9CisgICAgfWAKKworCWluY3JlbWVudGFsIDo9IGB7CisgICAgICAgICJ2ZXJz
aW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAgICAgICAgICAgICJidWlsZE51
bWJlcnMiOiBbIjIiXSwKKyAgICAgICAgICAgICJ0ZXN0cyI6IHt9CisgICAgICAgIH0KKyAgICB9
YAorCisJZXhwZWN0ZWQgOj0gcm91bmRUcmlwSnNvbih0LCBgeworICAgICAgICAidmVyc2lvbiI6
IDQsCisgICAgICAgICJEdW1teUJ1aWxkZXIiOiB7CisgICAgICAgICAgICAiYnVpbGROdW1iZXJz
IjogWyIyIiwgIjIiLCAiMSJdLAorICAgICAgICAgICAgInRlc3RzIjoge30KKyAgICAgICAgfQor
ICAgIH1gKQorCisJYnVmZmVyIDo9IGJ5dGVzLk5ld0J1ZmZlclN0cmluZygiIikKKwllcnIgOj0g
d3JpdGVNZXJnZWRKc29uKGJ1ZmZlciwgc3RyaW5ncy5OZXdSZWFkZXIoYWdncmVnYXRlKSwgc3Ry
aW5ncy5OZXdSZWFkZXIoaW5jcmVtZW50YWwpLCAiRHVtbXlCdWlsZGVyIiwgNSkKKwlpZiBlcnIg
IT0gbmlsIHsKKwkJdC5FcnJvcmYoZXJyLlN0cmluZygpKQorCX0KKwlhc3NlcnRFcXVhbCh0LCAi
TWVyZ2VkIEpTT046Iiwgc3RyaW5nKGJ1ZmZlci5CeXRlcygpKSwgZXhwZWN0ZWQrIlxuIikKK30K
KworZnVuYyBUZXN0V3JpdGVNZXJnZWRKc29uU2FtZVJlc3VsdCh0ICp0ZXN0aW5nLlQpIHsKKwlh
Z2dyZWdhdGUgOj0gYHsKKyAgICAgICAgInZlcnNpb24iOiA0LAorICAgICAgICAiRHVtbXlCdWls
ZGVyIjogeworICAgICAgICAgICAgImJ1aWxkTnVtYmVycyI6IFsiMiIsICIxIl0sCisgICAgICAg
ICAgICAiZml4YWJsZUNvdW50IjogWzMsIDhdLAorICAgICAgICAgICAgImZpeGFibGVDb3VudHMi
OiBbeyJaIjogMX0sIHsiQyI6IDF9XSwKKyAgICAgICAgICAgICJ0ZXN0cyI6IHsKKyAgICAgICAg
ICAgICAgICAiZm9vIjogeworICAgICAgICAgICAgICAgICAgICAiMDAxLmh0bWwiOiB7InJlc3Vs
dHMiOiBbWzEsICJGIl1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgICIwMDIuaHRtbCI6IHsicmVzdWx0cyI6IFtbMSwgIkYiXV0sICJ0aW1l
cyI6IFtbMSwgMF1dfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfWAKKworCWluY3Jl
bWVudGFsIDo9IGB7CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRl
ciI6IHsKKyAgICAgICAgICAgICJidWlsZE51bWJlcnMiOiBbIjMiXSwKKyAgICAgICAgICAgICJm
aXhhYmxlQ291bnQiOiBbNF0sCisgICAgICAgICAgICAiZml4YWJsZUNvdW50cyI6IFt7IkEiOiAx
fV0sCisgICAgICAgICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgImZvbyI6IHsKKyAg
ICAgICAgICAgICAgICAgICAgIjAwMS5odG1sIjogeyJyZXN1bHRzIjogW1sxLCAiRiJdXSwgInRp
bWVzIjogW1sxLCAwXV19CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiMDAy
Lmh0bWwiOiB7InJlc3VsdHMiOiBbWzEsICJGIl1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH1gCisKKwlleHBlY3RlZCA6PSByb3VuZFRyaXBKc29u
KHQsIGB7CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsK
KyAgICAgICAgICAgICJidWlsZE51bWJlcnMiOiBbIjMiLCAiMiIsICIxIl0sCisgICAgICAgICAg
ICAiZml4YWJsZUNvdW50IjogWzQsIDMsIDhdLAorICAgICAgICAgICAgImZpeGFibGVDb3VudHMi
OiBbeyJBIjogMX0sIHsiWiI6IDF9LCB7IkMiOiAxfV0sCisgICAgICAgICAgICAidGVzdHMiOiB7
CisgICAgICAgICAgICAgICAgImZvbyI6IHsKKyAgICAgICAgICAgICAgICAgICAgIjAwMS5odG1s
IjogeyJyZXN1bHRzIjogW1syLCAiRiJdXSwgInRpbWVzIjogW1syLCAwXV19CisgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICAiMDAyLmh0bWwiOiB7InJlc3VsdHMiOiBbWzIsICJG
Il1dLCAidGltZXMiOiBbWzIsIDBdXX0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH1g
KQorCisJYnVmZmVyIDo9IGJ5dGVzLk5ld0J1ZmZlclN0cmluZygiIikKKwllcnIgOj0gd3JpdGVN
ZXJnZWRKc29uKGJ1ZmZlciwgc3RyaW5ncy5OZXdSZWFkZXIoYWdncmVnYXRlKSwgc3RyaW5ncy5O
ZXdSZWFkZXIoaW5jcmVtZW50YWwpLCAiRHVtbXlCdWlsZGVyIiwgNSkKKwlpZiBlcnIgIT0gbmls
IHsKKwkJdC5FcnJvcmYoZXJyLlN0cmluZygpKQorCX0KKwlhc3NlcnRFcXVhbCh0LCAiTWVyZ2Vk
IEpTT046Iiwgc3RyaW5nKGJ1ZmZlci5CeXRlcygpKSwgZXhwZWN0ZWQrIlxuIikKK30KKworZnVu
YyBUZXN0V3JpdGVNZXJnZWRKc29uUHJ1bmVFeHRyYSh0ICp0ZXN0aW5nLlQpIHsKKwlhZ2dyZWdh
dGUgOj0gYHsKKyAgICAgICAgInZlcnNpb24iOiA0LAorICAgICAgICAiRHVtbXlCdWlsZGVyIjog
eworICAgICAgICAgICAgImJ1aWxkTnVtYmVycyI6IFsiNSIsICI0IiwgIjMiLCAiMiIsICIxIl0s
CisgICAgICAgICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgIjAwMS5odG1sIjogeyJy
ZXN1bHRzIjogW1s1LCAiRiJdXSwgInRpbWVzIjogW1s1LCAwXV19LAorICAgICAgICAgICAgICAg
ICIwMDIuaHRtbCI6IHsicmVzdWx0cyI6IFtbMSwgIkYiXV0sICJ0aW1lcyI6IFtbMSwgMF1dfSwK
KyAgICAgICAgICAgICAgICAiMDAzLmh0bWwiOiB7InJlc3VsdHMiOiBbWzUsICJGIl1dLCAidGlt
ZXMiOiBbWzUsIDBdXX0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH1gCisKKwlpbmNy
ZW1lbnRhbCA6PSBgeworICAgICAgICAidmVyc2lvbiI6IDQsCisgICAgICAgICJEdW1teUJ1aWxk
ZXIiOiB7CisgICAgICAgICAgICAiYnVpbGROdW1iZXJzIjogWyI2Il0sCisgICAgICAgICAgICAi
dGVzdHMiOiB7CisgICAgICAgICAgICAgICAgIjAwMS5odG1sIjogeyJyZXN1bHRzIjogW1sxLCAi
RiJdXSwgInRpbWVzIjogW1sxLCAwXV19LAorICAgICAgICAgICAgICAgICIwMDIuaHRtbCI6IHsi
cmVzdWx0cyI6IFtbMSwgIkYiXV0sICJ0aW1lcyI6IFtbMSwgMF1dfSwKKyAgICAgICAgICAgICAg
ICAiMDAzLmh0bWwiOiB7InJlc3VsdHMiOiBbWzEsICJUIl1dLCAidGltZXMiOiBbWzEsIDEwXV19
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9YAorCisJZXhwZWN0ZWQgOj0gcm91bmRU
cmlwSnNvbih0LCBgeworICAgICAgICAidmVyc2lvbiI6IDQsCisgICAgICAgICJEdW1teUJ1aWxk
ZXIiOiB7CisgICAgICAgICAgICAiYnVpbGROdW1iZXJzIjogWyI2IiwgIjUiLCAiNCIsICIzIiwg
IjIiXSwKKyAgICAgICAgICAgICJ0ZXN0cyI6IHsKKyAgICAgICAgICAgICAgICAiMDAxLmh0bWwi
OiB7InJlc3VsdHMiOiBbWzUsICJGIl1dLCAidGltZXMiOiBbWzUsIDBdXX0sCisgICAgICAgICAg
ICAgICAgIjAwMi5odG1sIjogeyJyZXN1bHRzIjogW1syLCAiRiJdXSwgInRpbWVzIjogW1syLCAw
XV19LAorICAgICAgICAgICAgICAgICIwMDMuaHRtbCI6IHsicmVzdWx0cyI6IFtbMSwgIlQiXSwg
WzQsICJGIl1dLCAidGltZXMiOiBbWzEsIDEwXSwgWzQsIDBdXX0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH1gKQorCisJYnVmZmVyIDo9IGJ5dGVzLk5ld0J1ZmZlclN0cmluZygiIikK
KwllcnIgOj0gd3JpdGVNZXJnZWRKc29uKGJ1ZmZlciwgc3RyaW5ncy5OZXdSZWFkZXIoYWdncmVn
YXRlKSwgc3RyaW5ncy5OZXdSZWFkZXIoaW5jcmVtZW50YWwpLCAiRHVtbXlCdWlsZGVyIiwgNSkK
KwlpZiBlcnIgIT0gbmlsIHsKKwkJdC5FcnJvcmYoZXJyLlN0cmluZygpKQorCX0KKwlhc3NlcnRF
cXVhbCh0LCAiTWVyZ2VkIEpTT046Iiwgc3RyaW5nKGJ1ZmZlci5CeXRlcygpKSwgZXhwZWN0ZWQr
IlxuIikKK30KKworZnVuYyBUZXN0V3JpdGVNZXJnZWRKc29uUmVtb3ZlR1Rlc3RNb2RpZmllcnMo
dCAqdGVzdGluZy5UKSB7CisJYWdncmVnYXRlIDo9IGB7CisgICAgICAgICJ2ZXJzaW9uIjogNCwK
KyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAgICAgICAgICAgICJidWlsZE51bWJlcnMiOiBb
IjUiLCAiNCIsICIzIiwgIjIiLCAiMSJdLAorICAgICAgICAgICAgInRlc3RzIjogeworICAgICAg
ICAgICAgICAgICJmb28uYmFyIjogeyJyZXN1bHRzIjogW1s1LCAiRiJdXSwgInRpbWVzIjogW1s1
LCAwXV19LAorICAgICAgICAgICAgICAgICJmb28uYmFyMiI6IHsicmVzdWx0cyI6IFtbMSwgIkYi
XV0sICJ0aW1lcyI6IFtbMSwgMF1dfSwKKyAgICAgICAgICAgICAgICAiZm9vLkZBSUxTX2JhcjMi
OiB7InJlc3VsdHMiOiBbWzUsICJGIl1dLCAidGltZXMiOiBbWzUsIDBdXX0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH1gCisKKwlpbmNyZW1lbnRhbCA6PSBgeworICAgICAgICAidmVy
c2lvbiI6IDQsCisgICAgICAgICJEdW1teUJ1aWxkZXIiOiB7CisgICAgICAgICAgICAiYnVpbGRO
dW1iZXJzIjogWyI2Il0sCisgICAgICAgICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAg
ImZvby5ESVNBQkxFRF9iYXIiOiB7InJlc3VsdHMiOiBbWzEsIlQiXV0sICJ0aW1lcyI6IFtbMSww
XV19LAorICAgICAgICAgICAgICAgICJmb28uRkxBS1lfYmFyMiI6IHsicmVzdWx0cyI6IFtbMSwi
TiJdXSwgInRpbWVzIjogW1sxLDBdXX0sCisgICAgICAgICAgICAgICAgImZvby5iYXIyIjogeyJy
ZXN1bHRzIjogW1sxLCJJIl1dLCAidGltZXMiOiBbWzEsMF1dfSwKKyAgICAgICAgICAgICAgICAi
Zm9vLmJhcjMiOiB7InJlc3VsdHMiOiBbWzEsIk4iXV0sICJ0aW1lcyI6IFtbMSwwXV19LAorICAg
ICAgICAgICAgICAgICJmb28uRkFJTFNfYmFyMyI6IHsicmVzdWx0cyI6IFtbMSwiSSJdXSwgInRp
bWVzIjogW1sxLDBdXX0sCisgICAgICAgICAgICAgICAgImZvby5NQVlCRV9iYXI0IjogeyJyZXN1
bHRzIjogW1sxLCJJIl1dLCAidGltZXMiOiBbWzEsMF1dfX0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH1gCisKKwlleHBlY3RlZCA6PSByb3VuZFRyaXBKc29uKHQsIGB7CisgICAgICAg
ICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAgICAgICAgICAgICJi
dWlsZE51bWJlcnMiOiBbIjYiLCAiNSIsICI0IiwgIjMiLCAiMiJdLAorICAgICAgICAgICAgInRl
c3RzIjogeworICAgICAgICAgICAgICAgICJmb28uRkFJTFNfYmFyMyI6IHsicmVzdWx0cyI6IFtb
MSwiTiJdLFs0LCJGIl1dLCAidGltZXMiOiBbWzUsMF1dfSwKKyAgICAgICAgICAgICAgICAiZm9v
LmJhciI6IHsicmVzdWx0cyI6IFtbMSwiVCJdLFs0LCJGIl1dLCAidGltZXMiOiBbWzUsMF1dfSwK
KyAgICAgICAgICAgICAgICAiZm9vLmJhcjIiOiB7InJlc3VsdHMiOiBbWzEsIkkiXSxbMSwiRiJd
XSwgInRpbWVzIjogW1syLDBdXX0sCisgICAgICAgICAgICAgICAgImZvby5iYXIzIjogeyJyZXN1
bHRzIjogW1sxLCJJIl1dLCAidGltZXMiOiBbWzEsMF1dfSwKKyAgICAgICAgICAgICAgICAiZm9v
LmJhcjQiOiB7InJlc3VsdHMiOiBbWzEsIkkiXV0sICJ0aW1lcyI6IFtbMSwwXV19fQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfWApCisKKwlidWZmZXIgOj0gYnl0ZXMuTmV3QnVmZmVy
U3RyaW5nKCIiKQorCWVyciA6PSB3cml0ZU1lcmdlZEpzb24oYnVmZmVyLCBzdHJpbmdzLk5ld1Jl
YWRlcihhZ2dyZWdhdGUpLCBzdHJpbmdzLk5ld1JlYWRlcihpbmNyZW1lbnRhbCksICJEdW1teUJ1
aWxkZXIiLCA1KQorCWlmIGVyciAhPSBuaWwgeworCQl0LkVycm9yZihlcnIuU3RyaW5nKCkpCisJ
fQorCWFzc2VydEVxdWFsKHQsICJNZXJnZWQgSlNPTjoiLCBzdHJpbmcoYnVmZmVyLkJ5dGVzKCkp
LCBleHBlY3RlZCsiXG4iKQorfQorCitmdW5jIFRlc3RXcml0ZU1lcmdlZEpzb25TdHJpcEFsbFBh
c3NPck5vRGF0YSh0ICp0ZXN0aW5nLlQpIHsKKwlhZ2dyZWdhdGUgOj0gYHsKKyAgICAgICAgInZl
cnNpb24iOiA0LAorICAgICAgICAiRHVtbXlCdWlsZGVyIjogeworICAgICAgICAgICAgImJ1aWxk
TnVtYmVycyI6IFsiNSIsICI0IiwgIjMiLCAiMiIsICIxIl0sCisgICAgICAgICAgICAidGVzdHMi
OiB7CisgICAgICAgICAgICAgICAgIjAwMS5odG1sIjogeyJyZXN1bHRzIjogW1s1LCAiTiJdXSwg
InRpbWVzIjogW1s1LCAwXV19LAorICAgICAgICAgICAgICAgICIwMDIuaHRtbCI6IHsicmVzdWx0
cyI6IFtbNSwgIlAiXV0sICJ0aW1lcyI6IFtbNSwgMF1dfSwKKyAgICAgICAgICAgICAgICAiMDAz
Lmh0bWwiOiB7InJlc3VsdHMiOiBbWzQsICJOIl1dLCAidGltZXMiOiBbWzQsIDBdXX0sCisgICAg
ICAgICAgICAgICAgIjAwNC5odG1sIjogeyJyZXN1bHRzIjogW1s0LCAiUCJdXSwgInRpbWVzIjog
W1s0LCAwXV19LAorICAgICAgICAgICAgICAgICIwMDUuaHRtbCI6IHsicmVzdWx0cyI6IFtbNCwg
IlAiXV0sICJ0aW1lcyI6IFtbNCwgMV1dfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fWAKKworCWluY3JlbWVudGFsIDo9IGB7CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAg
IkR1bW15QnVpbGRlciI6IHsKKyAgICAgICAgICAgICJidWlsZE51bWJlcnMiOiBbIjYiXSwKKyAg
ICAgICAgICAgICJ0ZXN0cyI6IHsKKyAgICAgICAgICAgICAgICAiMDAxLmh0bWwiOiB7InJlc3Vs
dHMiOiBbWzEsICJOIl1dLCAidGltZXMiOiBbWzEsIDBdXX0sCisgICAgICAgICAgICAgICAgIjAw
Mi5odG1sIjogeyJyZXN1bHRzIjogW1sxLCAiUCJdXSwgInRpbWVzIjogW1sxLCAwXV19LAorICAg
ICAgICAgICAgICAgICIwMDMuaHRtbCI6IHsicmVzdWx0cyI6IFtbMSwgIlAiXV0sICJ0aW1lcyI6
IFtbMSwgMF1dfSwKKyAgICAgICAgICAgICAgICAiMDA0Lmh0bWwiOiB7InJlc3VsdHMiOiBbWzEs
ICJOIl1dLCAidGltZXMiOiBbWzEsIDBdXX0sCisgICAgICAgICAgICAgICAgIjAwNS5odG1sIjog
eyJyZXN1bHRzIjogW1sxLCAiUCJdXSwgInRpbWVzIjogW1sxLCAwXV19CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9YAorCisJZXhwZWN0ZWQgOj0gcm91bmRUcmlwSnNvbih0LCBgewor
ICAgICAgICAidmVyc2lvbiI6IDQsCisgICAgICAgICJEdW1teUJ1aWxkZXIiOiB7CisgICAgICAg
ICAgICAiYnVpbGROdW1iZXJzIjogWyI2IiwgIjUiLCAiNCIsICIzIiwgIjIiXSwKKyAgICAgICAg
ICAgICJ0ZXN0cyI6IHsKKyAgICAgICAgICAgICAgICAiMDA1Lmh0bWwiOiB7InJlc3VsdHMiOiBb
WzUsICJQIl1dLCAidGltZXMiOiBbWzEsIDBdLCBbNCwgMV1dfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfWApCisKKwlidWZmZXIgOj0gYnl0ZXMuTmV3QnVmZmVyU3RyaW5nKCIiKQor
CWVyciA6PSB3cml0ZU1lcmdlZEpzb24oYnVmZmVyLCBzdHJpbmdzLk5ld1JlYWRlcihhZ2dyZWdh
dGUpLCBzdHJpbmdzLk5ld1JlYWRlcihpbmNyZW1lbnRhbCksICJEdW1teUJ1aWxkZXIiLCA1KQor
CWlmIGVyciAhPSBuaWwgeworCQl0LkVycm9yZihlcnIuU3RyaW5nKCkpCisJfQorCWFzc2VydEVx
dWFsKHQsICJNZXJnZWQgSlNPTjoiLCBzdHJpbmcoYnVmZmVyLkJ5dGVzKCkpLCBleHBlY3RlZCsi
XG4iKQorfQorCitmdW5jIFRlc3RXcml0ZU1lcmdlZEpzb25IaWVyYXJjaGljYWwodCAqdGVzdGlu
Zy5UKSB7CisJYWdncmVnYXRlIDo9IGB7CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAg
IkR1bW15QnVpbGRlciI6IHsKKyAgICAgICAgICAgICJidWlsZE51bWJlcnMiOiBbIjIiLCAiMSJd
LAorICAgICAgICAgICAgInRlc3RzIjogeworICAgICAgICAgICAgICAgICJiYXIiOiB7CisgICAg
ICAgICAgICAgICAgICAgICJiYXoiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiMDAzLmh0
bWwiOiB7InJlc3VsdHMiOiBbWzEsICJGIl1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgImZvbyI6
IHsKKyAgICAgICAgICAgICAgICAgICAgIjAwMS5odG1sIjogeyJyZXN1bHRzIjogW1sxLCAiRiJd
XSwgInRpbWVzIjogW1sxLCAwXV19LAorICAgICAgICAgICAgICAgICAgICAiMDAyLmh0bWwiOiB7
InJlc3VsdHMiOiBbWzEsICJGIl1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAgICAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgICAgICJmb29iYXIiOiB7CisgICAgICAgICAgICAgICAgICAgICIw
MDUuaHRtbCI6IHsicmVzdWx0cyI6IFtbMSwgIkYiXV0sICJ0aW1lcyI6IFtbMSwgMF1dfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH1gCisKKwlpbmNy
ZW1lbnRhbCA6PSBgeworICAgICAgICAidmVyc2lvbiI6IDQsCisgICAgICAgICJEdW1teUJ1aWxk
ZXIiOiB7CisgICAgICAgICAgICAiYnVpbGROdW1iZXJzIjogWyIzIl0sCisgICAgICAgICAgICAi
dGVzdHMiOiB7CisgICAgICAgICAgICAgICAgImJhciI6IHsKKyAgICAgICAgICAgICAgICAgICAg
ImJheiI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICIwMDQuaHRtbCI6IHsicmVzdWx0cyI6
IFtbMSwgIkYiXV0sICJ0aW1lcyI6IFtbMSwgMF1dfQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiZm9vIjogeworICAgICAgICAgICAg
ICAgICAgICAiMDAxLmh0bWwiOiB7InJlc3VsdHMiOiBbWzEsICJGIl1dLCAidGltZXMiOiBbWzEs
IDBdXX0sCisgICAgICAgICAgICAgICAgICAgICIwMDIuaHRtbCI6IHsicmVzdWx0cyI6IFtbMSwg
IkYiXV0sICJ0aW1lcyI6IFtbMSwgMF1dfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH1gCisKKwlleHBlY3RlZCA6PSByb3VuZFRyaXBKc29uKHQsIGB7
CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAgICAg
ICAgICAgICJidWlsZE51bWJlcnMiOiBbIjMiLCAiMiIsICIxIl0sCisgICAgICAgICAgICAidGVz
dHMiOiB7CisgICAgICAgICAgICAgICAgImJhciI6IHsKKyAgICAgICAgICAgICAgICAgICAgImJh
eiI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICIwMDMuaHRtbCI6IHsicmVzdWx0cyI6IFtb
MSwgIk4iXSxbMSwgIkYiXV0sICJ0aW1lcyI6IFtbMiwgMF1dfSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICIwMDQuaHRtbCI6IHsicmVzdWx0cyI6IFtbMSwgIkYiXV0sICJ0aW1lcyI6IFtbMSwg
MF1dfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICAiZm9vIjogeworICAgICAgICAgICAgICAgICAgICAiMDAxLmh0bWwiOiB7InJlc3Vs
dHMiOiBbWzIsICJGIl1dLCAidGltZXMiOiBbWzIsIDBdXX0sCisgICAgICAgICAgICAgICAgICAg
ICIwMDIuaHRtbCI6IHsicmVzdWx0cyI6IFtbMiwgIkYiXV0sICJ0aW1lcyI6IFtbMiwgMF1dfQor
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgImZvb2JhciI6IHsKKyAgICAgICAg
ICAgICAgICAgICAgIjAwNS5odG1sIjogeyJyZXN1bHRzIjogW1sxLCAiTiJdLFsxLCAiRiJdXSwg
InRpbWVzIjogW1syLCAwXV19CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfWApCisKKwlidWZmZXIgOj0gYnl0ZXMuTmV3QnVmZmVyU3RyaW5nKCIiKQor
CWVyciA6PSB3cml0ZU1lcmdlZEpzb24oYnVmZmVyLCBzdHJpbmdzLk5ld1JlYWRlcihhZ2dyZWdh
dGUpLCBzdHJpbmdzLk5ld1JlYWRlcihpbmNyZW1lbnRhbCksICJEdW1teUJ1aWxkZXIiLCA1KQor
CWlmIGVyciAhPSBuaWwgeworCQl0LkVycm9yZihlcnIuU3RyaW5nKCkpCisJfQorCWFzc2VydEVx
dWFsKHQsICJNZXJnZWQgSlNPTjoiLCBzdHJpbmcoYnVmZmVyLkJ5dGVzKCkpLCBleHBlY3RlZCsi
XG4iKQorfQorCitmdW5jIFRlc3RXcml0ZU1lcmdlZEpzb25EaWZmZXJlbnRSZXN1bHQodCAqdGVz
dGluZy5UKSB7CisJYWdncmVnYXRlIDo9IGB7CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAg
ICAgIkR1bW15QnVpbGRlciI6IHsKKyAgICAgICAgICAgICJidWlsZE51bWJlcnMiOiBbIjIiLCAi
MSJdLAorICAgICAgICAgICAgImZpeGFibGVDb3VudCI6IFszLCA4XSwKKyAgICAgICAgICAgICJm
aXhhYmxlQ291bnRzIjogW3siWiI6IDF9LCB7IkMiOiAxfV0sCisgICAgICAgICAgICAidGVzdHMi
OiB7CisgICAgICAgICAgICAgICAgImZvbyI6IHsKKyAgICAgICAgICAgICAgICAgICAgIjAwMS5o
dG1sIjogeyJyZXN1bHRzIjogW1sxLCAiRiJdXSwgInRpbWVzIjogW1sxLCAwXV19CisgICAgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiMDAyLmh0bWwiOiB7InJlc3VsdHMiOiBbWzEs
ICJGIl1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH1gCisKKwlpbmNyZW1lbnRhbCA6PSBgeworICAgICAgICAidmVyc2lvbiI6IDQsCisgICAgICAg
ICJEdW1teUJ1aWxkZXIiOiB7CisgICAgICAgICAgICAiYnVpbGROdW1iZXJzIjogWyIzIl0sCisg
ICAgICAgICAgICAiZml4YWJsZUNvdW50IjogWzRdLAorICAgICAgICAgICAgImZpeGFibGVDb3Vu
dHMiOiBbeyJBIjogMX1dLAorICAgICAgICAgICAgInRlc3RzIjogeworICAgICAgICAgICAgICAg
ICJmb28iOiB7CisgICAgICAgICAgICAgICAgICAgICIwMDEuaHRtbCI6IHsicmVzdWx0cyI6IFtb
MSwgIkkiXV0sICJ0aW1lcyI6IFtbMSwgMjBdXX0KKyAgICAgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgICAgICIwMDIuaHRtbCI6IHsicmVzdWx0cyI6IFtbMSwgIlQiXV0sICJ0aW1lcyI6IFtb
MSwgMTBdXX0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH1gCisKKwlleHBlY3RlZCA6
PSByb3VuZFRyaXBKc29uKHQsIGB7CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1
bW15QnVpbGRlciI6IHsKKyAgICAgICAgICAgICJidWlsZE51bWJlcnMiOiBbIjMiLCAiMiIsICIx
Il0sCisgICAgICAgICAgICAiZml4YWJsZUNvdW50IjogWzQsIDMsIDhdLAorICAgICAgICAgICAg
ImZpeGFibGVDb3VudHMiOiBbeyJBIjogMX0sIHsiWiI6IDF9LCB7IkMiOiAxfV0sCisgICAgICAg
ICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgImZvbyI6IHsKKyAgICAgICAgICAgICAg
ICAgICAgIjAwMS5odG1sIjogeyJyZXN1bHRzIjogW1sxLCAiSSJdLFsxLCAiRiJdXSwgInRpbWVz
IjogW1sxLCAyMF0sWzEsIDBdXX0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
ICIwMDIuaHRtbCI6IHsicmVzdWx0cyI6IFtbMSwgIlQiXSxbMSwgIkYiXV0sICJ0aW1lcyI6IFtb
MSwgMTBdLFsxLCAwXV19CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9YCkKKworCWJ1
ZmZlciA6PSBieXRlcy5OZXdCdWZmZXJTdHJpbmcoIiIpCisJZXJyIDo9IHdyaXRlTWVyZ2VkSnNv
bihidWZmZXIsIHN0cmluZ3MuTmV3UmVhZGVyKGFnZ3JlZ2F0ZSksIHN0cmluZ3MuTmV3UmVhZGVy
KGluY3JlbWVudGFsKSwgIkR1bW15QnVpbGRlciIsIDUpCisJaWYgZXJyICE9IG5pbCB7CisJCXQu
RXJyb3JmKGVyci5TdHJpbmcoKSkKKwl9CisJYXNzZXJ0RXF1YWwodCwgIk1lcmdlZCBKU09OOiIs
IHN0cmluZyhidWZmZXIuQnl0ZXMoKSksIGV4cGVjdGVkKyJcbiIpCit9CisKK2Z1bmMgVGVzdFdy
aXRlTWVyZ2VkSnNvbkluY3JlbWVudGFsTWlzc2luZ1Jlc3VsdCh0ICp0ZXN0aW5nLlQpIHsKKwlh
Z2dyZWdhdGUgOj0gYHsKKyAgICAgICAgInZlcnNpb24iOiA0LAorICAgICAgICAiRHVtbXlCdWls
ZGVyIjogeworICAgICAgICAgICAgImJ1aWxkTnVtYmVycyI6IFsiMiIsICIxIl0sCisgICAgICAg
ICAgICAiZml4YWJsZUNvdW50IjogWzMsIDhdLAorICAgICAgICAgICAgImZpeGFibGVDb3VudHMi
OiBbeyJaIjogMX0sIHsiQyI6IDF9XSwKKyAgICAgICAgICAgICJ0ZXN0cyI6IHsKKyAgICAgICAg
ICAgICAgICAiZm9vIjogeworICAgICAgICAgICAgICAgICAgICAiMDAxLmh0bWwiOiB7InJlc3Vs
dHMiOiBbWzEsICJGIl1dLCAidGltZXMiOiBbWzEsIDBdXX0KKyAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgICIwMDIuaHRtbCI6IHsicmVzdWx0cyI6IFtbMSwgIkYiXV0sICJ0aW1l
cyI6IFtbMSwgMF1dfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfWAKKworCWluY3Jl
bWVudGFsIDo9IGB7CisgICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRl
ciI6IHsKKyAgICAgICAgICAgICJidWlsZE51bWJlcnMiOiBbIjMiXSwKKyAgICAgICAgICAgICJm
aXhhYmxlQ291bnQiOiBbNF0sCisgICAgICAgICAgICAiZml4YWJsZUNvdW50cyI6IFt7IkEiOiAx
fV0sCisgICAgICAgICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgImZvbyI6IHsKKyAg
ICAgICAgICAgICAgICAgICAgIjAwMS5odG1sIjogeyJyZXN1bHRzIjogW1sxLCAiSSJdXSwgInRp
bWVzIjogW1sxLCAyMF1dfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH1gCisKKwlleHBlY3RlZCA6PSByb3VuZFRyaXBKc29uKHQsIGB7CisgICAgICAg
ICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAgICAgICAgICAgICJi
dWlsZE51bWJlcnMiOiBbIjMiLCAiMiIsICIxIl0sCisgICAgICAgICAgICAiZml4YWJsZUNvdW50
IjogWzQsIDMsIDhdLAorICAgICAgICAgICAgImZpeGFibGVDb3VudHMiOiBbeyJBIjogMX0sIHsi
WiI6IDF9LCB7IkMiOiAxfV0sCisgICAgICAgICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAg
ICAgImZvbyI6IHsKKyAgICAgICAgICAgICAgICAgICAgIjAwMS5odG1sIjogeyJyZXN1bHRzIjog
W1sxLCAiSSJdLFsxLCAiRiJdXSwgInRpbWVzIjogW1sxLCAyMF0sWzEsIDBdXX0KKyAgICAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgICAgICIwMDIuaHRtbCI6IHsicmVzdWx0cyI6IFtbMSwg
Ik4iXSxbMSwgIkYiXV0sICJ0aW1lcyI6IFtbMiwgMF1dfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfWApCisKKwlidWZmZXIgOj0gYnl0ZXMuTmV3QnVmZmVyU3RyaW5nKCIiKQorCWVy
ciA6PSB3cml0ZU1lcmdlZEpzb24oYnVmZmVyLCBzdHJpbmdzLk5ld1JlYWRlcihhZ2dyZWdhdGUp
LCBzdHJpbmdzLk5ld1JlYWRlcihpbmNyZW1lbnRhbCksICJEdW1teUJ1aWxkZXIiLCA1KQorCWlm
IGVyciAhPSBuaWwgeworCQl0LkVycm9yZihlcnIuU3RyaW5nKCkpCisJfQorCWFzc2VydEVxdWFs
KHQsICJNZXJnZWQgSlNPTjoiLCBzdHJpbmcoYnVmZmVyLkJ5dGVzKCkpLCBleHBlY3RlZCsiXG4i
KQorfQorCitmdW5jIFRlc3RXcml0ZU1lcmdlZEpzb25JbnZhbGlkTnVtYmVyT2ZJbmNyZW1lbnRh
bFJ1bnModCAqdGVzdGluZy5UKSB7CisJYWdncmVnYXRlIDo9IGB7CisgICAgICAgICJ2ZXJzaW9u
IjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAgICAgICAgICAgICJidWlsZE51bWJl
cnMiOiBbIjIiLCAiMSJdLAorICAgICAgICAgICAgInRlc3RzIjoge30KKyAgICAgICAgfQorICAg
IH1gCisKKwlpbmNyZW1lbnRhbCA6PSBgeworICAgICAgICAidmVyc2lvbiI6IDQsCisgICAgICAg
ICJEdW1teUJ1aWxkZXIiOiB7CisgICAgICAgICAgICAiYnVpbGROdW1iZXJzIjogW10sCisgICAg
ICAgICAgICAidGVzdHMiOiB7fQorICAgICAgICB9CisgICAgfWAKKworCWVyciA6PSB3cml0ZU1l
cmdlZEpzb24oYnl0ZXMuTmV3QnVmZmVyU3RyaW5nKCIiKSwgc3RyaW5ncy5OZXdSZWFkZXIoYWdn
cmVnYXRlKSwgc3RyaW5ncy5OZXdSZWFkZXIoaW5jcmVtZW50YWwpLCAiRHVtbXlCdWlsZGVyIiwg
NSkKKwlpZiBlcnIgPT0gbmlsIHsKKwkJdC5FcnJvcmYoIkluY3JlbWVudGFsIHJlc3VsdHMgc2hv
dWxkIGhhdmUgZXhhY3RseSAxIHJ1bi4iKQorCX0KKworCWFnZ3JlZ2F0ZSA9IGB7CisgICAgICAg
ICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAgICAgICAgICAgICJi
dWlsZE51bWJlcnMiOiBbIjIiLCAiMSJdLAorICAgICAgICAgICAgInRlc3RzIjoge30KKyAgICAg
ICAgfQorICAgIH1gCisKKwlpbmNyZW1lbnRhbCA9IGB7CisgICAgICAgICJ2ZXJzaW9uIjogNCwK
KyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAgICAgICAgICAgICJidWlsZE51bWJlcnMiOiBb
IjQiLCAiMyJdLAorICAgICAgICAgICAgInRlc3RzIjoge30KKyAgICAgICAgfQorICAgIH1gCisK
KwllcnIgPSB3cml0ZU1lcmdlZEpzb24oYnl0ZXMuTmV3QnVmZmVyU3RyaW5nKCIiKSwgc3RyaW5n
cy5OZXdSZWFkZXIoYWdncmVnYXRlKSwgc3RyaW5ncy5OZXdSZWFkZXIoaW5jcmVtZW50YWwpLCAi
RHVtbXlCdWlsZGVyIiwgNSkKKwlpZiBlcnIgPT0gbmlsIHsKKwkJdC5FcnJvcmYoIkluY3JlbWVu
dGFsIHJlc3VsdHMgc2hvdWxkIGhhdmUgZXhhY3RseSAxIHJ1bi4iKQorCX0KK30KKworZnVuYyBu
ZXdGaWxlSGVhZGVyKHQgKnRlc3RpbmcuVCwgZmlsZUNvbnRlbnRzIHN0cmluZykgKm11bHRpcGFy
dC5GaWxlSGVhZGVyIHsKKwltZXNzYWdlIDo9IGAKKy0tJXMKK0NvbnRlbnQtRGlzcG9zaXRpb246
IGZvcm0tZGF0YTsgbmFtZT0iZmlsZWEiOyBmaWxlbmFtZT0iZmlsZWEudHh0IgorQ29udGVudC1U
eXBlOiB0ZXh0L3BsYWluCisKKyVzCistLSVzCitgCisKKwlkYXRhIDo9IGZtdC5TcHJpbnRmKG1l
c3NhZ2UsIGZvcm1Cb3VuZGFyeSwgZmlsZUNvbnRlbnRzLCBmb3JtQm91bmRhcnkpCisJcmV0dXJu
IG5ld0Zvcm0odCwgZGF0YSkuRmlsZVsiZmlsZWEiXVswXQorfQorCitmdW5jIFRlc3RXcml0ZU1l
cmdlZEpzb25Gcm9tRmlsZUhlYWRlcih0ICp0ZXN0aW5nLlQpIHsKKwlhZ2dyZWdhdGUgOj0gYHsK
KyAgICAgICAgInZlcnNpb24iOiA0LAorICAgICAgICAiRHVtbXlCdWlsZGVyIjogeworICAgICAg
ICAgICAgImJ1aWxkTnVtYmVycyI6IFsiNSIsICI0IiwgIjMiLCAiMiIsICIxIl0sCisgICAgICAg
ICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgIjAwMy5odG1sIjogeyJyZXN1bHRzIjog
W1s1LCAiRiJdXSwgInRpbWVzIjogW1s1LCAwXV19CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9YAorCisJaW5jcmVtZW50YWwgOj0gYHsKKyAgICAgICAgInZlcnNpb24iOiA0LAorICAg
ICAgICAiRHVtbXlCdWlsZGVyIjogeworICAgICAgICAgICAgImJ1aWxkTnVtYmVycyI6IFsiNiJd
LAorICAgICAgICAgICAgInRlc3RzIjogeworICAgICAgICAgICAgICAgICIwMDMuaHRtbCI6IHsi
cmVzdWx0cyI6IFtbMSwgIlQiXV0sICJ0aW1lcyI6IFtbMSwgMTBdXX0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH1gCisKKwlleHBlY3RlZCA6PSByb3VuZFRyaXBKc29uKHQsIGB7Cisg
ICAgICAgICJ2ZXJzaW9uIjogNCwKKyAgICAgICAgIkR1bW15QnVpbGRlciI6IHsKKyAgICAgICAg
ICAgICJidWlsZE51bWJlcnMiOiBbIjYiLCAiNSIsICI0IiwgIjMiLCAiMiJdLAorICAgICAgICAg
ICAgInRlc3RzIjogeworICAgICAgICAgICAgICAgICIwMDMuaHRtbCI6IHsicmVzdWx0cyI6IFtb
MSwgIlQiXSwgWzQsICJGIl1dLCAidGltZXMiOiBbWzEsIDEwXSwgWzQsIDBdXX0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH1gKQorCisJYnVmZmVyLCBlcnIgOj0gV3JpdGVNZXJnZWRK
c29uRnJvbUZpbGVIZWFkZXIoc3RyaW5ncy5OZXdSZWFkZXIoYWdncmVnYXRlKSwgbmV3RmlsZUhl
YWRlcih0LCBpbmNyZW1lbnRhbCksICJEdW1teUJ1aWxkZXIiLCA1KQorCWlmIGVyciAhPSBuaWwg
eworCQl0LkVycm9yZihlcnIuU3RyaW5nKCkpCisJfQorCWFzc2VydEVxdWFsKHQsICJNZXJnZWQg
SlNPTjoiLCBzdHJpbmcoYnVmZmVyLkJ5dGVzKCkpLCBleHBlY3RlZCsiXG4iKQorfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvcnVuL3J1bi5nbyBiL1Rvb2xzL1Rlc3Rz
RGFzaGJvYXJkU2VydmVyL3J1bi9ydW4uZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWYzNWViMGRiM2RlMTA3YThj
NjE4MjMyMGY0NjQ1YWZlMTE0ZWIxYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RzRGFz
aGJvYXJkU2VydmVyL3J1bi9ydW4uZ28KQEAgLTAsMCArMSw0MDkgQEAKK3BhY2thZ2UgcnVuCisK
K2ltcG9ydCAoCisJImFwcGVuZ2luZSIKKwkiYXBwZW5naW5lL2Jsb2JzdG9yZSIKKwkiYXBwZW5n
aW5lL2RhdGFzdG9yZSIKKwkiYXBwZW5naW5lL3VzZXIiCisJImJhc2UiCisJImZtdCIKKwkiaHR0
cCIKKwkiaW8iCisJIm1pbWUvbXVsdGlwYXJ0IgorCSJvcyIKKwkidGVtcGxhdGUiCisJInRpbWUi
CispCisKKy8vIFRoaXMgZmlsZSBzaG91bGQgb25seSBjb250YWluIGZ1bmN0aW9ucyB0aGF0IGV4
cGxpY3RseSBuZWVkIHRvIGludGVyYWN0IHdpdGggYXBwZW5naW5lIEFQSXMuCisvLyBFdmVyeXRo
aW5nIGVsc2Ugc2hvdWxkIGdvIGluIGJhc2UuZ28gc28gaXQgY2FuIGJlIGVhc2lseSB0ZXN0ZWQg
dXNpbmcgZ290ZXN0IHdpdGhvdXQgYXBwZW5naW5lIGRlcGVuZGVuY2llcy4KKy8vIEZJWE1FOiBN
b2NrIG91dCB0aGUgYXBwZW5naW5lIEFQSXMgc28gd2UgY2FuIHVuaXR0ZXN0IGFsbCB0aGlzIGFz
IHdlbGwgd2l0aG91dCBhcHBlbmdpbmUgZGVwZW5kZW5jaWVzLgorCitmdW5jIGluaXQoKSB7CisJ
aHR0cC5IYW5kbGVGdW5jKCIvIiwgcm9vdCkKKwlodHRwLkhhbmRsZUZ1bmMoIi90ZXN0ZmlsZSIs
IHRlc3RGaWxlKQorCWh0dHAuSGFuZGxlRnVuYygiL3Rlc3RmaWxlL2RlbGV0ZSIsIGRlbGV0ZUZp
bGUpCisJaHR0cC5IYW5kbGVGdW5jKCIvdGVzdGZpbGUvdXBsb2FkIiwgdXBsb2FkRmlsZSkKKwlo
dHRwLkhhbmRsZUZ1bmMoIi90ZXN0ZmlsZS91cGxvYWRmb3JtIiwgdXBsb2FkRm9ybSkKK30KKwor
dHlwZSBUZXN0RmlsZSBzdHJ1Y3QgeworCU1hc3RlciAgICAgICAgICAgc3RyaW5nCisJQnVpbGRl
ciAgICAgICAgICBzdHJpbmcKKwlUZXN0VHlwZSAgICAgICAgIHN0cmluZworCU5hbWUgICAgICAg
ICAgICAgc3RyaW5nCisJQmxvYktleSAgICAgICAgICBhcHBlbmdpbmUuQmxvYktleQorCURhdGVN
aWNyb3NlY29uZHMgZGF0YXN0b3JlLlRpbWUKK30KKworZnVuYyBuZXdUZXN0RmlsZShtYXN0ZXIg
c3RyaW5nLCBidWlsZGVyIHN0cmluZywgdGVzdFR5cGUgc3RyaW5nLCBuYW1lIHN0cmluZykgVGVz
dEZpbGUgeworCXJldHVybiBUZXN0RmlsZXsKKwkJTWFzdGVyOiAgICAgICAgICAgbWFzdGVyLAor
CQlCdWlsZGVyOiAgICAgICAgICBidWlsZGVyLAorCQlUZXN0VHlwZTogICAgICAgICB0ZXN0VHlw
ZSwKKwkJTmFtZTogICAgICAgICAgICAgbmFtZSwKKwkJRGF0ZU1pY3Jvc2Vjb25kczogZGF0YXN0
b3JlLlNlY29uZHNUb1RpbWUodGltZS5TZWNvbmRzKCkpLAorCX0KK30KKworY29uc3QgKAorCWFn
Z3JlZ2F0ZVJlc3VsdHNGaWxlTmFtZSA9ICJyZXN1bHRzLmpzb24iCisJYWdncmVnYXRlUmVzdWx0
c1NtYWxsRmlsZU5hbWUgPSAicmVzdWx0cy1zbWFsbC5qc29uIgorCWluY3JlbWVudGFsUmVzdWx0
c0ZpbGVOYW1lID0gImluY3JlbWVudGFsX3Jlc3VsdHMuanNvbiIKKwlmdWxsUmVzdWx0c0ZpbGVO
YW1lID0gImZ1bGxfcmVzdWx0cy5qc29uIgorCW1heEJ1aWxkcyA9IDc1MAorCW1heEJ1aWxkc1Nt
YWxsID0gMjAwCispCisKK3ZhciBtZW51VGVtcGxhdGUgPSB0ZW1wbGF0ZS5NdXN0KHRlbXBsYXRl
LlBhcnNlRmlsZSgidGVtcGxhdGVzL21lbnUuaHRtbCIpKQordmFyIHVwbG9hZFRlbXBsYXRlID0g
dGVtcGxhdGUuTXVzdCh0ZW1wbGF0ZS5QYXJzZUZpbGUoInRlbXBsYXRlcy91cGxvYWRmb3JtLmh0
bWwiKSkKK3ZhciBmaWxlTGlzdFRlbXBsYXRlID0gdGVtcGxhdGUuTXVzdCh0ZW1wbGF0ZS5QYXJz
ZUZpbGUoInRlbXBsYXRlcy9maWxlbGlzdC5odG1sIikpCit2YXIgZmlsZUxpc3RKc29ucFRlbXBs
YXRlID0gdGVtcGxhdGUuTXVzdCh0ZW1wbGF0ZS5QYXJzZUZpbGUoInRlbXBsYXRlcy9maWxlbGlz
dC5qc29ucCIpKQorCit0eXBlIEZpbGVMaXN0IHN0cnVjdCB7CisJTWFzdGVyICAgICAgICBzdHJp
bmcKKwlCdWlsZGVyICAgICAgIHN0cmluZworCVRlc3RUeXBlICAgICAgc3RyaW5nCisJTmFtZSAg
ICAgICAgICBzdHJpbmcKKwlGaWxlc1dpdGhLZXlzIFtdRmlsZVdpdGhLZXkKK30KKwordHlwZSBG
aWxlV2l0aEtleSBzdHJ1Y3QgeworCUZpbGUgVGVzdEZpbGUKKwlLZXkgICpkYXRhc3RvcmUuS2V5
Cit9CisKK2Z1bmMgc2VydmU1MDAoY29udGV4dCBhcHBlbmdpbmUuQ29udGV4dCwgd3JpdGVyIGh0
dHAuUmVzcG9uc2VXcml0ZXIsIGh0bWwgLi4uc3RyaW5nKSB7CisJZm9yIF8sIHN0ciA6PSByYW5n
ZSBodG1sIHsKKwkJY29udGV4dC5EZWJ1Z2Yoc3RyKQorCX0KKwlpZiBlcnIgOj0gYmFzZS5TZXJ2
ZTUwMCh3cml0ZXIsIGh0bWwuLi4pOyBlcnIgIT0gbmlsIHsKKwkJY29udGV4dC5FcnJvcmYoZXJy
LlN0cmluZygpKQorCX0KK30KKworZnVuYyBzZXJ2ZTQwNChjb250ZXh0IGFwcGVuZ2luZS5Db250
ZXh0LCB3cml0ZXIgaHR0cC5SZXNwb25zZVdyaXRlciwgaHRtbCAuLi5zdHJpbmcpIHsKKwlmb3Ig
Xywgc3RyIDo9IHJhbmdlIGh0bWwgeworCQljb250ZXh0LkRlYnVnZihzdHIpCisJfQorCWlmIGVy
ciA6PSBiYXNlLlNlcnZlNDA0KHdyaXRlciwgaHRtbC4uLik7IGVyciAhPSBuaWwgeworCQljb250
ZXh0LkVycm9yZihlcnIuU3RyaW5nKCkpCisJfQorfQorCitmdW5jIHNlcnZlNDAzKGNvbnRleHQg
YXBwZW5naW5lLkNvbnRleHQsIHdyaXRlciBodHRwLlJlc3BvbnNlV3JpdGVyLCBodG1sIC4uLnN0
cmluZykgeworCWZvciBfLCBzdHIgOj0gcmFuZ2UgaHRtbCB7CisJCWNvbnRleHQuRGVidWdmKHN0
cikKKwl9CisJaWYgZXJyIDo9IGJhc2UuU2VydmU0MDMod3JpdGVyLCBodG1sLi4uKTsgZXJyICE9
IG5pbCB7CisJCWNvbnRleHQuRXJyb3JmKGVyci5TdHJpbmcoKSkKKwl9Cit9CisKK2Z1bmMgc2Vy
dmUyMDAoY29udGV4dCBhcHBlbmdpbmUuQ29udGV4dCwgd3JpdGVyIGh0dHAuUmVzcG9uc2VXcml0
ZXIsIGh0bWwgLi4uc3RyaW5nKSB7CisJaWYgZXJyIDo9IGJhc2UuU2VydmUyMDAod3JpdGVyLCBo
dG1sLi4uKTsgZXJyICE9IG5pbCB7CisJCWNvbnRleHQuRXJyb3JmKGVyci5TdHJpbmcoKSkKKwl9
Cit9CisKK2Z1bmMgbWVyZ2VKc29uRmlsZShjb250ZXh0IGFwcGVuZ2luZS5Db250ZXh0LCBtYXN0
ZXIgc3RyaW5nLCBidWlsZGVyIHN0cmluZywgdGVzdFR5cGUgc3RyaW5nLCBmaWxlSGVhZGVyICpt
dWx0aXBhcnQuRmlsZUhlYWRlcikgb3MuRXJyb3IgeworCXRlc3RGaWxlIDo9IG5ld1Rlc3RGaWxl
KG1hc3RlciwgYnVpbGRlciwgdGVzdFR5cGUsIGFnZ3JlZ2F0ZVJlc3VsdHNGaWxlTmFtZSkKKwl0
ZXN0RmlsZVNtYWxsIDo9IG5ld1Rlc3RGaWxlKG1hc3RlciwgYnVpbGRlciwgdGVzdFR5cGUsIGFn
Z3JlZ2F0ZVJlc3VsdHNTbWFsbEZpbGVOYW1lKQorCisJXywgZmlsZXMgOj0gcXVlcnlGaWxlc0Zv
clRlc3RGaWxlKGNvbnRleHQsIHRlc3RGaWxlLCAxKQorCWlmIGxlbihmaWxlcykgPT0gMCB7CisJ
CXJlc3VsdHNFcnIgOj0gYWRkRmlsZUZyb21GaWxlSGVhZGVyKGNvbnRleHQsIHRlc3RGaWxlLCBm
aWxlSGVhZGVyKQorCQlyZXN1bHRzU21hbGxFcnIgOj0gYWRkRmlsZUZyb21GaWxlSGVhZGVyKGNv
bnRleHQsIHRlc3RGaWxlU21hbGwsIGZpbGVIZWFkZXIpCisJCWlmIHJlc3VsdHNFcnIgIT0gbmls
IHsKKwkJCXJldHVybiBiYXNlLkVycm9yKHJlc3VsdHNFcnIpCisJCX0KKwkJaWYgcmVzdWx0c1Nt
YWxsRXJyICE9IG5pbCB7CisJCQlyZXR1cm4gYmFzZS5FcnJvcihyZXN1bHRzU21hbGxFcnIpCisJ
CX0KKwkJcmV0dXJuIG5pbAorCX0KKworCXJlc3VsdHNFcnIgOj0gbWVyZ2VJbmRpdmlkdWFsSnNv
bkZpbGUoY29udGV4dCwgdGVzdEZpbGUsIGZpbGVzWzBdLkJsb2JLZXksIGJ1aWxkZXIsIGZpbGVI
ZWFkZXIsIG1heEJ1aWxkcykKKwlyZXN1bHRzU21hbGxFcnIgOj0gbWVyZ2VJbmRpdmlkdWFsSnNv
bkZpbGUoY29udGV4dCwgdGVzdEZpbGVTbWFsbCwgZmlsZXNbMF0uQmxvYktleSwgYnVpbGRlciwg
ZmlsZUhlYWRlciwgbWF4QnVpbGRzU21hbGwpCisJcmV0dXJuIGJhc2UuTXVsdGlFcnJvcihyZXN1
bHRzRXJyLCByZXN1bHRzU21hbGxFcnIpCit9CisKK2Z1bmMgbWVyZ2VJbmRpdmlkdWFsSnNvbkZp
bGUoY29udGV4dCBhcHBlbmdpbmUuQ29udGV4dCwgdGVzdEZpbGUgVGVzdEZpbGUsIGJsb2JLZXkg
YXBwZW5naW5lLkJsb2JLZXksIGJ1aWxkZXIgc3RyaW5nLCBmaWxlSGVhZGVyICptdWx0aXBhcnQu
RmlsZUhlYWRlciwgbnVtUnVucyBpbnQpIG9zLkVycm9yIHsKKwlidWZmZXIsIGVyciA6PSBiYXNl
LldyaXRlTWVyZ2VkSnNvbkZyb21GaWxlSGVhZGVyKGJsb2JzdG9yZS5OZXdSZWFkZXIoY29udGV4
dCwgYmxvYktleSksIGZpbGVIZWFkZXIsIGJ1aWxkZXIsIG51bVJ1bnMpCisJaWYgZXJyICE9IG5p
bCB7CisJCXJldHVybiBiYXNlLkVycm9yKGVycikKKwl9CisJcmV0dXJuIGJhc2UuRXJyb3IoYWRk
RmlsZShjb250ZXh0LCB0ZXN0RmlsZSwgYnVmZmVyKSkKK30KKworZnVuYyBzYXZlVG9CbG9iU3Rv
cmUoY29udGV4dCBhcHBlbmdpbmUuQ29udGV4dCwgZnJvbSBpby5SZWFkZXIpIChhcHBlbmdpbmUu
QmxvYktleSwgb3MuRXJyb3IpIHsKKwl2YXIga2V5IGFwcGVuZ2luZS5CbG9iS2V5CisJd3JpdGVy
LCBlcnIgOj0gYmxvYnN0b3JlLkNyZWF0ZShjb250ZXh0LCAiYXBwbGljYXRpb24vanNvbiIpCisJ
aWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBrZXksIGJhc2UuRXJyb3IoZXJyKQorCX0KKwlpZiBf
LCBlcnIgPSBpby5Db3B5KHdyaXRlciwgZnJvbSk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4ga2V5
LCBlcnIKKwl9CisJaWYgZXJyID0gd3JpdGVyLkNsb3NlKCk7IGVyciAhPSBuaWwgeworCQlyZXR1
cm4ga2V5LCBiYXNlLkVycm9yKGVycikKKwl9CisJa2V5LCBlcnIgPSB3cml0ZXIuS2V5KCkKKwly
ZXR1cm4ga2V5LCBiYXNlLkVycm9yKGVycikKK30KKworZnVuYyBhZGRGaWxlRnJvbUZpbGVIZWFk
ZXIoY29udGV4dCBhcHBlbmdpbmUuQ29udGV4dCwgdGVzdEZpbGUgVGVzdEZpbGUsIGZpbGVIZWFk
ZXIgKm11bHRpcGFydC5GaWxlSGVhZGVyKSBvcy5FcnJvciB7CisJZmlsZSwgZXJyIDo9IGZpbGVI
ZWFkZXIuT3BlbigpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBiYXNlLkVycm9yKGVycikK
Kwl9CisJaWYgZXJyID0gYWRkRmlsZShjb250ZXh0LCB0ZXN0RmlsZSwgZmlsZSk7IGVyciAhPSBu
aWwgeworCQlyZXR1cm4gZXJyCisJfQorCXJldHVybiBiYXNlLkVycm9yKGZpbGUuQ2xvc2UoKSkK
K30KKworZnVuYyBkZWR1cGVGaWxlKGNvbnRleHQgYXBwZW5naW5lLkNvbnRleHQsIHRlc3RGaWxl
IFRlc3RGaWxlKSBvcy5FcnJvciB7CisJa2V5cywgZmlsZXMgOj0gcXVlcnlGaWxlc0ZvclRlc3RG
aWxlKGNvbnRleHQsIHRlc3RGaWxlLCAwKQorCS8vIEJlY2F1c2Ugb2YgZXZlbnR1YWwgY29uc2lz
dGVuY3kgaW4gdGhlIEFwcEVuZ2luZSBkYXRhc3RvcmUsIGZpbGVzIHdlIGp1c3Qgd3JvdGUKKwkv
LyBtaWdodCBub3Qgc2hvdyB1cCBoZXJlLiBUaGV5J2xsIGdldCBzdWNjZXNzZnVsbHkgZGVkdXBl
ZCB0aGUgbmV4dCB0aW1lIHdlCisJLy8gdXBkYXRlIHRoaXMgZmlsZSB0aG91Z2guCisJaWYgbGVu
KGtleXMpID09IDAgeworCQlyZXR1cm4gbmlsCisJfQorCisJYmxvYktleXMgOj0gbWFrZShbXWFw
cGVuZ2luZS5CbG9iS2V5LCBsZW4oZmlsZXMpKQorCWZvciBpIDo9IDE7IGkgPCBsZW4oZmlsZXMp
OyBpKysgeworCQlibG9iS2V5c1tpXSA9IGZpbGVzW2ldLkJsb2JLZXkKKwl9CisKKwkvLyBGSVhN
RTogVGhlIGxvY2FsIEdvIGFwcGVuZ2luZSBkZXYgc2VydmVyIGhhcyBhIGJ1ZyB3aGVyZSBpdCB0
aHJvd3MgYW4gZXJyb3IgaGVyZToKKwkvLyAiQVBJIGVycm9yIDEgKGJsb2JzdG9yZTogSU5URVJO
QUxfRVJST1IpOiBuYW1lIG11c3Qgbm90IGJlIGVtcHR5LiIKKwkvLyBSZXR1cm4gbmlsIGhlcmUg
dG8gYXZvaWQgdGhyb3dpbmcgYW4gZXJyb3IuCisJaWYgZXJyIDo9IGRhdGFzdG9yZS5EZWxldGVN
dWx0aShjb250ZXh0LCBrZXlzWzE6XSk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gYmFzZS5FcnJv
cihlcnIpCisJfQorCWlmIGVyciA6PSBibG9ic3RvcmUuRGVsZXRlTXVsdGkoY29udGV4dCwgYmxv
YktleXMpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGJhc2UuRXJyb3IoZXJyKQorCX0KKwlyZXR1
cm4gbmlsCit9CisKK2Z1bmMgYWRkRmlsZShjb250ZXh0IGFwcGVuZ2luZS5Db250ZXh0LCB0ZXN0
RmlsZSBUZXN0RmlsZSwgZnJvbSBpby5SZWFkZXIpIG9zLkVycm9yIHsKKwlibG9iS2V5LCBlcnIg
Oj0gc2F2ZVRvQmxvYlN0b3JlKGNvbnRleHQsIGZyb20pCisJaWYgZXJyICE9IG5pbCB7CisJCXJl
dHVybiBlcnIKKwl9CisKKwl0ZXN0RmlsZS5CbG9iS2V5ID0gYmxvYktleQorCWlmIF8sIGVyciA9
IGRhdGFzdG9yZS5QdXQoY29udGV4dCwgZGF0YXN0b3JlLk5ld0luY29tcGxldGVLZXkoY29udGV4
dCwgIlRlc3RGaWxlIiwgbmlsKSwgJnRlc3RGaWxlKTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBl
cnIKKwl9CisKKwkvLyBGSVhNRTogTWFrZSB3aGV0aGVyIHdlIGRlZHVwZSBhIGdpdmVuIGZpbGUg
YSBwYXNzZWQgaW4gcGFyYW1ldGVyLiBGb3Igbm93LCB3ZSBkZWR1cGUgYWxsIGZpbGVzIG90aGVy
IHRoYW4gZnVsbF9yZXN1bHRzLmpzb24uCisJaWYgdGVzdEZpbGUuTmFtZSA9PSBmdWxsUmVzdWx0
c0ZpbGVOYW1lIHsKKwkJcmV0dXJuIG5pbAorCX0KKworCS8vIEZJWE1FOiBNZWFzdXJlIGhvdyBt
dWNoIGxhdGVuY3kgdGhpcyBhZGRzIGFuZCBtb3ZlIGl0IHRvIGEgVGFza1F1ZXVlIGlmIGl0IGFk
ZHMgdG9vIG11Y2ggbGF0ZW5jeS4KKwlyZXR1cm4gZGVkdXBlRmlsZShjb250ZXh0LCB0ZXN0Rmls
ZSkKK30KKworZnVuYyByb290KHdyaXRlciBodHRwLlJlc3BvbnNlV3JpdGVyLCByZXF1ZXN0ICpo
dHRwLlJlcXVlc3QpIHsKKwltZW51VGVtcGxhdGUuRXhlY3V0ZSh3cml0ZXIsIG5pbCkKK30KKwor
ZnVuYyBxdWVyeUZpbGVzRm9yVGVzdEZpbGUoY29udGV4dCBhcHBlbmdpbmUuQ29udGV4dCwgdGVz
dEZpbGUgVGVzdEZpbGUsIGxpbWl0IGludCkgKFtdKmRhdGFzdG9yZS5LZXksIFtdVGVzdEZpbGUp
IHsKKwlyZXR1cm4gcXVlcnlGaWxlcyhjb250ZXh0LCB0ZXN0RmlsZS5NYXN0ZXIsIHRlc3RGaWxl
LkJ1aWxkZXIsIHRlc3RGaWxlLlRlc3RUeXBlLCB0ZXN0RmlsZS5OYW1lLCBsaW1pdCkKK30KKwor
ZnVuYyBxdWVyeUZpbGVzKGNvbnRleHQgYXBwZW5naW5lLkNvbnRleHQsIG1hc3RlciBzdHJpbmcs
IGJ1aWxkZXIgc3RyaW5nLCB0ZXN0VHlwZSBzdHJpbmcsIG5hbWUgc3RyaW5nLCBsaW1pdCBpbnQp
IChbXSpkYXRhc3RvcmUuS2V5LCBbXVRlc3RGaWxlKSB7CisJcXVlcnkgOj0gZGF0YXN0b3JlLk5l
d1F1ZXJ5KCJUZXN0RmlsZSIpLk9yZGVyKCItRGF0ZU1pY3Jvc2Vjb25kcyIpLkxpbWl0KGxpbWl0
KQorCWlmIG1hc3RlciAhPSAiIiB7CisJCXF1ZXJ5ID0gcXVlcnkuRmlsdGVyKCJNYXN0ZXI9Iiwg
bWFzdGVyKQorCX0KKworCWlmIGJ1aWxkZXIgIT0gIiIgeworCQlxdWVyeSA9IHF1ZXJ5LkZpbHRl
cigiQnVpbGRlcj0iLCBidWlsZGVyKQorCX0KKworCWlmIHRlc3RUeXBlICE9ICIiIHsKKwkJcXVl
cnkgPSBxdWVyeS5GaWx0ZXIoIlRlc3RUeXBlPSIsIHRlc3RUeXBlKQorCX0KKworCWlmIG5hbWUg
IT0gIiIgeworCQlxdWVyeSA9IHF1ZXJ5LkZpbHRlcigiTmFtZT0iLCBuYW1lKQorCX0KKworCXZh
ciB0ZXN0RmlsZXMgW11UZXN0RmlsZQorCWtleXMsIF8gOj0gcXVlcnkuR2V0QWxsKGNvbnRleHQs
ICZ0ZXN0RmlsZXMpCisJcmV0dXJuIGtleXMsIHRlc3RGaWxlcworfQorCitmdW5jIHNlcnZlVGVz
dEZpbGUod3JpdGVyIGh0dHAuUmVzcG9uc2VXcml0ZXIsIGNvbnRleHQgYXBwZW5naW5lLkNvbnRl
eHQsIHRlc3RGaWxlIFRlc3RGaWxlLCBjYWxsYmFjayBzdHJpbmcpIHsKKwlpZiBlcnIgOj0gYmFz
ZS5TZXJ2ZUpzb24od3JpdGVyLCBibG9ic3RvcmUuTmV3UmVhZGVyKGNvbnRleHQsIHRlc3RGaWxl
LkJsb2JLZXkpLCBjYWxsYmFjayk7IGVyciAhPSBuaWwgeworCQljb250ZXh0LkVycm9yZihlcnIu
U3RyaW5nKCkpCisJfQorfQorCitmdW5jIGRlbGV0ZUZpbGUod3JpdGVyIGh0dHAuUmVzcG9uc2VX
cml0ZXIsIHJlcXVlc3QgKmh0dHAuUmVxdWVzdCkgeworCWNvbnRleHQgOj0gYXBwZW5naW5lLk5l
d0NvbnRleHQocmVxdWVzdCkKKwlxdWVyeURhdGEsIGVyciA6PSBiYXNlLlBhcnNlVGVzdEZpbGVR
dWVyeURhdGEocmVxdWVzdCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJc2VydmU0MDMoY29udGV4dCwg
d3JpdGVyLCBlcnIuU3RyaW5nKCkpCisJCXJldHVybgorCX0KKworCWN1cnJlbnRVc2VyIDo9IHVz
ZXIuQ3VycmVudChjb250ZXh0KQorCWlmICF1c2VyLklzQWRtaW4oY29udGV4dCkgeworCQlkZWxl
dGVVcmwgOj0gcmVxdWVzdC5VUkwuU3RyaW5nKCkKKwkJaHRtbCA6PSAiIgorCQlpZiBjdXJyZW50
VXNlciA9PSBuaWwgeworCQkJbG9naW5VcmwsIF8gOj0gdXNlci5Mb2dpblVSTChjb250ZXh0LCBk
ZWxldGVVcmwpCisJCQlodG1sID0gZm10LlNwcmludGYoYDxhIGhyZWY9IiVzIj5TaWduIGluPC9h
PmAsIGxvZ2luVXJsKQorCQl9IGVsc2UgeworCQkJbG9nb3V0VXJsLCBfIDo9IHVzZXIuTG9nb3V0
VVJMKGNvbnRleHQsIGRlbGV0ZVVybCkKKwkJCWh0bWwgPSBmbXQuU3ByaW50ZihgQ3VycmVudGx5
IGxvZ2dlZCBpbiBhcyAlcy4gQ29udGFjdCBvamFuQGNocm9taXVtLm9yZyB0byBiZWNvbWUgYW4g
YWRtaW4gb3IgPGEgaHJlZj0iJXMiPnNpZ24gb3V0PC9hPiBzbyB5b3UgY2FuIHNpZ24gaW4gdG8g
YSBkaWZmZXJlbnQgYWNjb3VudC5gLCBjdXJyZW50VXNlci5FbWFpbCwgbG9nb3V0VXJsKQorCQl9
CisJCXNlcnZlMjAwKGNvbnRleHQsIHdyaXRlciwgIk11c3QgYmUgbG9nZ2VkIGluIGFzIGFuIGFk
bWluLiAiLCBodG1sKQorCQlyZXR1cm4KKwl9CisKKwlpZiBrZXlTdHJpbmcgOj0gcXVlcnlEYXRh
LktleTsga2V5U3RyaW5nID09ICIiIHsKKwkJc2VydmU0MDQoY29udGV4dCwgd3JpdGVyLCAiSW52
YWxpZCBrZXk6ICIra2V5U3RyaW5nKQorCX0gZWxzZSB7CisJCWtleSwgZXJyIDo9IGRhdGFzdG9y
ZS5EZWNvZGVLZXkoa2V5U3RyaW5nKQorCQlpZiBlcnIgIT0gbmlsIHsKKwkJCXNlcnZlNDA0KGNv
bnRleHQsIHdyaXRlciwgIk5vIGVudGl0eSBleGlzdHMgd2l0aCBrZXk6ICIra2V5U3RyaW5nKQor
CQkJcmV0dXJuCisJCX0KKwkJdGVzdEZpbGUgOj0gbmV3KFRlc3RGaWxlKQorCQlpZiBlcnIgPSBk
YXRhc3RvcmUuR2V0KGNvbnRleHQsIGtleSwgdGVzdEZpbGUpOyBlcnIgIT0gbmlsIHsKKwkJCXNl
cnZlNTAwKGNvbnRleHQsIHdyaXRlciwgIkVycm9yIHJldHJpZXZpbmcgZmlsZSBmcm9tIHRoZSBk
YXRhc3RvcmU6ICIra2V5U3RyaW5nKQorCQkJcmV0dXJuCisJCX0KKworCQlpZiBlcnIgOj0gYmxv
YnN0b3JlLkRlbGV0ZShjb250ZXh0LCB0ZXN0RmlsZS5CbG9iS2V5KTsgZXJyICE9IG5pbCB7CisJ
CQlzZXJ2ZTUwMChjb250ZXh0LCB3cml0ZXIsIGJhc2UuRXJyb3IoZXJyKS5TdHJpbmcoKSkKKwkJ
CXJldHVybgorCQl9CisJCWlmIGVyciA6PSBkYXRhc3RvcmUuRGVsZXRlKGNvbnRleHQsIGtleSk7
IGVyciAhPSBuaWwgeworCQkJc2VydmU1MDAoY29udGV4dCwgd3JpdGVyLCBiYXNlLkVycm9yKGVy
cikuU3RyaW5nKCkpCisJCQlyZXR1cm4KKwkJfQorCisJCXNlcnZlMjAwKGNvbnRleHQsIHdyaXRl
ciwgZm10LlNwcmludGYoIkRlbGV0ZWQgZmlsZSB3aXRoIGtleTogJXMsIG1hc3RlcjogJXMsIGJ1
aWxkZXI6ICVzLCB0ZXN0VHlwZTogJXMsIG5hbWU6ICVzIiwga2V5U3RyaW5nLCB0ZXN0RmlsZS5N
YXN0ZXIsIHRlc3RGaWxlLkJ1aWxkZXIsIHRlc3RGaWxlLlRlc3RUeXBlLCB0ZXN0RmlsZS5OYW1l
KSkKKwl9Cit9CisKK2Z1bmMgdGVzdEZpbGUod3JpdGVyIGh0dHAuUmVzcG9uc2VXcml0ZXIsIHJl
cXVlc3QgKmh0dHAuUmVxdWVzdCkgeworCWNvbnRleHQgOj0gYXBwZW5naW5lLk5ld0NvbnRleHQo
cmVxdWVzdCkKKwlxdWVyeURhdGEsIGVyciA6PSBiYXNlLlBhcnNlVGVzdEZpbGVRdWVyeURhdGEo
cmVxdWVzdCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJc2VydmU0MDMoY29udGV4dCwgd3JpdGVyLCBl
cnIuU3RyaW5nKCkpCisJCXJldHVybgorCX0KKworCWlmIHF1ZXJ5RGF0YS5LZXkgIT0gIiIgewor
CQlrZXksIGVyciA6PSBkYXRhc3RvcmUuRGVjb2RlS2V5KHF1ZXJ5RGF0YS5LZXkpCisJCWlmIGVy
ciAhPSBuaWwgeworCQkJc2VydmU0MDQoY29udGV4dCwgd3JpdGVyLCAiTm8gZW50aXR5IGV4aXN0
cyB3aXRoIGtleTogIitxdWVyeURhdGEuS2V5KQorCQkJcmV0dXJuCisJCX0KKwkJdGVzdEZpbGUg
Oj0gbmV3KFRlc3RGaWxlKQorCQlpZiBlcnIgPSBkYXRhc3RvcmUuR2V0KGNvbnRleHQsIGtleSwg
dGVzdEZpbGUpOyBlcnIgIT0gbmlsIHsKKwkJCXNlcnZlNTAwKGNvbnRleHQsIHdyaXRlciwgIkVy
cm9yIHJldHJpZXZpbmcgZmlsZSBmcm9tIHRoZSBkYXRhc3RvcmU6ICIrcXVlcnlEYXRhLktleSsi
XG4iK2Vyci5TdHJpbmcoKSkKKwkJCXJldHVybgorCQl9CisJCXNlcnZlVGVzdEZpbGUod3JpdGVy
LCBjb250ZXh0LCAqdGVzdEZpbGUsIHF1ZXJ5RGF0YS5DYWxsYmFjaykKKwkJcmV0dXJuCisJfQor
CisJa2V5cywgZmlsZXMgOj0gcXVlcnlGaWxlcyhjb250ZXh0LCBxdWVyeURhdGEuTWFzdGVyLCBx
dWVyeURhdGEuQnVpbGRlciwgcXVlcnlEYXRhLlRlc3RUeXBlLCBxdWVyeURhdGEuTmFtZSwgcXVl
cnlEYXRhLkxpbWl0KQorCWlmIGxlbihrZXlzKSA9PSAwIHsKKwkJc2VydmU0MDQoY29udGV4dCwg
d3JpdGVyLCBmbXQuU3ByaW50ZigiVGhlcmUgYXJlIG5vIGZpbGVzIHdpdGggbWFzdGVyOiAlcywg
YnVpbGRlcjogJXMsIHRlc3RUeXBlOiAlcywgbmFtZTogJXMiLCBxdWVyeURhdGEuTWFzdGVyLCBx
dWVyeURhdGEuQnVpbGRlciwgcXVlcnlEYXRhLlRlc3RUeXBlLCBxdWVyeURhdGEuTmFtZSkpCisJ
CXJldHVybgorCX0KKworCWlmIHF1ZXJ5RGF0YS5NYXN0ZXIgIT0gIiIgJiYgcXVlcnlEYXRhLkJ1
aWxkZXIgIT0gIiIgJiYgcXVlcnlEYXRhLlRlc3RUeXBlICE9ICIiICYmIHF1ZXJ5RGF0YS5OYW1l
ICE9ICIiIHsKKwkJaWYgcXVlcnlEYXRhLlRlc3RMaXN0SnNvbiB7CisJCQlpZiBlcnIgOj0gYmFz
ZS5Xcml0ZVRlc3RMaXN0SnNvbih3cml0ZXIsIGJsb2JzdG9yZS5OZXdSZWFkZXIoY29udGV4dCwg
ZmlsZXNbMF0uQmxvYktleSksIHF1ZXJ5RGF0YS5CdWlsZGVyLCBxdWVyeURhdGEuQ2FsbGJhY2sp
OyBlcnIgIT0gbmlsIHsKKwkJCQlzZXJ2ZTUwMChjb250ZXh0LCB3cml0ZXIsIGZtdC5TcHJpbnRm
KCJtYXN0ZXI6ICVzLCBidWlsZGVyOiAlcywgdGVzdFR5cGU6ICVzLCBuYW1lOiAlcywgZXJyb3I6
ICVzIiwgcXVlcnlEYXRhLk1hc3RlciwgcXVlcnlEYXRhLkJ1aWxkZXIsIHF1ZXJ5RGF0YS5UZXN0
VHlwZSwgcXVlcnlEYXRhLk5hbWUsIGVyci5TdHJpbmcoKSkpCisJCQl9CisJCQlyZXR1cm4KKwkJ
fSBlbHNlIHsKKwkJCS8vIEZJWE1FOiBJZiB0aGUgcXVlcnlEYXRhLkNhbGxiYWNrIGlzIGVtcHR5
IChvciBBRERfUkVTVUxUUyBmb3IgZnVsbF9yZXN1bHRzLmpzb24pLCB1c2UgYmxvYnN0b3JlLlNl
bmQgaW5zdGVhZCBzaW5jZSB0aGF0J3MgbW9yZSBlZmZpY2llbnQuCisJCQlzZXJ2ZVRlc3RGaWxl
KHdyaXRlciwgY29udGV4dCwgZmlsZXNbMF0sIHF1ZXJ5RGF0YS5DYWxsYmFjaykKKwkJCXJldHVy
bgorCQl9CisJfQorCisJaWYgcXVlcnlEYXRhLkNhbGxiYWNrICE9ICIiIHsKKwkJdHlwZSBDYWxs
YmFja0tleUxpc3Qgc3RydWN0IHsKKwkJCUNhbGxiYWNrIHN0cmluZworCQkJS2V5cyAgICAgW10q
ZGF0YXN0b3JlLktleQorCQl9CisJCWlmIGVyciA6PSBmaWxlTGlzdEpzb25wVGVtcGxhdGUuRXhl
Y3V0ZSh3cml0ZXIsIENhbGxiYWNrS2V5TGlzdHtDYWxsYmFjazogcXVlcnlEYXRhLkNhbGxiYWNr
LCBLZXlzOiBrZXlzfSk7IGVyciAhPSBuaWwgeworCQkJc2VydmU1MDAoY29udGV4dCwgd3JpdGVy
LCAiRXhlY3V0aW9uIG9uIGZpbGVMaXN0SnNvbnBUZW1wbGF0ZSBmYWlsZWQ6ICIsIGVyci5TdHJp
bmcoKSkKKwkJfQorCQlyZXR1cm4KKwl9CisKKwl2YXIgZmlsZXNXaXRoS2V5cyBbXUZpbGVXaXRo
S2V5CisJZm9yIGksIF8gOj0gcmFuZ2Uga2V5cyB7CisJCWZpbGVzV2l0aEtleXMgPSBhcHBlbmQo
ZmlsZXNXaXRoS2V5cywgRmlsZVdpdGhLZXl7RmlsZTogZmlsZXNbaV0sIEtleToga2V5c1tpXX0p
CisJfQorCisJZmlsZUxpc3QgOj0gRmlsZUxpc3R7CisJCU1hc3RlcjogICAgICAgIHF1ZXJ5RGF0
YS5NYXN0ZXIsCisJCUJ1aWxkZXI6ICAgICAgIHF1ZXJ5RGF0YS5CdWlsZGVyLAorCQlUZXN0VHlw
ZTogICAgICBxdWVyeURhdGEuVGVzdFR5cGUsCisJCU5hbWU6ICAgICAgICAgIHF1ZXJ5RGF0YS5O
YW1lLAorCQlGaWxlc1dpdGhLZXlzOiBmaWxlc1dpdGhLZXlzLAorCX0KKworCWlmIGVyciA6PSBm
aWxlTGlzdFRlbXBsYXRlLkV4ZWN1dGUod3JpdGVyLCBmaWxlTGlzdCk7IGVyciAhPSBuaWwgewor
CQlzZXJ2ZTUwMChjb250ZXh0LCB3cml0ZXIsICJFeGVjdXRpb24gb24gZmlsZUxpc3RUZW1wbGF0
ZSBmYWlsZWQ6ICIsIGVyci5TdHJpbmcoKSkKKwl9Cit9CisKK2Z1bmMgdXBsb2FkRmlsZSh3cml0
ZXIgaHR0cC5SZXNwb25zZVdyaXRlciwgcmVxdWVzdCAqaHR0cC5SZXF1ZXN0KSB7CisJY29udGV4
dCA6PSBhcHBlbmdpbmUuTmV3Q29udGV4dChyZXF1ZXN0KQorCisJZm9ybURhdGEsIGVyciA6PSBi
YXNlLlBhcnNlVXBsb2FkRm9ybURhdGEocmVxdWVzdCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJc2Vy
dmU0MDMoY29udGV4dCwgd3JpdGVyLCBlcnIuU3RyaW5nKCkpCisJCXJldHVybgorCX0KKworCWNv
bnRleHQuRGVidWdmKCJQcm9jZXNzaW5nIHVwbG9hZCByZXF1ZXN0LCBtYXN0ZXI6ICVzLCBidWls
ZGVyOiAlcywgdGVzdFR5cGU6ICVzLCBmaWxlczogJXMuIiwgZm9ybURhdGEuTWFzdGVyLCBmb3Jt
RGF0YS5CdWlsZGVyLCBmb3JtRGF0YS5UZXN0VHlwZSwgZm9ybURhdGEuRmlsZXMpCisKKwlzdWNj
ZWVkZWQgOj0gdHJ1ZQorCXZhciBlcnJvcnMgW11zdHJpbmcKKwlmb3IgaSA6PSAwOyBpIDwgbGVu
KGZvcm1EYXRhLkZpbGVzKTsgaSsrIHsKKwkJbmFtZSA6PSBmb3JtRGF0YS5GaWxlc1tpXS5GaWxl
bmFtZQorCisJCXZhciBlcnIgb3MuRXJyb3IKKwkJaWYgbmFtZSA9PSBpbmNyZW1lbnRhbFJlc3Vs
dHNGaWxlTmFtZSB7CisJCQllcnIgPSBtZXJnZUpzb25GaWxlKGNvbnRleHQsIGZvcm1EYXRhLk1h
c3RlciwgZm9ybURhdGEuQnVpbGRlciwgZm9ybURhdGEuVGVzdFR5cGUsIGZvcm1EYXRhLkZpbGVz
W2ldKQorCQl9IGVsc2UgeworCQkJdGVzdEZpbGUgOj0gbmV3VGVzdEZpbGUoZm9ybURhdGEuTWFz
dGVyLCBmb3JtRGF0YS5CdWlsZGVyLCBmb3JtRGF0YS5UZXN0VHlwZSwgZm9ybURhdGEuRmlsZXNb
aV0uRmlsZW5hbWUpCisJCQllcnIgPSBhZGRGaWxlRnJvbUZpbGVIZWFkZXIoY29udGV4dCwgdGVz
dEZpbGUsIGZvcm1EYXRhLkZpbGVzW2ldKQorCQl9CisKKwkJaWYgZXJyICE9IG5pbCB7CisJCQlz
dWNjZWVkZWQgPSBmYWxzZQorCQkJZXJyb3JzID0gYXBwZW5kKGVycm9ycywgZm10LlNwcmludGYo
IkZBSUw6IFVwbG9hZCBmYWlsZWQsIG1hc3RlcjogJXMsIGJ1aWxkZXI6ICVzLCB0ZXN0VHlwZTog
JXMsIG5hbWU6ICVzLCBlcnJvcjogJXMuPGJyPiIsIGZvcm1EYXRhLk1hc3RlciwgZm9ybURhdGEu
QnVpbGRlciwgZm9ybURhdGEuVGVzdFR5cGUsIG5hbWUsIGVyci5TdHJpbmcoKSkpCisJCX0KKwl9
CisKKwlpZiBzdWNjZWVkZWQgeworCQlzZXJ2ZTIwMChjb250ZXh0LCB3cml0ZXIsICJPSyIpCisJ
fSBlbHNlIHsKKwkJc2VydmU1MDAoY29udGV4dCwgd3JpdGVyLCBlcnJvcnMuLi4pCisJfQorfQor
CitmdW5jIHVwbG9hZEZvcm0od3JpdGVyIGh0dHAuUmVzcG9uc2VXcml0ZXIsIHJlcXVlc3QgKmh0
dHAuUmVxdWVzdCkgeworCXVwbG9hZFRlbXBsYXRlLkV4ZWN1dGUod3JpdGVyLCBuaWwpCit9CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9M
SUNFTlNFLmR5Z3JhcGgudHh0IGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvc3RhdGljLWRh
c2hib2FyZHMvTElDRU5TRS5keWdyYXBoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MzZjMGE4YmYyOTAyYTAx
NGE3ZWIyYTVmMmY4ZjhkY2JkOTgxZGJmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdHNE
YXNoYm9hcmRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvTElDRU5TRS5keWdyYXBoLnR4dApAQCAt
MCwwICsxLDIyIEBACitDb3B5cmlnaHQgKGMpIDIwMDkgRGFuIFZhbmRlcmthbQorCitQZXJtaXNz
aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorb2J0
YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp
b24KK2ZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv
dXQKK3Jlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMg
dG8gdXNlLAorY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj
ZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg
cGVyc29ucyB0byB3aG9tIHRoZQorU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq
ZWN0IHRvIHRoZSBmb2xsb3dpbmcKK2NvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCitpbmNsdWRlZCBpbiBh
bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhF
IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ
TkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF
IFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQU5ECitOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI
T1JTIE9SIENPUFlSSUdIVAorSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF
UyBPUiBPVEhFUiBMSUFCSUxJVFksCitXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg
VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKK0ZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O
IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKK09USEVSIERFQUxJTkdTIElOIFRIRSBT
T0ZUV0FSRS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1k
YXNoYm9hcmRzL1JFQURNRS5keWdyYXBoLnR4dCBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVy
L3N0YXRpYy1kYXNoYm9hcmRzL1JFQURNRS5keWdyYXBoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lODAwNjky
YmEwZmNjMWE1MTg0ZmVlODlkOGM3ODQ2OWZhYjBjNDIwCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvUkVBRE1FLmR5Z3JhcGgu
dHh0CkBAIC0wLDAgKzEsNTUgQEAKK2R5Z3JhcGhzIEphdmFTY3JpcHQgY2hhcnRpbmcgbGlicmFy
eQorQ29weXJpZ2h0IChjKSAyMDA2LSwgRGFuIFZhbmRlcmthbS4KKworU3VwcG9ydDogaHR0cDov
L2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2R5Z3JhcGhzLXVzZXJzCitTb3VyY2U6IGh0dHA6Ly9n
aXRodWIuY29tL2RhbnZrL2R5Z3JhcGhzCitJc3N1ZXM6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20v
cC9keWdyYXBocy8KKworCitUaGUgZHlncmFwaHMgSmF2YVNjcmlwdCBsaWJyYXJ5IHByb2R1Y2Vz
IHByb2R1Y2VzIGludGVyYWN0aXZlLCB6b29tYWJsZSBjaGFydHMgb2YgdGltZSBzZXJpZXMuCisK
K0ZlYXR1cmVzCistIFBsb3RzIHRpbWUgc2VyaWVzIHdpdGhvdXQgdXNpbmcgYW4gZXh0ZXJuYWwg
c2VydmVyIG9yIEZsYXNoCistIFN1cHBvcnRzIG11bHRpcGxlIGRhdGEgc2VyaWVzCistIFN1cHBv
cnRzIGVycm9yIGJhbmRzIGFyb3VuZCBkYXRhIHNlcmllcworLSBEaXNwbGF5cyB2YWx1ZXMgb24g
bW91c2VvdmVyCistIEludGVyYWN0aXZlIHpvb20KKy0gQWRqdXN0YWJsZSBhdmVyYWdpbmcgcGVy
aW9kCistIEN1c3RvbWl6YWJsZSBjbGljay10aHJvdWdoIGFjdGlvbnMKKy0gQ29tcGF0aWJsZSB3
aXRoIHRoZSBHb29nbGUgVmlzdWFsaXphdGlvbiBBUEkKKworRGVtbworRm9yIGEgZ2FsbGVyeSBh
bmQgZG9jdW1lbnRhdGlvbiwgc2VlIGh0dHA6Ly9kYW52ay5vcmcvZHlncmFwaHMvCisKK01pbmlt
YWwgRXhhbXBsZQorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9ImR5Z3JhcGgtY29tYmluZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
ZGl2IGlkPSJncmFwaGRpdiI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+
CisgIGcgPSBuZXcgRHlncmFwaCgKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdy
YXBoZGl2IiksICAvLyBjb250YWluaW5nIGRpdgorICAgICAgICAiRGF0ZSxUZW1wZXJhdHVyZVxu
IiArICAgICAgICAgICAgICAgIC8vIHRoZSBkYXRhIHNlcmllcworICAgICAgICAiMjAwOC0wNS0w
Nyw3NVxuIiArCisgICAgICAgICIyMDA4LTA1LTA4LDcwXG4iICsKKyAgICAgICAgIjIwMDgtMDUt
MDksODBcbiIKKyAgICAgICk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKworTGljZW5z
ZShzKQorZHlncmFwaHMgdXNlczoKKyAtIHJnYmNvbG9yLmpzIChQdWJsaWMgRG9tYWluKQorIC0g
c3RyZnRpbWUuanMgKEJTRCBMaWNlbnNlKQorIC0gZXhjYW52YXMuanMgKEFwYWNoZSBMaWNlbnNl
KQorIC0gWVVJIGNvbXByZXNzb3IgKEJTRCBMaWNlbnNlKQorCityZ2Jjb2xvcjogaHR0cDovL3d3
dy5waHBpZWQuY29tL3JnYi1jb2xvci1wYXJzZXItaW4tamF2YXNjcmlwdC8KK3N0cmZ0aW1lOiBo
dHRwOi8vdGVjaC5ibHVlc21vb24uaW5mby8yMDA4LzA0L3N0cmZ0aW1lLWluLWphdmFzY3JpcHQu
aHRtbAorZXhjYW52YXM6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9leHBsb3JlcmNhbnZhcy8K
K3l1aSBjb21wcmVzc29yOiBodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvY29tcHJlc3Nv
ci8KKworZHlncmFwaHMgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgbGljZW5zZSwgaW5jbHVk
ZWQgaW4gTElDRU5TRS50eHQuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZl
ci9zdGF0aWMtZGFzaGJvYXJkcy9SRUFETUUud2VidHJlZW1hcC50eHQgYi9Ub29scy9UZXN0c0Rh
c2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9SRUFETUUud2VidHJlZW1hcC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDlkODg1Yjk5YTQ3ODkwZmI1N2FmN2I1MzU2YTA3M2I1OGFiZTE1OQotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L1JFQURNRS53ZWJ0cmVlbWFwLnR4dApAQCAtMCwwICsxLDYzIEBACisjIHdlYnRyZWVtYXAKKwor
QSBzaW1wbGUgdHJlZW1hcCBpbXBsZW1lbnRhdGlvbiB1c2luZyB3ZWIgdGVjaG5vbG9naWVzIChE
T00gbm9kZXMsIENTUworc3R5bGluZyBhbmQgdHJhbnNpdGlvbnMpIHJhdGhlciB0aGFuIGEgYmln
IGNhbnZhcy9zdmcvcGx1Z2luLgorCitQbGF5IHdpdGggYSBbZGVtb11bXS4KKworW2RlbW9dOiBo
dHRwOi8vbWFydGluZS5naXRodWIuY29tL3dlYnRyZWVtYXAvZGVtby9kZW1vLmh0bWwKKworIyMg
Q3JlYXRpbmcgeW91ciBvd24KKworMS4gQ3JlYXRlIGEgcGFnZSB3aXRoIGEgRE9NIG5vZGUgKGku
ZS4gYSBgPGRpdj5gKSB0aGF0IHdpbGwgY29udGFpbgorICAgeW91ciB0cmVlbWFwLgorMi4gQWRk
IHRoZSB0cmVlbWFwIHRvIHRoZSBub2RlIHZpYSBzb21ldGhpbmcgbGlrZQorCisgICAgICAgIGFw
cGVuZFRyZWVtYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215bm9kZScpLCBteWRhdGEpOwor
My4gU3R5bGUgdGhlIHRyZWVtYXAgdXNpbmcgQ1NTLgorCisjIyMgSW5wdXQgZm9ybWF0CisKK1Ro
ZSBpbnB1dCBkYXRhIChgbXlkYXRhYCBpbiB0aGUgb3ZlcnZpZXcgc25pcHBldCkgaXMgYSB0cmVl
IG9mIG5vZGVzLAorbGlrZWx5IGltcG9ydGVkIHZpYSBhIHNlcGFyYXRlIEpTT04gZmlsZS4gIEVh
Y2ggbm9kZSAoaW5jbHVkaW5nIHRoZQorcm9vdCkgc2hvdWxkIGNvbnRhaW4gZGF0YSBpbiB0aGUg
Zm9sbG93aW5nIGZvcm1hdC4KKworICAgIHsKKyAgICAgIG5hbWU6IChIVE1MIHRoYXQgaXMgZGlz
cGxheWVkIHZpYSAuaW5uZXJIVE1MIG9uIHRoZSBjYXB0aW9uKSwKKyAgICAgIGRhdGE6IHsKKyAg
ICAgICAgIiRhcmVhIjogKGEgbnVtYmVyLCBpbiBhcmJpdHJhcnkgdW5pdHMpCisgICAgICB9LAor
ICAgICAgY2hpbGRyZW46IChsaXN0IG9mIGNoaWxkIHRyZWUgbm9kZXMpCisgICAgfQorCisoVGhp
cyBzdHJhbmdlIGZvcm1hdCBmb3IgZGF0YSBjb21lcyBmcm9tIHRoZSB0aGUgW0phdmFTY3JpcHQg
SW5mb1ZpcworVG9vbGtpdF1bdGhlaml0XS4gIEkgbWlnaHQgY2hhbmdlIGl0IGluIHRoZSBmdXR1
cmUuKQorCitUaGUgYCRhcmVhYCBvZiBhIG5vZGUgc2hvdWxkIGJlIHRoZSBzdW0gb2YgdGhlIGAk
YXJlYWAgb2YgYWxsIG9mIGl0cworYGNoaWxkcmVuYC4KKworKEF0IHJ1bnRpbWUsIHRyZWUgbm9k
ZXMgd2lsbCBkeW5hbWljYWxseSB3aWxsIGdhaW4gdHdvIGV4dHJhCithdHRyaWJ1dGVzLCBgcGFy
ZW50YCBhbmQgYGRvbWA7IHRoaXMgaXMgb25seSB3b3J0aCBwb2ludGluZyBvdXQgc28KK3RoYXQg
eW91IGRvbid0IGFjY2lkZW50YWxseSBjb25mbGljdCB3aXRoIHRoZW0uKQorCisjIyMgQ1NTIHN0
eWxpbmcKKworVGhlIHRyZWVtYXAgaXMgY29uc3RydWN0ZWQgd2l0aCBvbmUgYGRpdmAgcGVyIHJl
Z2lvbiB3aXRoIGEgc2VwYXJhdGUKK2BkaXZgIGZvciB0aGUgY2FwdGlvbi4gIEVhY2ggZGl2IGlz
IHN0eWxlYWJsZSB2aWEgdGhlCitgd2VidHJlZW1hcC1ub2RlYCBDU1MgY2xhc3MuICBUaGUgY2Fw
dGlvbnMgYXJlIHN0eWxhYmxlIGFzCitgd2VidHJlZW1hcC1jYXB0aW9uYC4KKworRWFjaCBsZXZl
bCBvZiB0aGUgdHJlZSBhbHNvIGdldHMgYSBwZXItbGV2ZWwgQ1NTIGNsYXNzLAorYHdlYnRyZWVt
YXAtbGV2ZWwwYCB0aHJvdWdoIGB3ZWJ0cmVlbWFwLWxldmVsNGAuICBUaGVzZSBjYW4gYmUKK2Fk
anVzdGVkIHRvIGUuZy4gbWFkZSBkaWZmZXJlbnQgbGV2ZWxzIGRpZmZlcmVudCBjb2xvcnMuICBU
byBjb250cm9sCit0aGUgY2FwdGlvbiBvbiBhIHBlci1sZXZlbCBiYXNpcywgdXNlIGEgQ1NTIHNl
bGVjdG9yIGxpa2UKK2Aud2VidHJlZW1hcC1sZXZlbDIgPiAud2VidHJlZW1hcC1jYXB0aW9uYC4K
KworWW91ciBiZXN0IGJldCBpcyB0byBtb2RpZnkgdGhlIGluY2x1ZGVkIGB3ZWJ0cmVlbWFwLmNz
c2AsIHdoaWNoCitjb250YWlucyBjb21tZW50cyBhYm91dCByZXF1aXJlZCBhbmQgb3B0aW9uYWwg
Q1NTIGF0dHJpYnV0ZXMuCisKKyMjIFJlbGF0ZWQgcHJvamVjdHMKKworKiBbSmF2YVNjcmlwdCBJ
bmZvVmlzIFRvb2xraXRdW3RoZWppdF0KKworW3RoZWppdF06IGh0dHA6Ly90aGVqaXQub3JnLwpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RzRGFzaGJv
YXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0bWwgYi9Ub29s
cy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9hZ2dyZWdhdGVfcmVzdWx0
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmVkZTYxYjkwNWMzZTMzZGRjYTA4MTE3MWZlNzc2OTAyYzllYmFj
MTQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMt
ZGFzaGJvYXJkcy9hZ2dyZWdhdGVfcmVzdWx0cy5odG1sCkBAIC0wLDAgKzEsMjk4IEBACis8IS0t
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
K2NvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKK2luIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKK2Rpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKK2NvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCit0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0+Cis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorCis8
aGVhZD4KKzx0aXRsZT5MYXlvdXQgdGVzdCBwYXNzaW5nIHN0YXR1czwvdGl0bGU+Cis8c3R5bGU+
CitoMiB7CisgICAgbWFyZ2luOiAwOworICAgIGZvbnQtc2l6ZTogMS4yZW07Cit9CitoMyB7Cisg
ICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICBmb250LXNpemU6IDFlbTsKK30KKy5jb250YWluZXIg
eworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBwYWRkaW5nOiAzcHg7Cit9CitpbWcg
eworICAgIGJvcmRlcjogMXB4IGRvdHRlZCBncmV5OworICAgIG1hcmdpbi1yaWdodDogNXB4Owor
ICAgIHBhZGRpbmc6IDJweDsKK30KKzwvc3R5bGU+Cis8c2NyaXB0IHNyYz0iYnVpbGRlcnMuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImRhc2hib2FyZF9iYXNlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+CisvLyBAZmlsZW92ZXJ2aWV3IENyZWF0ZXMgYSBkYXNoYm9hcmQgZm9yIHRyYWNraW5n
IG51bWJlciBvZiBwYXNzZXMvZmFpbHVyZXMgcGVyIHJ1bi4KKy8vCisvLyBDdXJyZW50bHksIG9u
bHkgd2Via2l0IHRlc3RzIGFyZSBzdXBwb3J0ZWQsIGJ1dCBhZGRpbmcgb3RoZXIgdGVzdCB0eXBl
cworLy8gc2hvdWxkIGp1c3QgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHN0ZXBzOgorLy8gICAgIC1n
ZW5lcmF0ZSByZXN1bHRzLmpzb24gZm9yIHRoZXNlIHRlc3RzCisvLyAgICAgLWNvcHkgdGhlbSB0
byB0aGUgYXBwcm9wcmlhdGUgbG9jYXRpb24KKy8vICAgICAtYWRkIHRoZSBidWlsZGVyIG5hbWUg
dG8gdGhlIGxpc3Qgb2YgYnVpbGRlcnMgaW4gZGFzaGJvYXJkX2Jhc2UuanMuCisKKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworLy8gTWV0aG9kcyBhbmQgb2JqZWN0cyBmcm9tIGRhc2hib2FyZF9iYXNl
LmpzIHRvIG92ZXJyaWRlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitmdW5jdGlvbiBnZW5lcmF0
ZVBhZ2UoKQoreworICAgIHZhciBodG1sID0gaHRtbEZvclRlc3RUeXBlU3dpdGNoZXIodHJ1ZSkg
KyAnPGJyPic7CisgICAgZm9yICh2YXIgYnVpbGRlciBpbiBnX2J1aWxkZXJzKQorICAgICAgICBo
dG1sICs9IGh0bWxGb3JCdWlsZGVyKGJ1aWxkZXIpOworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJI
VE1MID0gaHRtbDsKK30KKworZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyKGtleSwg
dmFsdWUpCit7CisgICAgc3dpdGNoKGtleSkgeworICAgIGNhc2UgJ3Jhd1ZhbHVlcyc6CisgICAg
ICAgIGdfY3VycmVudFN0YXRlW2tleV0gPSB2YWx1ZSA9PSAndHJ1ZSc7CisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworZ19kZWZhdWx0U3RhdGVWYWx1ZXMgPSB7CisgICAgcmF3VmFsdWVzOiBmYWxzZQorfTsKKwor
ZnVuY3Rpb24gaHRtbEZvckJ1aWxkZXIoYnVpbGRlcikKK3sKKyAgICB2YXIgcmVzdWx0cyA9IGdf
cmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXTsKKyAgICAvLyBTb21lIGtleXMgd2VyZSBhZGRlZCBs
YXRlciB0aGFuIG90aGVycywgc28gdGhleSBkb24ndCBoYXZlIGFzIG1hbnkKKyAgICAvLyBidWls
ZHMuIFVzZSB0aGUgc2hvcnRlc3QuCisgICAgLy8gRklYTUU6IE9uY2UgNTAwIHJ1bnMgaGF2ZSBm
aW5pc2hlZCwgd2UgY2FuIGdldCByaWQgb2YgcGFzc2luZyB0aGlzCisgICAgLy8gYXJvdW5kIGFu
ZCBqdXN0IGFzc3VtZSBhbGwga2V5cyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBidWlsZGVycyBm
b3IgYQorICAgIC8vIGdpdmVuIGJ1aWxkZXIuCisgICAgdmFyIG51bUNvbHVtbnMgPSByZXN1bHRz
W0FMTF9GSVhBQkxFX0NPVU5UX0tFWV0ubGVuZ3RoOworICAgIHZhciBodG1sID0gJzxkaXYgY2xh
c3M9Y29udGFpbmVyPjxoMj4nICsgYnVpbGRlciArICc8L2gyPic7CisKKyAgICBpZiAoZ19jdXJy
ZW50U3RhdGUucmF3VmFsdWVzKQorICAgICAgICBodG1sICs9IHJhd1ZhbHVlc0hUTUwocmVzdWx0
cywgbnVtQ29sdW1ucyk7CisgICAgZWxzZSB7CisgICAgICAgIGh0bWwgKz0gJzxhIGhyZWY9InRp
bWVsaW5lX2V4cGxvcmVyLmh0bWwnICsgKGxvY2F0aW9uLmhhc2ggPyBsb2NhdGlvbi5oYXNoICsg
JyYnIDogJyMnKSArICdidWlsZGVyPScgKyBidWlsZGVyICsgJyI+JyArCisgICAgICAgICAgICBj
aGFydEhUTUwocmVzdWx0cywgbnVtQ29sdW1ucykgKyAnPC9hPic7CisgICAgfQorCisgICAgaHRt
bCArPSAnPC9kaXY+JzsKKyAgICByZXR1cm4gaHRtbDsKK30KKworZnVuY3Rpb24gcmF3VmFsdWVz
SFRNTChyZXN1bHRzLCBudW1Db2x1bW5zKQoreworICAgIHZhciBodG1sID0gaHRtbEZvclN1bW1h
cnlUYWJsZShyZXN1bHRzLCBudW1Db2x1bW5zKSArCisgICAgICAgIGh0bWxGb3JUZXN0VHlwZShy
ZXN1bHRzLCBGSVhBQkxFX0NPVU5UU19LRVksIEZJWEFCTEVfREVTQ1JJUFRJT04sIG51bUNvbHVt
bnMpOworICAgIGlmIChpc0xheW91dFRlc3RSZXN1bHRzKCkpIHsKKyAgICAgICAgaHRtbCArPSBo
dG1sRm9yVGVzdFR5cGUocmVzdWx0cywgREVGRVJSRURfQ09VTlRTX0tFWSwgREVGRVJSRURfREVT
Q1JJUFRJT04sIG51bUNvbHVtbnMpICsKKyAgICAgICAgICAgIGh0bWxGb3JUZXN0VHlwZShyZXN1
bHRzLCBXT05URklYX0NPVU5UU19LRVksIFdPTlRGSVhfREVTQ1JJUFRJT04sIG51bUNvbHVtbnMp
OworICAgIH0KKyAgICByZXR1cm4gaHRtbDsKK30KKworZnVuY3Rpb24gY2hhcnRIVE1MKHJlc3Vs
dHMsIG51bUNvbHVtbnMpCit7CisgICAgdmFyIHNob3VsZFNob3dXZWJLaXRSZXZpc2lvbnMgPSBp
c1RpcE9mVHJlZVdlYktpdEJ1aWxkZXIoKTsKKyAgICB2YXIgcmV2aXNpb25LZXkgPSBzaG91bGRT
aG93V2ViS2l0UmV2aXNpb25zID8gV0VCS0lUX1JFVklTSU9OU19LRVkgOiBDSFJPTUVfUkVWSVNJ
T05TX0tFWTsKKyAgICB2YXIgc3RhcnRSZXZpc2lvbiA9IHJlc3VsdHNbcmV2aXNpb25LZXldW251
bUNvbHVtbnMgLSAxXTsKKyAgICB2YXIgZW5kUmV2aXNpb24gPSByZXN1bHRzW3JldmlzaW9uS2V5
XVswXTsKKyAgICB2YXIgcmV2aXNpb25MYWJlbCA9IHNob3VsZFNob3dXZWJLaXRSZXZpc2lvbnMg
PyAiV2ViS2l0IFJldmlzaW9uIiA6ICJDaHJvbWl1bSBSZXZpc2lvbiI7CisKKyAgICB2YXIgZml4
YWJsZSA9IHJlc3VsdHNbRklYQUJMRV9DT1VOVF9LRVldLnNsaWNlKDAsIG51bUNvbHVtbnMpOwor
ICAgIHZhciBodG1sID0gY2hhcnQoIlRvdGFsIGZhaWxpbmciLCB7IiI6IGZpeGFibGV9LCByZXZp
c2lvbkxhYmVsLCBzdGFydFJldmlzaW9uLCBlbmRSZXZpc2lvbik7CisKKyAgICB2YXIgdmFsdWVz
ID0gdmFsdWVzUGVyRXhwZWN0YXRpb24ocmVzdWx0c1tGSVhBQkxFX0NPVU5UU19LRVldLCBudW1D
b2x1bW5zKTsKKyAgICAvLyBEb24ndCBjYXJlIGFib3V0IG51bWJlciBvZiBwYXNzZXMgZm9yIHRo
ZSBjaGFydHMuCisgICAgZGVsZXRlKHZhbHVlc1snUCddKTsKKworICAgIHJldHVybiBodG1sICsg
Y2hhcnQoIkRldGFpbGVkIGJyZWFrZG93biIsIHZhbHVlcywgcmV2aXNpb25MYWJlbCwgc3RhcnRS
ZXZpc2lvbiwgZW5kUmV2aXNpb24pOworfQorCit2YXIgTEFCRUxfQ09MT1JTID0gWydGRjAwMDAn
LCAnMDBGRjAwJywgJzAwMDBGRicsICcwMDAwMDAnLCAnRkY2RUI0JywgJ0ZGQTgxMicsICc5QjMw
RkYnLCAnMDBGRkNDJ107CisKKy8vIEZJWE1FOiBGaW5kIGEgYmV0dGVyIHdheSB0byBleGNsdWRl
IG91dGxpZXJzLiBUaGlzIGlzIGp1c3Qgc28gd2UgZXhjbHVkZQorLy8gcnVucyB3aGVyZSBldmVy
eSB0ZXN0IGZhaWxlZC4KK3ZhciBNQVhfVkFMVUUgPSAxMDAwMDsKKworZnVuY3Rpb24gZmlsdGVy
ZWRWYWx1ZXModmFsdWVzLCBkZXNpcmVkTnVtYmVyT2ZQb2ludHMpCit7CisgICAgLy8gRmlsdGVy
IG91dCB2YWx1ZXMgdG8gbWFrZSB0aGUgZ3JhcGggYSBiaXQgbW9yZSByZWFkYWJsZSBhbmQgdG8g
a2VlcCBVUkxzCisgICAgLy8gZnJvbSBleGNlZWRpbmcgdGhlIGJyb3dzZXJzIG1heCBsZW5ndGgg
cmVzdHJpY3Rpb24uCisgICAgdmFyIGZpbHRlckFtb3VudCA9IE1hdGguZmxvb3IodmFsdWVzLmxl
bmd0aCAvIGRlc2lyZWROdW1iZXJPZlBvaW50cyk7CisgICAgaWYgKGZpbHRlckFtb3VudCA8IDEp
CisgICAgICAgIHJldHVybiB2YWx1ZXM7CisKKyAgICByZXR1cm4gdmFsdWVzLmZpbHRlcihmdW5j
dGlvbihlbGVtZW50LCBpbmRleCwgYXJyYXkpIHsKKyAgICAgICAgLy8gSW5jbHVkZSB0aGUgbW9z
dCByZWNlbnQgYW5kIG9sZGVzdCB2YWx1ZXMgYW5kIGV4Y2x1ZGUgb3V0bGllcnMuCisgICAgICAg
IHJldHVybiAoaW5kZXggJSBmaWx0ZXJBbW91bnQgPT0gMCB8fCBpbmRleCA9PSBhcnJheS5sZW5n
dGggLSAxKSAmJiAoYXJyYXlbaW5kZXhdIDwgTUFYX1ZBTFVFICYmIGFycmF5W2luZGV4XSAhPSAw
KTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gY2hhcnRVcmwodGl0bGUsIHZhbHVlcywgcmV2aXNp
b25MYWJlbCwgc3RhcnRSZXZpc2lvbiwgZW5kUmV2aXNpb24sIGRlc2lyZWROdW1iZXJPZlBvaW50
cykgeworICAgIHZhciBtYXhWYWx1ZSA9IDA7CisgICAgZm9yICh2YXIgZXhwZWN0YXRpb24gaW4g
dmFsdWVzKQorICAgICAgICBtYXhWYWx1ZSA9IE1hdGgubWF4KG1heFZhbHVlLCBNYXRoLm1heC5h
cHBseShudWxsLCBmaWx0ZXJlZFZhbHVlcyh2YWx1ZXNbZXhwZWN0YXRpb25dLCBkZXNpcmVkTnVt
YmVyT2ZQb2ludHMpKSk7CisKKyAgICB2YXIgY2hhcnREYXRhID0gJyc7CisgICAgdmFyIGxhYmVs
cyA9ICcnOworICAgIHZhciBudW1MYWJlbHMgPSAwOworCisgICAgdmFyIGZpcnN0ID0gdHJ1ZTsK
KyAgICBmb3IgKHZhciBleHBlY3RhdGlvbiBpbiB2YWx1ZXMpIHsKKyAgICAgICAgY2hhcnREYXRh
ICs9IChmaXJzdCA/ICdlOicgOiAnLCcpICsgZXh0ZW5kZWRFbmNvZGUoZmlsdGVyZWRWYWx1ZXMo
dmFsdWVzW2V4cGVjdGF0aW9uXSwgZGVzaXJlZE51bWJlck9mUG9pbnRzKS5yZXZlcnNlKCksIG1h
eFZhbHVlKTsKKworICAgICAgICBpZiAoZXhwZWN0YXRpb24pIHsKKyAgICAgICAgICAgIG51bUxh
YmVscysrOworICAgICAgICAgICAgbGFiZWxzICs9IChmaXJzdCA/ICcnIDogJ3wnKSArIGV4cGVj
dGF0aW9uc01hcCgpW2V4cGVjdGF0aW9uXTsKKyAgICAgICAgfQorICAgICAgICBmaXJzdCA9IGZh
bHNlOworICAgIH0KKworICAgIHZhciB1cmwgPSAiaHR0cDovL2NoYXJ0LmFwaXMuZ29vZ2xlLmNv
bS9jaGFydD9jaHQ9bGMmY2hzPTYwMHg0MDAmY2hkPSIgKworICAgICAgICAgICAgY2hhcnREYXRh
ICsgIiZjaGc9MTUsMTUsMSwzJmNoeHQ9eCx4LHkmY2h4bD0xOnx8IiArIHJldmlzaW9uTGFiZWwg
KworICAgICAgICAgICAgInwmY2h4cj0wLCIgKyBzdGFydFJldmlzaW9uICsgIiwiICsgZW5kUmV2
aXNpb24gKyAifDIsMCwiICsgbWF4VmFsdWUgKyAiJmNodHQ9IiArIHRpdGxlOworCisKKyAgICBp
ZiAobGFiZWxzKQorICAgICAgICB1cmwgKz0gIiZjaGRsPSIgKyBsYWJlbHMgKyAiJmNoY289IiAr
IExBQkVMX0NPTE9SUy5zbGljZSgwLCBudW1MYWJlbHMpLmpvaW4oJywnKTsKKyAgICByZXR1cm4g
dXJsOworfQorCitmdW5jdGlvbiBjaGFydCh0aXRsZSwgdmFsdWVzLCByZXZpc2lvbkxhYmVsLCBz
dGFydFJldmlzaW9uLCBlbmRSZXZpc2lvbikKK3sKKyAgICB2YXIgZGVzaXJlZE51bWJlck9mUG9p
bnRzID0gNDAwOworICAgIHZhciB1cmwgPSBjaGFydFVybCh0aXRsZSwgdmFsdWVzLCByZXZpc2lv
bkxhYmVsLCBzdGFydFJldmlzaW9uLCBlbmRSZXZpc2lvbiwgZGVzaXJlZE51bWJlck9mUG9pbnRz
KTsKKworICAgIHdoaWxlICh1cmwubGVuZ3RoID49IDIwNDgpIHsKKyAgICAgICAgLy8gRGVjcmVh
c2UgdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHBvaW50cyBncmFkdWFsbHkgdW50aWwgd2UgZ2V0IGEg
VVJMIHRoYXQKKyAgICAgICAgLy8gZG9lc24ndCBleGNlZWQgY2hhcnRzZXJ2ZXIncyBtYXggVVJM
IGxlbmd0aC4KKyAgICAgICAgZGVzaXJlZE51bWJlck9mUG9pbnRzID0gMyAvIDQgKiBkZXNpcmVk
TnVtYmVyT2ZQb2ludHM7CisgICAgICAgIHVybCA9IGNoYXJ0VXJsKHRpdGxlLCB2YWx1ZXMsIHJl
dmlzaW9uTGFiZWwsIHN0YXJ0UmV2aXNpb24sIGVuZFJldmlzaW9uLCBkZXNpcmVkTnVtYmVyT2ZQ
b2ludHMpOworICAgIH0KKworICAgIHJldHVybiAnPGltZyBzcmM9IicgKyB1cmwgKyAnIj4nOwor
fQorCitmdW5jdGlvbiBodG1sRm9yUmV2aXNpb25Sb3dzKHJlc3VsdHMsIG51bUNvbHVtbnMpCit7
CisgICAgcmV0dXJuIGh0bWxGb3JUYWJsZVJvdygnV2ViS2l0IFJldmlzaW9uJywgcmVzdWx0c1tX
RUJLSVRfUkVWSVNJT05TX0tFWV0uc2xpY2UoMCwgbnVtQ29sdW1ucykpICsKKyAgICAgICAgaHRt
bEZvclRhYmxlUm93KCdDaHJvbWUgUmV2aXNpb24nLCByZXN1bHRzW0NIUk9NRV9SRVZJU0lPTlNf
S0VZXS5zbGljZSgwLCBudW1Db2x1bW5zKSk7Cit9CisKK2Z1bmN0aW9uIHdyYXBIVE1MSW5UYWJs
ZShkZXNjcmlwdGlvbiwgaHRtbCkKK3sKKyAgICByZXR1cm4gJzxoMz4nICsgZGVzY3JpcHRpb24g
KyAnPC9oMz48dGFibGU+PHRib2R5PicgKyBodG1sICsgJzwvdGJvZHk+PC90YWJsZT4nOworfQor
CitmdW5jdGlvbiBodG1sRm9yU3VtbWFyeVRhYmxlKHJlc3VsdHMsIG51bUNvbHVtbnMpCit7Cisg
ICAgdmFyIHBlcmNlbnQgPSBbXTsKKyAgICB2YXIgZml4YWJsZSA9IHJlc3VsdHNbRklYQUJMRV9D
T1VOVF9LRVldLnNsaWNlKDAsIG51bUNvbHVtbnMpOworICAgIHZhciBhbGxGaXhhYmxlID0gcmVz
dWx0c1tBTExfRklYQUJMRV9DT1VOVF9LRVldLnNsaWNlKDAsIG51bUNvbHVtbnMpOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbnVtQ29sdW1uczsgaSsrKSB7CisgICAgICAgIHZhciBwZXJjZW50
YWdlID0gMTAwICogKGFsbEZpeGFibGVbaV0gLSBmaXhhYmxlW2ldKSAvIGFsbEZpeGFibGVbaV07
CisgICAgICAgIC8vIFJvdW5kIHRvIHRoZSBuZWFyZXN0IHRlbnRoIG9mIGEgcGVyY2VudC4KKyAg
ICAgICAgcGVyY2VudC5wdXNoKE1hdGgucm91bmQocGVyY2VudGFnZSAqIDEwKSAvIDEwICsgJyUn
KTsKKyAgICB9CisgICAgdmFyIGh0bWwgPSBodG1sRm9yUmV2aXNpb25Sb3dzKHJlc3VsdHMsIG51
bUNvbHVtbnMpICsKKyAgICAgICAgaHRtbEZvclRhYmxlUm93KCdQZXJjZW50IHBhc3NlZCcsIHBl
cmNlbnQpICsKKyAgICAgICAgaHRtbEZvclRhYmxlUm93KCdGYWlsdXJlcyAoZGVkdXBlZCknLCBm
aXhhYmxlKSArCisgICAgICAgIGh0bWxGb3JUYWJsZVJvdygnRml4YWJsZSBUZXN0cycsIGFsbEZp
eGFibGUpOworICAgIHJldHVybiB3cmFwSFRNTEluVGFibGUoJ1N1bW1hcnknLCBodG1sKTsKK30K
KworZnVuY3Rpb24gdmFsdWVzUGVyRXhwZWN0YXRpb24oY291bnRzLCBudW1Db2x1bW5zKQorewor
ICAgIHZhciB2YWx1ZXMgPSB7fTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUNvbHVtbnM7
IGkrKykgeworICAgICAgICBmb3IgKHZhciBleHBlY3RhdGlvbiBpbiBleHBlY3RhdGlvbnNNYXAo
KSkgeworICAgICAgICAgICAgaWYgKGV4cGVjdGF0aW9uIGluIGNvdW50c1tpXSkgeworICAgICAg
ICAgICAgICAgIHZhciBjb3VudCA9IGNvdW50c1tpXVtleHBlY3RhdGlvbl07CisgICAgICAgICAg
ICAgICAgaWYgKCF2YWx1ZXNbZXhwZWN0YXRpb25dKQorICAgICAgICAgICAgICAgICAgICB2YWx1
ZXNbZXhwZWN0YXRpb25dID0gW107CisgICAgICAgICAgICAgICAgdmFsdWVzW2V4cGVjdGF0aW9u
XS5wdXNoKGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gdmFsdWVzOworfQorCitmdW5jdGlvbiBodG1sRm9yVGVzdFR5cGUocmVzdWx0cywga2V5LCBk
ZXNjcmlwdGlvbiwgbnVtQ29sdW1ucykKK3sKKyAgICB2YXIgY291bnRzID0gcmVzdWx0c1trZXld
OworICAgIHZhciBodG1sID0gaHRtbEZvclJldmlzaW9uUm93cyhyZXN1bHRzLCBudW1Db2x1bW5z
KTsKKyAgICB2YXIgdmFsdWVzID0gdmFsdWVzUGVyRXhwZWN0YXRpb24oY291bnRzLCBudW1Db2x1
bW5zKTsKKyAgICBmb3IgKHZhciBleHBlY3RhdGlvbiBpbiB2YWx1ZXMpCisgICAgICAgIGh0bWwg
Kz0gaHRtbEZvclRhYmxlUm93KGV4cGVjdGF0aW9uc01hcCgpW2V4cGVjdGF0aW9uXSwgdmFsdWVz
W2V4cGVjdGF0aW9uXSk7CisgICAgcmV0dXJuIHdyYXBIVE1MSW5UYWJsZShkZXNjcmlwdGlvbiwg
aHRtbCk7Cit9CisKK2Z1bmN0aW9uIGh0bWxGb3JUYWJsZVJvdyhjb2x1bW5OYW1lLCB2YWx1ZXMp
Cit7CisgICAgcmV0dXJuICc8dHI+PHRkPicgKyBjb2x1bW5OYW1lICsgJzwvdGQ+PHRkPicgKyB2
YWx1ZXMuam9pbignPC90ZD48dGQ+JykgKyAnPC90ZD48L3RyPic7Cit9CisKKy8vIFRha2VuIGZy
b20gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9hcGlzL2NoYXJ0L2RvY3MvZGF0YV9mb3JtYXRzLmh0
bWwuCitmdW5jdGlvbiBleHRlbmRlZEVuY29kZShhcnJWYWxzLCBtYXhWYWwpCit7CisgICAgdmFy
IG1hcCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3
eHl6MDEyMzQ1Njc4OS0uJzsKKyAgICB2YXIgbWFwTGVuZ3RoID0gbWFwLmxlbmd0aDsKKyAgICB2
YXIgbWFwTGVuZ3RoU3F1YXJlZCA9IG1hcExlbmd0aCAqIG1hcExlbmd0aDsKKworICAgIHZhciBj
aGFydERhdGEgPSAnJzsKKworICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcnJWYWxzLmxlbmd0
aDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgIC8vIEluIGNhc2UgdGhlIGFycmF5IHZhbHMgd2Vy
ZSB0cmFuc2xhdGVkIHRvIHN0cmluZ3MuCisgICAgICAgIHZhciBudW1lcmljVmFsID0gbmV3IE51
bWJlcihhcnJWYWxzW2ldKTsKKyAgICAgICAgLy8gU2NhbGUgdGhlIHZhbHVlIHRvIG1heFZhbC4K
KyAgICAgICAgdmFyIHNjYWxlZFZhbCA9IE1hdGguZmxvb3IobWFwTGVuZ3RoU3F1YXJlZCAqIG51
bWVyaWNWYWwgLyBtYXhWYWwpOworCisgICAgICAgIGlmKHNjYWxlZFZhbCA+IG1hcExlbmd0aFNx
dWFyZWQgLSAxKQorICAgICAgICAgICAgY2hhcnREYXRhICs9ICIuLiI7CisgICAgICAgIGVsc2Ug
aWYgKHNjYWxlZFZhbCA8IDApCisgICAgICAgICAgICBjaGFydERhdGEgKz0gJ19fJzsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgZmlyc3QgYW5kIHNlY29uZCBkaWdp
dHMgYW5kIGFkZCB0aGVtIHRvIHRoZSBvdXRwdXQuCisgICAgICAgICAgICB2YXIgcXVvdGllbnQg
PSBNYXRoLmZsb29yKHNjYWxlZFZhbCAvIG1hcExlbmd0aCk7CisgICAgICAgICAgICB2YXIgcmVt
YWluZGVyID0gc2NhbGVkVmFsIC0gbWFwTGVuZ3RoICogcXVvdGllbnQ7CisgICAgICAgICAgICBj
aGFydERhdGEgKz0gbWFwLmNoYXJBdChxdW90aWVudCkgKyBtYXAuY2hhckF0KHJlbWFpbmRlcik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY2hhcnREYXRhOworfQorPC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT48L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9idWlsZGVycy5qcyBiL1Rvb2xzL1Rl
c3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2J1aWxkZXJzLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjUwMTdlZTVkZjdjNWNlNGZhZWJiM2FiZjViMmUwYjhhOTFlNTVlZDEKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9idWls
ZGVycy5qcwpAQCAtMCwwICsxLDIyMyBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKy8vIEBmaWxlb3ZlcnZpZXcgRmlsZSB0aGF0IGxpc3RzIGJ1aWxkZXJzLCB0
aGVpciBtYXN0ZXJzLCBhbmQgbG9naWNhbCBncm91cGluZ3MKKy8vIG9mIHRoZW0uCisKK2Z1bmN0
aW9uIEJ1aWxkZXJNYXN0ZXIobmFtZSwgYmFzZVBhdGgpCit7CisgICAgdGhpcy5uYW1lID0gbmFt
ZTsKKyAgICB0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGg7Cit9CisKK0J1aWxkZXJNYXN0ZXIucHJv
dG90eXBlLmdldExvZ1BhdGggPSBmdW5jdGlvbihidWlsZGVyLCBidWlsZE51bWJlcikKK3sKKyAg
ICByZXR1cm4gdGhpcy5iYXNlUGF0aCArIGJ1aWxkZXIgKyAnL2J1aWxkcy8nICsgYnVpbGROdW1i
ZXI7Cit9OworCitDSFJPTUlVTV9CVUlMREVSX01BU1RFUiA9IG5ldyBCdWlsZGVyTWFzdGVyKCdD
aHJvbWl1bScsICdodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vYnVpbGRlcnMv
Jyk7CitDSFJPTUlVTV9XRUJLSVRfQlVJTERFUl9NQVNURVIgPSBuZXcgQnVpbGRlck1hc3Rlcign
Q2hyb21pdW1XZWJraXQnLCAnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9wL2Nocm9taXVtLndl
YmtpdC9idWlsZGVycy8nKTsKK0NIUk9NSVVNX0dQVV9CVUlMREVSX01BU1RFUiA9IG5ldyBCdWls
ZGVyTWFzdGVyKCdDaHJvbWl1bUdQVScsICdodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL3AvY2hy
b21pdW0uZ3B1L2J1aWxkZXJzLycpOworV0VCS0lUX0JVSUxERVJfTUFTVEVSID0gbmV3IEJ1aWxk
ZXJNYXN0ZXIoJ3dlYmtpdC5vcmcnLCAnaHR0cDovL2J1aWxkLndlYmtpdC5vcmcvYnVpbGRlcnMv
Jyk7CisKK2Z1bmN0aW9uIEJ1aWxkZXJHcm91cChpc1RvVFdlYktpdCwgYnVpbGRlcnMpCit7Cisg
ICAgdGhpcy5pc1RvVFdlYktpdCA9IGlzVG9UV2ViS2l0OworICAgIC8vIE1hcCBvZiBidWlsZGVy
TmFtZSAodGhlIG5hbWUgc2hvd24gaW4gdGhlIHdhdGVyZmFsbCkgdG8gYnVpbGRlclBhdGggKHRo
ZQorICAgIC8vIHBhdGggdXNlZCBpbiB0aGUgYnVpbGRlcidzIFVSTCkKKyAgICB0aGlzLmJ1aWxk
ZXJzID0ge307CisgICAgYnVpbGRlcnMuZm9yRWFjaChmdW5jdGlvbihidWlsZGVyQW5kRmxhZ3Mp
IHsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBidWlsZGVyQW5kRmxhZ3NbMF07CisgICAgICAgIHZh
ciBmbGFncyA9IGJ1aWxkZXJBbmRGbGFnc1sxXTsKKworICAgICAgICB0aGlzLmJ1aWxkZXJzW2J1
aWxkZXJdID0gYnVpbGRlci5yZXBsYWNlKC9bIC4oKV0vZywgJ18nKTsKKyAgICAgICAgaWYgKGZs
YWdzICYgQnVpbGRlckdyb3VwLkRFRkFVTFRfQlVJTERFUikKKyAgICAgICAgICAgIHRoaXMuZGVm
YXVsdEJ1aWxkZXIgPSBidWlsZGVyOworICAgICAgICBpZiAoZmxhZ3MgJiBCdWlsZGVyR3JvdXAu
RVhQRUNUQVRJT05TX0JVSUxERVIpCisgICAgICAgICAgICB0aGlzLmV4cGVjdGF0aW9uc0J1aWxk
ZXIgPSBidWlsZGVyOworICAgIH0sIHRoaXMpOworfQorCitCdWlsZGVyR3JvdXAucHJvdG90eXBl
LnNldHVwID0gZnVuY3Rpb24oKQoreworICAgIC8vIEZJWE1FOiBpbnN0ZWFkIG9mIGNvcHlpbmcg
dGhlc2UgdG8gZ2xvYmFscywgaXQgd291bGQgYmUgYmV0dGVyIGlmCisgICAgLy8gdGhlIHJlc3Qg
b2YgdGhlIGNvZGUgcmVhZCB0aGluZ3MgZnJvbSB0aGUgQnVpbGRlckdyb3VwIGluc3RhbmNlIGRp
cmVjdGx5CisgICAgZ19kZWZhdWx0QnVpbGRlck5hbWUgPSB0aGlzLmRlZmF1bHRCdWlsZGVyOwor
ICAgIGdfZXhwZWN0YXRpb25zQnVpbGRlciA9IHRoaXMuZXhwZWN0YXRpb25zQnVpbGRlcjsKKyAg
ICBnX2J1aWxkZXJzID0gdGhpcy5idWlsZGVyczsKK307CisKK0J1aWxkZXJHcm91cC5UT1RfV0VC
S0lUID0gdHJ1ZTsKK0J1aWxkZXJHcm91cC5ERVBTX1dFQktJVCA9IGZhbHNlOworCitCdWlsZGVy
R3JvdXAuREVGQVVMVF9CVUlMREVSID0gMSA8PCAxOworLy8gRm9yIGV4cGVjdGF0aW9ucyBidWls
ZGVyLCBsaXN0IHRoZSBmYXN0ZXN0IGJ1aWxkZXIgc28gdGhhdCB3ZSBhbHdheXMgaGF2ZSB0aGUK
Ky8vIG1vc3QgdXAgdG8gZGF0ZSBleHBlY3RhdGlvbnMuCitCdWlsZGVyR3JvdXAuRVhQRUNUQVRJ
T05TX0JVSUxERVIgPSAxIDw8IDI7CisKK3ZhciBCVUlMREVSX1RPX01BU1RFUiA9IHt9OworZnVu
Y3Rpb24gYXNzb2NpYXRlQnVpbGRlcnNXaXRoTWFzdGVyKGJ1aWxkZXJzLCBtYXN0ZXIpCit7Cisg
ICAgYnVpbGRlcnMuZm9yRWFjaChmdW5jdGlvbihidWlsZGVyQW5kRmxhZ3MpIHsKKyAgICAgICAg
dmFyIGJ1aWxkZXIgPSBidWlsZGVyQW5kRmxhZ3NbMF07CisgICAgICAgIEJVSUxERVJfVE9fTUFT
VEVSW2J1aWxkZXJdID0gbWFzdGVyOworICAgIH0pOworfQorCit2YXIgQ0hST01JVU1fREVQU19C
VUlMREVSUyA9IFsKKyAgICBbJ1dlYmtpdCBXaW4gKGRlcHMpJywgQnVpbGRlckdyb3VwLkRFRkFV
TFRfQlVJTERFUl0sCisgICAgWydXZWJraXQgTGludXggKGRlcHMpJywgQnVpbGRlckdyb3VwLkVY
UEVDVEFUSU9OU19CVUlMREVSXSwKKyAgICBbJ1dlYmtpdCBNYWMxMC42IChkZXBzKSddLAorICAg
IFsnV2Via2l0IE1hYzEwLjYgKENHKShkZXBzKSddLAorXTsKK2Fzc29jaWF0ZUJ1aWxkZXJzV2l0
aE1hc3RlcihDSFJPTUlVTV9ERVBTX0JVSUxERVJTLCBDSFJPTUlVTV9XRUJLSVRfQlVJTERFUl9N
QVNURVIpOworCit2YXIgQ0hST01JVU1fVE9UX0JVSUxERVJTID0gWworICAgIFsnV2Via2l0IFdp
bicsIEJ1aWxkZXJHcm91cC5ERUZBVUxUX0JVSUxERVJdLAorICAgIFsnV2Via2l0IFZpc3RhJ10s
CisgICAgWydXZWJraXQgV2luNyddLAorICAgIFsnV2Via2l0IFdpbiAoZGJnKSgxKSddLAorICAg
IFsnV2Via2l0IFdpbiAoZGJnKSgyKSddLAorICAgIFsnV2Via2l0IExpbnV4JywgQnVpbGRlckdy
b3VwLkVYUEVDVEFUSU9OU19CVUlMREVSXSwKKyAgICBbJ1dlYmtpdCBMaW51eCAzMiddLAorICAg
IFsnV2Via2l0IExpbnV4IChkYmcpJ10sCisgICAgWydXZWJraXQgTWFjMTAuNSddLAorICAgIFsn
V2Via2l0IE1hYzEwLjUgKGRiZykoMSknXSwKKyAgICBbJ1dlYmtpdCBNYWMxMC41IChkYmcpKDIp
J10sCisgICAgWydXZWJraXQgTWFjMTAuNiddLAorICAgIFsnV2Via2l0IE1hYzEwLjYgKGRiZykn
XSwKKyAgICBbJ1dlYmtpdCBNYWMxMC41IChDRyknXSwKKyAgICBbJ1dlYmtpdCBNYWMxMC41IChD
RykoZGJnKSgxKSddLAorICAgIFsnV2Via2l0IE1hYzEwLjUgKENHKShkYmcpKDIpJ10sCisgICAg
WydXZWJraXQgTWFjMTAuNiAoQ0cpJ10sCisgICAgWydXZWJraXQgTWFjMTAuNiAoQ0cpKGRiZykn
XQorXTsKK2Fzc29jaWF0ZUJ1aWxkZXJzV2l0aE1hc3RlcihDSFJPTUlVTV9UT1RfQlVJTERFUlMs
IENIUk9NSVVNX1dFQktJVF9CVUlMREVSX01BU1RFUik7CisKK3ZhciBXRUJLSVRfVE9UX0JVSUxE
RVJTID0gWworICAgIFsnQ2hyb21pdW0gV2luIFJlbGVhc2UgKFRlc3RzKScsIEJ1aWxkZXJHcm91
cC5ERUZBVUxUX0JVSUxERVJdLAorICAgIFsnQ2hyb21pdW0gTGludXggUmVsZWFzZSAoVGVzdHMp
JywgQnVpbGRlckdyb3VwLkVYUEVDVEFUSU9OU19CVUlMREVSXSwKKyAgICBbJ0Nocm9taXVtIE1h
YyBSZWxlYXNlIChUZXN0cyknXSwKKyAgICBbJ1Nub3dMZW9wYXJkIEludGVsIFJlbGVhc2UgKFRl
c3RzKSddLAorICAgIFsnU25vd0xlb3BhcmQgSW50ZWwgRGVidWcgKFRlc3RzKSddLAorICAgIFsn
R1RLIExpbnV4IDMyLWJpdCBSZWxlYXNlJ10sCisgICAgWydHVEsgTGludXggMzItYml0IERlYnVn
J10sCisgICAgWydHVEsgTGludXggNjQtYml0IERlYnVnJ10sCisgICAgWydRdCBMaW51eCBSZWxl
YXNlJ10KK107Cithc3NvY2lhdGVCdWlsZGVyc1dpdGhNYXN0ZXIoV0VCS0lUX1RPVF9CVUlMREVS
UywgV0VCS0lUX0JVSUxERVJfTUFTVEVSKTsKKwordmFyIENIUk9NSVVNX0dQVV9NRVNBX0JVSUxE
RVJTID0gWworICAgIFsnV2Via2l0IFdpbiAtIEdQVScsIEJ1aWxkZXJHcm91cC5ERUZBVUxUX0JV
SUxERVJdLAorICAgIFsnV2Via2l0IFZpc3RhIC0gR1BVJ10sCisgICAgWydXZWJraXQgV2luNyAt
IEdQVSddLAorICAgIFsnV2Via2l0IFdpbiAoZGJnKSgxKSAtIEdQVSddLAorICAgIFsnV2Via2l0
IFdpbiAoZGJnKSgyKSAtIEdQVSddLAorICAgIFsnV2Via2l0IExpbnV4IC0gR1BVJywgQnVpbGRl
ckdyb3VwLkVYUEVDVEFUSU9OU19CVUlMREVSXSwKKyAgICBbJ1dlYmtpdCBMaW51eCAzMiAtIEdQ
VSddLAorICAgIFsnV2Via2l0IExpbnV4IChkYmcpIC0gR1BVJ10sCisgICAgWydXZWJraXQgTWFj
MTAuNSAtIEdQVSddLAorICAgIFsnV2Via2l0IE1hYzEwLjUgKGRiZykoMSkgLSBHUFUnXSwKKyAg
ICBbJ1dlYmtpdCBNYWMxMC41IChkYmcpKDIpIC0gR1BVJ10sCisgICAgWydXZWJraXQgTWFjMTAu
NiAtIEdQVSddLAorICAgIFsnV2Via2l0IE1hYzEwLjYgKGRiZykgLSBHUFUnXSwKKyAgICBbJ1dl
YmtpdCBNYWMxMC41IChDRykgLSBHUFUnXSwKKyAgICBbJ1dlYmtpdCBNYWMxMC41IChDRykoZGJn
KSgxKSAtIEdQVSddLAorICAgIFsnV2Via2l0IE1hYzEwLjUgKENHKShkYmcpKDIpIC0gR1BVJ10s
CisgICAgWydXZWJraXQgTWFjMTAuNiAoQ0cpIC0gR1BVJ10sCisgICAgWydXZWJraXQgTWFjMTAu
NiAoQ0cpKGRiZykgLSBHUFUnXQorXTsKK2Fzc29jaWF0ZUJ1aWxkZXJzV2l0aE1hc3RlcihDSFJP
TUlVTV9HUFVfTUVTQV9CVUlMREVSUywgQ0hST01JVU1fV0VCS0lUX0JVSUxERVJfTUFTVEVSKTsK
KwordmFyIExBWU9VVF9URVNUU19CVUlMREVSX0dST1VQUyA9IHsKKyAgICAnQERFUFMgLSBjaHJv
bWl1bS5vcmcnOiBuZXcgQnVpbGRlckdyb3VwKEJ1aWxkZXJHcm91cC5ERVBTX1dFQktJVCwgQ0hS
T01JVU1fREVQU19CVUlMREVSUyksCisgICAgJ0BUb1QgLSBjaHJvbWl1bS5vcmcnOiBuZXcgQnVp
bGRlckdyb3VwKEJ1aWxkZXJHcm91cC5UT1RfV0VCS0lULCBDSFJPTUlVTV9UT1RfQlVJTERFUlMp
LAorICAgICdAVG9UIC0gd2Via2l0Lm9yZyc6IG5ldyBCdWlsZGVyR3JvdXAoQnVpbGRlckdyb3Vw
LlRPVF9XRUJLSVQsIFdFQktJVF9UT1RfQlVJTERFUlMpLAorICAgICdAVG9UIEdQVSBNZXNhIC0g
Y2hyb21pdW0ub3JnJzogbmV3IEJ1aWxkZXJHcm91cChCdWlsZGVyR3JvdXAuVE9UX1dFQktJVCwg
Q0hST01JVU1fR1BVX01FU0FfQlVJTERFUlMpCit9OworCit2YXIgTEVHQUNZX0JVSUxERVJfTUFT
VEVSU19UT19HUk9VUFMgPSB7CisgICAgJ0Nocm9taXVtJzogJ0BERVBTIC0gY2hyb21pdW0ub3Jn
JywKKyAgICAnQ2hyb21pdW1XZWJraXQnOiAnQFRvVCAtIGNocm9taXVtLm9yZycsCisgICAgJ3dl
YmtpdC5vcmcnOiAnQFRvVCAtIHdlYmtpdC5vcmcnCit9OworCit2YXIgR19URVNUU19CVUlMREVS
UyA9IFsKKyAgICBbJ1dpbicsIEJ1aWxkZXJHcm91cC5ERUZBVUxUX0JVSUxERVJdLAorICAgIFsn
TWFjJ10sCisgICAgWydMaW51eCddLAorICAgIFsnTGludXggeDY0J10sCisgICAgWydYUCBUZXN0
cyAoMSknXSwKKyAgICBbJ1hQIFRlc3RzICgyKSddLAorICAgIFsnWFAgVGVzdHMgKDMpJ10sCisg
ICAgWydWaXN0YSBUZXN0cyAoMSknXSwKKyAgICBbJ1Zpc3RhIFRlc3RzICgyKSddLAorICAgIFsn
VmlzdGEgVGVzdHMgKDMpJ10sCisgICAgWydXaW43IFRlc3RzICgxKSddLAorICAgIFsnV2luNyBU
ZXN0cyAoMiknXSwKKyAgICBbJ1dpbjcgVGVzdHMgKDMpJ10sCisgICAgWydXaW43IFN5bmMnXSwK
KyAgICBbJ1hQIFRlc3RzIChkYmcpKDEpJ10sCisgICAgWydYUCBUZXN0cyAoZGJnKSgyKSddLAor
ICAgIFsnWFAgVGVzdHMgKGRiZykoMyknXSwKKyAgICBbJ1hQIFRlc3RzIChkYmcpKDQpJ10sCisg
ICAgWydYUCBUZXN0cyAoZGJnKSg1KSddLAorICAgIFsnWFAgVGVzdHMgKGRiZykoNiknXSwKKyAg
ICBbJ1dpbjcgVGVzdHMgKGRiZykoMSknXSwKKyAgICBbJ1dpbjcgVGVzdHMgKGRiZykoMiknXSwK
KyAgICBbJ1dpbjcgVGVzdHMgKGRiZykoMyknXSwKKyAgICBbJ1dpbjcgVGVzdHMgKGRiZykoNCkn
XSwKKyAgICBbJ1dpbjcgVGVzdHMgKGRiZykoNSknXSwKKyAgICBbJ1dpbjcgVGVzdHMgKGRiZyko
NiknXSwKKyAgICBbJ0ludGVyYWN0aXZlIFRlc3RzIChkYmcpJ10sCisgICAgWydXaW4gQXVyYSdd
LAorICAgIFsnTWFjMTAuNSBUZXN0cyAoMSknXSwKKyAgICBbJ01hYzEwLjUgVGVzdHMgKDIpJ10s
CisgICAgWydNYWMxMC41IFRlc3RzICgzKSddLAorICAgIFsnTWFjMTAuNiBUZXN0cyAoMSknXSwK
KyAgICBbJ01hYzEwLjYgVGVzdHMgKDIpJ10sCisgICAgWydNYWMxMC42IFRlc3RzICgzKSddLAor
ICAgIFsnTWFjMTAuNiBTeW5jJ10sCisgICAgWydNYWMgMTAuNSBUZXN0cyAoZGJnKSgxKSddLAor
ICAgIFsnTWFjIDEwLjUgVGVzdHMgKGRiZykoMiknXSwKKyAgICBbJ01hYyAxMC41IFRlc3RzIChk
YmcpKDMpJ10sCisgICAgWydNYWMgMTAuNSBUZXN0cyAoZGJnKSg0KSddLAorICAgIFsnTWFjIDEw
LjYgVGVzdHMgKGRiZykoMSknXSwKKyAgICBbJ01hYyAxMC42IFRlc3RzIChkYmcpKDIpJ10sCisg
ICAgWydNYWMgMTAuNiBUZXN0cyAoZGJnKSgzKSddLAorICAgIFsnTWFjIDEwLjYgVGVzdHMgKGRi
ZykoNCknXSwKKyAgICBbJ0xpbnV4IFRlc3RzIHg2NCddLAorICAgIFsnTGludXggU3luYyddLAor
ICAgIFsnTGludXggVGVzdHMgKGRiZykoMSknXSwKKyAgICBbJ0xpbnV4IFRlc3RzIChkYmcpKDIp
J10sCisgICAgWydMaW51eCBUZXN0cyAoZGJnKShzaGFyZWQpJ10sCisgICAgWydMaW51eCBUZXN0
cyAoQXVyYSBkYmcpJ10sCitdOworYXNzb2NpYXRlQnVpbGRlcnNXaXRoTWFzdGVyKEdfVEVTVFNf
QlVJTERFUlMsIENIUk9NSVVNX0JVSUxERVJfTUFTVEVSKTsKKwordmFyIEdfVEVTVFNfQlVJTERF
Ul9HUk9VUCA9IG5ldyBCdWlsZGVyR3JvdXAoQnVpbGRlckdyb3VwLkRFUFNfV0VCS0lULCBHX1RF
U1RTX0JVSUxERVJTKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3N0
YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzIGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRT
ZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjU0
M2JjODQyMGQyZjFhOTQ4YzdmNTIyZTYzZWM3NzYwNDNmNmUzZgotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9i
YXNlLmpzCkBAIC0wLDAgKzEsMTA4MSBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisvLyBtZXQ6CisvLworLy8gICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
Ky8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
Ky8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy8vIEBmaWxlb3ZlcnZpZXcgQmFzZSBKUyBmaWxl
IGZvciBwYWdlcyB0aGF0IHdhbnQgdG8gcGFyc2UgdGhlIHJlc3VsdHMgSlNPTgorLy8gZnJvbSB0
aGUgdGVzdGluZyBib3RzLiBUaGlzIGRlYWxzIHdpdGggZ2VuZXJpYyB1dGlsaXR5IGZ1bmN0aW9u
cywgdmlzaWJsZQorLy8gaGlzdG9yeSwgcG9wdXBzIGFuZCBhcHBlbmRpbmcgdGhlIHNjcmlwdCBl
bGVtZW50cyBmb3IgdGhlIEpTT04gZmlsZXMuCisvLworLy8gVGhlIGNhbGxpbmcgcGFnZSBpcyBl
eHBlY3RlZCB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyAiYWJzdHJhY3QiCisvLyBmdW5jdGlv
bnMvb2JqZWN0czoKK3ZhciBnX3BhZ2VMb2FkU3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKKworLy8g
R2VuZXJhdGVzIHRoZSBjb250ZW50cyBvZiB0aGUgZGFzaGJvYXJkLiBUaGUgcGFnZSBzaG91bGQg
b3ZlcnJpZGUgdGhpcyB3aXRoCisvLyBhIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHRoZSBwYWdl
IGFzc3VtaW5nIGFsbCByZXNvdXJjZXMgaGF2ZSBsb2FkZWQuCitmdW5jdGlvbiBnZW5lcmF0ZVBh
Z2UoKSB7fQorCisvLyBUYWtlcyBhIGtleSBhbmQgYSB2YWx1ZSBhbmQgc2V0cyB0aGUgZ19jdXJy
ZW50U3RhdGVba2V5XSA9IHZhbHVlIGlmZiBrZXkgaXMKKy8vIGEgdmFsaWQgaGFzaCBwYXJhbWV0
ZXIgYW5kIHRoZSB2YWx1ZSBpcyBhIHZhbGlkIHZhbHVlIGZvciB0aGF0IGtleS4KKy8vCisvLyBA
cmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBrZXkgd2hhdCBpbnNlcnRlZCBpbnRvIHRoZSBn
X2N1cnJlbnRTdGF0ZS4KK2Z1bmN0aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcihrZXksIHZh
bHVlKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gRGVmYXVsdCBoYXNoIHBhcmFtZXRl
cnMgZm9yIHRoZSBwYWdlLiBUaGUgcGFnZSBzaG91bGQgb3ZlcnJpZGUgdGhpcyB0byBjcmVhdGUK
Ky8vIGRlZmF1bHQgc3RhdGVzLgordmFyIGdfZGVmYXVsdFN0YXRlVmFsdWVzID0ge307CisKKwor
Ly8gVGhlIHBhZ2Ugc2hvdWxkIG92ZXJyaWRlIHRoaXMgdG8gbW9kaWZ5IHBhZ2Ugc3RhdGUgZHVl
IHRvCisvLyBjaGFuZ2luZyBxdWVyeSBwYXJhbWV0ZXJzLgorLy8gQHBhcmFtIHtPYmplY3R9IHBh
cmFtcyBOZXcgb3IgbW9kaWZpZWQgcXVlcnkgcGFyYW1zIGFzIGtleTogdmFsdWUuCisvLyBAcmV0
dXJuIHtib29sZWFufSBXaGV0aGVyIGNoYW5naW5nIHRoaXMgcGFyYW1ldGVyIHNob3VsZCBjYXVz
ZSBnZW5lcmF0ZVBhZ2UgdG8gYmUgY2FsbGVkLgorZnVuY3Rpb24gaGFuZGxlUXVlcnlQYXJhbWV0
ZXJDaGFuZ2UocGFyYW1zKQoreworICAgIHJldHVybiB0cnVlOworfQorCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKy8vIENPTlNUQU5UUworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit2YXIgR1RFU1Rf
RVhQRUNUQVRJT05TX01BUF8gPSB7CisgICAgJ1AnOiAnUEFTUycsCisgICAgJ0YnOiAnRkFJTCcs
CisgICAgJ0wnOiAnRkxBS1knLAorICAgICdOJzogJ05PIERBVEEnLAorICAgICdYJzogJ0RJU0FC
TEVEJworfTsKKwordmFyIExBWU9VVF9URVNUX0VYUEVDVEFUSU9OU19NQVBfID0geworICAgICdQ
JzogJ1BBU1MnLAorICAgICdOJzogJ05PIERBVEEnLAorICAgICdYJzogJ1NLSVAnLAorICAgICdU
JzogJ1RJTUVPVVQnLAorICAgICdGJzogJ1RFWFQnLAorICAgICdDJzogJ0NSQVNIJywKKyAgICAn
SSc6ICdJTUFHRScsCisgICAgJ1onOiAnSU1BR0UrVEVYVCcsCisgICAgLy8gV2UgdXNlZCB0byBn
bG9iIGEgYnVuY2ggb2YgZXhwZWN0YXRpb25zIGludG8gIk8iIGFzIE9USEVSLiBFeHBlY3RhdGlv
bnMKKyAgICAvLyBhcmUgbW9yZSBwcmVjaXNlIG5vdyB0aG91Z2ggYW5kIGl0IGp1c3QgbWVhbnMg
TUlTU0lORy4KKyAgICAnTyc6ICdNSVNTSU5HJworfTsKKwordmFyIEZBSUxVUkVfRVhQRUNUQVRJ
T05TXyA9IHsKKyAgICAnVCc6IDEsCisgICAgJ0YnOiAxLAorICAgICdDJzogMSwKKyAgICAnSSc6
IDEsCisgICAgJ1onOiAxCit9OworCisvLyBLZXlzIGluIHRoZSBKU09OIGZpbGVzLgordmFyIFdP
TlRGSVhfQ09VTlRTX0tFWSA9ICd3b250Zml4Q291bnRzJzsKK3ZhciBGSVhBQkxFX0NPVU5UU19L
RVkgPSAnZml4YWJsZUNvdW50cyc7Cit2YXIgREVGRVJSRURfQ09VTlRTX0tFWSA9ICdkZWZlcnJl
ZENvdW50cyc7Cit2YXIgV09OVEZJWF9ERVNDUklQVElPTiA9ICdUZXN0cyBuZXZlciB0byBiZSBm
aXhlZCAoV09OVEZJWCknOwordmFyIEZJWEFCTEVfREVTQ1JJUFRJT04gPSAnQWxsIHRlc3RzIGZv
ciB0aGlzIHJlbGVhc2UnOwordmFyIERFRkVSUkVEX0RFU0NSSVBUSU9OID0gJ0FsbCBkZWZlcnJl
ZCB0ZXN0cyAoREVGRVIpJzsKK3ZhciBGSVhBQkxFX0NPVU5UX0tFWSA9ICdmaXhhYmxlQ291bnQn
OwordmFyIEFMTF9GSVhBQkxFX0NPVU5UX0tFWSA9ICdhbGxGaXhhYmxlQ291bnQnOwordmFyIENI
Uk9NRV9SRVZJU0lPTlNfS0VZID0gJ2Nocm9tZVJldmlzaW9uJzsKK3ZhciBXRUJLSVRfUkVWSVNJ
T05TX0tFWSA9ICd3ZWJraXRSZXZpc2lvbic7Cit2YXIgVElNRVNUQU1QU19LRVkgPSAnc2Vjb25k
c1NpbmNlRXBvY2gnOwordmFyIEJVSUxEX05VTUJFUlNfS0VZID0gJ2J1aWxkTnVtYmVycyc7Cit2
YXIgVEVTVFNfS0VZID0gJ3Rlc3RzJzsKK3ZhciBUV09fV0VFS1NfU0VDT05EUyA9IDYwICogNjAg
KiAyNCAqIDE0OworCisvLyBUaGVzZSBzaG91bGQgbWF0Y2ggdGhlIHRlc3R0eXBlIHVwbG9hZGVk
IHRvIHRlc3QtcmVzdWx0cy5hcHBzcG90LmNvbS4KKy8vIFNlZSBodHRwOi8vdGVzdC1yZXN1bHRz
LmFwcHNwb3QuY29tL3Rlc3RmaWxlLgordmFyIFRFU1RfVFlQRVMgPSBbCisgICAgJ2F1cmFfdW5p
dHRlc3RzJywKKyAgICAnYXVyYV9zaGVsbF91bml0dGVzdHMnLAorICAgICdiYXNlX3VuaXR0ZXN0
cycsCisgICAgJ2Jyb3dzZXJfdGVzdHMnLAorICAgICdjYWNoZWludmFsaWRhdGlvbl91bml0dGVz
dHMnLAorICAgICdjb21wb3NpdG9yX3VuaXR0ZXN0cycsCisgICAgJ2NvbnRlbnRfdW5pdHRlc3Rz
JywKKyAgICAnY291cmdldHRlX3VuaXR0ZXN0cycsCisgICAgJ2NyeXB0b191bml0dGVzdHMnLAor
ICAgICdnb29nbGV1cmxfdW5pdHRlc3RzJywKKyAgICAnZ2Z4X3VuaXR0ZXN0cycsCisgICAgJ2dw
dV91bml0dGVzdHMnLAorICAgICdpbnN0YWxsZXJfdXRpbF91bml0dGVzdHMnLAorICAgICdpbnRl
cmFjdGl2ZV91aV90ZXN0cycsCisgICAgJ2lwY190ZXN0cycsCisgICAgJ2ppbmdsZV91bml0dGVz
dHMnLAorICAgICdsYXlvdXQtdGVzdHMnLAorICAgICdtZWRpYV91bml0dGVzdHMnLAorICAgICdt
aW5pX2luc3RhbGxlcl90ZXN0JywKKyAgICAnbmFjbF91aV90ZXN0cycsCisgICAgJ25ldF91bml0
dGVzdHMnLAorICAgICdwcmludGluZ191bml0dGVzdHMnLAorICAgICdyZW1vdGluZ191bml0dGVz
dHMnLAorICAgICdzYWZlX2Jyb3dzaW5nX3Rlc3RzJywKKyAgICAnc3FsX3VuaXR0ZXN0cycsCisg
ICAgJ3N5bmNfdW5pdF90ZXN0cycsCisgICAgJ3N5bmNfaW50ZWdyYXRpb25fdGVzdHMnLAorICAg
ICd0ZXN0X3NoZWxsX3Rlc3RzJywKKyAgICAndWlfdGVzdHMnLAorICAgICd1bml0X3Rlc3RzJywK
KyAgICAndmlld3NfdW5pdHRlc3RzJywKK107CisKK3ZhciBSRUxPQURfUkVRVUlSSU5HX1BBUkFN
RVRFUlMgPSBbJ3Nob3dBbGxSdW5zJywgJ2dyb3VwJywgJ3Rlc3RUeXBlJ107CisKKy8vIEVudW0g
Zm9yIGluZGV4aW5nIGludG8gdGhlIHJ1bi1sZW5ndGggZW5jb2RlZCByZXN1bHRzIGluIHRoZSBK
U09OIGZpbGVzLgorLy8gMCBpcyB3aGVyZSB0aGUgY291bnQgaXMgbGVuZ3RoIGlzIHN0b3JlZC4g
MSBpcyB0aGUgdmFsdWUuCit2YXIgUkxFID0geworICAgIExFTkdUSDogMCwKKyAgICBWQUxVRTog
MQorfQorCit2YXIgVEVTVF9SRVNVTFRTX1NFUlZFUiA9ICdodHRwOi8vdGVzdC1yZXN1bHRzLmFw
cHNwb3QuY29tLyc7CisKK2Z1bmN0aW9uIGlzRmFpbGluZ1Jlc3VsdCh2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gJ0ZTVE9DSVonLmluZGV4T2YodmFsdWUpICE9IC0xOworfQorCisvLyBUYWtlcyBhIGtl
eSBhbmQgYSB2YWx1ZSBhbmQgc2V0cyB0aGUgZ19jdXJyZW50U3RhdGVba2V5XSA9IHZhbHVlIGlm
ZiBrZXkgaXMKKy8vIGEgdmFsaWQgaGFzaCBwYXJhbWV0ZXIgYW5kIHRoZSB2YWx1ZSBpcyBhIHZh
bGlkIHZhbHVlIGZvciB0aGF0IGtleS4gSGFuZGxlcworLy8gY3Jvc3MtZGFzaGJvYXJkIHBhcmFt
ZXRlcnMgdGhlbiBmYWxscyBiYWNrIHRvIGNhbGxpbmcKKy8vIGhhbmRsZVZhbGlkSGFzaFBhcmFt
ZXRlciBmb3IgZGFzaGJvYXJkLXNwZWNpZmljIHBhcmFtZXRlcnMuCisvLworLy8gQHJldHVybiB7
Ym9vbGVhbn0gV2hldGhlciB0aGUga2V5IHdoYXQgaW5zZXJ0ZWQgaW50byB0aGUgZ19jdXJyZW50
U3RhdGUuCitmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXJXcmFwcGVyKGtleSwgdmFs
dWUpCit7CisgICAgc3dpdGNoKGtleSkgeworICAgIGNhc2UgJ3Rlc3RUeXBlJzoKKyAgICAgICAg
dmFsaWRhdGVQYXJhbWV0ZXIoZ19jdXJyZW50U3RhdGUsIGtleSwgdmFsdWUsCisgICAgICAgICAg
ICBmdW5jdGlvbigpIHsgcmV0dXJuIFRFU1RfVFlQRVMuaW5kZXhPZih2YWx1ZSkgIT0gLTE7IH0p
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgJ2dyb3VwJzoKKyAgICAgICAgdmFs
aWRhdGVQYXJhbWV0ZXIoZ19jdXJyZW50U3RhdGUsIGtleSwgdmFsdWUsCisgICAgICAgICAgICBm
dW5jdGlvbigpIHsgcmV0dXJuIHZhbHVlIGluIExBWU9VVF9URVNUU19CVUlMREVSX0dST1VQUzsg
fSk7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gRklYTUU6IHJlbW92ZSBzdXBwb3J0
IGZvciB0aGlzIHBhcmFtZXRlciBvbmNlIHRoZSB3YXRlcmZhbGwgc3RhcnRzIHRvCisgICAgLy8g
cGFzcyBpbiB0aGUgYnVpbGRlciBuYW1lIGluc3RlYWQuCisgICAgY2FzZSAnbWFzdGVyJzoKKyAg
ICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIoZ19jdXJyZW50U3RhdGUsIGtleSwgdmFsdWUsCisgICAg
ICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIHZhbHVlIGluIExFR0FDWV9CVUlMREVSX01BU1RF
UlNfVE9fR1JPVVBTOyB9KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlICdidWls
ZGVyJzoKKyAgICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIoZ19jdXJyZW50U3RhdGUsIGtleSwgdmFs
dWUsCisgICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIHZhbHVlIGluIGdfYnVpbGRlcnM7
IH0pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgJ3VzZVRlc3REYXRhJzoKKyAg
ICBjYXNlICdzaG93QWxsUnVucyc6CisgICAgICAgIGdfY3VycmVudFN0YXRlW2tleV0gPSB2YWx1
ZSA9PSAndHJ1ZSc7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSAnYnVpbGREaXIn
OgorICAgICAgICBnX2N1cnJlbnRTdGF0ZVsndGVzdFR5cGUnXSA9ICdsYXlvdXQtdGVzdC1yZXN1
bHRzJzsKKyAgICAgICAgaWYgKHZhbHVlID09PSAnRGVidWcnIHx8IHZhbHVlID09ICdSZWxlYXNl
JykgeworICAgICAgICAgICAgZ19jdXJyZW50U3RhdGVba2V5XSA9IHZhbHVlOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRl
cihrZXksIHZhbHVlKTsKKyAgICB9Cit9CisKK3ZhciBnX2RlZmF1bHRDcm9zc0Rhc2hib2FyZFN0
YXRlVmFsdWVzID0geworICAgIGdyb3VwOiAnQFRvVCAtIGNocm9taXVtLm9yZycsCisgICAgc2hv
d0FsbFJ1bnM6IGZhbHNlLAorICAgIHRlc3RUeXBlOiAnbGF5b3V0LXRlc3RzJywKKyAgICBidWls
ZERpciA6ICcnCit9CisKKy8vIEdlbmVyaWMgdXRpbGl0eSBmdW5jdGlvbnMuCitmdW5jdGlvbiAk
KGlkKQoreworICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7Cit9CisKK2Z1
bmN0aW9uIHN0cmluZ0NvbnRhaW5zKGEsIGIpCit7CisgICAgcmV0dXJuIGEuaW5kZXhPZihiKSAh
PSAtMTsKK30KKworZnVuY3Rpb24gY2FzZUluc2Vuc2l0aXZlQ29udGFpbnMoYSwgYikKK3sKKyAg
ICByZXR1cm4gYS5tYXRjaChuZXcgUmVnRXhwKGIsICdpJykpOworfQorCitmdW5jdGlvbiBzdGFy
dHNXaXRoKGEsIGIpCit7CisgICAgcmV0dXJuIGEuaW5kZXhPZihiKSA9PSAwOworfQorCitmdW5j
dGlvbiBlbmRzV2l0aChhLCBiKQoreworICAgIHJldHVybiBhLmxhc3RJbmRleE9mKGIpID09IGEu
bGVuZ3RoIC0gYi5sZW5ndGg7Cit9CisKK2Z1bmN0aW9uIGlzVmFsaWROYW1lKHN0cikKK3sKKyAg
ICByZXR1cm4gc3RyLm1hdGNoKC9bQS1aYS16MC05XC1cXyxdLyk7Cit9CisKK2Z1bmN0aW9uIHRy
aW1TdHJpbmcoc3RyKQoreworICAgIHJldHVybiBzdHIucmVwbGFjZSgvXlxzK3xccyskL2csICcn
KTsKK30KKworZnVuY3Rpb24gY29sbGFwc2VXaGl0ZXNwYWNlKHN0cikKK3sKKyAgICByZXR1cm4g
c3RyLnJlcGxhY2UoL1xzKy9nLCAnICcpOworfQorCitmdW5jdGlvbiByZXF1ZXN0KHVybCwgc3Vj
Y2VzcywgZXJyb3IsIG9wdF9pc0JpbmFyeURhdGEpCit7CisgICAgY29uc29sZS5sb2coJ1hNTEh0
dHBSZXF1ZXN0OiAnICsgdXJsKTsKKyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7
CisgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7CisgICAgaWYgKG9wdF9pc0JpbmFyeURh
dGEpCisgICAgICAgIHhoci5vdmVycmlkZU1pbWVUeXBlKCd0ZXh0L3BsYWluOyBjaGFyc2V0PXgt
dXNlci1kZWZpbmVkJyk7CisgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKGUp
IHsKKyAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IDQpIHsKKyAgICAgICAgICAgIGlmICh4
aHIuc3RhdHVzID09IDIwMCkKKyAgICAgICAgICAgICAgICBzdWNjZXNzKHhocik7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgZXJyb3IoeGhyKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICB4aHIuc2VuZCgpOworfQorCitmdW5jdGlvbiB2YWxpZGF0ZVBhcmFtZXRlcihzdGF0ZSwg
a2V5LCB2YWx1ZSwgdmFsaWRhdGVGbikKK3sKKyAgICBpZiAodmFsaWRhdGVGbigpKQorICAgICAg
ICBzdGF0ZVtrZXldID0gdmFsdWU7CisgICAgZWxzZQorICAgICAgICBjb25zb2xlLmxvZyhrZXkg
KyAnIHZhbHVlIGlzIG5vdCB2YWxpZDogJyArIHZhbHVlKTsKK30KKworZnVuY3Rpb24gcGFyc2VQ
YXJhbWV0ZXJzKHBhcmFtZXRlclN0cikKK3sKKyAgICBnX29sZFN0YXRlID0gZ19jdXJyZW50U3Rh
dGU7CisgICAgZ19jdXJyZW50U3RhdGUgPSB7fTsKKworICAgIHZhciBoYXNoID0gd2luZG93Lmxv
Y2F0aW9uLmhhc2g7CisgICAgdmFyIHBhcmFtc0xpc3QgPSBoYXNoID8gaGFzaC5zdWJzdHJpbmco
MSkuc3BsaXQoJyYnKSA6IFtdOworICAgIHZhciBwYXJhbXNNYXAgPSB7fTsKKyAgICB2YXIgaW52
YWxpZEtleXMgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtc0xpc3QubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgdmFyIHRoaXNQYXJhbSA9IHBhcmFtc0xpc3RbaV0uc3BsaXQoJz0n
KTsKKyAgICAgICAgaWYgKHRoaXNQYXJhbS5sZW5ndGggIT0gMikgeworICAgICAgICAgICAgY29u
c29sZS5sb2coJ0ludmFsaWQgcXVlcnkgcGFyYW1ldGVyOiAnICsgcGFyYW1zTGlzdFtpXSk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHBhcmFtc01hcFt0aGlz
UGFyYW1bMF1dID0gZGVjb2RlVVJJQ29tcG9uZW50KHRoaXNQYXJhbVsxXSk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gcGFyc2VQYXJhbShrZXkpCisgICAgeworICAgICAgICB2YXIgdmFsdWUgPSBw
YXJhbXNNYXBba2V5XTsKKyAgICAgICAgaWYgKCFoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXJXcmFw
cGVyKGtleSwgdmFsdWUpKQorICAgICAgICAgICAgaW52YWxpZEtleXMucHVzaChrZXkgKyAnPScg
KyB2YWx1ZSk7CisgICAgfQorCisgICAgLy8gUGFyc2UgYnVpbGRlciBwYXJhbSBsYXN0LCBzaW5j
ZSB0aGUgbGlzdCBvZiB2YWxpZCBidWlsZGVycyBkZXBlbmRzIG9uIHRoZSBvdGhlciBwYXJhbWV0
ZXJzLgorICAgIGZvciAodmFyIGtleSBpbiBwYXJhbXNNYXApIHsKKyAgICAgICAgaWYgKGtleSAh
PSAnYnVpbGRlcicpCisgICAgICAgICAgICBwYXJzZVBhcmFtKGtleSk7CisgICAgfQorICAgIGlm
ICgnYnVpbGRlcicgaW4gcGFyYW1zTWFwKSB7CisgICAgICAgIGlmICghZ19idWlsZGVycykgewor
ICAgICAgICAgICAgdmFyIHRlbXBTdGF0ZSA9IHt9OworICAgICAgICAgICAgZm9yICh2YXIga2V5
IGluIGdfY3VycmVudFN0YXRlKQorICAgICAgICAgICAgICAgIHRlbXBTdGF0ZVtrZXldID0gZ19j
dXJyZW50U3RhdGVba2V5XTsKKyAgICAgICAgICAgIGZpbGxNaXNzaW5nVmFsdWVzKHRlbXBTdGF0
ZSwgZ19kZWZhdWx0Q3Jvc3NEYXNoYm9hcmRTdGF0ZVZhbHVlcyk7CisgICAgICAgICAgICBmaWxs
TWlzc2luZ1ZhbHVlcyh0ZW1wU3RhdGUsIGdfZGVmYXVsdFN0YXRlVmFsdWVzKTsKKyAgICAgICAg
ICAgIGluaXRCdWlsZGVycyh0ZW1wU3RhdGUpOworICAgICAgICB9CisgICAgICAgIHBhcnNlUGFy
YW0oJ2J1aWxkZXInKTsKKyAgICB9CisKKyAgICBpZiAoaW52YWxpZEtleXMubGVuZ3RoKQorICAg
ICAgICBjb25zb2xlLmxvZygiSW52YWxpZCBxdWVyeSBwYXJhbWV0ZXJzOiAiICsgaW52YWxpZEtl
eXMuam9pbignLCcpKTsKKworICAgIHZhciBkaWZmU3RhdGUgPSBkaWZmU3RhdGVzKCk7CisKKyAg
ICBmaWxsTWlzc2luZ1ZhbHVlcyhnX2N1cnJlbnRTdGF0ZSwgZ19kZWZhdWx0Q3Jvc3NEYXNoYm9h
cmRTdGF0ZVZhbHVlcyk7CisgICAgZmlsbE1pc3NpbmdWYWx1ZXMoZ19jdXJyZW50U3RhdGUsIGdf
ZGVmYXVsdFN0YXRlVmFsdWVzKTsKKworICAgIC8vIFNvbWUgcGFyYW1ldGVycyByZXF1aXJlIGxv
YWRpbmcgZGlmZmVyZW50IEpTT04gZmlsZXMgd2hlbiB0aGUgdmFsdWUgY2hhbmdlcy4gRG8gYSBy
ZWxvYWQuCisgICAgaWYgKGdfb2xkU3RhdGUpIHsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIGdf
Y3VycmVudFN0YXRlKSB7CisgICAgICAgICAgICBpZiAoZ19vbGRTdGF0ZVtrZXldICE9IGdfY3Vy
cmVudFN0YXRlW2tleV0gJiYgUkVMT0FEX1JFUVVJUklOR19QQVJBTUVURVJTLmluZGV4T2Yoa2V5
KSAhPSAtMSkKKyAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZGlmZlN0YXRlOworfQorCisvLyBGaW5kIHRoZSBk
aWZmZXJlbmNlIG9mIGdfY3VycmVudFN0YXRlIHdpdGggZ19vbGRTdGF0ZS4KKy8vIEByZXR1cm4g
e09iamVjdH0ga2V5OnZhbHVlcyBvZiB0aGUgbmV3IG9yIGNoYW5nZWQgcGFyYW1zLgorZnVuY3Rp
b24gZGlmZlN0YXRlcygpCit7CisgICAgLy8gSWYgdGhlcmUgaXMgbm8gb2xkIHN0YXRlLCBldmVy
eXRoaW5nIGluIHRoZSBjdXJyZW50IHN0YXRlIGlzIG5ldy4KKyAgICBpZiAoIWdfb2xkU3RhdGUp
CisgICAgICAgIHJldHVybiBnX2N1cnJlbnRTdGF0ZTsKKworICAgIHZhciBjaGFuZ2VkUGFyYW1z
ID0ge307CisgICAgZm9yIChjdXJLZXkgaW4gZ19jdXJyZW50U3RhdGUpIHsKKyAgICAgICAgdmFy
IG9sZFZhbCA9IGdfb2xkU3RhdGVbY3VyS2V5XTsKKyAgICAgICAgdmFyIG5ld1ZhbCA9IGdfY3Vy
cmVudFN0YXRlW2N1cktleV07CisgICAgICAgIC8vIEFkZCBuZXcga2V5cyBvciBjaGFuZ2VkIHZh
bHVlcy4KKyAgICAgICAgaWYgKCFvbGRWYWwgfHwgb2xkVmFsICE9IG5ld1ZhbCkKKyAgICAgICAg
ICAgIGNoYW5nZWRQYXJhbXNbY3VyS2V5XSA9IG5ld1ZhbDsKKyAgICB9CisgICAgcmV0dXJuIGNo
YW5nZWRQYXJhbXM7Cit9CisKK2Z1bmN0aW9uIGRlZmF1bHRWYWx1ZShrZXkpCit7CisgICAgaWYg
KGtleSBpbiBnX2RlZmF1bHRTdGF0ZVZhbHVlcykKKyAgICAgICAgcmV0dXJuIGdfZGVmYXVsdFN0
YXRlVmFsdWVzW2tleV07CisgICAgcmV0dXJuIGdfZGVmYXVsdENyb3NzRGFzaGJvYXJkU3RhdGVW
YWx1ZXNba2V5XTsKK30KKworZnVuY3Rpb24gZmlsbE1pc3NpbmdWYWx1ZXModG8sIGZyb20pCit7
CisgICAgZm9yICh2YXIgc3RhdGUgaW4gZnJvbSkgeworICAgICAgICBpZiAoIShzdGF0ZSBpbiB0
bykpCisgICAgICAgICAgICB0b1tzdGF0ZV0gPSBmcm9tW3N0YXRlXTsKKyAgICB9Cit9CisKKy8v
IExvYWQgYSBzY3JpcHQuCisvLyBAcGFyYW0ge3N0cmluZ30gcGF0aCBQYXRoIHRvIHRoZSBzY3Jp
cHQgdG8gbG9hZC4KKy8vIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRfb25FcnJvciBPcHRpb25hbCBm
dW5jdGlvbiB0byBjYWxsIGlmIHRoZSBzY3JpcHQKKy8vICAgICAgICAgZG9lcyBub3QgbG9hZC4K
Ky8vIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRfb25Mb2FkIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNh
bGwgd2hlbiB0aGUgc2NyaXB0CisvLyAgICAgICAgIGlzIGxvYWRlZC4gICAgQ2FsbGVkIHdpdGgg
dGhlIHNjcmlwdCBlbGVtZW50IGFzIGl0cyAxc3QgYXJndW1lbnQuCitmdW5jdGlvbiBhcHBlbmRT
Y3JpcHQocGF0aCwgb3B0X29uRXJyb3IsIG9wdF9vbkxvYWQpCit7CisgICAgdmFyIHNjcmlwdCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworICAgIHNjcmlwdC5zcmMgPSBwYXRo
OworICAgIGlmIChvcHRfb25Mb2FkKSB7CisgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFu
Z2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gJ2Nv
bXBsZXRlJykKKyAgICAgICAgICAgICAgICBvcHRfb25Mb2FkKHNjcmlwdCk7CisgICAgICAgIH07
CisgICAgICAgIHNjcmlwdC5vbmxvYWQgPSBmdW5jdGlvbigpIHsgb3B0X29uTG9hZChzY3JpcHQp
OyB9OworICAgIH0KKyAgICBpZiAob3B0X29uRXJyb3IpCisgICAgICAgIHNjcmlwdC5vbmVycm9y
ID0gb3B0X29uRXJyb3I7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQn
KVswXS5hcHBlbmRDaGlsZChzY3JpcHQpOworfQorCisvLyBQZXJtYWxpbmthYmxlIHN0YXRlIG9m
IHRoZSBwYWdlLgordmFyIGdfY3VycmVudFN0YXRlOworCisvLyBTYXZlZCB2YWx1ZSBvZiBwcmV2
aW91cyBnX2N1cnJlbnRTdGF0ZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVjdCBjaGFuZ2luZyBmcm9t
CisvLyBvbmUgc2V0IG9mIGJ1aWxkZXJzIHRvIGFub3RoZXIsIHdoaWNoIHJlcXVpcmVzIHJlbG9h
ZGluZyB0aGUgcGFnZS4KK3ZhciBnX29sZFN0YXRlOworCisvLyBQYXJzZSBjcm9zcy1kYXNoYm9h
cmQgcGFyYW1ldGVycyBiZWZvcmUgdXNpbmcgdGhlbS4KK3BhcnNlUGFyYW1ldGVycygpOworCitm
dW5jdGlvbiBpc0xheW91dFRlc3RSZXN1bHRzKCkKK3sKKyAgICByZXR1cm4gZ19jdXJyZW50U3Rh
dGUudGVzdFR5cGUgPT0gJ2xheW91dC10ZXN0cyc7Cit9CisKK2Z1bmN0aW9uIGN1cnJlbnRCdWls
ZGVyR3JvdXAob3B0X3N0YXRlKQoreworICAgIHZhciBzdGF0ZSA9IG9wdF9zdGF0ZSB8fCBnX2N1
cnJlbnRTdGF0ZTsKKyAgICBzd2l0Y2ggKHN0YXRlLnRlc3RUeXBlKSB7CisgICAgY2FzZSAnbGF5
b3V0LXRlc3RzJzoKKyAgICAgICAgcmV0dXJuIExBWU9VVF9URVNUU19CVUlMREVSX0dST1VQU1tz
dGF0ZS5ncm91cF0KKyAgICBjYXNlICdhdXJhX3VuaXR0ZXN0cyc6CisgICAgY2FzZSAnYXVyYV9z
aGVsbF91bml0dGVzdHMnOgorICAgIGNhc2UgJ2Jhc2VfdW5pdHRlc3RzJzoKKyAgICBjYXNlICdi
cm93c2VyX3Rlc3RzJzoKKyAgICBjYXNlICdjYWNoZWludmFsaWRhdGlvbl91bml0dGVzdHMnOgor
ICAgIGNhc2UgJ2NvbXBvc2l0b3JfdW5pdHRlc3RzJzoKKyAgICBjYXNlICdjb250ZW50X3VuaXR0
ZXN0cyc6CisgICAgY2FzZSAnY291cmdldHRlX3VuaXR0ZXN0cyc6CisgICAgY2FzZSAnY3J5cHRv
X3VuaXR0ZXN0cyc6CisgICAgY2FzZSAnZ29vZ2xldXJsX3VuaXR0ZXN0cyc6CisgICAgY2FzZSAn
Z2Z4X3VuaXR0ZXN0cyc6CisgICAgY2FzZSAnZ3B1X3VuaXR0ZXN0cyc6CisgICAgY2FzZSAnaW5z
dGFsbGVyX3V0aWxfdW5pdHRlc3RzJzoKKyAgICBjYXNlICdpbnRlcmFjdGl2ZV91aV90ZXN0cyc6
CisgICAgY2FzZSAnaXBjX3Rlc3RzJzoKKyAgICBjYXNlICdqaW5nbGVfdW5pdHRlc3RzJzoKKyAg
ICBjYXNlICdtZWRpYV91bml0dGVzdHMnOgorICAgIGNhc2UgJ21pbmlfaW5zdGFsbGVyX3Rlc3Qn
OgorICAgIGNhc2UgJ25hY2xfdWlfdGVzdHMnOgorICAgIGNhc2UgJ25ldF91bml0dGVzdHMnOgor
ICAgIGNhc2UgJ3ByaW50aW5nX3VuaXR0ZXN0cyc6CisgICAgY2FzZSAncmVtb3RpbmdfdW5pdHRl
c3RzJzoKKyAgICBjYXNlICdzYWZlX2Jyb3dzaW5nX3Rlc3RzJzoKKyAgICBjYXNlICdzcWxfdW5p
dHRlc3RzJzoKKyAgICBjYXNlICdzeW5jX3VuaXRfdGVzdHMnOgorICAgIGNhc2UgJ3N5bmNfaW50
ZWdyYXRpb25fdGVzdHMnOgorICAgIGNhc2UgJ3Rlc3Rfc2hlbGxfdGVzdHMnOgorICAgIGNhc2Ug
J3VpX3Rlc3RzJzoKKyAgICBjYXNlICd1bml0X3Rlc3RzJzoKKyAgICBjYXNlICd2aWV3c191bml0
dGVzdHMnOgorICAgICAgICByZXR1cm4gR19URVNUU19CVUlMREVSX0dST1VQOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGNvbnNvbGUubG9nKCdpbnZhbGlkIHRlc3RUeXBlIHBhcmFtZXRlcjogJyAr
IHN0YXRlLnRlc3RUeXBlKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGJ1aWxkZXJNYXN0ZXIoYnVp
bGRlck5hbWUpCit7CisgICAgcmV0dXJuIEJVSUxERVJfVE9fTUFTVEVSW2J1aWxkZXJOYW1lXTsK
K30KKworZnVuY3Rpb24gaXNUaXBPZlRyZWVXZWJLaXRCdWlsZGVyKCkKK3sKKyAgICByZXR1cm4g
Y3VycmVudEJ1aWxkZXJHcm91cCgpLmlzVG9UV2ViS2l0OworfQorCit2YXIgZ19kZWZhdWx0QnVp
bGRlck5hbWUsIGdfYnVpbGRlcnMsIGdfZXhwZWN0YXRpb25zQnVpbGRlcjsKK2Z1bmN0aW9uIGlu
aXRCdWlsZGVycyhzdGF0ZSkKK3sKKyAgICBpZiAoc3RhdGUuYnVpbGREaXIpIHsKKyAgICAgICAg
Ly8gSWYgYnVpbGREaXIgaXMgc2V0LCBwb2ludCB0byB0aGUgcmVzdWx0cy5qc29uIGluIHRoZSBs
b2NhbCB0cmVlLiBVc2VmdWwgZm9yIGRlYnVnZ2luZyBjaGFuZ2VzIHRvIHRoZSBweXRob24gSlNP
TiBnZW5lcmF0b3IuCisgICAgICAgIGdfZGVmYXVsdEJ1aWxkZXJOYW1lID0gJ0RVTU1ZX0JVSUxE
RVJfTkFNRSc7CisgICAgICAgIGdfYnVpbGRlcnMgPSB7J0RVTU1ZX0JVSUxERVJfTkFNRSc6ICcn
fTsKKyAgICAgICAgdmFyIGxvYyA9IGRvY3VtZW50LmxvY2F0aW9uLnRvU3RyaW5nKCk7CisgICAg
ICAgIHZhciBvZmZzZXQgPSBsb2MuaW5kZXhPZignd2Via2l0LycpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIEZJWE1FOiByZW1vdmUgc3VwcG9ydCBmb3IgbWFwcGluZyBmcm9tIHRoZSBtYXN0
ZXIgcGFyYW1ldGVyIHRvIHRoZSBncm91cAorICAgICAgICAvLyBvbmUgb25jZSB0aGUgd2F0ZXJm
YWxsIHN0YXJ0cyB0byBwYXNzIGluIHRoZSBidWlsZGVyIG5hbWUgaW5zdGVhZC4KKyAgICAgICAg
aWYgKHN0YXRlLm1hc3RlcikgeworICAgICAgICAgICAgc3RhdGUuZ3JvdXAgPSBMRUdBQ1lfQlVJ
TERFUl9NQVNURVJTX1RPX0dST1VQU1tzdGF0ZS5tYXN0ZXJdOworICAgICAgICAgICAgd2luZG93
LmxvY2F0aW9uLmhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5yZXBsYWNlKCdtYXN0ZXI9JyAr
IHN0YXRlLm1hc3RlciwgJ2dyb3VwPScgKyBzdGF0ZS5ncm91cCk7CisgICAgICAgICAgICBkZWxl
dGUgc3RhdGUubWFzdGVyOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRCdWlsZGVyR3JvdXAo
c3RhdGUpLnNldHVwKCk7CisgICAgfQorfQoraW5pdEJ1aWxkZXJzKGdfY3VycmVudFN0YXRlKTsK
KworLy8gQXBwZW5kIEpTT04gc2NyaXB0IGVsZW1lbnRzLgordmFyIGdfcmVzdWx0c0J5QnVpbGRl
ciA9IHt9OwordmFyIGdfZXhwZWN0YXRpb25zOworZnVuY3Rpb24gQUREX1JFU1VMVFMoYnVpbGRz
KQoreworICAgIHZhciBqc29uX3ZlcnNpb24gPSBidWlsZHNbJ3ZlcnNpb24nXTsKKyAgICBmb3Ig
KHZhciBidWlsZGVyTmFtZSBpbiBidWlsZHMpIHsKKyAgICAgICAgaWYgKGJ1aWxkZXJOYW1lID09
ICd2ZXJzaW9uJykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIElmIGEgdGVz
dCBzdWl0ZSBzdG9wcyBiZWluZyBydW4gb24gYSBnaXZlbiBidWlsZGVyLCB3ZSBkb24ndCB3YW50
IHRvIHNob3cgaXQuCisgICAgICAgIC8vIEFzc3VtZSBhbnkgYnVpbGRlciB3aXRob3V0IGEgcnVu
IGluIHR3byB3ZWVrcyBmb3IgYSBnaXZlbiB0ZXN0IHN1aXRlIGlzbid0CisgICAgICAgIC8vIHJ1
bm5pbmcgdGhhdCBzdWl0ZSBhbnltb3JlLgorICAgICAgICAvLyBGSVhNRTogR3JhYiB3aGljaCBi
b3RzIHJ1biB3aGljaCB0ZXN0cyBkaXJlY3RseSBmcm9tIHRoZSBidWlsZGJvdCBKU09OIGluc3Rl
YWQuCisgICAgICAgIHZhciBsYXN0UnVuU2Vjb25kcyA9IGJ1aWxkc1tidWlsZGVyTmFtZV0uc2Vj
b25kc1NpbmNlRXBvY2hbMF07CisgICAgICAgIGlmICgoRGF0ZS5ub3coKSAvIDEwMDApIC0gbGFz
dFJ1blNlY29uZHMgPiBUV09fV0VFS1NfU0VDT05EUykKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGlmIChqc29uX3ZlcnNpb24gPj0gNCkKKyAgICAgICAgICAgIGJ1aWxkc1tidWls
ZGVyTmFtZV1bVEVTVFNfS0VZXSA9IGZsYXR0ZW5UcmllKGJ1aWxkc1tidWlsZGVyTmFtZV1bVEVT
VFNfS0VZXSk7CisgICAgICAgIGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyTmFtZV0gPSBidWls
ZHNbYnVpbGRlck5hbWVdOworICAgIH0KKworICAgIGhhbmRsZVJlc291cmNlTG9hZCgpOworfQor
CisvLyBUT0RPKGFib3hoYWxsKTogZmlndXJlIG91dCB3aGV0aGVyIHRoaXMgaXMgYSBwZXJmb3Jt
YW5jZSBib3R0bGVuZWNrIGFuZAorLy8gY2hhbmdlIGNhbGxpbmcgY29kZSB0byB1bmRlcnN0YW5k
IHRoZSB0cmllIHN0cnVjdHVyZSBpbnN0ZWFkIGlmIG5lY2Vzc2FyeS4KK2Z1bmN0aW9uIGZsYXR0
ZW5UcmllKHRyaWUsIHByZWZpeCkKK3sKKyAgICB2YXIgcmVzdWx0ID0ge307CisgICAgZm9yICh2
YXIgbmFtZSBpbiB0cmllKSB7CisgICAgICAgIHZhciBmdWxsTmFtZSA9IHByZWZpeCA/IHByZWZp
eCArICIvIiArIG5hbWUgOiBuYW1lOworICAgICAgICB2YXIgZGF0YSA9IHRyaWVbbmFtZV07Cisg
ICAgICAgIGlmICgicmVzdWx0cyIgaW4gZGF0YSkKKyAgICAgICAgICAgIHJlc3VsdFtmdWxsTmFt
ZV0gPSBkYXRhOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBwYXJ0aWFsUmVzdWx0
ID0gZmxhdHRlblRyaWUoZGF0YSwgZnVsbE5hbWUpOworICAgICAgICAgICAgZm9yICh2YXIga2V5
IGluIHBhcnRpYWxSZXN1bHQpIHsKKyAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHBhcnRp
YWxSZXN1bHRba2V5XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitmdW5jdGlvbiBwYXRoVG9CdWlsZGVyUmVzdWx0c0ZpbGUoYnVpbGRl
ck5hbWUpCit7CisgICAgcmV0dXJuIFRFU1RfUkVTVUxUU19TRVJWRVIgKyAndGVzdGZpbGU/YnVp
bGRlcj0nICsgYnVpbGRlck5hbWUgKworICAgICAgICAgICAgJyZtYXN0ZXI9JyArIGJ1aWxkZXJN
YXN0ZXIoYnVpbGRlck5hbWUpLm5hbWUgKworICAgICAgICAgICAgJyZ0ZXN0dHlwZT0nICsgZ19j
dXJyZW50U3RhdGUudGVzdFR5cGUgKyAnJm5hbWU9JzsKK30KKworLy8gRklYTUU6IE1ha2UgdGhl
IGRhc2hib2FyZCB1bmRlcnN0YW5kIGRpZmZlcmVudCBwb3J0cycgZXhwZWN0YXRpb25zIGZpbGVz
LgordmFyIENIUk9NSVVNX0VYUEVDVEFUSU9OU19VUkwgPSAnaHR0cDovL3N2bi53ZWJraXQub3Jn
L3JlcG9zaXRvcnkvd2Via2l0L3RydW5rL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rl
c3RfZXhwZWN0YXRpb25zLnR4dCc7CisKK2Z1bmN0aW9uIHJlcXVlc3RFeHBlY3RhdGlvbnNGaWxl
KCkKK3sKKyAgICByZXF1ZXN0KENIUk9NSVVNX0VYUEVDVEFUSU9OU19VUkwsIGZ1bmN0aW9uKHho
cikgeworICAgICAgICBnX3dhaXRpbmdPbkV4cGVjdGF0aW9ucyA9IGZhbHNlOworICAgICAgICBn
X2V4cGVjdGF0aW9ucyA9IHhoci5yZXNwb25zZVRleHQ7CisgICAgICAgIGhhbmRsZVJlc291cmNl
TG9hZCgpOworICAgIH0sCisgICAgZnVuY3Rpb24oKSB7CisgICAgICAgIGNvbnNvbGUuZXJyb3Io
J0NvdWxkIG5vdCBsb2FkIGV4cGVjdGF0aW9ucyBmaWxlIGZyb20gJyArIENIUk9NSVVNX0VYUEVD
VEFUSU9OU19VUkwpOworICAgIH0pOworfQorCit2YXIgZ193YWl0aW5nT25FeHBlY3RhdGlvbnMg
PSBpc0xheW91dFRlc3RSZXN1bHRzKCkgJiYgIWlzVHJlZU1hcCgpOworCitmdW5jdGlvbiBpc1Ry
ZWVNYXAoKQoreworICAgIHJldHVybiBlbmRzV2l0aCh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUs
ICd0cmVlbWFwLmh0bWwnKTsKK30KKworZnVuY3Rpb24gYXBwZW5kSlNPTlNjcmlwdEVsZW1lbnRG
b3IoYnVpbGRlck5hbWUpCit7CisgICAgdmFyIHJlc3VsdHNGaWxlbmFtZTsKKyAgICBpZiAoaXNU
cmVlTWFwKCkpCisgICAgICAgIHJlc3VsdHNGaWxlbmFtZSA9ICd0aW1lc19tcy5qc29uJzsKKyAg
ICBlbHNlIGlmIChnX2N1cnJlbnRTdGF0ZS5zaG93QWxsUnVucykKKyAgICAgICAgcmVzdWx0c0Zp
bGVuYW1lID0gJ3Jlc3VsdHMuanNvbic7CisgICAgZWxzZQorICAgICAgICByZXN1bHRzRmlsZW5h
bWUgPSAncmVzdWx0cy1zbWFsbC5qc29uJzsKKworICAgIGFwcGVuZFNjcmlwdChwYXRoVG9CdWls
ZGVyUmVzdWx0c0ZpbGUoYnVpbGRlck5hbWUpICsgcmVzdWx0c0ZpbGVuYW1lICsgJyZjYWxsYmFj
az1BRERfUkVTVUxUUycsCisgICAgICAgICAgICBwYXJ0aWFsKGhhbmRsZVJlc291cmNlTG9hZEVy
cm9yLCBidWlsZGVyTmFtZSksCisgICAgICAgICAgICBwYXJ0aWFsKGhhbmRsZVNjcmlwdExvYWRl
ZCwgYnVpbGRlck5hbWUpKTsKK30KKworZnVuY3Rpb24gYXBwZW5kSlNPTlNjcmlwdEVsZW1lbnRz
KCkKK3sKKyAgICBjbGVhckVycm9ycygpOworCisgICAgaWYgKGlzVHJlZU1hcCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBwYXJzZVBhcmFtZXRlcnMoKTsKKworICAgIGlmIChnX2N1cnJlbnRT
dGF0ZS51c2VUZXN0RGF0YSkgeworICAgICAgICBhcHBlbmRTY3JpcHQoJ2ZsYWtpbmVzc19kYXNo
Ym9hcmRfdGVzdHMuanMnKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAodmFy
IGJ1aWxkZXJOYW1lIGluIGdfYnVpbGRlcnMpCisgICAgICAgIGFwcGVuZEpTT05TY3JpcHRFbGVt
ZW50Rm9yKGJ1aWxkZXJOYW1lKTsKKworICAgIGlmIChnX3dhaXRpbmdPbkV4cGVjdGF0aW9ucykK
KyAgICAgICAgcmVxdWVzdEV4cGVjdGF0aW9uc0ZpbGUoKTsKK30KKwordmFyIGdfaGFzRG9uZUlu
aXRpYWxQYWdlR2VuZXJhdGlvbiA9IGZhbHNlOworLy8gU3RyaW5nIG9mIGVycm9yIG1lc3NhZ2Vz
IHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIuCit2YXIgZ19lcnJvck1lc3NhZ2VzID0gJyc7CisKK2Z1
bmN0aW9uIGhhbmRsZVJlc291cmNlTG9hZCgpCit7CisgICAgLy8gSW4gY2FzZSB3ZSBsb2FkIGEg
cmVzdWx0cy5qc29uIHRoYXQncyBub3QgaW4gdGhlIGxpc3Qgb2YgYnVpbGRlcnMsCisgICAgLy8g
bWFrZSBzdXJlIHRvIG9ubHkgY2FsbCBoYW5kbGVMb2NhdGlvbkNoYW5nZSBvbmNlIGZyb20gdGhl
IHJlc291cmNlIGxvYWRzLgorICAgIGlmICghZ19oYXNEb25lSW5pdGlhbFBhZ2VHZW5lcmF0aW9u
KQorICAgICAgICBoYW5kbGVMb2NhdGlvbkNoYW5nZSgpOworfQorCitmdW5jdGlvbiBoYW5kbGVT
Y3JpcHRMb2FkZWQoYnVpbGRlck5hbWUsIHNjcmlwdCkKK3sKKyAgICAvLyBXZSBuZWVkIHRoaXMg
d29yay1hcm91bmQgZm9yIHdlYmtpdC5vcmcvYi81MDU4OS4KKyAgICBpZiAoIWdfcmVzdWx0c0J5
QnVpbGRlcltidWlsZGVyTmFtZV0pIHsKKyAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCJC
dWlsZGVyIGRhdGEgd2FzIGVtcHR5Iik7CisgICAgICAgIGVycm9yLnRhcmdldCA9IHNjcmlwdDsK
KyAgICAgICAgaGFuZGxlUmVzb3VyY2VMb2FkRXJyb3IoYnVpbGRlck5hbWUsIGVycm9yKTsKKyAg
ICB9Cit9CisKKy8vIEhhbmRsZSByZXNvdXJjZSBsb2FkaW5nIGVycm9ycyAtIDQwNHMsIDUwMHMs
IGV0Yy4gICAgUmVjb3ZlciBmcm9tIHRoZSBlcnJvciB0bworLy8gc3RpbGwgc2hvdyBhcyBtdWNo
IGRhdGEgYXMgcG9zc2libGUsIGJ1dCBzaG93IHNvbWUgVUkgYWJvdXQgdGhlIGZhaWx1cmUsIGFu
ZAorLy8gZG8gbm90IHRyeSB1c2luZyB0aGlzIHJlc291cmNlIGFnYWluIHVudGlsIHVzZXIgcmVm
cmVzaGVzLgorLy8KKy8vIEBwYXJhbSB7c3RyaW5nfSBidWlsZGVyTmFtZSBOYW1lIG9mIGJ1aWxk
ZXIgdGhhdCB0aGUgcmVzb3VyY2UgZmFpbGVkIGZvci4KKy8vIEBwYXJhbSB7RXZlbnR9IGUgVGhl
IGVycm9yIGV2ZW50LgorZnVuY3Rpb24gaGFuZGxlUmVzb3VyY2VMb2FkRXJyb3IoYnVpbGRlck5h
bWUsIGUpCit7CisgICAgdmFyIGVycm9yID0gZS50YXJnZXQuc3JjICsgJyBmYWlsZWQgdG8gbG9h
ZCBmb3IgJyArIGJ1aWxkZXJOYW1lICsgJy4nOworCisgICAgaWYgKGlzTGF5b3V0VGVzdFJlc3Vs
dHMoKSkgeworICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKKyAgICAgICAgYWRkRXJyb3Io
ZXJyb3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEF2b2lkIHRvIHNob3cgZXJyb3Ivd2Fy
bmluZyBtZXNzYWdlcyBmb3Igbm9uLWxheW91dCB0ZXN0cy4gV2UgbWF5IGJlCisgICAgICAgIC8v
IGNoZWNraW5nIHRoZSBidWlsZGVycyB0aGF0IGFyZSBub3QgcnVubmluZyB0aGUgdGVzdHMuCisg
ICAgICAgIGNvbnNvbGUuaW5mbygnaW5mbzonICsgZXJyb3IpOworICAgIH0KKworICAgIC8vIFJl
bW92ZSB0aGlzIGJ1aWxkZXIgZnJvbSBidWlsZGVycywgc28gd2UgZG9uJ3QgdHJ5IHRvIHVzZSB0
aGUKKyAgICAvLyBkYXRhIHRoYXQgaXNuJ3QgdGhlcmUuCisgICAgZGVsZXRlIGdfYnVpbGRlcnNb
YnVpbGRlck5hbWVdOworCisgICAgLy8gQ2hhbmdlIHRoZSBkZWZhdWx0IGJ1aWxkZXIgbmFtZSBp
ZiBpdCBoYXMgYmVlbiBkZWxldGVkLgorICAgIGlmIChnX2RlZmF1bHRCdWlsZGVyTmFtZSA9PSBi
dWlsZGVyTmFtZSkgeworICAgICAgICBnX2RlZmF1bHRCdWlsZGVyTmFtZSA9IG51bGw7CisgICAg
ICAgIGZvciAodmFyIGF2YWlsYWJsZUJ1aWxkZXJOYW1lIGluIGdfYnVpbGRlcnMpIHsKKyAgICAg
ICAgICAgIGdfZGVmYXVsdEJ1aWxkZXJOYW1lID0gYXZhaWxhYmxlQnVpbGRlck5hbWU7CisgICAg
ICAgICAgICBnX2RlZmF1bHRTdGF0ZVZhbHVlcy5idWlsZGVyID0gYXZhaWxhYmxlQnVpbGRlck5h
bWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWdfZGVmYXVs
dEJ1aWxkZXJOYW1lKSB7CisgICAgICAgICAgICB2YXIgZXJyb3IgPSAnTm8gdGVzdHMgcmVzdWx0
cyBmb3VuZCBmb3IgJyArIGdfY3VycmVudFN0YXRlLnRlc3RUeXBlICsgJy4gUmVsb2FkIHRoZSBw
YWdlIHRvIHRyeSBmZXRjaGluZyBpdCBhZ2Fpbi4nOworICAgICAgICAgICAgY29uc29sZS5lcnJv
cihlcnJvcik7CisgICAgICAgICAgICBhZGRFcnJvcihlcnJvcik7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBQcm9jZWVkIGFzIGlmIHRoZSByZXNvdXJjZSBoYWQgbG9hZGVkLgorICAgIGhh
bmRsZVJlc291cmNlTG9hZCgpOworfQorCisKKy8vIFJlY29yZCBhIG5ldyBlcnJvciBtZXNzYWdl
LgorLy8gQHBhcmFtIHtzdHJpbmd9IGVycm9yTXNnIFRoZSBtZXNzYWdlIHRvIHNob3cgdG8gdGhl
IHVzZXIuCitmdW5jdGlvbiBhZGRFcnJvcihlcnJvck1zZykKK3sKKyAgICBnX2Vycm9yTWVzc2Fn
ZXMgKz0gZXJyb3JNc2cgKyAnPGJyIC8+JzsKK30KKworLy8gQ2xlYXIgb3V0IGVycm9yIGFuZCB3
YXJuaW5nIG1lc3NhZ2VzLgorZnVuY3Rpb24gY2xlYXJFcnJvcnMoKQoreworICAgIGdfZXJyb3JN
ZXNzYWdlcyA9ICcnOworfQorCisvLyBJZiB0aGVyZSBhcmUgZXJyb3JzLCBzaG93IGJpZyBhbmQg
cmVkIFVJIGZvciBlcnJvcnMgc28gYXMgdG8gYmUgbm90aWNlZC4KK2Z1bmN0aW9uIHNob3dFcnJv
cnMoKQoreworICAgIHZhciBlcnJvcnMgPSAkKCdlcnJvcnMnKTsKKworICAgIGlmICghZ19lcnJv
ck1lc3NhZ2VzKSB7CisgICAgICAgIGlmIChlcnJvcnMpCisgICAgICAgICAgICBlcnJvcnMucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZChlcnJvcnMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCFlcnJvcnMpIHsKKyAgICAgICAgZXJyb3JzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnSDInKTsKKyAgICAgICAgZXJyb3JzLnN0eWxlLmNvbG9yID0gJ3JlZCc7CisgICAgICAgIGVy
cm9ycy5pZCA9ICdlcnJvcnMnOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVy
cm9ycyk7CisgICAgfQorCisgICAgZXJyb3JzLmlubmVySFRNTCA9IGdfZXJyb3JNZXNzYWdlczsK
K30KKworLy8gQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUganNvbiBmaWxlcyBoYXZlIGFs
bCBjb21wbGV0ZWQgbG9hZGluZy4KK2Z1bmN0aW9uIGhhdmVKc29uRmlsZXNMb2FkZWQoKQorewor
ICAgIGlmIChnX3dhaXRpbmdPbkV4cGVjdGF0aW9ucykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKGlzVHJlZU1hcCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGZvciAo
dmFyIGJ1aWxkZXIgaW4gZ19idWlsZGVycykgeworICAgICAgICBpZiAoIWdfcmVzdWx0c0J5QnVp
bGRlcltidWlsZGVyXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIGhhbmRsZUxvY2F0aW9uQ2hhbmdlKCkKK3sKKyAgICBp
ZighaGF2ZUpzb25GaWxlc0xvYWRlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBnX2hhc0Rv
bmVJbml0aWFsUGFnZUdlbmVyYXRpb24gPSB0cnVlOworCisgICAgdmFyIHBhcmFtcyA9IHBhcnNl
UGFyYW1ldGVycygpOworICAgIHZhciBzaG91bGRHZW5lcmF0ZVBhZ2UgPSB0cnVlOworICAgIGlm
IChPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCkKKyAgICAgICAgc2hvdWxkR2VuZXJhdGVQYWdl
ID0gaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2UocGFyYW1zKTsKKworICAgIHZhciBuZXdIYXNo
ID0gcGVybWFMaW5rVVJMSGFzaCgpOworICAgIHZhciB3aW5IYXNoID0gd2luZG93LmxvY2F0aW9u
Lmhhc2ggfHwgIiMiOworICAgIC8vIE1ha2Ugc3VyZSB0aGUgbG9jYXRpb24gaXMgdGhlIHNhbWUg
YXMgdGhlIHN0YXRlIHdlIGFyZSB1c2luZyBpbnRlcm5hbGx5LgorICAgIC8vIFRoZXNlIGdldCBv
dXQgb2Ygc3luYyBpZiBwcm9jZXNzUXVlcnlQYXJhbUNoYW5nZSBjaGFuZ2VkIHN0YXRlLgorICAg
IGlmIChuZXdIYXNoICE9IHdpbkhhc2gpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGNhdXNlIGFu
b3RoZXIgaGFzaGNoYW5nZSwgYW5kIHdoZW4gd2UgbG9vcAorICAgICAgICAvLyBiYWNrIHRocm91
Z2ggaGVyZSBuZXh0IHRpbWUsIHdlJ2xsIGdvIHRocm91Z2ggZ2VuZXJhdGVQYWdlLgorICAgICAg
ICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IG5ld0hhc2g7CisgICAgfSBlbHNlIGlmIChzaG91bGRH
ZW5lcmF0ZVBhZ2UpCisgICAgICAgIGdlbmVyYXRlUGFnZSgpOworfQorCit3aW5kb3cub25oYXNo
Y2hhbmdlID0gaGFuZGxlTG9jYXRpb25DaGFuZ2U7CisKKy8vIFNldHMgdGhlIHBhZ2Ugc3RhdGUu
IFRha2VzIHZhcmFyZ3Mgb2Yga2V5LCB2YWx1ZSBwYWlycy4KK2Z1bmN0aW9uIHNldFF1ZXJ5UGFy
YW1ldGVyKHZhcl9hcmdzKQoreworICAgIHZhciBzdGF0ZSA9IE9iamVjdC5jcmVhdGUoZ19jdXJy
ZW50U3RhdGUpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSAr
PSAyKSB7CisgICAgICAgIHZhciBrZXkgPSBhcmd1bWVudHNbaV07CisgICAgICAgIHN0YXRlW2tl
eV0gPSBhcmd1bWVudHNbaSArIDFdOworICAgIH0KKyAgICAvLyBOb3RlOiBXZSB1c2Ugd2luZG93
LmxvY2F0aW9uLmhhc2ggcmF0aGVyIHRoYXQgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UKKyAgICAv
LyBiZWNhdXNlIG9mIGJ1Z3MgaW4gQ2hyb21lIHdoZXJlIGV4dHJhIGVudHJpZXMgd2VyZSBnZXR0
aW5nIGNyZWF0ZWQKKyAgICAvLyB3aGVuIGJhY2sgYnV0dG9uIHdhcyBwcmVzc2VkIGFuZCBmdWxs
IHBhZ2UgbmF2aWdhdGlvbiB3YXMgb2NjdXJpbmcuCisgICAgLy8gRklYTUU6IGZpbGUgdGhvc2Ug
YnVncy4KKyAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IHBlcm1hTGlua1VSTEhhc2goc3RhdGUp
OworfQorCitmdW5jdGlvbiBwZXJtYUxpbmtVUkxIYXNoKG9wdF9zdGF0ZSkKK3sKKyAgICB2YXIg
c3RhdGUgPSBvcHRfc3RhdGUgfHwgZ19jdXJyZW50U3RhdGU7CisgICAgcmV0dXJuICcjJyArIGpv
aW5QYXJhbWV0ZXJzKHN0YXRlKTsKK30KKworZnVuY3Rpb24gam9pblBhcmFtZXRlcnMoc3RhdGVP
YmplY3QpCit7CisgICAgdmFyIHN0YXRlID0gW107CisgICAgZm9yICh2YXIga2V5IGluIHN0YXRl
T2JqZWN0KSB7CisgICAgICAgIHZhciB2YWx1ZSA9IHN0YXRlT2JqZWN0W2tleV07CisgICAgICAg
IGlmICh2YWx1ZSAhPSBkZWZhdWx0VmFsdWUoa2V5KSkKKyAgICAgICAgICAgIHN0YXRlLnB1c2go
a2V5ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7CisgICAgfQorICAgIHJldHVy
biBzdGF0ZS5qb2luKCcmJyk7Cit9CisKK2Z1bmN0aW9uIGxvZ1RpbWUobXNnLCBzdGFydFRpbWUp
Cit7CisgICAgY29uc29sZS5sb2cobXNnICsgJzogJyArIChEYXRlLm5vdygpIC0gc3RhcnRUaW1l
KSk7Cit9CisKK2Z1bmN0aW9uIGhpZGVQb3B1cCgpCit7CisgICAgdmFyIHBvcHVwID0gJCgncG9w
dXAnKTsKKyAgICBpZiAocG9wdXApCisgICAgICAgIHBvcHVwLnBhcmVudE5vZGUucmVtb3ZlQ2hp
bGQocG9wdXApOworfQorCitmdW5jdGlvbiBzaG93UG9wdXAoZSwgaHRtbCkKK3sKKyAgICB2YXIg
cG9wdXAgPSAkKCdwb3B1cCcpOworICAgIGlmICghcG9wdXApIHsKKyAgICAgICAgcG9wdXAgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgcG9wdXAuaWQgPSAncG9wdXAn
OworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBvcHVwKTsKKyAgICB9CisKKyAg
ICAvLyBTZXQgaHRtbCBmaXJzdCBzbyB0aGF0IHdlIGNhbiBnZXQgYWNjdXJhdGUgc2l6ZSBtZXRy
aWNzIG9uIHRoZSBwb3B1cC4KKyAgICBwb3B1cC5pbm5lckhUTUwgPSBodG1sOworCisgICAgdmFy
IHRhcmdldFJlY3QgPSBlLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKworICAgIHZh
ciB4ID0gTWF0aC5taW4odGFyZ2V0UmVjdC5sZWZ0IC0gMTAsIGRvY3VtZW50LmRvY3VtZW50RWxl
bWVudC5jbGllbnRXaWR0aCAtIHBvcHVwLm9mZnNldFdpZHRoKTsKKyAgICB4ID0gTWF0aC5tYXgo
MCwgeCk7CisgICAgcG9wdXAuc3R5bGUubGVmdCA9IHggKyBkb2N1bWVudC5ib2R5LnNjcm9sbExl
ZnQgKyAncHgnOworCisgICAgdmFyIHkgPSB0YXJnZXRSZWN0LnRvcCArIHRhcmdldFJlY3QuaGVp
Z2h0OworICAgIGlmICh5ICsgcG9wdXAub2Zmc2V0SGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRF
bGVtZW50LmNsaWVudEhlaWdodCkKKyAgICAgICAgeSA9IHRhcmdldFJlY3QudG9wIC0gcG9wdXAu
b2Zmc2V0SGVpZ2h0OworICAgIHkgPSBNYXRoLm1heCgwLCB5KTsKKyAgICBwb3B1cC5zdHlsZS50
b3AgPSB5ICsgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgKyAncHgnOworfQorCisvLyBDcmVhdGUg
YSBuZXcgZnVuY3Rpb24gd2l0aCBzb21lIG9mIGl0cyBhcmd1ZW1lbnRzCisvLyBwcmUtZmlsbGVk
LgorLy8gVGFrZW4gZnJvbSBnb29nLnBhcnRpYWwgaW4gdGhlIENsb3N1cmUgbGlicmFyeS4KKy8v
IEBwYXJhbSB7RnVuY3Rpb259IGZuIEEgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5LgorLy8g
QHBhcmFtIHsuLi4qfSB2YXJfYXJncyBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IGFyZSBwYXJ0
aWFsbHkKKy8vICAgICAgICAgYXBwbGllZCB0byBmbi4KKy8vIEByZXR1cm4geyFGdW5jdGlvbn0g
QSBwYXJ0aWFsbHktYXBwbGllZCBmb3JtIG9mIHRoZSBmdW5jdGlvbiBiaW5kKCkgd2FzCisvLyAg
ICAgICAgIGludm9rZWQgYXMgYSBtZXRob2Qgb2YuCitmdW5jdGlvbiBwYXJ0aWFsKGZuLCB2YXJf
YXJncykKK3sKKyAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3Vt
ZW50cywgMSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAvLyBQcmVwZW5kIHRo
ZSBib3VuZCBhcmd1bWVudHMgdG8gdGhlIGN1cnJlbnQgYXJndW1lbnRzLgorICAgICAgICB2YXIg
bmV3QXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CisgICAgICAg
IG5ld0FyZ3MudW5zaGlmdC5hcHBseShuZXdBcmdzLCBhcmdzKTsKKyAgICAgICAgcmV0dXJuIGZu
LmFwcGx5KHRoaXMsIG5ld0FyZ3MpOworICAgIH07Cit9OworCisvLyBSZXR1cm5zIHRoZSBhcHBy
b3ByaWF0ZSBleHBlY3RhdGlvc24gbWFwIGZvciB0aGUgY3VycmVudCB0ZXN0VHlwZS4KK2Z1bmN0
aW9uIGV4cGVjdGF0aW9uc01hcCgpCit7CisgICAgcmV0dXJuIGlzTGF5b3V0VGVzdFJlc3VsdHMo
KSA/IExBWU9VVF9URVNUX0VYUEVDVEFUSU9OU19NQVBfIDogR1RFU1RfRVhQRUNUQVRJT05TX01B
UF87Cit9CisKK2Z1bmN0aW9uIHRvZ2dsZVF1ZXJ5UGFyYW1ldGVyKHBhcmFtKQoreworICAgIHNl
dFF1ZXJ5UGFyYW1ldGVyKHBhcmFtLCAhZ19jdXJyZW50U3RhdGVbcGFyYW1dKTsKK30KKworZnVu
Y3Rpb24gY2hlY2tib3hIVE1MKHF1ZXJ5UGFyYW1ldGVyLCBsYWJlbCwgaXNDaGVja2VkLCBvcHRf
ZXh0cmFKYXZhU2NyaXB0KQoreworICAgIHZhciBqcyA9IG9wdF9leHRyYUphdmFTY3JpcHQgfHwg
Jyc7CisgICAgcmV0dXJuICc8bGFiZWwgc3R5bGU9InBhZGRpbmctbGVmdDogMmVtIj4nICsKKyAg
ICAgICAgJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25jaGFuZ2U9InRvZ2dsZVF1ZXJ5UGFyYW1l
dGVyKFwnJyArIHF1ZXJ5UGFyYW1ldGVyICsgJ1wnKTsnICsganMgKyAnIiAnICsKKyAgICAgICAg
ICAgIChpc0NoZWNrZWQgPyAnY2hlY2tlZCcgOiAnJykgKyAnPicgKyBsYWJlbCArCisgICAgICAg
ICc8L2xhYmVsPiAnOworfQorCitmdW5jdGlvbiBzZWxlY3RIVE1MKGxhYmVsLCBxdWVyeVBhcmFt
ZXRlciwgb3B0aW9ucykKK3sKKyAgICB2YXIgaHRtbCA9ICc8bGFiZWwgc3R5bGU9InBhZGRpbmct
bGVmdDogMmVtIj4nICsgbGFiZWwgKyAnOiAnICsKKyAgICAgICAgJzxzZWxlY3Qgb25jaGFuZ2U9
InNldFF1ZXJ5UGFyYW1ldGVyKFwnJyArIHF1ZXJ5UGFyYW1ldGVyICsgJ1wnLCB0aGlzW3RoaXMu
c2VsZWN0ZWRJbmRleF0udmFsdWUpIj4nOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRp
b25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciB2YWx1ZSA9IG9wdGlvbnNbaV07CisgICAg
ICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9IicgKyB2YWx1ZSArICciICcgKworICAgICAgICAg
ICAgKGdfY3VycmVudFN0YXRlW3F1ZXJ5UGFyYW1ldGVyXSA9PSB2YWx1ZSA/ICdzZWxlY3RlZCcg
OiAnJykgKworICAgICAgICAgICAgJz4nICsgdmFsdWUgKyAnPC9vcHRpb24+JworICAgIH0KKyAg
ICBodG1sICs9ICc8L3NlbGVjdD48L2xhYmVsPiAnOworICAgIHJldHVybiBodG1sOworfQorCisv
LyBSZXR1cm5zIHRoZSBIVE1MIGZvciB0aGUgc2VsZWN0IGVsZW1lbnQgdG8gc3dpdGNoIHRvIGRp
ZmZlcmVudCB0ZXN0VHlwZXMuCitmdW5jdGlvbiBodG1sRm9yVGVzdFR5cGVTd2l0Y2hlcihvcHRf
bm9CdWlsZGVyTWVudSwgb3B0X2V4dHJhSHRtbCwgb3B0X2luY2x1ZGVOb25lQnVpbGRlcikKK3sK
KyAgICB2YXIgaHRtbCA9ICc8ZGl2IHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBkYXNoZWQiPic7
CisgICAgaHRtbCArPSAnJyArCisgICAgICAgIGh0bWxGb3JEYXNoYm9hcmRMaW5rKCdTdGF0cycs
ICdhZ2dyZWdhdGVfcmVzdWx0cy5odG1sJykgKworICAgICAgICBodG1sRm9yRGFzaGJvYXJkTGlu
aygnVGltZWxpbmUnLCAndGltZWxpbmVfZXhwbG9yZXIuaHRtbCcpICsKKyAgICAgICAgaHRtbEZv
ckRhc2hib2FyZExpbmsoJ1Jlc3VsdHMnLCAnZmxha2luZXNzX2Rhc2hib2FyZC5odG1sJykgKwor
ICAgICAgICBodG1sRm9yRGFzaGJvYXJkTGluaygnVHJlZW1hcCcsICd0cmVlbWFwLmh0bWwnKTsK
KworICAgIGh0bWwgKz0gc2VsZWN0SFRNTCgnVGVzdCB0eXBlJywgJ3Rlc3RUeXBlJywgVEVTVF9U
WVBFUyk7CisKKyAgICBpZiAoIW9wdF9ub0J1aWxkZXJNZW51KSB7CisgICAgICAgIHZhciBidWls
ZGVyc0Zvck1lbnUgPSBPYmplY3Qua2V5cyhnX2J1aWxkZXJzKTsKKyAgICAgICAgaWYgKG9wdF9p
bmNsdWRlTm9uZUJ1aWxkZXIpCisgICAgICAgICAgICBidWlsZGVyc0Zvck1lbnUudW5zaGlmdCgn
LS0tLS0tLS0tLS0tLS0nKTsKKyAgICAgICAgaHRtbCArPSBzZWxlY3RIVE1MKCdCdWlsZGVyJywg
J2J1aWxkZXInLCBidWlsZGVyc0Zvck1lbnUpOworICAgIH0KKworICAgIGlmIChpc0xheW91dFRl
c3RSZXN1bHRzKCkpCisgICAgICAgIGh0bWwgKz0gc2VsZWN0SFRNTCgnR3JvdXAnLCAnZ3JvdXAn
LCBPYmplY3Qua2V5cyhMQVlPVVRfVEVTVFNfQlVJTERFUl9HUk9VUFMpKTsKKworICAgIGlmICgh
aXNUcmVlTWFwKCkpCisgICAgICAgIGh0bWwgKz0gY2hlY2tib3hIVE1MKCdzaG93QWxsUnVucycs
ICdTaG93IGFsbCBydW5zJywgZ19jdXJyZW50U3RhdGUuc2hvd0FsbFJ1bnMpOworCisgICAgaWYg
KG9wdF9leHRyYUh0bWwpCisgICAgICAgIGh0bWwgKz0gb3B0X2V4dHJhSHRtbDsKKyAgICByZXR1
cm4gaHRtbCArICc8L2Rpdj4nOworfQorCitmdW5jdGlvbiBzZWxlY3RCdWlsZGVyKGJ1aWxkZXIp
Cit7CisgICAgc2V0UXVlcnlQYXJhbWV0ZXIoJ2J1aWxkZXInLCBidWlsZGVyKTsKK30KKworZnVu
Y3Rpb24gbG9hZERhc2hib2FyZChmaWxlTmFtZSkKK3sKKyAgICB2YXIgcGF0aE5hbWUgPSB3aW5k
b3cubG9jYXRpb24ucGF0aG5hbWU7CisgICAgcGF0aE5hbWUgPSBwYXRoTmFtZS5zdWJzdHJpbmco
MCwgcGF0aE5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpOworICAgIHdpbmRvdy5sb2NhdGlvbiA9
IHBhdGhOYW1lICsgZmlsZU5hbWUgKyB3aW5kb3cubG9jYXRpb24uaGFzaDsKK30KKworZnVuY3Rp
b24gaHRtbEZvclRvcExpbmsoaHRtbCwgb25DbGljaywgaXNTZWxlY3RlZCkKK3sKKyAgICB2YXIg
Y3NzVGV4dCA9IGlzU2VsZWN0ZWQgPyAnZm9udC13ZWlnaHQ6IGJvbGQ7JyA6ICdjb2xvcjpibHVl
O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXI7JzsKKyAgICBjc3NUZXh0
ICs9ICdtYXJnaW46IDAgNXB4Oyc7CisgICAgcmV0dXJuICc8c3BhbiBzdHlsZT0iJyArIGNzc1Rl
eHQgKyAnIiBvbmNsaWNrPSInICsgb25DbGljayArICciPicgKyBodG1sICsgJzwvc3Bhbj4nOwor
fQorCitmdW5jdGlvbiBodG1sRm9yRGFzaGJvYXJkTGluayhodG1sLCBmaWxlTmFtZSkKK3sKKyAg
ICB2YXIgcGF0aE5hbWUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CisgICAgdmFyIGN1cnJl
bnRGaWxlTmFtZSA9IHBhdGhOYW1lLnN1YnN0cmluZyhwYXRoTmFtZS5sYXN0SW5kZXhPZignLycp
ICsgMSk7CisgICAgdmFyIGlzU2VsZWN0ZWQgPSBjdXJyZW50RmlsZU5hbWUgPT0gZmlsZU5hbWU7
CisgICAgdmFyIG9uQ2xpY2sgPSAnbG9hZERhc2hib2FyZChcJycgKyBmaWxlTmFtZSArICdcJykn
OworICAgIHJldHVybiBodG1sRm9yVG9wTGluayhodG1sLCBvbkNsaWNrLCBpc1NlbGVjdGVkKTsK
K30KKworZnVuY3Rpb24gcmV2aXNpb25MaW5rKHJlc3VsdHMsIGluZGV4LCBrZXksIHNpbmdsZVVy
bFRlbXBsYXRlLCByYW5nZVVybFRlbXBsYXRlKQoreworICAgIHZhciBjdXJyZW50UmV2aXNpb24g
PSBwYXJzZUludChyZXN1bHRzW2tleV1baW5kZXhdLCAxMCk7CisgICAgdmFyIHByZXZpb3VzUmV2
aXNpb24gPSBwYXJzZUludChyZXN1bHRzW2tleV1baW5kZXggKyAxXSwgMTApOworCisgICAgZnVu
Y3Rpb24gc2luZ2xlVXJsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzaW5nbGVVcmxUZW1wbGF0
ZS5yZXBsYWNlKCc8cmV2PicsIGN1cnJlbnRSZXZpc2lvbik7CisgICAgfQorCisgICAgZnVuY3Rp
b24gcmFuZ2VVcmwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJhbmdlVXJsVGVtcGxhdGUucmVw
bGFjZSgnPHJldjE+JywgY3VycmVudFJldmlzaW9uKS5yZXBsYWNlKCc8cmV2Mj4nLCBwcmV2aW91
c1JldmlzaW9uICsgMSk7CisgICAgfQorCisgICAgaWYgKGN1cnJlbnRSZXZpc2lvbiA9PSBwcmV2
aW91c1JldmlzaW9uKQorICAgICAgICByZXR1cm4gJ0F0IDxhIGhyZWY9IicgKyBzaW5nbGVVcmwo
KSArICciPnInICsgY3VycmVudFJldmlzaW9uICAgICsgJzwvYT4nOworICAgIGVsc2UgaWYgKGN1
cnJlbnRSZXZpc2lvbiAtIHByZXZpb3VzUmV2aXNpb24gPT0gMSkKKyAgICAgICAgcmV0dXJuICc8
YSBocmVmPSInICsgc2luZ2xlVXJsKCkgKyAnIj5yJyArIGN1cnJlbnRSZXZpc2lvbiAgICArICc8
L2E+JzsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAnPGEgaHJlZj0iJyArIHJhbmdlVXJsKCkg
KyAnIj5yJyArIChwcmV2aW91c1JldmlzaW9uICsgMSkgKyAnIHRvIHInICsgY3VycmVudFJldmlz
aW9uICsgJzwvYT4nOworfQorCitmdW5jdGlvbiBjaHJvbWl1bVJldmlzaW9uTGluayhyZXN1bHRz
LCBpbmRleCkKK3sKKyAgICByZXR1cm4gcmV2aXNpb25MaW5rKAorICAgICAgICByZXN1bHRzLAor
ICAgICAgICBpbmRleCwKKyAgICAgICAgQ0hST01FX1JFVklTSU9OU19LRVksCisgICAgICAgICdo
dHRwOi8vc3JjLmNocm9taXVtLm9yZy92aWV3dmMvY2hyb21lP3ZpZXc9cmV2JnJldmlzaW9uPTxy
ZXY+JywKKyAgICAgICAgJ2h0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9jaHJvbWl1bS9wZXJm
L2Rhc2hib2FyZC91aS9jaGFuZ2Vsb2cuaHRtbD91cmw9L3RydW5rL3NyYyZyYW5nZT08cmV2Mj46
PHJldjE+Jm1vZGU9aHRtbCcpOworfQorCitmdW5jdGlvbiB3ZWJLaXRSZXZpc2lvbkxpbmsocmVz
dWx0cywgaW5kZXgpCit7CisgICAgcmV0dXJuIHJldmlzaW9uTGluaygKKyAgICAgICAgcmVzdWx0
cywKKyAgICAgICAgaW5kZXgsCisgICAgICAgIFdFQktJVF9SRVZJU0lPTlNfS0VZLAorICAgICAg
ICAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvPHJldj4nLAorICAgICAgICAnaHR0
cDovL3RyYWMud2Via2l0Lm9yZy9sb2cvdHJ1bmsvP3Jldj08cmV2MT4mc3RvcF9yZXY9PHJldjI+
JmxpbWl0PTEwMCZ2ZXJib3NlPW9uJyk7Cit9CisKKy8vICJEZWNvbXByZXNzZXMiIHRoZSBSTEUt
ZW5jb2Rpbmcgb2YgdGVzdCByZXN1bHRzIHNvIHRoYXQgd2UgY2FuIHF1ZXJ5IGl0CisvLyBieSBi
dWlsZCBpbmRleCBhbmQgdGVzdCBuYW1lLgorLy8KKy8vIEBwYXJhbSB7T2JqZWN0fSByZXN1bHRz
IHJlc3VsdHMgZm9yIHRoZSBjdXJyZW50IGJ1aWxkZXIKKy8vIEByZXR1cm4gT2JqZWN0IHdpdGgg
dGhlc2UgcHJvcGVydGllczoKKy8vICAgICAtIHRlc3ROYW1lczogYXJyYXkgbWFwcGluZyB0ZXN0
IGluZGV4IHRvIHRlc3QgbmFtZXMuCisvLyAgICAgLSByZXN1bHRzQnlCdWlsZDogYXJyYXkgb2Yg
YnVpbGRzLCBmb3IgZWFjaCBidWlsZCBhIChzcGFyc2UpIGFycmF5IG9mIHRlc3QgcmVzdWx0cyBi
eSB0ZXN0IGluZGV4LgorLy8gICAgIC0gZmxha3lUZXN0czogYXJyYXkgd2l0aCB0aGUgYm9vbGVh
biB2YWx1ZSB0cnVlIGF0IHRlc3QgaW5kaWNlcyB0aGF0IGFyZSBjb25zaWRlcmVkIGZsYWt5ICht
b3JlIHRoYW4gb25lIHNpbmdsZS1idWlsZCBmYWlsdXJlKS4KKy8vICAgICAtIGZsYWt5RGVsdGFz
QnlCdWlsZDogYXJyYXkgb2YgYnVpbGRzLCBmb3IgZWFjaCBidWlsZCBhIGNvdW50IG9mIGZsYWt5
IHRlc3QgcmVzdWx0cyBieSBleHBlY3RhdGlvbiwgYXMgd2VsbCBhcyBhIHRvdGFsLgorZnVuY3Rp
b24gZGVjb21wcmVzc1Jlc3VsdHMoYnVpbGRlclJlc3VsdHMpCit7CisgICAgdmFyIGJ1aWxkZXJU
ZXN0UmVzdWx0cyA9IGJ1aWxkZXJSZXN1bHRzW1RFU1RTX0tFWV07CisgICAgdmFyIGJ1aWxkQ291
bnQgPSBidWlsZGVyUmVzdWx0c1tGSVhBQkxFX0NPVU5UU19LRVldLmxlbmd0aDsKKyAgICB2YXIg
cmVzdWx0c0J5QnVpbGQgPSBuZXcgQXJyYXkoYnVpbGRDb3VudCk7CisgICAgdmFyIGZsYWt5RGVs
dGFzQnlCdWlsZCA9IG5ldyBBcnJheShidWlsZENvdW50KTsKKworICAgIC8vIFByZS1zaXppbmcg
dGhlIHRlc3QgcmVzdWx0IGFycmF5cyBmb3IgZWFjaCBidWlsZCBzYXZlcyB1cyB+MjUwbXMKKyAg
ICB2YXIgdGVzdENvdW50ID0gMDsKKyAgICBmb3IgKHZhciB0ZXN0TmFtZSBpbiBidWlsZGVyVGVz
dFJlc3VsdHMpCisgICAgICAgIHRlc3RDb3VudCsrOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
YnVpbGRDb3VudDsgaSsrKSB7CisgICAgICAgIHJlc3VsdHNCeUJ1aWxkW2ldID0gbmV3IEFycmF5
KHRlc3RDb3VudCk7CisgICAgICAgIHJlc3VsdHNCeUJ1aWxkW2ldW3Rlc3RDb3VudCAtIDFdID0g
dW5kZWZpbmVkOworICAgICAgICBmbGFreURlbHRhc0J5QnVpbGRbaV0gPSB7fTsKKyAgICB9CisK
KyAgICAvLyBVc2luZyBpbmRpY2VzIGluc3RlYWQgb2YgdGhlIGZ1bGwgdGVzdCBuYW1lcyBmb3Ig
ZWFjaCBidWlsZCBzYXZlcyB1cworICAgIC8vIH4xNTAwbXMKKyAgICB2YXIgdGVzdEluZGV4ID0g
MDsKKyAgICB2YXIgdGVzdE5hbWVzID0gbmV3IEFycmF5KHRlc3RDb3VudCk7CisgICAgdmFyIGZs
YWt5VGVzdHMgPSBuZXcgQXJyYXkodGVzdENvdW50KTsKKworICAgIC8vIERlY29tcHJlc3MgYW5k
ICJpbnZlcnQiIHRlc3QgcmVzdWx0cyAoYnkgYnVpbGQgaW5zdGVhZCBvZiBieSB0ZXN0KSBhbmQK
KyAgICAvLyBkZXRlcm1pbmUgd2hpY2ggYXJlIGZsYWt5LgorICAgIGZvciAodmFyIHRlc3ROYW1l
IGluIGJ1aWxkZXJUZXN0UmVzdWx0cykgeworICAgICAgICB2YXIgb25lQnVpbGRGYWlsdXJlQ291
bnQgPSAwOworCisgICAgICAgIHRlc3ROYW1lc1t0ZXN0SW5kZXhdID0gdGVzdE5hbWU7CisgICAg
ICAgIHZhciB0ZXN0UmVzdWx0cyA9IGJ1aWxkZXJUZXN0UmVzdWx0c1t0ZXN0TmFtZV0ucmVzdWx0
czsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIHJsZVJlc3VsdCwgY3VycmVudEJ1aWxkSW5kZXgg
PSAwOyAocmxlUmVzdWx0ID0gdGVzdFJlc3VsdHNbaV0pICYmIGN1cnJlbnRCdWlsZEluZGV4IDwg
YnVpbGRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgY291bnQgPSBybGVSZXN1bHRbUkxF
LkxFTkdUSF07CisgICAgICAgICAgICB2YXIgdmFsdWUgPSBybGVSZXN1bHRbUkxFLlZBTFVFXTsK
KworICAgICAgICAgICAgaWYgKGNvdW50ID09IDEgJiYgdmFsdWUgaW4gRkFJTFVSRV9FWFBFQ1RB
VElPTlNfKQorICAgICAgICAgICAgICAgIG9uZUJ1aWxkRmFpbHVyZUNvdW50Kys7CisKKyAgICAg
ICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY291bnQ7IGorKykgeworICAgICAgICAgICAgICAg
IHJlc3VsdHNCeUJ1aWxkW2N1cnJlbnRCdWlsZEluZGV4KytdW3Rlc3RJbmRleF0gPSB2YWx1ZTsK
KyAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJ1aWxkSW5kZXggPT0gYnVpbGRDb3VudCkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAob25lQnVpbGRGYWlsdXJlQ291bnQgPiAyKQorICAgICAgICAgICAgZmxha3lUZXN0
c1t0ZXN0SW5kZXhdID0gdHJ1ZTsKKworICAgICAgICB0ZXN0SW5kZXgrKzsKKyAgICB9CisKKyAg
ICAvLyBOb3cgdGhhdCB3ZSBrbm93IHdoaWNoIHRlc3RzIGFyZSBmbGFreSwgY291bnQgdGhlIHRl
c3QgcmVzdWx0cyB0aGF0IGFyZQorICAgIC8vIGZyb20gZmxha3kgdGVzdHMgZm9yIGVhY2ggYnVp
bGQuCisgICAgdGVzdEluZGV4ID0gMDsKKyAgICBmb3IgKHZhciB0ZXN0TmFtZSBpbiBidWlsZGVy
VGVzdFJlc3VsdHMpIHsKKyAgICAgICAgaWYgKCFmbGFreVRlc3RzW3Rlc3RJbmRleCsrXSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHZhciB0ZXN0UmVzdWx0cyA9IGJ1aWxkZXJU
ZXN0UmVzdWx0c1t0ZXN0TmFtZV0ucmVzdWx0czsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIHJs
ZVJlc3VsdCwgY3VycmVudEJ1aWxkSW5kZXggPSAwOyAocmxlUmVzdWx0ID0gdGVzdFJlc3VsdHNb
aV0pICYmIGN1cnJlbnRCdWlsZEluZGV4IDwgYnVpbGRDb3VudDsgaSsrKSB7CisgICAgICAgICAg
ICB2YXIgY291bnQgPSBybGVSZXN1bHRbUkxFLkxFTkdUSF07CisgICAgICAgICAgICB2YXIgdmFs
dWUgPSBybGVSZXN1bHRbUkxFLlZBTFVFXTsKKworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7
IGogPCBjb3VudDsgaisrKSB7CisgICAgICAgICAgICAgICAgdmFyIGJ1aWxkVGVzdFJlc3VsdHMg
PSBmbGFreURlbHRhc0J5QnVpbGRbY3VycmVudEJ1aWxkSW5kZXgrK107CisgICAgICAgICAgICAg
ICAgZnVuY3Rpb24gYWRkRmxha3lEZWx0YShrZXkpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gYnVpbGRUZXN0UmVzdWx0cykpCisgICAgICAgICAg
ICAgICAgICAgICAgICBidWlsZFRlc3RSZXN1bHRzW2tleV0gPSAwOworICAgICAgICAgICAgICAg
ICAgICBidWlsZFRlc3RSZXN1bHRzW2tleV0rKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYWRkRmxha3lEZWx0YSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVl
ICE9ICdQJyAmJiB2YWx1ZSAhPSAnTicpCisgICAgICAgICAgICAgICAgICAgIGFkZEZsYWt5RGVs
dGEoJ3RvdGFsJyk7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCdWlsZEluZGV4ID09IGJ1
aWxkQ291bnQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgdGVzdE5hbWVzOiB0ZXN0TmFt
ZXMsCisgICAgICAgIHJlc3VsdHNCeUJ1aWxkOiByZXN1bHRzQnlCdWlsZCwKKyAgICAgICAgZmxh
a3lUZXN0czogZmxha3lUZXN0cywKKyAgICAgICAgZmxha3lEZWx0YXNCeUJ1aWxkOiBmbGFreURl
bHRhc0J5QnVpbGQKKyAgICB9OworfQorCisKK2FwcGVuZEpTT05TY3JpcHRFbGVtZW50cygpOwor
Citkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBmdW5jdGlvbihlKSB7Cisg
ICAgLy8gQ2xlYXIgdGhlIG9wZW4gcG9wdXAsIHVubGVzcyB0aGUgY2xpY2sgd2FzIGluc2lkZSB0
aGUgcG9wdXAuCisgICAgdmFyIHBvcHVwID0gJCgncG9wdXAnKTsKKyAgICBpZiAocG9wdXAgJiYg
ZS50YXJnZXQgIT0gcG9wdXAgJiYgIShwb3B1cC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlLnRh
cmdldCkgJiAxNikpCisgICAgICAgIGhpZGVQb3B1cCgpOworfSwgZmFsc2UpOworCit3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkgeworICAgIC8vIFRoaXMgZG9lc24n
dCBzZWVtIHRvdGFsbHkgYWNjdXJhdGUgYXMgdGhlcmUgaXMgYSByYWNlIGJldHdlZW4KKyAgICAv
LyBvbmxvYWQgZmlyaW5nIGFuZCB0aGUgbGFzdCBzY3JpcHQgdGFnIGJlaW5nIGV4ZWN1dGVkLgor
ICAgIGxvZ1RpbWUoJ1RpbWUgdG8gbG9hZCBKUycsIGdfcGFnZUxvYWRTdGFydFRpbWUpOworfSwg
ZmFsc2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvc3RhdGljLWRh
c2hib2FyZHMvZHlncmFwaC1jb21iaW5lZC5qcyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVy
L3N0YXRpYy1kYXNoYm9hcmRzL2R5Z3JhcGgtY29tYmluZWQuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmE4ODA1
OWU0MmExNjAwZmZkMDVjZWU5Y2ExZTVjMDZhYTY0ZjI3MAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2R5Z3JhcGgtY29tYmlu
ZWQuanMKQEAgLTAsMCArMSBAQAorRHlncmFwaExheW91dD1mdW5jdGlvbihiLGEpe3RoaXMuZHln
cmFwaF89Yjt0aGlzLm9wdGlvbnM9e307RHlncmFwaC51cGRhdGUodGhpcy5vcHRpb25zLGE/YTp7
fSk7dGhpcy5kYXRhc2V0cz1uZXcgQXJyYXkoKTt0aGlzLmFubm90YXRpb25zPW5ldyBBcnJheSgp
fTtEeWdyYXBoTGF5b3V0LnByb3RvdHlwZS5hdHRyXz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5k
eWdyYXBoXy5hdHRyXyhhKX07RHlncmFwaExheW91dC5wcm90b3R5cGUuYWRkRGF0YXNldD1mdW5j
dGlvbihhLGIpe3RoaXMuZGF0YXNldHNbYV09Yn07RHlncmFwaExheW91dC5wcm90b3R5cGUuc2V0
QW5ub3RhdGlvbnM9ZnVuY3Rpb24oZCl7dmFyIGU9dGhpcy5hdHRyXygieFZhbHVlUGFyc2VyIik7
Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe3ZhciBiPXt9O2lmKCFkW2NdLnh2YWwmJiFkW2Nd
Lngpe3RoaXMuZHlncmFwaF8uZXJyb3IoIkFubm90YXRpb25zIG11c3QgaGF2ZSBhbiAneCcgcHJv
cGVydHkiKTtyZXR1cm59aWYoZFtjXS5pY29uJiYhKGRbY10uaGFzT3duUHJvcGVydHkoIndpZHRo
IikmJmRbY10uaGFzT3duUHJvcGVydHkoImhlaWdodCIpKSl7dGhpcy5keWdyYXBoXy5lcnJvcigi
TXVzdCBzZXQgd2lkdGggYW5kIGhlaWdodCB3aGVuIHNldHRpbmcgYW5ub3RhdGlvbi5pY29uIHBy
b3BlcnR5Iik7cmV0dXJufUR5Z3JhcGgudXBkYXRlKGIsZFtjXSk7aWYoIWIueHZhbCl7Yi54dmFs
PWUoYi54KX10aGlzLmFubm90YXRpb25zLnB1c2goYil9fTtEeWdyYXBoTGF5b3V0LnByb3RvdHlw
ZS5ldmFsdWF0ZT1mdW5jdGlvbigpe3RoaXMuX2V2YWx1YXRlTGltaXRzKCk7dGhpcy5fZXZhbHVh
dGVMaW5lQ2hhcnRzKCk7dGhpcy5fZXZhbHVhdGVMaW5lVGlja3MoKTt0aGlzLl9ldmFsdWF0ZUFu
bm90YXRpb25zKCl9O0R5Z3JhcGhMYXlvdXQucHJvdG90eXBlLl9ldmFsdWF0ZUxpbWl0cz1mdW5j
dGlvbigpe3RoaXMubWlueHZhbD10aGlzLm1heHh2YWw9bnVsbDtpZih0aGlzLm9wdGlvbnMuZGF0
ZVdpbmRvdyl7dGhpcy5taW54dmFsPXRoaXMub3B0aW9ucy5kYXRlV2luZG93WzBdO3RoaXMubWF4
eHZhbD10aGlzLm9wdGlvbnMuZGF0ZVdpbmRvd1sxXX1lbHNle2Zvcih2YXIgYyBpbiB0aGlzLmRh
dGFzZXRzKXtpZighdGhpcy5kYXRhc2V0cy5oYXNPd25Qcm9wZXJ0eShjKSl7Y29udGludWV9dmFy
IGQ9dGhpcy5kYXRhc2V0c1tjXTt2YXIgYj1kWzBdWzBdO2lmKCF0aGlzLm1pbnh2YWx8fGI8dGhp
cy5taW54dmFsKXt0aGlzLm1pbnh2YWw9Yn12YXIgYT1kW2QubGVuZ3RoLTFdWzBdO2lmKCF0aGlz
Lm1heHh2YWx8fGE+dGhpcy5tYXh4dmFsKXt0aGlzLm1heHh2YWw9YX19fXRoaXMueHJhbmdlPXRo
aXMubWF4eHZhbC10aGlzLm1pbnh2YWw7dGhpcy54c2NhbGU9KHRoaXMueHJhbmdlIT0wPzEvdGhp
cy54cmFuZ2U6MSk7dGhpcy5taW55dmFsPXRoaXMub3B0aW9ucy55QXhpc1swXTt0aGlzLm1heHl2
YWw9dGhpcy5vcHRpb25zLnlBeGlzWzFdO3RoaXMueXJhbmdlPXRoaXMubWF4eXZhbC10aGlzLm1p
bnl2YWw7dGhpcy55c2NhbGU9KHRoaXMueXJhbmdlIT0wPzEvdGhpcy55cmFuZ2U6MSl9O0R5Z3Jh
cGhMYXlvdXQucHJvdG90eXBlLl9ldmFsdWF0ZUxpbmVDaGFydHM9ZnVuY3Rpb24oKXt0aGlzLnBv
aW50cz1uZXcgQXJyYXkoKTtmb3IodmFyIGUgaW4gdGhpcy5kYXRhc2V0cyl7aWYoIXRoaXMuZGF0
YXNldHMuaGFzT3duUHJvcGVydHkoZSkpe2NvbnRpbnVlfXZhciBkPXRoaXMuZGF0YXNldHNbZV07
Zm9yKHZhciBiPTA7YjxkLmxlbmd0aDtiKyspe3ZhciBjPWRbYl07dmFyIGE9e3g6KChwYXJzZUZs
b2F0KGNbMF0pLXRoaXMubWlueHZhbCkqdGhpcy54c2NhbGUpLHk6MS0oKHBhcnNlRmxvYXQoY1sx
XSktdGhpcy5taW55dmFsKSp0aGlzLnlzY2FsZSkseHZhbDpwYXJzZUZsb2F0KGNbMF0pLHl2YWw6
cGFyc2VGbG9hdChjWzFdKSxuYW1lOmV9O2lmKGEueTw9MCl7YS55PTB9aWYoYS55Pj0xKXthLnk9
MX10aGlzLnBvaW50cy5wdXNoKGEpfX19O0R5Z3JhcGhMYXlvdXQucHJvdG90eXBlLl9ldmFsdWF0
ZUxpbmVUaWNrcz1mdW5jdGlvbigpe3RoaXMueHRpY2tzPW5ldyBBcnJheSgpO2Zvcih2YXIgYz0w
O2M8dGhpcy5vcHRpb25zLnhUaWNrcy5sZW5ndGg7YysrKXt2YXIgYj10aGlzLm9wdGlvbnMueFRp
Y2tzW2NdO3ZhciBhPWIubGFiZWw7dmFyIGQ9dGhpcy54c2NhbGUqKGIudi10aGlzLm1pbnh2YWwp
O2lmKChkPj0wKSYmKGQ8PTEpKXt0aGlzLnh0aWNrcy5wdXNoKFtkLGFdKX19dGhpcy55dGlja3M9
bmV3IEFycmF5KCk7Zm9yKHZhciBjPTA7Yzx0aGlzLm9wdGlvbnMueVRpY2tzLmxlbmd0aDtjKysp
e3ZhciBiPXRoaXMub3B0aW9ucy55VGlja3NbY107dmFyIGE9Yi5sYWJlbDt2YXIgZD0xLSh0aGlz
LnlzY2FsZSooYi52LXRoaXMubWlueXZhbCkpO2lmKChkPj0wKSYmKGQ8PTEpKXt0aGlzLnl0aWNr
cy5wdXNoKFtkLGFdKX19fTtEeWdyYXBoTGF5b3V0LnByb3RvdHlwZS5ldmFsdWF0ZVdpdGhFcnJv
cj1mdW5jdGlvbigpe3RoaXMuZXZhbHVhdGUoKTtpZighdGhpcy5vcHRpb25zLmVycm9yQmFycyl7
cmV0dXJufXZhciBkPTA7Zm9yKHZhciBnIGluIHRoaXMuZGF0YXNldHMpe2lmKCF0aGlzLmRhdGFz
ZXRzLmhhc093blByb3BlcnR5KGcpKXtjb250aW51ZX12YXIgYz0wO3ZhciBmPXRoaXMuZGF0YXNl
dHNbZ107Zm9yKHZhciBjPTA7YzxmLmxlbmd0aDtjKyssZCsrKXt2YXIgZT1mW2NdO3ZhciBhPXBh
cnNlRmxvYXQoZVswXSk7dmFyIGI9cGFyc2VGbG9hdChlWzFdKTtpZihhPT10aGlzLnBvaW50c1tk
XS54dmFsJiZiPT10aGlzLnBvaW50c1tkXS55dmFsKXt0aGlzLnBvaW50c1tkXS5lcnJvck1pbnVz
PXBhcnNlRmxvYXQoZVsyXSk7dGhpcy5wb2ludHNbZF0uZXJyb3JQbHVzPXBhcnNlRmxvYXQoZVsz
XSl9fX19O0R5Z3JhcGhMYXlvdXQucHJvdG90eXBlLl9ldmFsdWF0ZUFubm90YXRpb25zPWZ1bmN0
aW9uKCl7dmFyIGY9e307Zm9yKHZhciBkPTA7ZDx0aGlzLmFubm90YXRpb25zLmxlbmd0aDtkKysp
e3ZhciBiPXRoaXMuYW5ub3RhdGlvbnNbZF07ZltiLnh2YWwrIiwiK2Iuc2VyaWVzXT1ifXRoaXMu
YW5ub3RhdGVkX3BvaW50cz1bXTtmb3IodmFyIGQ9MDtkPHRoaXMucG9pbnRzLmxlbmd0aDtkKysp
e3ZhciBlPXRoaXMucG9pbnRzW2RdO3ZhciBjPWUueHZhbCsiLCIrZS5uYW1lO2lmKGMgaW4gZil7
ZS5hbm5vdGF0aW9uPWZbY107dGhpcy5hbm5vdGF0ZWRfcG9pbnRzLnB1c2goZSl9fX07RHlncmFw
aExheW91dC5wcm90b3R5cGUucmVtb3ZlQWxsRGF0YXNldHM9ZnVuY3Rpb24oKXtkZWxldGUgdGhp
cy5kYXRhc2V0czt0aGlzLmRhdGFzZXRzPW5ldyBBcnJheSgpfTtEeWdyYXBoTGF5b3V0LnByb3Rv
dHlwZS51cGRhdGVPcHRpb25zPWZ1bmN0aW9uKGEpe0R5Z3JhcGgudXBkYXRlKHRoaXMub3B0aW9u
cyxhP2E6e30pfTtEeWdyYXBoQ2FudmFzUmVuZGVyZXI9ZnVuY3Rpb24oYyxiLGQsYSl7dGhpcy5k
eWdyYXBoXz1jO3RoaXMub3B0aW9ucz17c3Ryb2tlV2lkdGg6MC41LGRyYXdYQXhpczp0cnVlLGRy
YXdZQXhpczp0cnVlLGF4aXNMaW5lQ29sb3I6ImJsYWNrIixheGlzTGluZVdpZHRoOjAuNSxheGlz
VGlja1NpemU6MyxheGlzTGFiZWxDb2xvcjoiYmxhY2siLGF4aXNMYWJlbEZvbnQ6IkFyaWFsIixh
eGlzTGFiZWxGb250U2l6ZTo5LGF4aXNMYWJlbFdpZHRoOjUwLGRyYXdZR3JpZDp0cnVlLGRyYXdY
R3JpZDp0cnVlLGdyaWRMaW5lQ29sb3I6InJnYigxMjgsMTI4LDEyOCkiLGZpbGxBbHBoYTowLjE1
LHVuZGVybGF5Q2FsbGJhY2s6bnVsbH07RHlncmFwaC51cGRhdGUodGhpcy5vcHRpb25zLGEpO3Ro
aXMubGF5b3V0PWQ7dGhpcy5lbGVtZW50PWI7dGhpcy5jb250YWluZXI9dGhpcy5lbGVtZW50LnBh
cmVudE5vZGU7dGhpcy5oZWlnaHQ9dGhpcy5lbGVtZW50LmhlaWdodDt0aGlzLndpZHRoPXRoaXMu
ZWxlbWVudC53aWR0aDtpZighdGhpcy5pc0lFJiYhKER5Z3JhcGhDYW52YXNSZW5kZXJlci5pc1N1
cHBvcnRlZCh0aGlzLmVsZW1lbnQpKSl7dGhyb3ciQ2FudmFzIGlzIG5vdCBzdXBwb3J0ZWQuIn10
aGlzLnhsYWJlbHM9bmV3IEFycmF5KCk7dGhpcy55bGFiZWxzPW5ldyBBcnJheSgpO3RoaXMuYW5u
b3RhdGlvbnM9bmV3IEFycmF5KCk7dGhpcy5hcmVhPXt4OnRoaXMub3B0aW9ucy55QXhpc0xhYmVs
V2lkdGgrMip0aGlzLm9wdGlvbnMuYXhpc1RpY2tTaXplLHk6MH07dGhpcy5hcmVhLnc9dGhpcy53
aWR0aC10aGlzLmFyZWEueC10aGlzLm9wdGlvbnMucmlnaHRHYXA7dGhpcy5hcmVhLmg9dGhpcy5o
ZWlnaHQtdGhpcy5vcHRpb25zLmF4aXNMYWJlbEZvbnRTaXplLTIqdGhpcy5vcHRpb25zLmF4aXNU
aWNrU2l6ZTt0aGlzLmNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiO3RoaXMuY29u
dGFpbmVyLnN0eWxlLndpZHRoPXRoaXMud2lkdGgrInB4In07RHlncmFwaENhbnZhc1JlbmRlcmVy
LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2lmKHRoaXMuaXNJRSl7dHJ5e2lmKHRoaXMuY2xl
YXJEZWxheSl7dGhpcy5jbGVhckRlbGF5LmNhbmNlbCgpO3RoaXMuY2xlYXJEZWxheT1udWxsfXZh
ciBiPXRoaXMuZWxlbWVudC5nZXRDb250ZXh0KCIyZCIpfWNhdGNoKGQpe3RoaXMuY2xlYXJEZWxh
eT1Nb2NoaUtpdC5Bc3luYy53YWl0KHRoaXMuSUVEZWxheSk7dGhpcy5jbGVhckRlbGF5LmFkZENh
bGxiYWNrKGJpbmQodGhpcy5jbGVhcix0aGlzKSk7cmV0dXJufX12YXIgYj10aGlzLmVsZW1lbnQu
Z2V0Q29udGV4dCgiMmQiKTtiLmNsZWFyUmVjdCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCk7
Zm9yKHZhciBhPTA7YTx0aGlzLnhsYWJlbHMubGVuZ3RoO2ErKyl7dmFyIGM9dGhpcy54bGFiZWxz
W2FdO2MucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKX1mb3IodmFyIGE9MDthPHRoaXMueWxhYmVs
cy5sZW5ndGg7YSsrKXt2YXIgYz10aGlzLnlsYWJlbHNbYV07Yy5wYXJlbnROb2RlLnJlbW92ZUNo
aWxkKGMpfWZvcih2YXIgYT0wO2E8dGhpcy5hbm5vdGF0aW9ucy5sZW5ndGg7YSsrKXt2YXIgYz10
aGlzLmFubm90YXRpb25zW2FdO2MucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKX10aGlzLnhsYWJl
bHM9bmV3IEFycmF5KCk7dGhpcy55bGFiZWxzPW5ldyBBcnJheSgpO3RoaXMuYW5ub3RhdGlvbnM9
bmV3IEFycmF5KCl9O0R5Z3JhcGhDYW52YXNSZW5kZXJlci5pc1N1cHBvcnRlZD1mdW5jdGlvbihn
KXt2YXIgYj1udWxsO3RyeXtpZih0eXBlb2YoZyk9PSJ1bmRlZmluZWQifHxnPT1udWxsKXtiPWRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpfWVsc2V7Yj1nfXZhciBjPWIuZ2V0Q29udGV4
dCgiMmQiKX1jYXRjaChkKXt2YXIgZj1uYXZpZ2F0b3IuYXBwVmVyc2lvbi5tYXRjaCgvTVNJRSAo
XGRcLlxkKS8pO3ZhciBhPShuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhP
Zigib3BlcmEiKSE9LTEpO2lmKCghZil8fChmWzFdPDYpfHwoYSkpe3JldHVybiBmYWxzZX1yZXR1
cm4gdHJ1ZX1yZXR1cm4gdHJ1ZX07RHlncmFwaENhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5k
ZXI9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmVsZW1lbnQuZ2V0Q29udGV4dCgiMmQiKTtpZih0aGlz
Lm9wdGlvbnMudW5kZXJsYXlDYWxsYmFjayl7dGhpcy5vcHRpb25zLnVuZGVybGF5Q2FsbGJhY2so
Yix0aGlzLmFyZWEsdGhpcy5sYXlvdXQsdGhpcy5keWdyYXBoXyl9aWYodGhpcy5vcHRpb25zLmRy
YXdZR3JpZCl7dmFyIGQ9dGhpcy5sYXlvdXQueXRpY2tzO2Iuc2F2ZSgpO2Iuc3Ryb2tlU3R5bGU9
dGhpcy5vcHRpb25zLmdyaWRMaW5lQ29sb3I7Yi5saW5lV2lkdGg9dGhpcy5vcHRpb25zLmF4aXNM
aW5lV2lkdGg7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe3ZhciBhPXRoaXMuYXJlYS54O3Zh
ciBlPXRoaXMuYXJlYS55K2RbY11bMF0qdGhpcy5hcmVhLmg7Yi5iZWdpblBhdGgoKTtiLm1vdmVU
byhhLGUpO2IubGluZVRvKGErdGhpcy5hcmVhLncsZSk7Yi5jbG9zZVBhdGgoKTtiLnN0cm9rZSgp
fX1pZih0aGlzLm9wdGlvbnMuZHJhd1hHcmlkKXt2YXIgZD10aGlzLmxheW91dC54dGlja3M7Yi5z
YXZlKCk7Yi5zdHJva2VTdHlsZT10aGlzLm9wdGlvbnMuZ3JpZExpbmVDb2xvcjtiLmxpbmVXaWR0
aD10aGlzLm9wdGlvbnMuYXhpc0xpbmVXaWR0aDtmb3IodmFyIGM9MDtjPGQubGVuZ3RoO2MrKyl7
dmFyIGE9dGhpcy5hcmVhLngrZFtjXVswXSp0aGlzLmFyZWEudzt2YXIgZT10aGlzLmFyZWEueSt0
aGlzLmFyZWEuaDtiLmJlZ2luUGF0aCgpO2IubW92ZVRvKGEsZSk7Yi5saW5lVG8oYSx0aGlzLmFy
ZWEueSk7Yi5jbG9zZVBhdGgoKTtiLnN0cm9rZSgpfX10aGlzLl9yZW5kZXJMaW5lQ2hhcnQoKTt0
aGlzLl9yZW5kZXJBeGlzKCk7dGhpcy5fcmVuZGVyQW5ub3RhdGlvbnMoKX07RHlncmFwaENhbnZh
c1JlbmRlcmVyLnByb3RvdHlwZS5fcmVuZGVyQXhpcz1mdW5jdGlvbigpe2lmKCF0aGlzLm9wdGlv
bnMuZHJhd1hBeGlzJiYhdGhpcy5vcHRpb25zLmRyYXdZQXhpcyl7cmV0dXJufXZhciBiPXRoaXMu
ZWxlbWVudC5nZXRDb250ZXh0KCIyZCIpO3ZhciBnPXtwb3NpdGlvbjoiYWJzb2x1dGUiLGZvbnRT
aXplOnRoaXMub3B0aW9ucy5heGlzTGFiZWxGb250U2l6ZSsicHgiLHpJbmRleDoxMCxjb2xvcjp0
aGlzLm9wdGlvbnMuYXhpc0xhYmVsQ29sb3Isd2lkdGg6dGhpcy5vcHRpb25zLmF4aXNMYWJlbFdp
ZHRoKyJweCIsb3ZlcmZsb3c6ImhpZGRlbiJ9O3ZhciBkPWZ1bmN0aW9uKG8pe3ZhciBxPWRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Zvcih2YXIgcCBpbiBnKXtpZihnLmhhc093blByb3Bl
cnR5KHApKXtxLnN0eWxlW3BdPWdbcF19fXEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUobykpO3JldHVybiBxfTtiLnNhdmUoKTtiLnN0cm9rZVN0eWxlPXRoaXMub3B0aW9ucy5h
eGlzTGluZUNvbG9yO2IubGluZVdpZHRoPXRoaXMub3B0aW9ucy5heGlzTGluZVdpZHRoO2lmKHRo
aXMub3B0aW9ucy5kcmF3WUF4aXMpe2lmKHRoaXMubGF5b3V0Lnl0aWNrcyYmdGhpcy5sYXlvdXQu
eXRpY2tzLmxlbmd0aD4wKXtmb3IodmFyIGU9MDtlPHRoaXMubGF5b3V0Lnl0aWNrcy5sZW5ndGg7
ZSsrKXt2YXIgZj10aGlzLmxheW91dC55dGlja3NbZV07aWYodHlwZW9mKGYpPT0iZnVuY3Rpb24i
KXtyZXR1cm59dmFyIGw9dGhpcy5hcmVhLng7dmFyIGo9dGhpcy5hcmVhLnkrZlswXSp0aGlzLmFy
ZWEuaDtiLmJlZ2luUGF0aCgpO2IubW92ZVRvKGwsaik7Yi5saW5lVG8obC10aGlzLm9wdGlvbnMu
YXhpc1RpY2tTaXplLGopO2IuY2xvc2VQYXRoKCk7Yi5zdHJva2UoKTt2YXIgaz1kKGZbMV0pO3Zh
ciBoPShqLXRoaXMub3B0aW9ucy5heGlzTGFiZWxGb250U2l6ZS8yKTtpZihoPDApe2g9MH1pZiho
K3RoaXMub3B0aW9ucy5heGlzTGFiZWxGb250U2l6ZSszPnRoaXMuaGVpZ2h0KXtrLnN0eWxlLmJv
dHRvbT0iMHB4In1lbHNle2suc3R5bGUudG9wPWgrInB4In1rLnN0eWxlLmxlZnQ9IjBweCI7ay5z
dHlsZS50ZXh0QWxpZ249InJpZ2h0IjtrLnN0eWxlLndpZHRoPXRoaXMub3B0aW9ucy55QXhpc0xh
YmVsV2lkdGgrInB4Ijt0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChrKTt0aGlzLnlsYWJlbHMu
cHVzaChrKX12YXIgbT10aGlzLnlsYWJlbHNbMF07dmFyIG49dGhpcy5vcHRpb25zLmF4aXNMYWJl
bEZvbnRTaXplO3ZhciBhPXBhcnNlSW50KG0uc3R5bGUudG9wKStuO2lmKGE+dGhpcy5oZWlnaHQt
bil7bS5zdHlsZS50b3A9KHBhcnNlSW50KG0uc3R5bGUudG9wKS1uLzIpKyJweCJ9fWIuYmVnaW5Q
YXRoKCk7Yi5tb3ZlVG8odGhpcy5hcmVhLngsdGhpcy5hcmVhLnkpO2IubGluZVRvKHRoaXMuYXJl
YS54LHRoaXMuYXJlYS55K3RoaXMuYXJlYS5oKTtiLmNsb3NlUGF0aCgpO2Iuc3Ryb2tlKCl9aWYo
dGhpcy5vcHRpb25zLmRyYXdYQXhpcyl7aWYodGhpcy5sYXlvdXQueHRpY2tzKXtmb3IodmFyIGU9
MDtlPHRoaXMubGF5b3V0Lnh0aWNrcy5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLmxheW91dC54dGlj
a3NbZV07aWYodHlwZW9mKGRhdGFzZXQpPT0iZnVuY3Rpb24iKXtyZXR1cm59dmFyIGw9dGhpcy5h
cmVhLngrZlswXSp0aGlzLmFyZWEudzt2YXIgaj10aGlzLmFyZWEueSt0aGlzLmFyZWEuaDtiLmJl
Z2luUGF0aCgpO2IubW92ZVRvKGwsaik7Yi5saW5lVG8obCxqK3RoaXMub3B0aW9ucy5heGlzVGlj
a1NpemUpO2IuY2xvc2VQYXRoKCk7Yi5zdHJva2UoKTt2YXIgaz1kKGZbMV0pO2suc3R5bGUudGV4
dEFsaWduPSJjZW50ZXIiO2suc3R5bGUuYm90dG9tPSIwcHgiO3ZhciBjPShsLXRoaXMub3B0aW9u
cy5heGlzTGFiZWxXaWR0aC8yKTtpZihjK3RoaXMub3B0aW9ucy5heGlzTGFiZWxXaWR0aD50aGlz
LndpZHRoKXtjPXRoaXMud2lkdGgtdGhpcy5vcHRpb25zLnhBeGlzTGFiZWxXaWR0aDtrLnN0eWxl
LnRleHRBbGlnbj0icmlnaHQifWlmKGM8MCl7Yz0wO2suc3R5bGUudGV4dEFsaWduPSJsZWZ0In1r
LnN0eWxlLmxlZnQ9YysicHgiO2suc3R5bGUud2lkdGg9dGhpcy5vcHRpb25zLnhBeGlzTGFiZWxX
aWR0aCsicHgiO3RoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGspO3RoaXMueGxhYmVscy5wdXNo
KGspfX1iLmJlZ2luUGF0aCgpO2IubW92ZVRvKHRoaXMuYXJlYS54LHRoaXMuYXJlYS55K3RoaXMu
YXJlYS5oKTtiLmxpbmVUbyh0aGlzLmFyZWEueCt0aGlzLmFyZWEudyx0aGlzLmFyZWEueSt0aGlz
LmFyZWEuaCk7Yi5jbG9zZVBhdGgoKTtiLnN0cm9rZSgpfWIucmVzdG9yZSgpfTtEeWdyYXBoQ2Fu
dmFzUmVuZGVyZXIucHJvdG90eXBlLl9yZW5kZXJBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3ZhciBo
PXtwb3NpdGlvbjoiYWJzb2x1dGUiLGZvbnRTaXplOnRoaXMub3B0aW9ucy5heGlzTGFiZWxGb250
U2l6ZSsicHgiLHpJbmRleDoxMCxvdmVyZmxvdzoiaGlkZGVuIn07dmFyIGo9ZnVuY3Rpb24ocSxy
LHMsYSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBwPXMuYW5ub3RhdGlvbjtpZihwLmhhc093blBy
b3BlcnR5KHEpKXtwW3FdKHAscyxhLmR5Z3JhcGhfLHQpfWVsc2V7aWYoYS5keWdyYXBoXy5hdHRy
XyhyKSl7YS5keWdyYXBoXy5hdHRyXyhyKShwLHMsYS5keWdyYXBoXyx0KX19fX07dmFyIG09dGhp
cy5sYXlvdXQuYW5ub3RhdGVkX3BvaW50cztmb3IodmFyIGc9MDtnPG0ubGVuZ3RoO2crKyl7dmFy
IGU9bVtnXTtpZihlLmNhbnZhc3g8dGhpcy5hcmVhLnh8fGUuY2FudmFzeD50aGlzLmFyZWEueCt0
aGlzLmFyZWEudyl7Y29udGludWV9dmFyIGs9ZS5hbm5vdGF0aW9uO3ZhciBsPTY7aWYoay5oYXNP
d25Qcm9wZXJ0eSgidGlja0hlaWdodCIpKXtsPWsudGlja0hlaWdodH12YXIgYz1kb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTtmb3IodmFyIGIgaW4gaCl7aWYoaC5oYXNPd25Qcm9wZXJ0eShi
KSl7Yy5zdHlsZVtiXT1oW2JdfX1pZighay5oYXNPd25Qcm9wZXJ0eSgiaWNvbiIpKXtjLmNsYXNz
TmFtZT0iZHlncmFwaERlZmF1bHRBbm5vdGF0aW9uIn1pZihrLmhhc093blByb3BlcnR5KCJjc3ND
bGFzcyIpKXtjLmNsYXNzTmFtZSs9IiAiK2suY3NzQ2xhc3N9dmFyIGQ9ay5oYXNPd25Qcm9wZXJ0
eSgid2lkdGgiKT9rLndpZHRoOjE2O3ZhciBuPWsuaGFzT3duUHJvcGVydHkoImhlaWdodCIpP2su
aGVpZ2h0OjE2O2lmKGsuaGFzT3duUHJvcGVydHkoImljb24iKSl7dmFyIGY9ZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiaW1nIik7Zi5zcmM9ay5pY29uO2Yud2lkdGg9ZDtmLmhlaWdodD1uO2MuYXBw
ZW5kQ2hpbGQoZil9ZWxzZXtpZihlLmFubm90YXRpb24uaGFzT3duUHJvcGVydHkoInNob3J0VGV4
dCIpKXtjLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUuYW5ub3RhdGlvbi5z
aG9ydFRleHQpKX19Yy5zdHlsZS5sZWZ0PShlLmNhbnZhc3gtZC8yKSsicHgiO2lmKGsuYXR0YWNo
QXRCb3R0b20pe2Muc3R5bGUudG9wPSh0aGlzLmFyZWEuaC1uLWwpKyJweCJ9ZWxzZXtjLnN0eWxl
LnRvcD0oZS5jYW52YXN5LW4tbCkrInB4In1jLnN0eWxlLndpZHRoPWQrInB4IjtjLnN0eWxlLmhl
aWdodD1uKyJweCI7Yy50aXRsZT1lLmFubm90YXRpb24udGV4dDtjLnN0eWxlLmNvbG9yPXRoaXMu
Y29sb3JzW2UubmFtZV07Yy5zdHlsZS5ib3JkZXJDb2xvcj10aGlzLmNvbG9yc1tlLm5hbWVdO2su
ZGl2PWM7RHlncmFwaC5hZGRFdmVudChjLCJjbGljayIsaigiY2xpY2tIYW5kbGVyIiwiYW5ub3Rh
dGlvbkNsaWNrSGFuZGxlciIsZSx0aGlzKSk7RHlncmFwaC5hZGRFdmVudChjLCJtb3VzZW92ZXIi
LGooIm1vdXNlT3ZlckhhbmRsZXIiLCJhbm5vdGF0aW9uTW91c2VPdmVySGFuZGxlciIsZSx0aGlz
KSk7RHlncmFwaC5hZGRFdmVudChjLCJtb3VzZW91dCIsaigibW91c2VPdXRIYW5kbGVyIiwiYW5u
b3RhdGlvbk1vdXNlT3V0SGFuZGxlciIsZSx0aGlzKSk7RHlncmFwaC5hZGRFdmVudChjLCJkYmxj
bGljayIsaigiZGJsQ2xpY2tIYW5kbGVyIiwiYW5ub3RhdGlvbkRibENsaWNrSGFuZGxlciIsZSx0
aGlzKSk7dGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoYyk7dGhpcy5hbm5vdGF0aW9ucy5wdXNo
KGMpO3ZhciBvPXRoaXMuZWxlbWVudC5nZXRDb250ZXh0KCIyZCIpO28uc3Ryb2tlU3R5bGU9dGhp
cy5jb2xvcnNbZS5uYW1lXTtvLmJlZ2luUGF0aCgpO2lmKCFrLmF0dGFjaEF0Qm90dG9tKXtvLm1v
dmVUbyhlLmNhbnZhc3gsZS5jYW52YXN5KTtvLmxpbmVUbyhlLmNhbnZhc3gsZS5jYW52YXN5LTIt
bCl9ZWxzZXtvLm1vdmVUbyhlLmNhbnZhc3gsdGhpcy5hcmVhLmgpO28ubGluZVRvKGUuY2FudmFz
eCx0aGlzLmFyZWEuaC0yLWwpfW8uY2xvc2VQYXRoKCk7by5zdHJva2UoKX19O0R5Z3JhcGhDYW52
YXNSZW5kZXJlci5wcm90b3R5cGUuX3JlbmRlckxpbmVDaGFydD1mdW5jdGlvbigpe3ZhciBjPXRo
aXMuZWxlbWVudC5nZXRDb250ZXh0KCIyZCIpO3ZhciBmPXRoaXMub3B0aW9ucy5jb2xvclNjaGVt
ZS5sZW5ndGg7dmFyIG89dGhpcy5vcHRpb25zLmNvbG9yU2NoZW1lO3ZhciB6PXRoaXMub3B0aW9u
cy5maWxsQWxwaGE7dmFyIEU9dGhpcy5sYXlvdXQub3B0aW9ucy5lcnJvckJhcnM7dmFyIHQ9dGhp
cy5sYXlvdXQub3B0aW9ucy5maWxsR3JhcGg7dmFyIGQ9dGhpcy5sYXlvdXQub3B0aW9ucy5zdGFj
a2VkR3JhcGg7dmFyIGw9dGhpcy5sYXlvdXQub3B0aW9ucy5zdGVwUGxvdDt2YXIgRz1bXTtmb3Io
dmFyIEggaW4gdGhpcy5sYXlvdXQuZGF0YXNldHMpe2lmKHRoaXMubGF5b3V0LmRhdGFzZXRzLmhh
c093blByb3BlcnR5KEgpKXtHLnB1c2goSCl9fXZhciBBPUcubGVuZ3RoO3RoaXMuY29sb3JzPXt9
O2Zvcih2YXIgQz0wO0M8QTtDKyspe3RoaXMuY29sb3JzW0dbQ11dPW9bQyVmXX1mb3IodmFyIEM9
MDtDPHRoaXMubGF5b3V0LnBvaW50cy5sZW5ndGg7QysrKXt2YXIgdj10aGlzLmxheW91dC5wb2lu
dHNbQ107di5jYW52YXN4PXRoaXMuYXJlYS53KnYueCt0aGlzLmFyZWEueDt2LmNhbnZhc3k9dGhp
cy5hcmVhLmgqdi55K3RoaXMuYXJlYS55fXZhciBwPWZ1bmN0aW9uKGope3JldHVybiBqJiYhaXNO
YU4oail9O3ZhciB1PWM7aWYoRSl7aWYodCl7dGhpcy5keWdyYXBoXy53YXJuKCJDYW4ndCB1c2Ug
ZmlsbEdyYXBoIG9wdGlvbiB3aXRoIGVycm9yIGJhcnMiKX1mb3IodmFyIEM9MDtDPEE7QysrKXt2
YXIgaz1HW0NdO3ZhciB4PXRoaXMuY29sb3JzW2tdO3Uuc2F2ZSgpO3ZhciBoPU5hTjt2YXIgZT1O
YU47dmFyIGc9Wy0xLC0xXTt2YXIgRD10aGlzLmxheW91dC55c2NhbGU7dmFyIGE9bmV3IFJHQkNv
bG9yKHgpO3ZhciBGPSJyZ2JhKCIrYS5yKyIsIithLmcrIiwiK2EuYisiLCIreisiKSI7dS5maWxs
U3R5bGU9Rjt1LmJlZ2luUGF0aCgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sYXlvdXQucG9pbnRzLmxl
bmd0aDt5Kyspe3ZhciB2PXRoaXMubGF5b3V0LnBvaW50c1t5XTtpZih2Lm5hbWU9PWspe2lmKCFw
KHYueSkpe2g9TmFOO2NvbnRpbnVlfWlmKGwpe3ZhciByPVtlLXYuZXJyb3JQbHVzKkQsZSt2LmVy
cm9yTWludXMqRF07ZT12Lnl9ZWxzZXt2YXIgcj1bdi55LXYuZXJyb3JQbHVzKkQsdi55K3YuZXJy
b3JNaW51cypEXX1yWzBdPXRoaXMuYXJlYS5oKnJbMF0rdGhpcy5hcmVhLnk7clsxXT10aGlzLmFy
ZWEuaCpyWzFdK3RoaXMuYXJlYS55O2lmKCFpc05hTihoKSl7aWYobCl7dS5tb3ZlVG8oaCxyWzBd
KX1lbHNle3UubW92ZVRvKGgsZ1swXSl9dS5saW5lVG8odi5jYW52YXN4LHJbMF0pO3UubGluZVRv
KHYuY2FudmFzeCxyWzFdKTtpZihsKXt1LmxpbmVUbyhoLHJbMV0pfWVsc2V7dS5saW5lVG8oaCxn
WzFdKX11LmNsb3NlUGF0aCgpfWc9cjtoPXYuY2FudmFzeH19dS5maWxsKCl9fWVsc2V7aWYodCl7
dmFyIGI9MSt0aGlzLmxheW91dC5taW55dmFsKnRoaXMubGF5b3V0LnlzY2FsZTtpZihiPDApe2I9
MH1lbHNle2lmKGI+MSl7Yj0xfX1iPXRoaXMuYXJlYS5oKmIrdGhpcy5hcmVhLnk7dmFyIHE9W107
Zm9yKHZhciBDPUEtMTtDPj0wO0MtLSl7dmFyIGs9R1tDXTt2YXIgeD10aGlzLmNvbG9yc1trXTt1
LnNhdmUoKTt2YXIgaD1OYU47dmFyIGc9Wy0xLC0xXTt2YXIgRD10aGlzLmxheW91dC55c2NhbGU7
dmFyIGE9bmV3IFJHQkNvbG9yKHgpO3ZhciBGPSJyZ2JhKCIrYS5yKyIsIithLmcrIiwiK2EuYisi
LCIreisiKSI7dS5maWxsU3R5bGU9Rjt1LmJlZ2luUGF0aCgpO2Zvcih2YXIgeT0wO3k8dGhpcy5s
YXlvdXQucG9pbnRzLmxlbmd0aDt5Kyspe3ZhciB2PXRoaXMubGF5b3V0LnBvaW50c1t5XTtpZih2
Lm5hbWU9PWspe2lmKCFwKHYueSkpe2g9TmFOO2NvbnRpbnVlfXZhciByO2lmKGQpe2xhc3RZPXFb
di5jYW52YXN4XTtpZihsYXN0WT09PXVuZGVmaW5lZCl7bGFzdFk9Yn1xW3YuY2FudmFzeF09di5j
YW52YXN5O3I9W3YuY2FudmFzeSxsYXN0WV19ZWxzZXtyPVt2LmNhbnZhc3ksYl19aWYoIWlzTmFO
KGgpKXt1Lm1vdmVUbyhoLGdbMF0pO2lmKGwpe3UubGluZVRvKHYuY2FudmFzeCxnWzBdKX1lbHNl
e3UubGluZVRvKHYuY2FudmFzeCxyWzBdKX11LmxpbmVUbyh2LmNhbnZhc3gsclsxXSk7dS5saW5l
VG8oaCxnWzFdKTt1LmNsb3NlUGF0aCgpfWc9cjtoPXYuY2FudmFzeH19dS5maWxsKCl9fX1mb3Io
dmFyIEM9MDtDPEE7QysrKXt2YXIgaz1HW0NdO3ZhciB4PXRoaXMuY29sb3JzW2tdO3ZhciBzPXRo
aXMuZHlncmFwaF8uYXR0cl8oInN0cm9rZVdpZHRoIixrKTtjLnNhdmUoKTt2YXIgdj10aGlzLmxh
eW91dC5wb2ludHNbMF07dmFyIG09dGhpcy5keWdyYXBoXy5hdHRyXygicG9pbnRTaXplIixrKTt2
YXIgaD1udWxsLGU9bnVsbDt2YXIgdz10aGlzLmR5Z3JhcGhfLmF0dHJfKCJkcmF3UG9pbnRzIixr
KTt2YXIgQj10aGlzLmxheW91dC5wb2ludHM7Zm9yKHZhciB5PTA7eTxCLmxlbmd0aDt5Kyspe3Zh
ciB2PUJbeV07aWYodi5uYW1lPT1rKXtpZighcCh2LmNhbnZhc3kpKXtoPWU9bnVsbH1lbHNle3Zh
ciBuPSghaCYmKHk9PUIubGVuZ3RoLTF8fCFwKEJbeSsxXS5jYW52YXN5KSkpO2lmKCFoKXtoPXYu
Y2FudmFzeDtlPXYuY2FudmFzeX1lbHNle2lmKHMpe3UuYmVnaW5QYXRoKCk7dS5zdHJva2VTdHls
ZT14O3UubGluZVdpZHRoPXM7dS5tb3ZlVG8oaCxlKTtpZihsKXt1LmxpbmVUbyh2LmNhbnZhc3gs
ZSl9aD12LmNhbnZhc3g7ZT12LmNhbnZhc3k7dS5saW5lVG8oaCxlKTt1LnN0cm9rZSgpfX1pZih3
fHxuKXt1LmJlZ2luUGF0aCgpO3UuZmlsbFN0eWxlPXg7dS5hcmModi5jYW52YXN4LHYuY2FudmFz
eSxtLDAsMipNYXRoLlBJLGZhbHNlKTt1LmZpbGwoKX19fX19Yy5yZXN0b3JlKCl9O0R5Z3JhcGg9
ZnVuY3Rpb24oYyxiLGEpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MCl7aWYoYXJndW1lbnRzLmxlbmd0
aD09NCl7dGhpcy53YXJuKCJVc2luZyBkZXByZWNhdGVkIGZvdXItYXJndW1lbnQgZHlncmFwaCBj
b25zdHJ1Y3RvciIpO3RoaXMuX19vbGRfaW5pdF9fKGMsYixhcmd1bWVudHNbMl0sYXJndW1lbnRz
WzNdKX1lbHNle3RoaXMuX19pbml0X18oYyxiLGEpfX19O0R5Z3JhcGguTkFNRT0iRHlncmFwaCI7
RHlncmFwaC5WRVJTSU9OPSIxLjIiO0R5Z3JhcGguX19yZXByX189ZnVuY3Rpb24oKXtyZXR1cm4i
WyIrdGhpcy5OQU1FKyIgIit0aGlzLlZFUlNJT04rIl0ifTtEeWdyYXBoLnRvU3RyaW5nPWZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMuX19yZXByX18oKX07RHlncmFwaC5ERUZBVUxUX1JPTExfUEVSSU9E
PTE7RHlncmFwaC5ERUZBVUxUX1dJRFRIPTQ4MDtEeWdyYXBoLkRFRkFVTFRfSEVJR0hUPTMyMDtE
eWdyYXBoLkFYSVNfTElORV9XSURUSD0wLjM7RHlncmFwaC5ERUZBVUxUX0FUVFJTPXtoaWdobGln
aHRDaXJjbGVTaXplOjMscGl4ZWxzUGVyWExhYmVsOjYwLHBpeGVsc1BlcllMYWJlbDozMCxsYWJl
bHNEaXZXaWR0aDoyNTAsbGFiZWxzRGl2U3R5bGVzOnt9LGxhYmVsc1NlcGFyYXRlTGluZXM6ZmFs
c2UsbGFiZWxzU2hvd1plcm9WYWx1ZXM6dHJ1ZSxsYWJlbHNLTUI6ZmFsc2UsbGFiZWxzS01HMjpm
YWxzZSxzaG93TGFiZWxzT25IaWdobGlnaHQ6dHJ1ZSx5VmFsdWVGb3JtYXR0ZXI6ZnVuY3Rpb24o
YSl7cmV0dXJuIER5Z3JhcGgucm91bmRfKGEsMil9LHN0cm9rZVdpZHRoOjEsYXhpc1RpY2tTaXpl
OjMsYXhpc0xhYmVsRm9udFNpemU6MTQseEF4aXNMYWJlbFdpZHRoOjUwLHlBeGlzTGFiZWxXaWR0
aDo1MCx4QXhpc0xhYmVsRm9ybWF0dGVyOkR5Z3JhcGguZGF0ZUF4aXNGb3JtYXR0ZXIscmlnaHRH
YXA6NSxzaG93Um9sbGVyOmZhbHNlLHhWYWx1ZUZvcm1hdHRlcjpEeWdyYXBoLmRhdGVTdHJpbmdf
LHhWYWx1ZVBhcnNlcjpEeWdyYXBoLmRhdGVQYXJzZXIseFRpY2tlcjpEeWdyYXBoLmRhdGVUaWNr
ZXIsZGVsaW1pdGVyOiIsIixsb2dTY2FsZTpmYWxzZSxzaWdtYToyLGVycm9yQmFyczpmYWxzZSxm
cmFjdGlvbnM6ZmFsc2Usd2lsc29uSW50ZXJ2YWw6dHJ1ZSxjdXN0b21CYXJzOmZhbHNlLGZpbGxH
cmFwaDpmYWxzZSxmaWxsQWxwaGE6MC4xNSxjb25uZWN0U2VwYXJhdGVkUG9pbnRzOmZhbHNlLHN0
YWNrZWRHcmFwaDpmYWxzZSxoaWRlT3ZlcmxheU9uTW91c2VPdXQ6dHJ1ZSxzdGVwUGxvdDpmYWxz
ZX07RHlncmFwaC5ERUJVRz0xO0R5Z3JhcGguSU5GTz0yO0R5Z3JhcGguV0FSTklORz0zO0R5Z3Jh
cGguRVJST1I9MztEeWdyYXBoLmFkZGVkQW5ub3RhdGlvbkNTUz1mYWxzZTtEeWdyYXBoLnByb3Rv
dHlwZS5fX29sZF9pbml0X189ZnVuY3Rpb24oZixkLGUsYil7aWYoZSE9bnVsbCl7dmFyIGE9WyJE
YXRlIl07Zm9yKHZhciBjPTA7YzxlLmxlbmd0aDtjKyspe2EucHVzaChlW2NdKX1EeWdyYXBoLnVw
ZGF0ZShiLHtsYWJlbHM6YX0pfXRoaXMuX19pbml0X18oZixkLGIpfTtEeWdyYXBoLnByb3RvdHlw
ZS5fX2luaXRfXz1mdW5jdGlvbihjLGIsYSl7aWYoYT09bnVsbCl7YT17fX10aGlzLm1haW5kaXZf
PWM7dGhpcy5maWxlXz1iO3RoaXMucm9sbFBlcmlvZF89YS5yb2xsUGVyaW9kfHxEeWdyYXBoLkRF
RkFVTFRfUk9MTF9QRVJJT0Q7dGhpcy5wcmV2aW91c1ZlcnRpY2FsWF89LTE7dGhpcy5mcmFjdGlv
bnNfPWEuZnJhY3Rpb25zfHxmYWxzZTt0aGlzLmRhdGVXaW5kb3dfPWEuZGF0ZVdpbmRvd3x8bnVs
bDt0aGlzLnZhbHVlUmFuZ2VfPWEudmFsdWVSYW5nZXx8bnVsbDt0aGlzLndpbHNvbkludGVydmFs
Xz1hLndpbHNvbkludGVydmFsfHx0cnVlO3RoaXMuaXNfaW5pdGlhbF9kcmF3Xz10cnVlO3RoaXMu
YW5ub3RhdGlvbnNfPVtdO2MuaW5uZXJIVE1MPSIiO2lmKGMuc3R5bGUud2lkdGg9PSIiKXtjLnN0
eWxlLndpZHRoPWEud2lkdGh8fER5Z3JhcGguREVGQVVMVF9XSURUSCsicHgifWlmKGMuc3R5bGUu
aGVpZ2h0PT0iIil7Yy5zdHlsZS5oZWlnaHQ9YS5oZWlnaHR8fER5Z3JhcGguREVGQVVMVF9IRUlH
SFQrInB4In10aGlzLndpZHRoXz1wYXJzZUludChjLnN0eWxlLndpZHRoLDEwKTt0aGlzLmhlaWdo
dF89cGFyc2VJbnQoYy5zdHlsZS5oZWlnaHQsMTApO2lmKGMuc3R5bGUud2lkdGguaW5kZXhPZigi
JSIpPT1jLnN0eWxlLndpZHRoLmxlbmd0aC0xKXt0aGlzLndpZHRoXz1jLm9mZnNldFdpZHRofWlm
KGMuc3R5bGUuaGVpZ2h0LmluZGV4T2YoIiUiKT09Yy5zdHlsZS5oZWlnaHQubGVuZ3RoLTEpe3Ro
aXMuaGVpZ2h0Xz1jLm9mZnNldEhlaWdodH1pZih0aGlzLndpZHRoXz09MCl7dGhpcy5lcnJvcigi
ZHlncmFwaCBoYXMgemVybyB3aWR0aC4gUGxlYXNlIHNwZWNpZnkgYSB3aWR0aCBpbiBwaXhlbHMu
Iil9aWYodGhpcy5oZWlnaHRfPT0wKXt0aGlzLmVycm9yKCJkeWdyYXBoIGhhcyB6ZXJvIGhlaWdo
dC4gUGxlYXNlIHNwZWNpZnkgYSBoZWlnaHQgaW4gcGl4ZWxzLiIpfWlmKGEuc3RhY2tlZEdyYXBo
KXthLmZpbGxHcmFwaD10cnVlfXRoaXMudXNlcl9hdHRyc189e307RHlncmFwaC51cGRhdGUodGhp
cy51c2VyX2F0dHJzXyxhKTt0aGlzLmF0dHJzXz17fTtEeWdyYXBoLnVwZGF0ZSh0aGlzLmF0dHJz
XyxEeWdyYXBoLkRFRkFVTFRfQVRUUlMpO3RoaXMuYm91bmRhcnlJZHNfPVtdO3RoaXMubGFiZWxz
RnJvbUNTVl89KHRoaXMuYXR0cl8oImxhYmVscyIpPT1udWxsKTtEeWdyYXBoLmFkZEFubm90YXRp
b25SdWxlKCk7dGhpcy5jcmVhdGVJbnRlcmZhY2VfKCk7dGhpcy5zdGFydF8oKX07RHlncmFwaC5w
cm90b3R5cGUuYXR0cl89ZnVuY3Rpb24oYixhKXtpZihhJiZ0eXBlb2YodGhpcy51c2VyX2F0dHJz
X1thXSkhPSJ1bmRlZmluZWQiJiZ0aGlzLnVzZXJfYXR0cnNfW2FdIT1udWxsJiZ0eXBlb2YodGhp
cy51c2VyX2F0dHJzX1thXVtiXSkhPSJ1bmRlZmluZWQiKXtyZXR1cm4gdGhpcy51c2VyX2F0dHJz
X1thXVtiXX1lbHNle2lmKHR5cGVvZih0aGlzLnVzZXJfYXR0cnNfW2JdKSE9InVuZGVmaW5lZCIp
e3JldHVybiB0aGlzLnVzZXJfYXR0cnNfW2JdfWVsc2V7aWYodHlwZW9mKHRoaXMuYXR0cnNfW2Jd
KSE9InVuZGVmaW5lZCIpe3JldHVybiB0aGlzLmF0dHJzX1tiXX1lbHNle3JldHVybiBudWxsfX19
fTtEeWdyYXBoLnByb3RvdHlwZS5sb2c9ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YoY29uc29sZSkh
PSJ1bmRlZmluZWQiKXtzd2l0Y2goYSl7Y2FzZSBEeWdyYXBoLkRFQlVHOmNvbnNvbGUuZGVidWco
ImR5Z3JhcGhzOiAiK2IpO2JyZWFrO2Nhc2UgRHlncmFwaC5JTkZPOmNvbnNvbGUuaW5mbygiZHln
cmFwaHM6ICIrYik7YnJlYWs7Y2FzZSBEeWdyYXBoLldBUk5JTkc6Y29uc29sZS53YXJuKCJkeWdy
YXBoczogIitiKTticmVhaztjYXNlIER5Z3JhcGguRVJST1I6Y29uc29sZS5lcnJvcigiZHlncmFw
aHM6ICIrYik7YnJlYWt9fX07RHlncmFwaC5wcm90b3R5cGUuaW5mbz1mdW5jdGlvbihhKXt0aGlz
LmxvZyhEeWdyYXBoLklORk8sYSl9O0R5Z3JhcGgucHJvdG90eXBlLndhcm49ZnVuY3Rpb24oYSl7
dGhpcy5sb2coRHlncmFwaC5XQVJOSU5HLGEpfTtEeWdyYXBoLnByb3RvdHlwZS5lcnJvcj1mdW5j
dGlvbihhKXt0aGlzLmxvZyhEeWdyYXBoLkVSUk9SLGEpfTtEeWdyYXBoLnByb3RvdHlwZS5yb2xs
UGVyaW9kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9sbFBlcmlvZF99O0R5Z3JhcGgucHJvdG90
eXBlLnhBeGlzUmFuZ2U9ZnVuY3Rpb24oKXtpZih0aGlzLmRhdGVXaW5kb3dfKXtyZXR1cm4gdGhp
cy5kYXRlV2luZG93X312YXIgYj10aGlzLnJhd0RhdGFfWzBdWzBdO3ZhciBhPXRoaXMucmF3RGF0
YV9bdGhpcy5yYXdEYXRhXy5sZW5ndGgtMV1bMF07cmV0dXJuW2IsYV19O0R5Z3JhcGgucHJvdG90
eXBlLnlBeGlzUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5ZWRZUmFuZ2VffTtE
eWdyYXBoLnByb3RvdHlwZS50b0RvbUNvb3Jkcz1mdW5jdGlvbihiLGYpe3ZhciBjPVtudWxsLG51
bGxdO3ZhciBkPXRoaXMucGxvdHRlcl8uYXJlYTtpZihiIT09bnVsbCl7dmFyIGE9dGhpcy54QXhp
c1JhbmdlKCk7Y1swXT1kLngrKGItYVswXSkvKGFbMV0tYVswXSkqZC53fWlmKGYhPT1udWxsKXt2
YXIgZT10aGlzLnlBeGlzUmFuZ2UoKTtjWzFdPWQueSsoZVsxXS1mKS8oZVsxXS1lWzBdKSpkLmh9
cmV0dXJuIGN9O0R5Z3JhcGgucHJvdG90eXBlLnRvRGF0YUNvb3Jkcz1mdW5jdGlvbihiLGYpe3Zh
ciBjPVtudWxsLG51bGxdO3ZhciBkPXRoaXMucGxvdHRlcl8uYXJlYTtpZihiIT09bnVsbCl7dmFy
IGE9dGhpcy54QXhpc1JhbmdlKCk7Y1swXT1hWzBdKyhiLWQueCkvZC53KihhWzFdLWFbMF0pfWlm
KGYhPT1udWxsKXt2YXIgZT10aGlzLnlBeGlzUmFuZ2UoKTtjWzFdPWVbMF0rKGQuaC1mKS9kLmgq
KGVbMV0tZVswXSl9cmV0dXJuIGN9O0R5Z3JhcGgucHJvdG90eXBlLm51bUNvbHVtbnM9ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy5yYXdEYXRhX1swXS5sZW5ndGh9O0R5Z3JhcGgucHJvdG90eXBlLm51
bVJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYXdEYXRhXy5sZW5ndGh9O0R5Z3JhcGgucHJv
dG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKGIsYSl7aWYoYjwwfHxiPnRoaXMucmF3RGF0YV8ubGVu
Z3RoKXtyZXR1cm4gbnVsbH1pZihhPDB8fGE+dGhpcy5yYXdEYXRhX1tiXS5sZW5ndGgpe3JldHVy
biBudWxsfXJldHVybiB0aGlzLnJhd0RhdGFfW2JdW2FdfTtEeWdyYXBoLmFkZEV2ZW50PWZ1bmN0
aW9uKGMsYSxiKXt2YXIgZD1mdW5jdGlvbihmKXtpZighZil7dmFyIGY9d2luZG93LmV2ZW50fWIo
Zil9O2lmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtjLmFkZEV2ZW50TGlzdGVuZXIoYSxkLGZh
bHNlKX1lbHNle2MuYXR0YWNoRXZlbnQoIm9uIithLGQpfX07RHlncmFwaC5jbGlwQ2FudmFzXz1m
dW5jdGlvbihiLGMpe3ZhciBhPWIuZ2V0Q29udGV4dCgiMmQiKTthLmJlZ2luUGF0aCgpO2EucmVj
dChjLmxlZnQsYy50b3AsYy53aWR0aCxjLmhlaWdodCk7YS5jbGlwKCl9O0R5Z3JhcGgucHJvdG90
eXBlLmNyZWF0ZUludGVyZmFjZV89ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm1haW5kaXZfO3RoaXMu
Z3JhcGhEaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5ncmFwaERpdi5zdHls
ZS53aWR0aD10aGlzLndpZHRoXysicHgiO3RoaXMuZ3JhcGhEaXYuc3R5bGUuaGVpZ2h0PXRoaXMu
aGVpZ2h0XysicHgiO2EuYXBwZW5kQ2hpbGQodGhpcy5ncmFwaERpdik7dmFyIGM9e3RvcDowLGxl
ZnQ6dGhpcy5hdHRyXygieUF4aXNMYWJlbFdpZHRoIikrMip0aGlzLmF0dHJfKCJheGlzVGlja1Np
emUiKX07Yy53aWR0aD10aGlzLndpZHRoXy1jLmxlZnQtdGhpcy5hdHRyXygicmlnaHRHYXAiKTtj
LmhlaWdodD10aGlzLmhlaWdodF8tdGhpcy5hdHRyXygiYXhpc0xhYmVsRm9udFNpemUiKS0yKnRo
aXMuYXR0cl8oImF4aXNUaWNrU2l6ZSIpO3RoaXMuY2xpcHBpbmdBcmVhXz1jO3RoaXMuY2FudmFz
Xz1EeWdyYXBoLmNyZWF0ZUNhbnZhcygpO3RoaXMuY2FudmFzXy5zdHlsZS5wb3NpdGlvbj0iYWJz
b2x1dGUiO3RoaXMuY2FudmFzXy53aWR0aD10aGlzLndpZHRoXzt0aGlzLmNhbnZhc18uaGVpZ2h0
PXRoaXMuaGVpZ2h0Xzt0aGlzLmNhbnZhc18uc3R5bGUud2lkdGg9dGhpcy53aWR0aF8rInB4Ijt0
aGlzLmNhbnZhc18uc3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0XysicHgiO3RoaXMuaGlkZGVuXz10
aGlzLmNyZWF0ZVBsb3RLaXRDYW52YXNfKHRoaXMuY2FudmFzXyk7dGhpcy5ncmFwaERpdi5hcHBl
bmRDaGlsZCh0aGlzLmhpZGRlbl8pO3RoaXMuZ3JhcGhEaXYuYXBwZW5kQ2hpbGQodGhpcy5jYW52
YXNfKTt0aGlzLm1vdXNlRXZlbnRFbGVtZW50Xz10aGlzLmNhbnZhc187RHlncmFwaC5jbGlwQ2Fu
dmFzXyh0aGlzLmhpZGRlbl8sdGhpcy5jbGlwcGluZ0FyZWFfKTtEeWdyYXBoLmNsaXBDYW52YXNf
KHRoaXMuY2FudmFzXyx0aGlzLmNsaXBwaW5nQXJlYV8pO3ZhciBiPXRoaXM7RHlncmFwaC5hZGRF
dmVudCh0aGlzLm1vdXNlRXZlbnRFbGVtZW50XywibW91c2Vtb3ZlIixmdW5jdGlvbihkKXtiLm1v
dXNlTW92ZV8oZCl9KTtEeWdyYXBoLmFkZEV2ZW50KHRoaXMubW91c2VFdmVudEVsZW1lbnRfLCJt
b3VzZW91dCIsZnVuY3Rpb24oZCl7Yi5tb3VzZU91dF8oZCl9KTt0aGlzLmxheW91dE9wdGlvbnNf
PXt4T3JpZ2luSXNaZXJvOmZhbHNlfTtEeWdyYXBoLnVwZGF0ZSh0aGlzLmxheW91dE9wdGlvbnNf
LHRoaXMuYXR0cnNfKTtEeWdyYXBoLnVwZGF0ZSh0aGlzLmxheW91dE9wdGlvbnNfLHRoaXMudXNl
cl9hdHRyc18pO0R5Z3JhcGgudXBkYXRlKHRoaXMubGF5b3V0T3B0aW9uc18se2Vycm9yQmFyczoo
dGhpcy5hdHRyXygiZXJyb3JCYXJzIil8fHRoaXMuYXR0cl8oImN1c3RvbUJhcnMiKSl9KTt0aGlz
LmxheW91dF89bmV3IER5Z3JhcGhMYXlvdXQodGhpcyx0aGlzLmxheW91dE9wdGlvbnNfKTt0aGlz
LnJlbmRlck9wdGlvbnNfPXtjb2xvclNjaGVtZTp0aGlzLmNvbG9yc18sc3Ryb2tlQ29sb3I6bnVs
bCxheGlzTGluZVdpZHRoOkR5Z3JhcGguQVhJU19MSU5FX1dJRFRIfTtEeWdyYXBoLnVwZGF0ZSh0
aGlzLnJlbmRlck9wdGlvbnNfLHRoaXMuYXR0cnNfKTtEeWdyYXBoLnVwZGF0ZSh0aGlzLnJlbmRl
ck9wdGlvbnNfLHRoaXMudXNlcl9hdHRyc18pO3RoaXMucGxvdHRlcl89bmV3IER5Z3JhcGhDYW52
YXNSZW5kZXJlcih0aGlzLHRoaXMuaGlkZGVuXyx0aGlzLmxheW91dF8sdGhpcy5yZW5kZXJPcHRp
b25zXyk7dGhpcy5jcmVhdGVTdGF0dXNNZXNzYWdlXygpO3RoaXMuY3JlYXRlUm9sbEludGVyZmFj
ZV8oKTt0aGlzLmNyZWF0ZURyYWdJbnRlcmZhY2VfKCl9O0R5Z3JhcGgucHJvdG90eXBlLmRlc3Ry
b3k9ZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbihjKXt3aGlsZShjLmhhc0NoaWxkTm9kZXMoKSl7
YShjLmZpcnN0Q2hpbGQpO2MucmVtb3ZlQ2hpbGQoYy5maXJzdENoaWxkKX19O2EodGhpcy5tYWlu
ZGl2Xyk7dmFyIGI9ZnVuY3Rpb24oYyl7Zm9yKHZhciBkIGluIGMpe2lmKHR5cGVvZihjW2RdKT09
PSJvYmplY3QiKXtjW2RdPW51bGx9fX07Yih0aGlzLmxheW91dF8pO2IodGhpcy5wbG90dGVyXyk7
Yih0aGlzKX07RHlncmFwaC5wcm90b3R5cGUuY3JlYXRlUGxvdEtpdENhbnZhc189ZnVuY3Rpb24o
YSl7dmFyIGI9RHlncmFwaC5jcmVhdGVDYW52YXMoKTtiLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0
ZSI7Yi5zdHlsZS50b3A9YS5zdHlsZS50b3A7Yi5zdHlsZS5sZWZ0PWEuc3R5bGUubGVmdDtiLndp
ZHRoPXRoaXMud2lkdGhfO2IuaGVpZ2h0PXRoaXMuaGVpZ2h0XztiLnN0eWxlLndpZHRoPXRoaXMu
d2lkdGhfKyJweCI7Yi5zdHlsZS5oZWlnaHQ9dGhpcy5oZWlnaHRfKyJweCI7cmV0dXJuIGJ9O0R5
Z3JhcGguaHN2VG9SR0I9ZnVuY3Rpb24oaCxnLGspe3ZhciBjO3ZhciBkO3ZhciBsO2lmKGc9PT0w
KXtjPWs7ZD1rO2w9a31lbHNle3ZhciBlPU1hdGguZmxvb3IoaCo2KTt2YXIgaj0oaCo2KS1lO3Zh
ciBiPWsqKDEtZyk7dmFyIGE9ayooMS0oZypqKSk7dmFyIG09ayooMS0oZyooMS1qKSkpO3N3aXRj
aChlKXtjYXNlIDE6Yz1hO2Q9aztsPWI7YnJlYWs7Y2FzZSAyOmM9YjtkPWs7bD1tO2JyZWFrO2Nh
c2UgMzpjPWI7ZD1hO2w9azticmVhaztjYXNlIDQ6Yz1tO2Q9YjtsPWs7YnJlYWs7Y2FzZSA1OmM9
aztkPWI7bD1hO2JyZWFrO2Nhc2UgNjpjYXNlIDA6Yz1rO2Q9bTtsPWI7YnJlYWt9fWM9TWF0aC5m
bG9vcigyNTUqYyswLjUpO2Q9TWF0aC5mbG9vcigyNTUqZCswLjUpO2w9TWF0aC5mbG9vcigyNTUq
bCswLjUpO3JldHVybiJyZ2IoIitjKyIsIitkKyIsIitsKyIpIn07RHlncmFwaC5wcm90b3R5cGUu
c2V0Q29sb3JzXz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYXR0cl8oImxhYmVscyIpLmxlbmd0aC0x
O3RoaXMuY29sb3JzXz1bXTt2YXIgYT10aGlzLmF0dHJfKCJjb2xvcnMiKTtpZighYSl7dmFyIGM9
dGhpcy5hdHRyXygiY29sb3JTYXR1cmF0aW9uIil8fDE7dmFyIGI9dGhpcy5hdHRyXygiY29sb3JW
YWx1ZSIpfHwwLjU7dmFyIGo9TWF0aC5jZWlsKGUvMik7Zm9yKHZhciBkPTE7ZDw9ZTtkKyspe2lm
KCF0aGlzLnZpc2liaWxpdHkoKVtkLTFdKXtjb250aW51ZX12YXIgZz1kJTI/TWF0aC5jZWlsKGQv
Mik6KGorZC8yKTt2YXIgZj0oMSpnLygxK2UpKTt0aGlzLmNvbG9yc18ucHVzaChEeWdyYXBoLmhz
dlRvUkdCKGYsYyxiKSl9fWVsc2V7Zm9yKHZhciBkPTA7ZDxlO2QrKyl7aWYoIXRoaXMudmlzaWJp
bGl0eSgpW2RdKXtjb250aW51ZX12YXIgaD1hW2QlYS5sZW5ndGhdO3RoaXMuY29sb3JzXy5wdXNo
KGgpfX10aGlzLnJlbmRlck9wdGlvbnNfLmNvbG9yU2NoZW1lPXRoaXMuY29sb3JzXztEeWdyYXBo
LnVwZGF0ZSh0aGlzLnBsb3R0ZXJfLm9wdGlvbnMsdGhpcy5yZW5kZXJPcHRpb25zXyk7RHlncmFw
aC51cGRhdGUodGhpcy5sYXlvdXRPcHRpb25zXyx0aGlzLnVzZXJfYXR0cnNfKTtEeWdyYXBoLnVw
ZGF0ZSh0aGlzLmxheW91dE9wdGlvbnNfLHRoaXMuYXR0cnNfKX07RHlncmFwaC5wcm90b3R5cGUu
Z2V0Q29sb3JzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sb3JzX307RHlncmFwaC5maW5kUG9z
WD1mdW5jdGlvbihhKXt2YXIgYj0wO2lmKGEub2Zmc2V0UGFyZW50KXt3aGlsZSgxKXtiKz1hLm9m
ZnNldExlZnQ7aWYoIWEub2Zmc2V0UGFyZW50KXticmVha31hPWEub2Zmc2V0UGFyZW50fX1lbHNl
e2lmKGEueCl7Yis9YS54fX1yZXR1cm4gYn07RHlncmFwaC5maW5kUG9zWT1mdW5jdGlvbihiKXt2
YXIgYT0wO2lmKGIub2Zmc2V0UGFyZW50KXt3aGlsZSgxKXthKz1iLm9mZnNldFRvcDtpZighYi5v
ZmZzZXRQYXJlbnQpe2JyZWFrfWI9Yi5vZmZzZXRQYXJlbnR9fWVsc2V7aWYoYi55KXthKz1iLnl9
fXJldHVybiBhfTtEeWdyYXBoLnByb3RvdHlwZS5jcmVhdGVTdGF0dXNNZXNzYWdlXz1mdW5jdGlv
bigpe3ZhciBkPXRoaXMudXNlcl9hdHRyc18ubGFiZWxzRGl2O2lmKGQmJm51bGwhPWQmJih0eXBl
b2YoZCk9PSJzdHJpbmcifHxkIGluc3RhbmNlb2YgU3RyaW5nKSl7dGhpcy51c2VyX2F0dHJzXy5s
YWJlbHNEaXY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZCl9aWYoIXRoaXMuYXR0cl8oImxhYmVs
c0RpdiIpKXt2YXIgYT10aGlzLmF0dHJfKCJsYWJlbHNEaXZXaWR0aCIpO3ZhciBjPXtwb3NpdGlv
bjoiYWJzb2x1dGUiLGZvbnRTaXplOiIxNHB4Iix6SW5kZXg6MTAsd2lkdGg6YSsicHgiLHRvcDoi
MHB4IixsZWZ0Oih0aGlzLndpZHRoXy1hLTIpKyJweCIsYmFja2dyb3VuZDoid2hpdGUiLHRleHRB
bGlnbjoibGVmdCIsb3ZlcmZsb3c6ImhpZGRlbiJ9O0R5Z3JhcGgudXBkYXRlKGMsdGhpcy5hdHRy
XygibGFiZWxzRGl2U3R5bGVzIikpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
O2Zvcih2YXIgYiBpbiBjKXtpZihjLmhhc093blByb3BlcnR5KGIpKXtlLnN0eWxlW2JdPWNbYl19
fXRoaXMuZ3JhcGhEaXYuYXBwZW5kQ2hpbGQoZSk7dGhpcy5hdHRyc18ubGFiZWxzRGl2PWV9fTtE
eWdyYXBoLnByb3RvdHlwZS5jcmVhdGVSb2xsSW50ZXJmYWNlXz1mdW5jdGlvbigpe3ZhciBmPXRo
aXMuYXR0cl8oInNob3dSb2xsZXIiKT8iYmxvY2siOiJub25lIjt2YXIgYj17cG9zaXRpb246ImFi
c29sdXRlIix6SW5kZXg6MTAsdG9wOih0aGlzLnBsb3R0ZXJfLmFyZWEuaC0yNSkrInB4IixsZWZ0
Oih0aGlzLnBsb3R0ZXJfLmFyZWEueCsxKSsicHgiLGRpc3BsYXk6Zn07dmFyIGU9ZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiaW5wdXQiKTtlLnR5cGU9InRleHQiO2Uuc2l6ZT0iMiI7ZS52YWx1ZT10
aGlzLnJvbGxQZXJpb2RfO2Zvcih2YXIgYSBpbiBiKXtpZihiLmhhc093blByb3BlcnR5KGEpKXtl
LnN0eWxlW2FdPWJbYV19fXZhciBkPXRoaXMuZ3JhcGhEaXY7ZC5hcHBlbmRDaGlsZChlKTt2YXIg
Yz10aGlzO2Uub25jaGFuZ2U9ZnVuY3Rpb24oKXtjLmFkanVzdFJvbGwoZS52YWx1ZSl9O3JldHVy
biBlfTtEeWdyYXBoLnBhZ2VYPWZ1bmN0aW9uKGMpe2lmKGMucGFnZVgpe3JldHVybighYy5wYWdl
WHx8Yy5wYWdlWDwwKT8wOmMucGFnZVh9ZWxzZXt2YXIgZD1kb2N1bWVudDt2YXIgYT1kb2N1bWVu
dC5ib2R5O3JldHVybiBjLmNsaWVudFgrKGQuc2Nyb2xsTGVmdHx8YS5zY3JvbGxMZWZ0KS0oZC5j
bGllbnRMZWZ0fHwwKX19O0R5Z3JhcGgucGFnZVk9ZnVuY3Rpb24oYyl7aWYoYy5wYWdlWSl7cmV0
dXJuKCFjLnBhZ2VZfHxjLnBhZ2VZPDApPzA6Yy5wYWdlWX1lbHNle3ZhciBkPWRvY3VtZW50O3Zh
ciBhPWRvY3VtZW50LmJvZHk7cmV0dXJuIGMuY2xpZW50WSsoZC5zY3JvbGxUb3B8fGEuc2Nyb2xs
VG9wKS0oZC5jbGllbnRUb3B8fDApfX07RHlncmFwaC5wcm90b3R5cGUuY3JlYXRlRHJhZ0ludGVy
ZmFjZV89ZnVuY3Rpb24oKXt2YXIgbz10aGlzO3ZhciBjPWZhbHNlO3ZhciBlPWZhbHNlO3ZhciBi
PW51bGw7dmFyIGE9bnVsbDt2YXIgbj1udWxsO3ZhciBsPW51bGw7dmFyIGY9bnVsbDt2YXIgbT1u
dWxsO3ZhciBrPW51bGw7dmFyIGc9MDt2YXIgZD0wO3ZhciBqPWZ1bmN0aW9uKHApe3JldHVybiBE
eWdyYXBoLnBhZ2VYKHApLWd9O3ZhciBoPWZ1bmN0aW9uKHApe3JldHVybiBEeWdyYXBoLnBhZ2VZ
KHApLWR9O0R5Z3JhcGguYWRkRXZlbnQodGhpcy5tb3VzZUV2ZW50RWxlbWVudF8sIm1vdXNlbW92
ZSIsZnVuY3Rpb24ocCl7aWYoYyl7bj1qKHApO2w9aChwKTtvLmRyYXdab29tUmVjdF8oYixuLGYp
O2Y9bn1lbHNle2lmKGUpe249aihwKTtsPWgocCk7by5kYXRlV2luZG93X1swXT1tLShuL28ud2lk
dGhfKSprO28uZGF0ZVdpbmRvd19bMV09by5kYXRlV2luZG93X1swXStrO28uZHJhd0dyYXBoXyhv
LnJhd0RhdGFfKX19fSk7RHlncmFwaC5hZGRFdmVudCh0aGlzLm1vdXNlRXZlbnRFbGVtZW50Xywi
bW91c2Vkb3duIixmdW5jdGlvbihwKXtnPUR5Z3JhcGguZmluZFBvc1goby5jYW52YXNfKTtkPUR5
Z3JhcGguZmluZFBvc1koby5jYW52YXNfKTtiPWoocCk7YT1oKHApO2lmKHAuYWx0S2V5fHxwLnNo
aWZ0S2V5KXtpZighby5kYXRlV2luZG93Xyl7cmV0dXJufWU9dHJ1ZTtrPW8uZGF0ZVdpbmRvd19b
MV0tby5kYXRlV2luZG93X1swXTttPShiL28ud2lkdGhfKSprK28uZGF0ZVdpbmRvd19bMF19ZWxz
ZXtjPXRydWV9fSk7RHlncmFwaC5hZGRFdmVudChkb2N1bWVudCwibW91c2V1cCIsZnVuY3Rpb24o
cCl7aWYoY3x8ZSl7Yz1mYWxzZTtiPW51bGw7YT1udWxsfWlmKGUpe2U9ZmFsc2U7bT1udWxsO2s9
bnVsbH19KTtEeWdyYXBoLmFkZEV2ZW50KHRoaXMubW91c2VFdmVudEVsZW1lbnRfLCJtb3VzZW91
dCIsZnVuY3Rpb24ocCl7aWYoYyl7bj1udWxsO2w9bnVsbH19KTtEeWdyYXBoLmFkZEV2ZW50KHRo
aXMubW91c2VFdmVudEVsZW1lbnRfLCJtb3VzZXVwIixmdW5jdGlvbihyKXtpZihjKXtjPWZhbHNl
O249aihyKTtsPWgocik7dmFyIHU9TWF0aC5hYnMobi1iKTt2YXIgcz1NYXRoLmFicyhsLWEpO2lm
KHU8MiYmczwyJiZvLmxhc3R4XyE9dW5kZWZpbmVkJiZvLmxhc3R4XyE9LTEpe2lmKG8uYXR0cl8o
ImNsaWNrQ2FsbGJhY2siKSE9bnVsbCl7by5hdHRyXygiY2xpY2tDYWxsYmFjayIpKHIsby5sYXN0
eF8sby5zZWxQb2ludHNfKX1pZihvLmF0dHJfKCJwb2ludENsaWNrQ2FsbGJhY2siKSl7dmFyIHg9
LTE7dmFyIHk9MDtmb3IodmFyIHY9MDt2PG8uc2VsUG9pbnRzXy5sZW5ndGg7disrKXt2YXIgdD1v
LnNlbFBvaW50c19bdl07dmFyIHE9TWF0aC5wb3codC5jYW52YXN4LW4sMikrTWF0aC5wb3codC5j
YW52YXN5LWwsMik7aWYoeD09LTF8fHE8eSl7eT1xO3g9dn19dmFyIHc9by5hdHRyXygiaGlnaGxp
Z2h0Q2lyY2xlU2l6ZSIpKzI7aWYoeTw9NSo1KXtvLmF0dHJfKCJwb2ludENsaWNrQ2FsbGJhY2si
KShyLG8uc2VsUG9pbnRzX1t4XSl9fX1pZih1Pj0xMCl7by5kb1pvb21fKE1hdGgubWluKGIsbiks
TWF0aC5tYXgoYixuKSl9ZWxzZXtvLmNhbnZhc18uZ2V0Q29udGV4dCgiMmQiKS5jbGVhclJlY3Qo
MCwwLG8uY2FudmFzXy53aWR0aCxvLmNhbnZhc18uaGVpZ2h0KX1iPW51bGw7YT1udWxsfWlmKGUp
e2U9ZmFsc2U7bT1udWxsO2s9bnVsbH19KTtEeWdyYXBoLmFkZEV2ZW50KHRoaXMubW91c2VFdmVu
dEVsZW1lbnRfLCJkYmxjbGljayIsZnVuY3Rpb24ocCl7aWYoby5kYXRlV2luZG93Xz09bnVsbCl7
cmV0dXJufW8uZGF0ZVdpbmRvd189bnVsbDtvLmRyYXdHcmFwaF8oby5yYXdEYXRhXyk7dmFyIHE9
by5yYXdEYXRhX1swXVswXTt2YXIgcj1vLnJhd0RhdGFfW28ucmF3RGF0YV8ubGVuZ3RoLTFdWzBd
O2lmKG8uYXR0cl8oInpvb21DYWxsYmFjayIpKXtvLmF0dHJfKCJ6b29tQ2FsbGJhY2siKShxLHIp
fX0pfTtEeWdyYXBoLnByb3RvdHlwZS5kcmF3Wm9vbVJlY3RfPWZ1bmN0aW9uKGMsZCxiKXt2YXIg
YT10aGlzLmNhbnZhc18uZ2V0Q29udGV4dCgiMmQiKTtpZihiKXthLmNsZWFyUmVjdChNYXRoLm1p
bihjLGIpLDAsTWF0aC5hYnMoYy1iKSx0aGlzLmhlaWdodF8pfWlmKGQmJmMpe2EuZmlsbFN0eWxl
PSJyZ2JhKDEyOCwxMjgsMTI4LDAuMzMpIjthLmZpbGxSZWN0KE1hdGgubWluKGMsZCksMCxNYXRo
LmFicyhkLWMpLHRoaXMuaGVpZ2h0Xyl9fTtEeWdyYXBoLnByb3RvdHlwZS5kb1pvb21fPWZ1bmN0
aW9uKGQsYSl7dmFyIGI9dGhpcy50b0RhdGFDb29yZHMoZCxudWxsKTt2YXIgYz1iWzBdO2I9dGhp
cy50b0RhdGFDb29yZHMoYSxudWxsKTt2YXIgZT1iWzBdO3RoaXMuZGF0ZVdpbmRvd189W2MsZV07
dGhpcy5kcmF3R3JhcGhfKHRoaXMucmF3RGF0YV8pO2lmKHRoaXMuYXR0cl8oInpvb21DYWxsYmFj
ayIpKXt0aGlzLmF0dHJfKCJ6b29tQ2FsbGJhY2siKShjLGUpfX07RHlncmFwaC5wcm90b3R5cGUu
bW91c2VNb3ZlXz1mdW5jdGlvbihiKXt2YXIgYT1EeWdyYXBoLnBhZ2VYKGIpLUR5Z3JhcGguZmlu
ZFBvc1godGhpcy5tb3VzZUV2ZW50RWxlbWVudF8pO3ZhciByPXRoaXMubGF5b3V0Xy5wb2ludHM7
dmFyIG09LTE7dmFyIGo9LTE7dmFyIG89MWUrMTAwO3ZhciBxPS0xO2Zvcih2YXIgZj0wO2Y8ci5s
ZW5ndGg7ZisrKXt2YXIgaD1NYXRoLmFicyhyW2ZdLmNhbnZhc3gtYSk7aWYoaD5vKXtjb250aW51
ZX1vPWg7cT1mfWlmKHE+PTApe209cltxXS54dmFsfWlmKGE+cltyLmxlbmd0aC0xXS5jYW52YXN4
KXttPXJbci5sZW5ndGgtMV0ueHZhbH10aGlzLnNlbFBvaW50c189W107dmFyIGQ9ci5sZW5ndGg7
aWYoIXRoaXMuYXR0cl8oInN0YWNrZWRHcmFwaCIpKXtmb3IodmFyIGY9MDtmPGQ7ZisrKXtpZihy
W2ZdLnh2YWw9PW0pe3RoaXMuc2VsUG9pbnRzXy5wdXNoKHJbZl0pfX19ZWxzZXt2YXIgZz0wO2Zv
cih2YXIgZj1kLTE7Zj49MDtmLS0pe2lmKHJbZl0ueHZhbD09bSl7dmFyIGM9e307Zm9yKHZhciBl
IGluIHJbZl0pe2NbZV09cltmXVtlXX1jLnl2YWwtPWc7Zys9Yy55dmFsO3RoaXMuc2VsUG9pbnRz
Xy5wdXNoKGMpfX10aGlzLnNlbFBvaW50c18ucmV2ZXJzZSgpfWlmKHRoaXMuYXR0cl8oImhpZ2hs
aWdodENhbGxiYWNrIikpe3ZhciBuPXRoaXMubGFzdHhfO2lmKG4hPT1udWxsJiZtIT1uKXt0aGlz
LmF0dHJfKCJoaWdobGlnaHRDYWxsYmFjayIpKGIsbSx0aGlzLnNlbFBvaW50c18pfX10aGlzLmxh
c3R4Xz1tO3RoaXMudXBkYXRlU2VsZWN0aW9uXygpfTtEeWdyYXBoLnByb3RvdHlwZS51cGRhdGVT
ZWxlY3Rpb25fPWZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5jYW52YXNfLmdldENvbnRleHQoIjJkIik7
aWYodGhpcy5wcmV2aW91c1ZlcnRpY2FsWF8+PTApe3ZhciBoPTA7dmFyIGo9dGhpcy5hdHRyXygi
bGFiZWxzIik7Zm9yKHZhciBnPTE7ZzxqLmxlbmd0aDtnKyspe3ZhciBiPXRoaXMuYXR0cl8oImhp
Z2hsaWdodENpcmNsZVNpemUiLGpbZ10pO2lmKGI+aCl7aD1ifX12YXIgbz10aGlzLnByZXZpb3Vz
VmVydGljYWxYXztxLmNsZWFyUmVjdChvLWgtMSwwLDIqaCsyLHRoaXMuaGVpZ2h0Xyl9dmFyIHA9
ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiFpc05hTihjKX07aWYodGhpcy5zZWxQb2ludHNfLmxlbmd0
aD4wKXt2YXIgZD10aGlzLnNlbFBvaW50c19bMF0uY2FudmFzeDt2YXIgZT10aGlzLmF0dHJfKCJ4
VmFsdWVGb3JtYXR0ZXIiKSh0aGlzLmxhc3R4Xyx0aGlzKSsiOiI7dmFyIGY9dGhpcy5hdHRyXygi
eVZhbHVlRm9ybWF0dGVyIik7dmFyIG09dGhpcy5jb2xvcnNfLmxlbmd0aDtpZih0aGlzLmF0dHJf
KCJzaG93TGFiZWxzT25IaWdobGlnaHQiKSl7Zm9yKHZhciBnPTA7Zzx0aGlzLnNlbFBvaW50c18u
bGVuZ3RoO2crKyl7aWYoIXRoaXMuYXR0cl8oImxhYmVsc1Nob3daZXJvVmFsdWVzIikmJnRoaXMu
c2VsUG9pbnRzX1tnXS55dmFsPT0wKXtjb250aW51ZX1pZighcCh0aGlzLnNlbFBvaW50c19bZ10u
Y2FudmFzeSkpe2NvbnRpbnVlfWlmKHRoaXMuYXR0cl8oImxhYmVsc1NlcGFyYXRlTGluZXMiKSl7
ZSs9Ijxici8+In12YXIgbj10aGlzLnNlbFBvaW50c19bZ107dmFyIGw9bmV3IFJHQkNvbG9yKHRo
aXMuY29sb3JzX1tnJW1dKTt2YXIgaz1mKG4ueXZhbCk7ZSs9IiA8Yj48Zm9udCBjb2xvcj0nIits
LnRvSGV4KCkrIic+IituLm5hbWUrIjwvZm9udD48L2I+OiIra310aGlzLmF0dHJfKCJsYWJlbHNE
aXYiKS5pbm5lckhUTUw9ZX1xLnNhdmUoKTtmb3IodmFyIGc9MDtnPHRoaXMuc2VsUG9pbnRzXy5s
ZW5ndGg7ZysrKXtpZighcCh0aGlzLnNlbFBvaW50c19bZ10uY2FudmFzeSkpe2NvbnRpbnVlfXZh
ciBhPXRoaXMuYXR0cl8oImhpZ2hsaWdodENpcmNsZVNpemUiLHRoaXMuc2VsUG9pbnRzX1tnXS5u
YW1lKTtxLmJlZ2luUGF0aCgpO3EuZmlsbFN0eWxlPXRoaXMucGxvdHRlcl8uY29sb3JzW3RoaXMu
c2VsUG9pbnRzX1tnXS5uYW1lXTtxLmFyYyhkLHRoaXMuc2VsUG9pbnRzX1tnXS5jYW52YXN5LGEs
MCwyKk1hdGguUEksZmFsc2UpO3EuZmlsbCgpfXEucmVzdG9yZSgpO3RoaXMucHJldmlvdXNWZXJ0
aWNhbFhfPWR9fTtEeWdyYXBoLnByb3RvdHlwZS5zZXRTZWxlY3Rpb249ZnVuY3Rpb24oYil7dGhp
cy5zZWxQb2ludHNfPVtdO3ZhciBjPTA7aWYoYiE9PWZhbHNlKXtiPWItdGhpcy5ib3VuZGFyeUlk
c19bMF1bMF19aWYoYiE9PWZhbHNlJiZiPj0wKXtmb3IodmFyIGEgaW4gdGhpcy5sYXlvdXRfLmRh
dGFzZXRzKXtpZihiPHRoaXMubGF5b3V0Xy5kYXRhc2V0c1thXS5sZW5ndGgpe3RoaXMuc2VsUG9p
bnRzXy5wdXNoKHRoaXMubGF5b3V0Xy5wb2ludHNbYytiXSl9Yys9dGhpcy5sYXlvdXRfLmRhdGFz
ZXRzW2FdLmxlbmd0aH19aWYodGhpcy5zZWxQb2ludHNfLmxlbmd0aCl7dGhpcy5sYXN0eF89dGhp
cy5zZWxQb2ludHNfWzBdLnh2YWw7dGhpcy51cGRhdGVTZWxlY3Rpb25fKCl9ZWxzZXt0aGlzLmxh
c3R4Xz0tMTt0aGlzLmNsZWFyU2VsZWN0aW9uKCl9fTtEeWdyYXBoLnByb3RvdHlwZS5tb3VzZU91
dF89ZnVuY3Rpb24oYSl7aWYodGhpcy5hdHRyXygidW5oaWdobGlnaHRDYWxsYmFjayIpKXt0aGlz
LmF0dHJfKCJ1bmhpZ2hsaWdodENhbGxiYWNrIikoYSl9aWYodGhpcy5hdHRyXygiaGlkZU92ZXJs
YXlPbk1vdXNlT3V0Iikpe3RoaXMuY2xlYXJTZWxlY3Rpb24oKX19O0R5Z3JhcGgucHJvdG90eXBl
LmNsZWFyU2VsZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jYW52YXNfLmdldENvbnRleHQo
IjJkIik7YS5jbGVhclJlY3QoMCwwLHRoaXMud2lkdGhfLHRoaXMuaGVpZ2h0Xyk7dGhpcy5hdHRy
XygibGFiZWxzRGl2IikuaW5uZXJIVE1MPSIiO3RoaXMuc2VsUG9pbnRzXz1bXTt0aGlzLmxhc3R4
Xz0tMX07RHlncmFwaC5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7aWYoIXRoaXMu
c2VsUG9pbnRzX3x8dGhpcy5zZWxQb2ludHNfLmxlbmd0aDwxKXtyZXR1cm4gLTF9Zm9yKHZhciBh
PTA7YTx0aGlzLmxheW91dF8ucG9pbnRzLmxlbmd0aDthKyspe2lmKHRoaXMubGF5b3V0Xy5wb2lu
dHNbYV0ueD09dGhpcy5zZWxQb2ludHNfWzBdLngpe3JldHVybiBhK3RoaXMuYm91bmRhcnlJZHNf
WzBdWzBdfX1yZXR1cm4gLTF9O0R5Z3JhcGguemVyb3BhZD1mdW5jdGlvbihhKXtpZihhPDEwKXty
ZXR1cm4iMCIrYX1lbHNle3JldHVybiIiK2F9fTtEeWdyYXBoLmhtc1N0cmluZ189ZnVuY3Rpb24o
YSl7dmFyIGM9RHlncmFwaC56ZXJvcGFkO3ZhciBiPW5ldyBEYXRlKGEpO2lmKGIuZ2V0U2Vjb25k
cygpKXtyZXR1cm4gYyhiLmdldEhvdXJzKCkpKyI6IitjKGIuZ2V0TWludXRlcygpKSsiOiIrYyhi
LmdldFNlY29uZHMoKSl9ZWxzZXtyZXR1cm4gYyhiLmdldEhvdXJzKCkpKyI6IitjKGIuZ2V0TWlu
dXRlcygpKX19O0R5Z3JhcGguZGF0ZUF4aXNGb3JtYXR0ZXI9ZnVuY3Rpb24oYixjKXtpZihjPj1E
eWdyYXBoLk1PTlRITFkpe3JldHVybiBiLnN0cmZ0aW1lKCIlYiAleSIpfWVsc2V7dmFyIGE9Yi5n
ZXRIb3VycygpKjM2MDArYi5nZXRNaW51dGVzKCkqNjArYi5nZXRTZWNvbmRzKCkrYi5nZXRNaWxs
aXNlY29uZHMoKTtpZihhPT0wfHxjPj1EeWdyYXBoLkRBSUxZKXtyZXR1cm4gbmV3IERhdGUoYi5n
ZXRUaW1lKCkrMzYwMCoxMDAwKS5zdHJmdGltZSgiJWQlYiIpfWVsc2V7cmV0dXJuIER5Z3JhcGgu
aG1zU3RyaW5nXyhiLmdldFRpbWUoKSl9fX07RHlncmFwaC5kYXRlU3RyaW5nXz1mdW5jdGlvbihi
LGspe3ZhciBjPUR5Z3JhcGguemVyb3BhZDt2YXIgZz1uZXcgRGF0ZShiKTt2YXIgaD0iIitnLmdl
dEZ1bGxZZWFyKCk7dmFyIGU9YyhnLmdldE1vbnRoKCkrMSk7dmFyIGo9YyhnLmdldERhdGUoKSk7
dmFyIGY9IiI7dmFyIGE9Zy5nZXRIb3VycygpKjM2MDArZy5nZXRNaW51dGVzKCkqNjArZy5nZXRT
ZWNvbmRzKCk7aWYoYSl7Zj0iICIrRHlncmFwaC5obXNTdHJpbmdfKGIpfXJldHVybiBoKyIvIitl
KyIvIitqK2Z9O0R5Z3JhcGgucm91bmRfPWZ1bmN0aW9uKGMsYil7dmFyIGE9TWF0aC5wb3coMTAs
Yik7cmV0dXJuIE1hdGgucm91bmQoYyphKS9hfTtEeWdyYXBoLnByb3RvdHlwZS5sb2FkZWRFdmVu
dF89ZnVuY3Rpb24oYSl7dGhpcy5yYXdEYXRhXz10aGlzLnBhcnNlQ1NWXyhhKTt0aGlzLmRyYXdH
cmFwaF8odGhpcy5yYXdEYXRhXyl9O0R5Z3JhcGgucHJvdG90eXBlLm1vbnRocz1bIkphbiIsIkZl
YiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIs
IkRlYyJdO0R5Z3JhcGgucHJvdG90eXBlLnF1YXJ0ZXJzPVsiSmFuIiwiQXByIiwiSnVsIiwiT2N0
Il07RHlncmFwaC5wcm90b3R5cGUuYWRkWFRpY2tzXz1mdW5jdGlvbigpe3ZhciBhLGM7aWYodGhp
cy5kYXRlV2luZG93Xyl7YT10aGlzLmRhdGVXaW5kb3dfWzBdO2M9dGhpcy5kYXRlV2luZG93X1sx
XX1lbHNle2E9dGhpcy5yYXdEYXRhX1swXVswXTtjPXRoaXMucmF3RGF0YV9bdGhpcy5yYXdEYXRh
Xy5sZW5ndGgtMV1bMF19dmFyIGI9dGhpcy5hdHRyXygieFRpY2tlciIpKGEsYyx0aGlzKTt0aGlz
LmxheW91dF8udXBkYXRlT3B0aW9ucyh7eFRpY2tzOmJ9KX07RHlncmFwaC5TRUNPTkRMWT0wO0R5
Z3JhcGguVFdPX1NFQ09ORExZPTE7RHlncmFwaC5GSVZFX1NFQ09ORExZPTI7RHlncmFwaC5URU5f
U0VDT05ETFk9MztEeWdyYXBoLlRISVJUWV9TRUNPTkRMWT00O0R5Z3JhcGguTUlOVVRFTFk9NTtE
eWdyYXBoLlRXT19NSU5VVEVMWT02O0R5Z3JhcGguRklWRV9NSU5VVEVMWT03O0R5Z3JhcGguVEVO
X01JTlVURUxZPTg7RHlncmFwaC5USElSVFlfTUlOVVRFTFk9OTtEeWdyYXBoLkhPVVJMWT0xMDtE
eWdyYXBoLlRXT19IT1VSTFk9MTE7RHlncmFwaC5TSVhfSE9VUkxZPTEyO0R5Z3JhcGguREFJTFk9
MTM7RHlncmFwaC5XRUVLTFk9MTQ7RHlncmFwaC5NT05USExZPTE1O0R5Z3JhcGguUVVBUlRFUkxZ
PTE2O0R5Z3JhcGguQklBTk5VQUw9MTc7RHlncmFwaC5BTk5VQUw9MTg7RHlncmFwaC5ERUNBREFM
PTE5O0R5Z3JhcGguTlVNX0dSQU5VTEFSSVRJRVM9MjA7RHlncmFwaC5TSE9SVF9TUEFDSU5HUz1b
XTtEeWdyYXBoLlNIT1JUX1NQQUNJTkdTW0R5Z3JhcGguU0VDT05ETFldPTEwMDAqMTtEeWdyYXBo
LlNIT1JUX1NQQUNJTkdTW0R5Z3JhcGguVFdPX1NFQ09ORExZXT0xMDAwKjI7RHlncmFwaC5TSE9S
VF9TUEFDSU5HU1tEeWdyYXBoLkZJVkVfU0VDT05ETFldPTEwMDAqNTtEeWdyYXBoLlNIT1JUX1NQ
QUNJTkdTW0R5Z3JhcGguVEVOX1NFQ09ORExZXT0xMDAwKjEwO0R5Z3JhcGguU0hPUlRfU1BBQ0lO
R1NbRHlncmFwaC5USElSVFlfU0VDT05ETFldPTEwMDAqMzA7RHlncmFwaC5TSE9SVF9TUEFDSU5H
U1tEeWdyYXBoLk1JTlVURUxZXT0xMDAwKjYwO0R5Z3JhcGguU0hPUlRfU1BBQ0lOR1NbRHlncmFw
aC5UV09fTUlOVVRFTFldPTEwMDAqNjAqMjtEeWdyYXBoLlNIT1JUX1NQQUNJTkdTW0R5Z3JhcGgu
RklWRV9NSU5VVEVMWV09MTAwMCo2MCo1O0R5Z3JhcGguU0hPUlRfU1BBQ0lOR1NbRHlncmFwaC5U
RU5fTUlOVVRFTFldPTEwMDAqNjAqMTA7RHlncmFwaC5TSE9SVF9TUEFDSU5HU1tEeWdyYXBoLlRI
SVJUWV9NSU5VVEVMWV09MTAwMCo2MCozMDtEeWdyYXBoLlNIT1JUX1NQQUNJTkdTW0R5Z3JhcGgu
SE9VUkxZXT0xMDAwKjM2MDA7RHlncmFwaC5TSE9SVF9TUEFDSU5HU1tEeWdyYXBoLlRXT19IT1VS
TFldPTEwMDAqMzYwMCoyO0R5Z3JhcGguU0hPUlRfU1BBQ0lOR1NbRHlncmFwaC5TSVhfSE9VUkxZ
XT0xMDAwKjM2MDAqNjtEeWdyYXBoLlNIT1JUX1NQQUNJTkdTW0R5Z3JhcGguREFJTFldPTEwMDAq
ODY0MDA7RHlncmFwaC5TSE9SVF9TUEFDSU5HU1tEeWdyYXBoLldFRUtMWV09MTAwMCo2MDQ4MDA7
RHlncmFwaC5wcm90b3R5cGUuTnVtWFRpY2tzPWZ1bmN0aW9uKGUsYixnKXtpZihnPER5Z3JhcGgu
TU9OVEhMWSl7dmFyIGg9RHlncmFwaC5TSE9SVF9TUEFDSU5HU1tnXTtyZXR1cm4gTWF0aC5mbG9v
cigwLjUrMSooYi1lKS9oKX1lbHNle3ZhciBmPTE7dmFyIGQ9MTI7aWYoZz09RHlncmFwaC5RVUFS
VEVSTFkpe2Q9M31pZihnPT1EeWdyYXBoLkJJQU5OVUFMKXtkPTJ9aWYoZz09RHlncmFwaC5BTk5V
QUwpe2Q9MX1pZihnPT1EeWdyYXBoLkRFQ0FEQUwpe2Q9MTtmPTEwfXZhciBjPTM2NS4yNTI0KjI0
KjM2MDAqMTAwMDt2YXIgYT0xKihiLWUpL2M7cmV0dXJuIE1hdGguZmxvb3IoMC41KzEqYSpkL2Yp
fX07RHlncmFwaC5wcm90b3R5cGUuR2V0WEF4aXM9ZnVuY3Rpb24obSxoLGEpe3ZhciByPXRoaXMu
YXR0cl8oInhBeGlzTGFiZWxGb3JtYXR0ZXIiKTt2YXIgeT1bXTtpZihhPER5Z3JhcGguTU9OVEhM
WSl7dmFyIGM9RHlncmFwaC5TSE9SVF9TUEFDSU5HU1thXTt2YXIgdT0iJWQlYiI7dmFyIHY9Yy8x
MDAwO3ZhciB3PW5ldyBEYXRlKG0pO2lmKHY8PTYwKXt2YXIgZj13LmdldFNlY29uZHMoKTt3LnNl
dFNlY29uZHMoZi1mJXYpfWVsc2V7dy5zZXRTZWNvbmRzKDApO3YvPTYwO2lmKHY8PTYwKXt2YXIg
Zj13LmdldE1pbnV0ZXMoKTt3LnNldE1pbnV0ZXMoZi1mJXYpfWVsc2V7dy5zZXRNaW51dGVzKDAp
O3YvPTYwO2lmKHY8PTI0KXt2YXIgZj13LmdldEhvdXJzKCk7dy5zZXRIb3VycyhmLWYldil9ZWxz
ZXt3LnNldEhvdXJzKDApO3YvPTI0O2lmKHY9PTcpe3cuc2V0RGF0ZSh3LmdldERhdGUoKS13Lmdl
dERheSgpKX19fX1tPXcuZ2V0VGltZSgpO2Zvcih2YXIgaz1tO2s8PWg7ays9Yyl7eS5wdXNoKHt2
OmssbGFiZWw6cihuZXcgRGF0ZShrKSxhKX0pfX1lbHNle3ZhciBlO3ZhciBuPTE7aWYoYT09RHln
cmFwaC5NT05USExZKXtlPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyXX1lbHNle2lmKGE9
PUR5Z3JhcGguUVVBUlRFUkxZKXtlPVswLDMsNiw5XX1lbHNle2lmKGE9PUR5Z3JhcGguQklBTk5V
QUwpe2U9WzAsNl19ZWxzZXtpZihhPT1EeWdyYXBoLkFOTlVBTCl7ZT1bMF19ZWxzZXtpZihhPT1E
eWdyYXBoLkRFQ0FEQUwpe2U9WzBdO249MTB9fX19fXZhciBxPW5ldyBEYXRlKG0pLmdldEZ1bGxZ
ZWFyKCk7dmFyIG89bmV3IERhdGUoaCkuZ2V0RnVsbFllYXIoKTt2YXIgYj1EeWdyYXBoLnplcm9w
YWQ7Zm9yKHZhciBzPXE7czw9bztzKyspe2lmKHMlbiE9MCl7Y29udGludWV9Zm9yKHZhciBwPTA7
cDxlLmxlbmd0aDtwKyspe3ZhciBsPXMrIi8iK2IoMStlW3BdKSsiLzAxIjt2YXIgaz1EYXRlLnBh
cnNlKGwpO2lmKGs8bXx8az5oKXtjb250aW51ZX15LnB1c2goe3Y6ayxsYWJlbDpyKG5ldyBEYXRl
KGspLGEpfSl9fX1yZXR1cm4geX07RHlncmFwaC5kYXRlVGlja2VyPWZ1bmN0aW9uKGEsZixkKXt2
YXIgYj0tMTtmb3IodmFyIGU9MDtlPER5Z3JhcGguTlVNX0dSQU5VTEFSSVRJRVM7ZSsrKXt2YXIg
Yz1kLk51bVhUaWNrcyhhLGYsZSk7aWYoZC53aWR0aF8vYz49ZC5hdHRyXygicGl4ZWxzUGVyWExh
YmVsIikpe2I9ZTticmVha319aWYoYj49MCl7cmV0dXJuIGQuR2V0WEF4aXMoYSxmLGIpfWVsc2V7
fX07RHlncmFwaC5udW1lcmljVGlja3M9ZnVuY3Rpb24odix1LGwpe2lmKGwuYXR0cl8oImxhYmVs
c0tNRzIiKSl7dmFyIGY9WzEsMiw0LDhdfWVsc2V7dmFyIGY9WzEsMiw1XX12YXIgeCxwLGEscTt2
YXIgaD1sLmF0dHJfKCJwaXhlbHNQZXJZTGFiZWwiKTtmb3IodmFyIHQ9LTEwO3Q8NTA7dCsrKXtp
ZihsLmF0dHJfKCJsYWJlbHNLTUcyIikpe3ZhciBjPU1hdGgucG93KDE2LHQpfWVsc2V7dmFyIGM9
TWF0aC5wb3coMTAsdCl9Zm9yKHZhciBzPTA7czxmLmxlbmd0aDtzKyspe3g9YypmW3NdO3A9TWF0
aC5mbG9vcih2L3gpKng7YT1NYXRoLmNlaWwodS94KSp4O3E9TWF0aC5hYnMoYS1wKS94O3ZhciBk
PWwuaGVpZ2h0Xy9xO2lmKGQ+aCl7YnJlYWt9fWlmKGQ+aCl7YnJlYWt9fXZhciB3PVtdO3ZhciBy
O3ZhciBvPVtdO2lmKGwuYXR0cl8oImxhYmVsc0tNQiIpKXtyPTEwMDA7bz1bIksiLCJNIiwiQiIs
IlQiXX1pZihsLmF0dHJfKCJsYWJlbHNLTUcyIikpe2lmKHIpe2wud2FybigiU2V0dGluZyBib3Ro
IGxhYmVsc0tNQiBhbmQgbGFiZWxzS01HMi4gUGljayBvbmUhIil9cj0xMDI0O289WyJrIiwiTSIs
IkciLCJUIl19aWYocD5hKXt4Kj0tMX1mb3IodmFyIHQ9MDt0PHE7dCsrKXt2YXIgZz1wK3QqeDt2
YXIgYj1NYXRoLmFicyhnKTt2YXIgZT1EeWdyYXBoLnJvdW5kXyhnLDIpO2lmKG8ubGVuZ3RoKXt2
YXIgbT1yKnIqcipyO2Zvcih2YXIgcz0zO3M+PTA7cy0tLG0vPXIpe2lmKGI+PW0pe2U9RHlncmFw
aC5yb3VuZF8oZy9tLDEpK29bc107YnJlYWt9fX13LnB1c2goe2xhYmVsOmUsdjpnfSl9cmV0dXJu
IHd9O0R5Z3JhcGgucHJvdG90eXBlLmFkZFlUaWNrc189ZnVuY3Rpb24oYyxiKXt2YXIgYT1EeWdy
YXBoLm51bWVyaWNUaWNrcyhjLGIsdGhpcyk7dGhpcy5sYXlvdXRfLnVwZGF0ZU9wdGlvbnMoe3lB
eGlzOltjLGJdLHlUaWNrczphfSl9O0R5Z3JhcGgucHJvdG90eXBlLmV4dHJlbWVWYWx1ZXNfPWZ1
bmN0aW9uKGQpe3ZhciBoPW51bGwsZj1udWxsO3ZhciBiPXRoaXMuYXR0cl8oImVycm9yQmFycyIp
fHx0aGlzLmF0dHJfKCJjdXN0b21CYXJzIik7aWYoYil7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtj
Kyspe3ZhciBnPWRbY11bMV1bMF07aWYoIWcpe2NvbnRpbnVlfXZhciBhPWctZFtjXVsxXVsxXTt2
YXIgZT1nK2RbY11bMV1bMl07aWYoYT5nKXthPWd9aWYoZTxnKXtlPWd9aWYoZj09bnVsbHx8ZT5m
KXtmPWV9aWYoaD09bnVsbHx8YTxoKXtoPWF9fX1lbHNle2Zvcih2YXIgYz0wO2M8ZC5sZW5ndGg7
YysrKXt2YXIgZz1kW2NdWzFdO2lmKGc9PT1udWxsfHxpc05hTihnKSl7Y29udGludWV9aWYoZj09
bnVsbHx8Zz5mKXtmPWd9aWYoaD09bnVsbHx8ZzxoKXtoPWd9fX1yZXR1cm5baCxmXX07RHlncmFw
aC5wcm90b3R5cGUuZHJhd0dyYXBoXz1mdW5jdGlvbihEKXt2YXIgbj10aGlzLmlzX2luaXRpYWxf
ZHJhd187dGhpcy5pc19pbml0aWFsX2RyYXdfPWZhbHNlO3ZhciB6PW51bGwseT1udWxsO3RoaXMu
bGF5b3V0Xy5yZW1vdmVBbGxEYXRhc2V0cygpO3RoaXMuc2V0Q29sb3JzXygpO3RoaXMuYXR0cnNf
LnBvaW50U2l6ZT0wLjUqdGhpcy5hdHRyXygiaGlnaGxpZ2h0Q2lyY2xlU2l6ZSIpO3ZhciBkPVtd
O3ZhciBmPVtdO2Zvcih2YXIgdz1EWzBdLmxlbmd0aC0xO3c+PTE7dy0tKXtpZighdGhpcy52aXNp
YmlsaXR5KClbdy0xXSl7Y29udGludWV9dmFyIGI9dGhpcy5hdHRyXygiY29ubmVjdFNlcGFyYXRl
ZFBvaW50cyIsdyk7dmFyIG09W107Zm9yKHZhciB1PTA7dTxELmxlbmd0aDt1Kyspe2lmKERbdV1b
d10hPW51bGx8fCFiKXt2YXIgQT1EW3VdWzBdO20ucHVzaChbQSxEW3VdW3ddXSl9fW09dGhpcy5y
b2xsaW5nQXZlcmFnZShtLHRoaXMucm9sbFBlcmlvZF8pO3ZhciBwPXRoaXMuYXR0cl8oImVycm9y
QmFycyIpfHx0aGlzLmF0dHJfKCJjdXN0b21CYXJzIik7aWYodGhpcy5kYXRlV2luZG93Xyl7dmFy
IEY9dGhpcy5kYXRlV2luZG93X1swXTt2YXIgZz10aGlzLmRhdGVXaW5kb3dfWzFdO3ZhciBxPVtd
O3ZhciBlPW51bGwsRT1udWxsO2Zvcih2YXIgdD0wO3Q8bS5sZW5ndGg7dCsrKXtpZihtW3RdWzBd
Pj1GJiZlPT09bnVsbCl7ZT10fWlmKG1bdF1bMF08PWcpe0U9dH19aWYoZT09PW51bGwpe2U9MH1p
ZihlPjApe2UtLX1pZihFPT09bnVsbCl7RT1tLmxlbmd0aC0xfWlmKEU8bS5sZW5ndGgtMSl7RSsr
fXRoaXMuYm91bmRhcnlJZHNfW3ctMV09W2UsRV07Zm9yKHZhciB0PWU7dDw9RTt0Kyspe3EucHVz
aChtW3RdKX1tPXF9ZWxzZXt0aGlzLmJvdW5kYXJ5SWRzX1t3LTFdPVswLG0ubGVuZ3RoLTFdfXZh
ciBhPXRoaXMuZXh0cmVtZVZhbHVlc18obSk7dmFyIHI9YVswXTt2YXIgbz1hWzFdO2lmKHo9PT1u
dWxsfHxyPHope3o9cn1pZih5PT09bnVsbHx8bz55KXt5PW99aWYocCl7Zm9yKHZhciB1PTA7dTxt
Lmxlbmd0aDt1Kyspe3ZhbD1bbVt1XVswXSxtW3VdWzFdWzBdLG1bdV1bMV1bMV0sbVt1XVsxXVsy
XV07bVt1XT12YWx9fWVsc2V7aWYodGhpcy5hdHRyXygic3RhY2tlZEdyYXBoIikpe3ZhciBzPW0u
bGVuZ3RoO3ZhciBCO2Zvcih2YXIgdT0wO3U8czt1Kyspe3ZhciBoPW1bdV1bMF07aWYoZFtoXT09
PXVuZGVmaW5lZCl7ZFtoXT0wfUI9bVt1XVsxXTtkW2hdKz1CO21bdV09W2gsZFtoXV07aWYoIXl8
fGRbaF0+eSl7eT1kW2hdfX19fWZbd109bX1mb3IodmFyIHc9MTt3PGYubGVuZ3RoO3crKyl7aWYo
IXRoaXMudmlzaWJpbGl0eSgpW3ctMV0pe2NvbnRpbnVlfXRoaXMubGF5b3V0Xy5hZGREYXRhc2V0
KHRoaXMuYXR0cl8oImxhYmVscyIpW3ddLGZbd10pfWlmKHRoaXMudmFsdWVSYW5nZV8hPW51bGwp
e3RoaXMuYWRkWVRpY2tzXyh0aGlzLnZhbHVlUmFuZ2VfWzBdLHRoaXMudmFsdWVSYW5nZV9bMV0p
O3RoaXMuZGlzcGxheWVkWVJhbmdlXz10aGlzLnZhbHVlUmFuZ2VffWVsc2V7aWYodGhpcy5hdHRy
XygiaW5jbHVkZVplcm8iKSYmej4wKXt6PTB9dmFyIHY9eS16O2lmKHY9PTApe3Y9eX12YXIgYz15
KzAuMSp2O3ZhciBDPXotMC4xKnY7aWYoQzwwJiZ6Pj0wKXtDPTB9aWYoYz4wJiZ5PD0wKXtjPTB9
aWYodGhpcy5hdHRyXygiaW5jbHVkZVplcm8iKSl7aWYoeTwwKXtjPTB9aWYoej4wKXtDPTB9fXRo
aXMuYWRkWVRpY2tzXyhDLGMpO3RoaXMuZGlzcGxheWVkWVJhbmdlXz1bQyxjXX10aGlzLmFkZFhU
aWNrc18oKTt0aGlzLmxheW91dF8udXBkYXRlT3B0aW9ucyh7ZGF0ZVdpbmRvdzp0aGlzLmRhdGVX
aW5kb3dffSk7dGhpcy5sYXlvdXRfLmV2YWx1YXRlV2l0aEVycm9yKCk7dGhpcy5wbG90dGVyXy5j
bGVhcigpO3RoaXMucGxvdHRlcl8ucmVuZGVyKCk7dGhpcy5jYW52YXNfLmdldENvbnRleHQoIjJk
IikuY2xlYXJSZWN0KDAsMCx0aGlzLmNhbnZhc18ud2lkdGgsdGhpcy5jYW52YXNfLmhlaWdodCk7
aWYodGhpcy5hdHRyXygiZHJhd0NhbGxiYWNrIikhPT1udWxsKXt0aGlzLmF0dHJfKCJkcmF3Q2Fs
bGJhY2siKSh0aGlzLG4pfX07RHlncmFwaC5wcm90b3R5cGUucm9sbGluZ0F2ZXJhZ2U9ZnVuY3Rp
b24obSxkKXtpZihtLmxlbmd0aDwyKXtyZXR1cm4gbX12YXIgZD1NYXRoLm1pbihkLG0ubGVuZ3Ro
LTEpO3ZhciBiPVtdO3ZhciBzPXRoaXMuYXR0cl8oInNpZ21hIik7aWYodGhpcy5mcmFjdGlvbnNf
KXt2YXIgaz0wO3ZhciBoPTA7dmFyIGU9MTAwO2Zvcih2YXIgeD0wO3g8bS5sZW5ndGg7eCsrKXtr
Kz1tW3hdWzFdWzBdO2grPW1beF1bMV1bMV07aWYoeC1kPj0wKXtrLT1tW3gtZF1bMV1bMF07aC09
bVt4LWRdWzFdWzFdfXZhciBCPW1beF1bMF07dmFyIHY9aD9rL2g6MDtpZih0aGlzLmF0dHJfKCJl
cnJvckJhcnMiKSl7aWYodGhpcy53aWxzb25JbnRlcnZhbF8pe2lmKGgpe3ZhciB0PXY8MD8wOnYs
dT1oO3ZhciBBPXMqTWF0aC5zcXJ0KHQqKDEtdCkvdStzKnMvKDQqdSp1KSk7dmFyIGE9MStzKnMv
aDt2YXIgRj0odCtzKnMvKDIqaCktQSkvYTt2YXIgbz0odCtzKnMvKDIqaCkrQSkvYTtiW3hdPVtC
LFt0KmUsKHQtRikqZSwoby10KSplXV19ZWxzZXtiW3hdPVtCLFswLDAsMF1dfX1lbHNle3ZhciB6
PWg/cypNYXRoLnNxcnQodiooMS12KS9oKToxO2JbeF09W0IsW2UqdixlKnosZSp6XV19fWVsc2V7
Ylt4XT1bQixlKnZdfX19ZWxzZXtpZih0aGlzLmF0dHJfKCJjdXN0b21CYXJzIikpe3ZhciBGPTA7
dmFyIEM9MDt2YXIgbz0wO3ZhciBnPTA7Zm9yKHZhciB4PTA7eDxtLmxlbmd0aDt4Kyspe3ZhciBF
PW1beF1bMV07dmFyIGw9RVsxXTtiW3hdPVttW3hdWzBdLFtsLGwtRVswXSxFWzJdLWxdXTtpZihs
IT1udWxsJiYhaXNOYU4obCkpe0YrPUVbMF07Qys9bDtvKz1FWzJdO2crPTF9aWYoeC1kPj0wKXt2
YXIgcj1tW3gtZF07aWYoclsxXVsxXSE9bnVsbCYmIWlzTmFOKHJbMV1bMV0pKXtGLT1yWzFdWzBd
O0MtPXJbMV1bMV07by09clsxXVsyXTtnLT0xfX1iW3hdPVttW3hdWzBdLFsxKkMvZywxKihDLUYp
L2csMSooby1DKS9nXV19fWVsc2V7dmFyIHE9TWF0aC5taW4oZC0xLG0ubGVuZ3RoLTIpO2lmKCF0
aGlzLmF0dHJfKCJlcnJvckJhcnMiKSl7aWYoZD09MSl7cmV0dXJuIG19Zm9yKHZhciB4PTA7eDxt
Lmxlbmd0aDt4Kyspe3ZhciBjPTA7dmFyIEQ9MDtmb3IodmFyIHc9TWF0aC5tYXgoMCx4LWQrMSk7
dzx4KzE7dysrKXt2YXIgbD1tW3ddWzFdO2lmKGw9PW51bGx8fGlzTmFOKGwpKXtjb250aW51ZX1E
Kys7Yys9bVt3XVsxXX1pZihEKXtiW3hdPVttW3hdWzBdLGMvRF19ZWxzZXtiW3hdPVttW3hdWzBd
LG51bGxdfX19ZWxzZXtmb3IodmFyIHg9MDt4PG0ubGVuZ3RoO3grKyl7dmFyIGM9MDt2YXIgZj0w
O3ZhciBEPTA7Zm9yKHZhciB3PU1hdGgubWF4KDAseC1kKzEpO3c8eCsxO3crKyl7dmFyIGw9bVt3
XVsxXVswXTtpZihsPT1udWxsfHxpc05hTihsKSl7Y29udGludWV9RCsrO2MrPW1bd11bMV1bMF07
Zis9TWF0aC5wb3cobVt3XVsxXVsxXSwyKX1pZihEKXt2YXIgej1NYXRoLnNxcnQoZikvRDtiW3hd
PVttW3hdWzBdLFtjL0Qscyp6LHMqel1dfWVsc2V7Ylt4XT1bbVt4XVswXSxbbnVsbCxudWxsLG51
bGxdXX19fX19cmV0dXJuIGJ9O0R5Z3JhcGguZGF0ZVBhcnNlcj1mdW5jdGlvbihiLGEpe3ZhciBj
O3ZhciBlO2lmKGIuc2VhcmNoKCItIikhPS0xKXtjPWIucmVwbGFjZSgiLSIsIi8iLCJnIik7d2hp
bGUoYy5zZWFyY2goIi0iKSE9LTEpe2M9Yy5yZXBsYWNlKCItIiwiLyIpfWU9RGF0ZS5wYXJzZShj
KX1lbHNle2lmKGIubGVuZ3RoPT04KXtjPWIuc3Vic3RyKDAsNCkrIi8iK2Iuc3Vic3RyKDQsMikr
Ii8iK2Iuc3Vic3RyKDYsMik7ZT1EYXRlLnBhcnNlKGMpfWVsc2V7ZT1EYXRlLnBhcnNlKGIpfX1p
ZighZXx8aXNOYU4oZSkpe2EuZXJyb3IoIkNvdWxkbid0IHBhcnNlICIrYisiIGFzIGEgZGF0ZSIp
fXJldHVybiBlfTtEeWdyYXBoLnByb3RvdHlwZS5kZXRlY3RUeXBlRnJvbVN0cmluZ189ZnVuY3Rp
b24oYil7dmFyIGE9ZmFsc2U7aWYoYi5pbmRleE9mKCItIik+PTB8fGIuaW5kZXhPZigiLyIpPj0w
fHxpc05hTihwYXJzZUZsb2F0KGIpKSl7YT10cnVlfWVsc2V7aWYoYi5sZW5ndGg9PTgmJmI+IjE5
NzAwMTAxIiYmYjwiMjAzNzEyMzEiKXthPXRydWV9fWlmKGEpe3RoaXMuYXR0cnNfLnhWYWx1ZUZv
cm1hdHRlcj1EeWdyYXBoLmRhdGVTdHJpbmdfO3RoaXMuYXR0cnNfLnhWYWx1ZVBhcnNlcj1EeWdy
YXBoLmRhdGVQYXJzZXI7dGhpcy5hdHRyc18ueFRpY2tlcj1EeWdyYXBoLmRhdGVUaWNrZXI7dGhp
cy5hdHRyc18ueEF4aXNMYWJlbEZvcm1hdHRlcj1EeWdyYXBoLmRhdGVBeGlzRm9ybWF0dGVyfWVs
c2V7dGhpcy5hdHRyc18ueFZhbHVlRm9ybWF0dGVyPWZ1bmN0aW9uKGMpe3JldHVybiBjfTt0aGlz
LmF0dHJzXy54VmFsdWVQYXJzZXI9ZnVuY3Rpb24oYyl7cmV0dXJuIHBhcnNlRmxvYXQoYyl9O3Ro
aXMuYXR0cnNfLnhUaWNrZXI9RHlncmFwaC5udW1lcmljVGlja3M7dGhpcy5hdHRyc18ueEF4aXNM
YWJlbEZvcm1hdHRlcj10aGlzLmF0dHJzXy54VmFsdWVGb3JtYXR0ZXJ9fTtEeWdyYXBoLnByb3Rv
dHlwZS5wYXJzZUNTVl89ZnVuY3Rpb24oaCl7dmFyIG49W107dmFyIHI9aC5zcGxpdCgiXG4iKTt2
YXIgYj10aGlzLmF0dHJfKCJkZWxpbWl0ZXIiKTtpZihyWzBdLmluZGV4T2YoYik9PS0xJiZyWzBd
LmluZGV4T2YoIlx0Iik+PTApe2I9Ilx0In12YXIgYT0wO2lmKHRoaXMubGFiZWxzRnJvbUNTVl8p
e2E9MTt0aGlzLmF0dHJzXy5sYWJlbHM9clswXS5zcGxpdChiKX12YXIgaz1mdW5jdGlvbihqKXt2
YXIgcz1wYXJzZUZsb2F0KGopO3JldHVybiBpc05hTihzKT9udWxsOnN9O3ZhciBjO3ZhciBwPWZh
bHNlO3ZhciBkPXRoaXMuYXR0cl8oImxhYmVscyIpLmxlbmd0aDt2YXIgbT1mYWxzZTtmb3IodmFy
IGc9YTtnPHIubGVuZ3RoO2crKyl7dmFyIHE9cltnXTtpZihxLmxlbmd0aD09MCl7Y29udGludWV9
aWYocVswXT09IiMiKXtjb250aW51ZX12YXIgZj1xLnNwbGl0KGIpO2lmKGYubGVuZ3RoPDIpe2Nv
bnRpbnVlfXZhciBsPVtdO2lmKCFwKXt0aGlzLmRldGVjdFR5cGVGcm9tU3RyaW5nXyhmWzBdKTtj
PXRoaXMuYXR0cl8oInhWYWx1ZVBhcnNlciIpO3A9dHJ1ZX1sWzBdPWMoZlswXSx0aGlzKTtpZih0
aGlzLmZyYWN0aW9uc18pe2Zvcih2YXIgZT0xO2U8Zi5sZW5ndGg7ZSsrKXt2YXIgbz1mW2VdLnNw
bGl0KCIvIik7bFtlXT1bayhvWzBdKSxrKG9bMV0pXX19ZWxzZXtpZih0aGlzLmF0dHJfKCJlcnJv
ckJhcnMiKSl7Zm9yKHZhciBlPTE7ZTxmLmxlbmd0aDtlKz0yKXtsWyhlKzEpLzJdPVtrKGZbZV0p
LGsoZltlKzFdKV19fWVsc2V7aWYodGhpcy5hdHRyXygiY3VzdG9tQmFycyIpKXtmb3IodmFyIGU9
MTtlPGYubGVuZ3RoO2UrKyl7dmFyIG89ZltlXS5zcGxpdCgiOyIpO2xbZV09W2sob1swXSksayhv
WzFdKSxrKG9bMl0pXX19ZWxzZXtmb3IodmFyIGU9MTtlPGYubGVuZ3RoO2UrKyl7bFtlXT1rKGZb
ZV0pfX19fWlmKG4ubGVuZ3RoPjAmJmxbMF08bltuLmxlbmd0aC0xXVswXSl7bT10cnVlfW4ucHVz
aChsKTtpZihsLmxlbmd0aCE9ZCl7dGhpcy5lcnJvcigiTnVtYmVyIG9mIGNvbHVtbnMgaW4gbGlu
ZSAiK2crIiAoIitsLmxlbmd0aCsiKSBkb2VzIG5vdCBhZ3JlZSB3aXRoIG51bWJlciBvZiBsYWJl
bHMgKCIrZCsiKSAiK3EpfX1pZihtKXt0aGlzLndhcm4oIkNTViBpcyBvdXQgb2Ygb3JkZXI7IG9y
ZGVyIGl0IGNvcnJlY3RseSB0byBzcGVlZCBsb2FkaW5nLiIpO24uc29ydChmdW5jdGlvbihzLGop
e3JldHVybiBzWzBdLWpbMF19KX1yZXR1cm4gbn07RHlncmFwaC5wcm90b3R5cGUucGFyc2VBcnJh
eV89ZnVuY3Rpb24oYil7aWYoYi5sZW5ndGg9PTApe3RoaXMuZXJyb3IoIkNhbid0IHBsb3QgZW1w
dHkgZGF0YSBzZXQiKTtyZXR1cm4gbnVsbH1pZihiWzBdLmxlbmd0aD09MCl7dGhpcy5lcnJvcigi
RGF0YSBzZXQgY2Fubm90IGNvbnRhaW4gYW4gZW1wdHkgcm93Iik7cmV0dXJuIG51bGx9aWYodGhp
cy5hdHRyXygibGFiZWxzIik9PW51bGwpe3RoaXMud2FybigiVXNpbmcgZGVmYXVsdCBsYWJlbHMu
IFNldCBsYWJlbHMgZXhwbGljaXRseSB2aWEgJ2xhYmVscycgaW4gdGhlIG9wdGlvbnMgcGFyYW1l
dGVyIik7dGhpcy5hdHRyc18ubGFiZWxzPVsiWCJdO2Zvcih2YXIgYT0xO2E8YlswXS5sZW5ndGg7
YSsrKXt0aGlzLmF0dHJzXy5sYWJlbHMucHVzaCgiWSIrYSl9fWlmKER5Z3JhcGguaXNEYXRlTGlr
ZShiWzBdWzBdKSl7dGhpcy5hdHRyc18ueFZhbHVlRm9ybWF0dGVyPUR5Z3JhcGguZGF0ZVN0cmlu
Z187dGhpcy5hdHRyc18ueEF4aXNMYWJlbEZvcm1hdHRlcj1EeWdyYXBoLmRhdGVBeGlzRm9ybWF0
dGVyO3RoaXMuYXR0cnNfLnhUaWNrZXI9RHlncmFwaC5kYXRlVGlja2VyO3ZhciBjPUR5Z3JhcGgu
Y2xvbmUoYik7Zm9yKHZhciBhPTA7YTxiLmxlbmd0aDthKyspe2lmKGNbYV0ubGVuZ3RoPT0wKXt0
aGlzLmVycm9yKCJSb3cgIisoMSthKSsiIG9mIGRhdGEgaXMgZW1wdHkiKTtyZXR1cm4gbnVsbH1p
ZihjW2FdWzBdPT1udWxsfHx0eXBlb2YoY1thXVswXS5nZXRUaW1lKSE9ImZ1bmN0aW9uInx8aXNO
YU4oY1thXVswXS5nZXRUaW1lKCkpKXt0aGlzLmVycm9yKCJ4IHZhbHVlIGluIHJvdyAiKygxK2Ep
KyIgaXMgbm90IGEgRGF0ZSIpO3JldHVybiBudWxsfWNbYV1bMF09Y1thXVswXS5nZXRUaW1lKCl9
cmV0dXJuIGN9ZWxzZXt0aGlzLmF0dHJzXy54VmFsdWVGb3JtYXR0ZXI9ZnVuY3Rpb24oZCl7cmV0
dXJuIGR9O3RoaXMuYXR0cnNfLnhUaWNrZXI9RHlncmFwaC5udW1lcmljVGlja3M7cmV0dXJuIGJ9
fTtEeWdyYXBoLnByb3RvdHlwZS5wYXJzZURhdGFUYWJsZV89ZnVuY3Rpb24odil7dmFyIGc9di5n
ZXROdW1iZXJPZkNvbHVtbnMoKTt2YXIgZj12LmdldE51bWJlck9mUm93cygpO3ZhciBlPXYuZ2V0
Q29sdW1uVHlwZSgwKTtpZihlPT0iZGF0ZSJ8fGU9PSJkYXRldGltZSIpe3RoaXMuYXR0cnNfLnhW
YWx1ZUZvcm1hdHRlcj1EeWdyYXBoLmRhdGVTdHJpbmdfO3RoaXMuYXR0cnNfLnhWYWx1ZVBhcnNl
cj1EeWdyYXBoLmRhdGVQYXJzZXI7dGhpcy5hdHRyc18ueFRpY2tlcj1EeWdyYXBoLmRhdGVUaWNr
ZXI7dGhpcy5hdHRyc18ueEF4aXNMYWJlbEZvcm1hdHRlcj1EeWdyYXBoLmRhdGVBeGlzRm9ybWF0
dGVyfWVsc2V7aWYoZT09Im51bWJlciIpe3RoaXMuYXR0cnNfLnhWYWx1ZUZvcm1hdHRlcj1mdW5j
dGlvbihqKXtyZXR1cm4gan07dGhpcy5hdHRyc18ueFZhbHVlUGFyc2VyPWZ1bmN0aW9uKGope3Jl
dHVybiBwYXJzZUZsb2F0KGopfTt0aGlzLmF0dHJzXy54VGlja2VyPUR5Z3JhcGgubnVtZXJpY1Rp
Y2tzO3RoaXMuYXR0cnNfLnhBeGlzTGFiZWxGb3JtYXR0ZXI9dGhpcy5hdHRyc18ueFZhbHVlRm9y
bWF0dGVyfWVsc2V7dGhpcy5lcnJvcigib25seSAnZGF0ZScsICdkYXRldGltZScgYW5kICdudW1i
ZXInIHR5cGVzIGFyZSBzdXBwb3J0ZWQgZm9yIGNvbHVtbiAxIG9mIERhdGFUYWJsZSBpbnB1dCAo
R290ICciK2UrIicpIik7cmV0dXJuIG51bGx9fXZhciBsPVtdO3ZhciBzPXt9O3ZhciByPWZhbHNl
O2Zvcih2YXIgcD0xO3A8ZztwKyspe3ZhciBiPXYuZ2V0Q29sdW1uVHlwZShwKTtpZihiPT0ibnVt
YmVyIil7bC5wdXNoKHApfWVsc2V7aWYoYj09InN0cmluZyImJnRoaXMuYXR0cl8oImRpc3BsYXlB
bm5vdGF0aW9ucyIpKXt2YXIgcT1sW2wubGVuZ3RoLTFdO2lmKCFzLmhhc093blByb3BlcnR5KHEp
KXtzW3FdPVtwXX1lbHNle3NbcV0ucHVzaChwKX1yPXRydWV9ZWxzZXt0aGlzLmVycm9yKCJPbmx5
ICdudW1iZXInIGlzIHN1cHBvcnRlZCBhcyBhIGRlcGVuZGVudCB0eXBlIHdpdGggR3Zpei4gJ3N0
cmluZycgaXMgb25seSBzdXBwb3J0ZWQgaWYgZGlzcGxheUFubm90YXRpb25zIGlzIHRydWUiKX19
fXZhciB0PVt2LmdldENvbHVtbkxhYmVsKDApXTtmb3IodmFyIHA9MDtwPGwubGVuZ3RoO3ArKyl7
dC5wdXNoKHYuZ2V0Q29sdW1uTGFiZWwobFtwXSkpfXRoaXMuYXR0cnNfLmxhYmVscz10O2c9dC5s
ZW5ndGg7dmFyIHU9W107dmFyIGg9ZmFsc2U7dmFyIGE9W107Zm9yKHZhciBwPTA7cDxmO3ArKyl7
dmFyIGQ9W107aWYodHlwZW9mKHYuZ2V0VmFsdWUocCwwKSk9PT0idW5kZWZpbmVkInx8di5nZXRW
YWx1ZShwLDApPT09bnVsbCl7dGhpcy53YXJuKCJJZ25vcmluZyByb3cgIitwKyIgb2YgRGF0YVRh
YmxlIGJlY2F1c2Ugb2YgdW5kZWZpbmVkIG9yIG51bGwgZmlyc3QgY29sdW1uLiIpO2NvbnRpbnVl
fWlmKGU9PSJkYXRlInx8ZT09ImRhdGV0aW1lIil7ZC5wdXNoKHYuZ2V0VmFsdWUocCwwKS5nZXRU
aW1lKCkpfWVsc2V7ZC5wdXNoKHYuZ2V0VmFsdWUocCwwKSl9aWYoIXRoaXMuYXR0cl8oImVycm9y
QmFycyIpKXtmb3IodmFyIG49MDtuPGwubGVuZ3RoO24rKyl7dmFyIGM9bFtuXTtkLnB1c2godi5n
ZXRWYWx1ZShwLGMpKTtpZihyJiZzLmhhc093blByb3BlcnR5KGMpJiZ2LmdldFZhbHVlKHAsc1tj
XVswXSkhPW51bGwpe3ZhciBvPXt9O28uc2VyaWVzPXYuZ2V0Q29sdW1uTGFiZWwoYyk7by54dmFs
PWRbMF07by5zaG9ydFRleHQ9U3RyaW5nLmZyb21DaGFyQ29kZSg2NSthLmxlbmd0aCk7by50ZXh0
PSIiO2Zvcih2YXIgbT0wO208c1tjXS5sZW5ndGg7bSsrKXtpZihtKXtvLnRleHQrPSJcbiJ9by50
ZXh0Kz12LmdldFZhbHVlKHAsc1tjXVttXSl9YS5wdXNoKG8pfX19ZWxzZXtmb3IodmFyIG49MDtu
PGctMTtuKyspe2QucHVzaChbdi5nZXRWYWx1ZShwLDErMipuKSx2LmdldFZhbHVlKHAsMisyKm4p
XSl9fWlmKHUubGVuZ3RoPjAmJmRbMF08dVt1Lmxlbmd0aC0xXVswXSl7aD10cnVlfXUucHVzaChk
KX1pZihoKXt0aGlzLndhcm4oIkRhdGFUYWJsZSBpcyBvdXQgb2Ygb3JkZXI7IG9yZGVyIGl0IGNv
cnJlY3RseSB0byBzcGVlZCBsb2FkaW5nLiIpO3Uuc29ydChmdW5jdGlvbihrLGope3JldHVybiBr
WzBdLWpbMF19KX10aGlzLnJhd0RhdGFfPXU7aWYoYS5sZW5ndGg+MCl7dGhpcy5zZXRBbm5vdGF0
aW9ucyhhLHRydWUpfX07RHlncmFwaC51cGRhdGU9ZnVuY3Rpb24oYixjKXtpZih0eXBlb2YoYykh
PSJ1bmRlZmluZWQiJiZjIT09bnVsbCl7Zm9yKHZhciBhIGluIGMpe2lmKGMuaGFzT3duUHJvcGVy
dHkoYSkpe2JbYV09Y1thXX19fXJldHVybiBifTtEeWdyYXBoLmlzQXJyYXlMaWtlPWZ1bmN0aW9u
KGIpe3ZhciBhPXR5cGVvZihiKTtpZigoYSE9Im9iamVjdCImJiEoYT09ImZ1bmN0aW9uIiYmdHlw
ZW9mKGIuaXRlbSk9PSJmdW5jdGlvbiIpKXx8Yj09PW51bGx8fHR5cGVvZihiLmxlbmd0aCkhPSJu
dW1iZXIifHxiLm5vZGVUeXBlPT09Myl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfTtEeWdyYXBo
LmlzRGF0ZUxpa2U9ZnVuY3Rpb24oYSl7aWYodHlwZW9mKGEpIT0ib2JqZWN0Inx8YT09PW51bGx8
fHR5cGVvZihhLmdldFRpbWUpIT0iZnVuY3Rpb24iKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9
O0R5Z3JhcGguY2xvbmU9ZnVuY3Rpb24oYyl7dmFyIGI9W107Zm9yKHZhciBhPTA7YTxjLmxlbmd0
aDthKyspe2lmKER5Z3JhcGguaXNBcnJheUxpa2UoY1thXSkpe2IucHVzaChEeWdyYXBoLmNsb25l
KGNbYV0pKX1lbHNle2IucHVzaChjW2FdKX19cmV0dXJuIGJ9O0R5Z3JhcGgucHJvdG90eXBlLnN0
YXJ0Xz1mdW5jdGlvbigpe2lmKHR5cGVvZiB0aGlzLmZpbGVfPT0iZnVuY3Rpb24iKXt0aGlzLmxv
YWRlZEV2ZW50Xyh0aGlzLmZpbGVfKCkpfWVsc2V7aWYoRHlncmFwaC5pc0FycmF5TGlrZSh0aGlz
LmZpbGVfKSl7dGhpcy5yYXdEYXRhXz10aGlzLnBhcnNlQXJyYXlfKHRoaXMuZmlsZV8pO3RoaXMu
ZHJhd0dyYXBoXyh0aGlzLnJhd0RhdGFfKX1lbHNle2lmKHR5cGVvZiB0aGlzLmZpbGVfPT0ib2Jq
ZWN0IiYmdHlwZW9mIHRoaXMuZmlsZV8uZ2V0Q29sdW1uUmFuZ2U9PSJmdW5jdGlvbiIpe3RoaXMu
cGFyc2VEYXRhVGFibGVfKHRoaXMuZmlsZV8pO3RoaXMuZHJhd0dyYXBoXyh0aGlzLnJhd0RhdGFf
KX1lbHNle2lmKHR5cGVvZiB0aGlzLmZpbGVfPT0ic3RyaW5nIil7aWYodGhpcy5maWxlXy5pbmRl
eE9mKCJcbiIpPj0wKXt0aGlzLmxvYWRlZEV2ZW50Xyh0aGlzLmZpbGVfKX1lbHNle3ZhciBiPW5l
dyBYTUxIdHRwUmVxdWVzdCgpO3ZhciBhPXRoaXM7Yi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rp
b24oKXtpZihiLnJlYWR5U3RhdGU9PTQpe2lmKGIuc3RhdHVzPT0yMDApe2EubG9hZGVkRXZlbnRf
KGIucmVzcG9uc2VUZXh0KX19fTtiLm9wZW4oIkdFVCIsdGhpcy5maWxlXyx0cnVlKTtiLnNlbmQo
bnVsbCl9fWVsc2V7dGhpcy5lcnJvcigiVW5rbm93biBkYXRhIGZvcm1hdDogIisodHlwZW9mIHRo
aXMuZmlsZV8pKX19fX19O0R5Z3JhcGgucHJvdG90eXBlLnVwZGF0ZU9wdGlvbnM9ZnVuY3Rpb24o
YSl7aWYoYS5yb2xsUGVyaW9kKXt0aGlzLnJvbGxQZXJpb2RfPWEucm9sbFBlcmlvZH1pZihhLmRh
dGVXaW5kb3cpe3RoaXMuZGF0ZVdpbmRvd189YS5kYXRlV2luZG93fWlmKGEudmFsdWVSYW5nZSl7
dGhpcy52YWx1ZVJhbmdlXz1hLnZhbHVlUmFuZ2V9RHlncmFwaC51cGRhdGUodGhpcy51c2VyX2F0
dHJzXyxhKTtEeWdyYXBoLnVwZGF0ZSh0aGlzLnJlbmRlck9wdGlvbnNfLGEpO3RoaXMubGFiZWxz
RnJvbUNTVl89KHRoaXMuYXR0cl8oImxhYmVscyIpPT1udWxsKTt0aGlzLmxheW91dF8udXBkYXRl
T3B0aW9ucyh7ZXJyb3JCYXJzOnRoaXMuYXR0cl8oImVycm9yQmFycyIpfSk7aWYoYS5maWxlKXt0
aGlzLmZpbGVfPWEuZmlsZTt0aGlzLnN0YXJ0XygpfWVsc2V7dGhpcy5kcmF3R3JhcGhfKHRoaXMu
cmF3RGF0YV8pfX07RHlncmFwaC5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGIsYSl7aWYodGhp
cy5yZXNpemVfbG9jayl7cmV0dXJufXRoaXMucmVzaXplX2xvY2s9dHJ1ZTtpZigoYj09PW51bGwp
IT0oYT09PW51bGwpKXt0aGlzLndhcm4oIkR5Z3JhcGgucmVzaXplKCkgc2hvdWxkIGJlIGNhbGxl
ZCB3aXRoIHplcm8gcGFyYW1ldGVycyBvciB0d28gbm9uLU5VTEwgcGFyYW1ldGVycy4gUHJldGVu
ZGluZyBpdCB3YXMgemVyby4iKTtiPWE9bnVsbH10aGlzLm1haW5kaXZfLmlubmVySFRNTD0iIjt0
aGlzLmF0dHJzXy5sYWJlbHNEaXY9bnVsbDtpZihiKXt0aGlzLm1haW5kaXZfLnN0eWxlLndpZHRo
PWIrInB4Ijt0aGlzLm1haW5kaXZfLnN0eWxlLmhlaWdodD1hKyJweCI7dGhpcy53aWR0aF89Yjt0
aGlzLmhlaWdodF89YX1lbHNle3RoaXMud2lkdGhfPXRoaXMubWFpbmRpdl8ub2Zmc2V0V2lkdGg7
dGhpcy5oZWlnaHRfPXRoaXMubWFpbmRpdl8ub2Zmc2V0SGVpZ2h0fXRoaXMuY3JlYXRlSW50ZXJm
YWNlXygpO3RoaXMuZHJhd0dyYXBoXyh0aGlzLnJhd0RhdGFfKTt0aGlzLnJlc2l6ZV9sb2NrPWZh
bHNlfTtEeWdyYXBoLnByb3RvdHlwZS5hZGp1c3RSb2xsPWZ1bmN0aW9uKGEpe3RoaXMucm9sbFBl
cmlvZF89YTt0aGlzLmRyYXdHcmFwaF8odGhpcy5yYXdEYXRhXyl9O0R5Z3JhcGgucHJvdG90eXBl
LnZpc2liaWxpdHk9ZnVuY3Rpb24oKXtpZighdGhpcy5hdHRyXygidmlzaWJpbGl0eSIpKXt0aGlz
LmF0dHJzXy52aXNpYmlsaXR5PVtdfXdoaWxlKHRoaXMuYXR0cl8oInZpc2liaWxpdHkiKS5sZW5n
dGg8dGhpcy5yYXdEYXRhX1swXS5sZW5ndGgtMSl7dGhpcy5hdHRyXygidmlzaWJpbGl0eSIpLnB1
c2godHJ1ZSl9cmV0dXJuIHRoaXMuYXR0cl8oInZpc2liaWxpdHkiKX07RHlncmFwaC5wcm90b3R5
cGUuc2V0VmlzaWJpbGl0eT1mdW5jdGlvbihiLGMpe3ZhciBhPXRoaXMudmlzaWJpbGl0eSgpO2lm
KGI8MCYmYj49YS5sZW5ndGgpe3RoaXMud2FybigiaW52YWxpZCBzZXJpZXMgbnVtYmVyIGluIHNl
dFZpc2liaWxpdHk6ICIrYil9ZWxzZXthW2JdPWM7dGhpcy5kcmF3R3JhcGhfKHRoaXMucmF3RGF0
YV8pfX07RHlncmFwaC5wcm90b3R5cGUuc2V0QW5ub3RhdGlvbnM9ZnVuY3Rpb24oYixhKXt0aGlz
LmFubm90YXRpb25zXz1iO3RoaXMubGF5b3V0Xy5zZXRBbm5vdGF0aW9ucyh0aGlzLmFubm90YXRp
b25zXyk7aWYoIWEpe3RoaXMuZHJhd0dyYXBoXyh0aGlzLnJhd0RhdGFfKX19O0R5Z3JhcGgucHJv
dG90eXBlLmFubm90YXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYW5ub3RhdGlvbnNffTtE
eWdyYXBoLnByb3RvdHlwZS5pbmRleEZyb21TZXROYW1lPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMu
YXR0cl8oImxhYmVscyIpO2Zvcih2YXIgYj0wO2I8Yy5sZW5ndGg7YisrKXtpZihjW2JdPT1hKXty
ZXR1cm4gYn19cmV0dXJuIG51bGx9O0R5Z3JhcGguYWRkQW5ub3RhdGlvblJ1bGU9ZnVuY3Rpb24o
KXtpZihEeWdyYXBoLmFkZGVkQW5ub3RhdGlvbkNTUyl7cmV0dXJufXZhciBhO2lmKGRvY3VtZW50
LnN0eWxlU2hlZXRzLmxlbmd0aD4wKXthPWRvY3VtZW50LnN0eWxlU2hlZXRzWzBdfWVsc2V7dmFy
IGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtjLnR5cGU9InRleHQvY3NzIjtkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKGMpO2Zvcihp
PTA7aTxkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7aSsrKXtpZihkb2N1bWVudC5zdHlsZVNo
ZWV0c1tpXS5kaXNhYmxlZCl7Y29udGludWV9YT1kb2N1bWVudC5zdHlsZVNoZWV0c1tpXX19dmFy
IGI9ImJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgdGV4
dC1hbGlnbjogY2VudGVyOyI7aWYoYS5pbnNlcnRSdWxlKXthLmluc2VydFJ1bGUoIi5keWdyYXBo
RGVmYXVsdEFubm90YXRpb24geyAiK2IrIiB9IiwwKX1lbHNle2lmKGEuYWRkUnVsZSl7YS5hZGRS
dWxlKCIuZHlncmFwaERlZmF1bHRBbm5vdGF0aW9uIixiKX19RHlncmFwaC5hZGRlZEFubm90YXRp
b25DU1M9dHJ1ZX07RHlncmFwaC5jcmVhdGVDYW52YXM9ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtpc0lFPSgvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNl
ckFnZW50KSYmIXdpbmRvdy5vcGVyYSk7aWYoaXNJRSl7YT1HX3ZtbENhbnZhc01hbmFnZXIuaW5p
dEVsZW1lbnQoYSl9cmV0dXJuIGF9O0R5Z3JhcGguR1ZpekNoYXJ0PWZ1bmN0aW9uKGEpe3RoaXMu
Y29udGFpbmVyPWF9O0R5Z3JhcGguR1ZpekNoYXJ0LnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGIs
YSl7dGhpcy5jb250YWluZXIuaW5uZXJIVE1MPSIiO3RoaXMuZGF0ZV9ncmFwaD1uZXcgRHlncmFw
aCh0aGlzLmNvbnRhaW5lcixiLGEpfTtEeWdyYXBoLkdWaXpDaGFydC5wcm90b3R5cGUuc2V0U2Vs
ZWN0aW9uPWZ1bmN0aW9uKGIpe3ZhciBhPWZhbHNlO2lmKGIubGVuZ3RoKXthPWJbMF0ucm93fXRo
aXMuZGF0ZV9ncmFwaC5zZXRTZWxlY3Rpb24oYSl9O0R5Z3JhcGguR1ZpekNoYXJ0LnByb3RvdHlw
ZS5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgYj1bXTt2YXIgYz10aGlzLmRhdGVfZ3JhcGgu
Z2V0U2VsZWN0aW9uKCk7aWYoYzwwKXtyZXR1cm4gYn1jb2w9MTtmb3IodmFyIGEgaW4gdGhpcy5k
YXRlX2dyYXBoLmxheW91dF8uZGF0YXNldHMpe2IucHVzaCh7cm93OmMsY29sdW1uOmNvbH0pO2Nv
bCsrfXJldHVybiBifTtEYXRlR3JhcGg9RHlncmFwaDtmdW5jdGlvbiBSR0JDb2xvcihnKXt0aGlz
Lm9rPWZhbHNlO2lmKGcuY2hhckF0KDApPT0iIyIpe2c9Zy5zdWJzdHIoMSw2KX1nPWcucmVwbGFj
ZSgvIC9nLCIiKTtnPWcudG9Mb3dlckNhc2UoKTt2YXIgYT17YWxpY2VibHVlOiJmMGY4ZmYiLGFu
dGlxdWV3aGl0ZToiZmFlYmQ3IixhcXVhOiIwMGZmZmYiLGFxdWFtYXJpbmU6IjdmZmZkNCIsYXp1
cmU6ImYwZmZmZiIsYmVpZ2U6ImY1ZjVkYyIsYmlzcXVlOiJmZmU0YzQiLGJsYWNrOiIwMDAwMDAi
LGJsYW5jaGVkYWxtb25kOiJmZmViY2QiLGJsdWU6IjAwMDBmZiIsYmx1ZXZpb2xldDoiOGEyYmUy
Iixicm93bjoiYTUyYTJhIixidXJseXdvb2Q6ImRlYjg4NyIsY2FkZXRibHVlOiI1ZjllYTAiLGNo
YXJ0cmV1c2U6IjdmZmYwMCIsY2hvY29sYXRlOiJkMjY5MWUiLGNvcmFsOiJmZjdmNTAiLGNvcm5m
bG93ZXJibHVlOiI2NDk1ZWQiLGNvcm5zaWxrOiJmZmY4ZGMiLGNyaW1zb246ImRjMTQzYyIsY3lh
bjoiMDBmZmZmIixkYXJrYmx1ZToiMDAwMDhiIixkYXJrY3lhbjoiMDA4YjhiIixkYXJrZ29sZGVu
cm9kOiJiODg2MGIiLGRhcmtncmF5OiJhOWE5YTkiLGRhcmtncmVlbjoiMDA2NDAwIixkYXJra2hh
a2k6ImJkYjc2YiIsZGFya21hZ2VudGE6IjhiMDA4YiIsZGFya29saXZlZ3JlZW46IjU1NmIyZiIs
ZGFya29yYW5nZToiZmY4YzAwIixkYXJrb3JjaGlkOiI5OTMyY2MiLGRhcmtyZWQ6IjhiMDAwMCIs
ZGFya3NhbG1vbjoiZTk5NjdhIixkYXJrc2VhZ3JlZW46IjhmYmM4ZiIsZGFya3NsYXRlYmx1ZToi
NDgzZDhiIixkYXJrc2xhdGVncmF5OiIyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IjAwY2VkMSIsZGFy
a3Zpb2xldDoiOTQwMGQzIixkZWVwcGluazoiZmYxNDkzIixkZWVwc2t5Ymx1ZToiMDBiZmZmIixk
aW1ncmF5OiI2OTY5NjkiLGRvZGdlcmJsdWU6IjFlOTBmZiIsZmVsZHNwYXI6ImQxOTI3NSIsZmly
ZWJyaWNrOiJiMjIyMjIiLGZsb3JhbHdoaXRlOiJmZmZhZjAiLGZvcmVzdGdyZWVuOiIyMjhiMjIi
LGZ1Y2hzaWE6ImZmMDBmZiIsZ2FpbnNib3JvOiJkY2RjZGMiLGdob3N0d2hpdGU6ImY4ZjhmZiIs
Z29sZDoiZmZkNzAwIixnb2xkZW5yb2Q6ImRhYTUyMCIsZ3JheToiODA4MDgwIixncmVlbjoiMDA4
MDAwIixncmVlbnllbGxvdzoiYWRmZjJmIixob25leWRldzoiZjBmZmYwIixob3RwaW5rOiJmZjY5
YjQiLGluZGlhbnJlZDoiY2Q1YzVjIixpbmRpZ286IjRiMDA4MiIsaXZvcnk6ImZmZmZmMCIsa2hh
a2k6ImYwZTY4YyIsbGF2ZW5kZXI6ImU2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiZmZmMGY1IixsYXdu
Z3JlZW46IjdjZmMwMCIsbGVtb25jaGlmZm9uOiJmZmZhY2QiLGxpZ2h0Ymx1ZToiYWRkOGU2Iixs
aWdodGNvcmFsOiJmMDgwODAiLGxpZ2h0Y3lhbjoiZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxv
dzoiZmFmYWQyIixsaWdodGdyZXk6ImQzZDNkMyIsbGlnaHRncmVlbjoiOTBlZTkwIixsaWdodHBp
bms6ImZmYjZjMSIsbGlnaHRzYWxtb246ImZmYTA3YSIsbGlnaHRzZWFncmVlbjoiMjBiMmFhIixs
aWdodHNreWJsdWU6Ijg3Y2VmYSIsbGlnaHRzbGF0ZWJsdWU6Ijg0NzBmZiIsbGlnaHRzbGF0ZWdy
YXk6Ijc3ODg5OSIsbGlnaHRzdGVlbGJsdWU6ImIwYzRkZSIsbGlnaHR5ZWxsb3c6ImZmZmZlMCIs
bGltZToiMDBmZjAwIixsaW1lZ3JlZW46IjMyY2QzMiIsbGluZW46ImZhZjBlNiIsbWFnZW50YToi
ZmYwMGZmIixtYXJvb246IjgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiNjZjZGFhIixtZWRpdW1i
bHVlOiIwMDAwY2QiLG1lZGl1bW9yY2hpZDoiYmE1NWQzIixtZWRpdW1wdXJwbGU6IjkzNzBkOCIs
bWVkaXVtc2VhZ3JlZW46IjNjYjM3MSIsbWVkaXVtc2xhdGVibHVlOiI3YjY4ZWUiLG1lZGl1bXNw
cmluZ2dyZWVuOiIwMGZhOWEiLG1lZGl1bXR1cnF1b2lzZToiNDhkMWNjIixtZWRpdW12aW9sZXRy
ZWQ6ImM3MTU4NSIsbWlkbmlnaHRibHVlOiIxOTE5NzAiLG1pbnRjcmVhbToiZjVmZmZhIixtaXN0
eXJvc2U6ImZmZTRlMSIsbW9jY2FzaW46ImZmZTRiNSIsbmF2YWpvd2hpdGU6ImZmZGVhZCIsbmF2
eToiMDAwMDgwIixvbGRsYWNlOiJmZGY1ZTYiLG9saXZlOiI4MDgwMDAiLG9saXZlZHJhYjoiNmI4
ZTIzIixvcmFuZ2U6ImZmYTUwMCIsb3JhbmdlcmVkOiJmZjQ1MDAiLG9yY2hpZDoiZGE3MGQ2Iixw
YWxlZ29sZGVucm9kOiJlZWU4YWEiLHBhbGVncmVlbjoiOThmYjk4IixwYWxldHVycXVvaXNlOiJh
ZmVlZWUiLHBhbGV2aW9sZXRyZWQ6ImQ4NzA5MyIscGFwYXlhd2hpcDoiZmZlZmQ1IixwZWFjaHB1
ZmY6ImZmZGFiOSIscGVydToiY2Q4NTNmIixwaW5rOiJmZmMwY2IiLHBsdW06ImRkYTBkZCIscG93
ZGVyYmx1ZToiYjBlMGU2IixwdXJwbGU6IjgwMDA4MCIscmVkOiJmZjAwMDAiLHJvc3licm93bjoi
YmM4ZjhmIixyb3lhbGJsdWU6IjQxNjllMSIsc2FkZGxlYnJvd246IjhiNDUxMyIsc2FsbW9uOiJm
YTgwNzIiLHNhbmR5YnJvd246ImY0YTQ2MCIsc2VhZ3JlZW46IjJlOGI1NyIsc2Vhc2hlbGw6ImZm
ZjVlZSIsc2llbm5hOiJhMDUyMmQiLHNpbHZlcjoiYzBjMGMwIixza3libHVlOiI4N2NlZWIiLHNs
YXRlYmx1ZToiNmE1YWNkIixzbGF0ZWdyYXk6IjcwODA5MCIsc25vdzoiZmZmYWZhIixzcHJpbmdn
cmVlbjoiMDBmZjdmIixzdGVlbGJsdWU6IjQ2ODJiNCIsdGFuOiJkMmI0OGMiLHRlYWw6IjAwODA4
MCIsdGhpc3RsZToiZDhiZmQ4Iix0b21hdG86ImZmNjM0NyIsdHVycXVvaXNlOiI0MGUwZDAiLHZp
b2xldDoiZWU4MmVlIix2aW9sZXRyZWQ6ImQwMjA5MCIsd2hlYXQ6ImY1ZGViMyIsd2hpdGU6ImZm
ZmZmZiIsd2hpdGVzbW9rZToiZjVmNWY1Iix5ZWxsb3c6ImZmZmYwMCIseWVsbG93Z3JlZW46Ijlh
Y2QzMiJ9O2Zvcih2YXIgYyBpbiBhKXtpZihnPT1jKXtnPWFbY119fXZhciBoPVt7cmU6L15yZ2Jc
KChcZHsxLDN9KSxccyooXGR7MSwzfSksXHMqKFxkezEsM30pXCkkLyxleGFtcGxlOlsicmdiKDEy
MywgMjM0LCA0NSkiLCJyZ2IoMjU1LDIzNCwyNDUpIl0scHJvY2VzczpmdW5jdGlvbihqKXtyZXR1
cm5bcGFyc2VJbnQoalsxXSkscGFyc2VJbnQoalsyXSkscGFyc2VJbnQoalszXSldfX0se3JlOi9e
KFx3ezJ9KShcd3syfSkoXHd7Mn0pJC8sZXhhbXBsZTpbIiMwMGZmMDAiLCIzMzY2OTkiXSxwcm9j
ZXNzOmZ1bmN0aW9uKGope3JldHVybltwYXJzZUludChqWzFdLDE2KSxwYXJzZUludChqWzJdLDE2
KSxwYXJzZUludChqWzNdLDE2KV19fSx7cmU6L14oXHd7MX0pKFx3ezF9KShcd3sxfSkkLyxleGFt
cGxlOlsiI2ZiMCIsImYwZiJdLHByb2Nlc3M6ZnVuY3Rpb24oail7cmV0dXJuW3BhcnNlSW50KGpb
MV0ralsxXSwxNikscGFyc2VJbnQoalsyXStqWzJdLDE2KSxwYXJzZUludChqWzNdK2pbM10sMTYp
XX19XTtmb3IodmFyIGI9MDtiPGgubGVuZ3RoO2IrKyl7dmFyIGU9aFtiXS5yZTt2YXIgZD1oW2Jd
LnByb2Nlc3M7dmFyIGY9ZS5leGVjKGcpO2lmKGYpe2NoYW5uZWxzPWQoZik7dGhpcy5yPWNoYW5u
ZWxzWzBdO3RoaXMuZz1jaGFubmVsc1sxXTt0aGlzLmI9Y2hhbm5lbHNbMl07dGhpcy5vaz10cnVl
fX10aGlzLnI9KHRoaXMucjwwfHxpc05hTih0aGlzLnIpKT8wOigodGhpcy5yPjI1NSk/MjU1OnRo
aXMucik7dGhpcy5nPSh0aGlzLmc8MHx8aXNOYU4odGhpcy5nKSk/MDooKHRoaXMuZz4yNTUpPzI1
NTp0aGlzLmcpO3RoaXMuYj0odGhpcy5iPDB8fGlzTmFOKHRoaXMuYikpPzA6KCh0aGlzLmI+MjU1
KT8yNTU6dGhpcy5iKTt0aGlzLnRvUkdCPWZ1bmN0aW9uKCl7cmV0dXJuInJnYigiK3RoaXMucisi
LCAiK3RoaXMuZysiLCAiK3RoaXMuYisiKSJ9O3RoaXMudG9IZXg9ZnVuY3Rpb24oKXt2YXIgbD10
aGlzLnIudG9TdHJpbmcoMTYpO3ZhciBrPXRoaXMuZy50b1N0cmluZygxNik7dmFyIGo9dGhpcy5i
LnRvU3RyaW5nKDE2KTtpZihsLmxlbmd0aD09MSl7bD0iMCIrbH1pZihrLmxlbmd0aD09MSl7az0i
MCIra31pZihqLmxlbmd0aD09MSl7aj0iMCIran1yZXR1cm4iIyIrbCtrK2p9fURhdGUuZXh0PXt9
O0RhdGUuZXh0LnV0aWw9e307RGF0ZS5leHQudXRpbC54UGFkPWZ1bmN0aW9uKGEsYyxiKXtpZih0
eXBlb2YoYik9PSJ1bmRlZmluZWQiKXtiPTEwfWZvcig7cGFyc2VJbnQoYSwxMCk8YiYmYj4xO2Iv
PTEwKXthPWMudG9TdHJpbmcoKSthfXJldHVybiBhLnRvU3RyaW5nKCl9O0RhdGUucHJvdG90eXBl
LmxvY2FsZT0iZW4tR0IiO2lmKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIikm
JmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF0ubGFuZyl7RGF0ZS5wcm90
b3R5cGUubG9jYWxlPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF0ubGFu
Z31EYXRlLmV4dC5sb2NhbGVzPXt9O0RhdGUuZXh0LmxvY2FsZXMuZW49e2E6WyJTdW4iLCJNb24i
LCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxBOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVl
c2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxiOlsiSmFu
IiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0Iiwi
Tm92IiwiRGVjIl0sQjpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXki
LCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIs
IkRlY2VtYmVyIl0sYzoiJWEgJWQgJWIgJVkgJVQgJVoiLHA6WyJBTSIsIlBNIl0sUDpbImFtIiwi
cG0iXSx4OiIlZC8lbS8leSIsWDoiJVQifTtEYXRlLmV4dC5sb2NhbGVzWyJlbi1VUyJdPURhdGUu
ZXh0LmxvY2FsZXMuZW47RGF0ZS5leHQubG9jYWxlc1siZW4tVVMiXS5jPSIlYSAlZCAlYiAlWSAl
ciAlWiI7RGF0ZS5leHQubG9jYWxlc1siZW4tVVMiXS54PSIlRCI7RGF0ZS5leHQubG9jYWxlc1si
ZW4tVVMiXS5YPSIlciI7RGF0ZS5leHQubG9jYWxlc1siZW4tR0IiXT1EYXRlLmV4dC5sb2NhbGVz
LmVuO0RhdGUuZXh0LmxvY2FsZXNbImVuLUFVIl09RGF0ZS5leHQubG9jYWxlc1siZW4tR0IiXTtE
YXRlLmV4dC5mb3JtYXRzPXthOmZ1bmN0aW9uKGEpe3JldHVybiBEYXRlLmV4dC5sb2NhbGVzW2Eu
bG9jYWxlXS5hW2EuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKGEpe3JldHVybiBEYXRlLmV4dC5sb2Nh
bGVzW2EubG9jYWxlXS5BW2EuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKGEpe3JldHVybiBEYXRlLmV4
dC5sb2NhbGVzW2EubG9jYWxlXS5iW2EuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24oYSl7cmV0dXJu
IERhdGUuZXh0LmxvY2FsZXNbYS5sb2NhbGVdLkJbYS5nZXRNb250aCgpXX0sYzoidG9Mb2NhbGVT
dHJpbmciLEM6ZnVuY3Rpb24oYSl7cmV0dXJuIERhdGUuZXh0LnV0aWwueFBhZChwYXJzZUludChh
LmdldEZ1bGxZZWFyKCkvMTAwLDEwKSwwKX0sZDpbImdldERhdGUiLCIwIl0sZTpbImdldERhdGUi
LCIgIl0sZzpmdW5jdGlvbihhKXtyZXR1cm4gRGF0ZS5leHQudXRpbC54UGFkKHBhcnNlSW50KERh
dGUuZXh0LnV0aWwuRyhhKS8xMDAsMTApLDApfSxHOmZ1bmN0aW9uKGMpe3ZhciBlPWMuZ2V0RnVs
bFllYXIoKTt2YXIgYj1wYXJzZUludChEYXRlLmV4dC5mb3JtYXRzLlYoYyksMTApO3ZhciBhPXBh
cnNlSW50KERhdGUuZXh0LmZvcm1hdHMuVyhjKSwxMCk7aWYoYT5iKXtlKyt9ZWxzZXtpZihhPT09
MCYmYj49NTIpe2UtLX19cmV0dXJuIGV9LEg6WyJnZXRIb3VycyIsIjAiXSxJOmZ1bmN0aW9uKGIp
e3ZhciBhPWIuZ2V0SG91cnMoKSUxMjtyZXR1cm4gRGF0ZS5leHQudXRpbC54UGFkKGE9PT0wPzEy
OmEsMCl9LGo6ZnVuY3Rpb24oYyl7dmFyIGE9Yy1uZXcgRGF0ZSgiIitjLmdldEZ1bGxZZWFyKCkr
Ii8xLzEgR01UIik7YSs9Yy5nZXRUaW1lem9uZU9mZnNldCgpKjYwMDAwO3ZhciBiPXBhcnNlSW50
KGEvNjAwMDAvNjAvMjQsMTApKzE7cmV0dXJuIERhdGUuZXh0LnV0aWwueFBhZChiLDAsMTAwKX0s
bTpmdW5jdGlvbihhKXtyZXR1cm4gRGF0ZS5leHQudXRpbC54UGFkKGEuZ2V0TW9udGgoKSsxLDAp
fSxNOlsiZ2V0TWludXRlcyIsIjAiXSxwOmZ1bmN0aW9uKGEpe3JldHVybiBEYXRlLmV4dC5sb2Nh
bGVzW2EubG9jYWxlXS5wW2EuZ2V0SG91cnMoKT49MTI/MTowXX0sUDpmdW5jdGlvbihhKXtyZXR1
cm4gRGF0ZS5leHQubG9jYWxlc1thLmxvY2FsZV0uUFthLmdldEhvdXJzKCk+PTEyPzE6MF19LFM6
WyJnZXRTZWNvbmRzIiwiMCJdLHU6ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXREYXkoKTtyZXR1cm4g
Yj09PTA/NzpifSxVOmZ1bmN0aW9uKGUpe3ZhciBhPXBhcnNlSW50KERhdGUuZXh0LmZvcm1hdHMu
aihlKSwxMCk7dmFyIGM9Ni1lLmdldERheSgpO3ZhciBiPXBhcnNlSW50KChhK2MpLzcsMTApO3Jl
dHVybiBEYXRlLmV4dC51dGlsLnhQYWQoYiwwKX0sVjpmdW5jdGlvbihlKXt2YXIgYz1wYXJzZUlu
dChEYXRlLmV4dC5mb3JtYXRzLlcoZSksMTApO3ZhciBhPShuZXcgRGF0ZSgiIitlLmdldEZ1bGxZ
ZWFyKCkrIi8xLzEiKSkuZ2V0RGF5KCk7dmFyIGI9YysoYT40fHxhPD0xPzA6MSk7aWYoYj09NTMm
JihuZXcgRGF0ZSgiIitlLmdldEZ1bGxZZWFyKCkrIi8xMi8zMSIpKS5nZXREYXkoKTw0KXtiPTF9
ZWxzZXtpZihiPT09MCl7Yj1EYXRlLmV4dC5mb3JtYXRzLlYobmV3IERhdGUoIiIrKGUuZ2V0RnVs
bFllYXIoKS0xKSsiLzEyLzMxIikpfX1yZXR1cm4gRGF0ZS5leHQudXRpbC54UGFkKGIsMCl9LHc6
ImdldERheSIsVzpmdW5jdGlvbihlKXt2YXIgYT1wYXJzZUludChEYXRlLmV4dC5mb3JtYXRzLmoo
ZSksMTApO3ZhciBjPTctRGF0ZS5leHQuZm9ybWF0cy51KGUpO3ZhciBiPXBhcnNlSW50KChhK2Mp
LzcsMTApO3JldHVybiBEYXRlLmV4dC51dGlsLnhQYWQoYiwwLDEwKX0seTpmdW5jdGlvbihhKXty
ZXR1cm4gRGF0ZS5leHQudXRpbC54UGFkKGEuZ2V0RnVsbFllYXIoKSUxMDAsMCl9LFk6ImdldEZ1
bGxZZWFyIix6OmZ1bmN0aW9uKGMpe3ZhciBiPWMuZ2V0VGltZXpvbmVPZmZzZXQoKTt2YXIgYT1E
YXRlLmV4dC51dGlsLnhQYWQocGFyc2VJbnQoTWF0aC5hYnMoYi82MCksMTApLDApO3ZhciBlPURh
dGUuZXh0LnV0aWwueFBhZChiJTYwLDApO3JldHVybihiPjA/Ii0iOiIrIikrYStlfSxaOmZ1bmN0
aW9uKGEpe3JldHVybiBhLnRvU3RyaW5nKCkucmVwbGFjZSgvXi4qXCgoW14pXSspXCkkLywiJDEi
KX0sIiUiOmZ1bmN0aW9uKGEpe3JldHVybiIlIn19O0RhdGUuZXh0LmFnZ3JlZ2F0ZXM9e2M6Imxv
Y2FsZSIsRDoiJW0vJWQvJXkiLGg6IiViIixuOiJcbiIscjoiJUk6JU06JVMgJXAiLFI6IiVIOiVN
Iix0OiJcdCIsVDoiJUg6JU06JVMiLHg6ImxvY2FsZSIsWDoibG9jYWxlIn07RGF0ZS5leHQuYWdn
cmVnYXRlcy56PURhdGUuZXh0LmZvcm1hdHMueihuZXcgRGF0ZSgpKTtEYXRlLmV4dC5hZ2dyZWdh
dGVzLlo9RGF0ZS5leHQuZm9ybWF0cy5aKG5ldyBEYXRlKCkpO0RhdGUuZXh0LnVuc3VwcG9ydGVk
PXt9O0RhdGUucHJvdG90eXBlLnN0cmZ0aW1lPWZ1bmN0aW9uKGEpe2lmKCEodGhpcy5sb2NhbGUg
aW4gRGF0ZS5leHQubG9jYWxlcykpe2lmKHRoaXMubG9jYWxlLnJlcGxhY2UoLy1bYS16QS1aXSsk
LywiIikgaW4gRGF0ZS5leHQubG9jYWxlcyl7dGhpcy5sb2NhbGU9dGhpcy5sb2NhbGUucmVwbGFj
ZSgvLVthLXpBLVpdKyQvLCIiKX1lbHNle3RoaXMubG9jYWxlPSJlbi1HQiJ9fXZhciBjPXRoaXM7
d2hpbGUoYS5tYXRjaCgvJVtjRGhuclJ0VHhYelpdLykpe2E9YS5yZXBsYWNlKC8lKFtjRGhuclJ0
VHhYelpdKS9nLGZ1bmN0aW9uKGUsZCl7dmFyIGc9RGF0ZS5leHQuYWdncmVnYXRlc1tkXTtyZXR1
cm4oZz09ImxvY2FsZSI/RGF0ZS5leHQubG9jYWxlc1tjLmxvY2FsZV1bZF06Zyl9KX12YXIgYj1h
LnJlcGxhY2UoLyUoW2FBYkJDZGVnR0hJam1NcFBTdVVWd1d5WSVdKS9nLGZ1bmN0aW9uKGUsZCl7
dmFyIGc9RGF0ZS5leHQuZm9ybWF0c1tkXTtpZih0eXBlb2YoZyk9PSJzdHJpbmciKXtyZXR1cm4g
Y1tnXSgpfWVsc2V7aWYodHlwZW9mKGcpPT0iZnVuY3Rpb24iKXtyZXR1cm4gZy5jYWxsKGMsYyl9
ZWxzZXtpZih0eXBlb2YoZyk9PSJvYmplY3QiJiZ0eXBlb2YoZ1swXSk9PSJzdHJpbmciKXtyZXR1
cm4gRGF0ZS5leHQudXRpbC54UGFkKGNbZ1swXV0oKSxnWzFdKX1lbHNle3JldHVybiBkfX19fSk7
Yz1udWxsO3JldHVybiBifTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3Nf
ZGFzaGJvYXJkLmh0bWwgYi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmNlNDM3ZGUxZWMwZDUw
ZjkwMzViYmRlNGJmZmE3M2ZhYTQ1N2U0NQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3Rz
RGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmQuaHRt
bApAQCAtMCwwICsxLDI1MTAgQEAKKzwhLS0gQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0Ogor
CisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgoraW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorZGlzdHJpYnV0
aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KK3RoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLT4KKzwh
RE9DVFlQRSBIVE1MPgorPGh0bWw+CisKKzxoZWFkPgorPHRpdGxlPkNocm9taXVtL1dlYktpdCBU
ZXN0IEhpc3Rvcnk8L3RpdGxlPgorPHN0eWxlPgorYm9keSB7CisgICAgZm9udC1mYW1pbHk6IGFy
aWFsOworICAgIGZvbnQtc2l6ZTogMTNweDsKK30KK2gyIHsKKyAgICBmb250LXNpemU6IDE2cHg7
CisgICAgbWFyZ2luLWJvdHRvbTogLjI1ZW07Cit9CitoMyB7CisgICAgZm9udC1zaXplOiAxM3B4
OworICAgIG1hcmdpbjogMDsKK30KK2lucHV0IHsKKyAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7Cit9
CitsYWJlbCB7CisgICAgcGFkZGluZy1sZWZ0OiAyZW07CisgICAgd2hpdGUtc3BhY2U6IG5vd3Jh
cDsKK30KKy5mb3JtcyB7CisgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7Cit9CisuZm9ybXMgPiAq
IHsKKyAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKK30KKy5mb3JtcyBzcGFuIHsKKyAgICBwYWRk
aW5nOiAwcHggM3B4OworfQorI3Rlc3RzLWZvcm0geworICAgIGRpc3BsYXk6IC13ZWJraXQtYm94
OworICAgIC13ZWJraXQtYm94LWZsZXg6IDE7Cit9CisjdGVzdHMtZm9ybSA+ICogeworICAgIGRp
c3BsYXk6IC13ZWJraXQtYm94OworfQorI3Rlc3RzLWlucHV0IHsKKyAgICBkaXNwbGF5OiAtd2Vi
a2l0LWJveDsKKyAgICAtd2Via2l0LWJveC1mbGV4OiAxOworfQorI3Jlc3VsdC1pbnB1dCB7Cisg
ICAgd2lkdGg6IDdlbTsKK30KKy50ZXN0LWxpbmsuYnVpbGRlci1uYW1lIHsKKyAgICB3aGl0ZS1z
cGFjZTogbm93cmFwOworfQorLnRlc3QtbGluaywgLm9wdGlvbnMtY29udGFpbmVyIHsKKyAgICBw
YWRkaW5nOiAwIDJweDsKK30KKy50ZXN0LXRhYmxlIHsKKyAgICB3aGl0ZS1zcGFjZTogbm93cmFw
OworICAgIGJvcmRlci1zcGFjaW5nOiAxcHg7Cit9CisvKiBMZXQgdGhlIGJ1Z3MgY29sdW1uIHdy
YXAuICovCisudGVzdC10YWJsZSB0ciA+IHRkOm50aC1jaGlsZCgyKSB7CisgICAgd2hpdGUtc3Bh
Y2U6IG5vcm1hbDsKK30KKy50ZXN0LXRhYmxlIHsKKyAgICB3aWR0aDogMTAwJTsKK30KKy50ZXN0
LXRhYmxlIHRyIHsKKyAgICBib3JkZXI6IDFweCBzb2xpZCByZWQ7CisgICAgYmFja2dyb3VuZC1j
b2xvcjogI0U4RThFODsKK30KKy50ZXN0LXRhYmxlIHRib2R5IHRyOmhvdmVyIHsKKyAgICBvcGFj
aXR5OiAuNzsKK30KKy50ZXN0LXRhYmxlIHRoIHsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBu
b25lOworICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7Cit9CisubGluaywgLnNvcnRhYmxlIC5o
ZWFkZXItdGV4dCB7CisgICAgY29sb3I6IGJsdWU7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRl
cmxpbmU7CisgICAgY3Vyc29yOiBwb2ludGVyOworfQorLnRhYmxlLWhlYWRlci1jb250ZW50LAor
LnRhYmxlLWhlYWRlci1jb250ZW50ICogeworICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OworfQor
LnRhYmxlLWhlYWRlci1jb250ZW50ICogeworICAgIC13ZWJraXQtYm94LWZsZXg6IDE7CisgICAg
Y3Vyc29yOiBwb2ludGVyOworICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7Cit9CisucmVzdWx0cyB7
CisgICAgY3Vyc29yOiBwb2ludGVyOworICAgIHBhZGRpbmc6IDAgMXB4OworICAgIGZvbnQtc2l6
ZTogMTBweDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisjbGVnZW5kIHsKKyAgICBwb3Np
dGlvbjogZml4ZWQ7CisgICAgdG9wOiA1cHg7CisgICAgcmlnaHQ6IDVweDsKKyAgICB3aWR0aDog
NDAwcHg7CisgICAgcGFkZGluZzogMnB4OworICAgIGJvcmRlcjogMnB4IHNvbGlkIGdyZXk7Cisg
ICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgei1pbmRleDogMTsKK30KKyNsZWdlbmQg
dWwsICNsZWdlbmQgb2wgeworICAgIG1hcmdpbi10b3A6IDA7CisgICAgbWFyZ2luLWJvdHRvbTog
NXB4OworfQorI2xlZ2VuZC1jb250ZW50cyAqIHsKKyAgICBtYXJnaW46IDNweCAwOworICAgIHBh
ZGRpbmc6IDAgMnB4OworICAgIGZsb2F0OiBsZWZ0OworICAgIGJvcmRlcjogMXB4IHNvbGlkIGdy
ZXk7Cit9CisudGVzdC10YWJsZSAud3JvbmctZXhwZWN0YXRpb25zLAorLndyb25nLWV4cGVjdGF0
aW9ucyB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI3Bpbms7Cit9CisuUCB7CisgICAgYmFja2dy
b3VuZC1jb2xvcjogIzhmZGY1ZjsKK30KKy5OIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZm
OworfQorLkMgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmMzNDM7Cit9CisuVCB7CisgICAg
YmFja2dyb3VuZC1jb2xvcjogI2ZmZmM2YzsKK30KKy5JIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9y
OiAjNjlmOworfQorLlMgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNjNmM7Cit9CisuRiB7Cisg
ICAgYmFja2dyb3VuZC1jb2xvcjogI2U5ODA4MDsKK30KKy5PIHsKKyAgICBiYWNrZ3JvdW5kLWNv
bG9yOiAjOGE3NzAwOworfQorLlogeworICAgIGJhY2tncm91bmQtY29sb3I6ICM5NmY7Cit9Cisj
bGVnZW5kIC5tZXJnZSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7CisgICAgY29sb3I6
IHdoaXRlOworfQorLnRlc3QtdGFibGUgLm1lcmdlIHsKKyAgICBib3JkZXItcmlnaHQ6IHNvbGlk
IDJweCAjMDAwOworICAgIHBhZGRpbmctcmlnaHQ6IDA7Cit9Cisuc2VwYXJhdG9yIHsKKyAgICBi
b3JkZXI6IDFweCBzb2xpZCBsaWdodGdyYXk7CisgICAgaGVpZ2h0OiAwcHg7Cit9CisjcGFzc2lu
Zy10ZXN0cywKKyNza2lwcGVkLXRlc3RzIHsKKyAgICAtd2Via2l0LWNvbHVtbi1jb3VudDogMzsK
KyAgICAtd2Via2l0LWNvbHVtbi1nYXA6IDI1cHg7CisgICAgLXdlYmtpdC1jb2x1bW4tcnVsZTog
MXB4IGRhc2hlZCBibGFjazsKKyAgICAtbW96LWNvbHVtbi1jb3VudDogMzsKKyAgICAtbW96LWNv
bHVtbi1nYXA6IDI1cHg7CisgICAgLW1vei1jb2x1bW4tcnVsZTogMXB4IGRhc2hlZCBibGFjazsK
K30KKy5ub3QtZm91bmQgeworICAgIGNvbG9yOiByZWQ7CisgICAgZm9udC1zaXplOiBsYXJnZTsK
K30KKyNsb2FkaW5nLXVpIHsKKyAgICBwb3NpdGlvbjogZml4ZWQ7CisgICAgdG9wOiAwOworICAg
IGxlZnQ6IDA7CisgICAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OworICAgIHBhZGRpbmc6IDVw
eDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9Cisj
cG9wdXAgeworICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworICAgIHotaW5kZXg6IDE7Cisg
ICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGJvcmRlcjogM3B4IHNvbGlkIGdyZXk7CisgICAg
cGFkZGluZzogM3B4OworICAgIC13ZWJraXQtYm94LXNoYWRvdzogNXB4IDVweCA1cHggcmdiYSgw
LCAwLCAwLCAwLjUpOworICAgIC1tb3otYm94LXNoYWRvdzogNXB4IDVweCA1cHggcmdiYSgwLCAw
LCAwLCAwLjUpOworICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4OworICAgIC1tb3otYm9y
ZGVyLXJhZGl1czogNXB4OworfQorI3BvcHVwID4gdWwgeworICAgIG1hcmdpbjogMDsKKyAgICBw
YWRkaW5nLWxlZnQ6IDIwcHg7Cit9CisuZXhwZWN0YXRpb25zLWNvbnRhaW5lciB7CisgICAgY2xl
YXI6IGJvdGg7Cit9CisuZXhwZWN0YXRpb25zLWl0ZW0geworICAgIGZsb2F0OiBsZWZ0OworICAg
IGJvcmRlcjogMXB4IHNvbGlkIGdyZXk7CisgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CisgICAg
ZGlzcGxheTogLW1vei1ib3g7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIC13ZWJraXQt
Ym94LW9yaWVudDogdmVydGljYWw7CisgICAgLW1vei1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKK30K
Ky5leHBlY3RhdGlvbnMtaXRlbSAuZXhwZWN0YXRpb24geworICAgIHdpZHRoOiA0MDBweDsKKyAg
ICBoZWlnaHQ6IDMwMHB4OworICAgIGJvcmRlcjogMDsKKyAgICBib3JkZXItdG9wOiAxcHggc29s
aWQgZ3JleTsKKyAgICBvdmVyZmxvdzogYXV0bzsKKyAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsK
KyAgICBkaXNwbGF5OiAtbW96LWJveDsKKyAgICAtd2Via2l0LWJveC1mbGV4OiAxOworICAgIC1t
b3otYm94LWZsZXg6IDE7Cit9CitwcmUuZXhwZWN0YXRpb24geworICAgIHBhZGRpbmc6IDhweDsK
KyAgICBtYXJnaW46IDA7CisgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKK30KKy5leHBlY3Rh
dGlvbnMtaXRlbSAubGFyZ2UgeworICAgIHdpZHRoOiA4MDBweDsKKyAgICBoZWlnaHQ6IDYwMHB4
OworfQorLm5vbi13ZWJraXQtcmVzdWx0cyB7CisgICAgd2lkdGg6IDk5JTsKK30KKy51c2VkLXBs
YXRmb3JtIHsKKyAgICBmbG9hdDogcmlnaHQ7CisgICAgY29sb3I6IGRhcmtibHVlOworICAgIG1h
cmdpbjogMCA1cHg7Cit9CisuZXhwZWN0YXRpb25zLXRpdGxlIHsKKyAgICAvKiBIYWNrIHRvIG1h
a2UgYSBjb250YWluaW5nIGJsb2NrIGZvciBhYnNvbHV0ZSBwb3NpdGlvbmVkIGVsZW1lbnRzLiAq
LworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBjbGVhcjogYm90aDsKK30KKy50aXRsZSB7
CisgICAgLyogUG9zaXRpb24gYWJzb2x1dGVseSBzbyB0aGUgY29udGFpbmVyIGRvZXMgbm90IGdy
b3cgdG8gY29udGFpbiB0aGlzLiAqLworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKK30KKy5wbGF0
Zm9ybXMgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICB6LWlu
ZGV4OiAxOworfQorLmZpbGUtYnVnIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBmb250
LXNpemU6IDExcHg7Cit9CisucG5nY2hlY2tzdW0geworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICByaWdodDogMDsKKyAgICBib3R0b206IDA7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2Zm
ZmZjODsKKyAgICB2aXNpYmlsaXR5OiBoaWRkZW47Cit9CisuZXhwZWN0YXRpb25zLWl0ZW06aG92
ZXIgLnBuZ2NoZWNrc3VtIHsKKyAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOworfQorPC9zdHlsZT4K
KworPHNjcmlwdCBzcmM9ImJ1aWxkZXJzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJkYXNo
Ym9hcmRfYmFzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisvLyBDT05TVEFOVFMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordmFyIEFMTCA9ICdBTEwnOwor
dmFyIEZPUldBUkQgPSAnZm9yd2FyZCc7Cit2YXIgQkFDS1dBUkQgPSAnYmFja3dhcmQnOwordmFy
IEdURVNUX01PRElGSUVSUyA9IFsnRkxBS1knLCAnRkFJTFMnLCAnTUFZQkUnLCAnRElTQUJMRUQn
XTsKK3ZhciBURVNUX1VSTF9CQVNFX1BBVEhfVFJBQyA9ICdodHRwOi8vdHJhYy53ZWJraXQub3Jn
L2Jyb3dzZXIvdHJ1bmsvTGF5b3V0VGVzdHMvJzsKK3ZhciBURVNUX1VSTF9CQVNFX1BBVEggPSAi
aHR0cDovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rL0xheW91dFRlc3Rz
LyI7Cit2YXIgVEVTVF9SRVNVTFRTX0JBU0VfUEFUSCA9ICdodHRwOi8vYnVpbGQuY2hyb21pdW0u
b3JnL2YvY2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0cy8nOworCisvLyBGSVhNRTogVGhlc2Ug
cGxhdGZvcm0gbmFtZXMgc2hvdWxkIHByb2JhYmx5IGJlIGNoYW5nZWQgdG8gbWF0Y2ggdGhlIGRp
cmVjdG9yaWVzIGluIExheW91dFRlc3RzL3BsYXRmb3JtCisvLyBpbnN0ZWFkIG9mIG1hdGNoaW5n
IHRoZSB2YWx1ZXMgd2UgdXNlIGluIHRoZSB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgZmlsZS4KK3Zh
ciBQTEFURk9STVMgPSBbJ1NOT1dMRU9QQVJEJywgJ0xFT1BBUkQnLCAnWFAnLCAnVklTVEEnLCAn
V0lONycsICdMVUNJRCcsICdBUFBMRV9MRU9QQVJEJywgJ0FQUExFX1NOT1dMRU9QQVJEJywgJ0FQ
UExFX1hQJywgJ0FQUExFX1dJTjcnLCAnR1RLX0xJTlVYJywgJ1FUX0xJTlVYJ107Cit2YXIgUExB
VEZPUk1fVU5JT05TID0geworICAgICdNQUMnOiBbJ0xFT1BBUkQnLCAnU05PV0xFT1BBUkQnXSwK
KyAgICAnV0lOJzogWydYUCcsICdWSVNUQScsICdXSU43J10sCisgICAgJ0xJTlVYJzogWydMVUNJ
RCddCit9CisKKy8vIEZJWE1FOiBNYWtlIHRoZSBnX2FsbEV4cGVjdGF0aW9ucyBkYXRhIHN0cnVj
dHVyZSBleHBsaWNpdGx5IGxpc3QgZXZlcnkgcGxhdGZvcm0gaW5zdGVhZCBvZiBoYXZpbmcgYSBm
YWxsYmFja3MgY29uY2VwdC4KK3ZhciBQTEFURk9STV9GQUxMQkFDS1MgPSB7CisgICAgJ1dJTic6
ICdBTEwnLAorICAgICdYUCc6ICdXSU4nLAorICAgICdWSVNUQSc6ICdXSU4nLAorICAgICdNQUMn
OiAnQUxMJywKKyAgICAnU05PV0xFT1BBUkQnOiAnTUFDJywKKyAgICAnTEVPUEFSRCc6ICdNQUMn
LAorICAgICdMSU5VWCc6ICdBTEwnLAorICAgICdMVUNJRCc6ICdMSU5VWCcKK307Cit2YXIgQlVJ
TERfVFlQRVMgPSB7J0RFQlVHJzogJ0RCRycsICdSRUxFQVNFJzogJ1JFTEVBU0UnfTsKK3ZhciBN
SU5fU0VDT05EU19GT1JfU0xPV19URVNUID0gNDsKK3ZhciBNSU5fU0VDT05EU19GT1JfU0xPV19U
RVNUX0RFQlVHID0gMiAqIE1JTl9TRUNPTkRTX0ZPUl9TTE9XX1RFU1Q7Cit2YXIgRkFJTF9SRVNV
TFRTID0gWydJTUFHRScsICdJTUFHRStURVhUJywgJ1RFWFQnLCAnTUlTU0lORyddOwordmFyIENI
VU5LX1NJWkUgPSAyNTsKK3ZhciBNQVhfUkVTVUxUUyA9IDE1MDA7CisKKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworLy8gTWV0aG9kcyBhbmQgb2JqZWN0cyBmcm9tIGRhc2hib2FyZF9iYXNlLmpzIHRv
IG92ZXJyaWRlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitmdW5jdGlvbiBnZW5lcmF0ZVBhZ2Uo
KQoreworICAgIGlmIChnX2N1cnJlbnRTdGF0ZS51c2VUZXN0RGF0YSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgdXBkYXRlRGVmYXVsdEJ1aWxkZXJTdGF0ZSgpOworICAgIGRvY3VtZW50LmJvZHku
aW5uZXJIVE1MID0gJzxkaXYgaWQ9ImxvYWRpbmctdWkiPkxPQURJTkcuLi48L2Rpdj4nOworICAg
IHNob3dFcnJvcnMoKTsKKworICAgIC8vIHRlc3RzIGV4cGFuZHMgdG8gYWxsIHRlc3RzIHRoYXQg
bWF0Y2ggdGhlIENTViBsaXN0LgorICAgIC8vIHJlc3VsdCBleHBhbmRzIHRvIGFsbCB0ZXN0cyB0
aGF0IGV2ZXIgaGF2ZSB0aGUgZ2l2ZW4gcmVzdWx0CisgICAgaWYgKGdfY3VycmVudFN0YXRlLnRl
c3RzIHx8IGdfY3VycmVudFN0YXRlLnJlc3VsdCkKKyAgICAgICAgZ2VuZXJhdGVQYWdlRm9ySW5k
aXZpZHVhbFRlc3RzKGluZGl2aWR1YWxUZXN0cygpKTsKKyAgICBlbHNlIGlmIChnX2N1cnJlbnRT
dGF0ZS5leHBlY3RhdGlvbnNVcGRhdGUpCisgICAgICAgIGdlbmVyYXRlUGFnZUZvckV4cGVjdGF0
aW9uc1VwZGF0ZSgpOworICAgIGVsc2UKKyAgICAgICAgZ2VuZXJhdGVQYWdlRm9yQnVpbGRlcihn
X2N1cnJlbnRTdGF0ZS5idWlsZGVyKTsKKworICAgIGZvciAodmFyIGJ1aWxkZXIgaW4gZ19idWls
ZGVycykKKyAgICAgICAgcHJvY2Vzc1Rlc3RSZXN1bHRzRm9yQnVpbGRlckFzeW5jKGJ1aWxkZXIp
OworfQorCitmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkKK3sK
KyAgICBzd2l0Y2goa2V5KSB7CisgICAgY2FzZSAndGVzdHMnOgorICAgICAgICB2YWxpZGF0ZVBh
cmFtZXRlcihnX2N1cnJlbnRTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgICAgIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkTmFtZSh2YWx1ZSk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlICdyZXN1bHQnOgorICAg
ICAgICB2YWx1ZSA9IHZhbHVlLnRvVXBwZXJDYXNlKCk7CisgICAgICAgIHZhbGlkYXRlUGFyYW1l
dGVyKGdfY3VycmVudFN0YXRlLCBrZXksIHZhbHVlLAorICAgICAgICAgICAgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgZm9yICh2YXIgcmVzdWx0IGluIExBWU9VVF9URVNUX0VYUEVDVEFU
SU9OU19NQVBfKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBMQVlPVVRfVEVT
VF9FWFBFQ1RBVElPTlNfTUFQX1tyZXN1bHRdKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgJ2J1
aWxkZXInOgorICAgICAgICB2YWxpZGF0ZVBhcmFtZXRlcihnX2N1cnJlbnRTdGF0ZSwga2V5LCB2
YWx1ZSwKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiB2
YWx1ZSBpbiBnX2J1aWxkZXJzOworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgY2FzZSAnc29ydENvbHVtbic6CisgICAgICAgIHZhbGlkYXRlUGFyYW1ldGVyKGdf
Y3VycmVudFN0YXRlLCBrZXksIHZhbHVlLAorICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgLy8gR2V0IGFsbCBwb3NzaWJsZSBoZWFkZXJzIHNpbmNlIHRoZSBhY3R1YWwg
dXNlZCBzZXQgb2YgaGVhZGVycworICAgICAgICAgICAgICAgIC8vIGRlcGVuZHMgb24gdGhlIHZh
bHVlcyBpbiBnX2N1cnJlbnRTdGF0ZSwgd2hpY2ggYXJlIGN1cnJlbnRseSBiZWluZyBzZXQuCisg
ICAgICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSB0YWJsZUhlYWRlcnModHJ1ZSk7CisgICAgICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBzb3J0Q29sdW1uRnJvbVRhYmxlSGVhZGVyKGhl
YWRlcnNbaV0pKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSAndGVzdCcgfHwgdmFs
dWUgPT0gJ2J1aWxkZXInOworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgY2FzZSAnc29ydE9yZGVyJzoKKyAgICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIoZ19jdXJy
ZW50U3RhdGUsIGtleSwgdmFsdWUsCisgICAgICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsdWUgPT0gRk9SV0FSRCB8fCB2YWx1ZSA9PSBCQUNLV0FSRDsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgJ3Jlc3VsdHNI
ZWlnaHQnOgorICAgIGNhc2UgJ3VwZGF0ZUluZGV4JzoKKyAgICBjYXNlICdyZXZpc2lvbic6Cisg
ICAgICAgIHZhbGlkYXRlUGFyYW1ldGVyKGdfY3VycmVudFN0YXRlLCBrZXksIE51bWJlcih2YWx1
ZSksCisgICAgICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFs
dWUubWF0Y2goL15cZCskLyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBjYXNlICdzaG93Q29ycmVjdEV4cGVjdGF0aW9ucyc6CisgICAgY2FzZSAnc2hvd1dy
b25nRXhwZWN0YXRpb25zJzoKKyAgICBjYXNlICdzaG93RXhwZWN0YXRpb25zJzoKKyAgICBjYXNl
ICdzaG93Rmxha3knOgorICAgIGNhc2UgJ3Nob3dMYXJnZUV4cGVjdGF0aW9ucyc6CisgICAgY2Fz
ZSAnbGVnYWN5RXhwZWN0YXRpb25zU2VtYW50aWNzJzoKKyAgICBjYXNlICdzaG93U2tpcHBlZCc6
CisgICAgY2FzZSAnc2hvd1Nsb3cnOgorICAgIGNhc2UgJ3Nob3dVbmV4cGVjdGVkUGFzc2VzJzoK
KyAgICBjYXNlICdzaG93V29udEZpeFNraXAnOgorICAgIGNhc2UgJ2V4cGVjdGF0aW9uc1VwZGF0
ZSc6CisgICAgICAgIGdfY3VycmVudFN0YXRlW2tleV0gPSB2YWx1ZSA9PSAndHJ1ZSc7CisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworZ19kZWZhdWx0U3RhdGVWYWx1ZXMgPSB7CisgICAgc29ydE9yZGVyOiBCQUNL
V0FSRCwKKyAgICBzb3J0Q29sdW1uOiAnZmxha2luZXNzJywKKyAgICBzaG93RXhwZWN0YXRpb25z
OiBmYWxzZSwKKyAgICBzaG93Rmxha3k6IHRydWUsCisgICAgc2hvd0xhcmdlRXhwZWN0YXRpb25z
OiBmYWxzZSwKKyAgICBsZWdhY3lFeHBlY3RhdGlvbnNTZW1hbnRpY3M6IHRydWUsCisgICAgc2hv
d0NvcnJlY3RFeHBlY3RhdGlvbnM6ICFpc0xheW91dFRlc3RSZXN1bHRzKCksCisgICAgc2hvd1dy
b25nRXhwZWN0YXRpb25zOiAhaXNMYXlvdXRUZXN0UmVzdWx0cygpLAorICAgIHNob3dXb250Rml4
U2tpcDogIWlzTGF5b3V0VGVzdFJlc3VsdHMoKSwKKyAgICBzaG93U2xvdzogIWlzTGF5b3V0VGVz
dFJlc3VsdHMoKSwKKyAgICBzaG93U2tpcHBlZDogIWlzTGF5b3V0VGVzdFJlc3VsdHMoKSwKKyAg
ICBzaG93VW5leHBlY3RlZFBhc3NlczogIWlzTGF5b3V0VGVzdFJlc3VsdHMoKSwKKyAgICBleHBl
Y3RhdGlvbnNVcGRhdGU6IGZhbHNlLAorICAgIHVwZGF0ZUluZGV4OiAwLAorICAgIGJ1aWxkZXI6
IGdfZGVmYXVsdEJ1aWxkZXJOYW1lLAorICAgIHJlc3VsdHNIZWlnaHQ6IDMwMCwKKyAgICByZXZp
c2lvbjogbnVsbAorfTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBHTE9CQUxTCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKwordmFyIGdfcGVyQnVpbGRlclBsYXRmb3JtQW5kQnVpbGRUeXBl
ID0ge307Cit2YXIgZ19wZXJCdWlsZGVyRmFpbHVyZXMgPSB7fTsKKy8vIE1hcCBvZiBidWlsZGVy
IHRvIGFycmF5cyBvZiB0ZXN0cyB0aGF0IGFyZSBsaXN0ZWQgaW4gdGhlIGV4cGVjdGF0aW9ucyBm
aWxlCisvLyBidXQgaGF2ZSBmb3IgdGhhdCBidWlsZGVyLgordmFyIGdfcGVyQnVpbGRlcldpdGhF
eHBlY3RhdGlvbnNCdXROb0ZhaWx1cmVzID0ge307CisvLyBNYXAgb2YgYnVpbGRlciB0byBhcnJh
eXMgb2YgcGF0aHMgdGhhdCBhcmUgc2tpcHBlZC4gVGhpcyBzaG93cyB0aGUgcmF3CisvLyBwYXRo
IHVzZWQgaW4gdGVzdF9leHBlY3RhdGlvbnMudHh0IHJhdGhlciB0aGFuIHRoZSB0ZXN0IHBhdGgg
c2luY2Ugd2UKKy8vIGRvbid0IGFjdHVhbGx5IGhhdmUgYW55IGRhdGEgaGVyZSBmb3Igc2tpcHBl
ZCB0ZXN0cy4KK3ZhciBnX3BlckJ1aWxkZXJTa2lwcGVkUGF0aHMgPSB7fTsKKy8vIE1hcHMgdGVz
dCBwYXRoIHRvIGFuIGFycmF5IG9mIHtidWlsZGVyLCB0ZXN0UmVzdWx0c30gb2JqZWN0cy4KK3Zh
ciBnX3Rlc3RUb1Jlc3VsdHNNYXAgPSB7fTsKKy8vIFRlc3RzIHRoYXQgdGhlIHVzZXIgd2FudHMg
dG8gdXBkYXRlIGV4cGVjdGF0aW9ucyBmb3IuCit2YXIgZ19jb25maXJtZWRUZXN0cyA9IHt9Owor
CitmdW5jdGlvbiBjcmVhdGVSZXN1bHRzT2JqZWN0Rm9yVGVzdCh0ZXN0LCBidWlsZGVyKQorewor
ICAgIHJldHVybiB7CisgICAgICAgIHRlc3Q6IHRlc3QsCisgICAgICAgIGJ1aWxkZXI6IGJ1aWxk
ZXIsCisgICAgICAgIC8vIEhUTUwgZm9yIGRpc3BsYXkgb2YgdGhlIHJlc3VsdHMgaW4gdGhlIGZs
YWtpbmVzcyBjb2x1bW4KKyAgICAgICAgaHRtbDogJycsCisgICAgICAgIGZsaXBzOiAwLAorICAg
ICAgICBzbG93ZXN0VGltZTogMCwKKyAgICAgICAgc2xvd2VzdE5vblRpbWVvdXRDcmFzaFRpbWU6
IDAsCisgICAgICAgIG1lZXRzRXhwZWN0YXRpb25zOiB0cnVlLAorICAgICAgICBpc1dvbnRGaXhT
a2lwOiBmYWxzZSwKKyAgICAgICAgaXNGbGFreTogZmFsc2UsCisgICAgICAgIC8vIFNvcnRlZCBz
dHJpbmcgb2YgbWlzc2luZyBleHBlY3RhdGlvbnMKKyAgICAgICAgbWlzc2luZzogJycsCisgICAg
ICAgIC8vIFN0cmluZyBvZiBleHRyYSBleHBlY3RhdGlvbnMgKGkuZS4gZXhwZWN0YXRpb25zIHRo
YXQgbmV2ZXIgb2NjdXIpLgorICAgICAgICBleHRyYTogJycsCisgICAgICAgIG1vZGlmaWVyczog
JycsCisgICAgICAgIGV4cGVjdGF0aW9ucyA6ICcnLAorICAgICAgICByYXdSZXN1bHRzOiAnJywK
KyAgICAgICAgcGVyY2VudEZhaWxlZDogMCwKKyAgICAgICAgLy8gTGlzdCBvZiBhbGwgdGhlIHJl
c3VsdHMgdGhlIHRlc3QgYWN0dWFsbHkgaGFzLgorICAgICAgICBhY3R1YWxSZXN1bHRzOiBbXQor
ICAgIH07Cit9CisKK2Z1bmN0aW9uIG1hdGNoaW5nRWxlbWVudChzdHJpbmdUb01hdGNoLCBlbGVt
ZW50c01hcCkKK3sKKyAgICBmb3IgKHZhciBlbGVtZW50IGluIGVsZW1lbnRzTWFwKSB7CisgICAg
ICAgIGlmIChzdHJpbmdDb250YWlucyhzdHJpbmdUb01hdGNoLCBlbGVtZW50c01hcFtlbGVtZW50
XSkpCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIG5v
bkNocm9taXVtUGxhdGZvcm0oYnVpbGRlck5hbWVVcHBlckNhc2UpCit7CisgICAgaWYgKHN0cmlu
Z0NvbnRhaW5zKGJ1aWxkZXJOYW1lVXBwZXJDYXNlLCAnU05PV0xFT1BBUkQnKSkKKyAgICAgICAg
cmV0dXJuICdBUFBMRV9TTk9XTEVPUEFSRCc7CisgICAgaWYgKHN0cmluZ0NvbnRhaW5zKGJ1aWxk
ZXJOYW1lVXBwZXJDYXNlLCAnTEVPUEFSRCcpKQorICAgICAgICByZXR1cm4gJ0FQUExFX0xFT1BB
UkQnOworICAgIGlmIChzdHJpbmdDb250YWlucyhidWlsZGVyTmFtZVVwcGVyQ2FzZSwgJ1dJTkRP
V1MgNycpKQorICAgICAgICByZXR1cm4gJ0FQUExFX1dJTjcnOworICAgIGlmIChzdHJpbmdDb250
YWlucyhidWlsZGVyTmFtZVVwcGVyQ2FzZSwgJ1dJTkRPV1MgWFAnKSkKKyAgICAgICAgcmV0dXJu
ICdBUFBMRV9YUCc7CisgICAgaWYgKHN0cmluZ0NvbnRhaW5zKGJ1aWxkZXJOYW1lVXBwZXJDYXNl
LCAnR1RLIExJTlVYJykpCisgICAgICAgIHJldHVybiAnR1RLX0xJTlVYJzsKKyAgICBpZiAoc3Ry
aW5nQ29udGFpbnMoYnVpbGRlck5hbWVVcHBlckNhc2UsICdRVCBMSU5VWCcpKQorICAgICAgICBy
ZXR1cm4gJ1FUX0xJTlVYJzsKK30KKworZnVuY3Rpb24gY2hyb21pdW1QbGF0Zm9ybShidWlsZGVy
TmFtZVVwcGVyQ2FzZSkKK3sKKyAgICBpZiAoc3RyaW5nQ29udGFpbnMoYnVpbGRlck5hbWVVcHBl
ckNhc2UsICdNQUMnKSkgeworICAgICAgICBpZiAoc3RyaW5nQ29udGFpbnMoYnVpbGRlck5hbWVV
cHBlckNhc2UsICcxMC41JykpCisgICAgICAgICAgICByZXR1cm4gJ0xFT1BBUkQnOworICAgICAg
ICByZXR1cm4gJ1NOT1dMRU9QQVJEJzsKKyAgICB9CisgICAgaWYgKHN0cmluZ0NvbnRhaW5zKGJ1
aWxkZXJOYW1lVXBwZXJDYXNlLCAnV0lONycpKQorICAgICAgICByZXR1cm4gJ1dJTjcnOworICAg
IGlmIChzdHJpbmdDb250YWlucyhidWlsZGVyTmFtZVVwcGVyQ2FzZSwgJ1ZJU1RBJykpCisgICAg
ICAgIHJldHVybiAnVklTVEEnOworICAgIGlmIChzdHJpbmdDb250YWlucyhidWlsZGVyTmFtZVVw
cGVyQ2FzZSwgJ1dJTicpIHx8IHN0cmluZ0NvbnRhaW5zKGJ1aWxkZXJOYW1lVXBwZXJDYXNlLCAn
WFAnKSkKKyAgICAgICAgcmV0dXJuICdYUCc7CisgICAgaWYgKHN0cmluZ0NvbnRhaW5zKGJ1aWxk
ZXJOYW1lVXBwZXJDYXNlLCAnTElOVVgnKSkKKyAgICAgICAgcmV0dXJuICdMVUNJRCc7CisgICAg
Ly8gVGhlIGludGVyYWN0aXZlIGJvdCBpcyBYUCwgYnV0IGRvZXNuJ3QgaGF2ZSBhbiBPUyBpbiBp
dCdzIG5hbWUuCisgICAgaWYgKHN0cmluZ0NvbnRhaW5zKGJ1aWxkZXJOYW1lVXBwZXJDYXNlLCAn
SU5URVJBQ1RJVkUnKSkKKyAgICAgICAgcmV0dXJuICdYUCc7Cit9CisKKworZnVuY3Rpb24gcGxh
dGZvcm1BbmRCdWlsZFR5cGUoYnVpbGRlck5hbWUpCit7CisgICAgaWYgKCFnX3BlckJ1aWxkZXJQ
bGF0Zm9ybUFuZEJ1aWxkVHlwZVtidWlsZGVyTmFtZV0pIHsKKyAgICAgICAgdmFyIGJ1aWxkZXJO
YW1lVXBwZXJDYXNlID0gYnVpbGRlck5hbWUudG9VcHBlckNhc2UoKTsKKyAgICAgICAgCisgICAg
ICAgIHZhciBwbGF0Zm9ybSA9ICcnOworICAgICAgICBpZiAoaXNMYXlvdXRUZXN0UmVzdWx0cygp
ICYmIGdfY3VycmVudFN0YXRlLmdyb3VwID09ICdAVG9UIC0gd2Via2l0Lm9yZycgJiYgIXN0cmlu
Z0NvbnRhaW5zKGJ1aWxkZXJOYW1lVXBwZXJDYXNlLCAnQ0hST01JVU0nKSkKKyAgICAgICAgICAg
IHBsYXRmb3JtID0gbm9uQ2hyb21pdW1QbGF0Zm9ybShidWlsZGVyTmFtZVVwcGVyQ2FzZSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBsYXRmb3JtID0gY2hyb21pdW1QbGF0Zm9ybShidWls
ZGVyTmFtZVVwcGVyQ2FzZSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXBsYXRmb3JtKQorICAg
ICAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHJlc29sdmUgcGxhdGZvcm0gZm9yIGJ1
aWxkZXI6ICcgKyBidWlsZGVyTmFtZSk7CisKKyAgICAgICAgdmFyIGJ1aWxkVHlwZSA9IHN0cmlu
Z0NvbnRhaW5zKGJ1aWxkZXJOYW1lVXBwZXJDYXNlLCAnREJHJykgfHwgc3RyaW5nQ29udGFpbnMo
YnVpbGRlck5hbWVVcHBlckNhc2UsICdERUJVRycpID8gJ0RFQlVHJyA6ICdSRUxFQVNFJzsKKyAg
ICAgICAgZ19wZXJCdWlsZGVyUGxhdGZvcm1BbmRCdWlsZFR5cGVbYnVpbGRlck5hbWVdID0ge3Bs
YXRmb3JtOiBwbGF0Zm9ybSwgYnVpbGRUeXBlOiBidWlsZFR5cGV9OworICAgIH0KKyAgICByZXR1
cm4gZ19wZXJCdWlsZGVyUGxhdGZvcm1BbmRCdWlsZFR5cGVbYnVpbGRlck5hbWVdOworfQorCitm
dW5jdGlvbiBpc0RlYnVnKGJ1aWxkZXJOYW1lKQoreworICAgIHJldHVybiBwbGF0Zm9ybUFuZEJ1
aWxkVHlwZShidWlsZGVyTmFtZSkuYnVpbGRUeXBlID09ICdERUJVRyc7Cit9CisKKy8vIFJldHVy
bnMgdGhlIGV4cGVjdGF0aW9uIHN0cmluZyBmb3IgdGhlIGdpdmVuIHNpbmdsZSBjaGFyYWN0ZXIg
cmVzdWx0LgorLy8gVGhpcyBzdHJpbmcgc2hvdWxkIG1hdGNoIHRoZSBleHBlY3RhdGlvbnMgdGhh
dCBhcmUgcHV0IGludG8KKy8vIHRlc3RfZXhwZWN0YXRpb25zLnB5LgorLy8KKy8vIEZvciBleGFt
cGxlLCBpZiB3ZSBzdGFydCBleHBsaWNpdGx5IGxpc3RpbmcgSU1BR0UgcmVzdWx0IGZhaWx1cmVz
LAorLy8gdGhpcyBmdW5jdGlvbiBzaG91bGQgc3RhcnQgcmV0dXJuaW5nICdJTUFHRScuCitmdW5j
dGlvbiBleHBlY3RhdGlvbnNGaWxlU3RyaW5nRm9yUmVzdWx0KHJlc3VsdCkKK3sKKyAgICAvLyBG
b3IgdGhlIHB1cnBvc2VzIG9mIGNvbXBhcmluZyBhZ2FpbnN0IHRoZSBleHBlY2F0aW9ucyBvZiBh
IHRlc3QsCisgICAgLy8gY29uc2lkZXIgc2ltcGxpZmllZCBkaWZmIGZhaWx1cmVzIGFzIGp1c3Qg
dGV4dCBmYWlsdXJlcyBzaW5jZQorICAgIC8vIHRoZSB0ZXN0X2V4cGVjdGF0aW9ucyBmaWxlIGRv
ZXNuJ3QgdHJlYXQgdGhlbSBzcGVjaWFsbHkuCisgICAgaWYgKHJlc3VsdCA9PSAnUycpCisgICAg
ICAgIHJldHVybiAnVEVYVCc7CisKKyAgICBpZiAocmVzdWx0ID09ICdOJykKKyAgICAgICAgcmV0
dXJuICcnOworCisgICAgcmV0dXJuIGV4cGVjdGF0aW9uc01hcCgpW3Jlc3VsdF07Cit9CisKKy8v
IE1hcCBvZiBhbGwgdGVzdHMgdG8gdHJ1ZSB2YWx1ZXMuIFRoaXMgaXMganVzdCBzbyB3ZSBjYW4g
aGF2ZSB0aGUgbGlzdCBvZgorLy8gYWxsIHRlc3RzIGFjcm9zcyBhbGwgdGhlIGJ1aWxkZXJzLgor
dmFyIGdfYWxsVGVzdHM7CisKKy8vIFJldHVybnMgYSBtYXAgb2YgYWxsIHRlc3RzIHRvIHRydWUg
dmFsdWVzLiBUaGlzIGlzIGp1c3Qgc28gd2UgY2FuIGhhdmUgdGhlCisvLyBsaXN0IG9mIGFsbCB0
ZXN0cyBhY3Jvc3MgYWxsIHRoZSBidWlsZGVycy4KK2Z1bmN0aW9uIGdldEFsbFRlc3RzKCkKK3sK
KyAgICBpZiAoIWdfYWxsVGVzdHMpIHsKKyAgICAgICAgZ19hbGxUZXN0cyA9IHt9OworICAgICAg
ICBmb3IgKHZhciBidWlsZGVyIGluIGdfYnVpbGRlcnMpCisgICAgICAgICAgICBhZGRUZXN0c0Zv
ckJ1aWxkZXIoYnVpbGRlciwgZ19hbGxUZXN0cyk7CisgICAgfQorICAgIHJldHVybiBnX2FsbFRl
c3RzOworfQorCisvLyBSZXR1cm5zIGFuIGFycmF5IG9mIHRlc3RzIHRvIGJlIGRpc3BsYXllZCBp
biB0aGUgaW5kaXZpZHVhbCB0ZXN0cyB2aWV3LgorLy8gTm90ZSB0aGF0IGEgZGlyZWN0b3J5IGNh
biBiZSBsaXN0ZWQgYXMgYSB0ZXN0LCBzbyB3ZSBleHBhbmQgdGhhdCBpbnRvIGFsbAorLy8gdGVz
dHMgaW4gdGhlIGRpcmVjdG9yeS4KK2Z1bmN0aW9uIGluZGl2aWR1YWxUZXN0cygpCit7CisgICAg
aWYgKGdfY3VycmVudFN0YXRlLnJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGFsbFRlc3RzV2l0aFJl
c3VsdChnX2N1cnJlbnRTdGF0ZS5yZXN1bHQpOworCisgICAgaWYgKCFnX2N1cnJlbnRTdGF0ZS50
ZXN0cykKKyAgICAgICAgcmV0dXJuIFtdOworCisgICAgcmV0dXJuIGluZGl2aWR1YWxUZXN0c0Zv
clN1YnN0cmluZ0xpc3QoKTsKK30KKworZnVuY3Rpb24gc3Vic3RyaW5nTGlzdCgpCit7CisgICAg
Ly8gQ29udmVydCB3aW5kb3dzIHNsYXNoZXMgdG8gdW5peCBzbGFzaGVzLgorICAgIHZhciB0ZXN0
cyA9IGdfY3VycmVudFN0YXRlLnRlc3RzLnJlcGxhY2UoL1xcL2csICcvJyk7CisgICAgdmFyIHNl
cGFyYXRvciA9IHN0cmluZ0NvbnRhaW5zKHRlc3RzLCAnICcpID8gJyAnIDogJywnOworICAgIHZh
ciB0ZXN0TGlzdCA9IHRlc3RzLnNwbGl0KHNlcGFyYXRvcik7CisKKyAgICBpZiAoaXNMYXlvdXRU
ZXN0UmVzdWx0cygpKQorICAgICAgICByZXR1cm4gdGVzdExpc3Q7CisKKyAgICB2YXIgdGVzdExp
c3RXaXRob3V0TW9kaWZpZXJzID0gW107CisgICAgdGVzdExpc3QuZm9yRWFjaChmdW5jdGlvbihw
YXRoKSB7CisgICAgICAgIEdURVNUX01PRElGSUVSUy5mb3JFYWNoKGZ1bmN0aW9uKG1vZGlmaWVy
KSB7CisgICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCcuJyArIG1vZGlmaWVyICsgJ18n
LCAnLicpOworICAgICAgICB9KTsKKyAgICAgICAgdGVzdExpc3RXaXRob3V0TW9kaWZpZXJzLnB1
c2gocGF0aCk7CisgICAgfSk7CisgICAgcmV0dXJuIHRlc3RMaXN0V2l0aG91dE1vZGlmaWVyczsK
K30KKworZnVuY3Rpb24gaW5kaXZpZHVhbFRlc3RzRm9yU3Vic3RyaW5nTGlzdCgpCit7CisgICAg
dmFyIHRlc3RMaXN0ID0gc3Vic3RyaW5nTGlzdCgpOworCisgICAgLy8gUHV0IHRoZSB0ZXN0cyBp
bnRvIGFuIG9iamVjdCBmaXJzdCBhbmQgdGhlbiBtb3ZlIHRoZW0gaW50byBhbiBhcnJheQorICAg
IC8vIGFzIGEgd2F5IG9mIGRlZHVwaW5nLgorICAgIHZhciB0ZXN0c01hcCA9IHt9OworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGVzdExpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHBh
dGggPSB0ZXN0TGlzdFtpXTsKKworICAgICAgICAvLyBJZ25vcmUgd2hpdGVzcGFjZSBlbnRyaWVz
IGFzIHRoZXknZCBtYXRjaCBldmVyeSB0ZXN0LgorICAgICAgICBpZiAocGF0aC5tYXRjaCgvXlxz
KiQvKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHZhciBhbGxUZXN0cyA9IGdl
dEFsbFRlc3RzKCk7CisgICAgICAgIHZhciBoYXNBbnlNYXRjaGVzID0gZmFsc2U7CisgICAgICAg
IGZvciAodmFyIHRlc3QgaW4gYWxsVGVzdHMpIHsKKyAgICAgICAgICAgIGlmIChjYXNlSW5zZW5z
aXRpdmVDb250YWlucyh0ZXN0LCBwYXRoKSkgeworICAgICAgICAgICAgICAgIHRlc3RzTWFwW3Rl
c3RdID0gMTsKKyAgICAgICAgICAgICAgICBoYXNBbnlNYXRjaGVzID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIGEgcGF0aCBkb2Vzbid0IG1hdGNoIGFu
eSB0ZXN0cywgdGhlbiBhc3N1bWUgaXQncyBhIGZ1bGwgcGF0aAorICAgICAgICAvLyB0byBhIHRl
c3QgdGhhdCBwYXNzZXMgb24gYWxsIGJ1aWxkZXJzLgorICAgICAgICBpZiAoIWhhc0FueU1hdGNo
ZXMpCisgICAgICAgICAgICB0ZXN0c01hcFtwYXRoXSA9IDE7CisgICAgfQorCisgICAgdmFyIHRl
c3RzQXJyYXkgPSBbXTsKKyAgICBmb3IgKHZhciB0ZXN0IGluIHRlc3RzTWFwKQorICAgICAgICB0
ZXN0c0FycmF5LnB1c2godGVzdCk7CisgICAgcmV0dXJuIHRlc3RzQXJyYXk7Cit9CisKKy8vIFJl
dHVybnMgd2hldGhlciB0aGlzIHRlc3QncyBzbG93ZXN0IHRpbWUgaXMgYWJvdmUgdGhlIGN1dG9m
ZiBmb3IKKy8vIGJlaW5nIGEgc2xvdyB0ZXN0LgorZnVuY3Rpb24gaXNTbG93VGVzdChyZXN1bHRz
Rm9yVGVzdCkKK3sKKyAgICB2YXIgbWF4VGltZSA9IGlzRGVidWcocmVzdWx0c0ZvclRlc3QuYnVp
bGRlcikgPyBNSU5fU0VDT05EU19GT1JfU0xPV19URVNUX0RFQlVHIDogTUlOX1NFQ09ORFNfRk9S
X1NMT1dfVEVTVDsKKyAgICByZXR1cm4gcmVzdWx0c0ZvclRlc3Quc2xvd2VzdE5vblRpbWVvdXRD
cmFzaFRpbWUgPiBtYXhUaW1lOworfQorCisvLyBSZXR1cm5zIHdoZXRoZXIgdGhpcyB0ZXN0J3Mg
c2xvd2VzdCB0aW1lIGlzICp3ZWxsKiBiZWxvdyB0aGUgY3V0b2ZmIGZvcgorLy8gYmVpbmcgYSBz
bG93IHRlc3QuCitmdW5jdGlvbiBpc0Zhc3RUZXN0KHJlc3VsdHNGb3JUZXN0KQoreworICAgIHZh
ciBtYXhUaW1lID0gaXNEZWJ1ZyhyZXN1bHRzRm9yVGVzdC5idWlsZGVyKSA/IE1JTl9TRUNPTkRT
X0ZPUl9TTE9XX1RFU1RfREVCVUcgOiBNSU5fU0VDT05EU19GT1JfU0xPV19URVNUOworICAgIHJl
dHVybiByZXN1bHRzRm9yVGVzdC5zbG93ZXN0Tm9uVGltZW91dENyYXNoVGltZSA8IG1heFRpbWUg
LyAyOworfQorCitmdW5jdGlvbiBhbGxUZXN0c1dpdGhSZXN1bHQocmVzdWx0KQoreworICAgIHBy
b2Nlc3NUZXN0UnVuc0ZvckFsbEJ1aWxkZXJzKCk7CisgICAgdmFyIHRlc3RzID0gZ2V0QWxsVGVz
dHMoKTsKKyAgICB2YXIgcmV0VmFsID0gW107CisgICAgZm9yICh2YXIgdGVzdCBpbiB0ZXN0cykg
eworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdfdGVzdFRvUmVzdWx0c01hcFt0ZXN0XS5s
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGdfdGVzdFRvUmVzdWx0c01hcFt0ZXN0XVtp
XS5hY3R1YWxSZXN1bHRzLmluZGV4T2YocmVzdWx0KSAhPSAtMSkgeworICAgICAgICAgICAgICAg
IHJldFZhbC5wdXNoKHRlc3QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXRWYWw7Cit9CisKKworLy8gQWRkcyBh
bGwgdGhlIHRlc3RzIGZvciB0aGUgZ2l2ZW4gYnVpbGRlciB0byB0aGUgdGVzdE1hcFRvUG9wdWxh
dGUuCitmdW5jdGlvbiBhZGRUZXN0c0ZvckJ1aWxkZXIoYnVpbGRlciwgdGVzdE1hcFRvUG9wdWxh
dGUpCit7CisgICAgdmFyIHRlc3RzID0gZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLnRlc3Rz
OworICAgIGZvciAodmFyIHRlc3QgaW4gdGVzdHMpIHsKKyAgICAgICAgdGVzdE1hcFRvUG9wdWxh
dGVbdGVzdF0gPSB0cnVlOworICAgIH0KK30KKworLy8gTWFwIG9mIGFsbCB0ZXN0cyB0byB0cnVl
IHZhbHVlcyBieSBwbGF0Zm9ybSBhbmQgYnVpbGQgdHlwZS4KKy8vIGUuZy4gZ19hbGxUZXN0c0J5
UGxhdGZvcm1BbmRCdWlsZFR5cGVbJ1hQJ11bJ0RFQlVHJ10gd2lsbCBoYXZlIHRoZSB1bmlvbgor
Ly8gb2YgYWxsIHRlc3RzIHJ1biBvbiB0aGUgeHAtZGVidWcgYnVpbGRlcnMuCit2YXIgZ19hbGxU
ZXN0c0J5UGxhdGZvcm1BbmRCdWlsZFR5cGUgPSB7fTsKK1BMQVRGT1JNUy5mb3JFYWNoKGZ1bmN0
aW9uKHBsYXRmb3JtKSB7IGdfYWxsVGVzdHNCeVBsYXRmb3JtQW5kQnVpbGRUeXBlW3BsYXRmb3Jt
XSA9IHt9OyB9KTsKKworLy8gTWFwIG9mIGFsbCB0ZXN0cyB0byB0cnVlIHZhbHVlcyBieSBwbGF0
Zm9ybSBhbmQgYnVpbGQgdHlwZS4KKy8vIGUuZy4gZ19hbGxUZXN0c0J5UGxhdGZvcm1BbmRCdWls
ZFR5cGVbJ1dJTiddWydERUJVRyddIHdpbGwgaGF2ZSB0aGUgdW5pb24KKy8vIG9mIGFsbCB0ZXN0
cyBydW4gb24gdGhlIHdpbi1kZWJ1ZyBidWlsZGVycy4KK2Z1bmN0aW9uIGFsbFRlc3RzV2l0aFNh
bWVQbGF0Zm9ybUFuZEJ1aWxkVHlwZShwbGF0Zm9ybSwgYnVpbGRUeXBlKQoreworICAgIGlmICgh
Z19hbGxUZXN0c0J5UGxhdGZvcm1BbmRCdWlsZFR5cGVbcGxhdGZvcm1dW2J1aWxkVHlwZV0pIHsK
KyAgICAgICAgdmFyIHRlc3RzID0ge307CisgICAgICAgIGZvciAodmFyIHRoaXNCdWlsZGVyIGlu
IGdfYnVpbGRlcnMpIHsKKyAgICAgICAgICAgIHZhciB0aGlzQnVpbGRlckJ1aWxkSW5mbyA9IHBs
YXRmb3JtQW5kQnVpbGRUeXBlKHRoaXNCdWlsZGVyKTsKKyAgICAgICAgICAgIGlmICh0aGlzQnVp
bGRlckJ1aWxkSW5mby5idWlsZFR5cGUgPT0gYnVpbGRUeXBlICYmIHRoaXNCdWlsZGVyQnVpbGRJ
bmZvLnBsYXRmb3JtID09IHBsYXRmb3JtKSB7CisgICAgICAgICAgICAgICAgYWRkVGVzdHNGb3JC
dWlsZGVyKHRoaXNCdWlsZGVyLCB0ZXN0cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZ19hbGxUZXN0c0J5UGxhdGZvcm1BbmRCdWlsZFR5cGVbcGxhdGZvcm1dW2J1aWxkVHlw
ZV0gPSB0ZXN0czsKKyAgICB9CisKKyAgICByZXR1cm4gZ19hbGxUZXN0c0J5UGxhdGZvcm1BbmRC
dWlsZFR5cGVbcGxhdGZvcm1dW2J1aWxkVHlwZV07Cit9CisKK2Z1bmN0aW9uIGdldEV4cGVjdGF0
aW9ucyh0ZXN0LCBwbGF0Zm9ybSwgYnVpbGRUeXBlKQoreworICAgIHZhciB0ZXN0T2JqZWN0ID0g
Z19hbGxFeHBlY3RhdGlvbnNbdGVzdF07CisgICAgaWYgKCF0ZXN0T2JqZWN0KQorICAgICAgICBy
ZXR1cm4gbnVsbDsKKworICAgIHZhciBwbGF0Zm9ybU9iamVjdCA9IHRlc3RPYmplY3RbcGxhdGZv
cm1dOworICAgIGlmICghcGxhdGZvcm1PYmplY3QpCisgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICAKKyAgICByZXR1cm4gcGxhdGZvcm1PYmplY3RbYnVpbGRUeXBlXTsKK30KKworZnVuY3Rp
b24gZmlsdGVyQnVncyhtb2RpZmllcnMpCit7CisgICAgdmFyIGJ1Z3MgPSBtb2RpZmllcnMubWF0
Y2goL1xiQlVHXFMqL2cpOworICAgIGlmICghYnVncykKKyAgICAgICAgcmV0dXJuIHtidWdzOiAn
JywgbW9kaWZpZXJzOiBtb2RpZmllcnN9OworICAgIGZvciAodmFyIGogPSAwOyBqIDwgYnVncy5s
ZW5ndGg7IGorKykKKyAgICAgICAgbW9kaWZpZXJzID0gbW9kaWZpZXJzLnJlcGxhY2UoYnVnc1tq
XSwgJycpOworICAgIHJldHVybiB7YnVnczogYnVncy5qb2luKCcgJyksIG1vZGlmaWVyczogY29s
bGFwc2VXaGl0ZXNwYWNlKHRyaW1TdHJpbmcobW9kaWZpZXJzKSl9OworfQorCitmdW5jdGlvbiBw
b3B1bGF0ZUV4cGVjdGF0aW9uc0RhdGEocmVzdWx0c09iamVjdCkKK3sKKyAgICB2YXIgYnVpbGRJ
bmZvID0gcGxhdGZvcm1BbmRCdWlsZFR5cGUocmVzdWx0c09iamVjdC5idWlsZGVyKTsKKyAgICB2
YXIgZXhwZWN0YXRpb25zID0gZ2V0RXhwZWN0YXRpb25zKHJlc3VsdHNPYmplY3QudGVzdCwgYnVp
bGRJbmZvLnBsYXRmb3JtLCBidWlsZEluZm8uYnVpbGRUeXBlKTsKKyAgICBpZiAoIWV4cGVjdGF0
aW9ucykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVzdWx0c09iamVjdC5leHBlY3RhdGlvbnMg
PSBleHBlY3RhdGlvbnMuZXhwZWN0YXRpb25zOworICAgIHJlc3VsdHNPYmplY3QubW9kaWZpZXJz
ID0gZXhwZWN0YXRpb25zLm1vZGlmaWVyczsKKyAgICByZXN1bHRzT2JqZWN0LmlzV29udEZpeFNr
aXAgPSBzdHJpbmdDb250YWlucyhleHBlY3RhdGlvbnMubW9kaWZpZXJzLCAnV09OVEZJWCcpIHx8
IHN0cmluZ0NvbnRhaW5zKGV4cGVjdGF0aW9ucy5tb2RpZmllcnMsICdTS0lQJyk7IAorfQorCitm
dW5jdGlvbiBhZGRUZXN0VG9BbGxFeHBlY3RhdGlvbnModGVzdCwgZXhwZWN0YXRpb25zLCBtb2Rp
ZmllcnMpCit7CisgICAgaWYgKCFnX2FsbEV4cGVjdGF0aW9uc1t0ZXN0XSkKKyAgICAgICAgZ19h
bGxFeHBlY3RhdGlvbnNbdGVzdF0gPSB7fTsKKworICAgIHZhciBhbGxQbGF0Zm9ybXMgPSBbXTsK
KyAgICB2YXIgYWxsQnVpbGRUeXBlcyA9IFtdOworICAgIG1vZGlmaWVycy5zcGxpdCgnICcpLmZv
ckVhY2goZnVuY3Rpb24obW9kaWZpZXIpIHsKKyAgICAgICAgaWYgKG1vZGlmaWVyIGluIEJVSUxE
X1RZUEVTKSB7CisgICAgICAgICAgICBhbGxCdWlsZFR5cGVzLnB1c2gobW9kaWZpZXIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoUExBVEZP
Uk1TLmluZGV4T2YobW9kaWZpZXIpICE9IC0xKSB7CisgICAgICAgICAgICBhbGxQbGF0Zm9ybXMu
cHVzaChtb2RpZmllcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChtb2RpZmllciBpbiBQTEFURk9STV9VTklPTlMpIHsKKyAgICAgICAgICAg
IFBMQVRGT1JNX1VOSU9OU1ttb2RpZmllcl0uZm9yRWFjaChmdW5jdGlvbihwbGF0Zm9ybSkgewor
ICAgICAgICAgICAgICAgIGFsbFBsYXRmb3Jtcy5wdXNoKHBsYXRmb3JtKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisgICAgfSkKKyAgICAKKyAgICBpZiAoIWFsbFBsYXRmb3Jtcy5sZW5n
dGgpCisgICAgICAgIGFsbFBsYXRmb3JtcyA9IFBMQVRGT1JNUzsKKyAgICAgICAgCisgICAgaWYg
KCFhbGxCdWlsZFR5cGVzLmxlbmd0aCkKKyAgICAgICAgYWxsQnVpbGRUeXBlcyA9IE9iamVjdC5r
ZXlzKEJVSUxEX1RZUEVTKTsKKyAgICAKKyAgICBhbGxQbGF0Zm9ybXMuZm9yRWFjaChmdW5jdGlv
bihwbGF0Zm9ybSkgeworICAgICAgICBpZiAoIWdfYWxsRXhwZWN0YXRpb25zW3Rlc3RdW3BsYXRm
b3JtXSkKKyAgICAgICAgICAgIGdfYWxsRXhwZWN0YXRpb25zW3Rlc3RdW3BsYXRmb3JtXSA9IHt9
OworCisgICAgICAgIGFsbEJ1aWxkVHlwZXMuZm9yRWFjaChmdW5jdGlvbihidWlsZFR5cGUpIHsK
KyAgICAgICAgICAgIGdfYWxsRXhwZWN0YXRpb25zW3Rlc3RdW3BsYXRmb3JtXVtidWlsZFR5cGVd
ID0ge21vZGlmaWVyczogbW9kaWZpZXJzLCBleHBlY3RhdGlvbnM6IGV4cGVjdGF0aW9uc307Cisg
ICAgICAgIH0pOyAKKyAgICB9KTsKK30KKworLy8gRGF0YSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUg
cHJvY2Vzc2VkIGV4cGVjdGF0aW9ucy4KKy8vIGdfYWxsRXhwZWN0YXRpb25zW3Rlc3RQYXRoXVtw
bGF0Zm9ybV1bYnVpbGRUeXBlXSBnZXRzIHRoZSBvYmplY3QgdGhhdCBoYXMKKy8vIGV4cGVjdGF0
aW9ucyBhbmQgbW9kaWZpZXJzIHByb3BlcnRpZXMgZm9yIHRoaXMgcGxhdGZvcm0vYnVpbGRUeXBl
LgorLy8KKy8vIHBsYXRmb3JtIGFuZCBidWlsZFR5cGUgYm90aCBnbyB0aHJvdWdoIGZhbGxiYWNr
IHNldHMgb2Yga2V5cyBmcm9tIG1vc3QKKy8vIHNwZWNpZmljIGtleSB0byBsZWFzdCBzcGVjaWZp
Yy4gRm9yIGV4YW1wbGUsIG9uIFdpbmRvd3MgVmlzdGEsIHdlIGZpcnN0CisvLyBjaGVjayB0aGUg
cGxhdGZvcm0gV0lOLVZJU1RBLCBpZiB0aGVyZSdzIG5vIHN1Y2ggb2JqZWN0LCB3ZSBjaGVjayBX
SU4sCisvLyB0aGVuIGZpbmFsbHkgd2UgY2hlY2sgQUxMLiBGb3IgYnVpbGQgdHlwZXMsIHdlIGNo
ZWNrIHRoZSBjdXJyZW50CisvLyBidWlsZFR5cGUsIHRoZW4gQUxMLgordmFyIGdfYWxsRXhwZWN0
YXRpb25zOworCitmdW5jdGlvbiBwYXJzZWRFeHBlY3RhdGlvbnMoKQoreworICAgIGlmICghZ19l
eHBlY3RhdGlvbnMpCisgICAgICAgIHJldHVybiBbXTsKKyAgICAKKyAgICB2YXIgZXhwZWN0YXRp
b25zID0gW107CisgICAgdmFyIGxpbmVzID0gZ19leHBlY3RhdGlvbnMuc3BsaXQoJ1xuJyk7Cisg
ICAgbGluZXMuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7CisgICAgICAgIGxpbmUgPSB0cmltU3Ry
aW5nKGxpbmUpOworICAgICAgICBpZiAoIWxpbmUgfHwgc3RhcnRzV2l0aChsaW5lLCAnLy8nKSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHJvYnVz
dCBhZ2FpbnN0IG5vdCBoYXZpbmcgbW9kaWZpZXJzIGFuZC9vciBleHBlY3RhdGlvbnMuCisgICAg
ICAgIC8vIFJpZ2h0IG5vdywgcnVuLXdlYmtpdC10ZXN0cyBkb2Vzbid0IGFsbG93IHN1Y2ggbGlu
ZXMsIGJ1dCBpdCBtYXkgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgdmFyIG1hdGNoID0gbGluZS5t
YXRjaCgvKFteOl0rKSo6KFtePV0rKT0oLiopLyk7CisgICAgICAgIGlmICghbWF0Y2gpIHsKKyAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0xpbmUgY291bGQgbm90IGJlIHBhcnNlZDogJyArIGxp
bmUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6
IFNob3VsZCB3ZSBpbmNsdWRlIGxpbmUgbnVtYmVyIGFuZCBjb21tZW50IGxpbmVzIGhlcmU/Cisg
ICAgICAgIGV4cGVjdGF0aW9ucy5wdXNoKHsKKyAgICAgICAgICAgIG1vZGlmaWVyczogdHJpbVN0
cmluZyhtYXRjaFsxXSksCisgICAgICAgICAgICBwYXRoOiB0cmltU3RyaW5nKG1hdGNoWzJdKSwK
KyAgICAgICAgICAgIGV4cGVjdGF0aW9uczogdHJpbVN0cmluZyhtYXRjaFszXSkKKyAgICAgICAg
fSk7CisgICAgfSk7CisgICAgcmV0dXJuIGV4cGVjdGF0aW9uczsKK30KKworZnVuY3Rpb24gcHJv
Y2Vzc0V4cGVjdGF0aW9ucygpCit7CisgICAgaWYgKGdfYWxsRXhwZWN0YXRpb25zKQorICAgICAg
ICByZXR1cm4gZ19hbGxFeHBlY3RhdGlvbnM7CisKKyAgICBnX2FsbEV4cGVjdGF0aW9ucyA9IHt9
OworCisgICAgdmFyIGV4cGVjdGF0aW9uc0FycmF5ID0gcGFyc2VkRXhwZWN0YXRpb25zKCk7CisK
KyAgICAvLyBTb3J0IHRoZSBhcnJheSB0byBoaXQgbW9yZSBzcGVjaWZpYyBwYXRocyBsYXN0LiBN
b3JlIHNwZWNpZmljCisgICAgLy8gcGF0aHMgKGUuZy4gZm9vL2Jhci9iYXouaHRtbCkgb3ZlcnJp
ZGUgZW50cmllcyBmb3IgbGVzcy1zcGVjaWZpYyBvbmVzIChlLmcuIGZvby9iYXIpLgorICAgIGV4
cGVjdGF0aW9uc0FycmF5LnNvcnQoYWxwaGFudW1lcmljQ29tcGFyZSgncGF0aCcpKTsKKworICAg
IHZhciBhbGxUZXN0cyA9IGdldEFsbFRlc3RzKCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBl
eHBlY3RhdGlvbnNBcnJheS5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgcGF0aCA9IGV4cGVj
dGF0aW9uc0FycmF5W2ldLnBhdGg7CisgICAgICAgIHZhciBtb2RpZmllcnMgPSBleHBlY3RhdGlv
bnNBcnJheVtpXS5tb2RpZmllcnM7CisgICAgICAgIHZhciBleHBlY3RhdGlvbnMgPSBleHBlY3Rh
dGlvbnNBcnJheVtpXS5leHBlY3RhdGlvbnM7CisKKyAgICAgICAgdmFyIHBhdGhNYXRjaGVzQW55
VGVzdCA9IGZhbHNlOworICAgICAgICBpZiAoYWxsVGVzdHNbcGF0aF0pIHsKKyAgICAgICAgICAg
IHBhdGhNYXRjaGVzQW55VGVzdCA9IHRydWU7CisgICAgICAgICAgICBhZGRUZXN0VG9BbGxFeHBl
Y3RhdGlvbnMocGF0aCwgZXhwZWN0YXRpb25zLCBtb2RpZmllcnMpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgZm9yICh2YXIgdGVzdCBpbiBhbGxUZXN0cykgeworICAgICAgICAgICAg
ICAgIGlmIChzdGFydHNXaXRoKHRlc3QsIHBhdGgpKSB7CisgICAgICAgICAgICAgICAgICAgIHBh
dGhNYXRjaGVzQW55VGVzdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGFkZFRlc3RUb0Fs
bEV4cGVjdGF0aW9ucyh0ZXN0LCBleHBlY3RhdGlvbnMsIG1vZGlmaWVycyk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFwYXRoTWF0
Y2hlc0FueVRlc3QpCisgICAgICAgICAgICBhZGRUZXN0VG9BbGxFeHBlY3RhdGlvbnMocGF0aCwg
ZXhwZWN0YXRpb25zLCBtb2RpZmllcnMpOworICAgIH0KK30KKworZnVuY3Rpb24gcHJvY2Vzc01p
c3NpbmdUZXN0c1dpdGhFeHBlY3RhdGlvbnMoYnVpbGRlciwgcGxhdGZvcm0sIGJ1aWxkVHlwZSkK
K3sKKyAgICB2YXIgbm9GYWlsdXJlcyA9IFtdOworICAgIHZhciBza2lwcGVkID0gW107CisKKyAg
ICB2YXIgYWxsVGVzdHNGb3JQbGF0Zm9ybUFuZEJ1aWxkVHlwZSA9IGFsbFRlc3RzV2l0aFNhbWVQ
bGF0Zm9ybUFuZEJ1aWxkVHlwZShwbGF0Zm9ybSwgYnVpbGRUeXBlKTsKKyAgICBmb3IgKHZhciB0
ZXN0IGluIGdfYWxsRXhwZWN0YXRpb25zKSB7CisgICAgICAgIHZhciBleHBlY3RhdGlvbnMgPSBn
ZXRFeHBlY3RhdGlvbnModGVzdCwgcGxhdGZvcm0sIGJ1aWxkVHlwZSk7CisKKyAgICAgICAgaWYg
KCFleHBlY3RhdGlvbnMpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBUZXN0
IGhhcyBleHBlY3RhdGlvbnMsIGJ1dCBubyByZXN1bHQgaW4gdGhlIGJ1aWxkZXJzIHJlc3VsdHMu
CisgICAgICAgIC8vIFRoaXMgbWVhbnMgaXQncyBlaXRoZXIgU0tJUCBvciBwYXNzZXMgb24gYWxs
IGJ1aWxkcy4KKyAgICAgICAgaWYgKCFhbGxUZXN0c0ZvclBsYXRmb3JtQW5kQnVpbGRUeXBlW3Rl
c3RdICYmICFzdHJpbmdDb250YWlucyhleHBlY3RhdGlvbnMubW9kaWZpZXJzLCAnV09OVEZJWCcp
KSB7CisgICAgICAgICAgICBpZiAoc3RyaW5nQ29udGFpbnMoZXhwZWN0YXRpb25zLm1vZGlmaWVy
cywgJ1NLSVAnKSkKKyAgICAgICAgICAgICAgICBza2lwcGVkLnB1c2godGVzdCk7CisgICAgICAg
ICAgICBlbHNlIGlmICghZXhwZWN0YXRpb25zLmV4cGVjdGF0aW9ucy5tYXRjaCgvXlxzKlBBU1Nc
cyokLykpIHsKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBzaG93IHRlc3RzIGV4cGVjdGVkIHRv
IGFsd2F5cyBwYXNzLiBUaGlzIGlzIHVzZWQgaW4gd2F5cyBsaWtlCisgICAgICAgICAgICAgICAg
Ly8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAvLyBmb28vYmFyID0gRkFJTAorICAg
ICAgICAgICAgICAgIC8vIGZvby9iYXIvYmF6Lmh0bWwgPSBQQVNTCisgICAgICAgICAgICAgICAg
bm9GYWlsdXJlcy5wdXNoKHt0ZXN0OiB0ZXN0LCBleHBlY3RhdGlvbnM6IGV4cGVjdGF0aW9ucy5l
eHBlY3RhdGlvbnMsIG1vZGlmaWVyczogZXhwZWN0YXRpb25zLm1vZGlmaWVyc30pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZ19wZXJCdWlsZGVyU2tpcHBlZFBhdGhz
W2J1aWxkZXJdID0gc2tpcHBlZC5zb3J0KCk7CisgICAgZ19wZXJCdWlsZGVyV2l0aEV4cGVjdGF0
aW9uc0J1dE5vRmFpbHVyZXNbYnVpbGRlcl0gPSBub0ZhaWx1cmVzLnNvcnQoKTsKK30KKworZnVu
Y3Rpb24gcHJvY2Vzc1Rlc3RSZXN1bHRzRm9yQnVpbGRlckFzeW5jKGJ1aWxkZXIpCit7CisgICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHsgcHJvY2Vzc1Rlc3RSdW5zRm9yQnVpbGRlcihidWlsZGVy
KTsgfSwgMCk7Cit9CisKK2Z1bmN0aW9uIHByb2Nlc3NUZXN0UnVuc0ZvckFsbEJ1aWxkZXJzKCkK
K3sKKyAgICBmb3IgKHZhciBidWlsZGVyIGluIGdfYnVpbGRlcnMpCisgICAgICAgIHByb2Nlc3NU
ZXN0UnVuc0ZvckJ1aWxkZXIoYnVpbGRlcik7Cit9CisKK2Z1bmN0aW9uIHByb2Nlc3NUZXN0UnVu
c0ZvckJ1aWxkZXIoYnVpbGRlck5hbWUpCit7CisgICAgaWYgKGdfcGVyQnVpbGRlckZhaWx1cmVz
W2J1aWxkZXJOYW1lXSkKKyAgICAgIHJldHVybjsKKworICAgIGlmICghZ19yZXN1bHRzQnlCdWls
ZGVyW2J1aWxkZXJOYW1lXSkgeworICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0ZXN0cyBmb3Vu
ZCBmb3IgJyArIGJ1aWxkZXJOYW1lKTsKKyAgICAgICAgZ19wZXJCdWlsZGVyRmFpbHVyZXNbYnVp
bGRlck5hbWVdID0gW107CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgc3RhcnQg
PSBEYXRlLm5vdygpOworICAgIHByb2Nlc3NFeHBlY3RhdGlvbnMoKTsKKworICAgIHZhciBidWls
ZEluZm8gPSBwbGF0Zm9ybUFuZEJ1aWxkVHlwZShidWlsZGVyTmFtZSk7CisgICAgdmFyIHBsYXRm
b3JtID0gYnVpbGRJbmZvLnBsYXRmb3JtOworICAgIHZhciBidWlsZFR5cGUgPSBidWlsZEluZm8u
YnVpbGRUeXBlOworICAgIHByb2Nlc3NNaXNzaW5nVGVzdHNXaXRoRXhwZWN0YXRpb25zKGJ1aWxk
ZXJOYW1lLCBwbGF0Zm9ybSwgYnVpbGRUeXBlKTsKKworICAgIHZhciBmYWlsdXJlcyA9IFtdOwor
ICAgIHZhciBhbGxUZXN0c0ZvclRoaXNCdWlsZGVyID0gZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxk
ZXJOYW1lXS50ZXN0czsKKworICAgIGZvciAodmFyIHRlc3QgaW4gYWxsVGVzdHNGb3JUaGlzQnVp
bGRlcikgeworICAgICAgICB2YXIgcmVzdWx0c0ZvclRlc3QgPSBjcmVhdGVSZXN1bHRzT2JqZWN0
Rm9yVGVzdCh0ZXN0LCBidWlsZGVyTmFtZSk7CisgICAgICAgIHBvcHVsYXRlRXhwZWN0YXRpb25z
RGF0YShyZXN1bHRzRm9yVGVzdCk7CisKKyAgICAgICAgdmFyIHJhd1Rlc3QgPSBnX3Jlc3VsdHNC
eUJ1aWxkZXJbYnVpbGRlck5hbWVdLnRlc3RzW3Rlc3RdOworICAgICAgICByZXN1bHRzRm9yVGVz
dC5yYXdUaW1lcyA9IHJhd1Rlc3QudGltZXM7CisgICAgICAgIHZhciByYXdSZXN1bHRzID0gcmF3
VGVzdC5yZXN1bHRzOworICAgICAgICByZXN1bHRzRm9yVGVzdC5yYXdSZXN1bHRzID0gcmF3UmVz
dWx0czsKKworICAgICAgICAvLyBGSVhNRTogU3dpdGNoIHRvIHJlc3VsdHNCeUJ1aWxkCisgICAg
ICAgIHZhciB0aW1lcyA9IHJlc3VsdHNGb3JUZXN0LnJhd1RpbWVzOworICAgICAgICB2YXIgbnVt
VGltZXNTZWVuID0gMDsKKyAgICAgICAgdmFyIG51bVJlc3VsdHNTZWVuID0gMDsKKyAgICAgICAg
dmFyIHJlc3VsdHNJbmRleCA9IDA7CisgICAgICAgIHZhciBjdXJyZW50UmVzdWx0OworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRpbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBu
dW1UaW1lc1NlZW4gKz0gdGltZXNbaV1bUkxFLkxFTkdUSF07CisKKyAgICAgICAgICAgIHdoaWxl
IChyYXdSZXN1bHRzW3Jlc3VsdHNJbmRleF0gJiYgbnVtVGltZXNTZWVuID4gKG51bVJlc3VsdHNT
ZWVuICsgcmF3UmVzdWx0c1tyZXN1bHRzSW5kZXhdW1JMRS5MRU5HVEhdKSkgeworICAgICAgICAg
ICAgICAgIG51bVJlc3VsdHNTZWVuICs9IHJhd1Jlc3VsdHNbcmVzdWx0c0luZGV4XVtSTEUuTEVO
R1RIXTsKKyAgICAgICAgICAgICAgICByZXN1bHRzSW5kZXgrKzsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKHJhd1Jlc3VsdHMgJiYgcmF3UmVzdWx0c1tyZXN1bHRzSW5kZXhdKQor
ICAgICAgICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSByYXdSZXN1bHRzW3Jlc3VsdHNJbmRleF1b
UkxFLlZBTFVFXTsKKworICAgICAgICAgICAgdmFyIHRpbWUgPSB0aW1lc1tpXVtSTEUuVkFMVUVd
CisKKyAgICAgICAgICAgIC8vIElnbm9yZSB0aW1lcyBmb3IgY3Jhc2hpbmcvdGltZW91dCBydW5z
IGZvciB0aGUgc2FrZSBvZiBzZWVpbmcgaWYKKyAgICAgICAgICAgIC8vIGEgdGVzdCBzaG91bGQg
YmUgbWFya2VkIHNsb3cuCisgICAgICAgICAgICBpZiAoY3VycmVudFJlc3VsdCAhPSAnQycgJiYg
Y3VycmVudFJlc3VsdCAhPSAnVCcpCisgICAgICAgICAgICAgICAgcmVzdWx0c0ZvclRlc3Quc2xv
d2VzdE5vblRpbWVvdXRDcmFzaFRpbWUgPSBNYXRoLm1heChyZXN1bHRzRm9yVGVzdC5zbG93ZXN0
Tm9uVGltZW91dENyYXNoVGltZSwgdGltZSk7CisgICAgICAgICAgICByZXN1bHRzRm9yVGVzdC5z
bG93ZXN0VGltZSA9IE1hdGgubWF4KHJlc3VsdHNGb3JUZXN0LnNsb3dlc3RUaW1lLCB0aW1lKTsK
KyAgICAgICAgfQorCisgICAgICAgIHByb2Nlc3NNaXNzaW5nQW5kRXh0cmFFeHBlY3RhdGlvbnMo
cmVzdWx0c0ZvclRlc3QpOworICAgICAgICBmYWlsdXJlcy5wdXNoKHJlc3VsdHNGb3JUZXN0KTsK
KworICAgICAgICBpZiAoIWdfdGVzdFRvUmVzdWx0c01hcFt0ZXN0XSkKKyAgICAgICAgICAgIGdf
dGVzdFRvUmVzdWx0c01hcFt0ZXN0XSA9IFtdOworICAgICAgICBnX3Rlc3RUb1Jlc3VsdHNNYXBb
dGVzdF0ucHVzaChyZXN1bHRzRm9yVGVzdCk7CisgICAgfQorCisgICAgZ19wZXJCdWlsZGVyRmFp
bHVyZXNbYnVpbGRlck5hbWVdID0gZmFpbHVyZXM7CisgICAgbG9nVGltZSgncHJvY2Vzc1Rlc3RS
dW5zRm9yQnVpbGRlcjogJyArIGJ1aWxkZXJOYW1lLCBzdGFydCk7Cit9CisKK2Z1bmN0aW9uIHBy
b2Nlc3NNaXNzaW5nQW5kRXh0cmFFeHBlY3RhdGlvbnMocmVzdWx0c0ZvclRlc3QpCit7CisgICAg
Ly8gSGV1cmlzdGljIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIGV4cGVjdGF0aW9ucyBhcHBseSB0
byBhIGdpdmVuIHRlc3Q6CisgICAgLy8gLUlmIGEgdGVzdCByZXN1bHQgaGFwcGVucyA8IE1JTl9S
VU5TX0ZPUl9GTEFLRSwgdGhlbiBjb25zaWRlciBpdCBhIGZsYWt5CisgICAgLy8gcmVzdWx0IGFu
ZCBpbmNsdWRlIGl0IGluIHRoZSBsaXN0IG9mIGV4cGVjdGVkIHJlc3VsdHMuCisgICAgLy8gLU90
aGVyd2lzZSwgZ3JhYiB0aGUgZmlyc3QgY29udGlndW91cyBzZXQgb2YgcnVucyB3aXRoIHRoZSBz
YW1lIHJlc3VsdAorICAgIC8vIGZvciA+PSBNSU5fUlVOU19GT1JfRkxBS0UgYW5kIGlnbm9yZSBh
bGwgZm9sbG93aW5nIHJ1bnMgPj0KKyAgICAvLyBNSU5fUlVOU19GT1JfRkxBS0UuCisgICAgLy8g
VGhpcyBsZXRzIHVzIHJ1bGUgb3V0IGNvbW1vbiBjYXNlcyBvZiBhIHRlc3QgY2hhbmdpbmcgZXhw
ZWN0YXRpb25zIGZvcgorICAgIC8vIGEgZmV3IHJ1bnMsIHRoZW4gYmVpbmcgZml4ZWQgb3Igb3Ro
ZXJ3aXNlIG1vZGlmaWVkIGluIGEgbm9uLWZsYWt5IHdheS4KKyAgICB2YXIgcmF3UmVzdWx0cyA9
IHJlc3VsdHNGb3JUZXN0LnJhd1Jlc3VsdHM7CisKKyAgICAvLyBJZiB0aGUgZmlyc3QgcmVzdWx0
IGlzIG5vLWRhdGEgdGhhdCBtZWFucyB0aGUgdGVzdCBpcyBza2lwcGVkIG9yIGlzCisgICAgLy8g
YmVpbmcgcnVuIG9uIGEgZGlmZmVyZW50IGJ1aWxkZXIgKGUuZy4gbW92ZWQgZnJvbSBvbmUgc2hh
cmQgdG8gYW5vdGhlcikuCisgICAgLy8gSWdub3JlIHRoZXNlIHJlc3VsdHMgc2luY2Ugd2UgaGF2
ZSBubyByZWFsIGRhdGEgYWJvdXQgd2hhdCdzIGdvaW5nIG9uLgorICAgIGlmIChyYXdSZXN1bHRz
WzBdW1JMRS5WQUxVRV0gPT0gJ04nKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPbmx5IGNv
bnNpZGVyIGZsYWtlIGlmIGl0IGRvZXNuJ3QgaGFwcGVuIHR3aWNlIGluIGEgcm93LgorICAgIHZh
ciBNSU5fUlVOU19GT1JfRkxBS0UgPSAyOworICAgIHZhciByZXN1bHRzTWFwID0ge30KKyAgICB2
YXIgbnVtUmVzdWx0c1NlZW4gPSAwOworICAgIHZhciBoYXZlU2Vlbk5vbkZsYWtlUmVzdWx0ID0g
ZmFsc2U7CisgICAgdmFyIG51bVJlYWxSZXN1bHRzID0gMDsKKyAgICB2YXIgZmFpbGVkQ291bnQg
PSAwOworCisgICAgdmFyIHNlZW5SZXN1bHRzID0ge307CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCByYXdSZXN1bHRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBudW1SZXN1bHRzID0gcmF3
UmVzdWx0c1tpXVtSTEUuTEVOR1RIXTsKKyAgICAgICAgbnVtUmVzdWx0c1NlZW4gKz0gbnVtUmVz
dWx0czsKKworICAgICAgICB2YXIgcmVzdWx0ID0gcmF3UmVzdWx0c1tpXVtSTEUuVkFMVUVdOwor
ICAgICAgICBpZiAoaXNGYWlsaW5nUmVzdWx0KHJlc3VsdCkpCisgICAgICAgICAgICBmYWlsZWRD
b3VudCArPSBudW1SZXN1bHRzOworCisgICAgICAgIHZhciBoYXNNaW5SdW5zID0gbnVtUmVzdWx0
cyA+PSBNSU5fUlVOU19GT1JfRkxBS0U7CisgICAgICAgIGlmIChoYXZlU2Vlbk5vbkZsYWtlUmVz
dWx0ICYmIGhhc01pblJ1bnMpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZWxzZSBp
ZiAoaGFzTWluUnVucykKKyAgICAgICAgICAgIGhhdmVTZWVuTm9uRmxha2VSZXN1bHQgPSB0cnVl
OworICAgICAgICBlbHNlIGlmICghc2VlblJlc3VsdHNbcmVzdWx0XSkgeworICAgICAgICAgICAg
Ly8gT25seSBjb25zaWRlciBhIHNob3J0LWxpdmVkIHJlc3VsdCBpZiB3ZSd2ZSBzZWVuIGl0IG1v
cmUgdGhhbiBvbmNlLgorICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBpbmNsdWRlIGxvdHMg
b2YgZmFsc2UtcG9zaXRpdmVzIGR1ZSB0byB0ZXN0cyB0aGF0IGZhaWwKKyAgICAgICAgICAgIC8v
IGZvciBhIGNvdXBsZSBydW5zIGFuZCB0aGVuIHN0YXJ0IHBhc3NpbmcuCisgICAgICAgICAgICBz
ZWVuUmVzdWx0c1tyZXN1bHRdID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgdmFyIGV4cGVjdGF0aW9uID0gZXhwZWN0YXRpb25zRmlsZVN0cmluZ0Zv
clJlc3VsdChyZXN1bHQpOworICAgICAgICByZXN1bHRzTWFwW2V4cGVjdGF0aW9uXSA9IHRydWU7
CisgICAgICAgIG51bVJlYWxSZXN1bHRzKys7CisgICAgfQorCisgICAgcmVzdWx0c0ZvclRlc3Qu
ZmxpcHMgPSBpIC0gMTsKKyAgICByZXN1bHRzRm9yVGVzdC5pc0ZsYWt5ID0gbnVtUmVhbFJlc3Vs
dHMgPiAxOworICAgIC8vIENhbGN1bGF0ZSB0aGUgJSBvZiB0aW1lcyB0aGUgdGVzdCBmYWlsZWQg
LSBob3cgZmxha3kgaXMgaXQ/CisgICAgcmVzdWx0c0ZvclRlc3QucGVyY2VudEZhaWxlZCA9IE1h
dGgucm91bmQoZmFpbGVkQ291bnQgLyBudW1SZXN1bHRzU2VlbiAqIDEwMCk7CisKKyAgICB2YXIg
bWlzc2luZ0V4cGVjdGF0aW9ucyA9IFtdOworICAgIHZhciBleHRyYUV4cGVjdGF0aW9ucyA9IFtd
OworCisgICAgaWYgKGlzTGF5b3V0VGVzdFJlc3VsdHMoKSkgeworICAgICAgICB2YXIgZXhwZWN0
YXRpb25zQXJyYXkgPSByZXN1bHRzRm9yVGVzdC5leHBlY3RhdGlvbnMgPyByZXN1bHRzRm9yVGVz
dC5leHBlY3RhdGlvbnMuc3BsaXQoJyAnKSA6IFtdOworICAgICAgICBleHRyYUV4cGVjdGF0aW9u
cyA9IGV4cGVjdGF0aW9uc0FycmF5LmZpbHRlcigKKyAgICAgICAgICAgIGZ1bmN0aW9uKGVsZW1l
bnQpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogT25jZSBhbGwgdGhlIEZBSUwgbGluZXMg
YXJlIHJlbW92ZWQgZnJvbQorICAgICAgICAgICAgICAgIC8vIHRlc3RfZXhwZWN0YXRpb25zLnR4
dCwgZGVsZXRlIGFsbCB0aGUgbGVnYWN5RXhwZWN0YXRpb25zU2VtYW50aWNzCisgICAgICAgICAg
ICAgICAgLy8gY29kZS4KKyAgICAgICAgICAgICAgICBpZiAoZ19jdXJyZW50U3RhdGUubGVnYWN5
RXhwZWN0YXRpb25zU2VtYW50aWNzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50
ID09ICdGQUlMJykgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBGQUlMX1JFU1VMVFMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0c01hcFtGQUlMX1JFU1VMVFNbaV1dKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50ICYmICFy
ZXN1bHRzTWFwW2VsZW1lbnRdICYmICFzdHJpbmdDb250YWlucyhlbGVtZW50LCAnQlVHJyk7Cisg
ICAgICAgICAgICB9KTsKKworICAgICAgICBmb3IgKHZhciByZXN1bHQgaW4gcmVzdWx0c01hcCkg
eworICAgICAgICAgICAgcmVzdWx0c0ZvclRlc3QuYWN0dWFsUmVzdWx0cy5wdXNoKHJlc3VsdCk7
CisgICAgICAgICAgICB2YXIgaGFzRXhwZWN0YXRpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0YXRpb25zQXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICB2YXIgZXhwZWN0YXRpb24gPSBleHBlY3RhdGlvbnNBcnJheVtpXTsKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogT25jZSBhbGwgdGhlIEZBSUwgbGluZXMgYXJlIHJlbW92ZWQg
ZnJvbQorICAgICAgICAgICAgICAgIC8vIHRlc3RfZXhwZWN0YXRpb25zLnR4dCwgZGVsZXRlIGFs
bCB0aGUgbGVnYWN5RXhwZWN0YXRpb25zU2VtYW50aWNzCisgICAgICAgICAgICAgICAgLy8gY29k
ZS4KKyAgICAgICAgICAgICAgICBpZiAoZ19jdXJyZW50U3RhdGUubGVnYWN5RXhwZWN0YXRpb25z
U2VtYW50aWNzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RhdGlvbiA9PSAnRkFJ
TCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgRkFJTF9S
RVNVTFRTLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PSBGQUlMX1JFU1VMVFNbal0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGFzRXhwZWN0YXRpb24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IGV4cGVjdGF0aW9uKQorICAgICAgICAgICAgICAg
ICAgICBoYXNFeHBlY3RhdGlvbiA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBpZiAoaGFzRXhw
ZWN0YXRpb24pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBleHBlY3RhdGlvbnMgZm9yIGEgdGVzdCBhbmQgaXQg
b25seSBwYXNzZXMsIHRoZW4gZG9uJ3QKKyAgICAgICAgICAgIC8vIGxpc3QgUEFTUyBhcyBhIG1p
c3NpbmcgZXhwZWN0YXRpb24uIFdlIG9ubHkgd2FudCB0byBsaXN0IFBBU1MgaWYgaXQKKyAgICAg
ICAgICAgIC8vIGZsYWt5IHBhc3Nlcywgc28gdGhlcmUgd291bGQgYmUgb3RoZXIgZXhwZWN0YXRp
b25zLgorICAgICAgICAgICAgaWYgKCFoYXNFeHBlY3RhdGlvbiAmJiAhKCFleHBlY3RhdGlvbnNB
cnJheS5sZW5ndGggJiYgcmVzdWx0ID09ICdQQVNTJyAmJiBudW1SZWFsUmVzdWx0cyA9PSAxKSkK
KyAgICAgICAgICAgICAgICBtaXNzaW5nRXhwZWN0YXRpb25zLnB1c2gocmVzdWx0KTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIE9ubHkgaGlnaGxpZ2h0IHRlc3RzIHRoYXQgdGFrZSA+IDIgc2Vj
b25kcyBhcyBuZWVkaW5nIHRvIGJlIG1hcmtlZCBhcworICAgICAgICAvLyBzbG93LiBUaGVyZSBh
cmUgdG9vIG1hbnkgdGVzdHMgdGhhdCB0YWtlIH4yIHNlY29uZHMgZXZlcnkgY291cGxlCisgICAg
ICAgIC8vIGh1bmRyZWQgcnVucy4gSXQncyBub3Qgd29ydGggdGhlIG1hbnVhbCBtYWludGVuYW5j
ZSBlZmZvcnQuCisgICAgICAgIC8vIEFsc28sIGlmIGEgdGVzdCB0aW1lcyBvdXQsIHRoZW4gaXQg
c2hvdWxkIG5vdCBiZSBtYXJrZWQgYXMgc2xvdy4KKyAgICAgICAgdmFyIG1pblRpbWVGb3JOZWVk
c1Nsb3cgPSBpc0RlYnVnKHJlc3VsdHNGb3JUZXN0LmJ1aWxkZXIpID8gMiA6IDE7CisgICAgICAg
IGlmIChpc1Nsb3dUZXN0KHJlc3VsdHNGb3JUZXN0KSAmJiAhcmVzdWx0c01hcFsnVElNRU9VVCdd
ICYmICghcmVzdWx0c0ZvclRlc3QubW9kaWZpZXJzIHx8ICFzdHJpbmdDb250YWlucyhyZXN1bHRz
Rm9yVGVzdC5tb2RpZmllcnMsICdTTE9XJykpKQorICAgICAgICAgICAgbWlzc2luZ0V4cGVjdGF0
aW9ucy5wdXNoKCdTTE9XJyk7CisgICAgICAgIGVsc2UgaWYgKGlzRmFzdFRlc3QocmVzdWx0c0Zv
clRlc3QpICYmIHJlc3VsdHNGb3JUZXN0Lm1vZGlmaWVycyAmJiBzdHJpbmdDb250YWlucyhyZXN1
bHRzRm9yVGVzdC5tb2RpZmllcnMsICdTTE9XJykpCisgICAgICAgICAgICBleHRyYUV4cGVjdGF0
aW9ucy5wdXNoKCdTTE9XJyk7CisKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG1pc3Npbmcg
cmVzdWx0cyBvciBtb2RpZmllcnMgYmVzaWRlcyBidWlsZAorICAgICAgICAvLyB0eXBlLCBwbGF0
Zm9ybSwgb3IgYnVnIGFuZCB0aGUgZXhwZWN0YXRpb25zIGFyZSBhbGwgZXh0cmEKKyAgICAgICAg
Ly8gdGhhdCBpcywgZXh0cmFFeHBlY3RhdGlvbnMgLSBleHBlY3RhdGlvbnMgPSBQQVNTLAorICAg
ICAgICAvLyBpbmNsdWRlIFBBU1MgYXMgZXh0cmEsIHNpbmNlIHRoYXQgbWVhbnMgdGhpcyBsaW5l
IGluCisgICAgICAgIC8vIHRlc3RfZXhwZWN0YXRpb25zIGNhbiBiZSBkZWxldGVkLi4KKyAgICAg
ICAgaWYgKCFtaXNzaW5nRXhwZWN0YXRpb25zLmxlbmd0aCAmJiAhKHJlc3VsdHNGb3JUZXN0Lm1v
ZGlmaWVycyAmJiByZWFsTW9kaWZpZXJzKHJlc3VsdHNGb3JUZXN0Lm1vZGlmaWVycykpKSB7Cisg
ICAgICAgICAgICB2YXIgZXh0cmFQbHVzUGFzcyA9IGV4dHJhRXhwZWN0YXRpb25zLmNvbmNhdChb
J1BBU1MnXSk7CisgICAgICAgICAgICBpZiAoZXh0cmFQbHVzUGFzcy5zb3J0KCkudG9TdHJpbmco
KSA9PSBleHBlY3RhdGlvbnNBcnJheS5zbGljZSgwKS5zb3J0KCkudG9TdHJpbmcoKSkKKyAgICAg
ICAgICAgICAgICBleHRyYUV4cGVjdGF0aW9ucy5wdXNoKCdQQVNTJyk7CisgICAgICAgIH0KKwor
ICAgIH0KKworICAgIHJlc3VsdHNGb3JUZXN0Lm1lZXRzRXhwZWN0YXRpb25zID0gIW1pc3NpbmdF
eHBlY3RhdGlvbnMubGVuZ3RoICYmICFleHRyYUV4cGVjdGF0aW9ucy5sZW5ndGg7CisgICAgcmVz
dWx0c0ZvclRlc3QubWlzc2luZyA9IG1pc3NpbmdFeHBlY3RhdGlvbnMuc29ydCgpLmpvaW4oJyAn
KTsKKyAgICByZXN1bHRzRm9yVGVzdC5leHRyYSA9IGV4dHJhRXhwZWN0YXRpb25zLnNvcnQoKS5q
b2luKCcgJyk7Cit9CisKKwordmFyIEJVR19VUkxfUFJFRklYID0gJzxhIGhyZWY9Imh0dHA6Ly8n
OwordmFyIEJVR19VUkxfUE9TVEZJWCA9ICcvJDIiPmNyYnVnLmNvbS8kMjwvYT4gJzsKK3ZhciBX
RUJLSVRfQlVHX1VSTF9QT1NURklYID0gJy8kMiI+d2Via2l0Lm9yZy9iLyQyPC9hPiAnOwordmFy
IElOVEVSTkFMX0JVR19SRVBMQUNFX1ZBTFVFID0gQlVHX1VSTF9QUkVGSVggKyAnYicgKyBCVUdf
VVJMX1BPU1RGSVg7Cit2YXIgRVhURVJOQUxfQlVHX1JFUExBQ0VfVkFMVUUgPSBCVUdfVVJMX1BS
RUZJWCArICdjcmJ1Zy5jb20nICsgQlVHX1VSTF9QT1NURklYOwordmFyIFdFQktJVF9CVUdfUkVQ
TEFDRV9WQUxVRSA9IEJVR19VUkxfUFJFRklYICsgJ3dlYmtpdC5vcmcvYicgKyBXRUJLSVRfQlVH
X1VSTF9QT1NURklYOworCitmdW5jdGlvbiBodG1sRm9yQnVncyhidWdzKQoreworICAgIGJ1Z3Mg
PSBidWdzLnJlcGxhY2UoL0JVRyhDUik/KFxkezR9KShcIHwkKS9nLCBFWFRFUk5BTF9CVUdfUkVQ
TEFDRV9WQUxVRSk7CisgICAgYnVncyA9IGJ1Z3MucmVwbGFjZSgvQlVHKENSKT8oXGR7NX0pKFwg
fCQpL2csIEVYVEVSTkFMX0JVR19SRVBMQUNFX1ZBTFVFKTsKKyAgICBidWdzID0gYnVncy5yZXBs
YWNlKC9CVUcoQ1IpPygxXGR7NX0pKFwgfCQpL2csIEVYVEVSTkFMX0JVR19SRVBMQUNFX1ZBTFVF
KTsKKyAgICBidWdzID0gYnVncy5yZXBsYWNlKC9CVUcoQ1IpPyhbMi05XVxkezV9KShcIHwkKS9n
LCBJTlRFUk5BTF9CVUdfUkVQTEFDRV9WQUxVRSk7CisgICAgYnVncyA9IGJ1Z3MucmVwbGFjZSgv
QlVHKENSKT8oXGR7N30pKFwgfCQpL2csIElOVEVSTkFMX0JVR19SRVBMQUNFX1ZBTFVFKTsKKyAg
ICBidWdzID0gYnVncy5yZXBsYWNlKC9CVUcoV0spKFxkezV9XGQqPykoXCB8JCkvZywgV0VCS0lU
X0JVR19SRVBMQUNFX1ZBTFVFKTsKKyAgICByZXR1cm4gYnVnczsKK30KKworZnVuY3Rpb24gbGlu
a0hUTUxUb09wZW5XaW5kb3codXJsLCB0ZXh0KQoreworICAgIHJldHVybiAnPGEgaHJlZj0iJyAr
IHVybCArICciIHRhcmdldD0iX2JsYW5rIj4nICsgdGV4dCArICc8L2E+JzsKK30KKworLy8gRklY
TUU6IHJlcGxhY2VkIHdpdGggY2hyb21pdW1SZXZpc2lvbkxpbmsvd2ViS2l0UmV2aXNpb25MaW5r
CitmdW5jdGlvbiBjcmVhdGVCbGFtZUxpc3RIVE1MKHJldmlzaW9ucywgaW5kZXgsIHVybEJhc2Us
IHNlcGFyYXRvciwgcmVwbykKK3sKKyAgICB2YXIgdGhpc1JldmlzaW9uID0gcmV2aXNpb25zW2lu
ZGV4XTsKKyAgICBpZiAoIXRoaXNSZXZpc2lvbikKKyAgICAgICAgcmV0dXJuICcnOworCisgICAg
dmFyIHByZXZpb3VzUmV2aXNpb24gPSByZXZpc2lvbnNbaW5kZXggKyAxXTsKKyAgICBpZiAocHJl
dmlvdXNSZXZpc2lvbiAmJiBwcmV2aW91c1JldmlzaW9uICE9IHRoaXNSZXZpc2lvbikgeworICAg
ICAgICBwcmV2aW91c1JldmlzaW9uKys7CisgICAgICAgIHJldHVybiBsaW5rSFRNTFRvT3Blbldp
bmRvdyh1cmxCYXNlICsgdGhpc1JldmlzaW9uICsgc2VwYXJhdG9yICsgcHJldmlvdXNSZXZpc2lv
biwKKyAgICAgICAgICAgIHJlcG8gKyAnIGJsYW1lbGlzdCByJyArIHByZXZpb3VzUmV2aXNpb24g
KyAnOnInICsgdGhpc1JldmlzaW9uKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuICdBdCAn
ICsgcmVwbyArICcgcmV2aXNpb246ICcgKyB0aGlzUmV2aXNpb247Cit9CisKKy8vIFJldHVybnMg
d2hldGhlciB0aGUgcmVzdWx0IGZvciBpbmRleCd0aCByZXN1bHQgZm9yIHRlc3ROYW1lIG9uIGJ1
aWxkZXIgd2FzCisvLyBhIGZhaWx1cmUuCitmdW5jdGlvbiBpc0ZhaWx1cmUoYnVpbGRlciwgdGVz
dE5hbWUsIGluZGV4KQoreworICAgIHZhciBjdXJyZW50SW5kZXggPSAwOworICAgIHZhciByYXdS
ZXN1bHRzID0gZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLnRlc3RzW3Rlc3ROYW1lXS5yZXN1
bHRzOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3UmVzdWx0cy5sZW5ndGg7IGkrKykgewor
ICAgICAgICBjdXJyZW50SW5kZXggKz0gcmF3UmVzdWx0c1tpXVtSTEUuTEVOR1RIXTsKKyAgICAg
ICAgaWYgKGN1cnJlbnRJbmRleCA+IGluZGV4KQorICAgICAgICAgICAgcmV0dXJuIGlzRmFpbGlu
Z1Jlc3VsdChyYXdSZXN1bHRzW2ldW1JMRS5WQUxVRV0pOworICAgIH0KKyAgICBjb25zb2xlLmVy
cm9yKCdJbmRleCBleGNlZWRzIG51bWJlciBvZiByZXN1bHRzOiAnICsgaW5kZXgpOworfQorCisv
LyBSZXR1cm5zIGFuIGFycmF5IG9mIGJ1aWxkTnVtYmVycyBmb3IgYWxsIGJ1aWxkcyB3aGVyZSB0
aGlzIHRlc3QgZmFpbGVkLgorZnVuY3Rpb24gYnVpbGROdW1iZXJzRm9yRmFpbHVyZXMoYnVpbGRl
ciwgdGVzdE5hbWUpCit7CisgICAgdmFyIHJhd1Jlc3VsdHMgPSBnX3Jlc3VsdHNCeUJ1aWxkZXJb
YnVpbGRlcl0udGVzdHNbdGVzdE5hbWVdLnJlc3VsdHM7CisgICAgdmFyIGJ1aWxkTnVtYmVycyA9
IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJlcnM7CisgICAgdmFyIGluZGV4
ID0gMDsKKyAgICB2YXIgZmFpbHVyZXMgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJh
d1Jlc3VsdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIG51bVJlc3VsdHMgPSByYXdSZXN1
bHRzW2ldW1JMRS5MRU5HVEhdOworICAgICAgICBpZiAoaXNGYWlsaW5nUmVzdWx0KHJhd1Jlc3Vs
dHNbaV1bUkxFLlZBTFVFXSkpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVt
UmVzdWx0czsgaisrKQorICAgICAgICAgICAgICAgIGZhaWx1cmVzLnB1c2goYnVpbGROdW1iZXJz
W2luZGV4ICsgal0pOworICAgICAgICB9CisgICAgICAgIGluZGV4ICs9IG51bVJlc3VsdHM7Cisg
ICAgfQorICAgIHJldHVybiBmYWlsdXJlczsKK30KKworLy8gUmV0dXJucyB0aGUgcGF0aCB0byB0
aGUgZmFpbHVyZSBsb2cgZm9yIHRoaXMgbm9uLXdlYmtpdCB0ZXN0LgorZnVuY3Rpb24gcGF0aFRv
RmFpbHVyZUxvZyh0ZXN0TmFtZSkKK3sKKyAgICByZXR1cm4gJy9zdGVwcy8nICsgZ19jdXJyZW50
U3RhdGUudGVzdFR5cGUgKyAnL2xvZ3MvJyArIHRlc3ROYW1lLnNwbGl0KCcuJylbMV0KK30KKwor
ZnVuY3Rpb24gc2hvd1BvcHVwRm9yQnVpbGQoZSwgYnVpbGRlciwgaW5kZXgsIG9wdF90ZXN0TmFt
ZSkKK3sKKyAgICB2YXIgaHRtbCA9ICcnOworCisgICAgdmFyIHRpbWUgPSBnX3Jlc3VsdHNCeUJ1
aWxkZXJbYnVpbGRlcl0uc2Vjb25kc1NpbmNlRXBvY2hbaW5kZXhdOworICAgIGlmICh0aW1lKSB7
CisgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUodGltZSAqIDEwMDApOworICAgICAgICBodG1s
ICs9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkgKyAnICcgKyBkYXRlLnRvTG9jYWxlVGltZVN0
cmluZygpOworICAgIH0KKworICAgIHZhciBidWlsZE51bWJlciA9IGdfcmVzdWx0c0J5QnVpbGRl
cltidWlsZGVyXS5idWlsZE51bWJlcnNbaW5kZXhdOworICAgIHZhciBtYXN0ZXIgPSBidWlsZGVy
TWFzdGVyKGJ1aWxkZXIpOworICAgIHZhciBidWlsZEJhc2VQYXRoID0gbWFzdGVyLmdldExvZ1Bh
dGgoYnVpbGRlciwgYnVpbGROdW1iZXIpOworCisgICAgaHRtbCArPSAnPHVsPjxsaT4nICsgbGlu
a0hUTUxUb09wZW5XaW5kb3coYnVpbGRCYXNlUGF0aCwgJ0J1aWxkIGxvZycpICsKKyAgICAgICAg
JzwvbGk+PGxpPicgKworICAgICAgICBjcmVhdGVCbGFtZUxpc3RIVE1MKGdfcmVzdWx0c0J5QnVp
bGRlcltidWlsZGVyXS53ZWJraXRSZXZpc2lvbiwgaW5kZXgsCisgICAgICAgICAgICAnaHR0cDov
L3RyYWMud2Via2l0Lm9yZy9sb2cvP3ZlcmJvc2U9b24mcmV2PScsICcmc3RvcF9yZXY9JywKKyAg
ICAgICAgICAgICdXZWJLaXQnKSArCisgICAgICAgICc8L2xpPic7CisKKyAgICBpZiAobWFzdGVy
ID09IFdFQktJVF9CVUlMREVSX01BU1RFUikgeworICAgICAgICB2YXIgcmV2aXNpb24gPSBnX3Jl
c3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0ud2Via2l0UmV2aXNpb25baW5kZXhdOworICAgICAgICBo
dG1sICs9ICc8bGk+PHNwYW4gY2xhc3M9bGluayBvbmNsaWNrPSJzZXRRdWVyeVBhcmFtZXRlcihc
J3JldmlzaW9uXCcsJyArCisgICAgICAgICAgICByZXZpc2lvbiArICcpIj5TaG93IHJlc3VsdHMg
Zm9yIFdlYktpdCByJyArIHJldmlzaW9uICsKKyAgICAgICAgICAgICc8L3NwYW4+PC9saT4nOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGh0bWwgKz0gJzxsaT4nICsKKyAgICAgICAgICAgIGNyZWF0
ZUJsYW1lTGlzdEhUTUwoZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLmNocm9tZVJldmlzaW9u
LCBpbmRleCwKKyAgICAgICAgICAgICAgICAnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2No
cm9taXVtL3BlcmYvZGFzaGJvYXJkL3VpL2NoYW5nZWxvZy5odG1sP3VybD0vdHJ1bmsvc3JjJm1v
ZGU9aHRtbCZyYW5nZT0nLCAnOicsICdDaHJvbWUnKSArCisgICAgICAgICAgICAnPC9saT4nOwor
CisgICAgICAgIHZhciBjaHJvbWVSZXZpc2lvbiA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVy
XS5jaHJvbWVSZXZpc2lvbltpbmRleF07CisgICAgICAgIGlmIChjaHJvbWVSZXZpc2lvbiAmJiBp
c0xheW91dFRlc3RSZXN1bHRzKCkpIHsKKyAgICAgICAgICAgIGh0bWwgKz0gJzxsaT48YSBocmVm
PSInICsgVEVTVF9SRVNVTFRTX0JBU0VfUEFUSCArIGdfYnVpbGRlcnNbYnVpbGRlcl0gKworICAg
ICAgICAgICAgICAgICcvJyArIGNocm9tZVJldmlzaW9uICsgJy9sYXlvdXQtdGVzdC1yZXN1bHRz
LnppcCI+bGF5b3V0LXRlc3QtcmVzdWx0cy56aXA8L2E+PC9saT4nOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKCFpc0xheW91dFRlc3RSZXN1bHRzKCkgJiYgb3B0X3Rlc3ROYW1lICYmIGlz
RmFpbHVyZShidWlsZGVyLCBvcHRfdGVzdE5hbWUsIGluZGV4KSkKKyAgICAgICAgaHRtbCArPSAn
PGxpPicgKyBsaW5rSFRNTFRvT3BlbldpbmRvdyhidWlsZEJhc2VQYXRoICsgcGF0aFRvRmFpbHVy
ZUxvZyhvcHRfdGVzdE5hbWUpLCAnRmFpbHVyZSBsb2cnKSArICc8L2xpPic7CisKKyAgICBodG1s
ICs9ICc8L3VsPic7CisgICAgc2hvd1BvcHVwKGUsIGh0bWwpOworfQorCitmdW5jdGlvbiBodG1s
Rm9yVGVzdFJlc3VsdHModGVzdCkKK3sKKyAgICB2YXIgaHRtbCA9ICcnOworICAgIHZhciByZXN1
bHRzID0gdGVzdC5yYXdSZXN1bHRzLmNvbmNhdCgpOworICAgIHZhciB0aW1lcyA9IHRlc3QucmF3
VGltZXMuY29uY2F0KCk7CisgICAgdmFyIGJ1aWxkZXIgPSB0ZXN0LmJ1aWxkZXI7CisgICAgdmFy
IG1hc3RlciA9IGJ1aWxkZXJNYXN0ZXIoYnVpbGRlcik7CisgICAgdmFyIGJ1aWxkTnVtYmVycyA9
IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJlcnM7CisKKyAgICB2YXIgaW5k
ZXhUb1JlcGxhY2VDdXJyZW50UmVzdWx0ID0gLTE7CisgICAgdmFyIGluZGV4VG9SZXBsYWNlQ3Vy
cmVudFRpbWUgPSAtMTsKKyAgICB2YXIgY3VycmVudFJlc3VsdEFycmF5LCBjdXJyZW50VGltZUFy
cmF5LCBjdXJyZW50UmVzdWx0LCBpbm5lckhUTUwsIHJlc3VsdFN0cmluZzsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGJ1aWxkTnVtYmVycy5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoaSA+
IGluZGV4VG9SZXBsYWNlQ3VycmVudFJlc3VsdCkgeworICAgICAgICAgICAgY3VycmVudFJlc3Vs
dEFycmF5ID0gcmVzdWx0cy5zaGlmdCgpOworICAgICAgICAgICAgaWYgKGN1cnJlbnRSZXN1bHRB
cnJheSkgeworICAgICAgICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSBjdXJyZW50UmVzdWx0QXJy
YXlbUkxFLlZBTFVFXTsKKyAgICAgICAgICAgICAgICAvLyBUcmVhdCBzaW1wbGlmaWVkIGRpZmYg
ZmFpbHVyZXMgYXMganVzdCB0ZXh0IGZhaWx1cmVzLgorICAgICAgICAgICAgICAgIGlmIChjdXJy
ZW50UmVzdWx0ID09ICdTJykKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc3VsdCA9ICdG
JzsKKyAgICAgICAgICAgICAgICBpbmRleFRvUmVwbGFjZUN1cnJlbnRSZXN1bHQgKz0gY3VycmVu
dFJlc3VsdEFycmF5W1JMRS5MRU5HVEhdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBjdXJyZW50UmVzdWx0ID0gJ04nOworICAgICAgICAgICAgICAgIGluZGV4VG9SZXBs
YWNlQ3VycmVudFJlc3VsdCArPSBidWlsZE51bWJlcnMubGVuZ3RoOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmVzdWx0U3RyaW5nID0gZXhwZWN0YXRpb25zRmlsZVN0cmluZ0ZvclJlc3Vs
dChjdXJyZW50UmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpID4gaW5kZXhUb1Jl
cGxhY2VDdXJyZW50VGltZSkgeworICAgICAgICAgICAgY3VycmVudFRpbWVBcnJheSA9IHRpbWVz
LnNoaWZ0KCk7CisgICAgICAgICAgICB2YXIgY3VycmVudFRpbWUgPSAwOworICAgICAgICAgICAg
aWYgKGN1cnJlbnRSZXN1bHRBcnJheSkgeworICAgICAgICAgICAgICBjdXJyZW50VGltZSA9IGN1
cnJlbnRUaW1lQXJyYXlbUkxFLlZBTFVFXTsKKyAgICAgICAgICAgICAgaW5kZXhUb1JlcGxhY2VD
dXJyZW50VGltZSArPSBjdXJyZW50VGltZUFycmF5W1JMRS5MRU5HVEhdOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgIGluZGV4VG9SZXBsYWNlQ3VycmVudFRpbWUgKz0gYnVpbGRO
dW1iZXJzLmxlbmd0aDsKKworICAgICAgICAgICAgaW5uZXJIVE1MID0gY3VycmVudFRpbWUgfHwg
JyZuYnNwOyc7CisgICAgICAgIH0KKworICAgICAgICB2YXIgZXh0cmFDbGFzc05hbWVzID0gJyc7
CisgICAgICAgIHZhciB3ZWJraXRSZXZpc2lvbiA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVy
XS53ZWJraXRSZXZpc2lvbjsKKyAgICAgICAgdmFyIGlzV2Via2l0TWVyZ2UgPSB3ZWJraXRSZXZp
c2lvbltpICsgMV0gJiYgd2Via2l0UmV2aXNpb25baV0gIT0gd2Via2l0UmV2aXNpb25baSArIDFd
OworICAgICAgICBpZiAoaXNXZWJraXRNZXJnZSAmJiBtYXN0ZXIgIT0gV0VCS0lUX0JVSUxERVJf
TUFTVEVSKQorICAgICAgICAgICAgZXh0cmFDbGFzc05hbWVzICs9ICcgbWVyZ2UnOworCisgICAg
ICAgIGh0bWwgKz0gJzx0ZCB0aXRsZT0iJyArIChyZXN1bHRTdHJpbmcgfHwgJ05PIERBVEEnKSAr
ICcuIENsaWNrIGZvciBtb3JlIGluZm8uIiBjbGFzcz0icmVzdWx0cyAnICsgY3VycmVudFJlc3Vs
dCArCisgICAgICAgICAgZXh0cmFDbGFzc05hbWVzICsgJyIgb25jbGljaz1cJ3Nob3dQb3B1cEZv
ckJ1aWxkKGV2ZW50LCAiJyArIGJ1aWxkZXIgKyAnIiwnICsgaSArICcsIicgKyB0ZXN0LnRlc3Qg
KyAnIilcJz4nICsgaW5uZXJIVE1MOworICAgIH0KKyAgICByZXR1cm4gaHRtbDsKK30KKworZnVu
Y3Rpb24gaHRtbEZvclRlc3RzV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXMoYnVpbGRlcikK
K3sKKyAgICB2YXIgdGVzdHMgPSBnX3BlckJ1aWxkZXJXaXRoRXhwZWN0YXRpb25zQnV0Tm9GYWls
dXJlc1tidWlsZGVyXTsKKyAgICB2YXIgc2tpcHBlZFBhdGhzID0gZ19wZXJCdWlsZGVyU2tpcHBl
ZFBhdGhzW2J1aWxkZXJdOworCisgICAgdmFyIGh0bWwgPSAnJzsKKyAgICBpZiAodGVzdHMubGVu
Z3RoIHx8IHNraXBwZWRQYXRocy5sZW5ndGgpIHsKKyAgICAgICAgdmFyIGJ1aWxkSW5mbyA9IHBs
YXRmb3JtQW5kQnVpbGRUeXBlKGJ1aWxkZXIpOworICAgICAgICBodG1sICs9ICc8aDI+RXhwZWN0
YXRpb25zIGZvciAnICsgYnVpbGRJbmZvLnBsYXRmb3JtICsgJy0nICsgYnVpbGRJbmZvLmJ1aWxk
VHlwZSArICc6PC9oMj4nOworICAgIH0KKworICAgIHZhciBvcGVuID0gJzxkaXYgb25jbGljaz0i
c2VsZWN0Q29udGVudHModGhpcykiPic7CisKKyAgICBpZiAodGVzdHMubGVuZ3RoKSB7CisgICAg
ICAgIGh0bWwgKz0gICc8aDM+JyArIGxpbmtIVE1MVG9Ub2dnbGVTdGF0ZSgnc2hvd1VuZXhwZWN0
ZWRQYXNzZXMnLCAndGVzdHMgdGhhdCBoYXZlIG5vdCBmYWlsZWQgaW4gbGFzdCAnICsgZ19yZXN1
bHRzQnlCdWlsZGVyW2J1aWxkZXJdLmJ1aWxkTnVtYmVycy5sZW5ndGggKyAnIHJ1bnMuJykgKyAn
PC9oMz4nOworICAgICAgICAKKyAgICAgICAgaWYgKGdfY3VycmVudFN0YXRlLnNob3dVbmV4cGVj
dGVkUGFzc2VzKSB7CisgICAgICAgICAgICBodG1sICs9ICc8ZGl2IGlkPSJwYXNzaW5nLXRlc3Rz
Ij4nOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykK
KyAgICAgICAgICAgICAgICBodG1sICs9IG9wZW4gKyB0ZXN0c1tpXS50ZXN0ICsgJzwvZGl2Pic7
CisgICAgICAgICAgICBodG1sICs9ICc8L2Rpdj4nOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKHNraXBwZWRQYXRocy5sZW5ndGgpIHsKKyAgICAgICAgaHRtbCArPSAnPGgzPicgKyBsaW5r
SFRNTFRvVG9nZ2xlU3RhdGUoJ3Nob3dTa2lwcGVkJywgJ3NraXBwZWQgdGVzdHMgaW4gdGVzdF9l
eHBlY3RhdGlvbnMudHh0JykgKyAnPC9oMz4nOworCisgICAgICAgIGlmIChnX2N1cnJlbnRTdGF0
ZS5zaG93U2tpcHBlZCkKKyAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgaWQ9InNraXBwZWQtdGVz
dHMiPicgKyBvcGVuICsgc2tpcHBlZFBhdGhzLmpvaW4oJzwvZGl2PicgKyBvcGVuKSArICc8L2Rp
dj48L2Rpdj4nOworICAgIH0KKyAgICByZXR1cm4gaHRtbDsKK30KKworLy8gUmV0dXJucyB3aGV0
aGVyIHdlIHNob3VsZCBleGNsdWRlIHRlc3QgcmVzdWx0cyBmcm9tIHRoZSB0ZXN0IHRhYmxlLgor
ZnVuY3Rpb24gc2hvdWxkSGlkZVRlc3QodGVzdFJlc3VsdCkKK3sKKyAgICBpZiAodGVzdFJlc3Vs
dC5pc1dvbnRGaXhTa2lwKQorICAgICAgICByZXR1cm4gIWdfY3VycmVudFN0YXRlLnNob3dXb250
Rml4U2tpcDsKKworICAgIGlmICh0ZXN0UmVzdWx0LmlzRmxha3kpCisgICAgICAgIHJldHVybiAh
Z19jdXJyZW50U3RhdGUuc2hvd0ZsYWt5OworCisgICAgaWYgKGlzU2xvd1Rlc3QodGVzdFJlc3Vs
dCkpCisgICAgICAgIHJldHVybiAhZ19jdXJyZW50U3RhdGUuc2hvd1Nsb3c7CisKKyAgICBpZiAo
dGVzdFJlc3VsdC5tZWV0c0V4cGVjdGF0aW9ucykKKyAgICAgICAgcmV0dXJuICFnX2N1cnJlbnRT
dGF0ZS5zaG93Q29ycmVjdEV4cGVjdGF0aW9uczsKKworICAgIHJldHVybiAhZ19jdXJyZW50U3Rh
dGUuc2hvd1dyb25nRXhwZWN0YXRpb25zOworfQorCisvLyBTZXRzIHRoZSBicm93c2VyJ3Mgc2Vs
ZWN0aW9uIHRvIHRoZSBlbGVtZW50J3MgY29udGVudHMuCitmdW5jdGlvbiBzZWxlY3RDb250ZW50
cyhlbGVtZW50KQoreworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJl
bihlbGVtZW50KTsKK30KKworZnVuY3Rpb24gY3JlYXRlQnVnSFRNTCh0ZXN0KQoreworICAgIHZh
ciBzeW1wdG9tID0gdGVzdC5pc0ZsYWt5ID8gJ2ZsYWt5JyA6ICdmYWlsaW5nJzsKKyAgICB2YXIg
dGl0bGUgPSBlbmNvZGVVUklDb21wb25lbnQoJ0xheW91dCBUZXN0ICcgKyB0ZXN0LnRlc3QgKyAn
IGlzICcgKyBzeW1wdG9tKTsKKyAgICB2YXIgZGVzY3JpcHRpb24gPSBlbmNvZGVVUklDb21wb25l
bnQoJ1RoZSBmb2xsb3dpbmcgbGF5b3V0IHRlc3QgaXMgJyArIHN5bXB0b20gKyAnIG9uICcgKwor
ICAgICAgICAnW2luc2VydCBwbGF0Zm9ybV1cblxuJyArIHRlc3QudGVzdCArICdcblxuUHJvYmFi
bGUgY2F1c2U6XG5cbicgKworICAgICAgICAnW2luc2VydCBwcm9iYWJsZSBjYXVzZV0nKTsKKyAg
ICAKKyAgICB2YXIgY29tcG9uZW50ID0gZW5jb2RlVVJJQ29tcG9uZW50KCdUb29scyAvIFRlc3Rz
Jyk7CisgICAgdXJsID0gJ2h0dHBzOi8vYnVncy53ZWJraXQub3JnL2VudGVyX2J1Zy5jZ2k/YXNz
aWduZWRfdG89d2Via2l0LXVuYXNzaWduZWQlNDBsaXN0cy53ZWJraXQub3JnJnByb2R1Y3Q9V2Vi
S2l0JmZvcm1fbmFtZT1lbnRlcl9idWcmY29tcG9uZW50PScgKyBjb21wb25lbnQgKyAnJnNob3J0
X2Rlc2M9JyArIHRpdGxlICsgJyZjb21tZW50PScgKyBkZXNjcmlwdGlvbjsKKyAgICByZXR1cm4g
JzxhIGhyZWY9IicgKyB1cmwgKyAnIiBjbGFzcz0iZmlsZS1idWciPkZJTEUgQlVHPC9hPic7Cit9
CisKK2Z1bmN0aW9uIGlzQ3Jvc3NCdWlsZGVyVmlldygpCit7CisgICAgcmV0dXJuIGdfY3VycmVu
dFN0YXRlLnRlc3RzIHx8IGdfY3VycmVudFN0YXRlLnJlc3VsdCB8fCBnX2N1cnJlbnRTdGF0ZS5l
eHBlY3RhdGlvbnNVcGRhdGU7Cit9CisKK2Z1bmN0aW9uIHRhYmxlSGVhZGVycyhvcHRfZ2V0QWxs
KQoreworICAgIHZhciBoZWFkZXJzID0gW107CisgICAgaWYgKGlzQ3Jvc3NCdWlsZGVyVmlldygp
IHx8IG9wdF9nZXRBbGwpCisgICAgICAgIGhlYWRlcnMucHVzaCgnYnVpbGRlcicpOworCisgICAg
aWYgKCFpc0Nyb3NzQnVpbGRlclZpZXcoKSB8fCBvcHRfZ2V0QWxsKQorICAgICAgICBoZWFkZXJz
LnB1c2goJ3Rlc3QnKTsKKworICAgIGlmIChpc0xheW91dFRlc3RSZXN1bHRzKCkgfHwgb3B0X2dl
dEFsbCkKKyAgICAgICAgaGVhZGVycy5wdXNoKCdidWdzJywgJ21vZGlmaWVycycsICdleHBlY3Rh
dGlvbnMnKTsKKworICAgIGhlYWRlcnMucHVzaCgnc2xvd2VzdCBydW4nLCAnJSBmYWlsJywgJ2Zs
YWtpbmVzcyAobnVtYmVycyBhcmUgcnVudGltZXMgaW4gc2Vjb25kcyknKTsKKyAgICByZXR1cm4g
aGVhZGVyczsKK30KKworZnVuY3Rpb24gaHRtbEZvclNpbmdsZVRlc3RSb3codGVzdCkKK3sKKyAg
ICBpZiAoIWlzQ3Jvc3NCdWlsZGVyVmlldygpICYmIHNob3VsZEhpZGVUZXN0KHRlc3QpKSB7Cisg
ICAgICAgIC8vIFRoZSBpbm5lckhUTUwgY2FsbCBpcyBjb25zaWRlcmFibHkgZmFzdGVyIGlmIHdl
IGV4Y2x1ZGUgdGhlIHJvd3MgZm9yCisgICAgICAgIC8vIGl0ZW1zIHdlJ3JlIG5vdCBzaG93aW5n
IHRoYW4gaWYgd2UgaGlkZSB0aGVtIHVzaW5nIGRpc3BsYXk6bm9uZS4KKyAgICAgICAgLy8gRm9y
IHRoZSBjcm9zc0J1aWxkZXJWaWV3LCB3ZSB3YW50IHRvIHNob3cgYWxsIHJvd3MgdGhlIHVzZXIg
aXMKKyAgICAgICAgLy8gZXhwbGljaXRseSBsaXN0aW5nIHRlc3RzIHRvIHZpZXcuCisgICAgICAg
IHJldHVybiAnJzsKKyAgICB9CisKKyAgICB2YXIgaGVhZGVycyA9IHRhYmxlSGVhZGVycygpOwor
ICAgIHZhciBodG1sID0gJyc7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgIHZhciBoZWFkZXIgPSBoZWFkZXJzW2ldOworICAgICAgICB2YXIg
ZmlsdGVyZWRNb2RpZmllcnMgPSBmaWx0ZXJCdWdzKHRlc3QubW9kaWZpZXJzKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChzdGFydHNXaXRoKGhlYWRlciwgJ3Rlc3QnKSB8fCBzdGFydHNXaXRoKGhl
YWRlciwgJ2J1aWxkZXInKSkgeworICAgICAgICAgICAgLy8gSWYgaXNDcm9zc0J1aWxkZXJWaWV3
KCkgaXMgdHJ1ZSwgd2UncmUganVzdCB2aWV3aW5nIGEgc2luZ2xlIHRlc3QKKyAgICAgICAgICAg
IC8vIHdpdGggcmVzdWx0cyBmb3IgbWFueSBidWlsZGVycywgc28gdGhlIGZpcnN0IGNvbHVtbiBp
cyBidWlsZGVyIG5hbWVzCisgICAgICAgICAgICAvLyBpbnN0ZWFkIG9mIHRlc3QgcGF0aHMuCisg
ICAgICAgICAgICB2YXIgdGVzdENlbGxDbGFzc05hbWUgPSAndGVzdC1saW5rJyArIChpc0Nyb3Nz
QnVpbGRlclZpZXcoKSA/ICcgYnVpbGRlci1uYW1lJyA6ICcnKTsKKyAgICAgICAgICAgIHZhciB0
ZXN0Q2VsbEhUTUwgPSBpc0Nyb3NzQnVpbGRlclZpZXcoKSA/IHRlc3QuYnVpbGRlciA6ICc8c3Bh
biBjbGFzcz0ibGluayIgb25jbGljaz0ic2V0UXVlcnlQYXJhbWV0ZXIoXCd0ZXN0c1wnLFwnJyAr
IHRlc3QudGVzdCArJ1wnKTsiPicgKyB0ZXN0LnRlc3QgKyAnPC9zcGFuPic7CisKKyAgICAgICAg
ICAgIGh0bWwgKz0gJzx0ciBjbGFzcz0iJyArICh0ZXN0Lm1lZXRzRXhwZWN0YXRpb25zID8gJycg
OiAnd3JvbmctZXhwZWN0YXRpb25zJykgKyAnIj48dGQgY2xhc3M9IicgKyB0ZXN0Q2VsbENsYXNz
TmFtZSArICciPicgKyB0ZXN0Q2VsbEhUTUw7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRzV2l0
aChoZWFkZXIsICdidWdzJykpCisgICAgICAgICAgICBodG1sICs9ICc8dGQgY2xhc3M9b3B0aW9u
cy1jb250YWluZXI+JyArIChmaWx0ZXJlZE1vZGlmaWVycy5idWdzID8gaHRtbEZvckJ1Z3MoZmls
dGVyZWRNb2RpZmllcnMuYnVncykgOiBjcmVhdGVCdWdIVE1MKHRlc3QpKTsKKyAgICAgICAgZWxz
ZSBpZiAoc3RhcnRzV2l0aChoZWFkZXIsICdtb2RpZmllcnMnKSkKKyAgICAgICAgICAgIGh0bWwg
Kz0gJzx0ZCBjbGFzcz1vcHRpb25zLWNvbnRhaW5lcj4nICsgZmlsdGVyZWRNb2RpZmllcnMubW9k
aWZpZXJzOworICAgICAgICBlbHNlIGlmIChzdGFydHNXaXRoKGhlYWRlciwgJ2V4cGVjdGF0aW9u
cycpKQorICAgICAgICAgICAgaHRtbCArPSAnPHRkIGNsYXNzPW9wdGlvbnMtY29udGFpbmVyPicg
KyB0ZXN0LmV4cGVjdGF0aW9uczsKKyAgICAgICAgZWxzZSBpZiAoc3RhcnRzV2l0aChoZWFkZXIs
ICdzbG93ZXN0JykpCisgICAgICAgICAgICBodG1sICs9ICc8dGQ+JyArICh0ZXN0LnNsb3dlc3RU
aW1lID8gdGVzdC5zbG93ZXN0VGltZSArICdzJyA6ICcnKTsKKyAgICAgICAgZWxzZSBpZiAoc3Rh
cnRzV2l0aChoZWFkZXIsICclIGZhaWwnKSkKKyAgICAgICAgICAgIGh0bWwgKz0gJzx0ZD4nICsg
dGVzdC5wZXJjZW50RmFpbGVkOworICAgICAgICBlbHNlIGlmIChzdGFydHNXaXRoKGhlYWRlciwg
J2ZsYWtpbmVzcycpKQorICAgICAgICAgICAgaHRtbCArPSBodG1sRm9yVGVzdFJlc3VsdHModGVz
dCwgaXNDcm9zc0J1aWxkZXJWaWV3KCkpOworICAgIH0KKyAgICByZXR1cm4gaHRtbDsKK30KKwor
ZnVuY3Rpb24gc29ydENvbHVtbkZyb21UYWJsZUhlYWRlcihoZWFkZXJUZXh0KQoreworICAgIHJl
dHVybiBoZWFkZXJUZXh0LnNwbGl0KCcgJywgMSlbMF07Cit9CisKK2Z1bmN0aW9uIGh0bWxGb3JU
YWJsZUNvbHVtbkhlYWRlcihoZWFkZXJOYW1lLCBvcHRfZmlsbENvbFNwYW4pCit7CisgICAgLy8g
VXNlIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBoZWFkZXIgdGl0bGUgYXMgdGhlIHNvcnRrZXkKKyAg
ICB2YXIgdGhpc1NvcnRWYWx1ZSA9IHNvcnRDb2x1bW5Gcm9tVGFibGVIZWFkZXIoaGVhZGVyTmFt
ZSk7CisgICAgdmFyIGFycm93SFRNTCA9IHRoaXNTb3J0VmFsdWUgPT0gZ19jdXJyZW50U3RhdGUu
c29ydENvbHVtbiA/CisgICAgICAgICc8c3BhbiBjbGFzcz0nICsgZ19jdXJyZW50U3RhdGUuc29y
dE9yZGVyICsgJz4nICsgKGdfY3VycmVudFN0YXRlLnNvcnRPcmRlciA9PSBGT1JXQVJEID8gJyZ1
YXJyOycgOiAnJmRhcnI7JyApICsgJzwvc3Bhbj4nIDogJyc7CisgICAgcmV0dXJuICc8dGggc29y
dFZhbHVlPScgKyB0aGlzU29ydFZhbHVlICsKKyAgICAgICAgLy8gRXh0ZW5kIGxhc3QgdGggdGhy
b3VnaCBhbGwgdGhlIHJlc3Qgb2YgdGhlIGNvbHVtbnMuCisgICAgICAgIChvcHRfZmlsbENvbFNw
YW4gPyAnIGNvbHNwYW49MTAwMDAnIDogJycpICsKKyAgICAgICAgLy8gRXh0cmEgc3BhbiBoZXJl
IGlzIHNvIGZsZXggYm94aW5nIGFjdHVhbGx5IGNlbnRlcnMuCisgICAgICAgIC8vIFRoZXJlJ3Mg
cHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgd2l0aCBDU1Mgb25seSB0aG91Z2guCisg
ICAgICAgICc+PGRpdiBjbGFzcz10YWJsZS1oZWFkZXItY29udGVudD48c3Bhbj48L3NwYW4+JyAr
IGFycm93SFRNTCArCisgICAgICAgICc8c3BhbiBjbGFzcz1oZWFkZXItdGV4dD4nICsgaGVhZGVy
TmFtZSArICc8L3NwYW4+JyArIGFycm93SFRNTCArICc8L2Rpdj48L3RoPic7Cit9CisKK2Z1bmN0
aW9uIGh0bWxGb3JUZXN0VGFibGUocm93c0hUTUwsIG9wdF9leGNsdWRlSGVhZGVycykKK3sKKyAg
ICB2YXIgaHRtbCA9ICc8dGFibGUgY2xhc3M9dGVzdC10YWJsZT4nOworICAgIGlmICghb3B0X2V4
Y2x1ZGVIZWFkZXJzKSB7CisgICAgICAgIGh0bWwgKz0gJzx0aGVhZD48dHI+JzsKKyAgICAgICAg
dmFyIGhlYWRlcnMgPSB0YWJsZUhlYWRlcnMoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBoZWFkZXJzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgaHRtbCArPSBodG1sRm9yVGFibGVD
b2x1bW5IZWFkZXIoaGVhZGVyc1tpXSwgaSA9PSBoZWFkZXJzLmxlbmd0aCAtIDEpOworICAgICAg
ICBodG1sICs9ICc8L3RyPjwvdGhlYWQ+JzsKKyAgICB9CisgICAgcmV0dXJuIGh0bWwgKyAnPHRi
b2R5PicgKyByb3dzSFRNTCArICc8L3Rib2R5PjwvdGFibGU+JzsKK30KKworZnVuY3Rpb24gYXBw
ZW5kSFRNTChodG1sKQoreworICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpOworICAgIC8v
IElubmVySFRNTCB0byBhIGRpdiB0aGF0J3Mgbm90IGluIHRoZSBkb2N1bWVudC4gVGhpcyBpcwor
ICAgIC8vIH4zMDBtcyBmYXN0ZXIgaW4gU2FmYXJpIDQgYW5kIENocm9tZSA0IG9uIG1hYy4KKyAg
ICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgZGl2LmlubmVy
SFRNTCA9IGh0bWw7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOworICAgIGxv
Z1RpbWUoJ1RpbWUgdG8gaW5uZXJIVE1MJywgc3RhcnRUaW1lKTsKK30KKworZnVuY3Rpb24gYWxw
aGFudW1lcmljQ29tcGFyZShjb2x1bW4sIHJldmVyc2UpCit7CisgICAgcmV0dXJuIHJldmVyc2li
bGVDb21wYXJlRnVuY3Rpb24oZnVuY3Rpb24oYSwgYikgeworICAgICAgICAvLyBQdXQgbnVsbCBl
bnRyaWVzIGF0IHRoZSBib3R0b20KKyAgICAgICAgdmFyIGEgPSBhW2NvbHVtbl0gPyBTdHJpbmco
YVtjb2x1bW5dKSA6ICd6JzsKKyAgICAgICAgdmFyIGIgPSBiW2NvbHVtbl0gPyBTdHJpbmcoYltj
b2x1bW5dKSA6ICd6JzsKKworICAgICAgICBpZiAoYSA8IGIpCisgICAgICAgICAgICByZXR1cm4g
LTE7CisgICAgICAgIGVsc2UgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICB9LCByZXZlcnNlKTsKK30KKwor
ZnVuY3Rpb24gbnVtZXJpY1NvcnQoY29sdW1uLCByZXZlcnNlKQoreworICAgIHJldHVybiByZXZl
cnNpYmxlQ29tcGFyZUZ1bmN0aW9uKGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAgYSA9IHBhcnNl
RmxvYXQoYVtjb2x1bW5dKTsKKyAgICAgICAgYiA9IHBhcnNlRmxvYXQoYltjb2x1bW5dKTsKKyAg
ICAgICAgcmV0dXJuIGEgLSBiOworICAgIH0sIHJldmVyc2UpOworfQorCitmdW5jdGlvbiByZXZl
cnNpYmxlQ29tcGFyZUZ1bmN0aW9uKGNvbXBhcmUsIHJldmVyc2UpCit7CisgICAgcmV0dXJuIGZ1
bmN0aW9uKGEsIGIpIHsKKyAgICAgICAgcmV0dXJuIGNvbXBhcmUocmV2ZXJzZSA/IGIgOiBhLCBy
ZXZlcnNlID8gYSA6IGIpOworICAgIH07Cit9CisKK2Z1bmN0aW9uIGNoYW5nZVNvcnQoZSkKK3sK
KyAgICB2YXIgdGFyZ2V0ID0gZS5jdXJyZW50VGFyZ2V0OworICAgIGUucHJldmVudERlZmF1bHQo
KTsKKworICAgIHZhciBzb3J0VmFsdWUgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdzb3J0VmFsdWUn
KTsKKyAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldC50YWdOYW1lICE9ICdUQUJMRScpCisgICAg
ICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlOworCisgICAgdmFyIHNvcnQgPSAnc29ydENv
bHVtbic7CisgICAgdmFyIG9yZGVyS2V5ID0gJ3NvcnRPcmRlcic7CisgICAgaWYgKHNvcnRWYWx1
ZSA9PSBnX2N1cnJlbnRTdGF0ZVtzb3J0XSAmJiBnX2N1cnJlbnRTdGF0ZVtvcmRlcktleV0gPT0g
Rk9SV0FSRCkKKyAgICAgICAgb3JkZXIgPSBCQUNLV0FSRDsKKyAgICBlbHNlCisgICAgICAgIG9y
ZGVyID0gRk9SV0FSRDsKKworICAgIHNldFF1ZXJ5UGFyYW1ldGVyKHNvcnQsIHNvcnRWYWx1ZSwg
b3JkZXJLZXksIG9yZGVyKTsKK30KKworZnVuY3Rpb24gc29ydFRlc3RzKHRlc3RzLCBjb2x1bW4s
IG9yZGVyKQoreworICAgIHZhciByZXN1bHRzUHJvcGVydHksIHNvcnRGdW5jdGlvbkdldHRlcjsK
KyAgICBpZiAoY29sdW1uID09ICdmbGFraW5lc3MnKSB7CisgICAgICAgIHNvcnRGdW5jdGlvbkdl
dHRlciA9IG51bWVyaWNTb3J0OworICAgICAgICByZXN1bHRzUHJvcGVydHkgPSAnZmxpcHMnOwor
ICAgIH0gZWxzZSBpZiAoY29sdW1uID09ICdzbG93ZXN0JykgeworICAgICAgICBzb3J0RnVuY3Rp
b25HZXR0ZXIgPSBudW1lcmljU29ydDsKKyAgICAgICAgcmVzdWx0c1Byb3BlcnR5ID0gJ3Nsb3dl
c3RUaW1lJzsKKyAgICB9IGVsc2UgaWYgKGNvbHVtbiA9PSAnJScpIHsKKyAgICAgICAgc29ydEZ1
bmN0aW9uR2V0dGVyID0gbnVtZXJpY1NvcnQ7CisgICAgICAgIHJlc3VsdHNQcm9wZXJ0eSA9ICdw
ZXJjZW50RmFpbGVkJzsKKyAgICB9IGVsc2UgeworICAgICAgICBzb3J0RnVuY3Rpb25HZXR0ZXIg
PSBhbHBoYW51bWVyaWNDb21wYXJlOworICAgICAgICByZXN1bHRzUHJvcGVydHkgPSBjb2x1bW47
CisgICAgfQorCisgICAgdGVzdHMuc29ydChzb3J0RnVuY3Rpb25HZXR0ZXIocmVzdWx0c1Byb3Bl
cnR5LCBvcmRlciA9PSBCQUNLV0FSRCkpOworfQorCisvLyBTb3J0cyBhIHNwYWNlIHNlcGFyYXRl
ZCBleHBlY3RhdGlvbnMgc3RyaW5nIGluIGFscGhhbnVtZXJpYyBvcmRlci4KKy8vIEBwYXJhbSB7
c3RyaW5nfSBzdHIgVGhlIGV4cGVjdGF0aW9ucyBzdHJpbmcuCisvLyBAcmV0dXJuIHtzdHJpbmd9
IFRoZSBzb3J0ZWQgc3RyaW5nLgorZnVuY3Rpb24gc29ydEV4cGVjdGF0aW9uc1N0cmluZyhzdHIp
Cit7CisgICAgcmV0dXJuIHN0ci5zcGxpdCgnICcpLnNvcnQoKS5qb2luKCcgJyk7Cit9CisKK2Z1
bmN0aW9uIGFkZFVwZGF0ZSh0ZXN0c05lZWRpbmdVcGRhdGUsIHRlc3QsIGJ1aWxkZXJOYW1lLCBt
aXNzaW5nLCBleHRyYSkKK3sKKyAgICBpZiAoIXRlc3RzTmVlZGluZ1VwZGF0ZVt0ZXN0XSkKKyAg
ICAgICAgdGVzdHNOZWVkaW5nVXBkYXRlW3Rlc3RdID0ge307CisKKyAgICB2YXIgYnVpbGRJbmZv
ID0gcGxhdGZvcm1BbmRCdWlsZFR5cGUoYnVpbGRlck5hbWUpOworICAgIHZhciBidWlsZGVyID0g
YnVpbGRJbmZvLnBsYXRmb3JtICsgJyAnICsgYnVpbGRJbmZvLmJ1aWxkVHlwZTsKKyAgICBpZiAo
IXRlc3RzTmVlZGluZ1VwZGF0ZVt0ZXN0XVtidWlsZGVyXSkKKyAgICAgICAgdGVzdHNOZWVkaW5n
VXBkYXRlW3Rlc3RdW2J1aWxkZXJdID0ge307CisKKyAgICBpZiAobWlzc2luZykKKyAgICAgICAg
dGVzdHNOZWVkaW5nVXBkYXRlW3Rlc3RdW2J1aWxkZXJdLm1pc3NpbmcgPSBzb3J0RXhwZWN0YXRp
b25zU3RyaW5nKG1pc3NpbmcpOworCisgICAgaWYgKGV4dHJhKQorICAgICAgICB0ZXN0c05lZWRp
bmdVcGRhdGVbdGVzdF1bYnVpbGRlcl0uZXh0cmEgPSBzb3J0RXhwZWN0YXRpb25zU3RyaW5nKGV4
dHJhKTsKK30KKworCisvLyBGcm9tIGEgc3RyaW5nIG9mIG1vZGlmaWVycywgcmV0dXJucyBhIHN0
cmluZyBvZiBtb2RpZmllcnMgdGhhdAorLy8gYXJlIGZvciByZWFsIHJlc3VsdCBjaGFuZ2VzLCBs
aWtlIFNMT1csIGFuZCBleGNsdWRlcyBtb2RpZmllcnMKKy8vIHRoYXQgc3BlY2lmaWN5IHRoaW5n
cyBsaWtlIHBsYXRmb3JtLCBidWlsZF90eXBlLCBidWcuCisvLyBAcGFyYW0ge3N0cmluZ30gbW9k
aWZpZXJTdHJpbmcgU3RyaW5nIGNvbnRhaW5pbmcgYWxsIG1vZGlmaWVycy4KKy8vIEByZXR1cm4g
e3N0cmluZ30gU3RyaW5nIGNvbnRhaW5pbmcgb25seSBtb2RpZmllcnMgdGhhdCBlZmZlY3QgdGhl
IHJlc3VsdHMuCitmdW5jdGlvbiByZWFsTW9kaWZpZXJzKG1vZGlmaWVyU3RyaW5nKQoreworICAg
IHZhciBtb2RpZmllcnMgPSBtb2RpZmllclN0cmluZy5zcGxpdCgnICcpOzsKKyAgICByZXR1cm4g
bW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbihtb2RpZmllcikgeworICAgICAgICByZXR1cm4gISht
b2RpZmllciBpbiBCVUlMRF9UWVBFUykgJiYgUExBVEZPUk1TLmluZGV4T2YobW9kaWZpZXIpID09
IC0xICYmICEobW9kaWZpZXIgaW4gUExBVEZPUk1fVU5JT05TKSAmJiAhc3RhcnRzV2l0aChtb2Rp
ZmllciwgJ0JVRycpOworICAgIH0pLmpvaW4oJyAnKTsKK30KKworZnVuY3Rpb24gZ2VuZXJhdGVQ
YWdlRm9yRXhwZWN0YXRpb25zVXBkYXRlKCkKK3sKKyAgICAvLyBBbHdheXMgc2hvdyBhbGwgcnVu
cyB3aGVuIGF1dG8tdXBkYXRpbmcgZXhwZWN0YXRpb25zLgorICAgIGlmICghZ19jdXJyZW50U3Rh
dGUuc2hvd0FsbFJ1bnMpCisgICAgICAgIHNldFF1ZXJ5UGFyYW1ldGVyKCdzaG93QWxsUnVucycs
IHRydWUpOworCisgICAgcHJvY2Vzc1Rlc3RSdW5zRm9yQWxsQnVpbGRlcnMoKTsKKyAgICB2YXIg
dGVzdHNOZWVkaW5nVXBkYXRlID0ge307CisgICAgZm9yICh2YXIgdGVzdCBpbiBnX3Rlc3RUb1Jl
c3VsdHNNYXApIHsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBnX3Rlc3RUb1Jlc3VsdHNNYXBbdGVz
dF07CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgdmFyIHRoaXNSZXN1bHQgPSByZXN1bHRzW2ldOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoIXRoaXNSZXN1bHQubWlzc2luZyAmJiAhdGhpc1Jlc3VsdC5leHRyYSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdmFyIGFsbFBhc3Nlc09y
Tm9EYXRhcyA9IHRoaXNSZXN1bHQucmF3UmVzdWx0cy5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0
dXJuIHhbMV0gIT0gIlAiICYmIHhbMV0gIT0gIk4iOyB9KS5sZW5ndGggPT0gMDsKKworICAgICAg
ICAgICAgaWYgKGFsbFBhc3Nlc09yTm9EYXRhcykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgYWRkVXBkYXRlKHRlc3RzTmVlZGluZ1VwZGF0ZSwgdGVzdCwgdGhpc1Jl
c3VsdC5idWlsZGVyLCB0aGlzUmVzdWx0Lm1pc3NpbmcsIHRoaXNSZXN1bHQuZXh0cmEpOworICAg
ICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIgYnVpbGRlciBpbiBnX2J1aWxkZXJzKSB7Cisg
ICAgICAgIHZhciB0ZXN0cyA9IGdfcGVyQnVpbGRlcldpdGhFeHBlY3RhdGlvbnNCdXROb0ZhaWx1
cmVzW2J1aWxkZXJdCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgIC8vIEFueXRoaW5nIGV4dHJhIGluIHRoaXMgY2FzZSBpcyB3aGF0
IGlzIGxpc3RlZCBpbiBleHBlY3RhdGlvbnMKKyAgICAgICAgICAgIC8vIHBsdXMgbW9kaWZpZXJz
IG90aGVyIHRoYW4gYnVnLCBwbGF0Zm9ybSwgYnVpbGQgdHlwZS4KKyAgICAgICAgICAgIHZhciBt
b2RpZmllcnMgPSByZWFsTW9kaWZpZXJzKHRlc3RzW2ldLm1vZGlmaWVycyk7CisgICAgICAgICAg
ICB2YXIgZXh0cmFzID0gdGVzdHNbaV0uZXhwZWN0YXRpb25zOworICAgICAgICAgICAgZXh0cmFz
ICs9IG1vZGlmaWVycyA/ICcgJyArIG1vZGlmaWVycyA6ICcnOworICAgICAgICAgICAgYWRkVXBk
YXRlKHRlc3RzTmVlZGluZ1VwZGF0ZSwgdGVzdHNbaV0udGVzdCwgYnVpbGRlciwgbnVsbCwgZXh0
cmFzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEdldCB0aGUga2V5cyBpbiBhbHBoYWJl
dGljYWwgb3JkZXIsIHNvIGl0IGlzIGVhc3kgdG8gcHJvY2VzcyBncm91cHMKKyAgICAvLyBvZiB0
ZXN0cy4KKyAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRlc3RzTmVlZGluZ1VwZGF0ZSkuc29y
dCgpOworICAgIHNob3dVcGRhdGVJbmZvRm9yVGVzdCh0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMp
OworfQorCisvLyBTaG93IHRoZSB0ZXN0IHJlc3VsdHMgYW5kIHRoZSBqc29uIGZvciBkaWZmZXJp
bmcgZXhwZWN0YXRpb25zLCBhbmQKKy8vIGFsbG93IHRoZSB1c2VyIHRvIGluY2x1ZGUgb3IgZXhj
bHVkZSB0aGlzIHVwZGF0ZS4KKy8vCisvLyBAcGFyYW0ge09iamVjdH0gdGVzdHNOZWVkaW5nVXBk
YXRlIFRlc3RzIHRoYXQgbmVlZCB1cGRhdGluZy4KKy8vIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59
IGtleXMgS2V5cyBpbnRvIHRoZSB0ZXN0TmVlZGluZ1VwZGF0ZSBvYmplY3QuCitmdW5jdGlvbiBz
aG93VXBkYXRlSW5mb0ZvclRlc3QodGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlzKQoreworICAgIHZh
ciB0ZXN0ID0ga2V5c1tnX2N1cnJlbnRTdGF0ZS51cGRhdGVJbmRleF07CisgICAgZG9jdW1lbnQu
Ym9keS5pbm5lckhUTUwgPSAnJzsKKworICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgRE9NIGNyZWF0
aW9uIGxlc3MgdmVyYm9zZS4KKyAgICB2YXIgaW5kZXggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKTsKKyAgICBpbmRleC5zdHlsZS5jc3NGbG9hdCA9ICdyaWdodCc7CisgICAgaW5kZXgu
dGV4dENvbnRlbnQgPSAoZ19jdXJyZW50U3RhdGUudXBkYXRlSW5kZXggKyAxKSArICcgb2YgJyAr
IGtleXMubGVuZ3RoICsgJyB0ZXN0cyc7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChp
bmRleCk7CisKKyAgICB2YXIgYnV0dG9uUmVnaW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7CisgICAgdmFyIGluY2x1ZGVCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1
dCcpOworICAgIGluY2x1ZGVCdG4udHlwZSA9ICdidXR0b24nOworICAgIGluY2x1ZGVCdG4udmFs
dWUgPSAnaW5jbHVkZSBzZWxlY3RlZCc7CisgICAgaW5jbHVkZUJ0bi5hZGRFdmVudExpc3RlbmVy
KCdjbGljaycsIHBhcnRpYWwoaGFuZGxlVXBkYXRlLCB0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMp
LCBmYWxzZSk7CisgICAgYnV0dG9uUmVnaW9uLmFwcGVuZENoaWxkKGluY2x1ZGVCdG4pOworCisg
ICAgdmFyIHByZXZpb3VzQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKKyAg
ICBwcmV2aW91c0J0bi50eXBlID0gJ2J1dHRvbic7CisgICAgcHJldmlvdXNCdG4udmFsdWUgPSAn
cHJldmlvdXMnOworICAgIHByZXZpb3VzQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywKKyAg
ICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgc2V0VXBkYXRlSW5kZXgoZ19jdXJyZW50U3Rh
dGUudXBkYXRlSW5kZXggLSAxLCB0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpOworICAgICAgICB9
LAorICAgICAgICBmYWxzZSk7CisgICAgYnV0dG9uUmVnaW9uLmFwcGVuZENoaWxkKHByZXZpb3Vz
QnRuKTsKKworICAgIHZhciBuZXh0QnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQn
KTsKKyAgICBuZXh0QnRuLnR5cGUgPSAnYnV0dG9uJzsKKyAgICBuZXh0QnRuLnZhbHVlID0gJ25l
eHQnOworICAgIG5leHRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBwYXJ0aWFsKG5leHRV
cGRhdGUsIHRlc3RzTmVlZGluZ1VwZGF0ZSwga2V5cyksIGZhbHNlKTsKKyAgICBidXR0b25SZWdp
b24uYXBwZW5kQ2hpbGQobmV4dEJ0bik7CisKKyAgICB2YXIgZG9uZUJ0biA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgZG9uZUJ0bi50eXBlID0gJ2J1dHRvbic7CisgICAg
ZG9uZUJ0bi52YWx1ZSA9ICdkb25lJzsKKyAgICBkb25lQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2Ns
aWNrJywgZmluaXNoVXBkYXRlLCBmYWxzZSk7CisgICAgYnV0dG9uUmVnaW9uLmFwcGVuZENoaWxk
KGRvbmVCdG4pOworCisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChidXR0b25SZWdpb24p
OworCisgICAgdmFyIHVwZGF0ZXMgPSB0ZXN0c05lZWRpbmdVcGRhdGVbdGVzdF07CisgICAgdmFy
IGNoZWNrYm94ZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBmb3IgKHZh
ciBidWlsZGVyIGluIHVwZGF0ZXMpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgY2hlY2tib3ggZm9y
IGVhY2ggYnVpbGRlci4KKyAgICAgICAgdmFyIGNoZWNrYm94UmVnaW9uID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIHZhciBjaGVja2JveCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgICAgIGNoZWNrYm94LnR5cGUgPSAnY2hlY2tib3gnOwor
ICAgICAgICBjaGVja2JveC5pZCA9IGJ1aWxkZXI7CisgICAgICAgIGNoZWNrYm94LmNoZWNrZWQg
PSB0cnVlOworICAgICAgICBjaGVja2JveFJlZ2lvbi5hcHBlbmRDaGlsZChjaGVja2JveCk7Cisg
ICAgICAgIGNoZWNrYm94UmVnaW9uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KGJ1aWxkZXIgKyAnIDogJyArIEpTT04uc3RyaW5naWZ5KHVwZGF0ZXNbYnVpbGRlcl0pKSk7Cisg
ICAgICAgIGNoZWNrYm94ZXMuYXBwZW5kQ2hpbGQoY2hlY2tib3hSZWdpb24pOworICAgIH0KKyAg
ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNoZWNrYm94ZXMpOworCisgICAgdmFyIGRpdiA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIGRpdi5pbm5lckhUTUwgPSBodG1s
Rm9ySW5kaXZpZHVsVGVzdE9uQWxsQnVpbGRlcnModGVzdCk7CisgICAgZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChkaXYpOworICAgIGFwcGVuZEV4cGVjdGF0aW9ucygpOworfQorCisKKy8vIFdo
ZW4gdGhlIHVzZXIgaGFzIGZpbmlzaGVkIHNlbGVjdGluZyBleHBlY3RhdGlvbnMgdG8gdXBkYXRl
LCBwcm92aWRlIHRoZW0KKy8vIHdpdGgganNvbiB0byBjb3B5IG92ZXIuCitmdW5jdGlvbiBmaW5p
c2hVcGRhdGUoKQoreworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJ1RoZSBuZXh0IHN0
ZXAgaXMgdG8gY29weSB0aGUgb3V0cHV0IGJlbG93ICcgKworICAgICAgICAnaW50byBhIGxvY2Fs
IGZpbGUgYW5kIHNhdmUgaXQuICBUaGVuLCBydW48YnI+PGNvZGU+cHl0aG9uICcgKworICAgICAg
ICAnc3JjL3dlYmtpdC90b29scy9sYXlvdXRfdGVzdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Vw
ZGF0ZV9leHBlY3RhdCcgKworICAgICAgICAnaW9uc19mcm9tX2Rhc2hib2FyZC5weSBwYXRoL3Rv
L2xvY2FsL2ZpbGU8L2NvZGU+PGJyPmluIG9yZGVyIHRvICcgKworICAgICAgICAndXBkYXRlIHRo
ZSBleHBlY3RhdGlvbnMgZmlsZS48YnI+PHRleHRhcmVhIGlkPSJyZXN1bHRzIiAnKworICAgICAg
ICAnc3R5bGU9IndpZHRoOjYwMHB4O2hlaWdodDo2MDBweDsiPiAnICsKKyAgICAgICAgSlNPTi5z
dHJpbmdpZnkoZ19jb25maXJtZWRUZXN0cykgKyAnPC90ZXh0YXJlYT4nOworICAgIHJlc3VsdHMu
Zm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnU2VsZWN0QWxsJyk7Cit9CisKKy8v
IEhhbmRsZSB1c2VyIGNsaWNrIG9uICJpbmNsdWRlIHNlbGVjdGVkIiBidXR0b24uCisvLyBJbmNs
dWRlcyB0aGUgdGVzdHMgdGhhdCBhcmUgc2VsZWN0ZWQgYW5kIGV4Y2x1ZGUgdGhlIHJlc3QuCisv
LyBAcGFyYW0ge09iamVjdH0gdGVzdHNOZWVkaW5nVXBkYXRlIFRlc3RzIHRoYXQgbmVlZCB1cGRh
dGluZy4KKy8vIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGtleXMgS2V5cyBpbnRvIHRoZSB0ZXN0
TmVlZGluZ1VwZGF0ZSBvYmplY3QuCitmdW5jdGlvbiBoYW5kbGVVcGRhdGUodGVzdHNOZWVkaW5n
VXBkYXRlLCBrZXlzKQoreworICAgIHZhciB0ZXN0ID0ga2V5c1tnX2N1cnJlbnRTdGF0ZS51cGRh
dGVJbmRleF07CisgICAgdmFyIHVwZGF0ZXMgPSB0ZXN0c05lZWRpbmdVcGRhdGVbdGVzdF07Cisg
ICAgZm9yICh2YXIgYnVpbGRlciBpbiB1cGRhdGVzKSB7CisgICAgICAgIC8vIEFkZCBpbmNsdWRl
ZCB0ZXN0cywgYW5kIGRlbGV0ZSBleGNsdWRlZCB0ZXN0cyBpZgorICAgICAgICAvLyB0aGV5IHdl
cmUgcHJldmlvdXNseSBpbmNsdWRlZC4KKyAgICAgICAgaWYgKCQoYnVpbGRlcikuY2hlY2tlZCkg
eworICAgICAgICAgICAgaWYgKCFnX2NvbmZpcm1lZFRlc3RzW3Rlc3RdKQorICAgICAgICAgICAg
ICAgIGdfY29uZmlybWVkVGVzdHNbdGVzdF0gPSB7fTsKKyAgICAgICAgICAgIGdfY29uZmlybWVk
VGVzdHNbdGVzdF1bYnVpbGRlcl0gPSB0ZXN0c05lZWRpbmdVcGRhdGVbdGVzdF1bYnVpbGRlcl07
CisgICAgICAgIH0gZWxzZSBpZiAoZ19jb25maXJtZWRUZXN0c1t0ZXN0XSAmJiBnX2NvbmZpcm1l
ZFRlc3RzW3Rlc3RdW2J1aWxkZXJdKSB7CisgICAgICAgICAgICBkZWxldGUgZ19jb25maXJtZWRU
ZXN0c1t0ZXN0XVtidWlsZGVyXTsKKyAgICAgICAgICAgIGlmICghT2JqZWN0LmtleXMoZ19jb25m
aXJtZWRUZXN0c1t0ZXN0XSkubGVuZ3RoKQorICAgICAgICAgICAgICAgIGRlbGV0ZSBnX2NvbmZp
cm1lZFRlc3RzW3Rlc3RdOworICAgICAgICB9CisgICAgfQorICAgIG5leHRVcGRhdGUodGVzdHNO
ZWVkaW5nVXBkYXRlLCBrZXlzKTsKK30KKworCisvLyBNb3ZlIHRvIHRoZSBuZXh0IGl0ZW0gdG8g
dXBkYXRlLgorLy8gQHBhcmFtIHtPYmplY3R9IHRlc3RzTmVlZGluZ1VwZGF0ZSBUZXN0cyB0aGF0
IG5lZWQgdXBkYXRpbmcuCisvLyBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBrZXlzIEtleXMgaW50
byB0aGUgdGVzdE5lZWRpbmdVcGRhdGUgb2JqZWN0LgorZnVuY3Rpb24gbmV4dFVwZGF0ZSh0ZXN0
c05lZWRpbmdVcGRhdGUsIGtleXMpCit7CisgICAgc2V0VXBkYXRlSW5kZXgoZ19jdXJyZW50U3Rh
dGUudXBkYXRlSW5kZXggKyAxLCB0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpOworfQorCisKKy8v
IEFkdmFuY2UgdGhlIGluZGV4IHdlIGFyZSB1cGRhdGluZyBhdC4gIElmIHdlIHdhbGsgb3ZlciB0
aGUgZW5kCisvLyBvciBiZWdpbm5pbmcsIGp1c3QgbG9vcC4KKy8vIEBwYXJhbSB7c3RyaW5nfSBu
ZXdJbmRleCBUaGUgaW5kZXggaW50byB0aGUga2V5cyB0byBtb3ZlIHRvLgorLy8gQHBhcmFtIHtP
YmplY3R9IHRlc3RzTmVlZGluZ1VwZGF0ZSBUZXN0cyB0aGF0IG5lZWQgdXBkYXRpbmcuCisvLyBA
cGFyYW0ge0FycmF5LjxzdHJpbmc+fSBrZXlzIEtleXMgaW50byB0aGUgdGVzdE5lZWRpbmdVcGRh
dGUgb2JqZWN0LgorZnVuY3Rpb24gc2V0VXBkYXRlSW5kZXgobmV3SW5kZXgsIHRlc3RzTmVlZGlu
Z1VwZGF0ZSwga2V5cykKK3sKKyAgICBpZiAobmV3SW5kZXggPT0gLTEpCisgICAgICAgIG5ld0lu
ZGV4ID0ga2V5cy5sZW5ndGggLSAxOworICAgIGVsc2UgaWYgKG5ld0luZGV4ID09IGtleXMubGVu
Z3RoKQorICAgICAgICBuZXdJbmRleCA9IDA7CisgICAgc2V0UXVlcnlQYXJhbWV0ZXIoInVwZGF0
ZUluZGV4IiwgbmV3SW5kZXgpOworICAgIHNob3dVcGRhdGVJbmZvRm9yVGVzdCh0ZXN0c05lZWRp
bmdVcGRhdGUsIGtleXMpOworfQorCitmdW5jdGlvbiBodG1sRm9ySW5kaXZpZHVsVGVzdE9uQWxs
QnVpbGRlcnModGVzdCkKK3sKKyAgICBwcm9jZXNzVGVzdFJ1bnNGb3JBbGxCdWlsZGVycygpOwor
CisgICAgdmFyIHRlc3RSZXN1bHRzID0gZ190ZXN0VG9SZXN1bHRzTWFwW3Rlc3RdOworICAgIHZh
ciBtYXN0ZXI7CisgICAgdmFyIGh0bWwgPSAnJzsKKyAgICBpZiAoaXNMYXlvdXRUZXN0UmVzdWx0
cygpKSB7CisgICAgICAgIHZhciB0cmFjVVJMID0gVEVTVF9VUkxfQkFTRV9QQVRIX1RSQUMgKyB0
ZXN0CisgICAgICAgIGh0bWwgKz0gJzxoMj4nICsgbGlua0hUTUxUb09wZW5XaW5kb3codHJhY1VS
TCwgdGVzdCkgKyAnPC9oMj4nOworICAgIH0gZWxzZQorICAgICAgICBodG1sICs9ICc8aDI+JyAr
IHRlc3QgKyAnPC9oMj4nOworCisgICAgaWYgKHRlc3RSZXN1bHRzICYmIHRlc3RSZXN1bHRzLmxl
bmd0aCkgeworICAgICAgICBtYXN0ZXIgPSBidWlsZGVyTWFzdGVyKHRlc3RSZXN1bHRzWzBdLmJ1
aWxkZXIpOworCisgICAgICAgIGh0bWwgKz0nPGRpdj48Yj5JZiBhIGJ1aWxkZXIgaXMgbm90IGxp
c3RlZCwgdGhhdCBtZWFucyB0aGUgYnVpbGRlciAnICsKKyAgICAgICAgICAgICdkb2VzIG5vdCBy
dW4gdGhhdCB0ZXN0IChlLmcuIGl0IGlzIHNraXBwZWQpIG9yIGFsbCBydW5zIG9mIHRoZSAnICsK
KyAgICAgICAgICAgICd0ZXN0IHBhc3NlZC48L2I+PC9kaXY+JzsKKworICAgICAgICBmb3IgKHZh
ciBqID0gMDsgaiA8IHRlc3RSZXN1bHRzLmxlbmd0aDsgaisrKQorICAgICAgICAgICAgaHRtbCAr
PSBodG1sRm9yU2luZ2xlVGVzdFJvdyh0ZXN0UmVzdWx0c1tqXSk7CisgICAgICAgIGh0bWwgPSBo
dG1sRm9yVGVzdFRhYmxlKGh0bWwpOworICAgIH0gZWxzZSB7CisgICAgICAgIGh0bWwgKz0gJzxk
aXYgY2xhc3M9Im5vdC1mb3VuZCI+VGVzdCBub3QgZm91bmQuIEVpdGhlciBpdCBkb2VzICcgKwor
ICAgICAgICAgICAgJ25vdCBleGlzdCwgaXMgc2tpcHBlZCBvciBwYXNzZXMgb24gYWxsIHBsYXRm
b3Jtcy48L2Rpdj4nOworICAgIH0KKworICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ZXhwZWN0YXRp
b25zIHRlc3Q9JyArIHRlc3QgKyAnPjxkaXY+JyArCisgICAgICAgIGxpbmtIVE1MVG9Ub2dnbGVT
dGF0ZSgnc2hvd0V4cGVjdGF0aW9ucycsICdyZXN1bHRzJykKKworICAgIGlmIChpc0xheW91dFRl
c3RSZXN1bHRzKCkpIHsKKyAgICAgICAgaHRtbCArPSAnIHwgJyArIGxpbmtIVE1MVG9Ub2dnbGVT
dGF0ZSgnc2hvd0xhcmdlRXhwZWN0YXRpb25zJywgJ2xhcmdlIHRodW1ibmFpbHMnKTsKKyAgICAg
ICAgaWYgKG1hc3RlciA9PSBXRUJLSVRfQlVJTERFUl9NQVNURVIpIHsKKyAgICAgICAgICAgIHZh
ciByZXZpc2lvbiA9IGdfY3VycmVudFN0YXRlLnJldmlzaW9uIHx8ICcnOworICAgICAgICAgICAg
aHRtbCArPSAnPGZvcm0gb25zdWJtaXQ9InNldFF1ZXJ5UGFyYW1ldGVyKFwncmV2aXNpb25cJywg
cmV2aXNpb24udmFsdWUpOycgKworICAgICAgICAgICAgICAgICdyZXR1cm4gZmFsc2U7Ij5TaG93
IHJlc3VsdHMgZm9yIFdlYktpdCByZXZpc2lvbjogJyArCisgICAgICAgICAgICAgICAgJzxpbnB1
dCBuYW1lPXJldmlzaW9uIHBsYWNlaG9sZGVyPSJlLmcuIDY1NTQwIiB2YWx1ZT0iJyArIHJldmlz
aW9uICsKKyAgICAgICAgICAgICAgICAnIiBpZD1yZXZpc2lvbi1pbnB1dD48L2Zvcm0+JzsKKyAg
ICAgIH0gZWxzZQorICAgICAgICBodG1sICs9ICcgfCA8Yj5Pbmx5IHNob3dzIGFjdHVhbCByZXN1
bHRzL2RpZmZzIGZyb20gdGhlIG1vc3QgcmVjZW50ICpmYWlsdXJlKiBvbiBlYWNoIGJvdC48L2I+
JzsKKyAgICB9IGVsc2UgeworICAgICAgaHRtbCArPSAnIHwgPHNwYW4+UmVzdWx0cyBoZWlnaHQ6
PGlucHV0ICcgKworICAgICAgICAgICdvbmNoYW5nZT0ic2V0UXVlcnlQYXJhbWV0ZXIoXCdyZXN1
bHRzSGVpZ2h0XCcsdGhpcy52YWx1ZSkiIHZhbHVlPSInICsKKyAgICAgICAgICBnX2N1cnJlbnRT
dGF0ZS5yZXN1bHRzSGVpZ2h0ICsgJyIgc3R5bGU9IndpZHRoOjIuNWVtIj5weDwvc3Bhbj4nOwor
ICAgIH0KKyAgICBodG1sICs9ICc8L2Rpdj48L2Rpdj4nOworICAgIHJldHVybiBodG1sOworfQor
CitmdW5jdGlvbiBnZXRFeHBlY3RhdGlvbnNDb250YWluZXIoZXhwZWN0YXRpb25zQ29udGFpbmVy
cywgcGFyZW50Q29udGFpbmVyLCBleHBlY3RhdGlvbnNUeXBlKQoreworICAgIGlmICghZXhwZWN0
YXRpb25zQ29udGFpbmVyc1tleHBlY3RhdGlvbnNUeXBlXSkgeworICAgICAgICB2YXIgY29udGFp
bmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIGNvbnRhaW5lci5j
bGFzc05hbWUgPSAnZXhwZWN0YXRpb25zLWNvbnRhaW5lcic7CisgICAgICAgIHBhcmVudENvbnRh
aW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpOworICAgICAgICBleHBlY3RhdGlvbnNDb250YWlu
ZXJzW2V4cGVjdGF0aW9uc1R5cGVdID0gY29udGFpbmVyOworICAgIH0KKyAgICByZXR1cm4gZXhw
ZWN0YXRpb25zQ29udGFpbmVyc1tleHBlY3RhdGlvbnNUeXBlXTsKK30KKworZnVuY3Rpb24gZW5z
dXJlVHJhaWxpbmdTbGFzaChwYXRoKQoreworICAgIGlmIChwYXRoLm1hdGNoKC9cLyQvKSkKKyAg
ICAgICAgcmV0dXJuIHBhdGg7CisgICAgcmV0dXJuIHBhdGggKyAnLyc7Cit9CisKK2Z1bmN0aW9u
IG1heWJlQWRkUG5nQ2hlY2tzdW0oZXhwZWN0YXRpb25EaXYsIHBuZ1VybCkKK3sKKyAgICAvLyBw
bmdVcmwgZ2V0cyBzZXJ2ZWQgZnJvbSB0aGUgYnJvd3NlciBjYWNoZSBzaW5jZSB3ZSBqdXN0IGxv
YWRlZCBpdCBpbiBhbgorICAgIC8vIDxpbWc+IHRhZy4KKyAgICByZXF1ZXN0KHBuZ1VybCwKKyAg
ICAgICAgZnVuY3Rpb24oeGhyKSB7CisgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBmaXJzdCAy
ayBvZiB0aGUgcmVzcG9uc2UgdG8gYSBieXRlIHN0cmluZy4KKyAgICAgICAgICAgIHZhciBieXRl
cyA9IHhoci5yZXNwb25zZVRleHQuc3Vic3RyaW5nKDAsIDIwNDgpOworICAgICAgICAgICAgZm9y
ICh2YXIgcG9zaXRpb24gPSAwOyBwb3NpdGlvbiA8IGJ5dGVzLmxlbmd0aDsgKytwb3NpdGlvbikK
KyAgICAgICAgICAgICAgICBieXRlc1twb3NpdGlvbl0gPSBieXRlc1twb3NpdGlvbl0gJiAweGZm
OworCisgICAgICAgICAgICAvLyBMb29rIGZvciB0aGUgY29tbWVudC4KKyAgICAgICAgICAgIHZh
ciBjb21tZW50S2V5ID0gJ3RFWHRjaGVja3N1bVx4MDAnOworICAgICAgICAgICAgdmFyIGNoZWNr
c3VtUG9zaXRpb24gPSBieXRlcy5pbmRleE9mKGNvbW1lbnRLZXkpOworICAgICAgICAgICAgaWYg
KGNoZWNrc3VtUG9zaXRpb24gPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICB2YXIgY2hlY2tzdW0gPSBieXRlcy5zdWJzdHJpbmcoY2hlY2tzdW1Qb3NpdGlvbiAr
IGNvbW1lbnRLZXkubGVuZ3RoLCBjaGVja3N1bVBvc2l0aW9uICsgY29tbWVudEtleS5sZW5ndGgg
KyAzMik7CisgICAgICAgICAgICB2YXIgY2hlY2tzdW1Db250YWluZXIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdzcGFuJyk7CisgICAgICAgICAgICBjaGVja3N1bUNvbnRhaW5lci5pbm5lclRl
eHQgPSAnRW1iZWRkZWQgY2hlY2tzdW06ICcgKyBjaGVja3N1bTsKKyAgICAgICAgICAgIGNoZWNr
c3VtQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncG5nY2hlY2tzdW0nKTsKKyAgICAg
ICAgICAgIGV4cGVjdGF0aW9uRGl2LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoY2hlY2tzdW1Db250
YWluZXIpOworICAgICAgICB9LAorICAgICAgICBmdW5jdGlvbih4aHIpIHt9LAorICAgICAgICB0
cnVlKTsKK30KKworLy8gQWRkcyBhIHNwZWNpZmljIGV4cGVjdGF0aW9uLiBJZiBpdCdzIGFuIGlt
YWdlLCBpdCdzIG9ubHkgYWRkZWQgb24gdGhlCisvLyBpbWFnZSdzIG9ubG9hZCBoYW5kbGVyLiBJ
ZiBpdCdzIGEgdGV4dCBmaWxlLCB0aGVuIGEgc2NyaXB0IHRhZyBpcyBhcHBlbmRlZAorLy8gYXMg
YSBoYWNrIHRvIHNlZSBpZiB0aGUgZmlsZSA0MDRzIChuZWNlc3Nhcnkgc2luY2UgaXQncyBjcm9z
cy1kb21haW4pLgorLy8gT25jZSBhbGwgdGhlIGV4cGVjdGF0aW9ucyBmb3IgYSBzcGVjaWZpYyB0
eXBlIGhhdmUgbG9hZGVkIG9yIGVycm9yZWQKKy8vIChlLmcuIGFsbCB0aGUgdGV4dCByZXN1bHRz
KSwgdGhlbiB3ZSBnbyB0aHJvdWdoIGFuZCBpZGVudGlmeSB3aGljaCBwbGF0Zm9ybQorLy8gdXNl
cyB3aGljaCBleHBlY3RhdGlvbi4KKy8vCisvLyBAcGFyYW0ge09iamVjdH0gZXhwZWN0YXRpb25z
Q29udGFpbmVycyBNYXAgZnJvbSBleHBlY3RhdGlvbnMgdHlwZSB0bworLy8gICAgIGNvbnRhaW5l
ciBESVYuCisvLyBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudENvbnRhaW5lciBDb250YWluZXIgZWxl
bWVudCBmb3IKKy8vICAgICBleHBlY3RhdGlvbnNDb250YWluZXIgZGl2cy4KKy8vIEBwYXJhbSB7
c3RyaW5nfSBwbGF0Zm9ybSBQbGF0Zm9ybSBzdHJpbmcuIEVtcHR5IHN0cmluZyBmb3Igbm9uLXBs
YXRmb3JtCisvLyAgICAgc3BlY2lmaWMgZXhwZWN0YXRpb25zLgorLy8gQHBhcmFtIHtzdHJpbmd9
IHBhdGggUmVsYXRpdmUgcGF0aCB0byB0aGUgZXhwZWN0YXRpb24uCisvLyBAcGFyYW0ge3N0cmlu
Z30gYmFzZSBCYXNlIHBhdGggZm9yIHRoZSBleHBlY3RhdGlvbiBVUkwuCisvLyBAcGFyYW0ge3N0
cmluZ30gb3B0X2J1aWxkZXIgQnVpbGRlciB3aG9zZSBhY3R1YWwgcmVzdWx0cyB0aGlzIGV4cGVj
dGF0aW9uCisvLyAgICAgcG9pbnRzIHRvLgorZnVuY3Rpb24gYWRkRXhwZWN0YXRpb25JdGVtKGV4
cGVjdGF0aW9uc0NvbnRhaW5lcnMsIHBhcmVudENvbnRhaW5lciwgcGxhdGZvcm0sIHBhdGgsIGJh
c2UsIG9wdF9idWlsZGVyKQoreworICAgIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKQorICAg
IHZhciBmaWxlRXh0ZW5zaW9uID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07CisgICAgaWYgKGZp
bGVFeHRlbnNpb24gPT0gJ2h0bWwnKQorICAgICAgICBmaWxlRXh0ZW5zaW9uID0gJ3R4dCc7Cisg
ICAgCisgICAgdmFyIGNvbnRhaW5lciA9IGdldEV4cGVjdGF0aW9uc0NvbnRhaW5lcihleHBlY3Rh
dGlvbnNDb250YWluZXJzLCBwYXJlbnRDb250YWluZXIsIGZpbGVFeHRlbnNpb24pOworICAgIHZh
ciBpc0ltYWdlID0gcGF0aC5tYXRjaCgvXC5wbmckLyk7CisKKyAgICAvLyBGSVhNRTogU3RvcCB1
c2luZyBzY3JpcHQgdGFncyBvbmNlIGFsbCB0aGUgcGxhY2VzIHdlIHB1bGwgZnJvbSBzdXBwb3J0
IENPUlMuCisgICAgdmFyIHBsYXRmb3JtUGFydCA9IHBsYXRmb3JtID8gZW5zdXJlVHJhaWxpbmdT
bGFzaChwbGF0Zm9ybSkgOiAnJzsKKworICAgIHZhciBjaGlsZENvbnRhaW5lciA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKKyAgICBjaGlsZENvbnRhaW5lci5jbGFzc05hbWUgPSAn
dW5sb2FkZWQnOworCisgICAgdmFyIGFwcGVuZEV4cGVjdGF0aW9uc0l0ZW0gPSBmdW5jdGlvbihp
dGVtKSB7CisgICAgICAgIGNoaWxkQ29udGFpbmVyLmFwcGVuZENoaWxkKGV4cGVjdGF0aW9uc1Rp
dGxlKHBsYXRmb3JtLCBwYXRoLCBvcHRfYnVpbGRlciB8fCAnJykpOworICAgICAgICBjaGlsZENv
bnRhaW5lci5jbGFzc05hbWUgPSAnZXhwZWN0YXRpb25zLWl0ZW0nOworICAgICAgICBpdGVtLmNs
YXNzTmFtZSA9ICdleHBlY3RhdGlvbiAnICsgZmlsZUV4dGVuc2lvbjsKKyAgICAgICAgaWYgKGdf
Y3VycmVudFN0YXRlLnNob3dMYXJnZUV4cGVjdGF0aW9ucykKKyAgICAgICAgICAgIGl0ZW0uY2xh
c3NOYW1lICs9ICcgbGFyZ2UnOworICAgICAgICBjaGlsZENvbnRhaW5lci5hcHBlbmRDaGlsZChp
dGVtKTsKKyAgICAgICAgaGFuZGxlRmluaXNoZWRMb2FkaW5nRXhwZWN0YXRpb25zKGNvbnRhaW5l
cik7CisgICAgfTsKKworICAgIHZhciB1cmwgPSBiYXNlICsgcGxhdGZvcm1QYXJ0ICsgcGF0aDsK
KyAgICBpZiAoaXNJbWFnZSB8fCAhc3RhcnRzV2l0aChiYXNlLCAnaHR0cDovL3N2bi53ZWJraXQu
b3JnJykpIHsKKyAgICAgICAgdmFyIGR1bW15Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
aXNJbWFnZSA/ICdpbWcnIDogJ3NjcmlwdCcpOworICAgICAgICBkdW1teU5vZGUuc3JjID0gdXJs
OworICAgICAgICBkdW1teU5vZGUub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2
YXIgaXRlbTsKKyAgICAgICAgICAgIGlmIChpc0ltYWdlKSB7CisgICAgICAgICAgICAgICAgaXRl
bSA9IGR1bW15Tm9kZTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnRzV2l0aChiYXNlLCAnaHR0
cDovL3N2bi53ZWJraXQub3JnJykpCisgICAgICAgICAgICAgICAgICAgIG1heWJlQWRkUG5nQ2hl
Y2tzdW0oaXRlbSwgdXJsKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
aXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworICAgICAgICAgICAgICAg
IGl0ZW0uc3JjID0gdXJsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXBwZW5kRXhwZWN0
YXRpb25zSXRlbShpdGVtKTsKKyAgICAgICAgfQorICAgICAgICBkdW1teU5vZGUub25lcnJvciA9
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgY2hpbGRDb250YWluZXIucGFyZW50Tm9kZS5yZW1v
dmVDaGlsZChjaGlsZENvbnRhaW5lcik7CisgICAgICAgICAgICBoYW5kbGVGaW5pc2hlZExvYWRp
bmdFeHBlY3RhdGlvbnMoY29udGFpbmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFwcGVu
ZCBzY3JpcHQgZWxlbWVudHMgbm93IHNvIHRoYXQgdGhleSBsb2FkLiBJbWFnZXMgbG9hZCB3aXRo
b3V0IGJlaW5nCisgICAgICAgIC8vIGFwcGVuZGVkIHRvIHRoZSBET00uCisgICAgICAgIGlmICgh
aXNJbWFnZSkKKyAgICAgICAgICAgIGNoaWxkQ29udGFpbmVyLmFwcGVuZENoaWxkKGR1bW15Tm9k
ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVxdWVzdCh1cmwsCisgICAgICAgICAgICBmdW5j
dGlvbih4aHIpIHsKKyAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3ByZScpOworICAgICAgICAgICAgICAgIGl0ZW0uaW5uZXJUZXh0ID0geGhyLnJlc3Bv
bnNlVGV4dDsKKyAgICAgICAgICAgICAgICBhcHBlbmRFeHBlY3RhdGlvbnNJdGVtKGl0ZW0pOwor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGZ1bmN0aW9uKHhocikgey8qIERvIG5vdGhpbmcg
b24gZXJyb3JzIHNpbmNlIHRoZXkncmUgZXhwZWN0ZWQgKi99KTsKKyAgICB9CisKKyAgICBjb250
YWluZXIuYXBwZW5kQ2hpbGQoY2hpbGRDb250YWluZXIpOworfQorCisKKy8vIElkZW50aWZpZXMg
d2hpY2ggZXhwZWN0YXRpb25zIGFyZSB1c2VkIG9uIHdoaWNoIHBsYXRmb3JtIG9uY2UgYWxsIHRo
ZQorLy8gZXhwZWN0YXRpb25zIG9mIGEgZ2l2ZW4gdHlwZSBoYXZlIGxvYWRlZCAoZS5nLiB0aGUg
Y29udGFpbmVyIGZvciBwbmcKKy8vIGV4cGVjdGF0aW9ucyBmb3IgdGhpcyB0ZXN0IGhhZCBubyBj
aGlsZCBlbGVtZW50cyB3aXRoIHRoZSBjbGFzcworLy8gInVubG9hZGVkIikuCisvLworLy8gQHBh
cmFtIHtzdHJpbmd9IGNvbnRhaW5lciBFbGVtZW50IGNvbnRhaW5pbmcgdGhlIGV4cGVjdGF0aW9u
cyBmb3IgYSBnaXZlbgorLy8gICAgIHRlc3QgYW5kIGEgZ2l2ZW4gdHlwZSAoZS5nLiBwbmcpLgor
ZnVuY3Rpb24gaGFuZGxlRmluaXNoZWRMb2FkaW5nRXhwZWN0YXRpb25zKGNvbnRhaW5lcikKK3sK
KyAgICBpZiAoY29udGFpbmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3VubG9hZGVkJykubGVu
Z3RoKQorICAgICAgICByZXR1cm47CisKKyAgICB2YXIgdGl0bGVzID0gY29udGFpbmVyLmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUoJ2V4cGVjdGF0aW9ucy10aXRsZScpOworICAgIGZvciAodmFyIHBs
YXRmb3JtIGluIGdfZmFsbGJhY2tzTWFwKSB7CisgICAgICAgIHZhciBmYWxsYmFja3MgPSBnX2Zh
bGxiYWNrc01hcFtwbGF0Zm9ybV07CisgICAgICAgIHZhciB3aW5uZXIgPSBudWxsOworICAgICAg
ICB2YXIgd2lubmluZ0luZGV4ID0gLTE7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGl0
bGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgdGl0bGUgPSB0aXRsZXNbaV07CisK
KyAgICAgICAgICAgIGlmICghd2lubmVyICYmIHRpdGxlLnBsYXRmb3JtID09ICIiKSB7CisgICAg
ICAgICAgICAgICAgd2lubmVyID0gdGl0bGU7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciByYXdQbGF0Zm9ybSA9IHRpdGxlLnBsYXRm
b3JtICYmIHRpdGxlLnBsYXRmb3JtLnJlcGxhY2UoJ3BsYXRmb3JtLycsICcnKTsKKyAgICAgICAg
ICAgIGZvciAodmFyIGogPSAwOyBqIDwgZmFsbGJhY2tzLmxlbmd0aDsgaisrKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCh3aW5uaW5nSW5kZXggPT0gLTEgfHwgd2lubmluZ0luZGV4ID4gaikgJiYg
cmF3UGxhdGZvcm0gPT0gZmFsbGJhY2tzW2pdKSB7CisgICAgICAgICAgICAgICAgICAgIHdpbm5p
bmdJbmRleCA9IGo7CisgICAgICAgICAgICAgICAgICAgIHdpbm5lciA9IHRpdGxlOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHdpbm5lcikKKyAgICAgICAgICAgIHdpbm5lci5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKCdwbGF0Zm9ybXMnKVswXS5pbm5lckhUTUwgKz0gJzxkaXYgY2xhc3M9
dXNlZC1wbGF0Zm9ybT4nICsgcGxhdGZvcm0gKyAnPC9kaXY+JzsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBjb25zb2xlLmxvZygnTm8gZXhwZWN0YXRpb25zIGlkZW50aWZpZWQgZm9yIHRo
aXMgdGVzdC4gVGhpcyBtZWFucyAnICsKKyAgICAgICAgICAgICAgICAndGhlcmUgaXMgYSBsb2dp
YyBidWcgaW4gdGhlIGRhc2hib2FyZCBmb3Igd2hpY2ggZXhwZWN0YXRpb25zIGEgJyArCisgICAg
ICAgICAgICAgICAgJ3BsYXRmb3JtIHVzZXMgb3IgdHJhYy53ZWJraXQub3JnL3NyYy5jaHJvbWl1
bS5vcmcgaXMgZ2l2aW5nIDVYWHMuJyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zb2xp
ZGF0ZVVzZWRQbGF0Zm9ybXMoY29udGFpbmVyKTsKK30KKworLy8gQ29uc29saWRhdGUgcGxhdGZv
cm1zIHdoZW4gYWxsIHN1Yi1wbGF0Zm9ybXMgZm9yIGEgZ2l2ZW4gcGxhdGZvcm0gYXJlIHJlcHJl
c2VudGVkLgorLy8gZS5nLiwgaWYgYWxsIG9mIHRoZSBXSU4tIHBsYXRmb3JtcyBhcmUgdGhlcmUs
IHJlcGxhY2UgdGhlbSB3aXRoIGp1c3QgV0lOLgorLy8gRklYTUU6IFNob3VsZCB3ZSBhbHNvIGNv
bnNvbGlkYXRlICJNQUMtU05PV0xFT1BBUkQgTUFDLVNOT1dMRU9QQVJELUdQVSIgdG8gTUFDLVNO
T1dMRU9QQVJECisvLyBvciBpcyB0aGF0IG1vcmUgY29uZnVzaW5nPworZnVuY3Rpb24gY29uc29s
aWRhdGVVc2VkUGxhdGZvcm1zKGNvbnRhaW5lcikKK3sKKyAgICB2YXIgYWxsUGxhdGZvcm1zID0g
T2JqZWN0LmtleXMoZ19mYWxsYmFja3NNYXApOworCisgICAgdmFyIHBsYXRmb3JtRWxlbWVudHMg
PSBjb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncGxhdGZvcm1zJyk7CisgICAgZm9y
ICh2YXIgaSA9IDAsIHBsYXRmb3Jtc0xlbmd0aCA9IHBsYXRmb3JtRWxlbWVudHMubGVuZ3RoOyBp
IDwgcGxhdGZvcm1zTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHVzZWRQbGF0Zm9ybXMgPSBw
bGF0Zm9ybUVsZW1lbnRzW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3VzZWQtcGxhdGZvcm0n
KTsKKyAgICAgICAgaWYgKCF1c2VkUGxhdGZvcm1zLmxlbmd0aCkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIHZhciBwbGF0Zm9ybXMgPSB7fTsKKyAgICAgICAgcGxhdGZvcm1zWydN
QUMnXSA9IHt9OworICAgICAgICBwbGF0Zm9ybXNbJ1dJTiddID0ge307CisgICAgICAgIHBsYXRm
b3Jtc1snTElOVVgnXSA9IHt9OworICAgICAgICBhbGxQbGF0Zm9ybXMuZm9yRWFjaChmdW5jdGlv
bihwbGF0Zm9ybSkgeworICAgICAgICAgICAgaWYgKHN0YXJ0c1dpdGgocGxhdGZvcm0sICdNQUMn
KSkKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybXNbJ01BQyddW3BsYXRmb3JtXSA9IDE7CisgICAg
ICAgICAgICBlbHNlIGlmIChzdGFydHNXaXRoKHBsYXRmb3JtLCAnV0lOJykpCisgICAgICAgICAg
ICAgICAgcGxhdGZvcm1zWydXSU4nXVtwbGF0Zm9ybV0gPSAxOworICAgICAgICAgICAgZWxzZSBp
ZiAoc3RhcnRzV2l0aChwbGF0Zm9ybSwgJ0xJTlVYJykpCisgICAgICAgICAgICAgICAgcGxhdGZv
cm1zWydMSU5VWCddW3BsYXRmb3JtXSA9IDE7CisgICAgICAgIH0pOworCisgICAgICAgIGZvciAo
dmFyIGogPSAwLCB1c2VkUGxhdGZvcm1zTGVuZ3RoID0gdXNlZFBsYXRmb3Jtcy5sZW5ndGg7IGog
PCB1c2VkUGxhdGZvcm1zTGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgIGZvciAodmFyIHBsYXRm
b3JtIGluIHBsYXRmb3JtcykKKyAgICAgICAgICAgICAgICBkZWxldGUgcGxhdGZvcm1zW3BsYXRm
b3JtXVt1c2VkUGxhdGZvcm1zW2pdLnRleHRDb250ZW50XTsKKyAgICAgICAgfQorCisgICAgICAg
IGZvciAodmFyIHBsYXRmb3JtIGluIHBsYXRmb3JtcykgeworICAgICAgICAgICAgaWYgKCFPYmpl
Y3Qua2V5cyhwbGF0Zm9ybXNbcGxhdGZvcm1dKS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB2
YXIgbm9kZXNUb1JlbW92ZSA9IFtdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCB1
c2VkUGxhdGZvcm1zTGVuZ3RoID0gdXNlZFBsYXRmb3Jtcy5sZW5ndGg7IGogPCB1c2VkUGxhdGZv
cm1zTGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHVzZWRQbGF0Zm9ybSA9
IHVzZWRQbGF0Zm9ybXNbal07CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydHNXaXRoKHVz
ZWRQbGF0Zm9ybS50ZXh0Q29udGVudCwgcGxhdGZvcm0pKQorICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZXNUb1JlbW92ZS5wdXNoKHVzZWRQbGF0Zm9ybSk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgbm9kZXNUb1JlbW92ZS5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQp
IHsgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpOyB9KTsKKyAgICAgICAg
ICAgICAgICBwbGF0Zm9ybUVsZW1lbnRzW2ldLmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJCZWdp
bicsICc8ZGl2IGNsYXNzPXVzZWQtcGxhdGZvcm0+JyArIHBsYXRmb3JtICsgJzwvZGl2PicpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBhZGRFeHBlY3Rh
dGlvbnMoZXhwZWN0YXRpb25zQ29udGFpbmVycywgY29udGFpbmVyLCBiYXNlLAorICAgIHBsYXRm
b3JtLCB0ZXh0LCBwbmcsIHJlZnRlc3RfaHRtbF9maWxlLCByZWZ0ZXN0X21pc21hdGNoX2h0bWxf
ZmlsZSkKK3sKKyAgICBhZGRFeHBlY3RhdGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29udGFpbmVycywg
Y29udGFpbmVyLCBwbGF0Zm9ybSwgdGV4dCwgYmFzZSk7CisgICAgYWRkRXhwZWN0YXRpb25JdGVt
KGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIGNvbnRhaW5lciwgcGxhdGZvcm0sIHBuZywgYmFzZSk7
CisgICAgYWRkRXhwZWN0YXRpb25JdGVtKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIGNvbnRhaW5l
ciwgcGxhdGZvcm0sIHJlZnRlc3RfaHRtbF9maWxlLCBiYXNlKTsKKyAgICBhZGRFeHBlY3RhdGlv
bkl0ZW0oZXhwZWN0YXRpb25zQ29udGFpbmVycywgY29udGFpbmVyLCBwbGF0Zm9ybSwgcmVmdGVz
dF9taXNtYXRjaF9odG1sX2ZpbGUsIGJhc2UpOworfQorCitmdW5jdGlvbiBleHBlY3RhdGlvbnNU
aXRsZShwbGF0Zm9ybSwgcGF0aCwgYnVpbGRlcikKK3sKKyAgICB2YXIgaGVhZGVyID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnaDMnKTsKKyAgICBoZWFkZXIuY2xhc3NOYW1lID0gJ2V4cGVjdGF0
aW9ucy10aXRsZSc7CisKKyAgICB2YXIgaW5uZXJIVE1MOworICAgIGlmIChidWlsZGVyKSB7Cisg
ICAgICAgIHZhciByZXN1bHRzVHlwZTsKKyAgICAgICAgaWYgKGVuZHNXaXRoKHBhdGgsICctY3Jh
c2gtbG9nLnR4dCcpKQorICAgICAgICAgICAgcmVzdWx0c1R5cGUgPSAnU1RBQ0tUUkFDRSc7Cisg
ICAgICAgIGVsc2UgaWYgKGVuZHNXaXRoKHBhdGgsICctYWN0dWFsLnR4dCcpIHx8IGVuZHNXaXRo
KHBhdGgsICctYWN0dWFsLnBuZycpKQorICAgICAgICAgICAgcmVzdWx0c1R5cGUgPSAnQUNUVUFM
IFJFU1VMVFMnOworICAgICAgICBlbHNlIGlmIChlbmRzV2l0aChwYXRoLCAnLXdkaWZmLmh0bWwn
KSkKKyAgICAgICAgICAgIHJlc3VsdHNUeXBlID0gJ1dESUZGJzsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcmVzdWx0c1R5cGUgPSAnRElGRic7CisKKyAgICAgICAgaW5uZXJIVE1MID0gcmVz
dWx0c1R5cGUgKyAnOiAnICsgYnVpbGRlcjsKKyAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAi
IikgeworICAgICAgICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7CisgICAgICAgIGlubmVy
SFRNTCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdOworICAgIH0gZWxzZQorICAgICAgICBpbm5l
ckhUTUwgPSBwbGF0Zm9ybSB8fCBwYXRoOworCisgICAgaGVhZGVyLmlubmVySFRNTCA9ICc8ZGl2
IGNsYXNzPXRpdGxlPicgKyBpbm5lckhUTUwgKworICAgICAgICAnPC9kaXY+PGRpdiBzdHlsZT0i
ZmxvYXQ6bGVmdCI+Jm5ic3A7PC9kaXY+JyArCisgICAgICAgICc8ZGl2IGNsYXNzPXBsYXRmb3Jt
cyBzdHlsZT0iZmxvYXQ6cmlnaHQiPjwvZGl2Pic7CisgICAgaGVhZGVyLnBsYXRmb3JtID0gcGxh
dGZvcm07CisgICAgcmV0dXJuIGhlYWRlcjsKK30KKworZnVuY3Rpb24gbG9hZEV4cGVjdGF0aW9u
cyhleHBlY3RhdGlvbnNDb250YWluZXIpCit7CisgICAgaWYgKGlzTGF5b3V0VGVzdFJlc3VsdHMo
KSkKKyAgICAgICAgbG9hZEV4cGVjdGF0aW9uc0xheW91dFRlc3RzKGV4cGVjdGF0aW9uc0NvbnRh
aW5lcik7CisgICAgZWxzZSB7CisgICAgICAgIHZhciB0ZXN0ID0gZXhwZWN0YXRpb25zQ29udGFp
bmVyLmdldEF0dHJpYnV0ZSgndGVzdCcpOworICAgICAgICB2YXIgcmVzdWx0cyA9IGdfdGVzdFRv
UmVzdWx0c01hcFt0ZXN0XTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxl
bmd0aDsgaSsrKQorICAgICAgICAgICAgbG9hZE5vbldlYktpdFJlc3VsdHNGb3JCdWlsZGVyKHJl
c3VsdHNbaV0uYnVpbGRlciwgdGVzdCwgZXhwZWN0YXRpb25zQ29udGFpbmVyKTsKKyAgICB9Cit9
CisKK2Z1bmN0aW9uIGxvYWROb25XZWJLaXRSZXN1bHRzRm9yQnVpbGRlcihidWlsZGVyLCB0ZXN0
LCBleHBlY3RhdGlvbnNDb250YWluZXIpCit7CisgICAgdmFyIGZhaWx1cmVzID0gYnVpbGROdW1i
ZXJzRm9yRmFpbHVyZXMoYnVpbGRlciwgdGVzdCk7CisgICAgdmFyIGNvbnRhaW5lciA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnPGRp
dj48Yj4nICsgYnVpbGRlciArICc8L2I+PC9kaXY+JzsKKyAgICBleHBlY3RhdGlvbnNDb250YWlu
ZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZhaWx1
cmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgc2VlbSB0
byB3b3JrIGFueW1vcmUuIERpZCB0aGUgcGF0aHMgY2hhbmdlPworICAgICAgICAvLyBPbmNlIHRo
YXQncyByZXNvbHZlZCwgc2VlIGlmIHdlIG5lZWQgdG8gdHJ5IGVhY2ggR1RFU1RfTU9ESUZJRVJT
IHByZWZpeCBhcyB3ZWxsLgorICAgICAgICB2YXIgcGF0aFRvTG9nID0gYnVpbGRlck1hc3Rlcihi
dWlsZGVyKS5nZXRMb2dQYXRoKGJ1aWxkZXIsIGZhaWx1cmVzW2ldKSArIHBhdGhUb0ZhaWx1cmVM
b2codGVzdCk7CisgICAgICAgIGFwcGVuZE5vbldlYktpdFJlc3VsdHMoY29udGFpbmVyLCBwYXRo
VG9Mb2cpOworICAgIH0KK30KKworZnVuY3Rpb24gYXBwZW5kTm9uV2ViS2l0UmVzdWx0cyhjb250
YWluZXIsIHVybCkKK3sKKyAgICAvLyBVc2UgYSBzY3JpcHQgdGFnIHRvIGRldGVjdCB3aGV0aGVy
IHRoZSBVUkwgNDA0cy4KKyAgICAvLyBOZWVkIHRvIHVzZSBhIHNjcmlwdCB0YWcgc2luY2UgdGhl
IFVSTCBpcyBjcm9zcy1kb21haW4uCisgICAgdmFyIGR1bW15Tm9kZSA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ3NjcmlwdCcpOworICAgIGR1bW15Tm9kZS5zcmMgPSB1cmw7CisKKyAgICBkdW1t
eU5vZGUub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpdGVtID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAgICAgIGl0ZW0uc3JjID0gZHVtbXlOb2RlLnNy
YzsKKyAgICAgICAgaXRlbS5jbGFzc05hbWUgPSAnbm9uLXdlYmtpdC1yZXN1bHRzJzsKKyAgICAg
ICAgaXRlbS5zdHlsZS5oZWlnaHQgPSBnX2N1cnJlbnRTdGF0ZS5yZXN1bHRzSGVpZ2h0ICsgJ3B4
JzsKKyAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGl0ZW0pOworICAgIH0KKyAgICBkdW1t
eU5vZGUub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBjb250YWluZXIucGFyZW50Tm9k
ZS5yZW1vdmVDaGlsZChjaGlsZENvbnRhaW5lcik7CisgICAgfQorCisgICAgY29udGFpbmVyLmFw
cGVuZENoaWxkKGR1bW15Tm9kZSk7Cit9CisKK2Z1bmN0aW9uIGJ1aWxkSW5mb0ZvclJldmlzaW9u
KGJ1aWxkZXIsIHJldmlzaW9uKQoreworICAgIHZhciByZXZpc2lvbnMgPSBnX3Jlc3VsdHNCeUJ1
aWxkZXJbYnVpbGRlcl0ud2Via2l0UmV2aXNpb247CisgICAgdmFyIHJldmlzaW9uU3RhcnQgPSAw
LCByZXZpc2lvbkVuZCA9IDAsIGJ1aWxkTnVtYmVyID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHJldmlzaW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAocmV2aXNpb24gPiByZXZp
c2lvbnNbaV0pIHsKKyAgICAgICAgICAgIHJldmlzaW9uU3RhcnQgPSByZXZpc2lvbnNbaSAtIDFd
OworICAgICAgICAgICAgcmV2aXNpb25FbmQgPSByZXZpc2lvbnNbaV07CisgICAgICAgICAgICBi
dWlsZE51bWJlciA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJlcnNbaSAt
IDFdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocmV2
aXNpb25FbmQpCisgICAgICByZXZpc2lvbkVuZCsrOworICAgIGVsc2UKKyAgICAgIHJldmlzaW9u
RW5kID0gJyc7CisKKyAgICByZXR1cm4ge3JldmlzaW9uU3RhcnQ6IHJldmlzaW9uU3RhcnQsIHJl
dmlzaW9uRW5kOiByZXZpc2lvbkVuZCwgYnVpbGROdW1iZXI6IGJ1aWxkTnVtYmVyfTsKK30KKwor
ZnVuY3Rpb24gbG9hZEV4cGVjdGF0aW9uc0xheW91dFRlc3RzKGV4cGVjdGF0aW9uc0NvbnRhaW5l
cikKK3sKKyAgICAvLyBNYXAgZnJvbSBmaWxlIGV4dGVuc2lvbiB0byBjb250YWluZXIgZGl2IGZv
ciBleHBlY3RhdGlvbnMgb2YgdGhhdCB0eXBlLgorICAgIHZhciBleHBlY3RhdGlvbnNDb250YWlu
ZXJzID0ge307CisgICAgdmFyIHRlc3QgPSBleHBlY3RhdGlvbnNDb250YWluZXIuZ2V0QXR0cmli
dXRlKCd0ZXN0Jyk7CisKKyAgICB2YXIgcmV2aXNpb25Db250YWluZXIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKTsKKyAgICByZXZpc2lvbkNvbnRhaW5lci50ZXh0Q29udGVudCA9ICJT
aG93aW5nIHJlc3VsdHMgZm9yOiAiCisgICAgZXhwZWN0YXRpb25zQ29udGFpbmVyLmFwcGVuZENo
aWxkKHJldmlzaW9uQ29udGFpbmVyKTsKKyAgICBmb3IgKHZhciBidWlsZGVyIGluIGdfYnVpbGRl
cnMpIHsKKyAgICAgICAgaWYgKGJ1aWxkZXJNYXN0ZXIoYnVpbGRlcikgPT0gV0VCS0lUX0JVSUxE
RVJfTUFTVEVSKSB7CisgICAgICAgICAgICB2YXIgbGF0ZXN0UmV2aXNpb24gPSBnX2N1cnJlbnRT
dGF0ZS5yZXZpc2lvbiB8fCBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0ud2Via2l0UmV2aXNp
b25bMF07CisgICAgICAgICAgICB2YXIgYnVpbGRJbmZvID0gYnVpbGRJbmZvRm9yUmV2aXNpb24o
YnVpbGRlciwgbGF0ZXN0UmV2aXNpb24pOworICAgICAgICAgICAgdmFyIHJldmlzaW9uSW5mbyA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICAgICAgcmV2aXNpb25JbmZv
LnN0eWxlLmNzc1RleHQgPSAnYmFja2dyb3VuZDpsaWdodGdyYXk7bWFyZ2luOjAgM3B4O3BhZGRp
bmc6MCAycHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7JzsKKyAgICAgICAgICAgIHJldmlzaW9uSW5m
by5pbm5lckhUTUwgPSBidWlsZGVyICsgJyByJyArIGJ1aWxkSW5mby5yZXZpc2lvbkVuZCArCisg
ICAgICAgICAgICAgICAgJzpyJyArIGJ1aWxkSW5mby5yZXZpc2lvblN0YXJ0ICsgJywgYnVpbGQg
JyArIGJ1aWxkSW5mby5idWlsZE51bWJlcjsKKyAgICAgICAgICAgIHJldmlzaW9uQ29udGFpbmVy
LmFwcGVuZENoaWxkKHJldmlzaW9uSW5mbyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhZGRF
eHBlY3RhdGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29udGFpbmVycywgZXhwZWN0YXRpb25zQ29udGFp
bmVyLCBudWxsLCB0ZXN0LCBURVNUX1VSTF9CQVNFX1BBVEgpOworCisgICAgdmFyIHRlc3RXaXRo
b3V0U3VmZml4ID0gdGVzdC5zdWJzdHJpbmcoMCwgdGVzdC5sYXN0SW5kZXhPZignLicpKTsKKyAg
ICB2YXIgdGV4dCA9IHRlc3RXaXRob3V0U3VmZml4ICsgIi1leHBlY3RlZC50eHQiOworICAgIHZh
ciBwbmcgPSB0ZXN0V2l0aG91dFN1ZmZpeCArICItZXhwZWN0ZWQucG5nIjsKKyAgICB2YXIgcmVm
dGVzdF9odG1sX2ZpbGUgPSB0ZXN0V2l0aG91dFN1ZmZpeCArICItZXhwZWN0ZWQuaHRtbCI7Cisg
ICAgdmFyIHJlZnRlc3RfbWlzbWF0Y2hfaHRtbF9maWxlID0gdGVzdFdpdGhvdXRTdWZmaXggKyAi
LWV4cGVjdGVkLW1pc21hdGNoLmh0bWwiOworCisgICAgYWRkRXhwZWN0YXRpb25zKGV4cGVjdGF0
aW9uc0NvbnRhaW5lcnMsIGV4cGVjdGF0aW9uc0NvbnRhaW5lciwKKyAgICAgICAgVEVTVF9VUkxf
QkFTRV9QQVRILCAnJywgdGV4dCwgcG5nLCByZWZ0ZXN0X2h0bWxfZmlsZSwgcmVmdGVzdF9taXNt
YXRjaF9odG1sX2ZpbGUpOworCisgICAgdmFyIGZhbGxiYWNrcyA9IGFsbEZhbGxiYWNrcygpOwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmFsbGJhY2tzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2
YXIgZmFsbGJhY2sgPSAncGxhdGZvcm0vJyArIGZhbGxiYWNrc1tpXTsKKyAgICAgIGFkZEV4cGVj
dGF0aW9ucyhleHBlY3RhdGlvbnNDb250YWluZXJzLCBleHBlY3RhdGlvbnNDb250YWluZXIsIFRF
U1RfVVJMX0JBU0VfUEFUSCwgZmFsbGJhY2ssIHRleHQsIHBuZywKKyAgICAgICAgICByZWZ0ZXN0
X2h0bWxfZmlsZSwgcmVmdGVzdF9taXNtYXRjaF9odG1sX2ZpbGUpOworICAgIH0KKworICAgIHZh
ciBhY3R1YWxSZXN1bHRTdWZmaXhlcyA9IFsnLWFjdHVhbC50eHQnLCAnLWFjdHVhbC5wbmcnLCAn
LWNyYXNoLWxvZy50eHQnLCAnLWRpZmYudHh0JywgJy13ZGlmZi5odG1sJywgJy1kaWZmLnBuZydd
OworCisgICAgZm9yICh2YXIgYnVpbGRlciBpbiBnX2J1aWxkZXJzKSB7CisgICAgICAgIHZhciBh
Y3R1YWxSZXN1bHRzQmFzZTsKKyAgICAgICAgaWYgKGJ1aWxkZXJNYXN0ZXIoYnVpbGRlcikgPT0g
V0VCS0lUX0JVSUxERVJfTUFTVEVSKSB7CisgICAgICAgICAgICB2YXIgbGF0ZXN0UmV2aXNpb24g
PSBnX2N1cnJlbnRTdGF0ZS5yZXZpc2lvbiB8fCBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0u
d2Via2l0UmV2aXNpb25bMF07CisgICAgICAgICAgICB2YXIgYnVpbGRJbmZvID0gYnVpbGRJbmZv
Rm9yUmV2aXNpb24oYnVpbGRlciwgbGF0ZXN0UmV2aXNpb24pOworICAgICAgICAgICAgYWN0dWFs
UmVzdWx0c0Jhc2UgPSAnaHR0cDovL2J1aWxkLndlYmtpdC5vcmcvcmVzdWx0cy8nICsgYnVpbGRl
ciArCisgICAgICAgICAgICAgICAgJy9yJyArIGJ1aWxkSW5mby5yZXZpc2lvblN0YXJ0ICsgJyAo
JyArIGJ1aWxkSW5mby5idWlsZE51bWJlciArICcpLyc7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgYWN0dWFsUmVzdWx0c0Jhc2UgPSBURVNUX1JFU1VMVFNfQkFTRV9QQVRIICsgZ19idWls
ZGVyc1tidWlsZGVyXSArICcvcmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzLyc7CisKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3R1YWxSZXN1bHRTdWZmaXhlcy5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgYWRkRXhwZWN0YXRpb25JdGVtKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMs
IGV4cGVjdGF0aW9uc0NvbnRhaW5lciwgbnVsbCwKKyAgICAgICAgICAgICAgICB0ZXN0V2l0aG91
dFN1ZmZpeCArIGFjdHVhbFJlc3VsdFN1ZmZpeGVzW2ldLCBhY3R1YWxSZXN1bHRzQmFzZSwgYnVp
bGRlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBZGQgYSBjbGVhcmluZyBlbGVtZW50
IHNvIGZsb2F0ZWQgZWxlbWVudHMgZG9uJ3QgYmxlZWQgb3V0IG9mIHRoZWlyCisgICAgLy8gY29u
dGFpbmluZyBibG9jay4KKyAgICB2YXIgYnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicp
OworICAgIGJyLnN0eWxlLmNsZWFyID0gJ2JvdGgnOworICAgIGV4cGVjdGF0aW9uc0NvbnRhaW5l
ci5hcHBlbmRDaGlsZChicik7Cit9CisKK3ZhciBnX2FsbEZhbGxiYWNrczsKKworLy8gUmV0dXJu
cyB0aGUgcmV2ZXJzZSBzb3J0ZWQsIGRlZHVwZWQgbGlzdCBvZiBhbGwgcGxhdGZvcm0gZmFsbGJh
Y2sKKy8vIGRpcmVjdG9yaWVzLgorZnVuY3Rpb24gYWxsRmFsbGJhY2tzKCkKK3sKKyAgICBpZiAo
IWdfYWxsRmFsbGJhY2tzKSB7CisgICAgICAgIHZhciBob2xkZXIgPSB7fTsKKyAgICAgICAgZm9y
ICh2YXIgcGxhdGZvcm0gaW4gZ19mYWxsYmFja3NNYXApIHsKKyAgICAgICAgICAgIHZhciBmYWxs
YmFja3MgPSBnX2ZhbGxiYWNrc01hcFtwbGF0Zm9ybV07CisgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGZhbGxiYWNrcy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBob2xkZXJb
ZmFsbGJhY2tzW2ldXSA9IDE7CisgICAgICAgIH0KKworICAgICAgICBnX2FsbEZhbGxiYWNrcyA9
IFtdOworICAgICAgICBmb3IgKHZhciBmYWxsYmFjayBpbiBob2xkZXIpCisgICAgICAgICAgICBn
X2FsbEZhbGxiYWNrcy5wdXNoKGZhbGxiYWNrKTsKKworICAgICAgICBnX2FsbEZhbGxiYWNrcy5z
b3J0KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gYSA8IGI7CisgICAgICAgIH0pOwor
ICAgIH0KKyAgICByZXR1cm4gZ19hbGxGYWxsYmFja3M7Cit9CisKK2Z1bmN0aW9uIGFwcGVuZEV4
cGVjdGF0aW9ucygpCit7CisgICAgdmFyIGV4cGVjdGF0aW9ucyA9IGdfY3VycmVudFN0YXRlLnNo
b3dFeHBlY3RhdGlvbnMgPyBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdleHBlY3Rh
dGlvbnMnKSA6IFtdOworICAgIC8vIExvYWRpbmcgZXhwZWN0YXRpb25zIGlzICp2ZXJ5KiBzbG93
LiBVc2UgYSBsYXJnZSB0aW1lb3V0IHRvIGF2b2lkCisgICAgLy8gdG90YWxseSBoYW5naW5nIHRo
ZSByZW5kZXJlci4KKyAgICBwZXJmb3JtQ2h1bmtlZEFjdGlvbihleHBlY3RhdGlvbnMsIGZ1bmN0
aW9uKGNodW5rKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBjaHVuay5sZW5ndGg7
IGkgPCBsZW47IGkrKykKKyAgICAgICAgICAgIGxvYWRFeHBlY3RhdGlvbnMoY2h1bmtbaV0pOwor
ICAgIH0sIGhpZGVMb2FkaW5nVUksIDEwMDAwKTsKK30KKworZnVuY3Rpb24gaGlkZUxvYWRpbmdV
SSgpCit7CisgICAgdmFyIGxvYWRpbmdEaXYgPSAkKCdsb2FkaW5nLXVpJyk7CisgICAgaWYgKGxv
YWRpbmdEaXYpCisgICAgICAgIGxvYWRpbmdEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKK30K
KworZnVuY3Rpb24gZ2VuZXJhdGVQYWdlRm9ySW5kaXZpZHVhbFRlc3RzKHRlc3RzKQoreworICAg
IGNvbnNvbGUubG9nKCdOdW1iZXIgb2YgdGVzdHM6ICcgKyB0ZXN0cy5sZW5ndGgpOworICAgIGFw
cGVuZEhUTUwoaHRtbEZvck5hdkJhcigpKTsKKyAgICBwZXJmb3JtQ2h1bmtlZEFjdGlvbih0ZXN0
cywgZnVuY3Rpb24oY2h1bmspIHsKKyAgICAgICAgYXBwZW5kSFRNTChodG1sRm9ySW5kaXZpZHVh
bFRlc3RzKGNodW5rKSk7CisgICAgfSwgYXBwZW5kRXhwZWN0YXRpb25zLCA1MDApOworICAgICQo
J3Rlc3RzLWlucHV0JykudmFsdWUgPSBnX2N1cnJlbnRTdGF0ZS50ZXN0czsKK30KKworZnVuY3Rp
b24gcGVyZm9ybUNodW5rZWRBY3Rpb24odGVzdHMsIGhhbmRsZUNodW5rLCBvbkNvbXBsZXRlLCB0
aW1lb3V0LCBvcHRfaW5kZXgpIHsKKyAgICB2YXIgaW5kZXggPSBvcHRfaW5kZXggfHwgMDsKKyAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgY2h1bmsgPSBBcnJheS5wcm90
b3R5cGUuc2xpY2UuY2FsbCh0ZXN0cywgaW5kZXggKiBDSFVOS19TSVpFLCAoaW5kZXggKyAxKSAq
IENIVU5LX1NJWkUpOworICAgICAgICBpZiAoY2h1bmsubGVuZ3RoKSB7CisgICAgICAgICAgICBo
YW5kbGVDaHVuayhjaHVuayk7CisgICAgICAgICAgICBwZXJmb3JtQ2h1bmtlZEFjdGlvbih0ZXN0
cywgaGFuZGxlQ2h1bmssIG9uQ29tcGxldGUsIHRpbWVvdXQsICsraW5kZXgpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIG9uQ29tcGxldGUoKTsKKyAgICAvLyBObyBuZWVkIGZvciBhIHRp
bWVvdXQgb24gdGhlIGZpcnN0IGNodW5rZWQgYWN0aW9uLgorICAgIH0sIGluZGV4ID8gdGltZW91
dCA6IDApOworfQorCitmdW5jdGlvbiBodG1sRm9ySW5kaXZpZHVhbFRlc3RzKHRlc3RzKQorewor
ICAgIHZhciB0ZXN0c0hUTUwgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxl
bmd0aDsgaSsrKQorICAgICAgICB0ZXN0c0hUTUwucHVzaChodG1sRm9ySW5kaXZpZHVsVGVzdE9u
QWxsQnVpbGRlcnModGVzdHNbaV0pKTsKKyAgICByZXR1cm4gdGVzdHNIVE1MLmpvaW4oJzxocj4n
KTsKK30KKworZnVuY3Rpb24gaHRtbEZvck5hdkJhcigpCit7CisgICAgdmFyIGV4dHJhSFRNTCA9
ICcnOworICAgIHZhciBodG1sID0gaHRtbEZvclRlc3RUeXBlU3dpdGNoZXIoZmFsc2UsIGV4dHJh
SFRNTCwgaXNDcm9zc0J1aWxkZXJWaWV3KCkpOworICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9Zm9y
bXM+PGZvcm0gaWQ9cmVzdWx0LWZvcm0gJyArCisgICAgICAgICdvbnN1Ym1pdD0ic2V0UXVlcnlQ
YXJhbWV0ZXIoXCdyZXN1bHRcJywgcmVzdWx0LnZhbHVlKTsnICsKKyAgICAgICAgJ3JldHVybiBm
YWxzZTsiPlNob3cgYWxsIHRlc3RzIHdpdGggcmVzdWx0OiAnICsKKyAgICAgICAgJzxpbnB1dCBu
YW1lPXJlc3VsdCBwbGFjZWhvbGRlcj0iZS5nLiBDUkFTSCIgaWQ9cmVzdWx0LWlucHV0PicgKwor
ICAgICAgICAnPC9mb3JtPjxmb3JtIGlkPXRlc3RzLWZvcm0gJyArCisgICAgICAgICdvbnN1Ym1p
dD0ic2V0UXVlcnlQYXJhbWV0ZXIoXCd0ZXN0c1wnLCB0ZXN0cy52YWx1ZSk7JyArCisgICAgICAg
ICdyZXR1cm4gZmFsc2U7Ij48c3Bhbj5TaG93IHRlc3RzIG9uIGFsbCBwbGF0Zm9ybXM6IDwvc3Bh
bj4nICsKKyAgICAgICAgJzxpbnB1dCBuYW1lPXRlc3RzICcgKworICAgICAgICAncGxhY2Vob2xk
ZXI9IkNvbW1hIG9yIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHRlc3RzIG9yIHBhcnRpYWwgJyAr
CisgICAgICAgICdwYXRocyB0byBzaG93IHRlc3QgcmVzdWx0cyBhY3Jvc3MgYWxsIGJ1aWxkZXJz
LCBlLmcuLCAnICsKKyAgICAgICAgJ2Zvby9iYXIuaHRtbCxmb28vYmF6LGRvbXN0b3JhZ2UiIGlk
PXRlc3RzLWlucHV0PjwvZm9ybT4nICsKKyAgICAgICAgJzxzcGFuIGNsYXNzPWxpbmsgb25jbGlj
az0ic2hvd0xlZ2VuZCgpIj5TaG93IGxlZ2VuZCBbdHlwZSA/XTwvc3Bhbj48L2Rpdj4nOworICAg
IHJldHVybiBodG1sOworfQorCitmdW5jdGlvbiBjaGVja0JveFRvVG9nZ2xlU3RhdGUoa2V5LCB0
ZXh0KQoreworICAgIHZhciBzdGF0ZUVuYWJsZWQgPSBnX2N1cnJlbnRTdGF0ZVtrZXldOworICAg
IHJldHVybiAnPGxhYmVsPjxpbnB1dCB0eXBlPWNoZWNrYm94ICcgKyAoc3RhdGVFbmFibGVkID8g
J2NoZWNrZWQgJyA6ICcnKSArICdvbmNsaWNrPSJzZXRRdWVyeVBhcmFtZXRlcihcJycgKyBrZXkg
KyAnXCcsICcgKyAhc3RhdGVFbmFibGVkICsgJykiPicgKyB0ZXh0ICsgJzwvbGFiZWw+ICc7Cit9
CisKK2Z1bmN0aW9uIGxpbmtIVE1MVG9Ub2dnbGVTdGF0ZShrZXksIGxpbmtUZXh0KQoreworICAg
IHZhciBzdGF0ZUVuYWJsZWQgPSBnX2N1cnJlbnRTdGF0ZVtrZXldOworICAgIHJldHVybiAnPHNw
YW4gY2xhc3M9bGluayBvbmNsaWNrPSJzZXRRdWVyeVBhcmFtZXRlcihcJycgKyBrZXkgKyAnXCcs
ICcgKyAhc3RhdGVFbmFibGVkICsgJykiPicgKyAoc3RhdGVFbmFibGVkID8gJ0hpZGUnIDogJ1No
b3cnKSArICcgJyArIGxpbmtUZXh0ICsgJzwvc3Bhbj4nOworfQorCitmdW5jdGlvbiBoZWFkZXJG
b3JUZXN0VGFibGVIdG1sKCkKK3sKKyAgICByZXR1cm4gJzxoMiBzdHlsZT0iZGlzcGxheTppbmxp
bmUtYmxvY2siPkZhaWxpbmcgdGVzdHM8L2gyPicgKworICAgICAgICBjaGVja0JveFRvVG9nZ2xl
U3RhdGUoJ3Nob3dXb250Rml4U2tpcCcsICdXT05URklYL1NLSVAnKSArCisgICAgICAgIGNoZWNr
Qm94VG9Ub2dnbGVTdGF0ZSgnc2hvd0NvcnJlY3RFeHBlY3RhdGlvbnMnLCAndGVzdHMgd2l0aCBj
b3JyZWN0IGV4cGVjdGF0aW9ucycpICsKKyAgICAgICAgY2hlY2tCb3hUb1RvZ2dsZVN0YXRlKCdz
aG93V3JvbmdFeHBlY3RhdGlvbnMnLCAndGVzdHMgd2l0aCB3cm9uZyBleHBlY3RhdGlvbnMnKSAr
CisgICAgICAgIGNoZWNrQm94VG9Ub2dnbGVTdGF0ZSgnc2hvd0ZsYWt5JywgJ2ZsYWt5JykgKwor
ICAgICAgICBjaGVja0JveFRvVG9nZ2xlU3RhdGUoJ3Nob3dTbG93JywgJ3Nsb3cnKTsKK30KKwor
ZnVuY3Rpb24gZ2VuZXJhdGVQYWdlRm9yQnVpbGRlcihidWlsZGVyTmFtZSkKK3sKKyAgICBwcm9j
ZXNzVGVzdFJ1bnNGb3JCdWlsZGVyKGJ1aWxkZXJOYW1lKTsKKworICAgIHZhciByZXN1bHRzID0g
Z19wZXJCdWlsZGVyRmFpbHVyZXNbYnVpbGRlck5hbWVdOworICAgIHNvcnRUZXN0cyhyZXN1bHRz
LCBnX2N1cnJlbnRTdGF0ZS5zb3J0Q29sdW1uLCBnX2N1cnJlbnRTdGF0ZS5zb3J0T3JkZXIpOwor
CisgICAgdmFyIHRlc3RzSFRNTCA9ICcnOworICAgIGlmIChyZXN1bHRzLmxlbmd0aCkgeworICAg
ICAgICB2YXIgdGFibGVSb3dzSFRNTCA9ICcnOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHJlc3VsdHMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICB0YWJsZVJvd3NIVE1MICs9IGh0bWxG
b3JTaW5nbGVUZXN0Um93KHJlc3VsdHNbaV0pCisgICAgICAgIHRlc3RzSFRNTCA9IGh0bWxGb3JU
ZXN0VGFibGUodGFibGVSb3dzSFRNTCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdHNIVE1M
ID0gJzxkaXY+Tm8gdGVzdHMgZm91bmQuICc7CisgICAgICAgIGlmIChpc0xheW91dFRlc3RSZXN1
bHRzKCkpCisgICAgICAgICAgICB0ZXN0c0hUTUwgKz0gJ1RyeSBzaG93aW5nIHRlc3RzIHdpdGgg
Y29ycmVjdCBleHBlY3RhdGlvbnMuPC9kaXY+JzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dGVzdHNIVE1MICs9ICdUaGlzIG1lYW5zIG5vIHRlc3RzIGhhdmUgZmFpbGVkITwvZGl2Pic7Cisg
ICAgfQorCisgICAgdmFyIGh0bWwgPSBodG1sRm9yTmF2QmFyKCk7CisKKyAgICBpZiAoaXNMYXlv
dXRUZXN0UmVzdWx0cygpKQorICAgICAgICBodG1sICs9IGh0bWxGb3JUZXN0c1dpdGhFeHBlY3Rh
dGlvbnNCdXROb0ZhaWx1cmVzKGJ1aWxkZXJOYW1lKSArIGhlYWRlckZvclRlc3RUYWJsZUh0bWwo
KTsKKworICAgIGh0bWwgKz0gJzxicj4nICsgdGVzdHNIVE1MOworICAgIGFwcGVuZEhUTUwoaHRt
bCk7CisKKyAgICB2YXIgdGhzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RoJyk7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdGhz
W2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2hhbmdlU29ydCwgZmFsc2UpOworICAgICAg
ICB0aHNbaV0uY2xhc3NOYW1lID0gInNvcnRhYmxlIjsKKyAgICB9CisKKyAgICBoaWRlTG9hZGlu
Z1VJKCk7Cit9CisKK3ZhciBWQUxJRF9LRVlTX0ZPUl9DUk9TU19CVUlMREVSX1ZJRVcgPSB7Cisg
ICAgdGVzdHM6IDEsCisgICAgcmVzdWx0OiAxLAorICAgIHNob3dFeHBlY3RhdGlvbnM6IDEsCisg
ICAgc2hvd0xhcmdlRXhwZWN0YXRpb25zOiAxLAorICAgIGxlZ2FjeUV4cGVjdGF0aW9uc1NlbWFu
dGljczogMSwKKyAgICByZXN1bHRzSGVpZ2h0OiAxLAorICAgIHJldmlzaW9uOiAxCit9OworCitm
dW5jdGlvbiBpc0ludmFsaWRLZXlGb3JDcm9zc0J1aWxkZXJWaWV3KGtleSkKK3sKKyAgICByZXR1
cm4gIShrZXkgaW4gVkFMSURfS0VZU19GT1JfQ1JPU1NfQlVJTERFUl9WSUVXKSAmJiAhKGtleSBp
biBnX2RlZmF1bHRDcm9zc0Rhc2hib2FyZFN0YXRlVmFsdWVzKTsKK30KKworZnVuY3Rpb24gdXBk
YXRlRGVmYXVsdEJ1aWxkZXJTdGF0ZSgpCit7CisgICAgaWYgKGlzQ3Jvc3NCdWlsZGVyVmlldygp
KQorICAgICAgICBkZWxldGUgZ19kZWZhdWx0U3RhdGVWYWx1ZXMuYnVpbGRlcjsKKyAgICBlbHNl
CisgICAgICAgIGdfZGVmYXVsdFN0YXRlVmFsdWVzLmJ1aWxkZXIgPSBnX2RlZmF1bHRCdWlsZGVy
TmFtZTsKK30KKworLy8gU2V0cyB0aGUgcGFnZSBzdGF0ZSB0byByZWdlbmVyYXRlIHRoZSBwYWdl
LgorLy8gQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBOZXcgb3IgbW9kaWZpZWQgcXVlcnkgcGFyYW1l
dGVycyBhcyBrZXk6IHZhbHVlLgorZnVuY3Rpb24gaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2Uo
cGFyYW1zKQoreworICAgIGZvciAoa2V5IGluIHBhcmFtcykgeworICAgICAgICBpZiAoa2V5ID09
ICd0ZXN0cycpIHsKKyAgICAgICAgICAgIC8vIEVudGVyaW5nIGNyb3NzLWJ1aWxkZXIgdmlldywg
b25seSBrZWVwIHZhbGlkIGtleXMgZm9yIHRoYXQgdmlldy4KKyAgICAgICAgICAgIGZvciAodmFy
IGN1cnJlbnRLZXkgaW4gZ19jdXJyZW50U3RhdGUpIHsKKyAgICAgICAgICAgICAgaWYgKGlzSW52
YWxpZEtleUZvckNyb3NzQnVpbGRlclZpZXcoY3VycmVudEtleSkpIHsKKyAgICAgICAgICAgICAg
ICBkZWxldGUgZ19jdXJyZW50U3RhdGVbY3VycmVudEtleV07CisgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChpc0ludmFsaWRLZXlGb3JDcm9zc0J1aWxk
ZXJWaWV3KGtleSkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBnX2N1cnJlbnRTdGF0ZS50ZXN0czsK
KyAgICAgICAgICAgIGRlbGV0ZSBnX2N1cnJlbnRTdGF0ZS5yZXN1bHQ7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB1cGRhdGVEZWZhdWx0QnVpbGRlclN0YXRlKCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Z1bmN0aW9uIGhpZGVMZWdlbmQoKQoreworICAgIHZhciBsZWdlbmQgPSAkKCdsZWdl
bmQnKTsKKyAgICBpZiAobGVnZW5kKQorICAgICAgICBsZWdlbmQucGFyZW50Tm9kZS5yZW1vdmVD
aGlsZChsZWdlbmQpOworfQorCit2YXIgZ19mYWxsYmFja3NNYXAgPSB7fTsKK2dfZmFsbGJhY2tz
TWFwWydXSU4tWFAnXSA9IFsnY2hyb21pdW0td2luLXhwJywgJ2Nocm9taXVtLXdpbi12aXN0YScs
ICdjaHJvbWl1bS13aW4nLCAnY2hyb21pdW0nLCAnd2luJywgJ21hYyddOworZ19mYWxsYmFja3NN
YXBbJ1dJTi1WSVNUQSddID0gWydjaHJvbWl1bS13aW4tdmlzdGEnLCAnY2hyb21pdW0td2luJywg
J2Nocm9taXVtJywgJ3dpbicsICdtYWMnXTsKK2dfZmFsbGJhY2tzTWFwWydXSU4tNyddID0gWydj
aHJvbWl1bS13aW4nLCAnY2hyb21pdW0nLCAnd2luJywgJ21hYyddOworZ19mYWxsYmFja3NNYXBb
J1dJTi03LUdQVSddID0gWydjaHJvbWl1bS1ncHUtd2luJ10uY29uY2F0KGdfZmFsbGJhY2tzTWFw
WydXSU4tNyddKTsKK2dfZmFsbGJhY2tzTWFwWydNQUMtTEVPUEFSRCddID0gWydjaHJvbWl1bS1j
Zy1tYWMtbGVvcGFyZCcsICdjaHJvbWl1bS1jZy1tYWMtc25vd2xlb3BhcmQnLCAnY2hyb21pdW0t
Y2ctbWFjJywgJ2Nocm9taXVtJywgJ21hYy1sZW9wYXJkJywgJ21hYy1zbm93bGVvcGFyZCcsICdt
YWMnXTsKK2dfZmFsbGJhY2tzTWFwWydNQUMtU05PV0xFT1BBUkQnXSA9IFsnY2hyb21pdW0tY2ct
bWFjLXNub3dsZW9wYXJkJywgJ2Nocm9taXVtLWNnLW1hYycsICdjaHJvbWl1bScsICdtYWMtc25v
d2xlb3BhcmQnLCAnbWFjJ107CitnX2ZhbGxiYWNrc01hcFsnTUFDLVNOT1dMRU9QQVJELUdQVSdd
ID0gWydjaHJvbWl1bS1ncHUtbWFjJ10uY29uY2F0KGdfZmFsbGJhY2tzTWFwWydNQUMtU05PV0xF
T1BBUkQnXSk7CitnX2ZhbGxiYWNrc01hcFsnTElOVVgtMzInXSA9IFsnY2hyb21pdW0tbGludXgt
eDg2JywgJ2Nocm9taXVtLWxpbnV4JywgJ2Nocm9taXVtLXdpbicsICdjaHJvbWl1bScsICd3aW4n
LCAnbWFjJ107CitnX2ZhbGxiYWNrc01hcFsnTElOVVgtNjQnXSA9IFsnY2hyb21pdW0tbGludXgn
LCAnY2hyb21pdW0td2luJywgJ2Nocm9taXVtJywgJ3dpbicsICdtYWMnXTsKK2dfZmFsbGJhY2tz
TWFwWydMSU5VWC0zMi1HUFUnXSA9IFsnY2hyb21pdW0tZ3B1LWxpbnV4J10uY29uY2F0KGdfZmFs
bGJhY2tzTWFwWydMSU5VWC0zMiddKTsKKworZnVuY3Rpb24gaHRtbEZvckZhbGxiYWNrSGVscChm
YWxsYmFja3MpCit7CisgICAgcmV0dXJuICc8b2wgY2xhc3M9ZmFsbGJhY2stbGlzdD48bGk+JyAr
IGZhbGxiYWNrcy5qb2luKCc8L2xpPjxsaT4nKSArICc8L2xpPjwvb2w+JzsKK30KKworZnVuY3Rp
b24gc2hvd0xlZ2VuZCgpCit7CisgICAgdmFyIGxlZ2VuZCA9ICQoJ2xlZ2VuZCcpOworICAgIGlm
ICghbGVnZW5kKSB7CisgICAgICAgIGxlZ2VuZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpOworICAgICAgICBsZWdlbmQuaWQgPSAnbGVnZW5kJzsKKyAgICAgICAgZG9jdW1lbnQuYm9k
eS5hcHBlbmRDaGlsZChsZWdlbmQpOworICAgIH0KKworICAgIHZhciBodG1sID0gJzxkaXYgaWQ9
bGVnZW5kLXRvZ2dsZSBvbmNsaWNrPSJoaWRlTGVnZW5kKCkiPkhpZGUgJyArCisgICAgICAgICds
ZWdlbmQgW3R5cGUgZXNjXTwvZGl2PjxkaXY+TnVtYmVyIG9mIGZsYWt5IHRlc3RzIGxpc3RlZCBu
ZXh0IHRvICcgKworICAgICAgICAnZWFjaCBidWlsZGVyPC9kaXY+PGRpdiBpZD1sZWdlbmQtY29u
dGVudHM+JzsKKyAgICBmb3IgKHZhciBleHBlY3RhdGlvbiBpbiBleHBlY3RhdGlvbnNNYXAoKSkK
KyAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0nICsgZXhwZWN0YXRpb24gKyAnPicgKyBleHBl
Y3RhdGlvbnNNYXAoKVtleHBlY3RhdGlvbl0gKyAnPC9kaXY+JzsKKworICAgIGh0bWwgKz0gJzxk
aXYgY2xhc3M9bWVyZ2U+V0VCS0lUIE1FUkdFPC9kaXY+JzsKKyAgICBpZiAoaXNMYXlvdXRUZXN0
UmVzdWx0cygpKSB7CisgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPXdyb25nLWV4cGVjdGF0aW9u
cz5XUk9ORyBFWFBFQ1RBVElPTlM8L2Rpdj4nICsKKyAgICAgICAgICAnPC9kaXY+PGJyIHN0eWxl
PSJjbGVhcjpib3RoIj4nICsKKyAgICAgICAgICAnPC9kaXY+PGgzPlRlc3QgZXhwZWN0YXRvbnMg
ZmFsbGJhY2sgb3JkZXIuPC9oMz4nOworCisgICAgICBmb3IgKHZhciBwbGF0Zm9ybSBpbiBnX2Zh
bGxiYWNrc01hcCkKKyAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPWZhbGxiYWNrLWhlYWRl
cj4nICsgcGxhdGZvcm0gKyAnPC9kaXY+JyArIGh0bWxGb3JGYWxsYmFja0hlbHAoZ19mYWxsYmFj
a3NNYXBbcGxhdGZvcm1dKTsKKworICAgICAgaHRtbCArPSAnPGRpdj5USU1FUzo8L2Rpdj4nICsK
KyAgICAgICAgICBodG1sRm9yU2xvd1RpbWVzKE1JTl9TRUNPTkRTX0ZPUl9TTE9XX1RFU1QpICsK
KyAgICAgICAgICAnPGRpdj5ERUJVRyBUSU1FUzo8L2Rpdj4nICsKKyAgICAgICAgICBodG1sRm9y
U2xvd1RpbWVzKE1JTl9TRUNPTkRTX0ZPUl9TTE9XX1RFU1RfREVCVUcpOworICAgIH0KKworICAg
IGxlZ2VuZC5pbm5lckhUTUwgPSBodG1sOworfQorCitmdW5jdGlvbiBodG1sRm9yU2xvd1RpbWVz
KG1pblRpbWUpCit7CisgICAgcmV0dXJuICc8dWw+PGxpPiZsdDsxIHNlY29uZCA9PSAhU0xPVzwv
bGk+PGxpPiZndDsxIHNlY29uZCAmJiAmbHQ7JyArCisgICAgICAgIG1pblRpbWUgKyAnIHNlY29u
ZHMgPT0gU0xPVyB8fCAhU0xPVyBpcyBmaW5lPC9saT48bGk+Jmd0OycgKworICAgICAgICBtaW5U
aW1lICsgJyBzZWNvbmRzID09IFNMT1c8L2xpPjwvdWw+JzsKK30KKworZG9jdW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKKyAgICBpZiAoZS5rZXlJZGVudGlm
aWVyID09ICdVKzAwM0YnIHx8IGUua2V5SWRlbnRpZmllciA9PSAnVSswMEJGJykgeworICAgICAg
ICAvLyBXZWJLaXQgTUFDIHJldHVyc24gM0YuIFdlYktpdCBXSU4gcmV0dXJucyBCRi4gVGhpcyBp
cyBhIGJ1ZyEKKyAgICAgICAgLy8gPyBrZXkKKyAgICAgICAgc2hvd0xlZ2VuZCgpOworICAgIH0g
ZWxzZSBpZiAoZS5rZXlJZGVudGlmaWVyID09ICdVKzAwMUInKSB7CisgICAgICAgIC8vIGVzY2Fw
ZSBrZXkKKyAgICAgICAgaGlkZUxlZ2VuZCgpOworICAgICAgICBoaWRlUG9wdXAoKTsKKyAgICB9
Cit9LCBmYWxzZSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+PC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvc3RhdGljLWRhc2hib2Fy
ZHMvZmxha2luZXNzX2Rhc2hib2FyZF90ZXN0cy5qcyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2Vy
dmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdGVzdHMuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMGJjYzJiNzgyZmJhNzRlODMyZTM1ZjAxYzVmYjE0YjliMDdiNDFlNQotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Zs
YWtpbmVzc19kYXNoYm9hcmRfdGVzdHMuanMKQEAgLTAsMCArMSw0MTIgQEAKKy8vIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24u
CisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisvLyBAZmlsZW92ZXJ2aWV3IFBvb3It
bWFuJ3MgdW5pdHRlc3RzIGZvciBzb21lIG9mIHRoZSB0cmlja2llciBsb2dpYyBiaXRzIG9mCisv
LyB0aGUgZmxha2luZXNzIGRhc2hib2FyZC4KKy8vCisvLyBDdXJyZW50bHkgb25seSB0ZXN0cyBw
cm9jZXNzRXhwZWN0YXRpb25zIGFuZCBwb3B1bGF0ZUV4cGVjdGF0aW9uc0RhdGEuCisvLyBBIHRl
c3QganVzdCBjb25zaXN0cyBvZiBjYWxsaW5nIHJ1bkV4cGVjdGF0aW9uc1Rlc3Qgd2l0aCB0aGUg
YXBwcm9wcmlhdGUKKy8vIGFyZ3VtZW50cy4KKworLy8gRklYTUU6IG1vdmUgdGhpcyBvdmVyIHRv
IHVzaW5nIHF1bml0CisvLyBJbiB0aGUgbWVhbndoaWxlLCB5b3UgY2FuIHJ1biB0aGVzZSB0ZXN0
cyBieSBsb2FkaW5nCisvLyBmbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwjdXNlVGVzdERhdGE9dHJ1
ZSBpbiBhIGJyb3dzZXIuCisKKy8vIENsZWFycyBvdXQgdGhlIGdsb2JhbCBvYmplY3RzIG1vZGlm
aWVkIG9yIHVzZWQgYnkgcHJvY2Vzc0V4cGVjdGF0aW9ucyBhbmQKKy8vIHBvcHVsYXRlRXhwZWN0
YXRpb25zRGF0YS4gQSBiaXQgZ3Jvc3Mgc2luY2UgaXQncyBkaWdnaW5nIGludG8gaW1wbGVtZW50
YXRpb24KKy8vIGRldGFpbHMsIGJ1dCBpdCdzIGdvb2QgZW5vdWdoIGZvciBub3cuCitmdW5jdGlv
biBzZXR1cEV4cGVjdGF0aW9uc1Rlc3QoKQoreworICAgIGFsbEV4cGVjdGF0aW9ucyA9IG51bGw7
CisgICAgYWxsVGVzdHMgPSBudWxsOworICAgIGdfZXhwZWN0YXRpb25zID0gJyc7CisgICAgZ19y
ZXN1bHRzQnlCdWlsZGVyID0ge307CisgICAgZ19idWlsZGVycyA9IHt9OworICAgIGdfYWxsRXhw
ZWN0YXRpb25zID0gbnVsbDsKKyAgICBnX2FsbFRlc3RzID0gbnVsbDsKKyAgICBnX2N1cnJlbnRT
dGF0ZSA9IHt9OworICAgIGZvciAodmFyIGtleSBpbiBnX2RlZmF1bHRDcm9zc0Rhc2hib2FyZFN0
YXRlVmFsdWVzKSB7CisgICAgICAgIGdfY3VycmVudFN0YXRlW2tleV0gPSBnX2RlZmF1bHRDcm9z
c0Rhc2hib2FyZFN0YXRlVmFsdWVzW2tleV07CisgICAgfQorfQorCisvLyBQcm9jZXNzZXMgdGhl
IGV4cGVjdGF0aW9ucyBmb3IgYSB0ZXN0IGFuZCBhc3NlcnRzIHRoYXQgdGhlIGZpbmFsIGV4cGVj
dGF0aW9ucworLy8gYW5kIG1vZGlmaWVycyB3ZSBhcHBseSB0byBhIHRlc3QgbWF0Y2ggd2hhdCB3
ZSBleHBlY3QuCisvLworLy8gQHBhcmFtIHtzdHJpbmd9IGJ1aWxkZXIgQnVpbGRlciB0aGUgdGVz
dCBpcyBydW4gb24uCisvLyBAcGFyYW0ge3N0cmluZ30gdGVzdCBUaGUgdGVzdCBuYW1lLgorLy8g
QHBhcmFtIHtzdHJpbmd9IGV4cGVjdGF0aW9ucyBTb3J0ZWQgc3RyaW5nIG9mIHdoYXQgdGhlIGV4
cGVjdGF0aW9ucyBmb3IgdGhpcworLy8gICAgICAgIHRlc3Qgb3VnaHQgdG8gYmUgZm9yIHRoaXMg
YnVpbGRlci4KKy8vIEBwYXJhbSB7c3RyaW5nfSBtb2RpZmllcnMgU29ydGVkIHN0cmluZyBvZiB3
aGF0IHRoZSBtb2RpZmllcnMgZm9yIHRoaXMKKy8vICAgICAgICB0ZXN0IG91Z2h0IHRvIGJlIGZv
ciB0aGlzIGJ1aWxkZXIuCitmdW5jdGlvbiBydW5FeHBlY3RhdGlvbnNUZXN0KGJ1aWxkZXIsIHRl
c3QsIGV4cGVjdGF0aW9ucywgbW9kaWZpZXJzKQoreworICAgIGdfYnVpbGRlcnNbYnVpbGRlcl0g
PSB0cnVlOworCisgICAgLy8gUHV0IGluIHNvbWUgZHVtbXkgcmVzdWx0cy4gcHJvY2Vzc0V4cGVj
dGF0aW9ucyBleHBlY3RzIHRoZSB0ZXN0IHRvIGJlCisgICAgLy8gdGhlcmUuCisgICAgdmFyIHRl
c3RzID0ge307CisgICAgdGVzdHNbdGVzdF0gPSB7J3Jlc3VsdHMnOiBbWzEwMCwgJ0YnXV0sICd0
aW1lcyc6IFtbMTAwLCAwXV19OworICAgIGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXSA9IHsn
dGVzdHMnOiB0ZXN0c307CisKKyAgICBwcm9jZXNzRXhwZWN0YXRpb25zKCk7CisgICAgdmFyIHJl
c3VsdHNGb3JUZXN0ID0gY3JlYXRlUmVzdWx0c09iamVjdEZvclRlc3QodGVzdCwgYnVpbGRlcik7
CisgICAgcG9wdWxhdGVFeHBlY3RhdGlvbnNEYXRhKHJlc3VsdHNGb3JUZXN0KTsKKworICAgIHZh
ciBtZXNzYWdlID0gJ0J1aWxkZXI6ICcgKyByZXN1bHRzRm9yVGVzdC5idWlsZGVyICsgJyB0ZXN0
OiAnICsgcmVzdWx0c0ZvclRlc3QudGVzdDsKKyAgICBhc3NlcnRFcXVhbHMocmVzdWx0c0ZvclRl
c3QuZXhwZWN0YXRpb25zLCBleHBlY3RhdGlvbnMsIG1lc3NhZ2UpOworICAgIGFzc2VydEVxdWFs
cyhyZXN1bHRzRm9yVGVzdC5tb2RpZmllcnMsIG1vZGlmaWVycywgbWVzc2FnZSk7Cit9CisKK2Z1
bmN0aW9uIGFzc2VydEVxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKQoreworICAgIGlm
IChleHBlY3RlZCAhPT0gYWN0dWFsKSB7CisgICAgICAgIGlmIChtZXNzYWdlKQorICAgICAgICAg
ICAgbWVzc2FnZSArPSAnICc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAn
JzsKKworICAgICAgICB0aHJvdyBFcnJvcihtZXNzYWdlICsgJ2dvdDogJyArIGFjdHVhbCArICcg
ZXhwZWN0ZWQ6ICcgKyBleHBlY3RlZCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0RmxhdHRl
blRyaWUoKQoreworICAgIHZhciB0ZXN0cyA9IHsKKyAgICAgICAgJ2Jhci5odG1sJzogeydyZXN1
bHRzJzogW1sxMDAsICdGJ11dLCAndGltZXMnOiBbWzEwMCwgMF1dfSwKKyAgICAgICAgJ2Zvbyc6
IHsKKyAgICAgICAgICAgICdiYXInOiB7CisgICAgICAgICAgICAgICAgJ2Jhei5odG1sJzogeydy
ZXN1bHRzJzogW1sxMDAsICdGJ11dLCAndGltZXMnOiBbWzEwMCwgMF1dfSwKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisgICAgdmFyIGV4cGVjdGVkRmxhdHRlbmVkVGVzdHMgPSB7
CisgICAgICAgICdiYXIuaHRtbCc6IHsncmVzdWx0cyc6IFtbMTAwLCAnRiddXSwgJ3RpbWVzJzog
W1sxMDAsIDBdXX0sCisgICAgICAgICdmb28vYmFyL2Jhei5odG1sJzogeydyZXN1bHRzJzogW1sx
MDAsICdGJ11dLCAndGltZXMnOiBbWzEwMCwgMF1dfSwKKyAgICB9OworICAgIGFzc2VydEVxdWFs
cyhKU09OLnN0cmluZ2lmeShmbGF0dGVuVHJpZSh0ZXN0cykpLCBKU09OLnN0cmluZ2lmeShleHBl
Y3RlZEZsYXR0ZW5lZFRlc3RzKSkKK30KKworZnVuY3Rpb24gdGVzdFJlbGVhc2VGYWlsKCkKK3sK
KyAgICB2YXIgYnVpbGRlciA9ICdXZWJraXQgV2luJzsKKyAgICB2YXIgdGVzdCA9ICdmb28vMS5o
dG1sJzsKKyAgICB2YXIgZXhwZWN0YXRpb25zQXJyYXkgPSBbCisgICAgICAgIHsnbW9kaWZpZXJz
JzogJ1JFTEVBU0UnLCAnZXhwZWN0YXRpb25zJzogJ0ZBSUwnfQorICAgIF07CisgICAgZ19leHBl
Y3RhdGlvbnMgPSAnUkVMRUFTRSA6ICcgKyB0ZXN0ICsgJyA9IEZBSUwnOworICAgIHJ1bkV4cGVj
dGF0aW9uc1Rlc3QoYnVpbGRlciwgdGVzdCwgJ0ZBSUwnLCAnUkVMRUFTRScpOworfQorCitmdW5j
dGlvbiB0ZXN0UmVsZWFzZUZhaWxEZWJ1Z0NyYXNoUmVsZWFzZUJ1aWxkZXIoKQoreworICAgIHZh
ciBidWlsZGVyID0gJ1dlYmtpdCBXaW4nOworICAgIHZhciB0ZXN0ID0gJ2Zvby8xLmh0bWwnOwor
ICAgIHZhciBleHBlY3RhdGlvbnNBcnJheSA9IFsKKyAgICAgICAgeydtb2RpZmllcnMnOiAnUkVM
RUFTRScsICdleHBlY3RhdGlvbnMnOiAnRkFJTCd9LAorICAgICAgICB7J21vZGlmaWVycyc6ICdE
RUJVRycsICdleHBlY3RhdGlvbnMnOiAnQ1JBU0gnfQorICAgIF07CisgICAgZ19leHBlY3RhdGlv
bnMgPSAnUkVMRUFTRSA6ICcgKyB0ZXN0ICsgJyA9IEZBSUxcbicgKworICAgICAgICAnREVCVUcg
OiAnICsgdGVzdCArICcgPSBDUkFTSCc7CisgICAgcnVuRXhwZWN0YXRpb25zVGVzdChidWlsZGVy
LCB0ZXN0LCAnRkFJTCcsICdSRUxFQVNFJyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWxlYXNlRmFp
bERlYnVnQ3Jhc2hEZWJ1Z0J1aWxkZXIoKQoreworICAgIHZhciBidWlsZGVyID0gJ1dlYmtpdCBX
aW4gKGRiZyknOworICAgIHZhciB0ZXN0ID0gJ2Zvby8xLmh0bWwnOworICAgIHZhciBleHBlY3Rh
dGlvbnNBcnJheSA9IFsKKyAgICAgICAgeydtb2RpZmllcnMnOiAnUkVMRUFTRScsICdleHBlY3Rh
dGlvbnMnOiAnRkFJTCd9LAorICAgICAgICB7J21vZGlmaWVycyc6ICdERUJVRycsICdleHBlY3Rh
dGlvbnMnOiAnQ1JBU0gnfQorICAgIF07CisgICAgZ19leHBlY3RhdGlvbnMgPSAnUkVMRUFTRSA6
ICcgKyB0ZXN0ICsgJyA9IEZBSUxcbicgKworICAgICAgICAnREVCVUcgOiAnICsgdGVzdCArICcg
PSBDUkFTSCc7CisgICAgcnVuRXhwZWN0YXRpb25zVGVzdChidWlsZGVyLCB0ZXN0LCAnQ1JBU0gn
LCAnREVCVUcnKTsKK30KKworZnVuY3Rpb24gdGVzdE92ZXJyaWRlSnVzdEJ1aWxkVHlwZSgpCit7
CisgICAgdmFyIHRlc3QgPSAnYmFyLzEuaHRtbCc7CisgICAgZ19leHBlY3RhdGlvbnMgPSAnV09O
VEZJWCA6IGJhciA9IEZBSUwgUEFTUyBUSU1FT1VUXG4nICsKKyAgICAgICAgJ1dPTlRGSVggTUFD
IDogJyArIHRlc3QgKyAnID0gRkFJTFxuJyArCisgICAgICAgICdMSU5VWCBERUJVRyA6ICcgKyB0
ZXN0ICsgJyA9IENSQVNIJzsKKyAgICAKKyAgICBydW5FeHBlY3RhdGlvbnNUZXN0KCdXZWJraXQg
V2luJywgdGVzdCwgJ0ZBSUwgUEFTUyBUSU1FT1VUJywgJ1dPTlRGSVgnKTsKKyAgICBydW5FeHBl
Y3RhdGlvbnNUZXN0KCdXZWJraXQgV2luIChkYmcpKDMpJywgdGVzdCwgJ0ZBSUwgUEFTUyBUSU1F
T1VUJywgJ1dPTlRGSVgnKTsKKyAgICBydW5FeHBlY3RhdGlvbnNUZXN0KCdXZWJraXQgTGludXgn
LCB0ZXN0LCAnRkFJTCBQQVNTIFRJTUVPVVQnLCAnV09OVEZJWCcpOworICAgIHJ1bkV4cGVjdGF0
aW9uc1Rlc3QoJ1dlYmtpdCBMaW51eCAoZGJnKSgzKScsIHRlc3QsICdDUkFTSCcsICdMSU5VWCBE
RUJVRycpOworICAgIHJ1bkV4cGVjdGF0aW9uc1Rlc3QoJ1dlYmtpdCBNYWMxMC41IChDRyknLCB0
ZXN0LCAnRkFJTCcsICdXT05URklYIE1BQycpOworICAgIHJ1bkV4cGVjdGF0aW9uc1Rlc3QoJ1dl
YmtpdCBNYWMxMC41IChDRykoZGJnKSgzKScsIHRlc3QsICdGQUlMJywgJ1dPTlRGSVggTUFDJyk7
Cit9CisKK2Z1bmN0aW9uIHRlc3RQbGF0Zm9ybUFuZEJ1aWxkVHlwZSgpCit7CisgICAgdmFyIHJ1
blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCA9IGZ1bmN0aW9uKGJ1aWxkZXIsIGV4cGVjdGVkUGxh
dGZvcm0sIGV4cGVjdGVkQnVpbGRUeXBlKSB7CisgICAgICAgIGdfcGVyQnVpbGRlclBsYXRmb3Jt
QW5kQnVpbGRUeXBlID0ge307CisgICAgICAgIGJ1aWxkSW5mbyA9IHBsYXRmb3JtQW5kQnVpbGRU
eXBlKGJ1aWxkZXIpOworICAgICAgICB2YXIgbWVzc2FnZSA9ICdCdWlsZGVyOiAnICsgYnVpbGRl
cjsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGJ1aWxkSW5mby5wbGF0Zm9ybSwgZXhwZWN0ZWRQbGF0
Zm9ybSwgbWVzc2FnZSk7CisgICAgICAgIGFzc2VydEVxdWFscyhidWlsZEluZm8uYnVpbGRUeXBl
LCBleHBlY3RlZEJ1aWxkVHlwZSwgbWVzc2FnZSk7CisgICAgfQorICAgIHJ1blBsYXRmb3JtQW5k
QnVpbGRUeXBlVGVzdCgnV2Via2l0IFdpbiAoZGVwcyknLCAnWFAnLCAnUkVMRUFTRScpOworICAg
IHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Via2l0IFdpbiAoZGVwcykoZGJnKSgxKScs
ICdYUCcsICdERUJVRycpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Via2l0
IFdpbiAoZGVwcykoZGJnKSgyKScsICdYUCcsICdERUJVRycpOworICAgIHJ1blBsYXRmb3JtQW5k
QnVpbGRUeXBlVGVzdCgnV2Via2l0IExpbnV4IChkZXBzKScsICdMVUNJRCcsICdSRUxFQVNFJyk7
CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXZWJraXQgTGludXggKGRlcHMpKGRi
ZykoMSknLCAnTFVDSUQnLCAnREVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRl
c3QoJ1dlYmtpdCBMaW51eCAoZGVwcykoZGJnKSgyKScsICdMVUNJRCcsICdERUJVRycpOworICAg
IHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Via2l0IE1hYzEwLjYgKENHKShkZXBzKScs
ICdTTk9XTEVPUEFSRCcsICdSRUxFQVNFJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVU
ZXN0KCdXZWJraXQgTWFjMTAuNiAoQ0cpKGRlcHMpKGRiZykoMSknLCAnU05PV0xFT1BBUkQnLCAn
REVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ1dlYmtpdCBNYWMxMC42
IChDRykoZGVwcykoZGJnKSgyKScsICdTTk9XTEVPUEFSRCcsICdERUJVRycpOworICAgIHJ1blBs
YXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Via2l0IFdpbicsICdYUCcsICdSRUxFQVNFJyk7Cisg
ICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXZWJraXQgVmlzdGEnLCAnVklTVEEnLCAn
UkVMRUFTRScpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Via2l0IFdpbjcn
LCAnV0lONycsICdSRUxFQVNFJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdX
ZWJraXQgV2luIChkYmcpKDEpJywgJ1hQJywgJ0RFQlVHJyk7CisgICAgcnVuUGxhdGZvcm1BbmRC
dWlsZFR5cGVUZXN0KCdXZWJraXQgV2luIChkYmcpKDIpJywgJ1hQJywgJ0RFQlVHJyk7CisgICAg
cnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXZWJraXQgTGludXgnLCAnTFVDSUQnLCAnUkVM
RUFTRScpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Via2l0IExpbnV4IDMy
JywgJ0xVQ0lEJywgJ1JFTEVBU0UnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3Qo
J1dlYmtpdCBMaW51eCAoZGJnKSgxKScsICdMVUNJRCcsICdERUJVRycpOworICAgIHJ1blBsYXRm
b3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Via2l0IExpbnV4IChkYmcpKDIpJywgJ0xVQ0lEJywgJ0RF
QlVHJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXZWJraXQgTWFjMTAuNSAo
Q0cpJywgJ0xFT1BBUkQnLCAnUkVMRUFTRScpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBl
VGVzdCgnV2Via2l0IE1hYzEwLjUgKENHKShkYmcpKDEpJywgJ0xFT1BBUkQnLCAnREVCVUcnKTsK
KyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ1dlYmtpdCBNYWMxMC41IChDRykoZGJn
KSgyKScsICdMRU9QQVJEJywgJ0RFQlVHJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVU
ZXN0KCdXZWJraXQgTWFjMTAuNiAoQ0cpJywgJ1NOT1dMRU9QQVJEJywgJ1JFTEVBU0UnKTsKKyAg
ICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ1dlYmtpdCBNYWMxMC42IChDRykoZGJnKScs
ICdTTk9XTEVPUEFSRCcsICdERUJVRycpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVz
dCgnV2Via2l0IFdpbiAtIEdQVScsICdYUCcsICdSRUxFQVNFJyk7CisgICAgcnVuUGxhdGZvcm1B
bmRCdWlsZFR5cGVUZXN0KCdXZWJraXQgVmlzdGEgLSBHUFUnLCAnVklTVEEnLCAnUkVMRUFTRScp
OworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Via2l0IFdpbjcgLSBHUFUnLCAn
V0lONycsICdSRUxFQVNFJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXZWJr
aXQgV2luIChkYmcpKDEpIC0gR1BVJywgJ1hQJywgJ0RFQlVHJyk7CisgICAgcnVuUGxhdGZvcm1B
bmRCdWlsZFR5cGVUZXN0KCdXZWJraXQgV2luIChkYmcpKDIpIC0gR1BVJywgJ1hQJywgJ0RFQlVH
Jyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXZWJraXQgTGludXggLSBHUFUn
LCAnTFVDSUQnLCAnUkVMRUFTRScpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgn
V2Via2l0IExpbnV4IDMyIC0gR1BVJywgJ0xVQ0lEJywgJ1JFTEVBU0UnKTsKKyAgICBydW5QbGF0
Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ1dlYmtpdCBMaW51eCAoZGJnKSgxKSAtIEdQVScsICdMVUNJ
RCcsICdERUJVRycpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2Via2l0IExp
bnV4IChkYmcpKDIpIC0gR1BVJywgJ0xVQ0lEJywgJ0RFQlVHJyk7CisgICAgcnVuUGxhdGZvcm1B
bmRCdWlsZFR5cGVUZXN0KCdXZWJraXQgTWFjMTAuNSAtIEdQVScsICdMRU9QQVJEJywgJ1JFTEVB
U0UnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ1dlYmtpdCBNYWMxMC41IChk
YmcpKDEpIC0gR1BVJywgJ0xFT1BBUkQnLCAnREVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1
aWxkVHlwZVRlc3QoJ1dlYmtpdCBNYWMxMC41IChkYmcpKDIpIC0gR1BVJywgJ0xFT1BBUkQnLCAn
REVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ1dlYmtpdCBNYWMxMC42
IC0gR1BVJywgJ1NOT1dMRU9QQVJEJywgJ1JFTEVBU0UnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1
aWxkVHlwZVRlc3QoJ1dlYmtpdCBNYWMxMC42IChkYmcpIC0gR1BVJywgJ1NOT1dMRU9QQVJEJywg
J0RFQlVHJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdHUFUgV2luNyBUZXN0
cyAtIEdQVScsICdXSU43JywgJ1JFTEVBU0UnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlw
ZVRlc3QoJ0dQVSBXaW43IFRlc3RzIChkYmcpKDEpIC0gR1BVJywgJ1dJTjcnLCAnREVCVUcnKTsK
KyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ0dQVSBXaW43IFRlc3RzIChkYmcpKDIp
IC0gR1BVJywgJ1dJTjcnLCAnREVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRl
c3QoJ0dQVSBXaW43IHg2NCBUZXN0cyAoZGJnKSgxKSAtIEdQVScsICdXSU43JywgJ0RFQlVHJyk7
CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdHUFUgV2luNyB4NjQgVGVzdHMgKGRi
ZykoMikgLSBHUFUnLCAnV0lONycsICdERUJVRycpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRU
eXBlVGVzdCgnR1BVIFZpc3RhIFRlc3RzIChkYmcpKDEpIC0gR1BVJywgJ1ZJU1RBJywgJ0RFQlVH
Jyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdHUFUgVmlzdGEgVGVzdHMgKGRi
ZykoMikgLSBHUFUnLCAnVklTVEEnLCAnREVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxk
VHlwZVRlc3QoJ0dQVSBWaXN0YSB4NjQgVGVzdHMgKGRiZykgLSBHUFUnLCAnVklTVEEnLCAnREVC
VUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ0dQVSBNYWMgMTAuNiBUZXN0
cyAtIEdQVScsICdTTk9XTEVPUEFSRCcsICdSRUxFQVNFJyk7CisgICAgcnVuUGxhdGZvcm1BbmRC
dWlsZFR5cGVUZXN0KCdHUFUgTWFjIDEwLjYgVGVzdHMgKGRiZykgLSBHUFUnLCAnU05PV0xFT1BB
UkQnLCAnREVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ0dQVSBNYWMg
MTAuNSBUZXN0cyAoZGJnKSAtIEdQVScsICdMRU9QQVJEJywgJ0RFQlVHJyk7CisgICAgcnVuUGxh
dGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdHUFUgTGludXggVGVzdHMgKGRiZykoMSkgLSBHUFUnLCAn
TFVDSUQnLCAnREVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ0dQVSBM
aW51eCBUZXN0cyAoZGJnKSgyKSAtIEdQVScsICdMVUNJRCcsICdERUJVRycpOworICAgIHJ1blBs
YXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnR1BVIFdpbjcgVGVzdHMgKGRiZykoMSkgLSBHUFUnLCAn
V0lONycsICdERUJVRycpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnR1BVIFdp
bjcgVGVzdHMgKGRiZykoMikgLSBHUFUnLCAnV0lONycsICdERUJVRycpOworICAgIHJ1blBsYXRm
b3JtQW5kQnVpbGRUeXBlVGVzdCgnR1BVIExpbnV4IFRlc3RzIHg2NCAtIEdQVScsICdMVUNJRCcs
ICdSRUxFQVNFJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdYUCBUZXN0cycs
ICdYUCcsICdSRUxFQVNFJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdJbnRl
cmFjdGl2ZSBUZXN0cyAoZGJnKScsICdYUCcsICdERUJVRycpOworICAgIAorICAgIGdfY3VycmVu
dFN0YXRlLmdyb3VwID0gJ0BUb1QgLSB3ZWJraXQub3JnJzsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1
aWxkVHlwZVRlc3QoJ0Nocm9taXVtIFdpbiBSZWxlYXNlIChUZXN0cyknLCAnWFAnLCAnUkVMRUFT
RScpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnQ2hyb21pdW0gTGludXggUmVs
ZWFzZSAoVGVzdHMpJywgJ0xVQ0lEJywgJ1JFTEVBU0UnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1
aWxkVHlwZVRlc3QoJ0Nocm9taXVtIE1hYyBSZWxlYXNlIChUZXN0cyknLCAnU05PV0xFT1BBUkQn
LCAnUkVMRUFTRScpOworICAgIAorICAgIC8vIEZJWE1FOiBUaGVzZSBwbGF0Zm9ybXMgc2hvdWxk
IG1hdGNoIHdoYXRldmVyIHdlIHVzZSBpbiB0aGUgdGVzdF9leHBlY3RhdGlvbnMudHh0IGZvcm1h
dC4KKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ0xlb3BhcmQgSW50ZWwgUmVsZWFz
ZSAoVGVzdHMpJywgJ0FQUExFX0xFT1BBUkQnLCAnUkVMRUFTRScpOworICAgIHJ1blBsYXRmb3Jt
QW5kQnVpbGRUeXBlVGVzdCgnTGVvcGFyZCBJbnRlbCBEZWJ1ZyAoVGVzdHMpJywgJ0FQUExFX0xF
T1BBUkQnLCAnREVCVUcnKTsKKyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ1Nub3dM
ZW9wYXJkIEludGVsIFJlbGVhc2UgKFRlc3RzKScsICdBUFBMRV9TTk9XTEVPUEFSRCcsICdSRUxF
QVNFJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdTbm93TGVvcGFyZCBJbnRl
bCBMZWFrcycsICdBUFBMRV9TTk9XTEVPUEFSRCcsICdSRUxFQVNFJyk7CisgICAgcnVuUGxhdGZv
cm1BbmRCdWlsZFR5cGVUZXN0KCdTbm93TGVvcGFyZCBJbnRlbCBEZWJ1ZyAoVGVzdHMpJywgJ0FQ
UExFX1NOT1dMRU9QQVJEJywgJ0RFQlVHJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVU
ZXN0KCdHVEsgTGludXggMzItYml0IFJlbGVhc2UnLCAnR1RLX0xJTlVYJywgJ1JFTEVBU0UnKTsK
KyAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ0dUSyBMaW51eCAzMi1iaXQgRGVidWcn
LCAnR1RLX0xJTlVYJywgJ0RFQlVHJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0
KCdHVEsgTGludXggNjQtYml0IERlYnVnJywgJ0dUS19MSU5VWCcsICdERUJVRycpOworICAgIHJ1
blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnUXQgTGludXggUmVsZWFzZScsICdRVF9MSU5VWCcs
ICdSRUxFQVNFJyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXaW5kb3dzIDcg
UmVsZWFzZSAoVGVzdHMpJywgJ0FQUExFX1dJTjcnLCAnUkVMRUFTRScpOworICAgIHJ1blBsYXRm
b3JtQW5kQnVpbGRUeXBlVGVzdCgnV2luZG93cyBYUCBEZWJ1ZyAoVGVzdHMpJywgJ0FQUExFX1hQ
JywgJ0RFQlVHJyk7CisgICAgCisgICAgLy8gRklYTUU6IFNob3VsZCBXZWJLaXQyIGJlIGl0J3Mg
b3duIHBsYXRmb3JtPworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnU25vd0xlb3Bh
cmQgSW50ZWwgUmVsZWFzZSAoV2ViS2l0MiBUZXN0cyknLCAnQVBQTEVfU05PV0xFT1BBUkQnLCAn
UkVMRUFTRScpOworICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnU25vd0xlb3BhcmQg
SW50ZWwgRGVidWcgKFdlYktpdDIgVGVzdHMpJywgJ0FQUExFX1NOT1dMRU9QQVJEJywgJ0RFQlVH
Jyk7CisgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdXaW5kb3dzIDcgUmVsZWFzZSAo
V2ViS2l0MiBUZXN0cyknLCAnQVBQTEVfV0lONycsICdSRUxFQVNFJyk7ICAgIAorfQorCitmdW5j
dGlvbiB0ZXN0UmVhbE1vZGlmaWVycygpCit7CisgICAgYXNzZXJ0RXF1YWxzKHJlYWxNb2RpZmll
cnMoJ0JVR0ZPTyBMSU5VWCBMRU9QQVJEIFdJTiBERUJVRyBTTE9XJyksICdTTE9XJyk7CisgICAg
YXNzZXJ0RXF1YWxzKHJlYWxNb2RpZmllcnMoJ0JVR0ZPTyBMVUNJRCBNQUMgWFAgUkVMRUFTRSBT
S0lQJyksICdTS0lQJyk7CisgICAgYXNzZXJ0RXF1YWxzKHJlYWxNb2RpZmllcnMoJ0JVR0ZPTycp
LCAnJyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RBbGxUZXN0c1dpdGhTYW1lUGxhdGZvcm1BbmRCdWls
ZFR5cGUoKQoreworICAgIC8vIEZJWE1FOiB0ZXN0IHRoYXQgYWxsVGVzdHNXaXRoU2FtZVBsYXRm
b3JtQW5kQnVpbGRUeXBlIGFjdHVhbGx5IHJldHVybnMgdGhlIHJpZ2h0IHNldCBvZiB0ZXN0cy4K
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IFBMQVRGT1JNUy5sZW5ndGg7IGkrKykgeworICAgICAg
ICBpZiAoIWdfYWxsVGVzdHNCeVBsYXRmb3JtQW5kQnVpbGRUeXBlW1BMQVRGT1JNU1tpXV0pCisg
ICAgICAgICAgICB0aHJvdyBFcnJvcihQTEFURk9STVNbaV0gKyAnIGlzIG5vdCBpbiBnX2FsbFRl
c3RzQnlQbGF0Zm9ybUFuZEJ1aWxkVHlwZScpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdEZp
bHRlckJ1Z3MoKQoreworICAgIHZhciBmaWx0ZXJlZCA9IGZpbHRlckJ1Z3MoJ1NLSVAgQlVHMTIz
IEJVR0NSMTIzIEJVR1dLMTIzIFNMT1cgQlVHX1RPTlkgREVCVUcnKQorICAgIGFzc2VydEVxdWFs
cyhmaWx0ZXJlZC5tb2RpZmllcnMsICdTS0lQIFNMT1cgREVCVUcnKTsKKyAgICBhc3NlcnRFcXVh
bHMoZmlsdGVyZWQuYnVncywgJ0JVRzEyMyBCVUdDUjEyMyBCVUdXSzEyMyBCVUdfVE9OWScpOwor
CisgICAgZmlsdGVyZWQgPSBmaWx0ZXJCdWdzKCdTS0lQIFNMT1cgREVCVUcnKQorICAgIGFzc2Vy
dEVxdWFscyhmaWx0ZXJlZC5tb2RpZmllcnMsICdTS0lQIFNMT1cgREVCVUcnKTsKKyAgICBhc3Nl
cnRFcXVhbHMoZmlsdGVyZWQuYnVncywgJycpOworfQorCitmdW5jdGlvbiB0ZXN0R2V0RXhwZWN0
YXRpb25zKCkKK3sKKyAgICBnX2J1aWxkZXJzWydXZWJLaXQgV2luJ10gPSB0cnVlOworICAgIGdf
cmVzdWx0c0J5QnVpbGRlciA9IHsKKyAgICAgICAgJ1dlYktpdCBXaW4nOiB7CisgICAgICAgICAg
ICAndGVzdHMnOiB7CisgICAgICAgICAgICAgICAgJ2Zvby90ZXN0MS5odG1sJzogeydyZXN1bHRz
JzogW1sxMDAsICdGJ11dLCAndGltZXMnOiBbWzEwMCwgMF1dfSwKKyAgICAgICAgICAgICAgICAn
Zm9vL3Rlc3QzLmh0bWwnOiB7J3Jlc3VsdHMnOiBbWzEwMCwgJ0YnXV0sICd0aW1lcyc6IFtbMTAw
LCAwXV19LAorICAgICAgICAgICAgICAgICd0ZXN0MS5odG1sJzogeydyZXN1bHRzJzogW1sxMDAs
ICdGJ11dLCAndGltZXMnOiBbWzEwMCwgMF1dfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgZ19leHBlY3RhdGlvbnMgPSAnQlVHMTIzIDogZm9vID0gRkFJTCBQQVNTIENS
QVNIXG4nICsKKyAgICAgICAgJ1JFTEVBU0UgQlVHRk9PIDogZm9vL3Rlc3QxLmh0bWwgPSBGQUlM
XG4nICsKKyAgICAgICAgJ0RFQlVHIDogZm9vL3Rlc3QxLmh0bWwgPSBDUkFTSFxuJyArCisgICAg
ICAgICdCVUc0NTYgOiBmb28vdGVzdDIuaHRtbCA9IEZBSUxcbicgKworICAgICAgICAnTElOVVgg
REVCVUcgOiBmb28vdGVzdDIuaHRtbCA9IENSQVNIXG4nICsKKyAgICAgICAgJ1JFTEVBU0UgOiB0
ZXN0MS5odG1sID0gRkFJTFxuJyArCisgICAgICAgICdERUJVRyA6IHRlc3QxLmh0bWwgPSBDUkFT
SFxuJyArCisgICAgICAgICdXSU43IDogaHR0cC90ZXN0cy9hcHBjYWNoZS9pbnRlcnJ1cHRlZC11
cGRhdGUuaHRtbCA9IFRJTUVPVVRcbicgKworICAgICAgICAnTUFDIExJTlVYIFhQIFZJU1RBIDog
aHR0cC90ZXN0cy9hcHBjYWNoZS9pbnRlcnJ1cHRlZC11cGRhdGUuaHRtbCA9IEZBSUxcbic7CisK
KyAgICBwcm9jZXNzRXhwZWN0YXRpb25zKCk7CisgICAgCisgICAgdmFyIGV4cGVjdGF0aW9ucyA9
IGdldEV4cGVjdGF0aW9ucygnZm9vL3Rlc3QxLmh0bWwnLCAnWFAnLCAnREVCVUcnKTsKKyAgICBh
c3NlcnRFcXVhbHMoSlNPTi5zdHJpbmdpZnkoZXhwZWN0YXRpb25zKSwgJ3sibW9kaWZpZXJzIjoi
REVCVUciLCJleHBlY3RhdGlvbnMiOiJDUkFTSCJ9Jyk7CisKKyAgICB2YXIgZXhwZWN0YXRpb25z
ID0gZ2V0RXhwZWN0YXRpb25zKCdmb28vdGVzdDEuaHRtbCcsICdMVUNJRCcsICdSRUxFQVNFJyk7
CisgICAgYXNzZXJ0RXF1YWxzKEpTT04uc3RyaW5naWZ5KGV4cGVjdGF0aW9ucyksICd7Im1vZGlm
aWVycyI6IlJFTEVBU0UgQlVHRk9PIiwiZXhwZWN0YXRpb25zIjoiRkFJTCJ9Jyk7CisKKyAgICB2
YXIgZXhwZWN0YXRpb25zID0gZ2V0RXhwZWN0YXRpb25zKCdmb28vdGVzdDIuaHRtbCcsICdMVUNJ
RCcsICdSRUxFQVNFJyk7CisgICAgYXNzZXJ0RXF1YWxzKEpTT04uc3RyaW5naWZ5KGV4cGVjdGF0
aW9ucyksICd7Im1vZGlmaWVycyI6IkJVRzQ1NiIsImV4cGVjdGF0aW9ucyI6IkZBSUwifScpOwor
CisgICAgdmFyIGV4cGVjdGF0aW9ucyA9IGdldEV4cGVjdGF0aW9ucygnZm9vL3Rlc3QyLmh0bWwn
LCAnTEVPUEFSRCcsICdERUJVRycpOworICAgIGFzc2VydEVxdWFscyhKU09OLnN0cmluZ2lmeShl
eHBlY3RhdGlvbnMpLCAneyJtb2RpZmllcnMiOiJCVUc0NTYiLCJleHBlY3RhdGlvbnMiOiJGQUlM
In0nKTsKKworICAgIHZhciBleHBlY3RhdGlvbnMgPSBnZXRFeHBlY3RhdGlvbnMoJ2Zvby90ZXN0
Mi5odG1sJywgJ0xVQ0lEJywgJ0RFQlVHJyk7CisgICAgYXNzZXJ0RXF1YWxzKEpTT04uc3RyaW5n
aWZ5KGV4cGVjdGF0aW9ucyksICd7Im1vZGlmaWVycyI6IkxJTlVYIERFQlVHIiwiZXhwZWN0YXRp
b25zIjoiQ1JBU0gifScpOworCisgICAgdmFyIGV4cGVjdGF0aW9ucyA9IGdldEV4cGVjdGF0aW9u
cygnZm9vL3Rlc3QzLmh0bWwnLCAnTFVDSUQnLCAnREVCVUcnKTsKKyAgICBhc3NlcnRFcXVhbHMo
SlNPTi5zdHJpbmdpZnkoZXhwZWN0YXRpb25zKSwgJ3sibW9kaWZpZXJzIjoiQlVHMTIzIiwiZXhw
ZWN0YXRpb25zIjoiRkFJTCBQQVNTIENSQVNIIn0nKTsKKworICAgIHZhciBleHBlY3RhdGlvbnMg
PSBnZXRFeHBlY3RhdGlvbnMoJ3Rlc3QxLmh0bWwnLCAnWFAnLCAnREVCVUcnKTsKKyAgICBhc3Nl
cnRFcXVhbHMoSlNPTi5zdHJpbmdpZnkoZXhwZWN0YXRpb25zKSwgJ3sibW9kaWZpZXJzIjoiREVC
VUciLCJleHBlY3RhdGlvbnMiOiJDUkFTSCJ9Jyk7CisKKyAgICB2YXIgZXhwZWN0YXRpb25zID0g
Z2V0RXhwZWN0YXRpb25zKCd0ZXN0MS5odG1sJywgJ0xVQ0lEJywgJ1JFTEVBU0UnKTsKKyAgICBh
c3NlcnRFcXVhbHMoSlNPTi5zdHJpbmdpZnkoZXhwZWN0YXRpb25zKSwgJ3sibW9kaWZpZXJzIjoi
UkVMRUFTRSIsImV4cGVjdGF0aW9ucyI6IkZBSUwifScpOworCisgICAgdmFyIGV4cGVjdGF0aW9u
cyA9IGdldEV4cGVjdGF0aW9ucygnaHR0cC90ZXN0cy9hcHBjYWNoZS9pbnRlcnJ1cHRlZC11cGRh
dGUuaHRtbCcsICdXSU43JywgJ1JFTEVBU0UnKTsKKyAgICBhc3NlcnRFcXVhbHMoSlNPTi5zdHJp
bmdpZnkoZXhwZWN0YXRpb25zKSwgJ3sibW9kaWZpZXJzIjoiV0lONyIsImV4cGVjdGF0aW9ucyI6
IlRJTUVPVVQifScpOworCisgICAgdmFyIGV4cGVjdGF0aW9ucyA9IGdldEV4cGVjdGF0aW9ucygn
aHR0cC90ZXN0cy9hcHBjYWNoZS9pbnRlcnJ1cHRlZC11cGRhdGUuaHRtbCcsICdMRU9QQVJEJywg
J1JFTEVBU0UnKTsKKyAgICBhc3NlcnRFcXVhbHMoSlNPTi5zdHJpbmdpZnkoZXhwZWN0YXRpb25z
KSwgJ3sibW9kaWZpZXJzIjoiTUFDIExJTlVYIFhQIFZJU1RBIiwiZXhwZWN0YXRpb25zIjoiRkFJ
TCJ9Jyk7CisKKyAgICB2YXIgZXhwZWN0YXRpb25zID0gZ2V0RXhwZWN0YXRpb25zKCdodHRwL3Rl
c3RzL2FwcGNhY2hlL2ludGVycnVwdGVkLXVwZGF0ZS5odG1sJywgJ0xVQ0lEJywgJ1JFTEVBU0Un
KTsKKyAgICBhc3NlcnRFcXVhbHMoSlNPTi5zdHJpbmdpZnkoZXhwZWN0YXRpb25zKSwgJ3sibW9k
aWZpZXJzIjoiTUFDIExJTlVYIFhQIFZJU1RBIiwiZXhwZWN0YXRpb25zIjoiRkFJTCJ9Jyk7CisK
KyAgICB2YXIgZXhwZWN0YXRpb25zID0gZ2V0RXhwZWN0YXRpb25zKCdodHRwL3Rlc3RzL2FwcGNh
Y2hlL2ludGVycnVwdGVkLXVwZGF0ZS5odG1sJywgJ1ZJU1RBJywgJ1JFTEVBU0UnKTsKKyAgICBh
c3NlcnRFcXVhbHMoSlNPTi5zdHJpbmdpZnkoZXhwZWN0YXRpb25zKSwgJ3sibW9kaWZpZXJzIjoi
TUFDIExJTlVYIFhQIFZJU1RBIiwiZXhwZWN0YXRpb25zIjoiRkFJTCJ9Jyk7Cit9CisKK2Z1bmN0
aW9uIHRlc3RTdWJzdHJpbmdMaXN0KCkKK3sKKyAgICBnX2N1cnJlbnRTdGF0ZS50ZXN0VHlwZSA9
ICdndGVzdCc7CisgICAgZ19jdXJyZW50U3RhdGUudGVzdHMgPSAndGVzdC5GTEFLWV9mb28gdGVz
dC5GQUlMU19mb28xIHRlc3QuRElTQUJMRURfZm9vMiB0ZXN0Lk1BWUJFX2ZvbzMgdGVzdC5mb280
JzsKKyAgICBhc3NlcnRFcXVhbHMoc3Vic3RyaW5nTGlzdCgpLnRvU3RyaW5nKCksICd0ZXN0LmZv
byx0ZXN0LmZvbzEsdGVzdC5mb28yLHRlc3QuZm9vMyx0ZXN0LmZvbzQnKTsKKworICAgIGdfY3Vy
cmVudFN0YXRlLnRlc3RUeXBlID0gJ2xheW91dC10ZXN0cyc7CisgICAgZ19jdXJyZW50U3RhdGUu
dGVzdHMgPSAnZm9vL2Jhci5GTEFLWV9mb28uaHRtbCc7CisgICAgYXNzZXJ0RXF1YWxzKHN1YnN0
cmluZ0xpc3QoKS50b1N0cmluZygpLCAnZm9vL2Jhci5GTEFLWV9mb28uaHRtbCcpOworfQorCitm
dW5jdGlvbiB0ZXN0SHRtbEZvclRlc3RzV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXMoKQor
eworICAgIHZhciBidWlsZGVyID0gJ1dlYktpdCBXaW4nOworICAgIGdfcGVyQnVpbGRlcldpdGhF
eHBlY3RhdGlvbnNCdXROb0ZhaWx1cmVzW2J1aWxkZXJdID0gWydwYXNzaW5nLXRlc3QxLmh0bWwn
LCAncGFzc2luZy10ZXN0Mi5odG1sJ107CisgICAgZ19wZXJCdWlsZGVyU2tpcHBlZFBhdGhzW2J1
aWxkZXJdID0gWydza2lwcGVkLXRlc3QxLmh0bWwnXTsKKyAgICBnX3Jlc3VsdHNCeUJ1aWxkZXJb
YnVpbGRlcl0gPSB7IGJ1aWxkTnVtYmVyczogWzUsIDQsIDMsIDFdIH07CisKKyAgICBnX2N1cnJl
bnRTdGF0ZS5zaG93VW5leHBlY3RlZFBhc3NlcyA9IHRydWU7CisgICAgZ19jdXJyZW50U3RhdGUu
c2hvd1NraXBwZWQgPSB0cnVlOworICAgIAorICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBjb250YWluZXIuaW5uZXJIVE1MID0gaHRtbEZvclRl
c3RzV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXMoYnVpbGRlcik7CisgICAgYXNzZXJ0RXF1
YWxzKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcjcGFzc2luZy10ZXN0cyA+IGRpdicpLmxl
bmd0aCwgMik7CisgICAgYXNzZXJ0RXF1YWxzKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcj
c2tpcHBlZC10ZXN0cyA+IGRpdicpLmxlbmd0aCwgMSk7CisgICAgCisgICAgZ19jdXJyZW50U3Rh
dGUuc2hvd1VuZXhwZWN0ZWRQYXNzZXMgPSBmYWxzZTsKKyAgICBnX2N1cnJlbnRTdGF0ZS5zaG93
U2tpcHBlZCA9IGZhbHNlOworICAgIAorICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKTsKKyAgICBjb250YWluZXIuaW5uZXJIVE1MID0gaHRtbEZvclRlc3Rz
V2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXMoYnVpbGRlcik7CisgICAgYXNzZXJ0RXF1YWxz
KGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcjcGFzc2luZy10ZXN0cyA+IGRpdicpLmxlbmd0
aCwgMCk7CisgICAgYXNzZXJ0RXF1YWxzKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcjc2tp
cHBlZC10ZXN0cyA+IGRpdicpLmxlbmd0aCwgMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIZWFkZXJG
b3JUZXN0VGFibGVIdG1sKCkKK3sKKyAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2Jyk7CisgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGhlYWRlckZvclRlc3RU
YWJsZUh0bWwoKTsKKyAgICBhc3NlcnRFcXVhbHMoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwo
J2lucHV0JykubGVuZ3RoLCA1KTsKK30KKworZnVuY3Rpb24gcnVuVGVzdHMoKQoreworICAgIGRv
Y3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJzxwcmUgaWQ9dW5pdHRlc3QtcmVzdWx0cz48L3ByZT4n
OworICAgIGZvciAodmFyIG5hbWUgaW4gd2luZG93KSB7CisgICAgICAgIGlmICh0eXBlb2Ygd2lu
ZG93W25hbWVdID09ICdmdW5jdGlvbicgJiYgL150ZXN0Ly50ZXN0KG5hbWUpKSB7CisgICAgICAg
ICAgICBzZXR1cEV4cGVjdGF0aW9uc1Rlc3QoKTsKKworICAgICAgICAgICAgdmFyIHRlc3QgPSB3
aW5kb3dbbmFtZV07CisgICAgICAgICAgICB2YXIgZXJyb3IgPSBudWxsOworCisgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgIHRlc3QoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGVy
cikgeworICAgICAgICAgICAgICAgIGVycm9yID0gZXJyOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB2YXIgcmVzdWx0ID0gZXJyb3IgPyBlcnJvci50b1N0cmluZygpIDogJ1BBU1NFRCc7
CisgICAgICAgICAgICAkKCd1bml0dGVzdC1yZXN1bHRzJykuaW5zZXJ0QWRqYWNlbnRIVE1MKCJi
ZWZvcmVFbmQiLCBuYW1lICsgJzogJyArIHJlc3VsdCArICdcbicpOworICAgICAgICB9CisgICAg
fQorfQorCitpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PSAnY29tcGxldGUnKQorICAgIHJ1blRl
c3RzKCk7CitlbHNlCisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBydW5UZXN0
cywgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvc3RhdGlj
LWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuaHRtbCBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJk
U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RpbWVsaW5lX2V4cGxvcmVyLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTRiMDZiNTBlZTc4M2MxZjUwNTliOGU3M2U2MTVmMTYzNTQyMGE5ZgotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RpbWVs
aW5lX2V4cGxvcmVyLmh0bWwKQEAgLTAsMCArMSw0NTYgQEAKKzwhLS0gQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KK3RoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCistLT4KKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisKKzxoZWFkPgorPHRpdGxlPlRl
c3QgVGltZWxpbmUgRXhwbG9yZXI8L3RpdGxlPgorPHN0eWxlPgorYm9keSB7CisgICAgZm9udC1m
YW1pbHk6IEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CisgICAgZm9udC1zaXplOiAxMnB4
OworfQorCisjdGltZWxpbmUtY29udGFpbmVyIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cit9
CisKKyNpbnNwZWN0b3ItY29udGFpbmVyIHsKKyAgICB3aWR0aDogMzAwcHg7CisgICAgZmxvYXQ6
IHJpZ2h0OworICAgIGJvcmRlci1sZWZ0OiAxcHggZGFzaGVkOworICAgIHBhZGRpbmctbGVmdDog
NXB4OworICAgIG1hcmdpbi1sZWZ0OiA1cHg7Cit9CisKKyNpbnNwZWN0b3ItY29udGFpbmVyIGNh
cHRpb24geworICAgIGJhY2tncm91bmQ6ICNlZWU7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cisg
ICAgcGFkZGluZzogMnB4OworICAgIGZvbnQtc2l6ZTogMTRweDsKKyAgICB0ZXh0LWFsaWduOiBs
ZWZ0OworfQorCisjaW5zcGVjdG9yLXRhYmxlIHsKKyAgICB3aWR0aDogMTAwJTsKK30KKworI2lu
c3BlY3Rvci10YWJsZSB0ZCB7CisgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKK30KKworI2luc3Bl
Y3Rvci10YWJsZSAubGFiZWwgeworICAgIGNvbG9yOiAjNjY2OworICAgIHRleHQtYWxpZ246IHJp
Z2h0OworICAgIHdpZHRoOiAxMGVtOworfQorCisjaW5zcGVjdG9yLXRhYmxlIC5kZWx0YS5wb3Np
dGl2ZSB7CisgICAgY29sb3I6ICMwOTA7Cit9CisKKyNpbnNwZWN0b3ItdGFibGUgLmRlbHRhLm5l
Z2F0aXZlIHsKKyAgICBjb2xvcjogIzkwMDsKK30KKworI2luc3BlY3Rvci1jb250YWluZXIgLmJ1
dHRvbnMgeworICAgIHBhZGRpbmc6IDFlbSAwOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30K
KworI2luc3BlY3Rvci1jb250YWluZXIgI2J1aWxkLWJ1dHRvbnMgeworICAgIGJvcmRlci10b3A6
IDFweCBkYXNoZWQ7Cit9CisKKyNpbmRpY2F0b3IgeworICAgIHRvcDogMDsKKyAgICB3aWR0aDog
MXB4OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBiYWNrZ3JvdW5kOiByZWQ7Cit9Cis8
L3N0eWxlPgorPHNjcmlwdCBzcmM9ImR5Z3JhcGgtY29tYmluZWQuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9ImJ1aWxkZXJzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJkYXNoYm9hcmRf
YmFzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgordmFyIEZBSUxJTkdfVEVTVFNfREFUQVNFVF9O
QU1FID0gJ0ZhaWxpbmcgdGVzdHMnOworCit2YXIgZ19zaG91bGRTaG93V2ViS2l0UmV2aXNpb25z
T25seSA9IGlzVGlwT2ZUcmVlV2ViS2l0QnVpbGRlcigpOwordmFyIGdfZHlncmFwaDsKK3ZhciBn
X2J1aWxkSW5kaWNlc0J5VGltZXN0YW1wID0ge307Cit2YXIgZ19jdXJyZW50QnVpbGRJbmRleCA9
IC0xOwordmFyIGdfY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0czsKKworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisvLyBNZXRob2RzIGFuZCBvYmplY3RzIGZyb20gZGFzaGJvYXJkX2Jhc2UuanMgdG8g
b3ZlcnJpZGUuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2Z1bmN0aW9uIGdlbmVyYXRlUGFnZSgp
Cit7CisgICAgZ19idWlsZEluZGljZXNCeVRpbWVzdGFtcCA9IHt9OworICAgIHZhciByZXN1bHRz
ID0gZ19yZXN1bHRzQnlCdWlsZGVyW2dfY3VycmVudFN0YXRlLmJ1aWxkZXJdOworCisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV0ubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgdmFyIGJ1aWxkRGF0ZSA9IG5ldyBEYXRlKHJlc3VsdHNbVElNRVNUQU1QU19L
RVldW2ldICogMTAwMCk7CisgICAgICAgIGdfYnVpbGRJbmRpY2VzQnlUaW1lc3RhbXBbYnVpbGRE
YXRlLmdldFRpbWUoKV0gPSBpOworICAgIH0KKworICAgIGlmIChnX2N1cnJlbnRTdGF0ZS5idWls
ZFRpbWVzdGFtcCAhPSAtMSAmJiBnX2N1cnJlbnRTdGF0ZS5idWlsZFRpbWVzdGFtcCBpbiBnX2J1
aWxkSW5kaWNlc0J5VGltZXN0YW1wKSB7CisgICAgICAgIHZhciBuZXdCdWlsZEluZGV4ID0gZ19i
dWlsZEluZGljZXNCeVRpbWVzdGFtcFtnX2N1cnJlbnRTdGF0ZS5idWlsZFRpbWVzdGFtcF07CisK
KyAgICAgICAgaWYgKG5ld0J1aWxkSW5kZXggPT0gZ19jdXJyZW50QnVpbGRJbmRleCkgeworICAg
ICAgICAgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gc2VsZWN0QnVpbGQgaXMgY2FsbGVkLCB3aGlj
aCB1cGRhdGVzIHRoZSBVSQorICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHksIGluIGFkZGl0aW9u
IHRvIHVwZGF0aW5nIHRoZSBsb2NhdGlvbiBoYXNoICh3ZSBkb24ndAorICAgICAgICAgICAgLy8g
anVzdCByZWx5IG9uIHRoZSBoYXNoIGNoYW5nZSBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIHJlZ2Vu
ZXJhdGUgdGhlCisgICAgICAgICAgICAvLyB3aG9sZSBwYWdlIGp1c3QgYmVjYXVzZSB0aGUgdXNl
ciBjbGlja2VkIG9uIHNvbWV0aGluZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBl
bHNlIGlmIChuZXdCdWlsZEluZGV4KQorICAgICAgICAgICAgZ19jdXJyZW50QnVpbGRJbmRleCA9
IG5ld0J1aWxkSW5kZXg7CisgICAgfQorCisgICAgaW5pdEN1cnJlbnRCdWlsZGVyVGVzdFJlc3Vs
dHMoKTsKKworICAgICQoJ3Rlc3QtdHlwZS1zd2l0Y2hlcicpLmlubmVySFRNTCA9IGh0bWxGb3JU
ZXN0VHlwZVN3aXRjaGVyKCBmYWxzZSwKKyAgICAgICAgY2hlY2tib3hIVE1MKCdpZ25vcmVGbGFr
eVRlc3RzJywgJ0lnbm9yZSBmbGFreSB0ZXN0cycsIGdfY3VycmVudFN0YXRlLmlnbm9yZUZsYWt5
VGVzdHMsICdnX2N1cnJlbnRCdWlsZEluZGV4ID0gLTEnKQorICAgICk7CisKKyAgICB1cGRhdGVU
aW1lbGluZUZvckJ1aWxkZXIoKTsKK30KKworZnVuY3Rpb24gaW5pdEN1cnJlbnRCdWlsZGVyVGVz
dFJlc3VsdHMoKQoreworICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpOworICAgIGdfY3Vy
cmVudEJ1aWxkZXJUZXN0UmVzdWx0cyA9IGRlY29tcHJlc3NSZXN1bHRzKGdfcmVzdWx0c0J5QnVp
bGRlcltnX2N1cnJlbnRTdGF0ZS5idWlsZGVyXSk7CisgICAgY29uc29sZS5sb2coICdUaW1lIHRv
IGdldCB0ZXN0IHJlc3VsdHMgYnkgYnVpbGQ6ICcgKyAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSkp
OworfQorCitmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkKK3sK
KyAgICBzd2l0Y2goa2V5KSB7CisgICAgY2FzZSAnYnVpbGRUaW1lc3RhbXAnOgorICAgICAgICBn
X2N1cnJlbnRTdGF0ZS5idWlsZFRpbWVzdGFtcCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgJ2lnbm9yZUZsYWt5VGVzdHMnOgorICAgICAgICBn
X2N1cnJlbnRTdGF0ZS5pZ25vcmVGbGFreVRlc3RzID0gdmFsdWUgPT0gJ3RydWUnOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitnX2RlZmF1bHRTdGF0ZVZhbHVlcyA9IHsKKyAgICBidWlsZFRpbWVzdGFtcDogLTEs
CisgICAgYnVpbGRlcjogZ19kZWZhdWx0QnVpbGRlck5hbWUsCisgICAgaWdub3JlRmxha3lUZXN0
czogdHJ1ZQorfTsKKworZnVuY3Rpb24gdXBkYXRlVGltZWxpbmVGb3JCdWlsZGVyKCkKK3sKKyAg
ICB2YXIgYnVpbGRlciA9IGdfY3VycmVudFN0YXRlLmJ1aWxkZXI7CisgICAgdmFyIHJlc3VsdHMg
PSBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl07CisgICAgdmFyIGdyYXBoRGF0YSA9IFtdOwor
CisgICAgdmFyIGFubm90YXRpb25zID0gW107CisKKyAgICAvLyBEeWdyYXBoIHByZWZlcnMgdG8g
YmUgaGFuZGVkIGRhdGEgaW4gY2hyb25vbG9naWNhbCBvcmRlci4KKyAgICBmb3IgKHZhciBpID0g
cmVzdWx0c1tGSVhBQkxFX0NPVU5UU19LRVldLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7Cisg
ICAgICAgIHZhciBidWlsZERhdGUgPSBuZXcgRGF0ZShyZXN1bHRzW1RJTUVTVEFNUFNfS0VZXVtp
XSAqIDEwMDApOworICAgICAgICAvLyBGSVhNRTogRmluZCBhIGJldHRlciB3YXkgdG8gZXhjbHVk
ZSBvdXRsaWVycy4gVGhpcyBpcyBqdXN0IHNvIHdlCisgICAgICAgIC8vIGV4Y2x1ZGUgcnVucyB3
aGVyZSBldmVyeSB0ZXN0IGZhaWxlZC4KKyAgICAgICAgdmFyIGZhaWx1cmVDb3VudCA9IE1hdGgu
bWluKHJlc3VsdHNbRklYQUJMRV9DT1VOVF9LRVldW2ldLCAxMDAwMCk7CisKKyAgICAgICAgaWYg
KGdfY3VycmVudFN0YXRlLmlnbm9yZUZsYWt5VGVzdHMpCisgICAgICAgICAgICBmYWlsdXJlQ291
bnQgLT0gZ19jdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzLmZsYWt5RGVsdGFzQnlCdWlsZFtpXS50
b3RhbCB8fCAwOworCisgICAgICAgIGdyYXBoRGF0YS5wdXNoKFtidWlsZERhdGUsIGZhaWx1cmVD
b3VudF0pOworCisgICAgICAgIGlmICghZ19zaG91bGRTaG93V2ViS2l0UmV2aXNpb25zT25seSAm
JiAocmVzdWx0c1tXRUJLSVRfUkVWSVNJT05TX0tFWV1baV0gIT0gcmVzdWx0c1tXRUJLSVRfUkVW
SVNJT05TX0tFWV1baSArIDFdKSkgeworICAgICAgICAgICAgYW5ub3RhdGlvbnMucHVzaCh7Cisg
ICAgICAgICAgICAgICAgc2VyaWVzOiBGQUlMSU5HX1RFU1RTX0RBVEFTRVRfTkFNRSwKKyAgICAg
ICAgICAgICAgICB4OiBidWlsZERhdGUsCisgICAgICAgICAgICAgICAgc2hvcnRUZXh0OiAnUics
CisgICAgICAgICAgICAgICAgdGV4dDogJ1dlYktpdCByb2xsOiByJyArIHJlc3VsdHNbV0VCS0lU
X1JFVklTSU9OU19LRVldW2kgKyAxXSArICcgdG8gJyArIHJlc3VsdHNbV0VCS0lUX1JFVklTSU9O
U19LRVldW2ldCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZhciB3
aW5kb3dXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDsKKyAgICB2
YXIgd2luZG93SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDsK
KyAgICB2YXIgc3dpdGNoZXJOb2RlID0gJCgndGVzdC10eXBlLXN3aXRjaGVyJyk7CisgICAgdmFy
IGluc3BlY3Rvck5vZGUgPSAkKCdpbnNwZWN0b3ItY29udGFpbmVyJyk7CisgICAgdmFyIGdyYXBo
V2lkdGggPSB3aW5kb3dXaWR0aCAtIDIwIC0gaW5zcGVjdG9yTm9kZS5vZmZzZXRXaWR0aDsKKyAg
ICB2YXIgZ3JhcGhIZWlnaHQgPSB3aW5kb3dIZWlnaHQgLSBzd2l0Y2hlck5vZGUub2Zmc2V0VG9w
IC0gc3dpdGNoZXJOb2RlLm9mZnNldEhlaWdodCAtIDIwOworCisgICAgdmFyIGNvbnRhaW5lck5v
ZGUgPSAkKCd0aW1lbGluZS1jb250YWluZXInKTsKKyAgICBjb250YWluZXJOb2RlLnN0eWxlLmhl
aWdodCA9IGdyYXBoSGVpZ2h0ICsgJ3B4JzsKKyAgICBjb250YWluZXJOb2RlLnN0eWxlLndpZHRo
ID0gZ3JhcGhXaWR0aCArICdweCc7CisgICAgaW5zcGVjdG9yTm9kZS5zdHlsZS5oZWlnaHQgPSBn
cmFwaEhlaWdodCArICdweCc7CisKKyAgICBnX2R5Z3JhcGggPSBuZXcgRHlncmFwaCgKKyAgICAg
ICAgY29udGFpbmVyTm9kZSwKKyAgICAgICAgZ3JhcGhEYXRhLCB7CisgICAgICAgICAgICBsYWJl
bHM6IFsnRGF0ZScsIEZBSUxJTkdfVEVTVFNfREFUQVNFVF9OQU1FXSwKKyAgICAgICAgICAgIHdp
ZHRoOiBncmFwaFdpZHRoLAorICAgICAgICAgICAgaGVpZ2h0OiBncmFwaEhlaWdodCwKKyAgICAg
ICAgICAgIGNsaWNrQ2FsbGJhY2s6IGZ1bmN0aW9uKGV2ZW50LCBkYXRlKSB7CisgICAgICAgICAg
ICAgICAgc2VsZWN0QnVpbGQocmVzdWx0cywgYnVpbGRlciwgZ19keWdyYXBoLCBnX2J1aWxkSW5k
aWNlc0J5VGltZXN0YW1wW2RhdGVdKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBkcmF3
Q2FsbGJhY2s6IGZ1bmN0aW9uKGR5Z3JhcGgsIGlzSW5pdGlhbCkgeworICAgICAgICAgICAgICAg
IGlmIChpc0luaXRpYWwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB1cGRhdGVCdWlsZEluZGljYXRvcihyZXN1bHRzLCBkeWdyYXBoKTsKKyAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAvLyB4VmFsdWVQYXJzZXIgaXMgbmVjZXNzYXJ5IGZvciBhbm5vdGF0
aW9ucyB0byB3b3JrLCBldmVuIHRob3VnaCB3ZQorICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZl
IERhdGUgaW5zdGFuY2VzCisgICAgICAgICAgICB4VmFsdWVQYXJzZXI6IGZ1bmN0aW9uKGlucHV0
KSB7IHJldHVybiBpbnB1dC5nZXRUaW1lKCk7IH0KKyAgICAgICAgfSk7CisgICAgaWYgKGFubm90
YXRpb25zLmxlbmd0aCkKKyAgICAgICAgZ19keWdyYXBoLnNldEFubm90YXRpb25zKGFubm90YXRp
b25zKTsKKworICAgIGluc3BlY3Rvck5vZGUuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsK
KworICAgIGlmIChnX2N1cnJlbnRCdWlsZEluZGV4ICE9IC0xKQorICAgICAgICBzZWxlY3RCdWls
ZChyZXN1bHRzLCBidWlsZGVyLCBnX2R5Z3JhcGgsIGdfY3VycmVudEJ1aWxkSW5kZXgpOworfQor
CitmdW5jdGlvbiBzZWxlY3RCdWlsZChyZXN1bHRzLCBidWlsZGVyLCBkeWdyYXBoLCBpbmRleCkK
K3sKKyAgICBnX2N1cnJlbnRCdWlsZEluZGV4ID0gaW5kZXg7CisgICAgdXBkYXRlQnVpbGRJbmRp
Y2F0b3IocmVzdWx0cywgZHlncmFwaCk7CisgICAgdXBkYXRlQnVpbGRJbnNwZWN0b3IocmVzdWx0
cywgYnVpbGRlciwgZHlncmFwaCwgaW5kZXgpOworICAgIHNldFF1ZXJ5UGFyYW1ldGVyKCdidWls
ZFRpbWVzdGFtcCcsIHJlc3VsdHNbVElNRVNUQU1QU19LRVldW2luZGV4XSAqIDEwMDApOworfQor
CitmdW5jdGlvbiB1cGRhdGVCdWlsZEluZGljYXRvcihyZXN1bHRzLCBkeWdyYXBoKQoreworICAg
IHZhciBpbmRpY2F0b3JOb2RlID0gJCgnaW5kaWNhdG9yJyk7CisKKyAgICBpZiAoIWluZGljYXRv
ck5vZGUpIHsKKyAgICAgICAgdmFyIGNvbnRhaW5lck5vZGUgPSAkKCd0aW1lbGluZS1jb250YWlu
ZXInKTsKKyAgICAgICAgaW5kaWNhdG9yTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpOworICAgICAgICBpbmRpY2F0b3JOb2RlLmlkID0gJ2luZGljYXRvcic7CisgICAgICAgIGlu
ZGljYXRvck5vZGUuc3R5bGUuaGVpZ2h0ID0gY29udGFpbmVyTm9kZS5vZmZzZXRIZWlnaHQgKyAn
cHgnOworICAgICAgICBjb250YWluZXJOb2RlLmFwcGVuZENoaWxkKGluZGljYXRvck5vZGUpOwor
ICAgIH0KKworICAgIGlmIChnX2N1cnJlbnRCdWlsZEluZGV4ID09IC0xKQorICAgICAgICBpbmRp
Y2F0b3JOb2RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgZWxzZSB7CisgICAgICAgIGlu
ZGljYXRvck5vZGUuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CisgICAgICAgIHZhciBidWlsZERh
dGUgPSBuZXcgRGF0ZShyZXN1bHRzW1RJTUVTVEFNUFNfS0VZXVtnX2N1cnJlbnRCdWlsZEluZGV4
XSAqIDEwMDApOworICAgICAgICB2YXIgZG9tQ29vcmRzID0gZHlncmFwaC50b0RvbUNvb3Jkcyhi
dWlsZERhdGUsIDApOworICAgICAgICBpbmRpY2F0b3JOb2RlLnN0eWxlLmxlZnQgPSBkb21Db29y
ZHNbMF0gKyAncHgnOworICAgIH0KK30KKworZnVuY3Rpb24gdXBkYXRlQnVpbGRJbnNwZWN0b3Io
cmVzdWx0cywgYnVpbGRlciwgZHlncmFwaCwgaW5kZXgpCit7CisgICAgdmFyIGh0bWwgPSAnPHRh
YmxlIGlkPSJpbnNwZWN0b3ItdGFibGUiPjxjYXB0aW9uPkRldGFpbHM8L2NhcHRpb24+JzsKKwor
ICAgIGZ1bmN0aW9uIGFkZFJvdyhsYWJlbCwgdmFsdWUpCisgICAgeworICAgICAgICBodG1sICs9
ICc8dHI+PHRkIGNsYXNzPSJsYWJlbCI+JyArIGxhYmVsICsgJzwvdGQ+PHRkPicgKyB2YWx1ZSAr
ICc8L3RkPjwvdHI+JzsKKyAgICB9CisKKyAgICAvLyBCdWlsZGVyIGFuZCByZXN1bHRzIGxpbmtz
CisgICAgdmFyIGJ1aWxkTnVtYmVyID0gcmVzdWx0c1tCVUlMRF9OVU1CRVJTX0tFWV1baW5kZXhd
OworICAgIGFkZFJvdygnJywgJycpOworICAgIHZhciBtYXN0ZXIgPSBidWlsZGVyTWFzdGVyKGJ1
aWxkZXIpOworICAgIHZhciBidWlsZFVybCA9IG1hc3Rlci5nZXRMb2dQYXRoKGJ1aWxkZXIsIHJl
c3VsdHNbQlVJTERfTlVNQkVSU19LRVldW2luZGV4XSk7CisgICAgaWYgKG1hc3RlciA9PSBXRUJL
SVRfQlVJTERFUl9NQVNURVIpIHsKKyAgICAgICAgdmFyIHJlc3VsdHNVcmwgPSAnaHR0cDovL2J1
aWxkLndlYmtpdC5vcmcvcmVzdWx0cy8nICsgYnVpbGRlciArICcvcicgKyByZXN1bHRzW1dFQktJ
VF9SRVZJU0lPTlNfS0VZXVtpbmRleF0gKworICAgICAgICAgICAgJyAoJyArIHJlc3VsdHNbQlVJ
TERfTlVNQkVSU19LRVldW2luZGV4XSArICcpJzsKKyAgICB9IGVsc2UgeworICAgICAgICB2YXIg
cmVzdWx0c1VybCA9ICdodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21pdW0vbGF5b3V0
X3Rlc3RfcmVzdWx0cy8nICsKKyAgICAgICAgICAgIGdfYnVpbGRlcnNbYnVpbGRlcl0gKyAnLycg
KyByZXN1bHRzW0NIUk9NRV9SRVZJU0lPTlNfS0VZXVtpbmRleF07CisgICAgfQorCisgICAgYWRk
Um93KCdCdWlsZDonLCAnPGEgaHJlZj0iJyArIGJ1aWxkVXJsICsgJyIgdGFyZ2V0PSJfYmxhbmsi
PicgKyBidWlsZE51bWJlciArICc8L2E+ICg8YSBocmVmPSInICsgcmVzdWx0c1VybCArICciIHRh
cmdldD0iX2JsYW5rIj5yZXN1bHRzPC9hPiknKTsKKworICAgIC8vIFJldmlzaW9uIGxpbmsocykK
KyAgICBpZiAoIWdfc2hvdWxkU2hvd1dlYktpdFJldmlzaW9uc09ubHkpCisgICAgICAgIGFkZFJv
dygnQ2hyb21pdW0gY2hhbmdlOicsIGNocm9taXVtUmV2aXNpb25MaW5rKHJlc3VsdHMsIGluZGV4
KSk7CisgICAgYWRkUm93KCdXZWJLaXQgY2hhbmdlOicsIHdlYktpdFJldmlzaW9uTGluayhyZXN1
bHRzLCBpbmRleCkpOworCisgICAgLy8gVGVzdCBzdGF0dXMvY291bnRzCisgICAgYWRkUm93KCcn
LCAnJyk7CisKKyAgICBmdW5jdGlvbiBhZGROdW1iZXJSb3cobGFiZWwsIGN1cnJlbnRWYWx1ZSwg
cHJldmlvdXNWYWx1ZSkKKyAgICB7CisgICAgICAgIHZhciBkZWx0YSA9IGN1cnJlbnRWYWx1ZSAt
IHByZXZpb3VzVmFsdWU7CisgICAgICAgIHZhciBkZWx0YVRleHQgPSAnJworICAgICAgICBpZiAo
ZGVsdGEgPCAwKQorICAgICAgICAgICAgZGVsdGFUZXh0ID0gJyA8c3BhbiBjbGFzcz0iZGVsdGEg
bmVnYXRpdmUiPicgKyBkZWx0YSArICc8L3NwYW4+JzsKKyAgICAgICAgZWxzZSBpZiAoZGVsdGEg
PiAwKQorICAgICAgICAgICAgZGVsdGFUZXh0ID0gJyA8c3BhbiBjbGFzcz0iZGVsdGEgcG9zaXRp
dmUiPisnICsgZGVsdGEgKyAnPC9zcGFuPic7CisKKyAgICAgICAgYWRkUm93KGxhYmVsLCBjdXJy
ZW50VmFsdWUgKyBkZWx0YVRleHQpOworICAgIH0KKworICAgIHZhciBleHBlY3RhdGlvbnMgPSBl
eHBlY3RhdGlvbnNNYXAoKTsKKyAgICB2YXIgZmxha3lEZWx0YXNCeUJ1aWxkID0gZ19jdXJyZW50
QnVpbGRlclRlc3RSZXN1bHRzLmZsYWt5RGVsdGFzQnlCdWlsZDsKKyAgICBmb3IgKHZhciBleHBl
Y3RhdGlvbktleSBpbiBleHBlY3RhdGlvbnMpIHsKKyAgICAgICAgaWYgKGV4cGVjdGF0aW9uS2V5
IGluIHJlc3VsdHNbRklYQUJMRV9DT1VOVFNfS0VZXVtpbmRleF0pIHsKKyAgICAgICAgICAgIHZh
ciBjdXJyZW50Q291bnQgPSByZXN1bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV1baW5kZXhdW2V4cGVj
dGF0aW9uS2V5XTsKKyAgICAgICAgICAgIHZhciBwcmV2aW91c0NvdW50ID0gcmVzdWx0c1tGSVhB
QkxFX0NPVU5UU19LRVldW2luZGV4ICsgMV1bZXhwZWN0YXRpb25LZXldOworICAgICAgICAgICAg
aWYgKGdfY3VycmVudFN0YXRlLmlnbm9yZUZsYWt5VGVzdHMpIHsKKyAgICAgICAgICAgICAgICBj
dXJyZW50Q291bnQgLT0gZmxha3lEZWx0YXNCeUJ1aWxkW2luZGV4XVtleHBlY3RhdGlvbktleV0g
fHwgMDsKKyAgICAgICAgICAgICAgICBwcmV2aW91c0NvdW50IC09IGZsYWt5RGVsdGFzQnlCdWls
ZFtpbmRleCArIDFdW2V4cGVjdGF0aW9uS2V5XSB8fCAwOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYWRkTnVtYmVyUm93KGV4cGVjdGF0aW9uc1tleHBlY3RhdGlvbktleV0sIGN1cnJlbnRD
b3VudCwgcHJldmlvdXNDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgY3VycmVu
dFRvdGFsID0gcmVzdWx0c1tGSVhBQkxFX0NPVU5UX0tFWV1baW5kZXhdOworICAgIHZhciBwcmV2
aW91c1RvdGFsID0gcmVzdWx0c1tGSVhBQkxFX0NPVU5UX0tFWV1baW5kZXggKyAxXTsKKyAgICBp
ZiAoZ19jdXJyZW50U3RhdGUuaWdub3JlRmxha3lUZXN0cykgeworICAgICAgICBjdXJyZW50VG90
YWwgLT0gZmxha3lEZWx0YXNCeUJ1aWxkW2luZGV4XS50b3RhbCB8fCAwOworICAgICAgICBwcmV2
aW91c1RvdGFsIC09IGZsYWt5RGVsdGFzQnlCdWlsZFtpbmRleCArIDFdLnRvdGFsIHx8IDA7Cisg
ICAgfQorICAgIGFkZE51bWJlclJvdygnVG90YWwgZmFpbGluZyB0ZXN0czonLCBjdXJyZW50VG90
YWwsIHByZXZpb3VzVG90YWwpOworCisgICAgaHRtbCArPSAnPC90YWJsZT4nOworCisgICAgaHRt
bCArPSAnPGRpdiBpZD0iY2hhbmdlcy1idXR0b24iIGNsYXNzPSJidXR0b25zIj4nOworICAgIGh0
bWwgKz0gJzxidXR0b24+U2hvdyBjaGFuZ2VkIHRlc3QgcmVzdWx0czwvYnV0dG9uPic7CisgICAg
aHRtbCArPSAnPC9kaXY+JzsKKworICAgIGh0bWwgKz0gJzxkaXYgaWQ9ImJ1aWxkLWJ1dHRvbnMi
IGNsYXNzPSJidXR0b25zIj4nOworICAgIGh0bWwgKz0gJzxidXR0b24+UHJldmlvdXMgYnVpbGQ8
L2J1dHRvbj4gPGJ1dHRvbj5OZXh0IGJ1aWxkPC9idXR0b24+JzsKKyAgICBodG1sICs9ICc8L2Rp
dj4nOworCisgICAgdmFyIGluc3BlY3Rvck5vZGUgPSAkKCdpbnNwZWN0b3ItY29udGFpbmVyJyk7
CisgICAgaW5zcGVjdG9yTm9kZS5pbm5lckhUTUwgPSBodG1sOworCisgICAgaW5zcGVjdG9yTm9k
ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylbMF0ub25jbGljayA9IGZ1bmN0aW9uKCkg
eworICAgICAgICBzaG93UmVzdWx0c0RlbHRhKGluZGV4LCBidWlsZE51bWJlciwgYnVpbGRVcmws
IHJlc3VsdHNVcmwpOworICAgIH07CisgICAgaW5zcGVjdG9yTm9kZS5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnYnV0dG9uJylbMV0ub25jbGljayA9IGZ1bmN0aW9uKCkgeworICAgICAgICBzZWxlY3RC
dWlsZChyZXN1bHRzLCBidWlsZGVyLCBkeWdyYXBoLCBpbmRleCArIDEpOworICAgIH07CisgICAg
aW5zcGVjdG9yTm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylbMl0ub25jbGljayA9
IGZ1bmN0aW9uKCkgeworICAgICAgICBzZWxlY3RCdWlsZChyZXN1bHRzLCBidWlsZGVyLCBkeWdy
YXBoLCBpbmRleCAtIDEpOworICAgIH07Cit9CisKK2Z1bmN0aW9uIHNob3dSZXN1bHRzRGVsdGEo
aW5kZXgsIGJ1aWxkTnVtYmVyLCBidWlsZFVybCwgcmVzdWx0c1VybCkKK3sKKyAgICB2YXIgZmxh
a3lUZXN0cyA9IGdfY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cy5mbGFreVRlc3RzOworICAgIHZh
ciBjdXJyZW50UmVzdWx0cyA9IGdfY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cy5yZXN1bHRzQnlC
dWlsZFtpbmRleF07CisgICAgdmFyIHRlc3ROYW1lcyA9IGdfY3VycmVudEJ1aWxkZXJUZXN0UmVz
dWx0cy50ZXN0TmFtZXM7CisgICAgdmFyIHByZXZpb3VzUmVzdWx0cyA9IGdfY3VycmVudEJ1aWxk
ZXJUZXN0UmVzdWx0cy5yZXN1bHRzQnlCdWlsZFtpbmRleCArIDFdOworICAgIHZhciBleHBlY3Rh
dGlvbnMgPSBleHBlY3RhdGlvbnNNYXAoKTsKKworICAgIHZhciBkZWx0YXMgPSB7fTsKKyAgICBm
dW5jdGlvbiBhZGREZWx0YShjYXRlZ29yeSwgdGVzdEluZGV4KQorICAgIHsKKyAgICAgICAgaWYg
KGdfY3VycmVudFN0YXRlLmlnbm9yZUZsYWt5VGVzdHMgJiYgZmxha3lUZXN0c1t0ZXN0SW5kZXhd
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIShjYXRlZ29yeSBpbiBkZWx0YXMp
KQorICAgICAgICAgICAgZGVsdGFzW2NhdGVnb3J5XSA9IFtdOworICAgICAgICB2YXIgdGVzdE5h
bWUgPSB0ZXN0TmFtZXNbdGVzdEluZGV4XTsKKyAgICAgICAgdmFyIGZsYWtpbmVzc0Rhc2hib2Fy
ZFVybCA9ICdmbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwnICsgKGxvY2F0aW9uLmhhc2ggPyBsb2Nh
dGlvbi5oYXNoICsgJyYnIDogJyMnKSArICd0ZXN0cz0nICsgdGVzdE5hbWU7CisgICAgICAgIHZh
ciBodG1sID0gJzxhIGhyZWY9IicgKyBmbGFraW5lc3NEYXNoYm9hcmRVcmwgKyAnIj4nICsgdGVz
dE5hbWUgKyAnPC9hPic7CisgICAgICAgIGlmIChmbGFreVRlc3RzW3Rlc3RJbmRleF0pCisgICAg
ICAgICAgICBodG1sICs9ICcgPHNwYW4gc3R5bGU9ImNvbG9yOiAjZjY2Ij5wb3NzaWJseSBmbGFr
eTwvc3Bhbj4nOworICAgICAgICBkZWx0YXNbY2F0ZWdvcnldLnB1c2goaHRtbCk7CisgICAgfQor
CisgICAgZm9yICh2YXIgdGVzdEluZGV4ID0gMDsgdGVzdEluZGV4IDwgY3VycmVudFJlc3VsdHMu
bGVuZ3RoOyB0ZXN0SW5kZXgrKykgeworICAgICAgICBpZiAoY3VycmVudFJlc3VsdHNbdGVzdElu
ZGV4XSA9PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYg
KHByZXZpb3VzUmVzdWx0c1t0ZXN0SW5kZXhdICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAg
IGlmIChjdXJyZW50UmVzdWx0c1t0ZXN0SW5kZXhdID09IHByZXZpb3VzUmVzdWx0c1t0ZXN0SW5k
ZXhdKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYWRkRGVsdGEoJ1dh
cyA8Yj4nICsgZXhwZWN0YXRpb25zW3ByZXZpb3VzUmVzdWx0c1t0ZXN0SW5kZXhdXSArICc8L2I+
IG5vdyA8Yj4nICsgZXhwZWN0YXRpb25zW2N1cnJlbnRSZXN1bHRzW3Rlc3RJbmRleF1dICsgJzwv
Yj4nLCB0ZXN0SW5kZXgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGFkZERlbHRhKCdO
ZXdseSA8Yj4nICsgZXhwZWN0YXRpb25zW2N1cnJlbnRSZXN1bHRzW3Rlc3RJbmRleF1dICsgJzwv
Yj4nLCB0ZXN0SW5kZXgpOworICAgIH0KKworICAgIGZvciAodmFyIHRlc3RJbmRleCA9IDA7IHRl
c3RJbmRleCA8IHByZXZpb3VzUmVzdWx0cy5sZW5ndGg7IHRlc3RJbmRleCsrKSB7CisgICAgICAg
IGlmIChwcmV2aW91c1Jlc3VsdHNbdGVzdEluZGV4XSA9PT0gdW5kZWZpbmVkKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIGlmIChjdXJyZW50UmVzdWx0c1t0ZXN0SW5kZXhdID09PSB1
bmRlZmluZWQpCisgICAgICAgICAgICBhZGREZWx0YSgnV2FzIDxiPicgKyBleHBlY3RhdGlvbnNb
cHJldmlvdXNSZXN1bHRzW3Rlc3RJbmRleF1dICsgJzwvYj4nLCB0ZXN0SW5kZXgpOworICAgIH0K
KworICAgIHZhciBodG1sID0gJyc7CisKKyAgICBodG1sICs9ICc8aGVhZD48YmFzZSB0YXJnZXQ9
Il9ibGFuayI+PC9oZWFkPic7CisgICAgaHRtbCArPSAnPGgxPkNoYW5nZXMgaW4gdGVzdCByZXN1
bHRzPC9oMT4nOworCisgICAgaHRtbCArPSAnPHA+Rm9yIGJ1aWxkIDxhIGhyZWY9IicgKyBidWls
ZFVybCArICciIHRhcmdldD0iX2JsYW5rIj4nICsKKyAgICAgICAgYnVpbGROdW1iZXIgKyAnPC9h
PiAnICsgJyg8YSBocmVmPSInICsgcmVzdWx0c1VybCArCisgICAgICAgICciIHRhcmdldD0iX2Js
YW5rIj5yZXN1bHRzPC9hPik8L3A+JzsKKworICAgIGZvciAodmFyIGRlbHRhQ2F0ZWdvcnkgaW4g
ZGVsdGFzKSB7CisgICAgICAgIGh0bWwgKz0gJzxwPjxkaXY+JyArIGRlbHRhQ2F0ZWdvcnkgKyAn
ICgnICsgZGVsdGFzW2RlbHRhQ2F0ZWdvcnldLmxlbmd0aCArICcpPC9kaXY+PHVsPic7CisgICAg
ICAgIGRlbHRhc1tkZWx0YUNhdGVnb3J5XS5mb3JFYWNoKGZ1bmN0aW9uKGRlbHRhSHRtbCkgewor
ICAgICAgICAgICAgaHRtbCArPSAnPGxpPicgKyBkZWx0YUh0bWwgKyAnPC9saT4nOworICAgICAg
ICB9KTsKKyAgICAgICAgaHRtbCArPSAnPC91bD48L3A+JzsKKyAgICB9CisKKyAgICB2YXIgZGVs
dGFXaW5kb3cgPSB3aW5kb3cub3BlbigpOworICAgIGRlbHRhV2luZG93LmRvY3VtZW50LndyaXRl
KGh0bWwpOworfQorCitkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rp
b24oZSkgeworICAgIGlmIChnX2N1cnJlbnRCdWlsZEluZGV4ID09IC0xKQorICAgICAgICByZXR1
cm47CisKKyAgICBzd2l0Y2ggKGUua2V5SWRlbnRpZmllcikgeworICAgIGNhc2UgJ0xlZnQnOgor
ICAgICAgICBzZWxlY3RCdWlsZCgKKyAgICAgICAgICAgIGdfcmVzdWx0c0J5QnVpbGRlcltnX2N1
cnJlbnRTdGF0ZS5idWlsZGVyXSwKKyAgICAgICAgICAgIGdfY3VycmVudFN0YXRlLmJ1aWxkZXIs
CisgICAgICAgICAgICBnX2R5Z3JhcGgsCisgICAgICAgICAgICBnX2N1cnJlbnRCdWlsZEluZGV4
ICsgMSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ1JpZ2h0JzoKKyAgICAgICAgc2VsZWN0
QnVpbGQoCisgICAgICAgICAgICBnX3Jlc3VsdHNCeUJ1aWxkZXJbZ19jdXJyZW50U3RhdGUuYnVp
bGRlcl0sCisgICAgICAgICAgICBnX2N1cnJlbnRTdGF0ZS5idWlsZGVyLAorICAgICAgICAgICAg
Z19keWdyYXBoLAorICAgICAgICAgICAgZ19jdXJyZW50QnVpbGRJbmRleCAtIDEpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9KTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPGRp
diBpZD0idGVzdC10eXBlLXN3aXRjaGVyIj48L2Rpdj4KKworICAgIDxkaXYgaWQ9Imluc3BlY3Rv
ci1jb250YWluZXIiIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW4iPgorICAgICAgICA8cD5DbGlj
ayBvbiBhIHBvaW50IG9uIHRoZSBncmFwaCB0byBzZWUgZGV0YWlscyBhYm91dCB0aGF0IGJ1aWxk
LjwvcD4KKyAgICAgICAgPHA+Q2xpY2sgYW5kIGRyYWcgb24gdGhlIGdyYXBoIHRvIHpvb20gaW4g
dG8gdGhhdCBwZXJpb2QuPC9wPgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9InRpbWVsaW5lLWNv
bnRhaW5lciI+TG9hZGluZy4uLjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdHJlZW1hcC5odG1s
IGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdHJlZW1hcC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmU1ZDhmYzI0MmUwMTk5YThjMTRlMTA0ZmVmYWYwMTlhOTM5ZDVmMmEK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFz
aGJvYXJkcy90cmVlbWFwLmh0bWwKQEAgLTAsMCArMSwzODYgQEAKKzwhLS0gQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgoraW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KK3RoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
K0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCistLT4KKzwhRE9DVFlQRSBodG1sPgorPHRpdGxlPlRlc3QgUnVudGltZXM8L3Rp
dGxlPgorPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPSd3ZWJ0cmVlbWFwLmNzcyc+PC9saW5r
PgorPHN0eWxlPgorYm9keSB7CisgICAgZGlzcGxheTogLW1vei1ib3g7CisgICAgZGlzcGxheTog
LXdlYmtpdC1ib3g7CisgICAgZGlzcGxheTogYm94OworICAgIC1tb3otYm94LW9yaWVudDogdmVy
dGljYWw7CisgICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKKyAgICBib3gtb3JpZW50
OiB2ZXJ0aWNhbDsKKworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAg
cmlnaHQ6IDA7CisgICAgYm90dG9tOiAwOworICAgIGxlZnQ6IDA7Cit9CisKK3RkOmZpcnN0LWNo
aWxkIHsKKyAgICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCit0ZCB7CisgICAgdGV4dC1hbGlnbjog
cmlnaHQ7Cit9CisKKyNtYXAgeworICAgIGRpc3BsYXk6IC1tb3otYm94OworICAgIGRpc3BsYXk6
IC13ZWJraXQtYm94OworICAgIGRpc3BsYXk6IGJveDsKKworICAgIC1tb3otYm94LWZsZXg6IDE7
CisgICAgLXdlYmtpdC1ib3gtZmxleDogMTsKKyAgICBib3gtZmxleDogMTsKKworICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKKyAgICBjdXJzb3I6IHBvaW50ZXI7CisgICAgLXdlYmtpdC11c2VyLXNl
bGVjdDogbm9uZTsKKyAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOworfQorCisuZXh0cmEtZG9t
IHsKKyAgICBkaXNwbGF5OiBub25lOworICAgIGJvcmRlcjogbm9uZTsKKyAgICBib3JkZXItdG9w
OiAxcHggZGFzaGVkOworICAgIHBhZGRpbmc6IDRweDsKKyAgICBtYXJnaW46IDA7CisgICAgb3Zl
cmZsb3c6IGF1dG87CisgICAgY3Vyc29yOiBhdXRvOworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6
IHRleHQ7CisgICAgLW1vei11c2VyLXNlbGVjdDogdGV4dDsKK30KKworI2ZvY3VzZWQtbGVhZiB7
CisgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CisgICAgZGlzcGxheTogLW1vei1ib3g7CisgICAg
LXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKKyAgICAtbW96LWJveC1vcmllbnQ6IHZlcnRp
Y2FsOworfQorCisjZm9jdXNlZC1sZWFmID4gLmV4dHJhLWRvbSB7CisgICAgZGlzcGxheTogLXdl
YmtpdC1ib3g7CisgICAgZGlzcGxheTogLW1vei1ib3g7CisgICAgLXdlYmtpdC1ib3gtZmxleDog
MTsKKyAgICAtbW96LWJveC1mbGV4OiAxOworfQorCisjZm9jdXNlZC1sZWFmLndlYnRyZWVtYXAt
bm9kZTpob3ZlciB7CisgICAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisKKyNmb2N1c2VkLWxlYWYg
LndlYnRyZWVtYXAtY2FwdGlvbjpob3ZlciB7CisgICAgYmFja2dyb3VuZDogI2VlZTsKK30KKwor
LmVycm9yIHsKKyAgICBjb2xvcjogcmVkOworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKzwv
c3R5bGU+Cis8c2NyaXB0IHNyYz0iYnVpbGRlcnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
ImRhc2hib2FyZF9iYXNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSd3ZWJ0cmVlbWFwLmpz
Jz48L3NjcmlwdD4KKworPGRpdiBpZD0naGVhZGVyLWNvbnRhaW5lcic+PC9kaXY+Cis8cD5DbGlj
ayBvbiBhIGJveCB0byB6b29tIGluLiBDbGljayBvbiB0aGUgb3V0ZXJtb3N0IGJveCB0byB6b29t
IG91dC4gPGEgaHJlZj0iIiBvbmNsaWNrPSJzaG93QXZlcmFnZXMoKTtyZXR1cm4gZmFsc2U7Ij5T
aG93IGF2ZXJhZ2VzPC9hPjwvcD4KKzxkaXYgaWQ9J21hcCc+PC9kaXY+CisKKzxzY3JpcHQ+Cisk
KCdoZWFkZXItY29udGFpbmVyJykuaW5uZXJIVE1MID0gaHRtbEZvclRlc3RUeXBlU3dpdGNoZXIo
KTsKKwordmFyIFRFU1RfVVJMX0JBU0VfUEFUSCA9ICJodHRwOi8vc3ZuLndlYmtpdC5vcmcvcmVw
b3NpdG9yeS93ZWJraXQvdHJ1bmsvIjsKKworZnVuY3Rpb24gaHVtYW5SZWFkYWJsZVRpbWUobWls
bGlzZWNvbmRzKQoreworICAgIGlmIChtaWxsaXNlY29uZHMgPCAxMDAwKQorICAgICAgICByZXR1
cm4gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMpICsgJ21zJzsKKyAgICBlbHNlIGlmIChtaWxsaXNl
Y29uZHMgPCA2MDAwMCkKKyAgICAgICAgcmV0dXJuIChtaWxsaXNlY29uZHMgLyAxMDAwKS50b1By
ZWNpc2lvbigyKSArICdzJzsKKworICAgIHZhciBtaW51dGVzID0gTWF0aC5mbG9vcihtaWxsaXNl
Y29uZHMgLyA2MDAwMCk7CisgICAgdmFyIHNlY29uZHMgPSBNYXRoLmZsb29yKChtaWxsaXNlY29u
ZHMgLSBtaW51dGVzICogNjAwMDApIC8gMTAwMCk7CisgICAgcmV0dXJuIG1pbnV0ZXMgKyAnbScg
KyBzZWNvbmRzICsgJ3MnOworfQorCisvLyBUaGlzIGxvb2tzIGxpa2U6CisvLyB7ICJkYXRhIjog
eyIkYXJlYSI6IChzdW0gb2YgYWxsIHRpbWluZ3MpfSwKKy8vICAgIm5hbWUiOiAobmFtZSBvZiB0
aGlzIG5vZGUpLAorLy8gICAiY2hpbGRyZW4iOiBbIChjaGlsZCBub2RlcywgaW4gdGhlIHNhbWUg
Zm9ybWF0IGFzIHRoaXMpIF0gfQorLy8gY2hpbGRDb3VudCBpcyBhZGRlZCBqdXN0IHRvIGJlIGlu
Y2x1ZGVzIGluIHRoZSBub2RlJ3MgbmFtZQorZnVuY3Rpb24gY29udmVydFRvV2ViVHJlZW1hcEZv
cm1hdCh0cmVlbmFtZSwgdHJlZSwgcGF0aCkKK3sKKyAgICB2YXIgdG90YWwgPSAwOworICAgIHZh
ciBjaGlsZENvdW50ID0gMDsKKyAgICB2YXIgY2hpbGRyZW4gPSBbXTsKKyAgICBmb3IgKHZhciBu
YW1lIGluIHRyZWUpIHsKKyAgICAgICAgdmFyIHRyZWVOb2RlID0gdHJlZVtuYW1lXTsKKyAgICAg
ICAgaWYgKHR5cGVvZiB0cmVlTm9kZSA9PSAibnVtYmVyIikgeworICAgICAgICAgICAgdmFyIHRp
bWUgPSB0cmVlTm9kZTsKKyAgICAgICAgICAgIHZhciBub2RlID0geworICAgICAgICAgICAgICAg
ICJkYXRhIjogeyIkYXJlYSI6IHRpbWV9LAorICAgICAgICAgICAgICAgICJuYW1lIjogbmFtZSAr
ICIgKCIgKyBodW1hblJlYWRhYmxlVGltZSh0aW1lKSArICIpIgorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGNoaWxkcmVuLnB1c2gobm9kZSk7CisgICAgICAgICAgICB0b3RhbCArPSB0aW1l
OworICAgICAgICAgICAgY2hpbGRDb3VudCsrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdmFyIG5ld1BhdGggPSBwYXRoID8gcGF0aCArICcvJyArIG5hbWUgOiBuYW1lOworICAgICAg
ICAgICAgdmFyIHN1YnRyZWUgPSBjb252ZXJ0VG9XZWJUcmVlbWFwRm9ybWF0KG5hbWUsIHRyZWVO
b2RlLCBuZXdQYXRoKTsKKyAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goc3VidHJlZSk7CisgICAg
ICAgICAgICB0b3RhbCArPSBzdWJ0cmVlWyJkYXRhIl1bIiRhcmVhIl07CisgICAgICAgICAgICBj
aGlsZENvdW50ICs9IHN1YnRyZWVbImNoaWxkQ291bnQiXTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGNoaWxkcmVuLnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICBhVGltZSA9IGEuZGF0
YVsiJGFyZWEiXQorICAgICAgICBiVGltZSA9IGIuZGF0YVsiJGFyZWEiXQorICAgICAgICByZXR1
cm4gYlRpbWUgLSBhVGltZTsKKyAgICB9KTsKKworICAgIHJldHVybiB7CisgICAgICAgICJkYXRh
IjogeyIkYXJlYSI6IHRvdGFsfSwKKyAgICAgICAgIm5hbWUiOiB0cmVlbmFtZSArICIgKCIgKyBo
dW1hblJlYWRhYmxlVGltZSh0b3RhbCkgKyAiIC0gIiArIGNoaWxkQ291bnQgKyAiIHRlc3RzKSIs
CisgICAgICAgICJjaGlsZHJlbiI6IGNoaWxkcmVuLAorICAgICAgICAiY2hpbGRDb3VudCI6IGNo
aWxkQ291bnQsCisgICAgICAgICJwYXRoIjogcGF0aAorICAgIH07Cit9CisKK2Z1bmN0aW9uIGxp
c3RPZkFsbE5vbkxlYWZOb2Rlcyh0cmVlLCBsaXN0KQoreworICAgIGlmICghdHJlZS5jaGlsZHJl
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFsaXN0KQorICAgICAgICBsaXN0ID0gW107
CisgICAgbGlzdC5wdXNoKHRyZWUpOworCisgICAgdHJlZS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0
aW9uKGNoaWxkKSB7CisgICAgICAgIGxpc3RPZkFsbE5vbkxlYWZOb2RlcyhjaGlsZCwgbGlzdCk7
CisgICAgfSk7CisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK2Z1bmN0aW9uIHJldmVyc2VTb3J0QnlB
dmVyYWdlKGxpc3QpCit7CisgICAgbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAg
dmFyIGF2Z0EgPSBhLmRhdGFbJyRhcmVhJ10gLyBhLmNoaWxkQ291bnQ7CisgICAgICAgIHZhciBh
dmdCID0gYi5kYXRhWyckYXJlYSddIC8gYi5jaGlsZENvdW50OworICAgICAgICByZXR1cm4gYXZn
QiAtIGF2Z0E7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHNob3dBdmVyYWdlcygpCit7CisgICAg
aWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFwJykpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7CisgICAgdGFi
bGUuaW5uZXJIVE1MID0gJzx0aD5kaXJlY3Rvcnk8L3RoPjx0aD4jIHRlc3RzPC90aD48dGg+YXZn
IHRpbWUgLyB0ZXN0PC90aD4nOworCisgICAgdmFyIGFsbE5vZGVzID0gbGlzdE9mQWxsTm9uTGVh
Zk5vZGVzKGdfd2ViVHJlZSk7CisgICAgcmV2ZXJzZVNvcnRCeUF2ZXJhZ2UoYWxsTm9kZXMpOwor
ICAgIGFsbE5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSkgeworICAgICAgICB2YXIgYXZlcmFn
ZSA9IG5vZGUuZGF0YVsnJGFyZWEnXSAvIG5vZGUuY2hpbGRDb3VudDsKKyAgICAgICAgaWYgKGF2
ZXJhZ2UgPiAxMDAgJiYgbm9kZS5jaGlsZENvdW50ICE9IDEpIHsKKyAgICAgICAgICAgIHZhciB0
ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CisgICAgICAgICAgICB0ci5pbm5lckhU
TUwgPSAnPHRkPjwvdGQ+PHRkPicgKyBub2RlLmNoaWxkQ291bnQgKyAnPC90ZD48dGQ+JyArIGh1
bWFuUmVhZGFibGVUaW1lKGF2ZXJhZ2UpICsgJzwvdGQ+JzsKKyAgICAgICAgICAgIHRyLnF1ZXJ5
U2VsZWN0b3IoJ3RkJykuaW5uZXJUZXh0ID0gbm9kZS5wYXRoOworICAgICAgICAgICAgdGFibGUu
YXBwZW5kQ2hpbGQodHIpOworICAgICAgICB9CisgICAgfSk7CisKKyAgICB2YXIgbWFwID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpOworICAgIG1hcC5wYXJlbnROb2RlLnJlcGxhY2VD
aGlsZCh0YWJsZSwgbWFwKTsKK30KKwordmFyIGdfcmVzdWx0c0J5QnVpbGRlciA9IHt9OworCitm
dW5jdGlvbiBBRERfUkVTVUxUUyhkYXRhKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJv
YmFibHkgaW5jbHVkZSB0aGUgYnVpbGRlck5hbWUgaW4gdGhlIEpTT04KKyAgICAvLyByYXRoZXIg
dGhhbiByZWx5aW5nIG9uIG9ubHkgbG9hZGluZyBvbmUgSlNPTiBmaWxlIHBlciBwYWdlLgorICAg
IGlmICghZ19yZXN1bHRzQnlCdWlsZGVyW2dfY3VycmVudFN0YXRlLmJ1aWxkZXJdKQorICAgICAg
ICBnX3Jlc3VsdHNCeUJ1aWxkZXJbZ19jdXJyZW50U3RhdGUuYnVpbGRlcl0gPSBkYXRhOworCisg
ICAgaGFuZGxlTG9jYXRpb25DaGFuZ2UoKTsKK30KKwordmFyIGdfaXNHZW5lcmF0aW5nUGFnZSA9
IGZhbHNlOwordmFyIGdfd2ViVHJlZTsKKworZnVuY3Rpb24gZ2VuZXJhdGVQYWdlKCkKK3sKKyAg
ICBpZiAoIWdfcmVzdWx0c0J5QnVpbGRlcltnX2N1cnJlbnRTdGF0ZS5idWlsZGVyXSkgeworICAg
ICAgICBoYW5kbGVSZXNvdXJjZUxvYWRFcnJvcihnX2N1cnJlbnRTdGF0ZS5idWlsZGVyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGdfaXNHZW5lcmF0aW5nUGFnZSA9IHRydWU7CisK
KyAgICB2YXIgcmF3VHJlZSA9IGdfcmVzdWx0c0J5QnVpbGRlcltnX2N1cnJlbnRTdGF0ZS5idWls
ZGVyXTsKKyAgICBnX3dlYlRyZWUgPSBjb252ZXJ0VG9XZWJUcmVlbWFwRm9ybWF0KCdMYXlvdXRU
ZXN0cycsIHJhd1RyZWUpOworICAgIGFwcGVuZFRyZWVtYXAoJCgnbWFwJyksIGdfd2ViVHJlZSk7
CisKKyAgICBpZiAoZ19jdXJyZW50U3RhdGUudHJlZW1hcGZvY3VzKQorICAgICAgICBmb2N1c1Bh
dGgoZ193ZWJUcmVlLCBnX2N1cnJlbnRTdGF0ZS50cmVlbWFwZm9jdXMpCisKKyAgICBnX2lzR2Vu
ZXJhdGluZ1BhZ2UgPSBmYWxzZTsKK30KKworZnVuY3Rpb24gZm9jdXNQYXRoKHRyZWUsIHBhdGgp
Cit7CisgICAgdmFyIHBhcnRzID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhdGgpLnNwbGl0KCcvJyk7
CisgICAgaWYgKGV4dHJhY3ROYW1lKHRyZWUpICE9IHBhcnRzWzBdKSB7CisgICAgICAgIGNvbnNv
bGUuZXJyb3IoJ0NvdWxkIG5vdCBmb2N1cyB0cmVlIHJvb3RlZCBhdCAnICsgcGFydHNbMF0pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBwYXJ0cy5s
ZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgY2hpbGRyZW4gPSB0cmVlLmNoaWxkcmVuOworICAg
ICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNoaWxkcmVuLmxlbmd0aDsgaisrKSB7CisgICAgICAg
ICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltqXTsKKyAgICAgICAgICAgIGlmIChleHRyYWN0TmFt
ZShjaGlsZCkgPT0gcGFydHNbaV0pIHsKKyAgICAgICAgICAgICAgICB0cmVlID0gY2hpbGQ7Cisg
ICAgICAgICAgICAgICAgZm9jdXModHJlZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGogPT0gY2hpbGRyZW4ubGVuZ3RoKSB7
CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgZmluZCB0cmVlIGF0ICcgKyBw
YXJ0c1tpXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworfQorCitm
dW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkKK3sKKyAgICBzd2l0
Y2goa2V5KSB7CisgICAgY2FzZSAnYnVpbGRlcic6CisgICAgICAgIHZhbGlkYXRlUGFyYW1ldGVy
KGdfY3VycmVudFN0YXRlLCBrZXksIHZhbHVlLAorICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJl
dHVybiB2YWx1ZSBpbiBnX2J1aWxkZXJzOyB9KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBjYXNlICd0cmVlbWFwZm9jdXMnOgorICAgICAgICB2YWxpZGF0ZVBhcmFtZXRlcihnX2N1cnJl
bnRTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGVyZSdzIHByb2JhYmx5IGEgc2ltcGxlciByZWdleHAgaGVyZS4g
SnVzdCB0cnlpbmcgdG8gbWF0Y2ggYXNjaWkgKyBmb3J3YXJkLXNsYXNoLgorICAgICAgICAgICAg
ICAgIC8vIGUuZy4gTGF5b3V0VGVzdHMvZm9vL2Jhci5odG1sCisgICAgICAgICAgICAgICAgcmV0
dXJuICh2YWx1ZS5tYXRjaCgvXihcdytcL1x3KikqJC8pKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2dfZGVmYXVsdFN0YXRlVmFsdWVzID0geworICAgIGJ1aWxkZXI6IGdfZGVm
YXVsdEJ1aWxkZXJOYW1lCit9OworCitmdW5jdGlvbiBoYW5kbGVRdWVyeVBhcmFtZXRlckNoYW5n
ZShwYXJhbXMpCit7CisgICAgaWYgKCFnX3Jlc3VsdHNCeUJ1aWxkZXJbZ19jdXJyZW50U3RhdGUu
YnVpbGRlcl0pCisgICAgICAgIGFwcGVuZEpTT05TY3JpcHRFbGVtZW50Rm9yKGdfY3VycmVudFN0
YXRlLmJ1aWxkZXIpOworCisgICAgZm9yICh2YXIgcGFyYW0gaW4gcGFyYW1zKSB7CisgICAgICAg
IGlmIChwYXJhbSAhPSAndHJlZW1hcGZvY3VzJykgeworICAgICAgICAgICAgJCgnbWFwJykuaW5u
ZXJIVE1MID0gJ0xvYWRpbmcuLi4nOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBPdmVycmlkZXMgaGFuZGxlUmVz
b3VyY2VMb2FkRXJyb3IgaW4gZGFzaGJvYXJkX2Jhc2UuanMuCitmdW5jdGlvbiBoYW5kbGVSZXNv
dXJjZUxvYWRFcnJvcihidWlsZGVyTmFtZSwgZSkKK3sKKyAgICAkKCdtYXAnKS5pbm5lckhUTUwg
PSAnPHNwYW4gY2xhc3M9ZXJyb3I+Q291bGQgbm90IGxvYWQgZGF0YSBmb3IgJyArIGJ1aWxkZXJO
YW1lICsgJy4gJyArCisgICAgICAgICdFaXRoZXIgdGhlcmUgd2FzIGEgc2VydmVyLXNpZGUgZXJy
b3Igb3IgJyArIGJ1aWxkZXJOYW1lICsgJyBkb2VzIG5vdCBydW4gJyArCisgICAgICAgIGdfY3Vy
cmVudFN0YXRlLnRlc3RUeXBlICsgJy48L3NwYW4+JzsKK30KKworZnVuY3Rpb24gZXh0cmFjdE5h
bWUobm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZS5uYW1lLnNwbGl0KCcgJylbMF07Cit9CisKK2Z1
bmN0aW9uIGZ1bGxOYW1lKG5vZGUpCit7CisgICAgdmFyIGJ1ZmZlciA9IFtleHRyYWN0TmFtZShu
b2RlKV07CisgICAgd2hpbGUgKG5vZGUucGFyZW50KSB7CisgICAgICAgIG5vZGUgPSBub2RlLnBh
cmVudDsKKyAgICAgICAgYnVmZmVyLnVuc2hpZnQoZXh0cmFjdE5hbWUobm9kZSkpOworICAgIH0K
KyAgICByZXR1cm4gYnVmZmVyLmpvaW4oJy8nKTsKK30KKworZnVuY3Rpb24gaGFuZGxlRm9jdXMo
dHJlZSkKK3sKKyAgICB2YXIgY3VycmVudGx5Rm9jdXNlZE5vZGUgPSAkKCdmb2N1c2VkLWxlYWYn
KTsKKyAgICBpZiAoY3VycmVudGx5Rm9jdXNlZE5vZGUpCisgICAgICAgIGN1cnJlbnRseUZvY3Vz
ZWROb2RlLmlkID0gJyc7CisKKyAgICBpZiAoIXRyZWUuY2hpbGRyZW4pCisgICAgICAgIHRyZWUu
ZG9tLmlkID0gJ2ZvY3VzZWQtbGVhZic7CisKKyAgICB2YXIgbmFtZSA9IGZ1bGxOYW1lKHRyZWUp
OworCisgICAgaWYgKCF0cmVlLmNoaWxkcmVuICYmICF0cmVlLmV4dHJhRG9tICYmIGlzTGF5b3V0
VGVzdFJlc3VsdHMoKSkgeworICAgICAgICB0cmVlLmV4dHJhRG9tID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgncHJlJyk7CisgICAgICAgIHRyZWUuZXh0cmFEb20uY2xhc3NOYW1lID0gJ2V4dHJh
LWRvbSc7CisgICAgICAgIHRyZWUuZG9tLmFwcGVuZENoaWxkKHRyZWUuZXh0cmFEb20pOworCisg
ICAgICAgIHJlcXVlc3QoVEVTVF9VUkxfQkFTRV9QQVRIICsgbmFtZSwKKyAgICAgICAgICAgIGZ1
bmN0aW9uKHhocikgeworICAgICAgICAgICAgICAgIHRyZWUuZXh0cmFEb20ub25tb3VzZWRvd24g
PSBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7
CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB0cmVlLmV4dHJhRG9tLnRleHRD
b250ZW50ID0geGhyLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBm
dW5jdGlvbiAoeGhyKSB7CisgICAgICAgICAgICAgICAgdHJlZS5leHRyYURvbS50ZXh0Q29udGVu
dCA9ICJDb3VsZCBub3QgbG9hZCB0ZXN0LiIKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8g
V2UgZG9uJ3Qgd2FudCB0aGUgZm9jdXMgY2FsbHMgZHVyaW5nIGdlbmVyYXRlUGFnZSB0byB0cnkg
dG8gbW9kaWZ5IHRoZSBxdWVyeSBzdGF0ZS4KKyAgICBpZiAoIWdfaXNHZW5lcmF0aW5nUGFnZSkK
KyAgICAgICAgc2V0UXVlcnlQYXJhbWV0ZXIoJ3RyZWVtYXBmb2N1cycsIG5hbWUpOworfQorCitw
YXJzZVBhcmFtZXRlcnMoKTsKK2FwcGVuZEpTT05TY3JpcHRFbGVtZW50Rm9yKGdfY3VycmVudFN0
YXRlLmJ1aWxkZXIpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0c0Rhc2hib2Fy
ZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy93ZWJ0cmVlbWFwLmNzcyBiL1Rvb2xzL1Rlc3RzRGFz
aGJvYXJkU2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3dlYnRyZWVtYXAuY3NzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmEwNzg2NTAxNjNkZjJjMDIwMWQ0NjRiZjE2ZTQ0OTBhZGM5Yjk3YjEKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy93ZWJ0cmVl
bWFwLmNzcwpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLndlYnRyZWVtYXAtbm9kZSB7CisgIC8qIFJlcXVpcmVk
IGF0dHJpYnV0ZXMuICovCisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgb3ZlcmZsb3c6IGhpZGRl
bjsgICAvKiBUbyBoaWRlIG92ZXJsb25nIGNhcHRpb25zLiAqLworICBiYWNrZ3JvdW5kOiB3aGl0
ZTsgIC8qIE5vZGVzIG11c3QgYmUgb3BhcXVlIGZvciB6SW5kZXggbGF5ZXJpbmcuICovCisgIGJv
cmRlcjogc29saWQgMXB4IGJsYWNrOyAgLyogQ2FsY3VsYXRpb25zIGFzc3VtZSAxcHggYm9yZGVy
LiAqLworCisgIC8qIE9wdGlvbmFsOiBDU1MgYW5pbWF0aW9uLiAqLworICAtd2Via2l0LXRyYW5z
aXRpb246IHRvcCAgICAwLjNzLAorICAgICAgICAgICAgICAgICAgICAgIGxlZnQgICAwLjNzLAor
ICAgICAgICAgICAgICAgICAgICAgIHdpZHRoICAwLjNzLAorICAgICAgICAgICAgICAgICAgICAg
IGhlaWdodCAwLjNzOworfQorCisvKiBPcHRpb25hbDogaGlnaGxpZ2h0IG5vZGVzIG9uIG1vdXNl
b3Zlci4gKi8KKy53ZWJ0cmVlbWFwLW5vZGU6aG92ZXIgeworICBiYWNrZ3JvdW5kOiAjZWVlOwor
fQorCisvKiBPcHRpb25hbDogRGlmZmVyZW50IGJvcmRlcnMgZGVwZW5kaW5nIG9uIGxldmVsLiAq
LworLndlYnRyZWVtYXAtbGV2ZWwwIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHggIzQ0NDsKK30KKy53
ZWJ0cmVlbWFwLWxldmVsMSB7CisgIGJvcmRlcjogc29saWQgMXB4ICM2NjY7Cit9Cisud2VidHJl
ZW1hcC1sZXZlbDIgeworICBib3JkZXI6IHNvbGlkIDFweCAjODg4OworfQorLndlYnRyZWVtYXAt
bGV2ZWwzIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHggI2FhYTsKK30KKy53ZWJ0cmVlbWFwLWxldmVs
NCB7CisgIGJvcmRlcjogc29saWQgMXB4ICNjY2M7Cit9CisKKy8qIE9wdGlvbmFsOiBzdHlsaW5n
IG9uIG5vZGUgY2FwdGlvbnMuICovCisud2VidHJlZW1hcC1jYXB0aW9uIHsKKyAgZm9udC1mYW1p
bHk6IHNhbnMtc2VyaWY7CisgIGZvbnQtc2l6ZTogMTFweDsKKyAgcGFkZGluZzogMnB4OworICB0
ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy8qIE9wdGlvbmFsOiBzdHlsaW5nIG9uIGNhcHRpb25z
IG9uIG1vdXNlIGhvdmVyLiAqLworLyoud2VidHJlZW1hcC1ub2RlOmhvdmVyID4gLndlYnRyZWVt
YXAtY2FwdGlvbiB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfSovCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy93ZWJ0cmVl
bWFwLmpzIGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvd2Vi
dHJlZW1hcC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNWMwM2M2OGI4ZTNmYWFiZTNjOTE5ZTlhZTdjNTQ2NzQ4
NGMwYTViCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvc3Rh
dGljLWRhc2hib2FyZHMvd2VidHJlZW1hcC5qcwpAQCAtMCwwICsxLDI0MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIFNpemUgb2Yg
Ym9yZGVyIGFyb3VuZCBub2Rlcy4KKy8vIFdlIGNvdWxkIHN1cHBvcnQgYXJiaXRyYXJ5IGJvcmRl
cnMgdXNpbmcgZ2V0Q29tcHV0ZWRTdHlsZSgpLCBidXQgSSBhbQorLy8gc2tlcHRpY2FsIHRoZSBl
eHRyYSBjb21wbGV4aXR5IChhbmQgcGVyZm9ybWFuY2UgaGl0KSBpcyB3b3J0aCBpdC4KK3ZhciBr
Qm9yZGVyV2lkdGggPSAxOworCisvLyBQYWRkaW5nIGFyb3VuZCBjb250ZW50cy4KKy8vIFRPRE86
IGRvIHRoaXMgd2l0aCBhIG5lc3RlZCBkaXYgdG8gYWxsb3cgaXQgdG8gYmUgQ1NTLXN0eWxlYWJs
ZS4KK3ZhciBrUGFkZGluZyA9IDQ7CisKK3ZhciBmb2N1c2VkID0gbnVsbDsKKworLy8gQ2FsbGJh
Y2sgZm9yIGVtYmVkZGluZyBwYWdlIHRvIHVwZGF0ZSBhZnRlciBhIGZvY3VzLgorZnVuY3Rpb24g
aGFuZGxlRm9jdXModHJlZSkge30KKworZnVuY3Rpb24gZm9jdXModHJlZSkgeworICBmb2N1c2Vk
ID0gdHJlZTsKKworICAvLyBIaWRlIGFsbCB2aXNpYmxlIHNpYmxpbmdzIG9mIGFsbCBvdXIgYW5j
ZXN0b3JzIGJ5IGxvd2VyaW5nIHRoZW0uCisgIHZhciBsZXZlbCA9IDA7CisgIHZhciByb290ID0g
dHJlZTsKKyAgd2hpbGUgKHJvb3QucGFyZW50KSB7CisgICAgcm9vdCA9IHJvb3QucGFyZW50Owor
ICAgIGxldmVsICs9IDE7CisgICAgZm9yICh2YXIgaSA9IDAsIHNpYmxpbmc7IHNpYmxpbmcgPSBy
b290LmNoaWxkcmVuW2ldOyArK2kpIHsKKyAgICAgIGlmIChzaWJsaW5nLmRvbSkKKyAgICAgICAg
c2libGluZy5kb20uc3R5bGUuekluZGV4ID0gMDsKKyAgICB9CisgIH0KKyAgdmFyIHdpZHRoID0g
cm9vdC5kb20ub2Zmc2V0V2lkdGg7CisgIHZhciBoZWlnaHQgPSByb290LmRvbS5vZmZzZXRIZWln
aHQ7CisgIC8vIFVuaGlkZSAocmFpc2UpIGFuZCBtYXhpbWl6ZSB1cyBhbmQgb3VyIGFuY2VzdG9y
cy4KKyAgZm9yICh2YXIgdCA9IHRyZWU7IHQucGFyZW50OyB0ID0gdC5wYXJlbnQpIHsKKyAgICAv
LyBTaGlmdCBvZmYgYnkgYm9yZGVyIHNvIHdlIGRvbid0IGdldCBuZXN0ZWQgYm9yZGVycy4KKyAg
ICAvLyBUT0RPOiBhY3R1YWxseSBtYWtlIG5lc3RlZCBib3JkZXJzIHdvcmsgKG5lZWQgdG8gYWRq
dXN0IHdpZHRoL2hlaWdodCkuCisgICAgcG9zaXRpb24odC5kb20sIC1rQm9yZGVyV2lkdGgsIC1r
Qm9yZGVyV2lkdGgsIHdpZHRoLCBoZWlnaHQpOworICAgIHQuZG9tLnN0eWxlLnpJbmRleCA9IDE7
CisgIH0KKyAgLy8gQW5kIGxheW91dCBpbnRvIHRoZSB0b3Btb3N0IGJveC4KKyAgbGF5b3V0KHRy
ZWUsIGxldmVsLCB3aWR0aCwgaGVpZ2h0KTsKKyAgaGFuZGxlRm9jdXModHJlZSk7Cit9CisKK2Z1
bmN0aW9uIG1ha2VEb20odHJlZSwgbGV2ZWwpIHsKKyAgdmFyIGRvbSA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpOworICBkb20uc3R5bGUuekluZGV4ID0gMTsKKyAgZG9tLmNsYXNzTmFt
ZSA9ICd3ZWJ0cmVlbWFwLW5vZGUgd2VidHJlZW1hcC1sZXZlbCcgKyBNYXRoLm1pbihsZXZlbCwg
NCk7CisKKyAgZG9tLm9ubW91c2Vkb3duID0gZnVuY3Rpb24oZSkgeworICAgIGlmIChlLmJ1dHRv
biA9PSAwKSB7CisgICAgICBpZiAoZm9jdXNlZCAmJiB0cmVlID09IGZvY3VzZWQgJiYgZm9jdXNl
ZC5wYXJlbnQpIHsKKyAgICAgICAgZm9jdXMoZm9jdXNlZC5wYXJlbnQpOworICAgICAgfSBlbHNl
IHsKKyAgICAgICAgZm9jdXModHJlZSk7CisgICAgICB9CisgICAgfQorICAgIGUuc3RvcFByb3Bh
Z2F0aW9uKCk7CisgICAgcmV0dXJuIHRydWU7CisgIH07CisKKyAgdmFyIGNhcHRpb24gPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgY2FwdGlvbi5jbGFzc05hbWUgPSAnd2VidHJl
ZW1hcC1jYXB0aW9uJzsKKyAgY2FwdGlvbi5pbm5lckhUTUwgPSB0cmVlLm5hbWU7CisgIGRvbS5h
cHBlbmRDaGlsZChjYXB0aW9uKTsKKworICB0cmVlLmRvbSA9IGRvbTsKKyAgcmV0dXJuIGRvbTsK
K30KKworZnVuY3Rpb24gcG9zaXRpb24oZG9tLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7CisgIC8v
IENTUyB3aWR0aC9oZWlnaHQgZG9lcyBub3QgaW5jbHVkZSBib3JkZXIuCisgIHdpZHRoIC09IGtC
b3JkZXJXaWR0aCoyOworICBoZWlnaHQgLT0ga0JvcmRlcldpZHRoKjI7CisKKyAgZG9tLnN0eWxl
LmxlZnQgICA9IHggKyAncHgnOworICBkb20uc3R5bGUudG9wICAgID0geSArICdweCc7CisgIGRv
bS5zdHlsZS53aWR0aCAgPSBNYXRoLm1heCh3aWR0aCwgMCkgKyAncHgnOworICBkb20uc3R5bGUu
aGVpZ2h0ID0gTWF0aC5tYXgoaGVpZ2h0LCAwKSArICdweCc7Cit9CisKKy8vIEdpdmVuIGEgbGlz
dCBvZiByZWN0YW5nbGVzIHxub2Rlc3wsIHRoZSAxLWQgc3BhY2UgYXZhaWxhYmxlCisvLyB8c3Bh
Y2V8LCBhbmQgYSBzdGFydGluZyByZWN0YW5nbGUgaW5kZXggfHN0YXJ0fCwgY29tcHV0ZSBhbiBz
cGFuIG9mCisvLyByZWN0YW5nbGVzIHRoYXQgb3B0aW1pemVzIGEgcGxlYXNhbnQgYXNwZWN0IHJh
dGlvLgorLy8KKy8vIFJldHVybnMgW2VuZCwgc3VtXSwgd2hlcmUgZW5kIGlzIG9uZSBwYXN0IHRo
ZSBsYXN0IHJlY3RhbmdsZSBhbmQgc3VtIGlzIHRoZQorLy8gMi1kIHN1bSBvZiB0aGUgcmVjdGFu
Z2xlcycgYXJlYXMuCitmdW5jdGlvbiBzZWxlY3RTcGFuKG5vZGVzLCBzcGFjZSwgc3RhcnQpIHsK
KyAgLy8gQWRkIHJlY3RhbmdsZSBvbmUgYnkgb25lLCBzdG9wcGluZyB3aGVuIGFzcGVjdCByYXRp
b3MgYmVnaW4gdG8gZ28KKyAgLy8gYmFkLiAgUmVzdWx0IGlzIFtzdGFydCxlbmQpIGNvdmVyaW5n
IHRoZSBiZXN0IHJ1biBmb3IgdGhpcyBzcGFuLgorICAvLyBodHRwOi8vc2Nob2xhci5nb29nbGUu
Y29tL3NjaG9sYXI/Y2x1c3Rlcj01OTcyNTEyMTA3ODQ1NjE1NDc0CisgIHZhciBub2RlID0gbm9k
ZXNbc3RhcnRdOworICB2YXIgcm1pbiA9IG5vZGUuZGF0YVsnJGFyZWEnXTsgIC8vIFNtYWxsZXN0
IHNlZW4gY2hpbGQgc28gZmFyLgorICB2YXIgcm1heCA9IHJtaW47ICAgICAgICAgICAgICAgIC8v
IExhcmdlc3QgY2hpbGQuCisgIHZhciByc3VtID0gMDsgICAgICAgICAgICAgICAgICAgLy8gU3Vt
IG9mIGNoaWxkcmVuIGluIHRoaXMgc3Bhbi4KKyAgdmFyIGxhc3Rfc2NvcmUgPSAwOyAgICAgICAg
ICAgICAvLyBCZXN0IHNjb3JlIHlldCBmb3VuZC4KKyAgZm9yICh2YXIgZW5kID0gc3RhcnQ7IG5v
ZGUgPSBub2Rlc1tlbmRdOyArK2VuZCkgeworICAgIHZhciBzaXplID0gbm9kZS5kYXRhWyckYXJl
YSddOworICAgIGlmIChzaXplIDwgcm1pbikKKyAgICAgIHJtaW4gPSBzaXplOworICAgIGlmIChz
aXplID4gcm1heCkKKyAgICAgIHJtYXggPSBzaXplOworICAgIHJzdW0gKz0gc2l6ZTsKKworICAg
IC8vIFRoaXMgZm9ybXVsYSBpcyBmcm9tIHRoZSBwYXBlciwgYnV0IHlvdSBjYW4gZWFzaWx5IHBy
b3ZlIHRvCisgICAgLy8geW91cnNlbGYgaXQncyB0YWtpbmcgdGhlIGxhcmdlciBvZiB0aGUgeC95
IGFzcGVjdCByYXRpbyBvciB0aGUKKyAgICAvLyB5L3ggYXNwZWN0IHJhdGlvLiAgVGhlIGFkZGl0
aW9uYWwgbWFnaWMgZnVkZ2UgY29uc3RhbnQgb2YgNQorICAgIC8vIG1ha2VzIHVzIHByZWZlciB3
aWRlciByZWN0YW5nbGVzIHRvIHRhbGxlciBvbmVzLgorICAgIHZhciBzY29yZSA9IE1hdGgubWF4
KDUqc3BhY2Uqc3BhY2Uqcm1heCAvIChyc3VtKnJzdW0pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIDEqcnN1bSpyc3VtIC8gKHNwYWNlKnNwYWNlKnJtaW4pKTsKKyAgICBpZiAobGFzdF9zY29y
ZSAmJiBzY29yZSA+IGxhc3Rfc2NvcmUpIHsKKyAgICAgIHJzdW0gLT0gc2l6ZTsgIC8vIFVuZG8g
c2l6ZSBhZGRpdGlvbiBmcm9tIGp1c3QgYWJvdmUuCisgICAgICBicmVhazsKKyAgICB9CisgICAg
bGFzdF9zY29yZSA9IHNjb3JlOworICB9CisgIHJldHVybiBbZW5kLCByc3VtXTsKK30KKworZnVu
Y3Rpb24gbGF5b3V0KHRyZWUsIGxldmVsLCB3aWR0aCwgaGVpZ2h0KSB7CisgIGlmICghKCdjaGls
ZHJlbicgaW4gdHJlZSkpCisgICAgcmV0dXJuOworCisgIHZhciB0b3RhbCA9IHRyZWUuZGF0YVsn
JGFyZWEnXTsKKworICAvLyBYWFggd2h5IGRvIEkgbmVlZCBhbiBleHRyYSAtMS8tMiBoZXJlIGZv
ciB3aWR0aC9oZWlnaHQgdG8gbG9vayByaWdodD8KKyAgdmFyIHgxID0gMCwgeTEgPSAwLCB4MiA9
IHdpZHRoIC0gMSwgeTIgPSBoZWlnaHQgLSAyOworICB4MSArPSBrUGFkZGluZzsgeTEgKz0ga1Bh
ZGRpbmc7CisgIHgyIC09IGtQYWRkaW5nOyB5MiAtPSBrUGFkZGluZzsKKyAgeTEgKz0gMTQ7ICAv
LyBYWFggZ2V0IGZpcnN0IGNoaWxkIGhlaWdodCBmb3IgY2FwdGlvbiBzcGFjaW5nCisKKyAgdmFy
IHBpeGVsc190b191bml0cyA9IE1hdGguc3FydCh0b3RhbCAvICgoeDIgLSB4MSkgKiAoeTIgLSB5
MSkpKTsKKworICBmb3IgKHZhciBzdGFydCA9IDAsIGNoaWxkOyBjaGlsZCA9IHRyZWUuY2hpbGRy
ZW5bc3RhcnRdOyArK3N0YXJ0KSB7CisgICAgaWYgKHgyIC0geDEgPCA2MCB8fCB5MiAtIHkxIDwg
NDApIHsKKyAgICAgIGlmIChjaGlsZC5kb20pIHsKKyAgICAgICAgY2hpbGQuZG9tLnN0eWxlLnpJ
bmRleCA9IDA7CisgICAgICAgIHBvc2l0aW9uKGNoaWxkLmRvbSwgLTIsIC0yLCAwLCAwKTsKKyAg
ICAgIH0KKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8vIEluIHRoZW9yeSB3ZSBjYW4g
ZHluYW1pY2FsbHkgZGVjaWRlIHdoZXRoZXIgdG8gc3BsaXQgaW4geCBvciB5IGJhc2VkCisgICAg
Ly8gb24gYXNwZWN0IHJhdGlvLiAgSW4gcHJhY3RpY2UsIGNoYW5naW5nIHNwbGl0IGRpcmVjdGlv
biB3aXRoIHRoaXMKKyAgICAvLyBsYXlvdXQgZG9lc24ndCBsb29rIHZlcnkgZ29vZC4KKyAgICAv
LyAgIHZhciB5c3BsaXQgPSAoeTIgLSB5MSkgPiAoeDIgLSB4MSk7CisgICAgdmFyIHlzcGxpdCA9
IHRydWU7CisKKyAgICB2YXIgc3BhY2U7ICAvLyBTcGFjZSBhdmFpbGFibGUgYWxvbmcgbGF5b3V0
IGF4aXMuCisgICAgaWYgKHlzcGxpdCkKKyAgICAgIHNwYWNlID0gKHkyIC0geTEpICogcGl4ZWxz
X3RvX3VuaXRzOworICAgIGVsc2UKKyAgICAgIHNwYWNlID0gKHgyIC0geDEpICogcGl4ZWxzX3Rv
X3VuaXRzOworCisgICAgdmFyIHNwYW4gPSBzZWxlY3RTcGFuKHRyZWUuY2hpbGRyZW4sIHNwYWNl
LCBzdGFydCk7CisgICAgdmFyIGVuZCA9IHNwYW5bMF0sIHJzdW0gPSBzcGFuWzFdOworCisgICAg
Ly8gTm93IHRoYXQgd2UndmUgc2VsZWN0ZWQgYSBzcGFuLCBsYXkgb3V0IHJlY3RhbmdsZXMgW3N0
YXJ0LGVuZCkgaW4gb3VyCisgICAgLy8gYXZhaWxhYmxlIHNwYWNlLgorICAgIHZhciB4ID0geDEs
IHkgPSB5MTsKKyAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgeworICAgICAg
Y2hpbGQgPSB0cmVlLmNoaWxkcmVuW2ldOworICAgICAgaWYgKCFjaGlsZC5kb20pIHsKKyAgICAg
ICAgY2hpbGQucGFyZW50ID0gdHJlZTsKKyAgICAgICAgY2hpbGQuZG9tID0gbWFrZURvbShjaGls
ZCwgbGV2ZWwgKyAxKTsKKyAgICAgICAgdHJlZS5kb20uYXBwZW5kQ2hpbGQoY2hpbGQuZG9tKTsK
KyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNoaWxkLmRvbS5zdHlsZS56SW5kZXggPSAxOworICAg
ICAgfQorICAgICAgdmFyIHNpemUgPSBjaGlsZC5kYXRhWyckYXJlYSddOworICAgICAgdmFyIGZy
YWMgPSBzaXplIC8gcnN1bTsKKyAgICAgIGlmICh5c3BsaXQpIHsKKyAgICAgICAgd2lkdGggPSBy
c3VtIC8gc3BhY2U7CisgICAgICAgIGhlaWdodCA9IHNpemUgLyB3aWR0aDsKKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIGhlaWdodCA9IHJzdW0gLyBzcGFjZTsKKyAgICAgICAgd2lkdGggPSBzaXpl
IC8gaGVpZ2h0OworICAgICAgfQorICAgICAgd2lkdGggLz0gcGl4ZWxzX3RvX3VuaXRzOworICAg
ICAgaGVpZ2h0IC89IHBpeGVsc190b191bml0czsKKyAgICAgIHdpZHRoID0gTWF0aC5yb3VuZCh3
aWR0aCk7CisgICAgICBoZWlnaHQgPSBNYXRoLnJvdW5kKGhlaWdodCk7CisgICAgICBwb3NpdGlv
bihjaGlsZC5kb20sIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgaWYgKCdjaGlsZHJlbicg
aW4gY2hpbGQpIHsKKyAgICAgICAgbGF5b3V0KGNoaWxkLCBsZXZlbCArIDEsIHdpZHRoLCBoZWln
aHQpOworICAgICAgfQorICAgICAgaWYgKHlzcGxpdCkKKyAgICAgICAgeSArPSBoZWlnaHQ7Cisg
ICAgICBlbHNlCisgICAgICAgIHggKz0gd2lkdGg7CisgICAgfQorCisgICAgLy8gU2hyaW5rIG91
ciBhdmFpbGFibGUgc3BhY2UgYmFzZWQgb24gdGhlIGFtb3VudCB3ZSB1c2VkLgorICAgIGlmICh5
c3BsaXQpCisgICAgICB4MSArPSBNYXRoLnJvdW5kKChyc3VtIC8gc3BhY2UpIC8gcGl4ZWxzX3Rv
X3VuaXRzKTsKKyAgICBlbHNlCisgICAgICB5MSArPSBNYXRoLnJvdW5kKChyc3VtIC8gc3BhY2Up
IC8gcGl4ZWxzX3RvX3VuaXRzKTsKKworICAgIC8vIGVuZCBwb2ludHMgb25lIHBhc3Qgd2hlcmUg
d2UgZW5kZWQsIHdoaWNoIGlzIHdoZXJlIHdlIHdhbnQgdG8KKyAgICAvLyBiZWdpbiB0aGUgbmV4
dCBpdGVyYXRpb24sIGJ1dCBzdWJ0cmFjdCBvbmUgdG8gYmFsYW5jZSB0aGUgKysgaW4KKyAgICAv
LyB0aGUgbG9vcC4KKyAgICBzdGFydCA9IGVuZCAtIDE7CisgIH0KK30KKworZnVuY3Rpb24gYXBw
ZW5kVHJlZW1hcChkb20sIGRhdGEpIHsKKyAgdmFyIHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShk
b20sIG51bGwpOworICB2YXIgd2lkdGggPSBwYXJzZUludChzdHlsZS53aWR0aCk7CisgIHZhciBo
ZWlnaHQgPSBwYXJzZUludChzdHlsZS5oZWlnaHQpOworICBpZiAoIWRhdGEuZG9tKQorICAgIG1h
a2VEb20oZGF0YSwgMCk7CisgIGRvbS5hcHBlbmRDaGlsZChkYXRhLmRvbSk7CisgIHBvc2l0aW9u
KGRhdGEuZG9tLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgbGF5b3V0KGRhdGEsIDAsIHdpZHRo
LCBoZWlnaHQpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3RlbXBsYXRlcy9maWxlbGlzdC5odG1sIGIvVG9vbHMv
VGVzdHNEYXNoYm9hcmRTZXJ2ZXIvdGVtcGxhdGVzL2ZpbGVsaXN0Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MmVkYjVhZDg0YmFkMzk0MjI5ODYxNmE5YWNmOTViYzhkMzFhZGRmYgotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RzRGFzaGJvYXJkU2VydmVyL3RlbXBsYXRlcy9maWxlbGlzdC5odG1sCkBA
IC0wLDAgKzEsNTYgQEAKKzwhRE9DVFlQRSBodG1sPgorPHRpdGxlPlRlc3QgUmVzdWx0cyAtIHt7
Lk1hc3Rlcn19IHt7LkJ1aWxkZXJ9fSB7ey5UZXN0VHlwZX19IHt7Lk5hbWV9fTwvdGl0bGU+Cis8
c3R5bGU+Citib2R5IHsKKyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEhlbHZldGljYSwgc2Fucy1z
ZXJpZjsKK30KK2gxIHsKKyAgY29sb3I6ICM0NDQ7CisgIGZvbnQtc2l6ZTogMTRwdDsKKyAgZm9u
dC1zdHlsZTogaXRhbGljOworICBtYXJnaW46IDBweDsKKyAgcGFkZGluZzogNXB4OworfQordGFi
bGUgeworICBib3JkZXItc3BhY2luZzogMHB4OworfQordGggeworICBiYWNrZ3JvdW5kLWNvbG9y
OiAjQUFBOworICBjb2xvcjogd2hpdGU7CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBhZGRpbmc6
IDVweDsKKyAgZm9udC1zaXplOiAxMnB0OworfQordGQgeworICBmb250LXNpemU6IDExcHQ7Cisg
IHBhZGRpbmc6IDNweDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KK3RyOmhvdmVyIHsKKyAgYmFj
a2dyb3VuZC1jb2xvcjogI0VFRTsKK30KKzwvc3R5bGU+Cis8aDE+VGVzdCBSZXN1bHRzIC0ge3su
TWFzdGVyfX0ge3suQnVpbGRlcn19IHt7LlRlc3RUeXBlfX0ge3suTmFtZX19PC9oMT4KKzxkaXY+
CisgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGg+TWFzdGVyPC90aD4K
KyAgICAgICAgICAgIDx0aD5CdWlsZGVyPC90aD4KKyAgICAgICAgICAgIDx0aD5UZXN0IFR5cGU8
L3RoPgorICAgICAgICAgICAgPHRoPkZpbGU8L3RoPgorICAgICAgICAgICAgPHRoPkRhdGU8L3Ro
PgorICAgICAgICAgICAgPHRoPjwvdGg+CisgICAgICAgIDwvdHI+CisKKyAgICAgICAge3tyYW5n
ZSAuRmlsZXNXaXRoS2V5c319CisgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0ZD48YSBocmVm
PSJ0ZXN0ZmlsZT9tYXN0ZXI9e3suRmlsZS5NYXN0ZXJ9fSI+e3suRmlsZS5NYXN0ZXJ9fTwvYT48
L3RkPgorICAgICAgICAgICAgPHRkPjxhIGhyZWY9InRlc3RmaWxlP2J1aWxkZXI9e3suRmlsZS5C
dWlsZGVyfX0iPnt7LkZpbGUuQnVpbGRlcn19PC9hPjwvdGQ+CisgICAgICAgICAgICA8dGQ+PGEg
aHJlZj0idGVzdGZpbGU/dGVzdHR5cGU9e3suRmlsZS5UZXN0VHlwZX19Ij57ey5GaWxlLlRlc3RU
eXBlfX08L2E+PC90ZD4KKyAgICAgICAgICAgIDx0ZD48YSBocmVmPSJ0ZXN0ZmlsZT9tYXN0ZXI9
e3suRmlsZS5NYXN0ZXJ9fSZidWlsZGVyPXt7LkZpbGUuQnVpbGRlcn19Jm5hbWU9e3suRmlsZS5O
YW1lfX0mdGVzdHR5cGU9e3suRmlsZS5UZXN0VHlwZX19Ij57ey5GaWxlLk5hbWV9fTwvYT48L3Rk
PgorICAgICAgICAgICAgPHRkPjxzY3JpcHQ+ZG9jdW1lbnQud3JpdGUobmV3IERhdGUoe3suRmls
ZS5EYXRlTWljcm9zZWNvbmRzfX0gLyAxMDAwKS50b0xvY2FsZVN0cmluZygpKTwvc2NyaXB0Pjwv
dGQ+CisgICAgICAgICAgICA8dGQ+PGEgaHJlZj0idGVzdGZpbGUvZGVsZXRlP2tleT17ey5LZXku
RW5jb2RlfX0iPkRlbGV0ZTwvYT48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICB7e2VuZH19
CisgICAgPC90YWJsZT4KKzwvZGl2PgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdHNEYXNoYm9hcmRT
ZXJ2ZXIvdGVtcGxhdGVzL2ZpbGVsaXN0Lmpzb25wIGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2
ZXIvdGVtcGxhdGVzL2ZpbGVsaXN0Lmpzb25wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkYjY4OGVhMWJhYjA1YTQ1
OTIxZjgxMzRiNzAzN2Y4YmZhMzJhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0c0Rh
c2hib2FyZFNlcnZlci90ZW1wbGF0ZXMvZmlsZWxpc3QuanNvbnAKQEAgLTAsMCArMSBAQAore3su
Q2FsbGJhY2t9fShbe3tyYW5nZSAuS2V5c319e2tleToie3suRW5jb2RlfX0ifSx7e2VuZH19XSk7
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci90ZW1wbGF0ZXMvbWVudS5o
dG1sIGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvdGVtcGxhdGVzL21lbnUuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lMDNiZGY1NDlkNTBiZDVhZjdjNzhlZjA1ZDYyY2Q2NjhlNTIxMWExCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdHNEYXNoYm9hcmRTZXJ2ZXIvdGVtcGxhdGVzL21lbnUuaHRt
bApAQCAtMCwwICsxLDMyIEBACis8IURPQ1RZUEUgaHRtbD4KKzx0aXRsZT5UZXN0IFJlc3VsdCBT
ZXJ2ZXI8L3RpdGxlPgorPHN0eWxlPgorYm9keSB7CisgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBI
ZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Cit9Cit1bCB7CisgIGxpc3Qtc3R5bGU6IG5vbmU7Cit9Cits
aSB7CisgIHBhZGRpbmc6IDVweCAwOworfQorPC9zdHlsZT4KKworPGgyPkRhc2hib2FyZHM8L2gy
PgorPGRpdj4KKyAgICA8dWw+CisgICAgICAgIDxsaT48YSBocmVmPSJkYXNoYm9hcmRzL2ZsYWtp
bmVzc19kYXNoYm9hcmQuaHRtbCIgPlJlc3VsdHM8L2E+PC9saT4KKyAgICAgICAgPGxpPjxhIGhy
ZWY9ImRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuaHRtbCIgPlRpbWVsaW5lPC9hPjwvbGk+
CisgICAgICAgIDxsaT48YSBocmVmPSJkYXNoYm9hcmRzL3RyZWVtYXAuaHRtbCIgPlRyZWVtYXA8
L2E+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9ImRhc2hib2FyZHMvYWdncmVnYXRlX3Jlc3Vs
dHMuaHRtbCIgPlN0YXRzPC9hPjwvbGk+CisgICAgPC91bD4KKzwvZGl2PgorCis8aDI+SlNPTiBm
aWxlczwvaDI+Cis8ZGl2PgorICAgIDx1bD4KKyAgICAgICAgPGxpPjxhIGhyZWY9InRlc3RmaWxl
IiA+TGlzdCBvZiB0ZXN0IGZpbGVzPC9hPjwvbGk+CisgICAgICAgIDxsaT48YSBocmVmPSJ0ZXN0
ZmlsZT9uYW1lPXJlc3VsdHMuanNvbiIgPkxpc3Qgb2YgcmVzdWx0cy5qc29uIGZpbGVzPC9hPjwv
bGk+CisgICAgICAgIDxsaT48YSBocmVmPSJ0ZXN0ZmlsZS91cGxvYWRmb3JtIiA+VXBsb2FkIHRl
c3QgZmlsZTwvYT48L2xpPgorICAgIDwvdWw+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RzRGFzaGJvYXJkU2VydmVyL3RlbXBsYXRlcy91cGxvYWRmb3JtLmh0bWwgYi9Ub29scy9UZXN0
c0Rhc2hib2FyZFNlcnZlci90ZW1wbGF0ZXMvdXBsb2FkZm9ybS5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5
YzhjOGNkYjE0NjVhZDM0NTY3NTAwMGZiZTBjZTZhODBhZDc4NDAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9UZXN0c0Rhc2hib2FyZFNlcnZlci90ZW1wbGF0ZXMvdXBsb2FkZm9ybS5odG1sCkBA
IC0wLDAgKzEsNDcgQEAKKzwhRE9DVFlQRSBodG1sPgorPHRpdGxlPlVwbG9hZCBUZXN0IFJlc3Vs
dCBGaWxlPC90aXRsZT4KKzxzdHlsZT4KK2JvZHkgeworICBmb250LWZhbWlseTogVmVyZGFuYTsK
KyAgY29sb3I6ICM0NDQ7Cit9CitoMSB7CisgIGZvbnQtc2l6ZTogMTRwdDsKKyAgZm9udC1zdHls
ZTogaXRhbGljOworICBtYXJnaW46IDBweDsKKyAgcGFkZGluZzogNXB4OworfQorLmxhYmVsIHsK
KyAgbWFyZ2luOiAxcHg7CisgIHBhZGRpbmc6IDVweDsKKyAgZm9udC1zaXplOiAxMXB0OworICB3
aWR0aDogOTBweDsKK30KKy5pbnB1dHRleHQgeworICBmb250LXNpemU6IDExcHQ7Cit9CisuYnV0
dG9uIHsKKyAgbWFyZ2luOiAxcHg7CisgIHBhZGRpbmc6IDFweDsKKyAgZm9udC1zaXplOiAxMXB0
OworfQorPC9zdHlsZT4KKzxoMT5VcGxvYWQgVGVzdCBSZXN1bHQgRmlsZTwvaDE+Cis8Zm9ybSBp
ZD0idXBsb2FkRm9ybSIgbmFtZT0idGVzdF9yZXN1bHRfdXBsb2FkIiBhY2NlcHQ9InRleHQvaHRt
bCIgYWN0aW9uPSJ1cGxvYWQiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0i
cG9zdCI+CisgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGQgY2xhc3M9
bGFiZWw+PGxhYmVsPk1hc3Rlcjo8L2xhYmVsPjwvdGQ+CisgICAgICAgICAgICA8dGQ+PGlucHV0
IGNsYXNzPWlucHV0dGV4dCBuYW1lPSJtYXN0ZXIiIHBsYWNlaG9sZGVyPSJDaHJvbWl1bSIvPjwv
dGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz1s
YWJlbD48bGFiZWw+QnVpbGRlcjo8L2xhYmVsPjwvdGQ+CisgICAgICAgICAgICA8dGQ+PGlucHV0
IGNsYXNzPWlucHV0dGV4dCBuYW1lPSJidWlsZGVyIiBwbGFjZWhvbGRlcj0iV2Via2l0Ii8+PC90
ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgICAgPHRkIGNsYXNzPWxh
YmVsPjxsYWJlbD5UZXN0IFR5cGU6PC9sYWJlbD48L3RkPgorICAgICAgICAgICAgPHRkPjxpbnB1
dCBjbGFzcz1pbnB1dHRleHQgbmFtZT0idGVzdHR5cGUiIHBsYWNlaG9sZGVyPSJsYXlvdXQtdGVz
dHMiLz48L3RkPgorICAgICAgICA8L3RyPgorICAgIDwvdGFibGU+CisgICAgPGRpdj48aW5wdXQg
Y2xhc3M9YnV0dG9uIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiIG11bHRpcGxlPjwvZGl2PgorICAg
IDxkaXY+PGlucHV0IGNsYXNzPWJ1dHRvbiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJVcGxvYWQiPjwv
ZGl2PgorPC9mb3JtPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>