<?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>172033</bug_id>
          
          <creation_ts>2017-05-12 09:56:47 -0700</creation_ts>
          <short_desc>webkitpy: Pass directory with crash logs into CrashLogs</short_desc>
          <delta_ts>2017-05-12 13:39:13 -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>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=171976</see_also>
          <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>
          
          <blocked>171976</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>glenn</cc>
    
    <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1307908</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-05-12 09:56:47 -0700</bug_when>
    <thetext>Currently, CrashLogs calculates the path to the crash-logs itself.  This path should be generated by the port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307911</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-05-12 09:57:38 -0700</bug_when>
    <thetext>&lt;rdar://problem/32157616&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307914</commentid>
    <comment_count>2</comment_count>
      <attachid>309907</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-05-12 10:14:37 -0700</bug_when>
    <thetext>Created attachment 309907
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307968</commentid>
    <comment_count>3</comment_count>
      <attachid>309907</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-05-12 11:37:04 -0700</bug_when>
    <thetext>Comment on attachment 309907
Patch

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

&gt; Tools/Scripts/webkitpy/common/system/crashlogs_unittest.py:239
&gt; +    def crash_log_path(self):
&gt; +        return &apos;/Users/mock/Library/Logs/DiagnosticReports&apos;

It seems sufficient to define a class constant, maybe DARWIN_MOCK_CRASH_DIRECTORY, to be &quot;/Users/mock/Library/Logs/DiagnosticReports&quot; instead of defining a function. Notice that I explicitly mentioned &quot;DARWIN&quot; in the name of the constant since the path it represents is only meaningful on Darwin-based OSes.

&gt; Tools/Scripts/webkitpy/port/base.py:1351
&gt; +        return self.results_directory()

I take it we consider the location of the crash log on Windows typical for most ports. That is, the crash log/core dump will be next to the executable.

&gt; Tools/Scripts/webkitpy/port/darwin.py:93
&gt; +        if self.host.filesystem.exists(self.host.filesystem.join(log_directory, &apos;DiagnosticReports&apos;)):
&gt; +            return self.host.filesystem.join(log_directory, &apos;DiagnosticReports&apos;)

We may compute the path to the DiagnosticReports directory twice - once to check its existence and once more if it exists. I suggest that we compute it once and cache it in a local variable.

&gt; Tools/Scripts/webkitpy/port/darwin.py:95
&gt; +        else:
&gt; +            return self.host.filesystem.join(log_directory, &apos;CrashReporter&apos;)

We tend to follow the WebKit Code Style Guidelines such that this return statement should be outside of the else scope since the preceding if concludes with a return statement [1].

[1] &lt;https://webkit.org/code-style-guidelines/#linebreaking-else-if&gt;

&gt; Tools/Scripts/webkitpy/port/ios_device_unittest.py:42
&gt; +    def test_crashlog_path(self):
&gt; +        pass

What is the purpose of this test method?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307980</commentid>
    <comment_count>4</comment_count>
      <attachid>309907</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-05-12 12:03:59 -0700</bug_when>
    <thetext>Comment on attachment 309907
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/port/base.py:1351
&gt;&gt; +        return self.results_directory()
&gt; 
&gt; I take it we consider the location of the crash log on Windows typical for most ports. That is, the crash log/core dump will be next to the executable.

Correct. Additionally, even if this assumption is incorrect, it makes generalizing crash logic easier because this directory will definitely exist.

&gt;&gt; Tools/Scripts/webkitpy/port/ios_device_unittest.py:42
&gt;&gt; +        pass
&gt; 
&gt; What is the purpose of this test method?

The IOSDeviceTest inherits from DarwinTest (through IOSTest).  Until we have implemented the crash log path for iOS, we need this to keep tests passing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307982</commentid>
    <comment_count>5</comment_count>
      <attachid>309924</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-05-12 12:10:18 -0700</bug_when>
    <thetext>Created attachment 309924
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307983</commentid>
    <comment_count>6</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-05-12 12:14:08 -0700</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #4)
&gt; Comment on attachment 309907 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=309907&amp;action=review
&gt; 
&gt; &gt;&gt; Tools/Scripts/webkitpy/port/base.py:1351
&gt; &gt;&gt; +        return self.results_directory()
&gt; &gt; 
&gt; &gt; I take it we consider the location of the crash log on Windows typical for most ports. That is, the crash log/core dump will be next to the executable.
&gt; 
&gt; Correct.

OK.

&gt; Additionally, even if this assumption is incorrect, it makes
&gt; generalizing crash logic easier because this directory will definitely exist.
&gt; 

I&apos;m unclear how the existence of a directory &quot;makes generalizing crash logic easier&quot;. It seems that if crash logs/core dumps are not placed in self.results_directory() for some port/OS P and CrashLog was taught to work for P then it would not find any crash logs. This would likely surprise the implementer that taught CrashLog to work for P and though discoverable when testing ones code would be more easily discoverable (and less surprising) if the default implementation of Port.path_to_crash_logs raised a NotImplementedError. The exception is more discoverable because it is not subtle and it would immediately force the implementer to implement this method for P.

&gt; &gt;&gt; Tools/Scripts/webkitpy/port/ios_device_unittest.py:42
&gt; &gt;&gt; +        pass
&gt; &gt; 
&gt; &gt; What is the purpose of this test method?
&gt; 
&gt; The IOSDeviceTest inherits from DarwinTest (through IOSTest).  Until we have
&gt; implemented the crash log path for iOS, we need this to keep tests passing.

:(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308002</commentid>
    <comment_count>7</comment_count>
      <attachid>309924</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-12 12:52:21 -0700</bug_when>
    <thetext>Comment on attachment 309924
Patch

Clearing flags on attachment: 309924

Committed r216776: &lt;http://trac.webkit.org/changeset/216776&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308003</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-12 12:52:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308033</commentid>
    <comment_count>9</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-05-12 13:39:13 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #6)
&gt; 
&gt; ...
&gt;
&gt; I&apos;m unclear how the existence of a directory &quot;makes generalizing crash logic
&gt; easier&quot;. It seems that if crash logs/core dumps are not placed in
&gt; self.results_directory() for some port/OS P and CrashLog was taught to work
&gt; for P then it would not find any crash logs. This would likely surprise the
&gt; implementer that taught CrashLog to work for P and though discoverable when
&gt; testing ones code would be more easily discoverable (and less surprising) if
&gt; the default implementation of Port.path_to_crash_logs raised a
&gt; NotImplementedError. The exception is more discoverable because it is not
&gt; subtle and it would immediately force the implementer to implement this
&gt; method for P.
&gt; 
&gt; ...
&gt;

That&apos;s a good point.  &lt;https://trac.webkit.org/r216788&gt; changes it so that it will throw an exception by default.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309907</attachid>
            <date>2017-05-12 10:14:37 -0700</date>
            <delta_ts>2017-05-12 12:10:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172033-20170512101437.patch</filename>
            <type>text/plain</type>
            <size>19640</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNjc2NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDUyIEBACisyMDE3LTA1LTEyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUGFzcyBkaXJlY3Rvcnkgd2l0aCBjcmFzaCBsb2dzIGlu
dG8gQ3Jhc2hMb2dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzIwMzMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyMTU3NjE2PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIENyYXNoTG9n
cyBhbmQgdGhlIGNhbGxlcnMgb2YgQ3Jhc2hMb2dzIHNvIHRoYXQgdGhlIHBvcnQgb2JqZWN0IG93
bnMKKyAgICAgICAgdGhlIGxvY2F0aW9uIG9mIGNyYXNoIGxvZ3MuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzLnB5OgorICAgICAgICAoQ3Jhc2hM
b2dzLl9faW5pdF9fKTogUGFzcyBtYW5kYXRvcnkgY3Jhc2hfbG9nX2RpcmVjdG9yeSB3aGVuIGNv
bnN0cnVjdGluZy4KKyAgICAgICAgKENyYXNoTG9ncy5fZmluZF9uZXdlc3RfbG9nX2Rhcndpbik6
IFVzZSBzZWxmLl9jcmFzaF9sb2dfZGlyZWN0b3J5IGluc3RlYWQgb2YKKyAgICAgICAgZ2VuZXJh
dGluZyBvbmUuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfbmV3ZXN0X2xvZ193aW4pOiBVc2Ug
c2VsZi5fY3Jhc2hfbG9nX2RpcmVjdG9yeSBpbnN0ZWFkIG9mCisgICAgICAgIHNlbGYuX3Jlc3Vs
dHNfZGlyZWN0b3J5LgorICAgICAgICAoQ3Jhc2hMb2dzLl9maW5kX2FsbF9sb2dzX2Rhcndpbik6
IFVzZSBzZWxmLl9jcmFzaF9sb2dfZGlyZWN0b3J5IGluc3RlYWQgb2YKKyAgICAgICAgZ2VuZXJh
dGluZyBvbmUuCisgICAgICAgIChDcmFzaExvZ3MuX2xvZ19kaXJlY3RvcnlfZGFyd2luKTogTW92
ZWQgdG8gcG9ydC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jh
c2hsb2dzX3VuaXR0ZXN0LnB5OiBVcGRhdGUgdGVzdHMgc2luY2UgdGhlIHBhdGgKKyAgICAgICAg
dG8gdGhlIGNyYXNoIGxvZyBpcyBubyBsb25nZXIgb3duZWQgYnkgQ3Jhc2hMb2dzLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdy
YXRpb250ZXN0LnB5OiBVc2UgdGhlIGdlbmVyYWwKKyAgICAgICAgZGlyZWN0b3J5IGZvciB1cGxv
YWRpbmcgY3Jhc2ggbG9ncy4gTm90ZSB0aGF0IGNyYXNoIGxvZ3MgYXJlIG9ubHkgc3VwcG9ydGVk
IG9uIE1hYworICAgICAgICBhbmQgV2luZG93cy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYXBwbGUucHk6IFJlbW92ZSB1bm5lZWRlZCBDcmFzaExvZ3MgaW1wb3J0LgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC5wYXRoX3Rv
X2NyYXNoX2xvZ3MpOiBVbmxlc3MgcG9ydHMgZGVjbGFyZSBvdGhlcndpc2UsIGNyYXNoIGxvZ3Mg
YXJlIGFzc3VtZWQKKyAgICAgICAgdG8gYmUgaW4gdGhlIHJlc3VsdHMgZGlyZWN0b3J5LgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHk6CisgICAgICAgIChEYXJ3aW5Q
b3J0LnBhdGhfdG9fY3Jhc2hfbG9ncyk6IE1vdmVkIGZyb20gQ3Jhc2hMb2dzLl9sb2dfZGlyZWN0
b3J5X2Rhcndpbi4KKyAgICAgICAgKERhcndpblBvcnQuX2xvb2tfZm9yX2FsbF9jcmFzaF9sb2dz
X2luX2xvZ19kaXIpOiBVc2UgcG9ydCBzcGVjaWZpYyBjcmFzaCBsb2cgcGF0aC4KKyAgICAgICAg
KERhcndpblBvcnQuX2dldF9jcmFzaF9sb2cpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5OgorICAgICAgICAoRGFyd2luVGVzdC50ZXN0
X2NyYXNobG9nX3BhdGgpOiBUZXN0IHRoYXQgdGhlIERhcndpbiBwb3J0cyBhcmUgY29ycmVjdGx5
IGNhbGN1bGF0aW5nCisgICAgICAgIHRoZSBwYXRoIHRvIGNyYXNoIGxvZ3MuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHk6CisgICAgICAgIChJT1NEZXZpY2VQ
b3J0LnBhdGhfdG9fY3Jhc2hfbG9ncyk6IEN1cnJlbnRseSwgY3Jhc2ggbG9nIHJldHJpZXZhbCBp
cyB1bmRlZmluZWQgZm9yIGlPUy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9z
X2RldmljZV91bml0dGVzdC5weToKKyAgICAgICAgKElPU0RldmljZVRlc3QudGVzdF9jcmFzaGxv
Z19wYXRoKTogQ3VycmVudGx5LCBjcmFzaCBsb2cgcmV0cmlldmFsIGlzIHVuZGVmaW5lZCBmb3Ig
aU9TLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yLnB5OiBS
ZW1vdmUgdW5uZWVkZWQgQ3Jhc2hMb2dzIGltcG9ydC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3BvcnQvbWFjLnB5OiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
dGVzdC5weToKKyAgICAgICAgKFRlc3REcml2ZXIucnVuX3Rlc3QpOiBVc2UgcG9ydCBzcGVjaWZp
YyBjcmFzaCBsb2cgcGF0aCB3aGVuIHJldHJpZXZpbmcgY3Jhc2ggbG9ncy4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5OgorICAgICAgICAoV2luUG9ydC5fZ2V0X2NyYXNo
X2xvZyk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9x
dWVyaWVzLnB5OgorICAgICAgICAoZXhlY3V0ZSk6IENvbnN0cnVjdCBhIHBvcnQgb2JqZWN0IHNp
bmNlIHRoaXMgaXMgdGhlIG9iamVjdCB3aGljaCBvd25zIHRoZSBwYXRoIHRvIGNyYXNoIGxvZ3Mu
CisKIDIwMTctMDUtMTIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBHVEsrIHRlc3QgL3dlYmtpdDIvV2ViS2l0V2Vi
Vmlldy9jcmVhdGUtbmF2aWdhdGlvbi1kYXRhIGFmdGVyIHIyMTY2MTUuCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ3MucHkJKHJldmlz
aW9uIDIxNjYwMSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFz
aGxvZ3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDkgQEAgY2xhc3MgQ3Jhc2hMb2dz
KG9iamVjdCk6CiAgICAgR0xPQkFMX1BJRF9SRUdFWCA9IHJlLmNvbXBpbGUocidccytHbG9iYWxc
cytQSUQ6XHMrXFsoP1A8cGlkPlxkKylcXScpCiAgICAgRVhJVF9QUk9DRVNTX1BJRF9SRUdFWCA9
IHJlLmNvbXBpbGUocidFeGl0IHByb2Nlc3MgXGQrOig/UDxwaWQ+XHcrKSwgY29kZScpCiAKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcmVzdWx0c19kaXJlY3Rvcnk9Tm9uZSk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIGNyYXNoX2xvZ19kaXJlY3RvcnkpOgogICAgICAgICBz
ZWxmLl9ob3N0ID0gaG9zdAotICAgICAgICBzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSA9IHJlc3Vs
dHNfZGlyZWN0b3J5CisgICAgICAgIHNlbGYuX2NyYXNoX2xvZ19kaXJlY3RvcnkgPSBjcmFzaF9s
b2dfZGlyZWN0b3J5CiAKICAgICBkZWYgZmluZF9uZXdlc3RfbG9nKHNlbGYsIHByb2Nlc3NfbmFt
ZSwgcGlkPU5vbmUsIGluY2x1ZGVfZXJyb3JzPUZhbHNlLCBuZXdlcl90aGFuPU5vbmUpOgogICAg
ICAgICBpZiBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX21hYygpOgpAQCAtNTMsMjEgKzUzLDExIEBA
IGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRf
YWxsX2xvZ3NfZGFyd2luKGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKQogICAgICAgICByZXR1
cm4gTm9uZQogCi0gICAgZGVmIF9sb2dfZGlyZWN0b3J5X2RhcndpbihzZWxmKToKLSAgICAgICAg
bG9nX2RpcmVjdG9yeSA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5leHBhbmR1c2VyKCJ+IikKLSAg
ICAgICAgbG9nX2RpcmVjdG9yeSA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5qb2luKGxvZ19kaXJl
Y3RvcnksICJMaWJyYXJ5IiwgIkxvZ3MiKQotICAgICAgICBpZiBzZWxmLl9ob3N0LmZpbGVzeXN0
ZW0uZXhpc3RzKHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5qb2luKGxvZ19kaXJlY3RvcnksICJEaWFn
bm9zdGljUmVwb3J0cyIpKToKLSAgICAgICAgICAgIGxvZ19kaXJlY3RvcnkgPSBzZWxmLl9ob3N0
LmZpbGVzeXN0ZW0uam9pbihsb2dfZGlyZWN0b3J5LCAiRGlhZ25vc3RpY1JlcG9ydHMiKQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgbG9nX2RpcmVjdG9yeSA9IHNlbGYuX2hvc3QuZmlsZXN5
c3RlbS5qb2luKGxvZ19kaXJlY3RvcnksICJDcmFzaFJlcG9ydGVyIikKLSAgICAgICAgcmV0dXJu
IGxvZ19kaXJlY3RvcnkKLQogICAgIGRlZiBfZmluZF9uZXdlc3RfbG9nX2RhcndpbihzZWxmLCBw
cm9jZXNzX25hbWUsIHBpZCwgaW5jbHVkZV9lcnJvcnMsIG5ld2VyX3RoYW4pOgogICAgICAgICBk
ZWYgaXNfY3Jhc2hfbG9nKGZzLCBkaXJwYXRoLCBiYXNlbmFtZSk6CiAgICAgICAgICAgICByZXR1
cm4gYmFzZW5hbWUuc3RhcnRzd2l0aChwcm9jZXNzX25hbWUgKyAiXyIpIGFuZCBiYXNlbmFtZS5l
bmRzd2l0aCgiLmNyYXNoIikKIAotICAgICAgICBsb2dfZGlyZWN0b3J5ID0gc2VsZi5fbG9nX2Rp
cmVjdG9yeV9kYXJ3aW4oKQotICAgICAgICBsb2dzID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLmZp
bGVzX3VuZGVyKGxvZ19kaXJlY3RvcnksIGZpbGVfZmlsdGVyPWlzX2NyYXNoX2xvZykKKyAgICAg
ICAgbG9ncyA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5maWxlc191bmRlcihzZWxmLl9jcmFzaF9s
b2dfZGlyZWN0b3J5LCBmaWxlX2ZpbHRlcj1pc19jcmFzaF9sb2cpCiAgICAgICAgIGZpcnN0X2xp
bmVfcmVnZXggPSByZS5jb21waWxlKHInXlByb2Nlc3M6XHMrKD9QPHByb2Nlc3NfbmFtZT4uKikg
XFsoP1A8cGlkPlxkKylcXSQnKQogICAgICAgICBlcnJvcnMgPSAnJwogICAgICAgICBmb3IgcGF0
aCBpbiByZXZlcnNlZChzb3J0ZWQobG9ncykpOgpAQCAtOTIsNyArODIsNyBAQCBjbGFzcyBDcmFz
aExvZ3Mob2JqZWN0KToKICAgICAgICAgZGVmIGlzX2NyYXNoX2xvZyhmcywgZGlycGF0aCwgYmFz
ZW5hbWUpOgogICAgICAgICAgICAgcmV0dXJuIGJhc2VuYW1lLnN0YXJ0c3dpdGgoIkNyYXNoTG9n
IikKIAotICAgICAgICBsb2dzID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLmZpbGVzX3VuZGVyKHNl
bGYuX3Jlc3VsdHNfZGlyZWN0b3J5LCBmaWxlX2ZpbHRlcj1pc19jcmFzaF9sb2cpCisgICAgICAg
IGxvZ3MgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIoc2VsZi5fY3Jhc2hfbG9n
X2RpcmVjdG9yeSwgZmlsZV9maWx0ZXI9aXNfY3Jhc2hfbG9nKQogICAgICAgICBlcnJvcnMgPSB1
JycKICAgICAgICAgZm9yIHBhdGggaW4gcmV2ZXJzZWQoc29ydGVkKGxvZ3MpKToKICAgICAgICAg
ICAgIHRyeToKQEAgLTEyOSw4ICsxMTksNyBAQCBjbGFzcyBDcmFzaExvZ3Mob2JqZWN0KToKICAg
ICAgICAgZGVmIGlzX2NyYXNoX2xvZyhmcywgZGlycGF0aCwgYmFzZW5hbWUpOgogICAgICAgICAg
ICAgcmV0dXJuIGJhc2VuYW1lLmVuZHN3aXRoKCIuY3Jhc2giKQogCi0gICAgICAgIGxvZ19kaXJl
Y3RvcnkgPSBzZWxmLl9sb2dfZGlyZWN0b3J5X2RhcndpbigpCi0gICAgICAgIGxvZ3MgPSBzZWxm
Ll9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIobG9nX2RpcmVjdG9yeSwgZmlsZV9maWx0ZXI9
aXNfY3Jhc2hfbG9nKQorICAgICAgICBsb2dzID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLmZpbGVz
X3VuZGVyKHNlbGYuX2NyYXNoX2xvZ19kaXJlY3RvcnksIGZpbGVfZmlsdGVyPWlzX2NyYXNoX2xv
ZykKICAgICAgICAgZmlyc3RfbGluZV9yZWdleCA9IHJlLmNvbXBpbGUocideUHJvY2Vzczpccyso
P1A8cHJvY2Vzc19uYW1lPi4qKSBcWyg/UDxwaWQ+XGQrKVxdJCcpCiAgICAgICAgIGVycm9ycyA9
ICcnCiAgICAgICAgIGNyYXNoX2xvZ3MgPSB7fQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzX3VuaXR0ZXN0LnB5CShy
ZXZpc2lvbiAyMTY2MDEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
Y3Jhc2hsb2dzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNiArMjM1LDkgQEAg
cXVpdDoKIAogCiBjbGFzcyBDcmFzaExvZ3NUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBk
ZWYgY3Jhc2hfbG9nX3BhdGgoc2VsZik6CisgICAgICAgIHJldHVybiAnL1VzZXJzL21vY2svTGli
cmFyeS9Mb2dzL0RpYWdub3N0aWNSZXBvcnRzJworCiAgICAgZGVmIGNyZWF0ZV9jcmFzaF9sb2dz
X2RhcndpbihzZWxmKToKICAgICAgICAgaWYgbm90IFN5c3RlbUhvc3QoKS5wbGF0Zm9ybS5pc19t
YWMoKToKICAgICAgICAgICAgIHJldHVybgpAQCAtMjUyLDcgKzI1NSw3IEBAIGNsYXNzIENyYXNo
TG9nc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmZpbGVzWycvVXNlcnMv
bW9jay9MaWJyYXJ5L0xvZ3MvRGlhZ25vc3RpY1JlcG9ydHMvRHVtcFJlbmRlclRyZWVfMjAxMS0w
Ni0xMy0xNTA3MjJfcXVhZHplbi5jcmFzaCddID0gc2VsZi5vdGhlcl9wcm9jZXNzX21vY2tfY3Jh
c2hfcmVwb3J0CiAgICAgICAgIHNlbGYuZmlsZXNbJy9Vc2Vycy9tb2NrL0xpYnJhcnkvTG9ncy9E
aWFnbm9zdGljUmVwb3J0cy9EdW1wUmVuZGVyVHJlZV8yMDExLTA2LTEzLTE1MDcyM19xdWFkemVu
LmNyYXNoJ10gPSBzZWxmLm1pc2Zvcm1hdHRlZF9tb2NrX2NyYXNoX3JlcG9ydAogICAgICAgICBz
ZWxmLmZpbGVzeXN0ZW0gPSBNb2NrRmlsZVN5c3RlbShzZWxmLmZpbGVzKQotICAgICAgICBjcmFz
aF9sb2dzID0gQ3Jhc2hMb2dzKE1vY2tTeXN0ZW1Ib3N0KGZpbGVzeXN0ZW09c2VsZi5maWxlc3lz
dGVtKSkKKyAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhNb2NrU3lzdGVtSG9zdChmaWxl
c3lzdGVtPXNlbGYuZmlsZXN5c3RlbSksIHNlbGYuY3Jhc2hfbG9nX3BhdGgoKSkKICAgICAgICAg
bG9ncyA9IHNlbGYuZmlsZXN5c3RlbS5maWxlc191bmRlcignL1VzZXJzL21vY2svTGlicmFyeS9M
b2dzL0RpYWdub3N0aWNSZXBvcnRzLycpCiAgICAgICAgIGZvciBwYXRoIGluIHJldmVyc2VkKHNv
cnRlZChsb2dzKSk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocGF0aCBpbiBzZWxmLmZp
bGVzLmtleXMoKSkKQEAgLTI5Nyw3ICszMDAsNyBAQCBjbGFzcyBDcmFzaExvZ3NUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRJbignSU9FcnJvcjogTm8gc3VjaCBm
aWxlIG9yIGRpcmVjdG9yeScsIGxvZykKIAogICAgICAgICBzZWxmLmZpbGVzeXN0ZW0gPSBNb2Nr
RmlsZVN5c3RlbShzZWxmLmZpbGVzKQotICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKE1v
Y2tTeXN0ZW1Ib3N0KGZpbGVzeXN0ZW09c2VsZi5maWxlc3lzdGVtKSkKKyAgICAgICAgY3Jhc2hf
bG9ncyA9IENyYXNoTG9ncyhNb2NrU3lzdGVtSG9zdChmaWxlc3lzdGVtPXNlbGYuZmlsZXN5c3Rl
bSksIHNlbGYuY3Jhc2hfbG9nX3BhdGgoKSkKICAgICAgICAgc2VsZi5maWxlc3lzdGVtLm10aW1l
ID0gYmFkX210aW1lCiAgICAgICAgIGxvZyA9IGNyYXNoX2xvZ3MuZmluZF9uZXdlc3RfbG9nKCJE
dW1wUmVuZGVyVHJlZSIsIG5ld2VyX3RoYW49MS4wLCBpbmNsdWRlX2Vycm9ycz1UcnVlKQogICAg
ICAgICBzZWxmLmFzc2VydEluKCdPU0Vycm9yOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Jywg
bG9nKQpAQCAtMzQ0LDcgKzM0Nyw3IEBAIGNsYXNzIENyYXNoTG9nc1Rlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgY3Jhc2hfcmVwb3J0ID0gbWFr
ZV9tb2NrX2NyYXNoX3JlcG9ydF9kYXJ3aW4oJ0R1bXBSZW5kZXJUcmVlJywgMjg1MjgpCi0gICAg
ICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3MoTW9ja1N5c3RlbUhvc3QoKSkKKyAgICAgICAgY3Jh
c2hfbG9ncyA9IENyYXNoTG9ncyhNb2NrU3lzdGVtSG9zdCgpLCBzZWxmLmNyYXNoX2xvZ19wYXRo
KCkpCiAgICAgICAgIGNyYXNoX3RpbWVzdGFtcCA9IGNyYXNoX2xvZ3MuZ2V0X3RpbWVzdGFtcF9m
cm9tX2xvZyhjcmFzaF9yZXBvcnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJzIwMTEtMTItMDcg
MTM6Mjc6MzQuODE2Jywgc3RyKGNyYXNoX3RpbWVzdGFtcCkpCiAKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5CShyZXZpc2lvbiAyMTY2MDEpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVn
cmF0aW9udGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNTMyLDI0ICs1MzIsMjQgQEAgY2xhc3Mg
UnVuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgU3RyZWFtVAogCiAgICAgZGVmIHRlc3RfY3Jhc2hf
bG9nKHNlbGYpOgogICAgICAgICAjIEZJWE1FOiBOZWVkIHRvIHJld3JpdGUgdGhlc2UgdGVzdHMg
dG8gbm90IGJlIG1hYy1zcGVjaWZpYywgb3IgbW92ZSB0aGVtIGVsc2V3aGVyZS4KLSAgICAgICAg
IyBDdXJyZW50bHkgQ3Jhc2hMb2cgdXBsb2FkaW5nIG9ubHkgd29ya3Mgb24gRGFyd2luLgotICAg
ICAgICBpZiBub3Qgc2VsZi5fcGxhdGZvcm0uaXNfbWFjKCk6CisgICAgICAgICMgQ3VycmVudGx5
IENyYXNoTG9nIHVwbG9hZGluZyBvbmx5IHdvcmtzIG9uIERhcndpbiBhbmQgV2luZG93cy4KKyAg
ICAgICAgaWYgbm90IHNlbGYuX3BsYXRmb3JtLmlzX21hYygpIG9yIHNlbGYuX3BsYXRmb3JtLmlz
X3dpbigpOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIG1vY2tfY3Jhc2hfcmVwb3J0ID0g
bWFrZV9tb2NrX2NyYXNoX3JlcG9ydF9kYXJ3aW4oJ0R1bXBSZW5kZXJUcmVlJywgMTIzNDUpCiAg
ICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCi0gICAgICAgIGhvc3QuZmlsZXN5c3RlbS53cml0ZV90
ZXh0X2ZpbGUoJy9Vc2Vycy9tb2NrL0xpYnJhcnkvTG9ncy9EaWFnbm9zdGljUmVwb3J0cy9EdW1w
UmVuZGVyVHJlZV8yMDExLTA2LTEzLTE1MDcxOV9xdWFkemVuLmNyYXNoJywgbW9ja19jcmFzaF9y
ZXBvcnQpCisgICAgICAgIGhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy90bXAvbGF5
b3V0LXRlc3QtcmVzdWx0cy9EdW1wUmVuZGVyVHJlZV8yMDExLTA2LTEzLTE1MDcxOV9xdWFkemVu
LmNyYXNoJywgbW9ja19jcmFzaF9yZXBvcnQpCiAgICAgICAgIF8sIHJlZ3VsYXJfb3V0cHV0LCBf
ID0gbG9nZ2luZ19ydW4oWydmYWlsdXJlcy91bmV4cGVjdGVkL2NyYXNoLXdpdGgtc3RkZXJyLmh0
bWwnLCAnLS1kdW1wLXJlbmRlci10cmVlJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGhvc3Q9aG9z
dCkKICAgICAgICAgZXhwZWN0ZWRfY3Jhc2hfbG9nID0gbW9ja19jcmFzaF9yZXBvcnQKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChob3N0LmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUoJy90bXAv
bGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy91bmV4cGVjdGVkL2NyYXNoLXdpdGgtc3RkZXJy
LWNyYXNoLWxvZy50eHQnKSwgZXhwZWN0ZWRfY3Jhc2hfbG9nKQogCiAgICAgZGVmIHRlc3Rfd2Vi
X3Byb2Nlc3NfY3Jhc2hfbG9nKHNlbGYpOgogICAgICAgICAjIEZJWE1FOiBOZWVkIHRvIHJld3Jp
dGUgdGhlc2UgdGVzdHMgdG8gbm90IGJlIG1hYy1zcGVjaWZpYywgb3IgbW92ZSB0aGVtIGVsc2V3
aGVyZS4KLSAgICAgICAgIyBDdXJyZW50bHkgQ3Jhc2hMb2cgdXBsb2FkaW5nIG9ubHkgd29ya3Mg
b24gRGFyd2luLgotICAgICAgICBpZiBub3Qgc2VsZi5fcGxhdGZvcm0uaXNfbWFjKCk6CisgICAg
ICAgICMgQ3VycmVudGx5IENyYXNoTG9nIHVwbG9hZGluZyBvbmx5IHdvcmtzIG9uIERhcndpbiBh
bmQgV2luZG93cy4KKyAgICAgICAgaWYgbm90IHNlbGYuX3BsYXRmb3JtLmlzX21hYygpIG9yIHNl
bGYuX3BsYXRmb3JtLmlzX3dpbigpOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIG1vY2tf
Y3Jhc2hfcmVwb3J0ID0gbWFrZV9tb2NrX2NyYXNoX3JlcG9ydF9kYXJ3aW4oJ1dlYlByb2Nlc3Mn
LCAxMjM0NSkKICAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKLSAgICAgICAgaG9zdC5maWxlc3lz
dGVtLndyaXRlX3RleHRfZmlsZSgnL1VzZXJzL21vY2svTGlicmFyeS9Mb2dzL0RpYWdub3N0aWNS
ZXBvcnRzL1dlYlByb2Nlc3NfMjAxMS0wNi0xMy0xNTA3MTlfcXVhZHplbi5jcmFzaCcsIG1vY2tf
Y3Jhc2hfcmVwb3J0KQorICAgICAgICBob3N0LmZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKCcv
dG1wL2xheW91dC10ZXN0LXJlc3VsdHMvV2ViUHJvY2Vzc18yMDExLTA2LTEzLTE1MDcxOV9xdWFk
emVuLmNyYXNoJywgbW9ja19jcmFzaF9yZXBvcnQpCiAgICAgICAgIGxvZ2dpbmdfcnVuKFsnZmFp
bHVyZXMvdW5leHBlY3RlZC93ZWItcHJvY2Vzcy1jcmFzaC13aXRoLXN0ZGVyci5odG1sJ10sIHRl
c3RzX2luY2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCho
b3N0LmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUoJy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9m
YWlsdXJlcy91bmV4cGVjdGVkL3dlYi1wcm9jZXNzLWNyYXNoLXdpdGgtc3RkZXJyLWNyYXNoLWxv
Zy50eHQnKSwgbW9ja19jcmFzaF9yZXBvcnQpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9hcHBsZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvYXBwbGUucHkJKHJldmlzaW9uIDIxNjYwMSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9hcHBsZS5weQkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogaW1wb3J0IGxv
Z2dpbmcKIGltcG9ydCBvcwogCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dz
IGltcG9ydCBDcmFzaExvZ3MKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUg
aW1wb3J0IFNjcmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5LnBvcnQuYmFzZSBpbXBvcnQgUG9ydAog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBv
cnQgVGVzdENvbmZpZ3VyYXRpb24KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9i
YXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5
CShyZXZpc2lvbiAyMTY2MDEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5w
eQkod29ya2luZyBjb3B5KQpAQCAtMTM0Nyw2ICsxMzQ3LDkgQEAgY2xhc3MgUG9ydChvYmplY3Qp
OgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBwb3J0J3MgZHJpdmVyIGltcGxlbWVudGF0aW9uLiIi
IgogICAgICAgICByZXR1cm4gZHJpdmVyLkRyaXZlcgogCisgICAgZGVmIHBhdGhfdG9fY3Jhc2hf
bG9ncyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKQorCiAg
ICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5l
d2VyX3RoYW4pOgogICAgICAgICBuYW1lX3N0ciA9IG5hbWUgb3IgJzx1bmtub3duIHByb2Nlc3Mg
bmFtZT4nCiAgICAgICAgIHBpZF9zdHIgPSBzdHIocGlkIG9yICc8dW5rbm93bj4nKQpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5CShyZXZpc2lvbiAyMTY2MDEpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC04
NSw2ICs4NSwxNSBAQCBjbGFzcyBEYXJ3aW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgIHNlbGYu
X2V4ZWN1dGl2ZS5wb3Blbihbc2VsZi5wYXRoX3RvX3NjcmlwdCgncnVuLXNhZmFyaScpXSArIHNl
bGYuX2FyZ3VtZW50c19mb3JfY29uZmlndXJhdGlvbigpICsgWyctLW5vLXNhdmVkLXN0YXRlJywg
Jy1OU09wZW4nLCByZXN1bHRzX2ZpbGVuYW1lXSwKICAgICAgICAgICAgIGN3ZD1zZWxmLndlYmtp
dF9iYXNlKCksIHN0ZG91dD1maWxlKG9zLmRldm51bGwpLCBzdGRlcnI9ZmlsZShvcy5kZXZudWxs
KSkKIAorICAgIEBtZW1vaXplZAorICAgIGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Moc2VsZik6Cisg
ICAgICAgIGxvZ19kaXJlY3RvcnkgPSBzZWxmLmhvc3QuZmlsZXN5c3RlbS5leHBhbmR1c2VyKCd+
JykKKyAgICAgICAgbG9nX2RpcmVjdG9yeSA9IHNlbGYuaG9zdC5maWxlc3lzdGVtLmpvaW4obG9n
X2RpcmVjdG9yeSwgJ0xpYnJhcnknLCAnTG9ncycpCisgICAgICAgIGlmIHNlbGYuaG9zdC5maWxl
c3lzdGVtLmV4aXN0cyhzZWxmLmhvc3QuZmlsZXN5c3RlbS5qb2luKGxvZ19kaXJlY3RvcnksICdE
aWFnbm9zdGljUmVwb3J0cycpKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmhvc3QuZmlsZXN5
c3RlbS5qb2luKGxvZ19kaXJlY3RvcnksICdEaWFnbm9zdGljUmVwb3J0cycpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5ob3N0LmZpbGVzeXN0ZW0uam9pbihsb2dfZGly
ZWN0b3J5LCAnQ3Jhc2hSZXBvcnRlcicpCisKICAgICBkZWYgX21lcmdlX2NyYXNoX2xvZ3Moc2Vs
ZiwgbG9ncywgbmV3X2xvZ3MsIGNyYXNoZWRfcHJvY2Vzc2VzKToKICAgICAgICAgZm9yIHRlc3Qs
IGNyYXNoX2xvZyBpbiBuZXdfbG9ncy5pdGVyaXRlbXMoKToKICAgICAgICAgICAgIHRyeToKQEAg
LTk4LDcgKzEwNyw3IEBAIGNsYXNzIERhcndpblBvcnQoQXBwbGVQb3J0KToKICAgICAgICAgcmV0
dXJuIGxvZ3MKIAogICAgIGRlZiBfbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2Rpcihz
ZWxmLCBuZXdlcl90aGFuKToKLSAgICAgICAgY3Jhc2hfbG9nID0gQ3Jhc2hMb2dzKHNlbGYuaG9z
dCkKKyAgICAgICAgY3Jhc2hfbG9nID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCwgc2VsZi5wYXRoX3Rv
X2NyYXNoX2xvZ3MoKSkKICAgICAgICAgcmV0dXJuIGNyYXNoX2xvZy5maW5kX2FsbF9sb2dzKGlu
Y2x1ZGVfZXJyb3JzPVRydWUsIG5ld2VyX3RoYW49bmV3ZXJfdGhhbikKIAogICAgIGRlZiBfZ2V0
X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0
aW1lX2ZuPU5vbmUsIHNsZWVwX2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlKToKQEAgLTEwOCw3
ICsxMTcsNyBAQCBjbGFzcyBEYXJ3aW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgIHRpbWVfZm4g
PSB0aW1lX2ZuIG9yIHRpbWUudGltZQogICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRp
bWUuc2xlZXAKICAgICAgICAgY3Jhc2hfbG9nID0gJycKLSAgICAgICAgY3Jhc2hfbG9ncyA9IENy
YXNoTG9ncyhzZWxmLmhvc3QpCisgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5o
b3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpKQogICAgICAgICBub3cgPSB0aW1lX2ZuKCkK
ICAgICAgICAgZGVhZGxpbmUgPSBub3cgKyA1ICogaW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRf
cHJvY2Vzc2VzJywgMSkpCiAgICAgICAgIHdoaWxlIG5vdCBjcmFzaF9sb2cgYW5kIG5vdyA8PSBk
ZWFkbGluZToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNh
c2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbl90
ZXN0Y2FzZS5weQkocmV2aXNpb24gMjE2NjAxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2Rhcndpbl90ZXN0Y2FzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQCBp
bXBvcnQgdGltZQogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBwb3J0X3Rlc3RjYXNlCiBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVy
ZQogZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucworZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0
ZW0KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW9jayBpbXBvcnQgTW9j
a0V4ZWN1dGl2ZSwgTW9ja0V4ZWN1dGl2ZTIsIE1vY2tQcm9jZXNzLCBTY3JpcHRFcnJvcgogZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3Rl
bUhvc3QKIApAQCAtODgsNiArODksMTQgQEAgY2xhc3MgRGFyd2luVGVzdChwb3J0X3Rlc3RjYXNl
LlBvcnRUZXN0QwogICAgICAgICBwb3J0LnN0b3BfaGVscGVyKCkKICAgICAgICAgb2MucmVzdG9y
ZV9vdXRwdXQoKQogCisgICAgZGVmIHRlc3RfY3Jhc2hsb2dfcGF0aChzZWxmKToKKyAgICAgICAg
cG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LnBh
dGhfdG9fY3Jhc2hfbG9ncygpLCAnL1VzZXJzL21vY2svTGlicmFyeS9Mb2dzL0NyYXNoUmVwb3J0
ZXInKQorCisgICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdChmaWxlc3lzdGVtPU1vY2tGaWxl
U3lzdGVtKGZpbGVzPVsnL1VzZXJzL21vY2svTGlicmFyeS9Mb2dzL0RpYWdub3N0aWNSZXBvcnRz
L2NyYXNobG9nLmNyYXNoJ10pKQorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoaG9zdCkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LnBhdGhfdG9fY3Jhc2hfbG9ncygpLCAnL1Vz
ZXJzL21vY2svTGlicmFyeS9Mb2dzL0RpYWdub3N0aWNSZXBvcnRzJykKKwogICAgIGRlZiB0ZXN0
X3NwaW5kdW1wKHNlbGYpOgogCiAgICAgICAgIGRlZiBsb2dnaW5nX3J1bl9jb21tYW5kKGFyZ3Mp
OgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkJKHJldmlz
aW9uIDIxNjYwMSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw5IEBAIGNsYXNzIElPU0RldmljZVBvcnQoSU9T
UG9ydCk6CiAgICAgICAgIHJldHVybiBwb3J0X25hbWUKIAogICAgICMgRklYTUU6IFRoZXNlIG5l
ZWQgZGV2aWNlIGltcGxlbWVudGF0aW9ucyA8cmRhcjovL3Byb2JsZW0vMzA0OTc5OTE+LgorICAg
IGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Moc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IKKwogICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBw
cm9jZXNzX3BpZCk6CiAgICAgICAgIHBhc3MKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2lvc19kZXZpY2VfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2VfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxNjYwMSkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlX3VuaXR0ZXN0LnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw5IEBAIGNsYXNzIElPU0RldmljZVRlc3QoaW9zX3Rl
c3RjYXNlLklPU1Rlc3QKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaW9zLWRldmljZScsIHNl
bGYubWFrZV9wb3J0KCkub3BlcmF0aW5nX3N5c3RlbSgpKQogCiAgICAgIyBGSVhNRTogVXBkYXRl
IHRlc3RzIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzMwNDk3OTkxPiBpcyBjb21wbGV0ZWQuCisgICAg
ZGVmIHRlc3RfY3Jhc2hsb2dfcGF0aChzZWxmKToKKyAgICAgICAgcGFzcworCiAgICAgZGVmIHRl
c3Rfc3BpbmR1bXAoc2VsZik6CiAgICAgICAgIHBhc3MKIApJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3IucHkJKHJldmlzaW9uIDIxNjYwMSkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw3ICszMiw2IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBt
ZW0KIGZyb20gd2Via2l0cHkucG9ydC5kZXZpY2UgaW1wb3J0IERldmljZQogZnJvbSB3ZWJraXRw
eS5wb3J0LmlvcyBpbXBvcnQgSU9TUG9ydAogZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3Ig
aW1wb3J0IFNpbXVsYXRvciwgUnVudGltZSwgRGV2aWNlVHlwZQotZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiAKIAogX2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKF9fbmFtZV9fKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21h
Yy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5CShy
ZXZpc2lvbiAyMTY2MDEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBAIGltcG9ydCBvcwogaW1wb3J0IHRpbWUKIGlt
cG9ydCByZQogCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCBD
cmFzaExvZ3MKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNj
cmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Qb3J0CiAK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC90ZXN0LnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC90ZXN0LnB5CShyZXZpc2lvbiAyMTY2MDEpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvdGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAt
NTc5LDcgKzU3OSw3IEBAIGNsYXNzIFRlc3REcml2ZXIoRHJpdmVyKToKIAogICAgICAgICBjcmFz
aF9sb2cgPSAnJwogICAgICAgICBpZiBjcmFzaGVkX3Byb2Nlc3NfbmFtZToKLSAgICAgICAgICAg
IGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5fcG9ydC5ob3N0KQorICAgICAgICAgICAgY3Jh
c2hfbG9ncyA9IENyYXNoTG9ncyhzZWxmLl9wb3J0Lmhvc3QsIHNlbGYuX3BvcnQucGF0aF90b19j
cmFzaF9sb2dzKCkpCiAgICAgICAgICAgICBjcmFzaF9sb2cgPSBjcmFzaF9sb2dzLmZpbmRfbmV3
ZXN0X2xvZyhjcmFzaGVkX3Byb2Nlc3NfbmFtZSwgTm9uZSkgb3IgJycKIAogICAgICAgICBpZiBz
dG9wX3doZW5fZG9uZToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQkocmV2aXNp
b24gMjE2NjAxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMzc3LDcgKzM3Nyw3IEBAIGNsYXNzIFdpblBvcnQoQXBwbGVQb3J0KToKICAg
ICAgICAgdGltZV9mbiA9IHRpbWVfZm4gb3IgdGltZS50aW1lCiAgICAgICAgIHNsZWVwX2ZuID0g
c2xlZXBfZm4gb3IgdGltZS5zbGVlcAogICAgICAgICBjcmFzaF9sb2cgPSAnJwotICAgICAgICBj
cmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCwgc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSgp
KQorICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCwgc2VsZi5wYXRoX3Rv
X2NyYXNoX2xvZ3MoKSkKICAgICAgICAgbm93ID0gdGltZV9mbigpCiAgICAgICAgICMgRklYTUU6
IGRlbGV0ZSB0aGlzIGFmdGVyIHdlJ3JlIHN1cmUgdGhpcyBjb2RlIGlzIHdvcmtpbmcgLi4uCiAg
ICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcgZm9yIGNyYXNoIGxvZyBmb3IgJXM6JXMnICUgKG5h
bWUsIHN0cihwaWQpKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9xdWVyaWVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9xdWVyaWVzLnB5CShyZXZpc2lvbiAyMTY2MDEpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQkod29ya2luZyBjb3B5KQpAQCAtNDMwLDcg
KzQzMCw4IEBAIGFuZCBQSUQgYW5kIHByaW50cyBpdCB0byBzdGRvdXQuIiIiCiAgICAgYXJndW1l
bnRfbmFtZXMgPSAiUFJPQ0VTU19OQU1FIFtQSURdIgogCiAgICAgZGVmIGV4ZWN1dGUoc2VsZiwg
b3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3ModG9v
bCkKKyAgICAgICAgZGVmYXVsdF9wb3J0ID0gdG9vbC5wb3J0X2ZhY3RvcnkuZ2V0KCkKKyAgICAg
ICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyh0b29sLCBkZWZhdWx0X3BvcnQucGF0aF90b19jcmFz
aF9sb2dzKCkpCiAgICAgICAgIHBpZCA9IE5vbmUKICAgICAgICAgaWYgbGVuKGFyZ3MpID4gMToK
ICAgICAgICAgICAgIHBpZCA9IGludChhcmdzWzFdKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309924</attachid>
            <date>2017-05-12 12:10:18 -0700</date>
            <delta_ts>2017-05-12 12:52:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172033-20170512121018.patch</filename>
            <type>text/plain</type>
            <size>19703</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNjc3MikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDUyIEBACisyMDE3LTA1LTEyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUGFzcyBkaXJlY3Rvcnkgd2l0aCBjcmFzaCBsb2dzIGlu
dG8gQ3Jhc2hMb2dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzIwMzMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyMTU3NjE2PgorCisgICAgICAg
IFJldmlld2VkIGJ5IERhbmllbCBCYXRlcy4KKworICAgICAgICBSZWZhY3RvciBDcmFzaExvZ3Mg
YW5kIHRoZSBjYWxsZXJzIG9mIENyYXNoTG9ncyBzbyB0aGF0IHRoZSBwb3J0IG9iamVjdCBvd25z
CisgICAgICAgIHRoZSBsb2NhdGlvbiBvZiBjcmFzaCBsb2dzLgorCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5weToKKyAgICAgICAgKENyYXNoTG9n
cy5fX2luaXRfXyk6IFBhc3MgbWFuZGF0b3J5IGNyYXNoX2xvZ19kaXJlY3Rvcnkgd2hlbiBjb25z
dHJ1Y3RpbmcuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfbmV3ZXN0X2xvZ19kYXJ3aW4pOiBV
c2Ugc2VsZi5fY3Jhc2hfbG9nX2RpcmVjdG9yeSBpbnN0ZWFkIG9mCisgICAgICAgIGdlbmVyYXRp
bmcgb25lLgorICAgICAgICAoQ3Jhc2hMb2dzLl9maW5kX25ld2VzdF9sb2dfd2luKTogVXNlIHNl
bGYuX2NyYXNoX2xvZ19kaXJlY3RvcnkgaW5zdGVhZCBvZgorICAgICAgICBzZWxmLl9yZXN1bHRz
X2RpcmVjdG9yeS4KKyAgICAgICAgKENyYXNoTG9ncy5fZmluZF9hbGxfbG9nc19kYXJ3aW4pOiBV
c2Ugc2VsZi5fY3Jhc2hfbG9nX2RpcmVjdG9yeSBpbnN0ZWFkIG9mCisgICAgICAgIGdlbmVyYXRp
bmcgb25lLgorICAgICAgICAoQ3Jhc2hMb2dzLl9sb2dfZGlyZWN0b3J5X2Rhcndpbik6IE1vdmVk
IHRvIHBvcnQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNo
bG9nc191bml0dGVzdC5weTogVXBkYXRlIHRlc3RzIHNpbmNlIHRoZSBwYXRoCisgICAgICAgIHRv
IHRoZSBjcmFzaCBsb2cgaXMgbm8gbG9uZ2VyIG93bmVkIGJ5IENyYXNoTG9ncy4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0
aW9udGVzdC5weTogVXNlIHRoZSBnZW5lcmFsCisgICAgICAgIGRpcmVjdG9yeSBmb3IgdXBsb2Fk
aW5nIGNyYXNoIGxvZ3MuIE5vdGUgdGhhdCBjcmFzaCBsb2dzIGFyZSBvbmx5IHN1cHBvcnRlZCBv
biBNYWMKKyAgICAgICAgYW5kIFdpbmRvd3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9w
b3J0L2FwcGxlLnB5OiBSZW1vdmUgdW5uZWVkZWQgQ3Jhc2hMb2dzIGltcG9ydC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQucGF0aF90b19j
cmFzaF9sb2dzKTogVW5sZXNzIHBvcnRzIGRlY2xhcmUgb3RoZXJ3aXNlLCBjcmFzaCBsb2dzIGFy
ZSBhc3N1bWVkCisgICAgICAgIHRvIGJlIGluIHRoZSByZXN1bHRzIGRpcmVjdG9yeS4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9y
dC5wYXRoX3RvX2NyYXNoX2xvZ3MpOiBNb3ZlZCBmcm9tIENyYXNoTG9ncy5fbG9nX2RpcmVjdG9y
eV9kYXJ3aW4uCisgICAgICAgIChEYXJ3aW5Qb3J0Ll9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9nc19p
bl9sb2dfZGlyKTogVXNlIHBvcnQgc3BlY2lmaWMgY3Jhc2ggbG9nIHBhdGguCisgICAgICAgIChE
YXJ3aW5Qb3J0Ll9nZXRfY3Jhc2hfbG9nKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2Rhcndpbl90ZXN0Y2FzZS5weToKKyAgICAgICAgKERhcndpblRlc3QudGVzdF9j
cmFzaGxvZ19wYXRoKTogVGVzdCB0aGF0IHRoZSBEYXJ3aW4gcG9ydHMgYXJlIGNvcnJlY3RseSBj
YWxjdWxhdGluZworICAgICAgICB0aGUgcGF0aCB0byBjcmFzaCBsb2dzLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5OgorICAgICAgICAoSU9TRGV2aWNlUG9y
dC5wYXRoX3RvX2NyYXNoX2xvZ3MpOiBDdXJyZW50bHksIGNyYXNoIGxvZyByZXRyaWV2YWwgaXMg
dW5kZWZpbmVkIGZvciBpT1MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19k
ZXZpY2VfdW5pdHRlc3QucHk6CisgICAgICAgIChJT1NEZXZpY2VUZXN0LnRlc3RfY3Jhc2hsb2df
cGF0aCk6IEN1cnJlbnRseSwgY3Jhc2ggbG9nIHJldHJpZXZhbCBpcyB1bmRlZmluZWQgZm9yIGlP
Uy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvci5weTogUmVt
b3ZlIHVubmVlZGVkIENyYXNoTG9ncyBpbXBvcnQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9wb3J0L21hYy5weTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3Rl
c3QucHk6CisgICAgICAgIChUZXN0RHJpdmVyLnJ1bl90ZXN0KTogVXNlIHBvcnQgc3BlY2lmaWMg
Y3Jhc2ggbG9nIHBhdGggd2hlbiByZXRyaWV2aW5nIGNyYXNoIGxvZ3MuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3dpbi5weToKKyAgICAgICAgKFdpblBvcnQuX2dldF9jcmFzaF9s
b2cpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVl
cmllcy5weToKKyAgICAgICAgKGV4ZWN1dGUpOiBDb25zdHJ1Y3QgYSBwb3J0IG9iamVjdCBzaW5j
ZSB0aGlzIGlzIHRoZSBvYmplY3Qgd2hpY2ggb3ducyB0aGUgcGF0aCB0byBjcmFzaCBsb2dzLgor
CiAyMDE3LTA1LTEyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLiBGaXggR1RLKyB0ZXN0IC93ZWJraXQyL1dlYktpdFdlYlZp
ZXcvY3JlYXRlLW5hdmlnYXRpb24tZGF0YSBhZnRlciByMjE2NjE1LgpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzLnB5CShyZXZpc2lv
biAyMTY3NzIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hs
b2dzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw5ICszNyw5IEBAIGNsYXNzIENyYXNoTG9ncyhv
YmplY3QpOgogICAgIEdMT0JBTF9QSURfUkVHRVggPSByZS5jb21waWxlKHInXHMrR2xvYmFsXHMr
UElEOlxzK1xbKD9QPHBpZD5cZCspXF0nKQogICAgIEVYSVRfUFJPQ0VTU19QSURfUkVHRVggPSBy
ZS5jb21waWxlKHInRXhpdCBwcm9jZXNzIFxkKzooP1A8cGlkPlx3KyksIGNvZGUnKQogCi0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHJlc3VsdHNfZGlyZWN0b3J5PU5vbmUpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBob3N0LCBjcmFzaF9sb2dfZGlyZWN0b3J5KToKICAgICAgICAgc2Vs
Zi5faG9zdCA9IGhvc3QKLSAgICAgICAgc2VsZi5fcmVzdWx0c19kaXJlY3RvcnkgPSByZXN1bHRz
X2RpcmVjdG9yeQorICAgICAgICBzZWxmLl9jcmFzaF9sb2dfZGlyZWN0b3J5ID0gY3Jhc2hfbG9n
X2RpcmVjdG9yeQogCiAgICAgZGVmIGZpbmRfbmV3ZXN0X2xvZyhzZWxmLCBwcm9jZXNzX25hbWUs
IHBpZD1Ob25lLCBpbmNsdWRlX2Vycm9ycz1GYWxzZSwgbmV3ZXJfdGhhbj1Ob25lKToKICAgICAg
ICAgaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19tYWMoKToKQEAgLTUzLDIxICs1MywxMSBAQCBj
bGFzcyBDcmFzaExvZ3Mob2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9maW5kX2Fs
bF9sb2dzX2RhcndpbihpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbikKICAgICAgICAgcmV0dXJu
IE5vbmUKIAotICAgIGRlZiBfbG9nX2RpcmVjdG9yeV9kYXJ3aW4oc2VsZik6Ci0gICAgICAgIGxv
Z19kaXJlY3RvcnkgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uZXhwYW5kdXNlcigifiIpCi0gICAg
ICAgIGxvZ19kaXJlY3RvcnkgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uam9pbihsb2dfZGlyZWN0
b3J5LCAiTGlicmFyeSIsICJMb2dzIikKLSAgICAgICAgaWYgc2VsZi5faG9zdC5maWxlc3lzdGVt
LmV4aXN0cyhzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uam9pbihsb2dfZGlyZWN0b3J5LCAiRGlhZ25v
c3RpY1JlcG9ydHMiKSk6Ci0gICAgICAgICAgICBsb2dfZGlyZWN0b3J5ID0gc2VsZi5faG9zdC5m
aWxlc3lzdGVtLmpvaW4obG9nX2RpcmVjdG9yeSwgIkRpYWdub3N0aWNSZXBvcnRzIikKLSAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgIGxvZ19kaXJlY3RvcnkgPSBzZWxmLl9ob3N0LmZpbGVzeXN0
ZW0uam9pbihsb2dfZGlyZWN0b3J5LCAiQ3Jhc2hSZXBvcnRlciIpCi0gICAgICAgIHJldHVybiBs
b2dfZGlyZWN0b3J5Ci0KICAgICBkZWYgX2ZpbmRfbmV3ZXN0X2xvZ19kYXJ3aW4oc2VsZiwgcHJv
Y2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKToKICAgICAgICAgZGVm
IGlzX2NyYXNoX2xvZyhmcywgZGlycGF0aCwgYmFzZW5hbWUpOgogICAgICAgICAgICAgcmV0dXJu
IGJhc2VuYW1lLnN0YXJ0c3dpdGgocHJvY2Vzc19uYW1lICsgIl8iKSBhbmQgYmFzZW5hbWUuZW5k
c3dpdGgoIi5jcmFzaCIpCiAKLSAgICAgICAgbG9nX2RpcmVjdG9yeSA9IHNlbGYuX2xvZ19kaXJl
Y3RvcnlfZGFyd2luKCkKLSAgICAgICAgbG9ncyA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5maWxl
c191bmRlcihsb2dfZGlyZWN0b3J5LCBmaWxlX2ZpbHRlcj1pc19jcmFzaF9sb2cpCisgICAgICAg
IGxvZ3MgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIoc2VsZi5fY3Jhc2hfbG9n
X2RpcmVjdG9yeSwgZmlsZV9maWx0ZXI9aXNfY3Jhc2hfbG9nKQogICAgICAgICBmaXJzdF9saW5l
X3JlZ2V4ID0gcmUuY29tcGlsZShyJ15Qcm9jZXNzOlxzKyg/UDxwcm9jZXNzX25hbWU+LiopIFxb
KD9QPHBpZD5cZCspXF0kJykKICAgICAgICAgZXJyb3JzID0gJycKICAgICAgICAgZm9yIHBhdGgg
aW4gcmV2ZXJzZWQoc29ydGVkKGxvZ3MpKToKQEAgLTkyLDcgKzgyLDcgQEAgY2xhc3MgQ3Jhc2hM
b2dzKG9iamVjdCk6CiAgICAgICAgIGRlZiBpc19jcmFzaF9sb2coZnMsIGRpcnBhdGgsIGJhc2Vu
YW1lKToKICAgICAgICAgICAgIHJldHVybiBiYXNlbmFtZS5zdGFydHN3aXRoKCJDcmFzaExvZyIp
CiAKLSAgICAgICAgbG9ncyA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5maWxlc191bmRlcihzZWxm
Ll9yZXN1bHRzX2RpcmVjdG9yeSwgZmlsZV9maWx0ZXI9aXNfY3Jhc2hfbG9nKQorICAgICAgICBs
b2dzID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLmZpbGVzX3VuZGVyKHNlbGYuX2NyYXNoX2xvZ19k
aXJlY3RvcnksIGZpbGVfZmlsdGVyPWlzX2NyYXNoX2xvZykKICAgICAgICAgZXJyb3JzID0gdScn
CiAgICAgICAgIGZvciBwYXRoIGluIHJldmVyc2VkKHNvcnRlZChsb2dzKSk6CiAgICAgICAgICAg
ICB0cnk6CkBAIC0xMjksOCArMTE5LDcgQEAgY2xhc3MgQ3Jhc2hMb2dzKG9iamVjdCk6CiAgICAg
ICAgIGRlZiBpc19jcmFzaF9sb2coZnMsIGRpcnBhdGgsIGJhc2VuYW1lKToKICAgICAgICAgICAg
IHJldHVybiBiYXNlbmFtZS5lbmRzd2l0aCgiLmNyYXNoIikKIAotICAgICAgICBsb2dfZGlyZWN0
b3J5ID0gc2VsZi5fbG9nX2RpcmVjdG9yeV9kYXJ3aW4oKQotICAgICAgICBsb2dzID0gc2VsZi5f
aG9zdC5maWxlc3lzdGVtLmZpbGVzX3VuZGVyKGxvZ19kaXJlY3RvcnksIGZpbGVfZmlsdGVyPWlz
X2NyYXNoX2xvZykKKyAgICAgICAgbG9ncyA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5maWxlc191
bmRlcihzZWxmLl9jcmFzaF9sb2dfZGlyZWN0b3J5LCBmaWxlX2ZpbHRlcj1pc19jcmFzaF9sb2cp
CiAgICAgICAgIGZpcnN0X2xpbmVfcmVnZXggPSByZS5jb21waWxlKHInXlByb2Nlc3M6XHMrKD9Q
PHByb2Nlc3NfbmFtZT4uKikgXFsoP1A8cGlkPlxkKylcXSQnKQogICAgICAgICBlcnJvcnMgPSAn
JwogICAgICAgICBjcmFzaF9sb2dzID0ge30KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9jcmFzaGxvZ3NfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5weQkocmV2
aXNpb24gMjE2NzcyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2Ny
YXNobG9nc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjM1LDYgKzIzNSw4IEBAIHF1
aXQ6CiAKIAogY2xhc3MgQ3Jhc2hMb2dzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgREFS
V0lOX01PQ0tfQ1JBU0hfRElSRUNUT1JZID0gJy9Vc2Vycy9tb2NrL0xpYnJhcnkvTG9ncy9EaWFn
bm9zdGljUmVwb3J0cycKKwogICAgIGRlZiBjcmVhdGVfY3Jhc2hfbG9nc19kYXJ3aW4oc2VsZik6
CiAgICAgICAgIGlmIG5vdCBTeXN0ZW1Ib3N0KCkucGxhdGZvcm0uaXNfbWFjKCk6CiAgICAgICAg
ICAgICByZXR1cm4KQEAgLTI1Miw3ICsyNTQsNyBAQCBjbGFzcyBDcmFzaExvZ3NUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5maWxlc1snL1VzZXJzL21vY2svTGlicmFyeS9M
b2dzL0RpYWdub3N0aWNSZXBvcnRzL0R1bXBSZW5kZXJUcmVlXzIwMTEtMDYtMTMtMTUwNzIyX3F1
YWR6ZW4uY3Jhc2gnXSA9IHNlbGYub3RoZXJfcHJvY2Vzc19tb2NrX2NyYXNoX3JlcG9ydAogICAg
ICAgICBzZWxmLmZpbGVzWycvVXNlcnMvbW9jay9MaWJyYXJ5L0xvZ3MvRGlhZ25vc3RpY1JlcG9y
dHMvRHVtcFJlbmRlclRyZWVfMjAxMS0wNi0xMy0xNTA3MjNfcXVhZHplbi5jcmFzaCddID0gc2Vs
Zi5taXNmb3JtYXR0ZWRfbW9ja19jcmFzaF9yZXBvcnQKICAgICAgICAgc2VsZi5maWxlc3lzdGVt
ID0gTW9ja0ZpbGVTeXN0ZW0oc2VsZi5maWxlcykKLSAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNo
TG9ncyhNb2NrU3lzdGVtSG9zdChmaWxlc3lzdGVtPXNlbGYuZmlsZXN5c3RlbSkpCisgICAgICAg
IGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3MoTW9ja1N5c3RlbUhvc3QoZmlsZXN5c3RlbT1zZWxmLmZp
bGVzeXN0ZW0pLCBDcmFzaExvZ3NUZXN0LkRBUldJTl9NT0NLX0NSQVNIX0RJUkVDVE9SWSkKICAg
ICAgICAgbG9ncyA9IHNlbGYuZmlsZXN5c3RlbS5maWxlc191bmRlcignL1VzZXJzL21vY2svTGli
cmFyeS9Mb2dzL0RpYWdub3N0aWNSZXBvcnRzLycpCiAgICAgICAgIGZvciBwYXRoIGluIHJldmVy
c2VkKHNvcnRlZChsb2dzKSk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocGF0aCBpbiBz
ZWxmLmZpbGVzLmtleXMoKSkKQEAgLTI5Nyw3ICsyOTksNyBAQCBjbGFzcyBDcmFzaExvZ3NUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRJbignSU9FcnJvcjogTm8g
c3VjaCBmaWxlIG9yIGRpcmVjdG9yeScsIGxvZykKIAogICAgICAgICBzZWxmLmZpbGVzeXN0ZW0g
PSBNb2NrRmlsZVN5c3RlbShzZWxmLmZpbGVzKQotICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hM
b2dzKE1vY2tTeXN0ZW1Ib3N0KGZpbGVzeXN0ZW09c2VsZi5maWxlc3lzdGVtKSkKKyAgICAgICAg
Y3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhNb2NrU3lzdGVtSG9zdChmaWxlc3lzdGVtPXNlbGYuZmls
ZXN5c3RlbSksIENyYXNoTG9nc1Rlc3QuREFSV0lOX01PQ0tfQ1JBU0hfRElSRUNUT1JZKQogICAg
ICAgICBzZWxmLmZpbGVzeXN0ZW0ubXRpbWUgPSBiYWRfbXRpbWUKICAgICAgICAgbG9nID0gY3Jh
c2hfbG9ncy5maW5kX25ld2VzdF9sb2coIkR1bXBSZW5kZXJUcmVlIiwgbmV3ZXJfdGhhbj0xLjAs
IGluY2x1ZGVfZXJyb3JzPVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ09TRXJyb3I6IE5v
IHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknLCBsb2cpCkBAIC0zNDQsNyArMzQ2LDcgQEAgY2xhc3Mg
Q3Jhc2hMb2dzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICByZXR1cm4KIAog
ICAgICAgICBjcmFzaF9yZXBvcnQgPSBtYWtlX21vY2tfY3Jhc2hfcmVwb3J0X2RhcndpbignRHVt
cFJlbmRlclRyZWUnLCAyODUyOCkKLSAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhNb2Nr
U3lzdGVtSG9zdCgpKQorICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKE1vY2tTeXN0ZW1I
b3N0KCksIENyYXNoTG9nc1Rlc3QuREFSV0lOX01PQ0tfQ1JBU0hfRElSRUNUT1JZKQogICAgICAg
ICBjcmFzaF90aW1lc3RhbXAgPSBjcmFzaF9sb2dzLmdldF90aW1lc3RhbXBfZnJvbV9sb2coY3Jh
c2hfcmVwb3J0KQogICAgICAgICBzZWxmLmFzc2VydEluKCcyMDExLTEyLTA3IDEzOjI3OjM0Ljgx
NicsIHN0cihjcmFzaF90aW1lc3RhbXApKQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rl
c3RzX2ludGVncmF0aW9udGVzdC5weQkocmV2aXNpb24gMjE2NzcyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTUzMiwyNCArNTMyLDI0IEBAIGNsYXNzIFJ1blRlc3QodW5p
dHRlc3QuVGVzdENhc2UsIFN0cmVhbVQKIAogICAgIGRlZiB0ZXN0X2NyYXNoX2xvZyhzZWxmKToK
ICAgICAgICAgIyBGSVhNRTogTmVlZCB0byByZXdyaXRlIHRoZXNlIHRlc3RzIHRvIG5vdCBiZSBt
YWMtc3BlY2lmaWMsIG9yIG1vdmUgdGhlbSBlbHNld2hlcmUuCi0gICAgICAgICMgQ3VycmVudGx5
IENyYXNoTG9nIHVwbG9hZGluZyBvbmx5IHdvcmtzIG9uIERhcndpbi4KLSAgICAgICAgaWYgbm90
IHNlbGYuX3BsYXRmb3JtLmlzX21hYygpOgorICAgICAgICAjIEN1cnJlbnRseSBDcmFzaExvZyB1
cGxvYWRpbmcgb25seSB3b3JrcyBvbiBEYXJ3aW4gYW5kIFdpbmRvd3MuCisgICAgICAgIGlmIG5v
dCBzZWxmLl9wbGF0Zm9ybS5pc19tYWMoKSBvciBzZWxmLl9wbGF0Zm9ybS5pc193aW4oKToKICAg
ICAgICAgICAgIHJldHVybgogICAgICAgICBtb2NrX2NyYXNoX3JlcG9ydCA9IG1ha2VfbW9ja19j
cmFzaF9yZXBvcnRfZGFyd2luKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQ1KQogICAgICAgICBob3N0
ID0gTW9ja0hvc3QoKQotICAgICAgICBob3N0LmZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKCcv
VXNlcnMvbW9jay9MaWJyYXJ5L0xvZ3MvRGlhZ25vc3RpY1JlcG9ydHMvRHVtcFJlbmRlclRyZWVf
MjAxMS0wNi0xMy0xNTA3MTlfcXVhZHplbi5jcmFzaCcsIG1vY2tfY3Jhc2hfcmVwb3J0KQorICAg
ICAgICBob3N0LmZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKCcvdG1wL2xheW91dC10ZXN0LXJl
c3VsdHMvRHVtcFJlbmRlclRyZWVfMjAxMS0wNi0xMy0xNTA3MTlfcXVhZHplbi5jcmFzaCcsIG1v
Y2tfY3Jhc2hfcmVwb3J0KQogICAgICAgICBfLCByZWd1bGFyX291dHB1dCwgXyA9IGxvZ2dpbmdf
cnVuKFsnZmFpbHVyZXMvdW5leHBlY3RlZC9jcmFzaC13aXRoLXN0ZGVyci5odG1sJywgJy0tZHVt
cC1yZW5kZXItdHJlZSddLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBob3N0PWhvc3QpCiAgICAgICAg
IGV4cGVjdGVkX2NyYXNoX2xvZyA9IG1vY2tfY3Jhc2hfcmVwb3J0CiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoaG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKCcvdG1wL2xheW91dC10ZXN0
LXJlc3VsdHMvZmFpbHVyZXMvdW5leHBlY3RlZC9jcmFzaC13aXRoLXN0ZGVyci1jcmFzaC1sb2cu
dHh0JyksIGV4cGVjdGVkX2NyYXNoX2xvZykKIAogICAgIGRlZiB0ZXN0X3dlYl9wcm9jZXNzX2Ny
YXNoX2xvZyhzZWxmKToKICAgICAgICAgIyBGSVhNRTogTmVlZCB0byByZXdyaXRlIHRoZXNlIHRl
c3RzIHRvIG5vdCBiZSBtYWMtc3BlY2lmaWMsIG9yIG1vdmUgdGhlbSBlbHNld2hlcmUuCi0gICAg
ICAgICMgQ3VycmVudGx5IENyYXNoTG9nIHVwbG9hZGluZyBvbmx5IHdvcmtzIG9uIERhcndpbi4K
LSAgICAgICAgaWYgbm90IHNlbGYuX3BsYXRmb3JtLmlzX21hYygpOgorICAgICAgICAjIEN1cnJl
bnRseSBDcmFzaExvZyB1cGxvYWRpbmcgb25seSB3b3JrcyBvbiBEYXJ3aW4gYW5kIFdpbmRvd3Mu
CisgICAgICAgIGlmIG5vdCBzZWxmLl9wbGF0Zm9ybS5pc19tYWMoKSBvciBzZWxmLl9wbGF0Zm9y
bS5pc193aW4oKToKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBtb2NrX2NyYXNoX3JlcG9y
dCA9IG1ha2VfbW9ja19jcmFzaF9yZXBvcnRfZGFyd2luKCdXZWJQcm9jZXNzJywgMTIzNDUpCiAg
ICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCi0gICAgICAgIGhvc3QuZmlsZXN5c3RlbS53cml0ZV90
ZXh0X2ZpbGUoJy9Vc2Vycy9tb2NrL0xpYnJhcnkvTG9ncy9EaWFnbm9zdGljUmVwb3J0cy9XZWJQ
cm9jZXNzXzIwMTEtMDYtMTMtMTUwNzE5X3F1YWR6ZW4uY3Jhc2gnLCBtb2NrX2NyYXNoX3JlcG9y
dCkKKyAgICAgICAgaG9zdC5maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZSgnL3RtcC9sYXlvdXQt
dGVzdC1yZXN1bHRzL1dlYlByb2Nlc3NfMjAxMS0wNi0xMy0xNTA3MTlfcXVhZHplbi5jcmFzaCcs
IG1vY2tfY3Jhc2hfcmVwb3J0KQogICAgICAgICBsb2dnaW5nX3J1bihbJ2ZhaWx1cmVzL3VuZXhw
ZWN0ZWQvd2ViLXByb2Nlc3MtY3Jhc2gtd2l0aC1zdGRlcnIuaHRtbCddLCB0ZXN0c19pbmNsdWRl
ZD1UcnVlLCBob3N0PWhvc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9zdC5maWxlc3lz
dGVtLnJlYWRfdGV4dF9maWxlKCcvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvdW5l
eHBlY3RlZC93ZWItcHJvY2Vzcy1jcmFzaC13aXRoLXN0ZGVyci1jcmFzaC1sb2cudHh0JyksIG1v
Y2tfY3Jhc2hfcmVwb3J0KQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBw
bGUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5
CShyZXZpc2lvbiAyMTY3NzIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIGltcG9ydCBsb2dnaW5nCiBpbXBv
cnQgb3MKIAotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jh
c2hMb2dzCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3Jp
cHRFcnJvcgogZnJvbSB3ZWJraXRweS5wb3J0LmJhc2UgaW1wb3J0IFBvcnQKIGZyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0IFRlc3RDb25m
aWd1cmF0aW9uCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkocmV2aXNpb24g
MjE2NzcyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNDcsNiArMTM0Nyw5IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAg
IiIiUmV0dXJucyB0aGUgcG9ydCdzIGRyaXZlciBpbXBsZW1lbnRhdGlvbi4iIiIKICAgICAgICAg
cmV0dXJuIGRyaXZlci5Ecml2ZXIKIAorICAgIGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Moc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KCkKKwogICAgIGRlZiBfZ2V0
X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToK
ICAgICAgICAgbmFtZV9zdHIgPSBuYW1lIG9yICc8dW5rbm93biBwcm9jZXNzIG5hbWU+JwogICAg
ICAgICBwaWRfc3RyID0gc3RyKHBpZCBvciAnPHVua25vd24+JykKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2Rhcndpbi5weQkocmV2aXNpb24gMjE2NzcyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsMTUg
QEAgY2xhc3MgRGFyd2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICBzZWxmLl9leGVjdXRpdmUu
cG9wZW4oW3NlbGYucGF0aF90b19zY3JpcHQoJ3J1bi1zYWZhcmknKV0gKyBzZWxmLl9hcmd1bWVu
dHNfZm9yX2NvbmZpZ3VyYXRpb24oKSArIFsnLS1uby1zYXZlZC1zdGF0ZScsICctTlNPcGVuJywg
cmVzdWx0c19maWxlbmFtZV0sCiAgICAgICAgICAgICBjd2Q9c2VsZi53ZWJraXRfYmFzZSgpLCBz
dGRvdXQ9ZmlsZShvcy5kZXZudWxsKSwgc3RkZXJyPWZpbGUob3MuZGV2bnVsbCkpCiAKKyAgICBA
bWVtb2l6ZWQKKyAgICBkZWYgcGF0aF90b19jcmFzaF9sb2dzKHNlbGYpOgorICAgICAgICBsb2df
ZGlyZWN0b3J5ID0gc2VsZi5ob3N0LmZpbGVzeXN0ZW0uZXhwYW5kdXNlcignficpCisgICAgICAg
IGxvZ19kaXJlY3RvcnkgPSBzZWxmLmhvc3QuZmlsZXN5c3RlbS5qb2luKGxvZ19kaXJlY3Rvcnks
ICdMaWJyYXJ5JywgJ0xvZ3MnKQorICAgICAgICBkaWFnbm9zaXRjX3JlcG9ydHNfZGlyZWN0b3J5
ID0gc2VsZi5ob3N0LmZpbGVzeXN0ZW0uam9pbihsb2dfZGlyZWN0b3J5LCAnRGlhZ25vc3RpY1Jl
cG9ydHMnKQorICAgICAgICBpZiBzZWxmLmhvc3QuZmlsZXN5c3RlbS5leGlzdHMoZGlhZ25vc2l0
Y19yZXBvcnRzX2RpcmVjdG9yeSk6CisgICAgICAgICAgICByZXR1cm4gZGlhZ25vc2l0Y19yZXBv
cnRzX2RpcmVjdG9yeQorICAgICAgICByZXR1cm4gc2VsZi5ob3N0LmZpbGVzeXN0ZW0uam9pbihs
b2dfZGlyZWN0b3J5LCAnQ3Jhc2hSZXBvcnRlcicpCisKICAgICBkZWYgX21lcmdlX2NyYXNoX2xv
Z3Moc2VsZiwgbG9ncywgbmV3X2xvZ3MsIGNyYXNoZWRfcHJvY2Vzc2VzKToKICAgICAgICAgZm9y
IHRlc3QsIGNyYXNoX2xvZyBpbiBuZXdfbG9ncy5pdGVyaXRlbXMoKToKICAgICAgICAgICAgIHRy
eToKQEAgLTk4LDcgKzEwNyw3IEBAIGNsYXNzIERhcndpblBvcnQoQXBwbGVQb3J0KToKICAgICAg
ICAgcmV0dXJuIGxvZ3MKIAogICAgIGRlZiBfbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9n
X2RpcihzZWxmLCBuZXdlcl90aGFuKToKLSAgICAgICAgY3Jhc2hfbG9nID0gQ3Jhc2hMb2dzKHNl
bGYuaG9zdCkKKyAgICAgICAgY3Jhc2hfbG9nID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCwgc2VsZi5w
YXRoX3RvX2NyYXNoX2xvZ3MoKSkKICAgICAgICAgcmV0dXJuIGNyYXNoX2xvZy5maW5kX2FsbF9s
b2dzKGluY2x1ZGVfZXJyb3JzPVRydWUsIG5ld2VyX3RoYW49bmV3ZXJfdGhhbikKIAogICAgIGRl
ZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90
aGFuLCB0aW1lX2ZuPU5vbmUsIHNsZWVwX2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlKToKQEAg
LTEwOCw3ICsxMTcsNyBAQCBjbGFzcyBEYXJ3aW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgIHRp
bWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQogICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2Zu
IG9yIHRpbWUuc2xlZXAKICAgICAgICAgY3Jhc2hfbG9nID0gJycKLSAgICAgICAgY3Jhc2hfbG9n
cyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCisgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Mo
c2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpKQogICAgICAgICBub3cgPSB0aW1l
X2ZuKCkKICAgICAgICAgZGVhZGxpbmUgPSBub3cgKyA1ICogaW50KHNlbGYuZ2V0X29wdGlvbign
Y2hpbGRfcHJvY2Vzc2VzJywgMSkpCiAgICAgICAgIHdoaWxlIG5vdCBjcmFzaF9sb2cgYW5kIG5v
dyA8PSBkZWFkbGluZToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5f
dGVzdGNhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rh
cndpbl90ZXN0Y2FzZS5weQkocmV2aXNpb24gMjE2NzcyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2Rhcndpbl90ZXN0Y2FzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUs
NyBAQCBpbXBvcnQgdGltZQogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBwb3J0X3Rlc3RjYXNl
CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0
Q2FwdHVyZQogZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwor
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0Zp
bGVTeXN0ZW0KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW9jayBpbXBv
cnQgTW9ja0V4ZWN1dGl2ZSwgTW9ja0V4ZWN1dGl2ZTIsIE1vY2tQcm9jZXNzLCBTY3JpcHRFcnJv
cgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9j
a1N5c3RlbUhvc3QKIApAQCAtODgsNiArODksMTQgQEAgY2xhc3MgRGFyd2luVGVzdChwb3J0X3Rl
c3RjYXNlLlBvcnRUZXN0QwogICAgICAgICBwb3J0LnN0b3BfaGVscGVyKCkKICAgICAgICAgb2Mu
cmVzdG9yZV9vdXRwdXQoKQogCisgICAgZGVmIHRlc3RfY3Jhc2hsb2dfcGF0aChzZWxmKToKKyAg
ICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChw
b3J0LnBhdGhfdG9fY3Jhc2hfbG9ncygpLCAnL1VzZXJzL21vY2svTGlicmFyeS9Mb2dzL0NyYXNo
UmVwb3J0ZXInKQorCisgICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdChmaWxlc3lzdGVtPU1v
Y2tGaWxlU3lzdGVtKGZpbGVzPVsnL1VzZXJzL21vY2svTGlicmFyeS9Mb2dzL0RpYWdub3N0aWNS
ZXBvcnRzL2NyYXNobG9nLmNyYXNoJ10pKQorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
aG9zdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LnBhdGhfdG9fY3Jhc2hfbG9ncygp
LCAnL1VzZXJzL21vY2svTGlicmFyeS9Mb2dzL0RpYWdub3N0aWNSZXBvcnRzJykKKwogICAgIGRl
ZiB0ZXN0X3NwaW5kdW1wKHNlbGYpOgogCiAgICAgICAgIGRlZiBsb2dnaW5nX3J1bl9jb21tYW5k
KGFyZ3MpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkJ
KHJldmlzaW9uIDIxNjc3MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2
aWNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw5IEBAIGNsYXNzIElPU0RldmljZVBv
cnQoSU9TUG9ydCk6CiAgICAgICAgIHJldHVybiBwb3J0X25hbWUKIAogICAgICMgRklYTUU6IFRo
ZXNlIG5lZWQgZGV2aWNlIGltcGxlbWVudGF0aW9ucyA8cmRhcjovL3Byb2JsZW0vMzA0OTc5OTE+
LgorICAgIGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Moc2VsZik6CisgICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IKKwogICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19u
YW1lLCBwcm9jZXNzX3BpZCk6CiAgICAgICAgIHBhc3MKIApJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2lvc19kZXZpY2VfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2VfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIx
Njc3MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlX3VuaXR0ZXN0
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw5IEBAIGNsYXNzIElPU0RldmljZVRlc3Qo
aW9zX3Rlc3RjYXNlLklPU1Rlc3QKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaW9zLWRldmlj
ZScsIHNlbGYubWFrZV9wb3J0KCkub3BlcmF0aW5nX3N5c3RlbSgpKQogCiAgICAgIyBGSVhNRTog
VXBkYXRlIHRlc3RzIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzMwNDk3OTkxPiBpcyBjb21wbGV0ZWQu
CisgICAgZGVmIHRlc3RfY3Jhc2hsb2dfcGF0aChzZWxmKToKKyAgICAgICAgcGFzcworCiAgICAg
ZGVmIHRlc3Rfc3BpbmR1bXAoc2VsZik6CiAgICAgICAgIHBhc3MKIApJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3IucHkJKHJldmlzaW9uIDIxNjc3MikK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw2IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGlt
cG9ydCBtZW0KIGZyb20gd2Via2l0cHkucG9ydC5kZXZpY2UgaW1wb3J0IERldmljZQogZnJvbSB3
ZWJraXRweS5wb3J0LmlvcyBpbXBvcnQgSU9TUG9ydAogZnJvbSB3ZWJraXRweS54Y29kZS5zaW11
bGF0b3IgaW1wb3J0IFNpbXVsYXRvciwgUnVudGltZSwgRGV2aWNlVHlwZQotZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiAKIAogX2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L21hYy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFj
LnB5CShyZXZpc2lvbiAyMTY3NzIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFj
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBAIGltcG9ydCBvcwogaW1wb3J0IHRp
bWUKIGltcG9ydCByZQogCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGlt
cG9ydCBDcmFzaExvZ3MKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1w
b3J0IFNjcmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Q
b3J0CiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC90ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC90ZXN0LnB5CShyZXZpc2lvbiAyMTY3
NzIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvdGVzdC5weQkod29ya2luZyBjb3B5
KQpAQCAtNTc5LDcgKzU3OSw3IEBAIGNsYXNzIFRlc3REcml2ZXIoRHJpdmVyKToKIAogICAgICAg
ICBjcmFzaF9sb2cgPSAnJwogICAgICAgICBpZiBjcmFzaGVkX3Byb2Nlc3NfbmFtZToKLSAgICAg
ICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5fcG9ydC5ob3N0KQorICAgICAgICAg
ICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxmLl9wb3J0Lmhvc3QsIHNlbGYuX3BvcnQucGF0
aF90b19jcmFzaF9sb2dzKCkpCiAgICAgICAgICAgICBjcmFzaF9sb2cgPSBjcmFzaF9sb2dzLmZp
bmRfbmV3ZXN0X2xvZyhjcmFzaGVkX3Byb2Nlc3NfbmFtZSwgTm9uZSkgb3IgJycKIAogICAgICAg
ICBpZiBzdG9wX3doZW5fZG9uZToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93
aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQko
cmV2aXNpb24gMjE2NzcyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQko
d29ya2luZyBjb3B5KQpAQCAtMzc3LDcgKzM3Nyw3IEBAIGNsYXNzIFdpblBvcnQoQXBwbGVQb3J0
KToKICAgICAgICAgdGltZV9mbiA9IHRpbWVfZm4gb3IgdGltZS50aW1lCiAgICAgICAgIHNsZWVw
X2ZuID0gc2xlZXBfZm4gb3IgdGltZS5zbGVlcAogICAgICAgICBjcmFzaF9sb2cgPSAnJwotICAg
ICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCwgc2VsZi5yZXN1bHRzX2RpcmVj
dG9yeSgpKQorICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCwgc2VsZi5w
YXRoX3RvX2NyYXNoX2xvZ3MoKSkKICAgICAgICAgbm93ID0gdGltZV9mbigpCiAgICAgICAgICMg
RklYTUU6IGRlbGV0ZSB0aGlzIGFmdGVyIHdlJ3JlIHN1cmUgdGhpcyBjb2RlIGlzIHdvcmtpbmcg
Li4uCiAgICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcgZm9yIGNyYXNoIGxvZyBmb3IgJXM6JXMn
ICUgKG5hbWUsIHN0cihwaWQpKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9xdWVyaWVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dG9vbC9jb21tYW5kcy9xdWVyaWVzLnB5CShyZXZpc2lvbiAyMTY3NzIpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQkod29ya2luZyBjb3B5KQpAQCAt
NDMwLDcgKzQzMCw4IEBAIGFuZCBQSUQgYW5kIHByaW50cyBpdCB0byBzdGRvdXQuIiIiCiAgICAg
YXJndW1lbnRfbmFtZXMgPSAiUFJPQ0VTU19OQU1FIFtQSURdIgogCiAgICAgZGVmIGV4ZWN1dGUo
c2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExv
Z3ModG9vbCkKKyAgICAgICAgZGVmYXVsdF9wb3J0ID0gdG9vbC5wb3J0X2ZhY3RvcnkuZ2V0KCkK
KyAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyh0b29sLCBkZWZhdWx0X3BvcnQucGF0aF90
b19jcmFzaF9sb2dzKCkpCiAgICAgICAgIHBpZCA9IE5vbmUKICAgICAgICAgaWYgbGVuKGFyZ3Mp
ID4gMToKICAgICAgICAgICAgIHBpZCA9IGludChhcmdzWzFdKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>