<?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>202063</bug_id>
          
          <creation_ts>2019-09-20 16:49:59 -0700</creation_ts>
          <short_desc>Tool to mark jsc test skip/enable</short_desc>
          <delta_ts>2019-10-15 15:45:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>Safari Technology Preview</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zhifei Fang">zhifei_fang</reporter>
          <assigned_to name="Zhifei Fang">zhifei_fang</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jbedard</cc>
    
    <cc>keith_miller</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zhifei_fang</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1572949</commentid>
    <comment_count>0</comment_count>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-09-20 16:49:59 -0700</bug_when>
    <thetext>A script that can mark jsc test skip under certain conditions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572950</commentid>
    <comment_count>1</comment_count>
      <attachid>379284</attachid>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-09-20 16:51:44 -0700</bug_when>
    <thetext>Created attachment 379284
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573236</commentid>
    <comment_count>2</comment_count>
      <attachid>379284</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2019-09-22 22:49:22 -0700</bug_when>
    <thetext>Comment on attachment 379284
Patch

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

&gt; Tools/Scripts/run-jsc-stress-tests:187
&gt; +               [&apos;--hardware&apos;, GetoptLong::REQUIRED_ARGUMENT],

Is it ok that this is a required argument, but it’s only added conditionally by the caller?

Also, while I don’t have a better suggestion, the argument name feels unusual to me. Is there any precedent for —hardware? Please respond privately if it’s internal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577479</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2019-10-07 13:42:58 -0700</bug_when>
    <thetext>&gt; Is there any precedent for —hardware?

Something with a &quot;model&quot; in the name may be more natural. I guess I don&apos;t know what kinds of values are accepted here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577524</commentid>
    <comment_count>4</comment_count>
      <attachid>379284</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-10-07 14:59:33 -0700</bug_when>
    <thetext>Comment on attachment 379284
Patch

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

r=me with option name change.

&gt; Tools/Scripts/mark-jsc-stress-test:127
&gt; +    if args[&quot;jsc_json_output&quot;]:

Does python convert the - to _? That&apos;s bizarre...

&gt;&gt; Tools/Scripts/run-jsc-stress-tests:187
&gt;&gt; +               [&apos;--hardware&apos;, GetoptLong::REQUIRED_ARGUMENT],
&gt; 
&gt; Is it ok that this is a required argument, but it’s only added conditionally by the caller?
&gt; 
&gt; Also, while I don’t have a better suggestion, the argument name feels unusual to me. Is there any precedent for —hardware? Please respond privately if it’s internal.

Yeah, hardware is a bit of a weird name in the context of JSC tests since JSC cares about both the platform and the architecture. Can we call this platform instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577531</commentid>
    <comment_count>5</comment_count>
      <attachid>379284</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-10-07 15:21:26 -0700</bug_when>
    <thetext>Comment on attachment 379284
Patch

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

&gt; Tools/Scripts/mark-jsc-stress-test:12
&gt; +formatter = logging.Formatter(&apos;%(asctime)s - %(levelname)s - %(message)s&apos;)

Does this work in Python 3? Given our current efforts, I&apos;d like new scripts to be compatible.

&gt; Tools/Scripts/mark-jsc-stress-test:17
&gt; +def iter_dir_recusive(path, callback):

Can we not just use os.walk?

&gt; Tools/Scripts/mark-jsc-stress-test:44
&gt; +    def _generate_condition_op(self, value):

I don&apos;t think this is a super useful function, it would be more clean to just inline it in _parse_condition

&gt; Tools/Scripts/mark-jsc-stress-test:58
&gt; +                res.append(&apos;{} {} &quot;{}&quot;&apos;.format(variable, self._generate_condition_op(word), word))

Don&apos;t we need to script the ! from the word if it has one?

&gt; Tools/Scripts/mark-jsc-stress-test:90
&gt; +        # remove the exisiting skip line, so that we can apply the new one

Nit: &apos;Remove the existing skip line to replace it with a new one

&gt; Tools/Scripts/mark-jsc-stress-test:114
&gt; +    parser_skip.add_argument(&quot;--host-os&quot;, help=&quot;skip if host os matches given value, you can specify complex condition like &apos;windows or linux&apos; &apos;!windows and !linux&apos;&quot;)

We usually describe this as &apos;platform&apos;

&gt; Tools/Scripts/mark-jsc-stress-test:115
&gt; +    parser_skip.add_argument(&quot;--hardware&quot;, help=&quot;skip if hardware matches given value, you can specify complex condition like &apos;watch3 or watch4&apos; &apos;!watch3 and !watch4&apos;&quot;)

The idiom I&apos;ve been using for this is &apos;model&apos;....same idea, but let&apos;s keep things standard.

Also, can we be more specific about the types of models specified? I have historically use the simulators as a guide...watches, for example, are canonically &apos;Apple Watch Series x&apos;

&gt; Tools/Scripts/mark-jsc-stress-test:116
&gt; +    parser_skip.add_argument(&quot;--arch&quot;, help=&quot;skip if architecture matches given value, you can speicify complex condition like &apos;arm or x86&apos; &apos;!arm and !x86&apos;&quot;)

No reason to use an abbreviation here, just say architecture (especially since argparse is smart enough to allow abbreviations)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577539</commentid>
    <comment_count>6</comment_count>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-10-07 15:38:24 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #4)
&gt; Comment on attachment 379284 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=379284&amp;action=review
&gt; 
&gt; r=me with option name change.
&gt; 
&gt; &gt; Tools/Scripts/mark-jsc-stress-test:127
&gt; &gt; +    if args[&quot;jsc_json_output&quot;]:
&gt; 
&gt; Does python convert the - to _? That&apos;s bizarre...
&gt; 
&gt; &gt;&gt; Tools/Scripts/run-jsc-stress-tests:187
&gt; &gt;&gt; +               [&apos;--hardware&apos;, GetoptLong::REQUIRED_ARGUMENT],
&gt; &gt; 
&gt; &gt; Is it ok that this is a required argument, but it’s only added conditionally by the caller?
&gt; &gt; 
&gt; &gt; Also, while I don’t have a better suggestion, the argument name feels unusual to me. Is there any precedent for —hardware? Please respond privately if it’s internal.
&gt; 
&gt; Yeah, hardware is a bit of a weird name in the context of JSC tests since
&gt; JSC cares about both the platform and the architecture. Can we call this
&gt; platform instead?

As Jonathan mentioned, usually we call host os to platform.
The hardware here is for a specific hardware that we want to skip tests, for example those devices that haven&apos;t support JIT yet, which will run supper slowly for some tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577922</commentid>
    <comment_count>7</comment_count>
      <attachid>380459</attachid>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-10-08 13:41:40 -0700</bug_when>
    <thetext>Created attachment 380459
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577924</commentid>
    <comment_count>8</comment_count>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-10-08 13:46:14 -0700</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #5)
&gt; Comment on attachment 379284 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=379284&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/mark-jsc-stress-test:12
&gt; &gt; +formatter = logging.Formatter(&apos;%(asctime)s - %(levelname)s - %(message)s&apos;)
&gt; 
&gt; Does this work in Python 3? Given our current efforts, I&apos;d like new scripts
&gt; to be compatible.

https://docs.python.org/3/library/logging.html
Yes

&gt; 
&gt; &gt; Tools/Scripts/mark-jsc-stress-test:17
&gt; &gt; +def iter_dir_recusive(path, callback):
&gt; 
&gt; Can we not just use os.walk?
&gt; 
&gt; &gt; Tools/Scripts/mark-jsc-stress-test:44
&gt; &gt; +    def _generate_condition_op(self, value):
&gt; 
&gt; I don&apos;t think this is a super useful function, it would be more clean to
&gt; just inline it in _parse_condition
&gt; 
&gt; &gt; Tools/Scripts/mark-jsc-stress-test:58
&gt; &gt; +                res.append(&apos;{} {} &quot;{}&quot;&apos;.format(variable, self._generate_condition_op(word), word))
&gt; 
&gt; Don&apos;t we need to script the ! from the word if it has one?
&gt; 
&gt; &gt; Tools/Scripts/mark-jsc-stress-test:90
&gt; &gt; +        # remove the exisiting skip line, so that we can apply the new one
&gt; 
&gt; Nit: &apos;Remove the existing skip line to replace it with a new one
&gt; 
&gt; &gt; Tools/Scripts/mark-jsc-stress-test:114
&gt; &gt; +    parser_skip.add_argument(&quot;--host-os&quot;, help=&quot;skip if host os matches given value, you can specify complex condition like &apos;windows or linux&apos; &apos;!windows and !linux&apos;&quot;)
&gt; 
&gt; We usually describe this as &apos;platform&apos;
&gt; 
&gt; &gt; Tools/Scripts/mark-jsc-stress-test:115
&gt; &gt; +    parser_skip.add_argument(&quot;--hardware&quot;, help=&quot;skip if hardware matches given value, you can specify complex condition like &apos;watch3 or watch4&apos; &apos;!watch3 and !watch4&apos;&quot;)
&gt; 
&gt; The idiom I&apos;ve been using for this is &apos;model&apos;....same idea, but let&apos;s keep
&gt; things standard.
&gt; 
&gt; Also, can we be more specific about the types of models specified? I have
&gt; historically use the simulators as a guide...watches, for example, are
&gt; canonically &apos;Apple Watch Series x&apos;
&gt; 
&gt; &gt; Tools/Scripts/mark-jsc-stress-test:116
&gt; &gt; +    parser_skip.add_argument(&quot;--arch&quot;, help=&quot;skip if architecture matches given value, you can speicify complex condition like &apos;arm or x86&apos; &apos;!arm and !x86&apos;&quot;)
&gt; 
&gt; No reason to use an abbreviation here, just say architecture (especially
&gt; since argparse is smart enough to allow abbreviations)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579916</commentid>
    <comment_count>9</comment_count>
      <attachid>380459</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-10-14 17:23:11 -0700</bug_when>
    <thetext>Comment on attachment 380459
Patch

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

&gt; Tools/Scripts/mark-jsc-stress-test:18
&gt; +    if os.path.isfile(path) and os.path.splitext(path)[1] == &apos;.js&apos;:

Bit confused why we need to recursion here? can&apos;t we just put this &apos;if&apos; statement inside the loop?

Probably should just name this &apos;iter_directory&apos;

&gt; Tools/Scripts/mark-jsc-stress-test:56
&gt; +    # Translate it to ruby: $hostOs != A or $hostOs == B or $hostOs == C and $hostOs == D 

# Translated to ruby: ...

&gt; Tools/Scripts/mark-jsc-stress-test:114
&gt; +]

Feels like there should be a newline after this.

&gt; Tools/Scripts/mark-jsc-stress-test:118
&gt; +    file_list_help = &quot;files/directories list: a.js, b.js, c.js, use - if you are using --jsc-json-output&quot;

What do you mean by &apos;use -&apos; if you are using --jsc-json-output?

&gt; Tools/Scripts/mark-jsc-stress-test:119
&gt; +    parser_enable = subparsers.add_parser(&quot;enable&quot;, help=&quot;enable the tests which are marked as skipped by this script&quot;)

Capitalize help message

&gt; Tools/Scripts/mark-jsc-stress-test:121
&gt; +    parser_enable.add_argument(&quot;--jsc-json-output&quot;, help=&quot;run-javascriptcore-tests json output, you can use it to enable all the failed tests if they have been set to skip by this script&quot;)

Should be something like: &quot;Pass the json output of run-javascriptcore-tests to unskip all failed tests&quot;

Side note: Is that really what you mean? Seems like it should be unskipping all passed tests

&gt; Tools/Scripts/mark-jsc-stress-test:123
&gt; +    parser_skip = subparsers.add_parser(&quot;skip&quot;, help=&quot;insert skip condition to given files/directories&quot;)

Capitalize help message

&gt; Tools/Scripts/mark-jsc-stress-test:125
&gt; +    parser_skip.add_argument(&quot;--jsc-json-output&quot;, help=&quot;run-javascriptcore-tests json output, you can use it to skip all the failed tests&quot;)

Duplicate?

&gt; Tools/Scripts/mark-jsc-stress-test:126
&gt; +    parser_skip.add_argument(&quot;--platform&quot;, &quot;--host-os&quot;, help=&quot;skip if host os matches given value, you can specify complex condition like &apos;windows or linux&apos; &apos;!windows and !linux&apos;&quot;)

Skip if host matches a given condition. Examples: &apos;windows or linux&apos;, &apos;!mac&apos;, &apos;!windows and !linux&apos;

&gt; Tools/Scripts/mark-jsc-stress-test:127
&gt; +    parser_skip.add_argument(&quot;--model&quot;, help=&quot;skip if hardware model matches given value, you can specify complex condition like &apos;watch3 or watch4&apos; &apos;!Apple Watch Series 3 and !Apple Watch Series 4&apos;&quot;)

Skip if hardware matches a given condition. Examples: ...

&gt; Tools/Scripts/mark-jsc-stress-test:128
&gt; +    parser_skip.add_argument(&quot;--architecture&quot;, help=&quot;skip if architecture matches given value, you can speicify complex condition like &apos;arm or x86&apos; &apos;!arm and !x86&apos;&quot;)

Skip if architecture matches a given condition. Examples: ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579945</commentid>
    <comment_count>10</comment_count>
      <attachid>380459</attachid>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-10-14 18:48:50 -0700</bug_when>
    <thetext>Comment on attachment 380459
Patch

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

&gt;&gt; Tools/Scripts/mark-jsc-stress-test:18
&gt;&gt; +    if os.path.isfile(path) and os.path.splitext(path)[1] == &apos;.js&apos;:
&gt; 
&gt; Bit confused why we need to recursion here? can&apos;t we just put this &apos;if&apos; statement inside the loop?
&gt; 
&gt; Probably should just name this &apos;iter_directory&apos;

The path arg can be directly a file instead of a directory. Just don&apos;t want to repeat my file handling logic, so I call itself.

&gt;&gt; Tools/Scripts/mark-jsc-stress-test:118
&gt;&gt; +    file_list_help = &quot;files/directories list: a.js, b.js, c.js, use - if you are using --jsc-json-output&quot;
&gt; 
&gt; What do you mean by &apos;use -&apos; if you are using --jsc-json-output?

in this case, you don&apos;t need a file name. but still need to give a &quot;-&quot; for file argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580198</commentid>
    <comment_count>11</comment_count>
      <attachid>381007</attachid>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-10-15 11:46:34 -0700</bug_when>
    <thetext>Created attachment 381007
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580322</commentid>
    <comment_count>12</comment_count>
      <attachid>381007</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-15 15:24:10 -0700</bug_when>
    <thetext>Comment on attachment 381007
Patch

Clearing flags on attachment: 381007

Committed r251161: &lt;https://trac.webkit.org/changeset/251161&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580323</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-15 15:24:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580341</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-15 15:45:36 -0700</bug_when>
    <thetext>&lt;rdar://problem/56311570&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379284</attachid>
            <date>2019-09-20 16:51:44 -0700</date>
            <delta_ts>2019-10-08 13:41:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202063-20190920165143.patch</filename>
            <type>text/plain</type>
            <size>11331</size>
            <attacher name="Zhifei Fang">zhifei_fang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NTkyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYWYwNGM1ZWVjNDc0NTQ2OGIwYWM5M2EwMjY3MWYzYWVm
NjIxNzM0Zi4uNjY4NjhjMmY4MTMyNTQ5MTBjOGI1MmQyYzIzNDljMmRmZGQ2YmE0ZiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDE5LTA5LTIwICBaaGlmZWkgRmFuZyAgPHpoaWZlaV9mYW5nQGFwcGxlLmNvbT4KKwor
ICAgICAgICBUb29sIHRvIG1hcmsganNjIHRlc3Qgc2tpcC9lbmFibGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjA2MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tamF2YXNjcmlw
dGNvcmUtdGVzdHM6CisgICAgICAgIChydW5KU0NTdHJlc3NUZXN0cyk6CisgICAgICAgICogU2Ny
aXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAxOS0wOS0wNiAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIERlcHJlY2F0ZSBhbGwgV0tD
b29raWVNYW5hZ2VyUmVmIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9tYXJr
LWpzYy1zdHJlc3MtdGVzdCBiL1Rvb2xzL1NjcmlwdHMvbWFyay1qc2Mtc3RyZXNzLXRlc3QKbmV3
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzRmZDc5OWU0MzMwYzU1OTY1YTM0NmE5M2Y2MzRlZmY3NjlmNGM1MAotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvbWFyay1qc2Mtc3RyZXNzLXRlc3QKQEAgLTAsMCAr
MSwxNTcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdQoraW1wb3J0IG9zCitpbXBvcnQgc3lz
CitpbXBvcnQgZ2V0b3B0CitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCByZQoraW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCBqc29uCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKK2hhbmRsZXIg
PSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZG91dCkKK2Zvcm1hdHRlciA9IGxvZ2dpbmcu
Rm9ybWF0dGVyKCclKGFzY3RpbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcycpCito
YW5kbGVyLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCitsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5J
TkZPKQorbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKKworZGVmIGl0ZXJfZGlyX3JlY3VzaXZl
KHBhdGgsIGNhbGxiYWNrKToKKyAgICBpZiBvcy5wYXRoLmlzZmlsZShwYXRoKSBhbmQgb3MucGF0
aC5zcGxpdGV4dChwYXRoKVsxXSA9PSAnLmpzJzoKKyAgICAgICAgY2FsbGJhY2socGF0aCkKKyAg
ICBlbGlmIG9zLnBhdGguaXNkaXIocGF0aCk6CisgICAgICAgIGZvciBpdGVtIGluIG9zLmxpc3Rk
aXIocGF0aCk6CisgICAgICAgICAgICBpdGVyX2Rpcl9yZWN1c2l2ZShpdGVtLCBjYWxsYmFjaykK
KworY2xhc3MgSlNDVGVzdE1vZGlmaWVyKG9iamVjdCk6CisgICAgdmFyaWFibGVzID0gWworICAg
ICAgICAiJGhvc3RPcyIsICIkaGFyZHdhcmUiLCAiJGFyY2hpdGVjdHVyZSIKKyAgICBdCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfcGF0aGVzLCBjb25kaXRpb25zPXt9LCBtYXRjaD0iYWxs
Iik6CisgICAgICAgIHNlbGYuX2NvbmRpdGlvbnMgPSBjb25kaXRpb25zCisgICAgICAgIHNlbGYu
X3Rlc3RfcGF0aGVzID0gdGVzdF9wYXRoZXMKKyAgICAgICAgc2VsZi5fbWF0Y2ggPSBtYXRjaAor
ICAgICAgICBzZWxmLl9za2lwX2xpbmVfcG9zdGZpeCA9ICIjIGFkZGVkIGJ5IG1hcmstanNjLXN0
cmVzcy10ZXN0LnB5IgorCisgICAgZGVmIHNraXAoc2VsZik6CisgICAgICAgIGZvciBwYXRoIGlu
IHNlbGYuX3Rlc3RfcGF0aGVzOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIk1hcmsge30gc2tp
cCIuZm9ybWF0KHBhdGgpKQorICAgICAgICAgICAgaXRlcl9kaXJfcmVjdXNpdmUocGF0aCwgbGFt
YmRhIGZpbGVfcGF0aDogc2VsZi5fc2tpcF90ZXN0X2ZpbGUoZmlsZV9wYXRoKSkKKyAgICAKKyAg
ICBkZWYgZW5hYmxlKHNlbGYpOgorICAgICAgICBmb3IgcGF0aCBpbiBzZWxmLl90ZXN0X3BhdGhl
czoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJNYXJrIHt9IGVuYWJsZSIuZm9ybWF0KHBhdGgp
KQorICAgICAgICAgICAgaXRlcl9kaXJfcmVjdXNpdmUocGF0aCwgbGFtYmRhIGZpbGVfcGF0aDog
c2VsZi5fZW5hYmxlX3Rlc3RfZmlsZShmaWxlX3BhdGgpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9j
b25kaXRpb25fb3Aoc2VsZiwgdmFsdWUpOgorICAgICAgICBvcCA9ICI9PSIKKyAgICAgICAgaWYg
KCIhIiA9PSB2YWx1ZVswXSk6CisgICAgICAgICAgICBvcCA9ICIhPSIKKyAgICAgICAgcmV0dXJu
IG9wCisKKyAgICAjIENvbmRpdGlvbiBncmFtbWVyIGlzIGxpa2UgIUEgb3IgQiBvciBDIGFuZCBE
CisgICAgIyBUcmFuc2xhdGUgaXQgdG8gcnVieTogJGhvc3RPcyAhPSBBIG9yICRob3N0T3MgPT0g
QiBvciAkaG9zdE9zID09IEMgYW5kICRob3N0T3MgPT0gRCAKKyAgICBkZWYgX3BhcnNlX2NvbmRp
dGlvbihzZWxmLCB2YXJpYWJsZSwgY29uZGl0aW9uKToKKyAgICAgICAgcmVzID0gW10KKyAgICAg
ICAgZm9yIHdvcmQgaW4gcmUuc3BsaXQocidccysnLCBjb25kaXRpb24pOgorICAgICAgICAgICAg
aWYgd29yZCA9PSAib3IiIG9yIHdvcmQgPT0gImFuZCI6CisgICAgICAgICAgICAgICAgcmVzLmFw
cGVuZCh3b3JkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXMuYXBwZW5k
KCd7fSB7fSAie30iJy5mb3JtYXQodmFyaWFibGUsIHNlbGYuX2dlbmVyYXRlX2NvbmRpdGlvbl9v
cCh3b3JkKSwgd29yZCkpCisgICAgICAgIHJldHVybiAiICIuam9pbihyZXMpCisKKyAgICBkZWYg
X2dlbmVyYXRlX3NraXBfYW5ub3RhdGlvbl9saW5lKHNlbGYpOgorICAgICAgICBza2lwX2xpbmVf
cHJlZml4ID0gIi8vQCBza2lwIGlmIgorICAgICAgICBza2lwX2NvbmRpdGlvbnMgPSBbXQorICAg
ICAgICBza2lwX2xpbmUgPSAie30ge30ge30iCisgICAgICAgIHN1cHBvcnRlZF92YXJpYWJsZXMg
PSBmaWx0ZXIobGFtYmRhIHZhcmlhYmxlOiB2YXJpYWJsZSBpbiBzZWxmLl9jb25kaXRpb25zLCBK
U0NUZXN0TW9kaWZpZXIudmFyaWFibGVzKQorICAgICAgICBjb25kaXRpb25fdGVtcGxhdGUgPSAi
e30iIGlmIGxlbihzdXBwb3J0ZWRfdmFyaWFibGVzKSA9PSAxIGVsc2UgIih7fSkiCisgICAgICAg
IGZvciB2YXJpYWJsZSBpbiBzdXBwb3J0ZWRfdmFyaWFibGVzOgorICAgICAgICAgICAgc2tpcF9j
b25kaXRpb25zLmFwcGVuZChjb25kaXRpb25fdGVtcGxhdGUuZm9ybWF0KHNlbGYuX3BhcnNlX2Nv
bmRpdGlvbih2YXJpYWJsZSwgc2VsZi5fY29uZGl0aW9uc1t2YXJpYWJsZV0pKSkKKyAgICAgICAg
aWYgbm90IHNraXBfY29uZGl0aW9uczoKKyAgICAgICAgICAgICMgTm8gY29uZGl0aW9ucywgYWx3
YXlzIHNraXAgCisgICAgICAgICAgICBza2lwX2NvbmRpdGlvbnMgPSBbInRydWUiXQorICAgICAg
ICBpZiBzZWxmLl9tYXRjaCA9PSAiYW55IjoKKyAgICAgICAgICAgIHNraXBfbGluZSA9IHNraXBf
bGluZS5mb3JtYXQoc2tpcF9saW5lX3ByZWZpeCwgIiBvciAiLmpvaW4oc2tpcF9jb25kaXRpb25z
KSwgc2VsZi5fc2tpcF9saW5lX3Bvc3RmaXgpCisgICAgICAgIGVsaWYgc2VsZi5fbWF0Y2ggPT0g
ImFsbCI6CisgICAgICAgICAgICBza2lwX2xpbmUgPSBza2lwX2xpbmUuZm9ybWF0KHNraXBfbGlu
ZV9wcmVmaXgsICIgYW5kICIuam9pbihza2lwX2NvbmRpdGlvbnMpLCBzZWxmLl9za2lwX2xpbmVf
cG9zdGZpeCkKKyAgICAgICAgcmV0dXJuIHNraXBfbGluZQorCisgICAgIyBUaGlzIGNhbiBvbmx5
IHJlbW92ZSB0aGUgc2tpcCBhbm5vdGF0aW9uIGdlbmVyYXRlZCBieSB0aGlzIHNjcmlwdAorICAg
IGRlZiBfZW5hYmxlX3Rlc3RfZmlsZShzZWxmLCB0ZXN0X2ZpbGUpOgorICAgICAgICB3aXRoIG9w
ZW4odGVzdF9maWxlLCAncisnKSBhcyBmOgorICAgICAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5l
cygpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVz
OgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9za2lwX2xpbmVfcG9zdGZpeCBpbiBsaW5l
OgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCisgICAgICAgICAgICBmLnRydW5j
YXRlKCkKKyAgICAgICAgICAgIAorCisgICAgZGVmIF9za2lwX3Rlc3RfZmlsZShzZWxmLCB0ZXN0
X2ZpbGUpOgorICAgICAgICAjIHJlbW92ZSB0aGUgZXhpc2l0aW5nIHNraXAgbGluZSwgc28gdGhh
dCB3ZSBjYW4gYXBwbHkgdGhlIG5ldyBvbmUKKyAgICAgICAgc2VsZi5fZW5hYmxlX3Rlc3RfZmls
ZSh0ZXN0X2ZpbGUpCisgICAgICAgIHNraXBfbGluZSA9IHNlbGYuX2dlbmVyYXRlX3NraXBfYW5u
b3RhdGlvbl9saW5lKCkKKyAgICAgICAgd2l0aCBvcGVuKHRlc3RfZmlsZSwgJ3IrJykgYXMgZjoK
KyAgICAgICAgICAgIG9yaWdpbmFsX2NvbnRlbnQgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5z
ZWVrKDApCisgICAgICAgICAgICBmLndyaXRlKCJ7fVxue30iLmZvcm1hdChza2lwX2xpbmUsIG9y
aWdpbmFsX2NvbnRlbnQpKQorCitvcGVuc291cmNlX3Jvb3QgPSBvcy5wYXRoLmpvaW4ob3MucGF0
aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKSwgIi4uLy4uLyIpCitqc2NfdGVz
dF9zZWFyY2hfcGF0aCA9IFsKKyAgICBvcy5wYXRoLmpvaW4ob3BlbnNvdXJjZV9yb290LCAiSlNU
ZXN0cyIpLCAKKyAgICBvcy5wYXRoLmpvaW4ob3BlbnNvdXJjZV9yb290LCAiTGF5b3V0VGVzdHMi
KQorXQorZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigp
CisgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhkZXN0PSJhY3Rpb24iKQor
ICAgIGZpbGVfbGlzdF9oZWxwID0gImZpbGVzL2RpcmVjdG9yaWVzIGxpc3Q6IGEuanMsIGIuanMs
IGMuanMsIHVzZSAtIGlmIHlvdSBhcmUgdXNpbmcgLS1qc2MtanNvbi1vdXRwdXQiCisgICAgcGFy
c2VyX2VuYWJsZSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcigiZW5hYmxlIiwgaGVscD0iZW5hYmxl
IHRoZSB0ZXN0cyB3aGljaCBhcmUgbWFya2VkIGFzIHNraXBwZWQgYnkgdGhpcyBzY3JpcHQiKQor
ICAgIHBhcnNlcl9lbmFibGUuYWRkX2FyZ3VtZW50KCJmaWxlcyIsIGhlbHA9ZmlsZV9saXN0X2hl
bHApCisgICAgcGFyc2VyX2VuYWJsZS5hZGRfYXJndW1lbnQoIi0tanNjLWpzb24tb3V0cHV0Iiwg
aGVscD0icnVuLWphdmFzY3JpcHRjb3JlLXRlc3RzIGpzb24gb3V0cHV0LCB5b3UgY2FuIHVzZSBp
dCB0byBlbmFibGUgYWxsIHRoZSBmYWlsZWQgdGVzdHMgaWYgdGhleSBoYXZlIGJlZW4gc2V0IHRv
IHNraXAgYnkgdGhpcyBzY3JpcHQiKQorCisgICAgcGFyc2VyX3NraXAgPSBzdWJwYXJzZXJzLmFk
ZF9wYXJzZXIoInNraXAiLCBoZWxwPSJpbnNlcnQgc2tpcCBjb25kaXRpb24gdG8gZ2l2ZW4gZmls
ZXMvZGlyZWN0b3JpZXMiKQorICAgIHBhcnNlcl9za2lwLmFkZF9hcmd1bWVudCgiZmlsZXMiLCBo
ZWxwPWZpbGVfbGlzdF9oZWxwKQorICAgIHBhcnNlcl9za2lwLmFkZF9hcmd1bWVudCgiLS1qc2Mt
anNvbi1vdXRwdXQiLCBoZWxwPSJydW4tamF2YXNjcmlwdGNvcmUtdGVzdHMganNvbiBvdXRwdXQs
IHlvdSBjYW4gdXNlIGl0IHRvIHNraXAgYWxsIHRoZSBmYWlsZWQgdGVzdHMiKQorICAgIHBhcnNl
cl9za2lwLmFkZF9hcmd1bWVudCgiLS1ob3N0LW9zIiwgaGVscD0ic2tpcCBpZiBob3N0IG9zIG1h
dGNoZXMgZ2l2ZW4gdmFsdWUsIHlvdSBjYW4gc3BlY2lmeSBjb21wbGV4IGNvbmRpdGlvbiBsaWtl
ICd3aW5kb3dzIG9yIGxpbnV4JyAnIXdpbmRvd3MgYW5kICFsaW51eCciKQorICAgIHBhcnNlcl9z
a2lwLmFkZF9hcmd1bWVudCgiLS1oYXJkd2FyZSIsIGhlbHA9InNraXAgaWYgaGFyZHdhcmUgbWF0
Y2hlcyBnaXZlbiB2YWx1ZSwgeW91IGNhbiBzcGVjaWZ5IGNvbXBsZXggY29uZGl0aW9uIGxpa2Ug
J3dhdGNoMyBvciB3YXRjaDQnICchd2F0Y2gzIGFuZCAhd2F0Y2g0JyIpCisgICAgcGFyc2VyX3Nr
aXAuYWRkX2FyZ3VtZW50KCItLWFyY2giLCBoZWxwPSJza2lwIGlmIGFyY2hpdGVjdHVyZSBtYXRj
aGVzIGdpdmVuIHZhbHVlLCB5b3UgY2FuIHNwZWljaWZ5IGNvbXBsZXggY29uZGl0aW9uIGxpa2Ug
J2FybSBvciB4ODYnICchYXJtIGFuZCAheDg2JyIpCisgICAgcGFyc2VyX3NraXAuYWRkX2FyZ3Vt
ZW50KCItLW1hdGNoIiwgZGVmYXVsdD0iYWxsIiwgaGVscD0ibWF0Y2ggYWxsIG9yIGFueSBhYm92
ZSBjb25kaXRpb25zIikKKyAgICAKKyAgICBhcmdzID0gdmFycyhwYXJzZXIucGFyc2VfYXJncygp
KQorICAgIGNvbmRpdGlvbnMgPSB7fQorICAgIGZpbGVzID0gW10KKyAgICBpZiBub3QgYXJnc1si
ZmlsZXMiXSBhbmQgbm90IGFyZ3NbIi0tbG9nLWZpbGUiXToKKyAgICAgICAgbG9nZ2VyLmVycm9y
KCJQbGVhc2Ugc3BlaWNpZnkgYSBsaXN0IG9mIGZpbGUsIG9yIHVzZSAtLWxvZy1maWxlIHRvIGdp
dmUgYSBKU0MgdGVzdCBsb2ciKQorICAgICAgICByZXR1cm4gMQorICAgIGlmIGFyZ3NbImZpbGVz
Il0gYW5kIG5vdCBhcmdzWyJmaWxlcyJdID09ICItIjoKKyAgICAgICAgZmlsZXMgKz0gYXJnc1si
ZmlsZXMiXS5zcGxpdCgiLCIpCisgICAgaWYgYXJnc1sianNjX2pzb25fb3V0cHV0Il06CisgICAg
ICAgIHdpdGggb3BlbihhcmdzWyJqc2NfanNvbl9vdXRwdXQiXSkgYXMgZjoKKyAgICAgICAgICAg
IGpzY19qc29uX291dHB1dCA9IGpzb24ubG9hZChmKQorICAgICAgICBmYWlsdXJlcyA9IGpzY19q
c29uX291dHB1dFsic3RyZXNzVGVzdEZhaWx1cmVzIl0KKyAgICAgICAgZmFpbHVyZV90ZXN0X2Zp
bGVzX3NldCA9IHNldCgpCisgICAgICAgIGZvciBmYWlsdXJlX3Rlc3QgaW4gZmFpbHVyZXM6Cisg
ICAgICAgICAgICBwYXRoX3BhcnRzID0gZmFpbHVyZV90ZXN0LnNwbGl0KG9zLnBhdGguc2VwKQor
ICAgICAgICAgICAgaWYgJ3lhbWwnIGluIHBhdGhfcGFydHNbMF06CisgICAgICAgICAgICAgICAg
ZmFpbHVyZV90ZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4oKnBhdGhfcGFydHNbMTpdKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmYWlsdXJlX3Rlc3RfcGF0aCA9IGZhaWx1cmVf
dGVzdAorICAgICAgICAgICAgZmFpbHVyZV90ZXN0X2ZpbGUgPSBvcy5wYXRoLnNwbGl0ZXh0KGZh
aWx1cmVfdGVzdF9wYXRoKVswXQorICAgICAgICAgICAgZm9yIHNlYXJjaF9wYXRoIGluIGpzY190
ZXN0X3NlYXJjaF9wYXRoOgorICAgICAgICAgICAgICAgIHdob2xlX3BhdGggPSBvcy5wYXRoLmpv
aW4oc2VhcmNoX3BhdGgsIGZhaWx1cmVfdGVzdF9maWxlKQorICAgICAgICAgICAgICAgIGlmIGZh
aWx1cmVfdGVzdF9maWxlIG5vdCBpbiBmYWlsdXJlX3Rlc3RfZmlsZXNfc2V0IGFuZCBvcy5wYXRo
LmlzZmlsZSh3aG9sZV9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgZmlsZXMuYXBwZW5kKHdo
b2xlX3BhdGgpCisgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVfdGVzdF9maWxlc19zZXQuYWRk
KGZhaWx1cmVfdGVzdF9maWxlKQorCisgICAgaWYgImhvc3Rfb3MiIGluIGFyZ3MgYW5kIGFyZ3Nb
Imhvc3Rfb3MiXToKKyAgICAgICAgY29uZGl0aW9uc1siJGhvc3RPcyJdID0gYXJnc1siaG9zdF9v
cyJdCisgICAgaWYgImFyY2giIGluIGFyZ3MgYW5kIGFyZ3NbImFyY2giXToKKyAgICAgICAgY29u
ZGl0aW9uc1siJGFyY2hpdGVjdHVyZSJdID0gYXJnc1siYXJjaCJdCisgICAgaWYgImhhcmR3YXJl
IiBpbiBhcmdzIGFuZCBhcmdzWyJoYXJkd2FyZSJdOgorICAgICAgICBjb25kaXRpb25zWyIkaGFy
ZHdhcmUiXSA9IGFyZ3NbImhhcmR3YXJlIl0KKworICAgIG1vZGlmZXIgPSBKU0NUZXN0TW9kaWZp
ZXIoZmlsZXMsIGNvbmRpdGlvbnMsIGFyZ3NbIm1hdGNoIl0gaWYgIm1hdGNoIiBpbiBhcmdzIGVs
c2UgTm9uZSkKKyAgICBnZXRhdHRyKG1vZGlmZXIsIGFyZ3NbImFjdGlvbiJdKSgpCisgICAgcmV0
dXJuIDAKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBzeXMuZXhpdChtYWluKCkp
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1qYXZhc2NyaXB0Y29yZS10ZXN0cyBiL1Rv
b2xzL1NjcmlwdHMvcnVuLWphdmFzY3JpcHRjb3JlLXRlc3RzCmluZGV4IDhmY2FjNDg4YTkzZGFh
ZTVkMjg0NjYyNzhkMGQ2ZTMzY2ZjMjE1NTIuLjQxMDk3YmQyY2QxMzdjMjRjNjZkZTAyNmFlNWJl
MDhiYzA5ODhhZGQgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWphdmFzY3JpcHRjb3Jl
LXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWphdmFzY3JpcHRjb3JlLXRlc3RzCkBAIC05
MCw2ICs5MCw3IEBAIG15ICRnbWFsbG9jRGVmYXVsdFBhdGggPSAiL3Vzci9saWIvbGliZ21hbGxv
Yy5keWxpYiI7CiAKIG15ICRjcmVhdGVUYXJiYWxsID0gMDsKIG15ICRyZW1vdGVIb3N0ID0gMDsK
K215ICRoYXJkd2FyZSA9IDA7CiBteSAkZmFpbEZhc3QgPSAxOwogbXkgJWpzb25EYXRhID0gKCk7
CiBteSBAdGVzdFJlc3VsdHMgPSAoKTsKQEAgLTIyOSw2ICsyMzAsNyBAQCBVc2FnZTogJHByb2dy
YW1OYW1lIFtvcHRpb25zXSBbb3B0aW9ucyB0byBwYXNzIHRvIGJ1aWxkIHN5c3RlbV0KICAgLS10
YXJiYWxsICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIGEgdGFyYmFsbCBvZiB0aGUgYnVuZGxl
IHByb2R1Y2VkIGJ5IHJ1bm5pbmcgdGhlIEpTQyBzdHJlc3MgdGVzdHMuCiAgIC0tcmVtb3RlPSAg
ICAgICAgICAgICAgICAgICAgIFJ1biB0aGUgSlNDIHN0cmVzcyB0ZXN0cyBvbiB0aGUgc3BlY2lm
aWVkIHJlbW90ZSBob3N0LiBJbXBsaWVzIC0tdGFyYmFsbC4KICAgLS1yZW1vdGUtY29uZmlnLWZp
bGU9ICAgICAgICAgU2FtZSBhcyByZW1vdGUsIGJ1dCByZWFkIGNvbmZpZyBmcm9tIEpTT04gZmls
ZS4KKyAgLS1oYXJkd2FyZT0gICAgICAgICAgICAgICAgICAgU3BlY2lmeSByZW1vdGUgaGFyZHdh
cmUsIHRoaXMgaW5mbyB1c2VkIGZvciBkZXRlcm1pbmUgd2hhdCBqc2MgdGVzdHMgc2hvdWxkIHJ1
biBvbiByZW1vdGUKICAgLS1leHRyYS10ZXN0cz0gICAgICAgICAgICAgICAgUGF0aCB0byBhIGZp
bGUgY29udGFpbmluZyBleHRyYSB0ZXN0cwogICAtLWNoaWxkLXByb2Nlc3Nlcz0gICAgICAgICAg
ICBTcGVjaWZ5IHRoZSBudW1iZXIgb2YgY2hpbGQgcHJvY2Vzc2VzLgogICAtLXNoZWxsLXJ1bm5l
ciAgICAgICAgICAgICAgICBVc2VzIHRoZSBzaGVsbC1iYXNlZCB0ZXN0IHJ1bm5lciBpbnN0ZWFk
IG9mIHRoZSBkZWZhdWx0IG1ha2UtYmFzZWQgcnVubmVyLgpAQCAtMjg2LDYgKzI4OCw3IEBAIEdl
dE9wdGlvbnMoCiAgICAgJ2pzb24tb3V0cHV0PXMnID0+IFwkanNvbkZpbGVOYW1lLAogICAgICd0
YXJiYWxsIScgPT4gXCRjcmVhdGVUYXJiYWxsLAogICAgICdyZW1vdGU9cycgPT4gXCRyZW1vdGVI
b3N0LAorICAgICdoYXJkd2FyZT1zJyA9PiBcJGhhcmR3YXJlLAogICAgICdyZW1vdGUtY29uZmln
LWZpbGU9cycgPT4gXCRyZW1vdGVDb25maWdGaWxlLAogICAgICdjaGlsZC1wcm9jZXNzZXM9cycg
PT4gXCRjaGlsZFByb2Nlc3NlcywKICAgICAnc2hlbGwtcnVubmVyJyA9PiBcJHNoZWxsUnVubmVy
LApAQCAtNTM2LDYgKzUzOSwxMSBAQCBzdWIgcnVuSlNDU3RyZXNzVGVzdHMKICAgICAgICAgcHVz
aChAanNjU3RyZXNzRHJpdmVyQ21kLCAiLS1yZW1vdGUtY29uZmlnLWZpbGUiKTsKICAgICAgICAg
cHVzaChAanNjU3RyZXNzRHJpdmVyQ21kLCAkcmVtb3RlQ29uZmlnRmlsZSk7CiAgICAgfQorICAg
IAorICAgIGlmICgkaGFyZHdhcmUpIHsKKyAgICAgICAgcHVzaChAanNjU3RyZXNzRHJpdmVyQ21k
LCAiLS1oYXJkd2FyZSIpOworICAgICAgICBwdXNoKEBqc2NTdHJlc3NEcml2ZXJDbWQsICRoYXJk
d2FyZSk7CisgICAgfQogCiAgICAgaWYgKCRjaGlsZFByb2Nlc3NlcykgewogICAgICAgICBwdXNo
KEBqc2NTdHJlc3NEcml2ZXJDbWQsICItLWNoaWxkLXByb2Nlc3NlcyIpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpz
Yy1zdHJlc3MtdGVzdHMKaW5kZXggYTM4OWNhMDAzMmIxNjJkMmE3Yzc0YTI5NTNhYTEzYWFmYmRj
YjI1NC4uZWQ3OTFiYjgzMjFhYzUxZmRlZWRkYTgxOGJmN2UxNzQ3YWVkNDcyNSAxMDA3NTUKLS0t
IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cworKysgYi9Ub29scy9TY3JpcHRz
L3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC0xMTQsNiArMTE0LDcgQEAgJHRlc3RXcml0ZXIgPSAi
ZGVmYXVsdCIKICRyZW1vdGVIb3N0cyA9IFtdCiAkYXJjaGl0ZWN0dXJlID0gbmlsCiAkaG9zdE9T
ID0gbmlsCiskaGFyZHdhcmUgPSBuaWwKICRmaWx0ZXIgPSBuaWwKICRlbnZWYXJzID0gW10KICRt
b2RlID0gImZ1bGwiCkBAIC0xODMsNiArMTg0LDcgQEAgR2V0b3B0TG9uZy5uZXcoWyctLWhlbHAn
LCAnLWgnLCBHZXRvcHRMb25nOjpOT19BUkdVTUVOVF0sCiAgICAgICAgICAgICAgICBbJy0tdGVz
dC13cml0ZXInLCBHZXRvcHRMb25nOjpSRVFVSVJFRF9BUkdVTUVOVF0sCiAgICAgICAgICAgICAg
ICBbJy0tcmVtb3RlJywgR2V0b3B0TG9uZzo6UkVRVUlSRURfQVJHVU1FTlRdLAogICAgICAgICAg
ICAgICAgWyctLXJlbW90ZS1jb25maWctZmlsZScsIEdldG9wdExvbmc6OlJFUVVJUkVEX0FSR1VN
RU5UXSwKKyAgICAgICAgICAgICAgIFsnLS1oYXJkd2FyZScsIEdldG9wdExvbmc6OlJFUVVJUkVE
X0FSR1VNRU5UXSwKICAgICAgICAgICAgICAgIFsnLS1jaGlsZC1wcm9jZXNzZXMnLCAnLWMnLCBH
ZXRvcHRMb25nOjpSRVFVSVJFRF9BUkdVTUVOVF0sCiAgICAgICAgICAgICAgICBbJy0tZmlsdGVy
JywgR2V0b3B0TG9uZzo6UkVRVUlSRURfQVJHVU1FTlRdLAogICAgICAgICAgICAgICAgWyctLXZl
cmJvc2UnLCAnLXYnLCBHZXRvcHRMb25nOjpOT19BUkdVTUVOVF0sCkBAIC0yNDEsNiArMjQzLDgg
QEAgR2V0b3B0TG9uZy5uZXcoWyctLWhlbHAnLCAnLWgnLCBHZXRvcHRMb25nOjpOT19BUkdVTUVO
VF0sCiAgICAgICAgICRhcmNoaXRlY3R1cmUgPSBhcmcKICAgICB3aGVuICctLW9zJwogICAgICAg
ICAkaG9zdE9TID0gYXJnCisgICAgd2hlbiAnLS1oYXJkd2FyZScKKyAgICAgICAgJGhhcmR3YXJl
ID0gYXJnCiAgICAgd2hlbiAnLS1lbnYtdmFycycKICAgICAgICAgJGVudlZhcnMgPSBhcmcuZ3N1
YigvXHMrLywgJyAnKS5zcGxpdCgnICcpCiAgICAgd2hlbiAnLS1xdWljaycK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380459</attachid>
            <date>2019-10-08 13:41:40 -0700</date>
            <delta_ts>2019-10-15 11:46:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202063-20191008134139.patch</filename>
            <type>text/plain</type>
            <size>11964</size>
            <attacher name="Zhifei Fang">zhifei_fang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwODQ4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjNkYzVmOTM5NjM5NWZhNTVmN2YzNzlmMTc4ZDkyODE0
ODE3NTAyMS4uOGU0MjE2YTljNmFlM2UzNTViMGQxMWZhYWE2OWQzZDYxOTYxNmVkYSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDE5LTEwLTA4ICBaaGlmZWkgRmFuZyAgPHpoaWZlaV9mYW5nQGFwcGxlLmNvbT4KKwor
ICAgICAgICBUb29sIHRvIG1hcmsganNjIHRlc3Qgc2tpcC9lbmFibGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjA2MworCisgICAgICAgIFJldmll
d2VkIGJ5IEtlaXRoIE1pbGxlci4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWphdmFzY3JpcHRj
b3JlLXRlc3RzOgorICAgICAgICAocnVuSlNDU3RyZXNzVGVzdHMpOgorICAgICAgICAqIFNjcmlw
dHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTktMTAtMDggIEFha2FzaCBKYWluICA8YWFr
YXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtld3MtYnVpbGRdIERvIG5vdCBwcmludCB3
b3JrZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIGVhY2ggYnVpbGQgc3RlcCBbcGFydCAzXQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9tYXJrLWpzYy1zdHJlc3MtdGVzdCBiL1Rvb2xzL1Nj
cmlwdHMvbWFyay1qc2Mtc3RyZXNzLXRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2E2NTc3MTg4Yzk1NDRhMDY3
MDEzMjUyOTU1ZDUyYWQ0ZDYxYjlkNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
bWFyay1qc2Mtc3RyZXNzLXRlc3QKQEAgLTAsMCArMSwxNzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbiAtdQoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgZ2V0b3B0CitpbXBvcnQgYXJn
cGFyc2UKK2ltcG9ydCByZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBqc29uCisKK2xvZ2dlciA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKK2hhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lz
LnN0ZG91dCkKK2Zvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKCclKGFzY3RpbWUpcyAtICUo
bGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcycpCitoYW5kbGVyLnNldEZvcm1hdHRlcihmb3JtYXR0
ZXIpCitsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorbG9nZ2VyLmFkZEhhbmRsZXIoaGFu
ZGxlcikKKworZGVmIGl0ZXJfZGlyX3JlY3VzaXZlKHBhdGgsIGNhbGxiYWNrKToKKyAgICBpZiBv
cy5wYXRoLmlzZmlsZShwYXRoKSBhbmQgb3MucGF0aC5zcGxpdGV4dChwYXRoKVsxXSA9PSAnLmpz
JzoKKyAgICAgICAgbG9nZ2VyLmluZm8oIlByb2Nlc3Npbmcge30gLi4uIi5mb3JtYXQocGF0aCkp
CisgICAgICAgIGNhbGxiYWNrKHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgZm9yIHJvb3QsIGRp
cnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxl
czoKKyAgICAgICAgICAgICAgICBpdGVyX2Rpcl9yZWN1c2l2ZShvcy5wYXRoLmpvaW4ocm9vdCwg
bmFtZSksIGNhbGxiYWNrKQorICAgICAgICBsb2dnZXIuaW5mbygiRG9uZS4iKQorICAgIAorCitj
bGFzcyBKU0NUZXN0TW9kaWZpZXIob2JqZWN0KToKKyAgICB2YXJpYWJsZXMgPSBbCisgICAgICAg
ICIkaG9zdE9zIiwgIiRtb2RlbCIsICIkYXJjaGl0ZWN0dXJlIgorICAgIF0KKyAgICBkZWYgX19p
bml0X18oc2VsZiwgdGVzdF9wYXRoZXMsIGNvbmRpdGlvbnM9e30sIG1hdGNoPSJhbGwiKToKKyAg
ICAgICAgc2VsZi5fY29uZGl0aW9ucyA9IGNvbmRpdGlvbnMKKyAgICAgICAgc2VsZi5fdGVzdF9w
YXRoZXMgPSB0ZXN0X3BhdGhlcworICAgICAgICBzZWxmLl9tYXRjaCA9IG1hdGNoCisgICAgICAg
IHNlbGYuX3NraXBfbGluZV9wb3N0Zml4ID0gIiMgYWRkZWQgYnkgbWFyay1qc2Mtc3RyZXNzLXRl
c3QucHkiCisKKyAgICBkZWYgc2tpcChzZWxmKToKKyAgICAgICAgZm9yIHBhdGggaW4gc2VsZi5f
dGVzdF9wYXRoZXM6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiTWFyayB7fSBza2lwIi5mb3Jt
YXQocGF0aCkpCisgICAgICAgICAgICBpdGVyX2Rpcl9yZWN1c2l2ZShwYXRoLCBsYW1iZGEgZmls
ZV9wYXRoOiBzZWxmLl9za2lwX3Rlc3RfZmlsZShmaWxlX3BhdGgpKQorICAgIAorICAgIGRlZiBl
bmFibGUoc2VsZik6CisgICAgICAgIGZvciBwYXRoIGluIHNlbGYuX3Rlc3RfcGF0aGVzOgorICAg
ICAgICAgICAgbG9nZ2VyLmluZm8oIk1hcmsge30gZW5hYmxlIi5mb3JtYXQocGF0aCkpCisgICAg
ICAgICAgICBpdGVyX2Rpcl9yZWN1c2l2ZShwYXRoLCBsYW1iZGEgZmlsZV9wYXRoOiBzZWxmLl9l
bmFibGVfdGVzdF9maWxlKGZpbGVfcGF0aCkpCisKKyAgICBkZWYgX2dlbmVyYXRlX2NvbmRpdGlv
bl9vcChzZWxmLCB2YWx1ZSk6CisgICAgICAgIG9wID0gIj09IgorICAgICAgICBpZiAoIiEiID09
IHZhbHVlWzBdKToKKyAgICAgICAgICAgIG9wID0gIiE9IgorICAgICAgICAgICAgdmFsdWUgPSB2
YWx1ZVsxOl0KKyAgICAgICAgcmV0dXJuIG9wLCB2YWx1ZQorCisgICAgIyBDb25kaXRpb24gZ3Jh
bW1lciBpcyBsaWtlICFBIG9yIEIgb3IgQyBhbmQgRAorICAgICMgVHJhbnNsYXRlIGl0IHRvIHJ1
Ynk6ICRob3N0T3MgIT0gQSBvciAkaG9zdE9zID09IEIgb3IgJGhvc3RPcyA9PSBDIGFuZCAkaG9z
dE9zID09IEQgCisgICAgZGVmIF9wYXJzZV9jb25kaXRpb24oc2VsZiwgdmFyaWFibGUsIGNvbmRp
dGlvbik6CisgICAgICAgIHJlcyA9IFtdCisgICAgICAgIHZhbHVlcyA9IFtdCisgICAgICAgIGZv
ciB3b3JkIGluIHJlLnNwbGl0KHInXHMrJywgY29uZGl0aW9uKToKKyAgICAgICAgICAgIGlmIHdv
cmQgPT0gIm9yIiBvciB3b3JkID09ICJhbmQiOgorICAgICAgICAgICAgICAgIHZhbHVlID0gIiAi
LmpvaW4odmFsdWVzKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgdmFsdWVzID0gW10KKyAgICAg
ICAgICAgICAgICByZXMuYXBwZW5kKCd7fSB7fSAie30iJy5mb3JtYXQodmFyaWFibGUsICpzZWxm
Ll9nZW5lcmF0ZV9jb25kaXRpb25fb3AodmFsdWUpKSkKKyAgICAgICAgICAgICAgICByZXMuYXBw
ZW5kKHdvcmQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBl
bmQod29yZCkKKyAgICAgICAgaWYgdmFsdWVzOgorICAgICAgICAgICAgdmFsdWUgPSAiICIuam9p
bih2YWx1ZXMpLnN0cmlwKCkKKyAgICAgICAgICAgIHJlcy5hcHBlbmQoJ3t9IHt9ICJ7fSInLmZv
cm1hdCh2YXJpYWJsZSwgKnNlbGYuX2dlbmVyYXRlX2NvbmRpdGlvbl9vcCh2YWx1ZSkpKQorICAg
ICAgICByZXR1cm4gIiAiLmpvaW4ocmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9za2lwX2Fubm90
YXRpb25fbGluZShzZWxmKToKKyAgICAgICAgc2tpcF9saW5lX3ByZWZpeCA9ICIvL0Agc2tpcCBp
ZiIKKyAgICAgICAgc2tpcF9jb25kaXRpb25zID0gW10KKyAgICAgICAgc2tpcF9saW5lID0gInt9
IHt9IHt9IgorICAgICAgICBzdXBwb3J0ZWRfdmFyaWFibGVzID0gZmlsdGVyKGxhbWJkYSB2YXJp
YWJsZTogdmFyaWFibGUgaW4gc2VsZi5fY29uZGl0aW9ucywgSlNDVGVzdE1vZGlmaWVyLnZhcmlh
YmxlcykKKyAgICAgICAgY29uZGl0aW9uX3RlbXBsYXRlID0gInt9IiBpZiBsZW4oc3VwcG9ydGVk
X3ZhcmlhYmxlcykgPT0gMSBlbHNlICIoe30pIgorICAgICAgICBmb3IgdmFyaWFibGUgaW4gc3Vw
cG9ydGVkX3ZhcmlhYmxlczoKKyAgICAgICAgICAgIHNraXBfY29uZGl0aW9ucy5hcHBlbmQoY29u
ZGl0aW9uX3RlbXBsYXRlLmZvcm1hdChzZWxmLl9wYXJzZV9jb25kaXRpb24odmFyaWFibGUsIHNl
bGYuX2NvbmRpdGlvbnNbdmFyaWFibGVdKSkpCisgICAgICAgIGlmIG5vdCBza2lwX2NvbmRpdGlv
bnM6CisgICAgICAgICAgICAjIE5vIGNvbmRpdGlvbnMsIGFsd2F5cyBza2lwIAorICAgICAgICAg
ICAgc2tpcF9jb25kaXRpb25zID0gWyJ0cnVlIl0KKyAgICAgICAgaWYgc2VsZi5fbWF0Y2ggPT0g
ImFueSI6CisgICAgICAgICAgICBza2lwX2xpbmUgPSBza2lwX2xpbmUuZm9ybWF0KHNraXBfbGlu
ZV9wcmVmaXgsICIgb3IgIi5qb2luKHNraXBfY29uZGl0aW9ucyksIHNlbGYuX3NraXBfbGluZV9w
b3N0Zml4KQorICAgICAgICBlbGlmIHNlbGYuX21hdGNoID09ICJhbGwiOgorICAgICAgICAgICAg
c2tpcF9saW5lID0gc2tpcF9saW5lLmZvcm1hdChza2lwX2xpbmVfcHJlZml4LCAiIGFuZCAiLmpv
aW4oc2tpcF9jb25kaXRpb25zKSwgc2VsZi5fc2tpcF9saW5lX3Bvc3RmaXgpCisgICAgICAgIHJl
dHVybiBza2lwX2xpbmUKKworICAgICMgVGhpcyBjYW4gb25seSByZW1vdmUgdGhlIHNraXAgYW5u
b3RhdGlvbiBnZW5lcmF0ZWQgYnkgdGhpcyBzY3JpcHQKKyAgICBkZWYgX2VuYWJsZV90ZXN0X2Zp
bGUoc2VsZiwgdGVzdF9maWxlKToKKyAgICAgICAgd2l0aCBvcGVuKHRlc3RfZmlsZSwgJ3IrJykg
YXMgZjoKKyAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgZi5z
ZWVrKDApCisgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICBp
ZiBub3Qgc2VsZi5fc2tpcF9saW5lX3Bvc3RmaXggaW4gbGluZToKKyAgICAgICAgICAgICAgICAg
ICAgZi53cml0ZShsaW5lKQorICAgICAgICAgICAgZi50cnVuY2F0ZSgpCisgICAgICAgICAgICAK
KworICAgIGRlZiBfc2tpcF90ZXN0X2ZpbGUoc2VsZiwgdGVzdF9maWxlKToKKyAgICAgICAgIyBy
ZW1vdmUgdGhlIGV4aXNpdGluZyBza2lwIGxpbmUsIHNvIHRoYXQgd2UgY2FuIGFwcGx5IHRoZSBu
ZXcgb25lCisgICAgICAgIHNlbGYuX2VuYWJsZV90ZXN0X2ZpbGUodGVzdF9maWxlKQorICAgICAg
ICBza2lwX2xpbmUgPSBzZWxmLl9nZW5lcmF0ZV9za2lwX2Fubm90YXRpb25fbGluZSgpCisgICAg
ICAgIHdpdGggb3Blbih0ZXN0X2ZpbGUsICdyKycpIGFzIGY6CisgICAgICAgICAgICBvcmlnaW5h
bF9jb250ZW50ID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAg
Zi53cml0ZSgie31cbnt9Ii5mb3JtYXQoc2tpcF9saW5lLCBvcmlnaW5hbF9jb250ZW50KSkKKwor
b3BlbnNvdXJjZV9yb290ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJl
YWxwYXRoKF9fZmlsZV9fKSksICIuLi8uLi8iKQoranNjX3Rlc3Rfc2VhcmNoX3BhdGggPSBbCisg
ICAgb3MucGF0aC5qb2luKG9wZW5zb3VyY2Vfcm9vdCwgIkpTVGVzdHMiKSwgCisgICAgb3MucGF0
aC5qb2luKG9wZW5zb3VyY2Vfcm9vdCwgIkxheW91dFRlc3RzIikKK10KK2RlZiBtYWluKCk6Cisg
ICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgIHN1YnBhcnNlcnMgPSBw
YXJzZXIuYWRkX3N1YnBhcnNlcnMoZGVzdD0iYWN0aW9uIikKKyAgICBmaWxlX2xpc3RfaGVscCA9
ICJmaWxlcy9kaXJlY3RvcmllcyBsaXN0OiBhLmpzLCBiLmpzLCBjLmpzLCB1c2UgLSBpZiB5b3Ug
YXJlIHVzaW5nIC0tanNjLWpzb24tb3V0cHV0IgorICAgIHBhcnNlcl9lbmFibGUgPSBzdWJwYXJz
ZXJzLmFkZF9wYXJzZXIoImVuYWJsZSIsIGhlbHA9ImVuYWJsZSB0aGUgdGVzdHMgd2hpY2ggYXJl
IG1hcmtlZCBhcyBza2lwcGVkIGJ5IHRoaXMgc2NyaXB0IikKKyAgICBwYXJzZXJfZW5hYmxlLmFk
ZF9hcmd1bWVudCgiZmlsZXMiLCBoZWxwPWZpbGVfbGlzdF9oZWxwKQorICAgIHBhcnNlcl9lbmFi
bGUuYWRkX2FyZ3VtZW50KCItLWpzYy1qc29uLW91dHB1dCIsIGhlbHA9InJ1bi1qYXZhc2NyaXB0
Y29yZS10ZXN0cyBqc29uIG91dHB1dCwgeW91IGNhbiB1c2UgaXQgdG8gZW5hYmxlIGFsbCB0aGUg
ZmFpbGVkIHRlc3RzIGlmIHRoZXkgaGF2ZSBiZWVuIHNldCB0byBza2lwIGJ5IHRoaXMgc2NyaXB0
IikKKworICAgIHBhcnNlcl9za2lwID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCJza2lwIiwgaGVs
cD0iaW5zZXJ0IHNraXAgY29uZGl0aW9uIHRvIGdpdmVuIGZpbGVzL2RpcmVjdG9yaWVzIikKKyAg
ICBwYXJzZXJfc2tpcC5hZGRfYXJndW1lbnQoImZpbGVzIiwgaGVscD1maWxlX2xpc3RfaGVscCkK
KyAgICBwYXJzZXJfc2tpcC5hZGRfYXJndW1lbnQoIi0tanNjLWpzb24tb3V0cHV0IiwgaGVscD0i
cnVuLWphdmFzY3JpcHRjb3JlLXRlc3RzIGpzb24gb3V0cHV0LCB5b3UgY2FuIHVzZSBpdCB0byBz
a2lwIGFsbCB0aGUgZmFpbGVkIHRlc3RzIikKKyAgICBwYXJzZXJfc2tpcC5hZGRfYXJndW1lbnQo
Ii0tcGxhdGZvcm0iLCAiLS1ob3N0LW9zIiwgaGVscD0ic2tpcCBpZiBob3N0IG9zIG1hdGNoZXMg
Z2l2ZW4gdmFsdWUsIHlvdSBjYW4gc3BlY2lmeSBjb21wbGV4IGNvbmRpdGlvbiBsaWtlICd3aW5k
b3dzIG9yIGxpbnV4JyAnIXdpbmRvd3MgYW5kICFsaW51eCciKQorICAgIHBhcnNlcl9za2lwLmFk
ZF9hcmd1bWVudCgiLS1tb2RlbCIsIGhlbHA9InNraXAgaWYgaGFyZHdhcmUgbW9kZWwgbWF0Y2hl
cyBnaXZlbiB2YWx1ZSwgeW91IGNhbiBzcGVjaWZ5IGNvbXBsZXggY29uZGl0aW9uIGxpa2UgJ3dh
dGNoMyBvciB3YXRjaDQnICchQXBwbGUgV2F0Y2ggU2VyaWVzIDMgYW5kICFBcHBsZSBXYXRjaCBT
ZXJpZXMgNCciKQorICAgIHBhcnNlcl9za2lwLmFkZF9hcmd1bWVudCgiLS1hcmNoaXRlY3R1cmUi
LCBoZWxwPSJza2lwIGlmIGFyY2hpdGVjdHVyZSBtYXRjaGVzIGdpdmVuIHZhbHVlLCB5b3UgY2Fu
IHNwZWljaWZ5IGNvbXBsZXggY29uZGl0aW9uIGxpa2UgJ2FybSBvciB4ODYnICchYXJtIGFuZCAh
eDg2JyIpCisgICAgcGFyc2VyX3NraXAuYWRkX2FyZ3VtZW50KCItLW1hdGNoIiwgZGVmYXVsdD0i
YWxsIiwgaGVscD0ibWF0Y2ggYWxsIG9yIGFueSBhYm92ZSBjb25kaXRpb25zIikKKyAgICAKKyAg
ICBhcmdzID0gdmFycyhwYXJzZXIucGFyc2VfYXJncygpKQorICAgIGNvbmRpdGlvbnMgPSB7fQor
ICAgIGZpbGVzID0gW10KKyAgICBpZiBub3QgYXJnc1siZmlsZXMiXSBhbmQgbm90IGFyZ3NbIi0t
bG9nLWZpbGUiXToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJQbGVhc2Ugc3BlaWNpZnkgYSBsaXN0
IG9mIGZpbGUsIG9yIHVzZSAtLWxvZy1maWxlIHRvIGdpdmUgYSBKU0MgdGVzdCBsb2ciKQorICAg
ICAgICByZXR1cm4gMQorICAgIGlmIGFyZ3NbImZpbGVzIl0gYW5kIG5vdCBhcmdzWyJmaWxlcyJd
ID09ICItIjoKKyAgICAgICAgZmlsZXMgKz0gYXJnc1siZmlsZXMiXS5zcGxpdCgiLCIpCisgICAg
aWYgYXJnc1sianNjX2pzb25fb3V0cHV0Il06CisgICAgICAgIHdpdGggb3BlbihhcmdzWyJqc2Nf
anNvbl9vdXRwdXQiXSkgYXMgZjoKKyAgICAgICAgICAgIGpzY19qc29uX291dHB1dCA9IGpzb24u
bG9hZChmKQorICAgICAgICBmYWlsdXJlcyA9IGpzY19qc29uX291dHB1dFsic3RyZXNzVGVzdEZh
aWx1cmVzIl0KKyAgICAgICAgZmFpbHVyZV90ZXN0X2ZpbGVzX3NldCA9IHNldCgpCisgICAgICAg
IGZvciBmYWlsdXJlX3Rlc3QgaW4gZmFpbHVyZXM6CisgICAgICAgICAgICBwYXRoX3BhcnRzID0g
ZmFpbHVyZV90ZXN0LnNwbGl0KG9zLnBhdGguc2VwKQorICAgICAgICAgICAgaWYgJ3lhbWwnIGlu
IHBhdGhfcGFydHNbMF06CisgICAgICAgICAgICAgICAgZmFpbHVyZV90ZXN0X3BhdGggPSBvcy5w
YXRoLmpvaW4oKnBhdGhfcGFydHNbMTpdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICBmYWlsdXJlX3Rlc3RfcGF0aCA9IGZhaWx1cmVfdGVzdAorICAgICAgICAgICAgZmFpbHVy
ZV90ZXN0X2ZpbGUgPSBvcy5wYXRoLnNwbGl0ZXh0KGZhaWx1cmVfdGVzdF9wYXRoKVswXQorICAg
ICAgICAgICAgZm9yIHNlYXJjaF9wYXRoIGluIGpzY190ZXN0X3NlYXJjaF9wYXRoOgorICAgICAg
ICAgICAgICAgIHdob2xlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VhcmNoX3BhdGgsIGZhaWx1cmVf
dGVzdF9maWxlKQorICAgICAgICAgICAgICAgIGlmIGZhaWx1cmVfdGVzdF9maWxlIG5vdCBpbiBm
YWlsdXJlX3Rlc3RfZmlsZXNfc2V0IGFuZCBvcy5wYXRoLmlzZmlsZSh3aG9sZV9wYXRoKToKKyAg
ICAgICAgICAgICAgICAgICAgZmlsZXMuYXBwZW5kKHdob2xlX3BhdGgpCisgICAgICAgICAgICAg
ICAgICAgIGZhaWx1cmVfdGVzdF9maWxlc19zZXQuYWRkKGZhaWx1cmVfdGVzdF9maWxlKQorCisg
ICAgaWYgImhvc3Rfb3MiIGluIGFyZ3MgYW5kIGFyZ3NbImhvc3Rfb3MiXToKKyAgICAgICAgY29u
ZGl0aW9uc1siJGhvc3RPcyJdID0gYXJnc1siaG9zdF9vcyJdCisgICAgaWYgInBsYXRmb3JtIiBp
biBhcmdzIGFuZCBhcmdzWyJwbGF0Zm9ybSJdOgorICAgICAgICBjb25kaXRpb25zWyIkaG9zdE9z
Il0gPSBhcmdzWyJwbGF0Zm9ybSJdCisgICAgaWYgImFyY2hpdGVjdHVyZSIgaW4gYXJncyBhbmQg
YXJnc1siYXJjaGl0ZWN0dXJlIl06CisgICAgICAgIGNvbmRpdGlvbnNbIiRhcmNoaXRlY3R1cmUi
XSA9IGFyZ3NbImFyY2hpdGVjdHVyZSJdCisgICAgaWYgIm1vZGVsIiBpbiBhcmdzIGFuZCBhcmdz
WyJtb2RlbCJdOgorICAgICAgICBjb25kaXRpb25zWyIkbW9kZWwiXSA9IGFyZ3NbIm1vZGVsIl0K
KworICAgIG1vZGlmZXIgPSBKU0NUZXN0TW9kaWZpZXIoZmlsZXMsIGNvbmRpdGlvbnMsIGFyZ3Nb
Im1hdGNoIl0gaWYgIm1hdGNoIiBpbiBhcmdzIGVsc2UgTm9uZSkKKyAgICBnZXRhdHRyKG1vZGlm
ZXIsIGFyZ3NbImFjdGlvbiJdKSgpCisgICAgcmV0dXJuIDAKKworaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKKyAgICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3J1bi1qYXZhc2NyaXB0Y29yZS10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWphdmFzY3JpcHRj
b3JlLXRlc3RzCmluZGV4IDhmY2FjNDg4YTkzZGFhZTVkMjg0NjYyNzhkMGQ2ZTMzY2ZjMjE1NTIu
LmYzYmJhNjAzYmZkZWVlN2Q3YWQwN2JiODI5MDhmMzExNmQ3OWJkZWYgMTAwNzU1Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvcnVuLWphdmFzY3JpcHRjb3JlLXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMv
cnVuLWphdmFzY3JpcHRjb3JlLXRlc3RzCkBAIC05MCw2ICs5MCw3IEBAIG15ICRnbWFsbG9jRGVm
YXVsdFBhdGggPSAiL3Vzci9saWIvbGliZ21hbGxvYy5keWxpYiI7CiAKIG15ICRjcmVhdGVUYXJi
YWxsID0gMDsKIG15ICRyZW1vdGVIb3N0ID0gMDsKK215ICRtb2RlbCA9IDA7CiBteSAkZmFpbEZh
c3QgPSAxOwogbXkgJWpzb25EYXRhID0gKCk7CiBteSBAdGVzdFJlc3VsdHMgPSAoKTsKQEAgLTIy
OSw2ICsyMzAsNyBAQCBVc2FnZTogJHByb2dyYW1OYW1lIFtvcHRpb25zXSBbb3B0aW9ucyB0byBw
YXNzIHRvIGJ1aWxkIHN5c3RlbV0KICAgLS10YXJiYWxsICAgICAgICAgICAgICAgICAgICAgQ3Jl
YXRlIGEgdGFyYmFsbCBvZiB0aGUgYnVuZGxlIHByb2R1Y2VkIGJ5IHJ1bm5pbmcgdGhlIEpTQyBz
dHJlc3MgdGVzdHMuCiAgIC0tcmVtb3RlPSAgICAgICAgICAgICAgICAgICAgIFJ1biB0aGUgSlND
IHN0cmVzcyB0ZXN0cyBvbiB0aGUgc3BlY2lmaWVkIHJlbW90ZSBob3N0LiBJbXBsaWVzIC0tdGFy
YmFsbC4KICAgLS1yZW1vdGUtY29uZmlnLWZpbGU9ICAgICAgICAgU2FtZSBhcyByZW1vdGUsIGJ1
dCByZWFkIGNvbmZpZyBmcm9tIEpTT04gZmlsZS4KKyAgLS1tb2RlbD0gICAgICAgICAgICAgICAg
ICAgICAgU3BlY2lmeSByZW1vdGUgaGFyZHdhcmUgbW9kZWwsIHRoaXMgaW5mbyB1c2VkIGZvciBk
ZXRlcm1pbmUgd2hhdCBqc2MgdGVzdHMgc2hvdWxkIHJ1biBvbiByZW1vdGUKICAgLS1leHRyYS10
ZXN0cz0gICAgICAgICAgICAgICAgUGF0aCB0byBhIGZpbGUgY29udGFpbmluZyBleHRyYSB0ZXN0
cwogICAtLWNoaWxkLXByb2Nlc3Nlcz0gICAgICAgICAgICBTcGVjaWZ5IHRoZSBudW1iZXIgb2Yg
Y2hpbGQgcHJvY2Vzc2VzLgogICAtLXNoZWxsLXJ1bm5lciAgICAgICAgICAgICAgICBVc2VzIHRo
ZSBzaGVsbC1iYXNlZCB0ZXN0IHJ1bm5lciBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IG1ha2UtYmFz
ZWQgcnVubmVyLgpAQCAtMjg2LDYgKzI4OCw3IEBAIEdldE9wdGlvbnMoCiAgICAgJ2pzb24tb3V0
cHV0PXMnID0+IFwkanNvbkZpbGVOYW1lLAogICAgICd0YXJiYWxsIScgPT4gXCRjcmVhdGVUYXJi
YWxsLAogICAgICdyZW1vdGU9cycgPT4gXCRyZW1vdGVIb3N0LAorICAgICdtb2RlbD1zJyA9PiBc
JG1vZGVsLAogICAgICdyZW1vdGUtY29uZmlnLWZpbGU9cycgPT4gXCRyZW1vdGVDb25maWdGaWxl
LAogICAgICdjaGlsZC1wcm9jZXNzZXM9cycgPT4gXCRjaGlsZFByb2Nlc3NlcywKICAgICAnc2hl
bGwtcnVubmVyJyA9PiBcJHNoZWxsUnVubmVyLApAQCAtNTM2LDYgKzUzOSwxMSBAQCBzdWIgcnVu
SlNDU3RyZXNzVGVzdHMKICAgICAgICAgcHVzaChAanNjU3RyZXNzRHJpdmVyQ21kLCAiLS1yZW1v
dGUtY29uZmlnLWZpbGUiKTsKICAgICAgICAgcHVzaChAanNjU3RyZXNzRHJpdmVyQ21kLCAkcmVt
b3RlQ29uZmlnRmlsZSk7CiAgICAgfQorICAgIAorICAgIGlmICgkbW9kZWwpIHsKKyAgICAgICAg
cHVzaChAanNjU3RyZXNzRHJpdmVyQ21kLCAiLS1tb2RlbCIpOworICAgICAgICBwdXNoKEBqc2NT
dHJlc3NEcml2ZXJDbWQsICRtb2RlbCk7CisgICAgfQogCiAgICAgaWYgKCRjaGlsZFByb2Nlc3Nl
cykgewogICAgICAgICBwdXNoKEBqc2NTdHJlc3NEcml2ZXJDbWQsICItLWNoaWxkLXByb2Nlc3Nl
cyIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cyBiL1Rv
b2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggZDFiNGRhZjQ5NzE4OGM2M2Y0
YzM3MTAwY2ZmNjZjZDM4NTdmNjc4YS4uM2UzMjE2YzJlMDI0ZTdkM2MwNmY2MTgyZTM5Y2I4ZjIy
ZmQwYzNiZiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwor
KysgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC0xMTQsNiArMTE0LDcg
QEAgJHRlc3RXcml0ZXIgPSAiZGVmYXVsdCIKICRyZW1vdGVIb3N0cyA9IFtdCiAkYXJjaGl0ZWN0
dXJlID0gbmlsCiAkaG9zdE9TID0gbmlsCiskbW9kZWwgPSBuaWwKICRmaWx0ZXIgPSBuaWwKICRl
bnZWYXJzID0gW10KICRtb2RlID0gImZ1bGwiCkBAIC0xODMsNiArMTg0LDcgQEAgR2V0b3B0TG9u
Zy5uZXcoWyctLWhlbHAnLCAnLWgnLCBHZXRvcHRMb25nOjpOT19BUkdVTUVOVF0sCiAgICAgICAg
ICAgICAgICBbJy0tdGVzdC13cml0ZXInLCBHZXRvcHRMb25nOjpSRVFVSVJFRF9BUkdVTUVOVF0s
CiAgICAgICAgICAgICAgICBbJy0tcmVtb3RlJywgR2V0b3B0TG9uZzo6UkVRVUlSRURfQVJHVU1F
TlRdLAogICAgICAgICAgICAgICAgWyctLXJlbW90ZS1jb25maWctZmlsZScsIEdldG9wdExvbmc6
OlJFUVVJUkVEX0FSR1VNRU5UXSwKKyAgICAgICAgICAgICAgIFsnLS1tb2RlbCcsIEdldG9wdExv
bmc6OlJFUVVJUkVEX0FSR1VNRU5UXSwKICAgICAgICAgICAgICAgIFsnLS1jaGlsZC1wcm9jZXNz
ZXMnLCAnLWMnLCBHZXRvcHRMb25nOjpSRVFVSVJFRF9BUkdVTUVOVF0sCiAgICAgICAgICAgICAg
ICBbJy0tZmlsdGVyJywgR2V0b3B0TG9uZzo6UkVRVUlSRURfQVJHVU1FTlRdLAogICAgICAgICAg
ICAgICAgWyctLXZlcmJvc2UnLCAnLXYnLCBHZXRvcHRMb25nOjpOT19BUkdVTUVOVF0sCkBAIC0y
NDEsNiArMjQzLDggQEAgR2V0b3B0TG9uZy5uZXcoWyctLWhlbHAnLCAnLWgnLCBHZXRvcHRMb25n
OjpOT19BUkdVTUVOVF0sCiAgICAgICAgICRhcmNoaXRlY3R1cmUgPSBhcmcKICAgICB3aGVuICct
LW9zJwogICAgICAgICAkaG9zdE9TID0gYXJnCisgICAgd2hlbiAnLS1tb2RlbCcKKyAgICAgICAg
JG1vZGVsID0gYXJnCiAgICAgd2hlbiAnLS1lbnYtdmFycycKICAgICAgICAgJGVudlZhcnMgPSBh
cmcuZ3N1YigvXHMrLywgJyAnKS5zcGxpdCgnICcpCiAgICAgd2hlbiAnLS1xdWljaycK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381007</attachid>
            <date>2019-10-15 11:46:34 -0700</date>
            <delta_ts>2019-10-15 15:24:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202063-20191015114633.patch</filename>
            <type>text/plain</type>
            <size>11893</size>
            <attacher name="Zhifei Fang">zhifei_fang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwODQ4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjNkYzVmOTM5NjM5NWZhNTVmN2YzNzlmMTc4ZDkyODE0
ODE3NTAyMS4uOGU0MjE2YTljNmFlM2UzNTViMGQxMWZhYWE2OWQzZDYxOTYxNmVkYSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDE5LTEwLTA4ICBaaGlmZWkgRmFuZyAgPHpoaWZlaV9mYW5nQGFwcGxlLmNvbT4KKwor
ICAgICAgICBUb29sIHRvIG1hcmsganNjIHRlc3Qgc2tpcC9lbmFibGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjA2MworCisgICAgICAgIFJldmll
d2VkIGJ5IEtlaXRoIE1pbGxlci4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWphdmFzY3JpcHRj
b3JlLXRlc3RzOgorICAgICAgICAocnVuSlNDU3RyZXNzVGVzdHMpOgorICAgICAgICAqIFNjcmlw
dHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTktMTAtMDggIEFha2FzaCBKYWluICA8YWFr
YXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtld3MtYnVpbGRdIERvIG5vdCBwcmludCB3
b3JrZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIGVhY2ggYnVpbGQgc3RlcCBbcGFydCAzXQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9tYXJrLWpzYy1zdHJlc3MtdGVzdCBiL1Rvb2xzL1Nj
cmlwdHMvbWFyay1qc2Mtc3RyZXNzLXRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDNlMDFiMzUyZmJmZDFiZjdj
MmYzYmI5YTBlMTVhMjU4NDE4NDIxNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
bWFyay1qc2Mtc3RyZXNzLXRlc3QKQEAgLTAsMCArMSwxNzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbiAtdQoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgZ2V0b3B0CitpbXBvcnQgYXJn
cGFyc2UKK2ltcG9ydCByZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBqc29uCisKK2xvZ2dlciA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKK2hhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lz
LnN0ZG91dCkKK2Zvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKCclKGFzY3RpbWUpcyAtICUo
bGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcycpCitoYW5kbGVyLnNldEZvcm1hdHRlcihmb3JtYXR0
ZXIpCitsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorbG9nZ2VyLmFkZEhhbmRsZXIoaGFu
ZGxlcikKKworZGVmIGl0ZXJfZGlyX3JlY3VzaXZlKHBhdGgsIGNhbGxiYWNrKToKKyAgICBpZiBv
cy5wYXRoLmlzZmlsZShwYXRoKSBhbmQgb3MucGF0aC5zcGxpdGV4dChwYXRoKVsxXSA9PSAnLmpz
JzoKKyAgICAgICAgbG9nZ2VyLmluZm8oIlByb2Nlc3Npbmcge30gLi4uIi5mb3JtYXQocGF0aCkp
CisgICAgICAgIGNhbGxiYWNrKHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgZm9yIHJvb3QsIGRp
cnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxl
czoKKyAgICAgICAgICAgICAgICBpdGVyX2Rpcl9yZWN1c2l2ZShvcy5wYXRoLmpvaW4ocm9vdCwg
bmFtZSksIGNhbGxiYWNrKQorICAgICAgICBsb2dnZXIuaW5mbygiRG9uZS4iKQorICAgIAorCitj
bGFzcyBKU0NUZXN0TW9kaWZpZXIob2JqZWN0KToKKyAgICB2YXJpYWJsZXMgPSBbCisgICAgICAg
ICIkaG9zdE9zIiwgIiRtb2RlbCIsICIkYXJjaGl0ZWN0dXJlIgorICAgIF0KKyAgICBkZWYgX19p
bml0X18oc2VsZiwgdGVzdF9wYXRoZXMsIGNvbmRpdGlvbnM9e30sIG1hdGNoPSJhbGwiKToKKyAg
ICAgICAgc2VsZi5fY29uZGl0aW9ucyA9IGNvbmRpdGlvbnMKKyAgICAgICAgc2VsZi5fdGVzdF9w
YXRoZXMgPSB0ZXN0X3BhdGhlcworICAgICAgICBzZWxmLl9tYXRjaCA9IG1hdGNoCisgICAgICAg
IHNlbGYuX3NraXBfbGluZV9wb3N0Zml4ID0gIiMgYWRkZWQgYnkgbWFyay1qc2Mtc3RyZXNzLXRl
c3QucHkiCisKKyAgICBkZWYgc2tpcChzZWxmKToKKyAgICAgICAgZm9yIHBhdGggaW4gc2VsZi5f
dGVzdF9wYXRoZXM6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiTWFyayB7fSBza2lwIi5mb3Jt
YXQocGF0aCkpCisgICAgICAgICAgICBpdGVyX2Rpcl9yZWN1c2l2ZShwYXRoLCBsYW1iZGEgZmls
ZV9wYXRoOiBzZWxmLl9za2lwX3Rlc3RfZmlsZShmaWxlX3BhdGgpKQorICAgIAorICAgIGRlZiBl
bmFibGUoc2VsZik6CisgICAgICAgIGZvciBwYXRoIGluIHNlbGYuX3Rlc3RfcGF0aGVzOgorICAg
ICAgICAgICAgbG9nZ2VyLmluZm8oIk1hcmsge30gZW5hYmxlIi5mb3JtYXQocGF0aCkpCisgICAg
ICAgICAgICBpdGVyX2Rpcl9yZWN1c2l2ZShwYXRoLCBsYW1iZGEgZmlsZV9wYXRoOiBzZWxmLl9l
bmFibGVfdGVzdF9maWxlKGZpbGVfcGF0aCkpCisKKyAgICBkZWYgX2dlbmVyYXRlX2NvbmRpdGlv
bl9vcChzZWxmLCB2YWx1ZSk6CisgICAgICAgIG9wID0gIj09IgorICAgICAgICBpZiAoIiEiID09
IHZhbHVlWzBdKToKKyAgICAgICAgICAgIG9wID0gIiE9IgorICAgICAgICAgICAgdmFsdWUgPSB2
YWx1ZVsxOl0KKyAgICAgICAgcmV0dXJuIG9wLCB2YWx1ZQorCisgICAgIyBDb25kaXRpb24gZ3Jh
bW1lciBpcyBsaWtlICFBIG9yIEIgb3IgQyBhbmQgRAorICAgICMgVHJhbnNsYXRlIGl0IHRvIHJ1
Ynk6ICRob3N0T3MgIT0gQSBvciAkaG9zdE9zID09IEIgb3IgJGhvc3RPcyA9PSBDIGFuZCAkaG9z
dE9zID09IEQgCisgICAgZGVmIF9wYXJzZV9jb25kaXRpb24oc2VsZiwgdmFyaWFibGUsIGNvbmRp
dGlvbik6CisgICAgICAgIHJlcyA9IFtdCisgICAgICAgIHZhbHVlcyA9IFtdCisgICAgICAgIGZv
ciB3b3JkIGluIHJlLnNwbGl0KHInXHMrJywgY29uZGl0aW9uKToKKyAgICAgICAgICAgIGlmIHdv
cmQgPT0gIm9yIiBvciB3b3JkID09ICJhbmQiOgorICAgICAgICAgICAgICAgIHZhbHVlID0gIiAi
LmpvaW4odmFsdWVzKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgdmFsdWVzID0gW10KKyAgICAg
ICAgICAgICAgICByZXMuYXBwZW5kKCd7fSB7fSAie30iJy5mb3JtYXQodmFyaWFibGUsICpzZWxm
Ll9nZW5lcmF0ZV9jb25kaXRpb25fb3AodmFsdWUpKSkKKyAgICAgICAgICAgICAgICByZXMuYXBw
ZW5kKHdvcmQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBl
bmQod29yZCkKKyAgICAgICAgaWYgdmFsdWVzOgorICAgICAgICAgICAgdmFsdWUgPSAiICIuam9p
bih2YWx1ZXMpLnN0cmlwKCkKKyAgICAgICAgICAgIHJlcy5hcHBlbmQoJ3t9IHt9ICJ7fSInLmZv
cm1hdCh2YXJpYWJsZSwgKnNlbGYuX2dlbmVyYXRlX2NvbmRpdGlvbl9vcCh2YWx1ZSkpKQorICAg
ICAgICByZXR1cm4gIiAiLmpvaW4ocmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9za2lwX2Fubm90
YXRpb25fbGluZShzZWxmKToKKyAgICAgICAgc2tpcF9saW5lX3ByZWZpeCA9ICIvL0Agc2tpcCBp
ZiIKKyAgICAgICAgc2tpcF9jb25kaXRpb25zID0gW10KKyAgICAgICAgc2tpcF9saW5lID0gInt9
IHt9IHt9IgorICAgICAgICBzdXBwb3J0ZWRfdmFyaWFibGVzID0gZmlsdGVyKGxhbWJkYSB2YXJp
YWJsZTogdmFyaWFibGUgaW4gc2VsZi5fY29uZGl0aW9ucywgSlNDVGVzdE1vZGlmaWVyLnZhcmlh
YmxlcykKKyAgICAgICAgY29uZGl0aW9uX3RlbXBsYXRlID0gInt9IiBpZiBsZW4oc3VwcG9ydGVk
X3ZhcmlhYmxlcykgPT0gMSBlbHNlICIoe30pIgorICAgICAgICBmb3IgdmFyaWFibGUgaW4gc3Vw
cG9ydGVkX3ZhcmlhYmxlczoKKyAgICAgICAgICAgIHNraXBfY29uZGl0aW9ucy5hcHBlbmQoY29u
ZGl0aW9uX3RlbXBsYXRlLmZvcm1hdChzZWxmLl9wYXJzZV9jb25kaXRpb24odmFyaWFibGUsIHNl
bGYuX2NvbmRpdGlvbnNbdmFyaWFibGVdKSkpCisgICAgICAgIGlmIG5vdCBza2lwX2NvbmRpdGlv
bnM6CisgICAgICAgICAgICAjIE5vIGNvbmRpdGlvbnMsIGFsd2F5cyBza2lwIAorICAgICAgICAg
ICAgc2tpcF9jb25kaXRpb25zID0gWyJ0cnVlIl0KKyAgICAgICAgaWYgc2VsZi5fbWF0Y2ggPT0g
ImFueSI6CisgICAgICAgICAgICBza2lwX2xpbmUgPSBza2lwX2xpbmUuZm9ybWF0KHNraXBfbGlu
ZV9wcmVmaXgsICIgb3IgIi5qb2luKHNraXBfY29uZGl0aW9ucyksIHNlbGYuX3NraXBfbGluZV9w
b3N0Zml4KQorICAgICAgICBlbGlmIHNlbGYuX21hdGNoID09ICJhbGwiOgorICAgICAgICAgICAg
c2tpcF9saW5lID0gc2tpcF9saW5lLmZvcm1hdChza2lwX2xpbmVfcHJlZml4LCAiIGFuZCAiLmpv
aW4oc2tpcF9jb25kaXRpb25zKSwgc2VsZi5fc2tpcF9saW5lX3Bvc3RmaXgpCisgICAgICAgIHJl
dHVybiBza2lwX2xpbmUKKworICAgICMgVGhpcyBjYW4gb25seSByZW1vdmUgdGhlIHNraXAgYW5u
b3RhdGlvbiBnZW5lcmF0ZWQgYnkgdGhpcyBzY3JpcHQKKyAgICBkZWYgX2VuYWJsZV90ZXN0X2Zp
bGUoc2VsZiwgdGVzdF9maWxlKToKKyAgICAgICAgd2l0aCBvcGVuKHRlc3RfZmlsZSwgJ3IrJykg
YXMgZjoKKyAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgZi5z
ZWVrKDApCisgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICBp
ZiBub3Qgc2VsZi5fc2tpcF9saW5lX3Bvc3RmaXggaW4gbGluZToKKyAgICAgICAgICAgICAgICAg
ICAgZi53cml0ZShsaW5lKQorICAgICAgICAgICAgZi50cnVuY2F0ZSgpCisgICAgICAgICAgICAK
KworICAgIGRlZiBfc2tpcF90ZXN0X2ZpbGUoc2VsZiwgdGVzdF9maWxlKToKKyAgICAgICAgIyBy
ZW1vdmUgdGhlIGV4aXNpdGluZyBza2lwIGxpbmUsIHNvIHRoYXQgd2UgY2FuIGFwcGx5IHRoZSBu
ZXcgb25lCisgICAgICAgIHNlbGYuX2VuYWJsZV90ZXN0X2ZpbGUodGVzdF9maWxlKQorICAgICAg
ICBza2lwX2xpbmUgPSBzZWxmLl9nZW5lcmF0ZV9za2lwX2Fubm90YXRpb25fbGluZSgpCisgICAg
ICAgIHdpdGggb3Blbih0ZXN0X2ZpbGUsICdyKycpIGFzIGY6CisgICAgICAgICAgICBvcmlnaW5h
bF9jb250ZW50ID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAg
Zi53cml0ZSgie31cbnt9Ii5mb3JtYXQoc2tpcF9saW5lLCBvcmlnaW5hbF9jb250ZW50KSkKKwor
b3BlbnNvdXJjZV9yb290ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJl
YWxwYXRoKF9fZmlsZV9fKSksICIuLi8uLi8iKQoranNjX3Rlc3Rfc2VhcmNoX3BhdGggPSBbCisg
ICAgb3MucGF0aC5qb2luKG9wZW5zb3VyY2Vfcm9vdCwgIkpTVGVzdHMiKSwgCisgICAgb3MucGF0
aC5qb2luKG9wZW5zb3VyY2Vfcm9vdCwgIkxheW91dFRlc3RzIikKK10KK2RlZiBtYWluKCk6Cisg
ICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgIHN1YnBhcnNlcnMgPSBw
YXJzZXIuYWRkX3N1YnBhcnNlcnMoZGVzdD0iYWN0aW9uIikKKyAgICBmaWxlX2xpc3RfaGVscCA9
ICJGaWxlcy9kaXJlY3RvcmllcyBsaXN0OyB1c2UgJywnIHRvIHNlcGFyYXRlIGVhY2ggaXRlbS4g
RXhhbXBsZTogYS5qcywgYi5qcywgYy5qcyBVc2UgJy0nIGlmIHlvdSBhcmUgdXNpbmcgLS1qc2Mt
anNvbi1vdXRwdXQgYXJndW1lbnQiCisgICAgcGFyc2VyX2VuYWJsZSA9IHN1YnBhcnNlcnMuYWRk
X3BhcnNlcigiZW5hYmxlIiwgaGVscD0iRW5hYmxlIHRoZSB0ZXN0cyB3aGljaCBhcmUgbWFya2Vk
IGFzIHNraXBwZWQgYnkgdGhpcyBzY3JpcHQiKQorICAgIHBhcnNlcl9lbmFibGUuYWRkX2FyZ3Vt
ZW50KCJmaWxlcyIsIGhlbHA9ZmlsZV9saXN0X2hlbHApCisgICAgcGFyc2VyX2VuYWJsZS5hZGRf
YXJndW1lbnQoIi0tanNjLWpzb24tb3V0cHV0IiwgaGVscD0iUGFzcyB0aGUganNvbiBvdXRwdXQg
b2YgcnVuLWphdmFzY3JpcHRjb3JlLXRlc3RzIHRvIHVuc2tpcCBhbGwgZmFpbGVkIHRlc3RzIikK
KworICAgIHBhcnNlcl9za2lwID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCJza2lwIiwgaGVscD0i
SW5zZXJ0IHNraXAgY29uZGl0aW9uIHRvIGdpdmVuIGZpbGVzL2RpcmVjdG9yaWVzIikKKyAgICBw
YXJzZXJfc2tpcC5hZGRfYXJndW1lbnQoImZpbGVzIiwgaGVscD1maWxlX2xpc3RfaGVscCkKKyAg
ICBwYXJzZXJfc2tpcC5hZGRfYXJndW1lbnQoIi0tanNjLWpzb24tb3V0cHV0IiwgaGVscD0iUGFz
cyB0aGUganNvbiBvdXRwdXQgb2YgcnVuLWphdmFzY3JpcHRjb3JlLXRlc3RzIHRvIHNraXAgYWxs
IGZhaWxlZCB0ZXN0cyIpCisgICAgcGFyc2VyX3NraXAuYWRkX2FyZ3VtZW50KCItLXBsYXRmb3Jt
IiwgIi0taG9zdC1vcyIsIGhlbHA9IlNraXAgaWYgaG9zdCBvcyBtYXRjaGVzIGdpdmVuIHZhbHVl
LCBFeGFtcGxlczogJ3dpbmRvd3Mgb3IgbGludXgnICchd2luZG93cyBhbmQgIWxpbnV4JyIpCisg
ICAgcGFyc2VyX3NraXAuYWRkX2FyZ3VtZW50KCItLW1vZGVsIiwgaGVscD0iU2tpcCBpZiBoYXJk
d2FyZSBtb2RlbCBtYXRjaGVzIGdpdmVuIHZhbHVlLCBFeGFtcGxlczogJ0FwcGxlIFdhdGNoIFNl
cmllcyAzIG9yIEFwcGxlIFdhdGNoIFNlcmllcyA0JyAnIUFwcGxlIFdhdGNoIFNlcmllcyAzIGFu
ZCAhQXBwbGUgV2F0Y2ggU2VyaWVzIDQnIikKKyAgICBwYXJzZXJfc2tpcC5hZGRfYXJndW1lbnQo
Ii0tYXJjaGl0ZWN0dXJlIiwgaGVscD0iU2tpcCBpZiBhcmNoaXRlY3R1cmUgbWF0Y2hlcyBnaXZl
biB2YWx1ZSwgRXhhbXBsZXM6ICdhcm0gb3IgeDg2JyAnIWFybSBhbmQgIXg4NiciKQorICAgIHBh
cnNlcl9za2lwLmFkZF9hcmd1bWVudCgiLS1tYXRjaCIsIGRlZmF1bHQ9ImFsbCIsIGhlbHA9Ik1h
dGNoIGFsbCBvciBhbnkgYWJvdmUgY29uZGl0aW9ucyIpCisgICAgCisgICAgYXJncyA9IHZhcnMo
cGFyc2VyLnBhcnNlX2FyZ3MoKSkKKyAgICBjb25kaXRpb25zID0ge30KKyAgICBmaWxlcyA9IFtd
CisgICAgaWYgbm90IGFyZ3NbImZpbGVzIl0gYW5kIG5vdCBhcmdzWyItLWxvZy1maWxlIl06Cisg
ICAgICAgIGxvZ2dlci5lcnJvcigiUGxlYXNlIHNwZWljaWZ5IGEgbGlzdCBvZiBmaWxlLCBvciB1
c2UgLS1sb2ctZmlsZSB0byBnaXZlIGEgSlNDIHRlc3QgbG9nIikKKyAgICAgICAgcmV0dXJuIDEK
KyAgICBpZiBhcmdzWyJmaWxlcyJdIGFuZCBub3QgYXJnc1siZmlsZXMiXSA9PSAiLSI6CisgICAg
ICAgIGZpbGVzICs9IGFyZ3NbImZpbGVzIl0uc3BsaXQoIiwiKQorICAgIGlmIGFyZ3NbImpzY19q
c29uX291dHB1dCJdOgorICAgICAgICB3aXRoIG9wZW4oYXJnc1sianNjX2pzb25fb3V0cHV0Il0p
IGFzIGY6CisgICAgICAgICAgICBqc2NfanNvbl9vdXRwdXQgPSBqc29uLmxvYWQoZikKKyAgICAg
ICAgZmFpbHVyZXMgPSBqc2NfanNvbl9vdXRwdXRbInN0cmVzc1Rlc3RGYWlsdXJlcyJdCisgICAg
ICAgIGZhaWx1cmVfdGVzdF9maWxlc19zZXQgPSBzZXQoKQorICAgICAgICBmb3IgZmFpbHVyZV90
ZXN0IGluIGZhaWx1cmVzOgorICAgICAgICAgICAgcGF0aF9wYXJ0cyA9IGZhaWx1cmVfdGVzdC5z
cGxpdChvcy5wYXRoLnNlcCkKKyAgICAgICAgICAgIGlmICd5YW1sJyBpbiBwYXRoX3BhcnRzWzBd
OgorICAgICAgICAgICAgICAgIGZhaWx1cmVfdGVzdF9wYXRoID0gb3MucGF0aC5qb2luKCpwYXRo
X3BhcnRzWzE6XSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbHVyZV90
ZXN0X3BhdGggPSBmYWlsdXJlX3Rlc3QKKyAgICAgICAgICAgIGZhaWx1cmVfdGVzdF9maWxlID0g
b3MucGF0aC5zcGxpdGV4dChmYWlsdXJlX3Rlc3RfcGF0aClbMF0KKyAgICAgICAgICAgIGZvciBz
ZWFyY2hfcGF0aCBpbiBqc2NfdGVzdF9zZWFyY2hfcGF0aDoKKyAgICAgICAgICAgICAgICB3aG9s
ZV9wYXRoID0gb3MucGF0aC5qb2luKHNlYXJjaF9wYXRoLCBmYWlsdXJlX3Rlc3RfZmlsZSkKKyAg
ICAgICAgICAgICAgICBpZiBmYWlsdXJlX3Rlc3RfZmlsZSBub3QgaW4gZmFpbHVyZV90ZXN0X2Zp
bGVzX3NldCBhbmQgb3MucGF0aC5pc2ZpbGUod2hvbGVfcGF0aCk6CisgICAgICAgICAgICAgICAg
ICAgIGZpbGVzLmFwcGVuZCh3aG9sZV9wYXRoKQorICAgICAgICAgICAgICAgICAgICBmYWlsdXJl
X3Rlc3RfZmlsZXNfc2V0LmFkZChmYWlsdXJlX3Rlc3RfZmlsZSkKKworICAgIGlmICJob3N0X29z
IiBpbiBhcmdzIGFuZCBhcmdzWyJob3N0X29zIl06CisgICAgICAgIGNvbmRpdGlvbnNbIiRob3N0
T3MiXSA9IGFyZ3NbImhvc3Rfb3MiXQorICAgIGlmICJwbGF0Zm9ybSIgaW4gYXJncyBhbmQgYXJn
c1sicGxhdGZvcm0iXToKKyAgICAgICAgY29uZGl0aW9uc1siJGhvc3RPcyJdID0gYXJnc1sicGxh
dGZvcm0iXQorICAgIGlmICJhcmNoaXRlY3R1cmUiIGluIGFyZ3MgYW5kIGFyZ3NbImFyY2hpdGVj
dHVyZSJdOgorICAgICAgICBjb25kaXRpb25zWyIkYXJjaGl0ZWN0dXJlIl0gPSBhcmdzWyJhcmNo
aXRlY3R1cmUiXQorICAgIGlmICJtb2RlbCIgaW4gYXJncyBhbmQgYXJnc1sibW9kZWwiXToKKyAg
ICAgICAgY29uZGl0aW9uc1siJG1vZGVsIl0gPSBhcmdzWyJtb2RlbCJdCisKKyAgICBtb2RpZmVy
ID0gSlNDVGVzdE1vZGlmaWVyKGZpbGVzLCBjb25kaXRpb25zLCBhcmdzWyJtYXRjaCJdIGlmICJt
YXRjaCIgaW4gYXJncyBlbHNlIE5vbmUpCisgICAgZ2V0YXR0cihtb2RpZmVyLCBhcmdzWyJhY3Rp
b24iXSkoKQorICAgIHJldHVybiAwCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAg
c3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tamF2YXNjcmlw
dGNvcmUtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1qYXZhc2NyaXB0Y29yZS10ZXN0cwppbmRl
eCA4ZmNhYzQ4OGE5M2RhYWU1ZDI4NDY2Mjc4ZDBkNmUzM2NmYzIxNTUyLi5mM2JiYTYwM2JmZGVl
ZTdkN2FkMDdiYjgyOTA4ZjMxMTZkNzliZGVmIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1
bi1qYXZhc2NyaXB0Y29yZS10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1qYXZhc2NyaXB0
Y29yZS10ZXN0cwpAQCAtOTAsNiArOTAsNyBAQCBteSAkZ21hbGxvY0RlZmF1bHRQYXRoID0gIi91
c3IvbGliL2xpYmdtYWxsb2MuZHlsaWIiOwogCiBteSAkY3JlYXRlVGFyYmFsbCA9IDA7CiBteSAk
cmVtb3RlSG9zdCA9IDA7CitteSAkbW9kZWwgPSAwOwogbXkgJGZhaWxGYXN0ID0gMTsKIG15ICVq
c29uRGF0YSA9ICgpOwogbXkgQHRlc3RSZXN1bHRzID0gKCk7CkBAIC0yMjksNiArMjMwLDcgQEAg
VXNhZ2U6ICRwcm9ncmFtTmFtZSBbb3B0aW9uc10gW29wdGlvbnMgdG8gcGFzcyB0byBidWlsZCBz
eXN0ZW1dCiAgIC0tdGFyYmFsbCAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSBhIHRhcmJhbGwg
b2YgdGhlIGJ1bmRsZSBwcm9kdWNlZCBieSBydW5uaW5nIHRoZSBKU0Mgc3RyZXNzIHRlc3RzLgog
ICAtLXJlbW90ZT0gICAgICAgICAgICAgICAgICAgICBSdW4gdGhlIEpTQyBzdHJlc3MgdGVzdHMg
b24gdGhlIHNwZWNpZmllZCByZW1vdGUgaG9zdC4gSW1wbGllcyAtLXRhcmJhbGwuCiAgIC0tcmVt
b3RlLWNvbmZpZy1maWxlPSAgICAgICAgIFNhbWUgYXMgcmVtb3RlLCBidXQgcmVhZCBjb25maWcg
ZnJvbSBKU09OIGZpbGUuCisgIC0tbW9kZWw9ICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZnkg
cmVtb3RlIGhhcmR3YXJlIG1vZGVsLCB0aGlzIGluZm8gdXNlZCBmb3IgZGV0ZXJtaW5lIHdoYXQg
anNjIHRlc3RzIHNob3VsZCBydW4gb24gcmVtb3RlCiAgIC0tZXh0cmEtdGVzdHM9ICAgICAgICAg
ICAgICAgIFBhdGggdG8gYSBmaWxlIGNvbnRhaW5pbmcgZXh0cmEgdGVzdHMKICAgLS1jaGlsZC1w
cm9jZXNzZXM9ICAgICAgICAgICAgU3BlY2lmeSB0aGUgbnVtYmVyIG9mIGNoaWxkIHByb2Nlc3Nl
cy4KICAgLS1zaGVsbC1ydW5uZXIgICAgICAgICAgICAgICAgVXNlcyB0aGUgc2hlbGwtYmFzZWQg
dGVzdCBydW5uZXIgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBtYWtlLWJhc2VkIHJ1bm5lci4KQEAg
LTI4Niw2ICsyODgsNyBAQCBHZXRPcHRpb25zKAogICAgICdqc29uLW91dHB1dD1zJyA9PiBcJGpz
b25GaWxlTmFtZSwKICAgICAndGFyYmFsbCEnID0+IFwkY3JlYXRlVGFyYmFsbCwKICAgICAncmVt
b3RlPXMnID0+IFwkcmVtb3RlSG9zdCwKKyAgICAnbW9kZWw9cycgPT4gXCRtb2RlbCwKICAgICAn
cmVtb3RlLWNvbmZpZy1maWxlPXMnID0+IFwkcmVtb3RlQ29uZmlnRmlsZSwKICAgICAnY2hpbGQt
cHJvY2Vzc2VzPXMnID0+IFwkY2hpbGRQcm9jZXNzZXMsCiAgICAgJ3NoZWxsLXJ1bm5lcicgPT4g
XCRzaGVsbFJ1bm5lciwKQEAgLTUzNiw2ICs1MzksMTEgQEAgc3ViIHJ1bkpTQ1N0cmVzc1Rlc3Rz
CiAgICAgICAgIHB1c2goQGpzY1N0cmVzc0RyaXZlckNtZCwgIi0tcmVtb3RlLWNvbmZpZy1maWxl
Iik7CiAgICAgICAgIHB1c2goQGpzY1N0cmVzc0RyaXZlckNtZCwgJHJlbW90ZUNvbmZpZ0ZpbGUp
OwogICAgIH0KKyAgICAKKyAgICBpZiAoJG1vZGVsKSB7CisgICAgICAgIHB1c2goQGpzY1N0cmVz
c0RyaXZlckNtZCwgIi0tbW9kZWwiKTsKKyAgICAgICAgcHVzaChAanNjU3RyZXNzRHJpdmVyQ21k
LCAkbW9kZWwpOworICAgIH0KIAogICAgIGlmICgkY2hpbGRQcm9jZXNzZXMpIHsKICAgICAgICAg
cHVzaChAanNjU3RyZXNzRHJpdmVyQ21kLCAiLS1jaGlsZC1wcm9jZXNzZXMiKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1
bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IGQxYjRkYWY0OTcxODhjNjNmNGMzNzEwMGNmZjY2Y2Qz
ODU3ZjY3OGEuLjNlMzIxNmMyZTAyNGU3ZDNjMDZmNjE4MmUzOWNiOGYyMmZkMGMzYmYgMTAwNzU1
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysrIGIvVG9vbHMvU2Ny
aXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtMTE0LDYgKzExNCw3IEBAICR0ZXN0V3JpdGVy
ID0gImRlZmF1bHQiCiAkcmVtb3RlSG9zdHMgPSBbXQogJGFyY2hpdGVjdHVyZSA9IG5pbAogJGhv
c3RPUyA9IG5pbAorJG1vZGVsID0gbmlsCiAkZmlsdGVyID0gbmlsCiAkZW52VmFycyA9IFtdCiAk
bW9kZSA9ICJmdWxsIgpAQCAtMTgzLDYgKzE4NCw3IEBAIEdldG9wdExvbmcubmV3KFsnLS1oZWxw
JywgJy1oJywgR2V0b3B0TG9uZzo6Tk9fQVJHVU1FTlRdLAogICAgICAgICAgICAgICAgWyctLXRl
c3Qtd3JpdGVyJywgR2V0b3B0TG9uZzo6UkVRVUlSRURfQVJHVU1FTlRdLAogICAgICAgICAgICAg
ICAgWyctLXJlbW90ZScsIEdldG9wdExvbmc6OlJFUVVJUkVEX0FSR1VNRU5UXSwKICAgICAgICAg
ICAgICAgIFsnLS1yZW1vdGUtY29uZmlnLWZpbGUnLCBHZXRvcHRMb25nOjpSRVFVSVJFRF9BUkdV
TUVOVF0sCisgICAgICAgICAgICAgICBbJy0tbW9kZWwnLCBHZXRvcHRMb25nOjpSRVFVSVJFRF9B
UkdVTUVOVF0sCiAgICAgICAgICAgICAgICBbJy0tY2hpbGQtcHJvY2Vzc2VzJywgJy1jJywgR2V0
b3B0TG9uZzo6UkVRVUlSRURfQVJHVU1FTlRdLAogICAgICAgICAgICAgICAgWyctLWZpbHRlcics
IEdldG9wdExvbmc6OlJFUVVJUkVEX0FSR1VNRU5UXSwKICAgICAgICAgICAgICAgIFsnLS12ZXJi
b3NlJywgJy12JywgR2V0b3B0TG9uZzo6Tk9fQVJHVU1FTlRdLApAQCAtMjQxLDYgKzI0Myw4IEBA
IEdldG9wdExvbmcubmV3KFsnLS1oZWxwJywgJy1oJywgR2V0b3B0TG9uZzo6Tk9fQVJHVU1FTlRd
LAogICAgICAgICAkYXJjaGl0ZWN0dXJlID0gYXJnCiAgICAgd2hlbiAnLS1vcycKICAgICAgICAg
JGhvc3RPUyA9IGFyZworICAgIHdoZW4gJy0tbW9kZWwnCisgICAgICAgICRtb2RlbCA9IGFyZwog
ICAgIHdoZW4gJy0tZW52LXZhcnMnCiAgICAgICAgICRlbnZWYXJzID0gYXJnLmdzdWIoL1xzKy8s
ICcgJykuc3BsaXQoJyAnKQogICAgIHdoZW4gJy0tcXVpY2snCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>