<?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>108370</bug_id>
          
          <creation_ts>2013-01-30 12:32:52 -0800</creation_ts>
          <short_desc>Some spellcheck tests require asynchronous spellcheck</short_desc>
          <delta_ts>2013-10-06 10:22:48 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>UNCONFIRMED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>112362</dependson>
    
    <dependson>122414</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Rouslan Solomakhin">rouslan+webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>enrica</cc>
    
    <cc>groby</cc>
    
    <cc>jiapu.mail</cc>
    
    <cc>jochen</cc>
    
    <cc>jonlee</cc>
    
    <cc>morrita</cc>
    
    <cc>rniwa</cc>
    
    <cc>rouslan+webkit</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>820414</commentid>
    <comment_count>0</comment_count>
    <who name="Rouslan Solomakhin">rouslan+webkit</who>
    <bug_when>2013-01-30 12:32:52 -0800</bug_when>
    <thetext>The patch for https://bugs.webkit.org/show_bug.cgi?id=106815 adds new tests for spellcheck behavior. The mac and mac-wk2 platforms differ in spellcheck behavior. The patch for 106815 adds platform-specific expected test outputs. (See the expected test outputs for the specific differences.)

Platform mac-wk2:
LayoutTests/platform/mac-wk2/editing/spelling/spelling-double-clicked-word-expected.txt
LayoutTests/platform/mac-wk2/editing/spelling/spelling-double-clicked-word-with-underscores-expected.txt
LayoutTests/platform/mac-wk2/editing/spelling/spelling-exactly-selected-multiple-words-expected.txt
LayoutTests/platform/mac-wk2/editing/spelling/spelling-exactly-selected-word-expected.txt
LayoutTests/platform/mac-wk2/editing/spelling/spelling-multiword-selection-expected.txt
LayoutTests/platform/mac-wk2/editing/spelling/spelling-should-select-multiple-words-expected.txt
LayoutTests/platform/mac-wk2/editing/spelling/spelling-should-select-single-word-expected.txt
LayoutTests/platform/mac-wk2/editing/spelling/spelling-subword-selection-expected.txt
LayoutTests/platform/mac-wk2/editing/spelling/spelling-with-punctuation-selection-expected.txt
LayoutTests/platform/mac-wk2/editing/spelling/spelling-with-underscore-selection-expected.txt
LayoutTests/platform/mac-wk2/editing/spelling/spelling-with-whitespace-selection-expected.txt

Platform mac:
LayoutTests/platform/mac/editing/spelling/spelling-double-clicked-word-expected.txt
LayoutTests/platform/mac/editing/spelling/spelling-double-clicked-word-with-underscores-expected.txt
LayoutTests/platform/mac/editing/spelling/spelling-exactly-selected-multiple-words-expected.txt
LayoutTests/platform/mac/editing/spelling/spelling-exactly-selected-word-expected.txt
LayoutTests/platform/mac/editing/spelling/spelling-should-select-multiple-words-expected.txt
LayoutTests/platform/mac/editing/spelling/spelling-should-select-single-word-expected.txt
LayoutTests/platform/mac/editing/spelling/spelling-with-punctuation-selection-expected.txt
LayoutTests/platform/mac/editing/spelling/spelling-with-underscore-selection-expected.txt
LayoutTests/platform/mac/editing/spelling/spelling-with-whitespace-selection-expected.txt

We need to either make spellcheck behave the same among all platforms or add platform-specific tests for mac and mac-wk2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820469</commentid>
    <comment_count>1</comment_count>
    <who name="Rouslan Solomakhin">rouslan+webkit</who>
    <bug_when>2013-01-30 13:20:14 -0800</bug_when>
    <thetext>Changed the patch in bug 106815 to skip the new spell checker tests on Mac WK2 platform, because it does not implement setAsynchronousSpellCheckingEnabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820494</commentid>
    <comment_count>2</comment_count>
    <who name="Rouslan Solomakhin">rouslan+webkit</who>
    <bug_when>2013-01-30 13:38:00 -0800</bug_when>
    <thetext>Mac platform behavior:

[spelling-double-clicked-word.html]
Double-clicked misspelling does not show spelling suggestions. Other platforms show spelling suggestions for double-clicked misspellings.

[spelling-double-clicked-word-with-underscores.html]
[spelling-with-underscore-selection.html]
The spelling marker applies to the text &quot;wellcome_&quot; including the trailing underscore. Other platforms do not include the trailing underscore in the misspelling.

[spelling-exactly-selected-multiple-words.html]
[spelling-should-select-multiple-words.html]
Spellcheck times out for the two-word misspelling &apos;upper case&apos;. Other platforms do not time out.

[spelling-exactly-selected-word.html]
Exactly selected misspelling does not show spelling suggestions. Other platforms show spelling suggestion for exactly-selected misspellings.

[spelling-should-select-single-word.html]
Context click on the misspelled word does not select misspelled word. Other platforms select misspelled word on context click.

[spelling-with-whitespace-selection.html]
Spellcheck is disabled for selection that includes whitespace. The patch for bug 106815 changes Chromium spellcheck behavior to ignore whitespace.

[spelling-with-punctuation-selection.html]
Spellcheck is disabled for selection that includes punctuation. The patch for bug 106815 changes Chromium spellcheck behavior to treat punctuation as whitespace and ignore it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839886</commentid>
    <comment_count>3</comment_count>
    <who name="Rachel Blum">groby</who>
    <bug_when>2013-02-22 13:43:10 -0800</bug_when>
    <thetext>Can we move those to platform-chromium-linux and platform-chromium-win instead? Or platform-chromium, and manage via TestExpectations?

And in general, all tests that are chromium-specific should go to platform-chromium. The should not impact platform-mac/platform-mac-wk2. Or any of the other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839907</commentid>
    <comment_count>4</comment_count>
    <who name="Rouslan Solomakhin">rouslan+webkit</who>
    <bug_when>2013-02-22 13:53:28 -0800</bug_when>
    <thetext>Rachel: (In reply to comment #3)
&gt; Can we move those to platform-chromium-linux and platform-chromium-win instead? Or platform-chromium, and manage via TestExpectations?
&gt; 
&gt; And in general, all tests that are chromium-specific should go to platform-chromium. The should not impact platform-mac/platform-mac-wk2. Or any of the other platforms.

Tony originally recommended that we put these tests into editing/spelling/unified-async folder and skip this folder and skip this folder on platforms that do not yet implement unified text checking and async spell checking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839909</commentid>
    <comment_count>5</comment_count>
    <who name="Rachel Blum">groby</who>
    <bug_when>2013-02-22 13:54:33 -0800</bug_when>
    <thetext>I&apos;ll defer to Tony then. But aren&apos;t we _modifying_ that behavior for Chromium?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839911</commentid>
    <comment_count>6</comment_count>
    <who name="Rouslan Solomakhin">rouslan+webkit</who>
    <bug_when>2013-02-22 13:57:20 -0800</bug_when>
    <thetext>That&apos;s true, some behavior on Chromium is different from other ports. Some tests should go into platform/chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840042</commentid>
    <comment_count>7</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2013-02-22 15:13:44 -0800</bug_when>
    <thetext>It&apos;s nice to put the tests in a cross port location because we&apos;re not testing Chromium specific behavior (are we?).

The fix is only in Chromium, but I imagine ideally the fix would be for all ports.

Another reason is that long term, I would imagine we want to move this code from WebKit/chromium into WebCore if it is cross platform behavior.

Maybe some of these tests are Chromium specific behavior?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840072</commentid>
    <comment_count>8</comment_count>
    <who name="Rachel Blum">groby</who>
    <bug_when>2013-02-22 15:37:42 -0800</bug_when>
    <thetext>These tests are for behavior we would like to see in Chromium. IIRC, they deviate from e.g. OSX normal behavior for the sake of making spellcheck work better. (rouslan, please correct me if I got this wrong)

I am not sure other ports will necessarily want to adopt this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840082</commentid>
    <comment_count>9</comment_count>
    <who name="Rouslan Solomakhin">rouslan+webkit</who>
    <bug_when>2013-02-22 15:59:19 -0800</bug_when>
    <thetext>Some of the behaviors deviate from other platforms. For example, if you select &quot;helllo_&quot; together with underscore in Chrome and right-click on the selection, then Chrome will show the suggestion &quot;hello&quot;. Other platforms would not show spelling suggestions. We changed this because we noticed that many users double-clicked words before context clicking them. Double-clicking words on Windows selects the trailing underscore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840094</commentid>
    <comment_count>10</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2013-02-22 16:08:25 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Some of the behaviors deviate from other platforms. For example, if you select &quot;helllo_&quot; together with underscore in Chrome and right-click on the selection, then Chrome will show the suggestion &quot;hello&quot;. Other platforms would not show spelling suggestions. We changed this because we noticed that many users double-clicked words before context clicking them. Double-clicking words on Windows selects the trailing underscore.

Something like this I would expect to be a cross platform test because testing on GTK+ (gedit) and Qt (kate) shows suggestions.  Also, if we explicitly don&apos;t want suggestions on Mac, then having the test be in a shared location with the different expect result checked in makes that more clear.

If this code was in WebCore, you could use EditingBehavior.h to control which platforms get which behaviors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840123</commentid>
    <comment_count>11</comment_count>
    <who name="Rouslan Solomakhin">rouslan+webkit</who>
    <bug_when>2013-02-22 16:49:48 -0800</bug_when>
    <thetext>I plann to move all of my  spell-checking tests to editing/spelling/unified-async and exclude this directory from other platforms using TestExpecations. (I assume TestExpecations knows how to handle directories.)

Then other platforms that implement unified async spellcheck can turn on these tests when necessary. Also adding new tests under editing/spelling/unified-async will not require changing test expectations for all of the platforms.

I also plan to close the following bugs as WontFix, because other platforms should enable tests for editing/spelling/unified-async only when/if they implement unified and async spell check:
 - https://bugs.webkit.org/show_bug.cgi?id=108528 - [Efl] Enable spellchecking tests added in r141354
 - https://bugs.webkit.org/show_bug.cgi?id=108529 - [Gtk] Enable spellchecking tests added in r141354
 - https://bugs.webkit.org/show_bug.cgi?id=108530 - [Qt] Enable spellchecking tests added in r141354
 - https://bugs.webkit.org/show_bug.cgi?id=108535 - [Win] Enable spellchecking tests added in r141354
 - https://bugs.webkit.org/show_bug.cgi?id=108536 - [Wincairo] Enable spellchecking tests added in r141354
 - https://bugs.webkit.org/show_bug.cgi?id=110526 - Change spelling tests from [ Skip ] to [ Failure ]
 - https://bugs.webkit.org/show_bug.cgi?id=108525 - [Mac] Enable spellchecking tests added in r141471

Sounds like the right plan?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840146</commentid>
    <comment_count>12</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2013-02-22 17:13:30 -0800</bug_when>
    <thetext>(In reply to comment #11)

&gt; Sounds like the right plan?

SGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846939</commentid>
    <comment_count>13</comment_count>
      <attachid>191329</attachid>
    <who name="Rouslan Solomakhin">rouslan+webkit</who>
    <bug_when>2013-03-04 15:40:46 -0800</bug_when>
    <thetext>Created attachment 191329
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846942</commentid>
    <comment_count>14</comment_count>
      <attachid>191329</attachid>
    <who name="Rouslan Solomakhin">rouslan+webkit</who>
    <bug_when>2013-03-04 15:43:16 -0800</bug_when>
    <thetext>Comment on attachment 191329
Patch

As we discussed, it&apos;s best to modify the tests to work in all settings. This patch changes the tests to check for features before using them. In the process of changing the tests, I found that certain configurations of spellchecker do not work in Chromium. The patch includes the fix for that, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846987</commentid>
    <comment_count>15</comment_count>
      <attachid>191329</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2013-03-04 16:21:44 -0800</bug_when>
    <thetext>Comment on attachment 191329
Patch

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

It would be better to split this into 2 patches: 1 patch that refactors sync and async to share code and 1 patch to change the tests.  It&apos;s hard to read the diff due to code moving around.

&gt; Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:232
&gt; +    bindMethod(&quot;setContinuousSpellCheckingEnabled&quot;, &amp;TestRunner::setContinuousSpellCheckingEnabled);

We should implement this in Internals.{h,cpp,idl} so all the ports can share this.  Maybe we should do a patch to move setAsynchronousSpellCheckingEnabled to Internals first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846991</commentid>
    <comment_count>16</comment_count>
    <who name="Rouslan Solomakhin">rouslan+webkit</who>
    <bug_when>2013-03-04 16:26:16 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 191329 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=191329&amp;action=review
&gt; 
&gt; It would be better to split this into 2 patches: 1 patch that refactors sync and async to share code and 1 patch to change the tests.  It&apos;s hard to read the diff due to code moving around.

Sounds good. I will split up the patch.

 
&gt; &gt; Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:232
&gt; &gt; +    bindMethod(&quot;setContinuousSpellCheckingEnabled&quot;, &amp;TestRunner::setContinuousSpellCheckingEnabled);
&gt; 
&gt; We should implement this in Internals.{h,cpp,idl} so all the ports can share this.  Maybe we should do a patch to move setAsynchronousSpellCheckingEnabled to Internals first.

Ryosuke: Would you be okay with moving setAsynchronousSpellCheckingEnabled and setContinuousSpellCheckingEnabled to Internals?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857532</commentid>
    <comment_count>17</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-18 14:12:36 -0700</bug_when>
    <thetext>Skipping
editing/spelling/spellcheck-async-mutation.html
editing/spelling/spellcheck-async.html
editing/spelling/spellcheck-sequencenum.html
editing/style/iframe-onload-crash-mac.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857538</commentid>
    <comment_count>18</comment_count>
      <attachid>191329</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-18 14:14:56 -0700</bug_when>
    <thetext>Comment on attachment 191329
Patch

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

&gt;&gt;&gt; Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:232
&gt;&gt;&gt; +    bindMethod(&quot;setContinuousSpellCheckingEnabled&quot;, &amp;TestRunner::setContinuousSpellCheckingEnabled);
&gt;&gt; 
&gt;&gt; We should implement this in Internals.{h,cpp,idl} so all the ports can share this.  Maybe we should do a patch to move setAsynchronousSpellCheckingEnabled to Internals first.
&gt; 
&gt; Ryosuke: Would you be okay with moving setAsynchronousSpellCheckingEnabled and setContinuousSpellCheckingEnabled to Internals?

It would be strange since only Chromium and EFL ports support asynchronous spellchecking, and it&apos;s not something you would switch at runtime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857589</commentid>
    <comment_count>19</comment_count>
    <who name="Rouslan Solomakhin">rouslan+webkit</who>
    <bug_when>2013-03-18 14:52:06 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 191329 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=191329&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:232
&gt; &gt;&gt;&gt; +    bindMethod(&quot;setContinuousSpellCheckingEnabled&quot;, &amp;TestRunner::setContinuousSpellCheckingEnabled);
&gt; &gt;&gt; 
&gt; &gt;&gt; We should implement this in Internals.{h,cpp,idl} so all the ports can share this.  Maybe we should do a patch to move setAsynchronousSpellCheckingEnabled to Internals first.
&gt; &gt; 
&gt; &gt; Ryosuke: Would you be okay with moving setAsynchronousSpellCheckingEnabled and setContinuousSpellCheckingEnabled to Internals?
&gt; 
&gt; It would be strange since only Chromium and EFL ports support asynchronous spellchecking, and it&apos;s not something you would switch at runtime.

https://bugs.webkit.org/show_bug.cgi?id=112362 moved setAsynchronousSpellCheckingEnabled() to Internals already. Should we rollback that change?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191329</attachid>
            <date>2013-03-04 15:40:46 -0800</date>
            <delta_ts>2013-03-18 14:14:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108370-20130304153654.patch</filename>
            <type>text/plain</type>
            <size>77083</size>
            <attacher name="Rouslan Solomakhin">rouslan+webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NjQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGRkMDgwM2NmMzJhNDU4YWE0NWY4NjVlZWY3MDM0MWM2ZDk0ZDhmZmUuLmU4NTViMjI5NjkyZjY1
ZjI5ODgzM2I4YjZhMmVlODhmNGY5YjVlNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTMtMDMtMDQgIFJvdXNsYW4gU29sb21ha2hpbiAgPHJvdXNsYW5A
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFByb3ZpZGUgc3BlbGxpbmcgc3VnZ2VzdGlvbnMgd2l0
aG91dCBjb250aW51b3VzIHNwZWxsY2hlY2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwODM3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyBzcGVsbGNoZWNrIHRvIHNob3cg
c3VnZ2VzdGlvbnMgb24gY29udGV4dCBjbGljayB3aGVuIGNvbnRpbnVvdXMKKyAgICAgICAgc3Bl
bGxjaGVjayBpcyBkaXNhYmxlZC4gQWxzbywgdGhlIGNvZGUgcGF0aHMgZm9yIHN5bmNocm9ub3Vz
IGFuZCBhc3luY2hyb25vdXMKKyAgICAgICAgc3BlbGxjaGVjayBoYXZlIGJlZW4gbWVyZ2VkLgor
CisgICAgICAgICogc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OnNlbGVjdFdvcmRBcm91bmRDYXJldCk6IElmIHRoZSBjYXJldCBpcyBvbiBhIHdvcmQsIHNl
bGVjdCB0aGUgd29yZCBhbmQgcmV0dXJuIGl0LgorICAgICAgICAoV2ViS2l0OjpzZWxlY3RXb3Jk
QXJvdW5kUmFuZ2UpOiBJZiB0aGUgc2VsZWN0ZWQgcmFuZ2UgaXMgYSB3b3JkLCByZXR1cm4gdGhl
IHdvcmQuCisgICAgICAgIChXZWJLaXQ6OnNlbGVjdE1pc3NwZWxsaW5nKTogU2VsZWN0IHRoZSBt
aXNzcGVsbGVkIHJhbmdlIGlmIHByZXNlbnQuIE90aGVyd2lzZSBzZWxlY3QgdGhlIHdvcmQgYXJv
dW5kIHRoZSBjYXJldC4KKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRJbXBsOjpn
ZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6IFVzZSBzZWxlY3RNaXNzcGVsbGluZygpIGZv
ciBib3RoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgc3BlbGxjaGVjay4KKyAgICAgICAg
KiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpy
ZXBsYWNlTWlzc3BlbGxlZFJhbmdlKTogUmVwbGFjZSB0aGUgc2VsZWN0aW9uIHNtYXJ0bHkgaWYg
dGhlcmUgYXJlIG5vIHNwZWxsaW5nIG1hcmtlcnMgaW4gc2VsZWN0aW9uLgorCiAyMDEzLTAzLTA0
ICBBYXJvbiBDb2x3ZWxsICA8YWNvbHdlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbW92
ZSB1bnVzZWQgcmV0dXJuIHZhbHVlIGZyb20gU291cmNlQnVmZmVyUHJpdmF0ZTo6YWJvcnQoKSBh
bmQgV2ViU291cmNlQnVmZmVyOjphYm9ydCgpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAKaW5kZXggZGYyMWY0MjBkN2I5Zjdk
NDRlMWI3Mjc4ZTcyZDllM2JhYzEyMjAyZC4uMjYyNTY2NGMzYjlmYzZhZTlkM2FiOWZjZTNjZTAy
OGZjNDMwNjRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4
dE1lbnVDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Db250
ZXh0TWVudUNsaWVudEltcGwuY3BwCkBAIC0xMDIsNjUgKzEwMiw1MSBAQCBzdGF0aWMgYm9vbCBp
c0FTaW5nbGVXb3JkKGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICByZXR1cm4gaXQgJiYgdGV4dEJy
ZWFrTmV4dChpdCkgPT0gc3RhdGljX2Nhc3Q8aW50Pih0ZXh0Lmxlbmd0aCgpKTsKIH0KIAotLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIGdldCBtaXNzcGVsbGVkIHdvcmQgb24gd2hpY2ggY29udGV4dCBt
ZW51Ci0vLyBpcyB0byBiZSBpbnZva2VkLiBUaGlzIGZ1bmN0aW9uIGFsc28gc2V0cyB0aGUgd29y
ZCBvbiB3aGljaCBjb250ZXh0IG1lbnUKLS8vIGhhcyBiZWVuIGludm9rZWQgdG8gYmUgdGhlIHNl
bGVjdGVkIHdvcmQsIGFzIHJlcXVpcmVkLiBUaGlzIGZ1bmN0aW9uIGNoYW5nZXMKLS8vIHRoZSBz
ZWxlY3Rpb24gb25seSB3aGVuIHRoZXJlIHdlcmUgbm8gc2VsZWN0ZWQgY2hhcmFjdGVycyBvbiBP
UyBYLgotc3RhdGljIFN0cmluZyBzZWxlY3RNaXNzcGVsbGVkV29yZChjb25zdCBDb250ZXh0TWVu
dSogZGVmYXVsdE1lbnUsIEZyYW1lKiBzZWxlY3RlZEZyYW1lKQorc3RhdGljIGJvb2wgSXNXaGl0
ZVNwYWNlT3JQdW5jdHVhdGlvbihVQ2hhciBjKQogewotICAgIC8vIEZpcnN0IHNlbGVjdCBmcm9t
IHNlbGVjdGVkVGV4dCB0byBjaGVjayBmb3IgbXVsdGlwbGUgd29yZCBzZWxlY3Rpb24uCi0gICAg
U3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gc2VsZWN0ZWRGcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVk
VGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpOwotCi0gICAgLy8gSWYgc29tZSB0ZXh0cyB3ZXJlIGFs
cmVhZHkgc2VsZWN0ZWQsIHdlIGRvbid0IGNoYW5nZSB0aGUgc2VsZWN0aW9uLgotICAgIGlmICgh
bWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIERvbid0IHByb3ZpZGUgc3Vn
Z2VzdGlvbnMgZm9yIG11bHRpcGxlIHdvcmRzLgotICAgICAgICBpZiAoIWlzQVNpbmdsZVdvcmQo
bWlzc3BlbGxlZFdvcmQpKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICBy
ZXR1cm4gbWlzc3BlbGxlZFdvcmQ7Ci0gICAgfQotCi0gICAgLy8gU2VsZWN0aW9uIGlzIGVtcHR5
LCBzbyBjaGFuZ2UgdGhlIHNlbGVjdGlvbiB0byB0aGUgd29yZCB1bmRlciB0aGUgY3Vyc29yLgot
ICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdCA9IHNlbGVjdGVkRnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT4KLSAgICAgICAgaGl0VGVzdFJlc3VsdEF0UG9pbnQoc2VsZWN0ZWRGcmFtZS0+cGFn
ZSgpLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+aGl0VGVzdFJlc3VsdCgpLnBvaW50SW5Jbm5l
ck5vZGVGcmFtZSgpLCBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6
QWN0aXZlIHwgSGl0VGVzdFJlcXVlc3Q6OkFsbG93U2hhZG93Q29udGVudCk7Ci0gICAgTm9kZSog
aW5uZXJOb2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKTsKLSAgICBWaXNpYmxlUG9zaXRp
b24gcG9zKGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludCgKLSAgICAgICAg
aGl0VGVzdFJlc3VsdC5sb2NhbFBvaW50KCkpKTsKLQotICAgIGlmIChwb3MuaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybiBtaXNzcGVsbGVkV29yZDsgLy8gSXQgaXMgZW1wdHkuCi0KLSAgICBXZWJG
cmFtZUltcGw6OnNlbGVjdFdvcmRBcm91bmRQb3NpdGlvbihzZWxlY3RlZEZyYW1lLCBwb3MpOwot
ICAgIG1pc3NwZWxsZWRXb3JkID0gc2VsZWN0ZWRGcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4
dCgpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgIHJldHVybiBpc1NwYWNlT3JOZXdsaW5lKGMpIHx8
IFdURjo6VW5pY29kZTo6aXNQdW5jdChjKTsKK30KIAotI2lmIE9TKERBUldJTikKLSAgICAvLyBJ
ZiBtaXNzcGVsbGVkIHdvcmQgaXMgc3RpbGwgZW1wdHksIHRoZW4gdGhhdCBwb3J0aW9uIHNob3Vs
ZCBub3QgYmUKLSAgICAvLyBzZWxlY3RlZC4gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhhdCBwb3Np
dGlvbiBvbmx5LCBhbmQgZG8gbm90IGV4cGFuZC4KLSAgICBpZiAobWlzc3BlbGxlZFdvcmQuaXNF
bXB0eSgpKQotICAgICAgICBzZWxlY3RlZEZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24ocG9zKSk7Ci0jZWxzZQotICAgIC8vIE9uIG5vbi1NYWMsIHJpZ2h0
LWNsaWNrIHNob3VsZCBub3QgbWFrZSBhIHJhbmdlIHNlbGVjdGlvbiBpbiBhbnkgY2FzZS4KLSAg
ICBzZWxlY3RlZEZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rp
b24ocG9zKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbWlzc3BlbGxlZFdvcmQ7CitzdGF0aWMgU3Ry
aW5nIHNlbGVjdFdvcmRBcm91bmRDYXJldChjb25zdCBGcmFtZSogc2VsZWN0ZWRGcmFtZSkKK3sK
KyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNlbGVjdGVkRnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKTsKKyAgICBzZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShX
b3JkR3JhbnVsYXJpdHkpOworICAgIFN0cmluZyBzZWxlY3RlZFRleHQgPSBzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKS0+dGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgmSXNXaGl0ZVNwYWNlT3JQ
dW5jdHVhdGlvbik7CisgICAgaWYgKCFpc0FTaW5nbGVXb3JkKHNlbGVjdGVkVGV4dCkpCisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBzZWxlY3RlZEZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0
U2VsZWN0aW9uKHNlbGVjdGlvbiwgV29yZEdyYW51bGFyaXR5KTsKKyAgICByZXR1cm4gc2VsZWN0
ZWRUZXh0OwogfQogCi1zdGF0aWMgYm9vbCBJc1doaXRlU3BhY2VPclB1bmN0dWF0aW9uKFVDaGFy
IGMpCitzdGF0aWMgU3RyaW5nIHNlbGVjdFdvcmRBcm91bmRSYW5nZShjb25zdCBGcmFtZSogc2Vs
ZWN0ZWRGcmFtZSkKIHsKLSAgICByZXR1cm4gaXNTcGFjZU9yTmV3bGluZShjKSB8fCBXVEY6OlVu
aWNvZGU6OmlzUHVuY3QoYyk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBzZWxl
Y3RlZEZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CisgICAgU3RyaW5nIHNlbGVjdGVk
VGV4dCA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLT50ZXh0KCkuc3RyaXBXaGl0ZVNw
YWNlKCZJc1doaXRlU3BhY2VPclB1bmN0dWF0aW9uKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHdv
cmRTZWxlY3Rpb24gPSBzZWxlY3RlZEZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7Cisg
ICAgd29yZFNlbGVjdGlvbi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7
CisgICAgU3RyaW5nIHdvcmRUZXh0ID0gd29yZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
LT50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCZJc1doaXRlU3BhY2VPclB1bmN0dWF0aW9uKTsKKyAg
ICBpZiAoaXNBU2luZ2xlV29yZCh3b3JkVGV4dCkgPT0gaXNBU2luZ2xlV29yZChzZWxlY3RlZFRl
eHQpICYmIHdvcmRUZXh0Lmxlbmd0aCgpID4gc2VsZWN0ZWRUZXh0Lmxlbmd0aCgpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIHNlbGVjdGVkVGV4dDsKIH0KIAotc3RhdGlj
IFN0cmluZyBzZWxlY3RNaXNzcGVsbGluZ0FzeW5jKEZyYW1lKiBzZWxlY3RlZEZyYW1lLCBEb2N1
bWVudE1hcmtlciYgbWFya2VyKQorc3RhdGljIHZvaWQgc2VsZWN0TWlzc3BlbGxpbmcoY29uc3Qg
RnJhbWUqIHNlbGVjdGVkRnJhbWUsIFdlYlN0cmluZyogbWlzc3BlbGxlZFdvcmQsIFN0cmluZyog
bWFya2VyRGVzY3JpcHRpb24pCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBz
ZWxlY3RlZEZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CiAgICAgaWYgKCFzZWxlY3Rp
b24uaXNDYXJldE9yUmFuZ2UoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBDYXJldCBhbmQgcmFuZ2Ugc2VsZWN0aW9ucyBhbHdheXMgcmV0dXJu
IHZhbGlkIG5vcm1hbGl6ZWQgcmFuZ2VzLgogICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFu
Z2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBWZWN0b3I8RG9jdW1lbnRN
YXJrZXIqPiBtYXJrZXJzID0gc2VsZWN0ZWRGcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5t
YXJrZXJzSW5SYW5nZShzZWxlY3Rpb25SYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxs
aW5nIHwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwotICAgIGlmIChtYXJrZXJzLnNpemUoKSAh
PSAxKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgbWFya2VyID0gKm1hcmtlcnNbMF07
CisgICAgaWYgKG1hcmtlcnMuc2l6ZSgpICE9IDEpIHsKKyAgICAgICAgaWYgKHNlbGVjdGlvbi5p
c0NhcmV0KCkpCisgICAgICAgICAgICAqbWlzc3BlbGxlZFdvcmQgPSBzZWxlY3RXb3JkQXJvdW5k
Q2FyZXQoc2VsZWN0ZWRGcmFtZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICptaXNzcGVs
bGVkV29yZCA9IHNlbGVjdFdvcmRBcm91bmRSYW5nZShzZWxlY3RlZEZyYW1lKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIgPSAqbWFya2Vyc1swXTsK
IAogICAgIC8vIENsb25pbmcgYSByYW5nZSBmYWlscyBvbmx5IGZvciBpbnZhbGlkIHJhbmdlcy4K
ICAgICBSZWZQdHI8UmFuZ2U+IG1hcmtlclJhbmdlID0gc2VsZWN0aW9uUmFuZ2UtPmNsb25lUmFu
Z2UoQVNTRVJUX05PX0VYQ0VQVElPTik7CkBAIC0xNzMsOSArMTU5LDEwIEBAIHN0YXRpYyBTdHJp
bmcgc2VsZWN0TWlzc3BlbGxpbmdBc3luYyhGcmFtZSogc2VsZWN0ZWRGcmFtZSwgRG9jdW1lbnRN
YXJrZXImIG1hcmtlCiAgICAgfQogCiAgICAgaWYgKG1hcmtlclJhbmdlLT50ZXh0KCkuc3RyaXBX
aGl0ZVNwYWNlKCZJc1doaXRlU3BhY2VPclB1bmN0dWF0aW9uKSAhPSBzZWxlY3Rpb25SYW5nZS0+
dGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgmSXNXaGl0ZVNwYWNlT3JQdW5jdHVhdGlvbikpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuOwogCi0gICAgcmV0dXJuIG1hcmtl
clJhbmdlLT50ZXh0KCk7CisgICAgKm1pc3NwZWxsZWRXb3JkID0gbWFya2VyUmFuZ2UtPnRleHQo
KTsKKyAgICAqbWFya2VyRGVzY3JpcHRpb24gPSBtYXJrZXIuZGVzY3JpcHRpb24oKTsKIH0KIAog
UGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVDbGllbnRJbXBsOjpnZXRDdXN0b21N
ZW51RnJvbURlZmF1bHRJdGVtcygKQEAgLTMwNywzNSArMjk0LDI1IEBAIFBsYXRmb3JtTWVudURl
c2NyaXB0aW9uIENvbnRleHRNZW51Q2xpZW50SW1wbDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0
SXRlbXMoCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHIu
aW5uZXJOb25TaGFyZWROb2RlKCkpLT5pc1NwZWVjaEVuYWJsZWQoKTsKICAgICAgICAgfSAgCiAj
ZW5kaWYKLSAgICAgICAgLy8gV2hlbiBDaHJvbWUgZW5hYmxlcyBhc3luY2hyb25vdXMgc3BlbGxj
aGVja2luZywgaXRzIHNwZWxsY2hlY2tlciBhZGRzIHNwZWxsaW5nIG1hcmtlcnMgdG8gbWlzc3Bl
bGxlZAotICAgICAgICAvLyB3b3JkcyBhbmQgYXR0YWNoZXMgc3VnZ2VzdGlvbnMgdG8gdGhlc2Ug
bWFya2VycyBpbiB0aGUgYmFja2dyb3VuZC4gVGhlcmVmb3JlLCB3aGVuIGEgdXNlciByaWdodC1j
bGlja3MKLSAgICAgICAgLy8gYSBtb3VzZSBvbiBhIHdvcmQsIENocm9tZSBqdXN0IG5lZWRzIHRv
IGZpbmQgYSBzcGVsbGluZyBtYXJrZXIgb24gdGhlIHdvcmQgaW5zdGVhZCBvZiBzcGVsbGNoZWNr
aW5nIGl0LgotICAgICAgICBpZiAoc2VsZWN0ZWRGcmFtZS0+c2V0dGluZ3MoKSAmJiBzZWxlY3Rl
ZEZyYW1lLT5zZXR0aW5ncygpLT5hc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKSB7
Ci0gICAgICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXI7Ci0gICAgICAgICAgICBkYXRhLm1p
c3NwZWxsZWRXb3JkID0gc2VsZWN0TWlzc3BlbGxpbmdBc3luYyhzZWxlY3RlZEZyYW1lLCBtYXJr
ZXIpOwotICAgICAgICAgICAgaWYgKG1hcmtlci5kZXNjcmlwdGlvbigpLmxlbmd0aCgpKSB7Cisg
ICAgICAgIC8vIFdoZW4gQ2hyb21lIGVuYWJsZXMgY29udGludW91cyBhc3luY2hyb25vdXMgc3Bl
bGxjaGVja2luZywgaXRzIHNwZWxsY2hlY2tlciBhZGRzIHNwZWxsaW5nIG1hcmtlcnMgdG8KKyAg
ICAgICAgLy8gbWlzc3BlbGxlZCB3b3JkcyBhbmQgYXR0YWNoZXMgc3VnZ2VzdGlvbnMgdG8gdGhl
c2UgbWFya2VycyBpbiB0aGUgYmFja2dyb3VuZC4gVGhlcmVmb3JlLCB3aGVuIGEgdXNlcgorICAg
ICAgICAvLyByaWdodC1jbGlja3MgYSBtb3VzZSBvbiBhIHdvcmQsIENocm9tZSBqdXN0IG5lZWRz
IHRvIGZpbmQgYSBzcGVsbGluZyBtYXJrZXIgb24gdGhlIHdvcmQgaW5zdGVhZCBvZgorICAgICAg
ICAvLyBzcGVsbGNoZWNraW5nIGl0LgorICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb247CisgICAg
ICAgIHNlbGVjdE1pc3NwZWxsaW5nKHNlbGVjdGVkRnJhbWUsICZkYXRhLm1pc3NwZWxsZWRXb3Jk
LCAmZGVzY3JpcHRpb24pOworICAgICAgICBpZiAobV93ZWJWaWV3LT5mb2N1c2VkV2ViQ29yZUZy
YW1lKCktPmVkaXRvcigpLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9kZSgpKSB7
CisgICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24ubGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKLSAgICAgICAgICAgICAgICBtYXJrZXIuZGVz
Y3JpcHRpb24oKS5zcGxpdCgnXG4nLCBzdWdnZXN0aW9ucyk7CisgICAgICAgICAgICAgICAgZGVz
Y3JpcHRpb24uc3BsaXQoJ1xuJywgc3VnZ2VzdGlvbnMpOwogICAgICAgICAgICAgICAgIGRhdGEu
ZGljdGlvbmFyeVN1Z2dlc3Rpb25zID0gc3VnZ2VzdGlvbnM7CiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKG1fd2ViVmlldy0+c3BlbGxDaGVja0NsaWVudCgpKSB7CiAgICAgICAgICAgICAgICAgaW50
IG1pc3NwZWxsZWRPZmZzZXQsIG1pc3NwZWxsZWRMZW5ndGg7CiAgICAgICAgICAgICAgICAgbV93
ZWJWaWV3LT5zcGVsbENoZWNrQ2xpZW50KCktPnNwZWxsQ2hlY2soZGF0YS5taXNzcGVsbGVkV29y
ZCwgbWlzc3BlbGxlZE9mZnNldCwgbWlzc3BlbGxlZExlbmd0aCwgJmRhdGEuZGljdGlvbmFyeVN1
Z2dlc3Rpb25zKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1pc3NwZWxsZWRMZW5ndGgpCisgICAg
ICAgICAgICAgICAgICAgIGRhdGEubWlzc3BlbGxlZFdvcmQucmVzZXQoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRhdGEuaXNTcGVsbENoZWNraW5nRW5h
YmxlZCA9IAotICAgICAgICAgICAgICAgIG1fd2ViVmlldy0+Zm9jdXNlZFdlYkNvcmVGcmFtZSgp
LT5lZGl0b3IoKS0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKLSAgICAgICAg
ICAgIC8vIFNwZWxsY2hlY2tpbmcgbWlnaHQgYmUgZW5hYmxlZCBmb3IgdGhlIGZpZWxkLCBidXQg
Y291bGQgYmUgZGlzYWJsZWQgb24gdGhlIG5vZGUuCi0gICAgICAgICAgICBpZiAobV93ZWJWaWV3
LT5mb2N1c2VkV2ViQ29yZUZyYW1lKCktPmVkaXRvcigpLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVk
SW5Gb2N1c2VkTm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS5taXNzcGVsbGVkV29yZCA9
IHNlbGVjdE1pc3NwZWxsZWRXb3JkKGRlZmF1bHRNZW51LCBzZWxlY3RlZEZyYW1lKTsKLSAgICAg
ICAgICAgICAgICBpZiAobV93ZWJWaWV3LT5zcGVsbENoZWNrQ2xpZW50KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaW50IG1pc3NwZWxsZWRPZmZzZXQsIG1pc3NwZWxsZWRMZW5ndGg7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fd2ViVmlldy0+c3BlbGxDaGVja0NsaWVudCgpLT5zcGVsbENoZWNr
KAotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5taXNzcGVsbGVkV29yZCwgbWlzc3BlbGxl
ZE9mZnNldCwgbWlzc3BlbGxlZExlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICZkYXRh
LmRpY3Rpb25hcnlTdWdnZXN0aW9ucyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbWlzc3Bl
bGxlZExlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWlzc3BlbGxlZFdvcmQu
cmVzZXQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBk
YXRhLm1pc3NwZWxsZWRXb3JkLnJlc2V0KCk7CiAgICAgICAgIH0KICAgICAgICAgSFRNTEZvcm1F
bGVtZW50KiBmb3JtID0gc2VsZWN0ZWRGcmFtZS0+c2VsZWN0aW9uKCktPmN1cnJlbnRGb3JtKCk7
CiAgICAgICAgIGlmIChmb3JtICYmIGZvcm0tPmNoZWNrVmFsaWRpdHkoKSAmJiByLmlubmVyTm9u
U2hhcmVkTm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAppbmRleCAzY2RmNTAzMWE1ZWJl
ZGZmYTliZjdlZTg0OTc5ZGI5Zjc4MTYyMGVkLi5mYmNmNTJiMDEyZTI2ZmE4ODY3ZTM1MWZhM2Y2
NWM2NWFiNzQ4YjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJG
cmFtZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1w
bC5jcHAKQEAgLTEyOTEsOCArMTI5MSwxMiBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6cmVwbGFjZU1p
c3NwZWxsZWRSYW5nZShjb25zdCBXZWJTdHJpbmcmIHRleHQpCiAgICAgaWYgKCFjYXJldFJhbmdl
KQogICAgICAgICByZXR1cm47CiAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9
IGZyYW1lKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0luUmFuZ2UoY2FyZXRSYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nIHwgRG9jdW1lbnRNYXJrZXI6OkdyYW1t
YXIpOwotICAgIGlmIChtYXJrZXJzLnNpemUoKSA8IDEgfHwgbWFya2Vyc1swXS0+c3RhcnRPZmZz
ZXQoKSA+PSBtYXJrZXJzWzBdLT5lbmRPZmZzZXQoKSkKKyAgICBpZiAobWFya2Vycy5zaXplKCkg
PCAxIHx8IG1hcmtlcnNbMF0tPnN0YXJ0T2Zmc2V0KCkgPj0gbWFya2Vyc1swXS0+ZW5kT2Zmc2V0
KCkpIHsKKyAgICAgICAgaWYgKGZyYW1lKCktPnNlbGVjdGlvbigpLT5pc0NhcmV0KCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGZyYW1lKCktPmVkaXRvcigpLT5yZXBsYWNlU2VsZWN0
aW9uV2l0aFRleHQodGV4dCwgZmFsc2UsIHRydWUpOwogICAgICAgICByZXR1cm47CisgICAgfQog
ICAgIFJlZlB0cjxSYW5nZT4gbWFya2VyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGNhcmV0UmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKSwgY2FyZXRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgbWFya2Vyc1sw
XS0+c3RhcnRPZmZzZXQoKSwgY2FyZXRSYW5nZS0+ZW5kQ29udGFpbmVyKCksIG1hcmtlcnNbMF0t
PmVuZE9mZnNldCgpKTsKICAgICBpZiAoIW1hcmtlclJhbmdlKQogICAgICAgICByZXR1cm47CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjE2OGJm
NjZhZTIzYjMxNjliNzM2NWQzYTUxZmVjMzhiOWVkMjM4MC4uODIyNmIwMzQ0ZDg5Y2RmMDAwZTdh
MDU5Yzc0NDkyMmViODJkMWRjMyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEzLTAzLTA0ICBSb3VzbGFuIFNvbG9t
YWtoaW4gIDxyb3VzbGFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEFkZCBz
ZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSBtZXRob2QgdG8gVGVzdFJ1bm5lcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MzcwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBhbGxvd3MgY2FsbGluZyB0ZXN0UnVubmVyLnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpIGZyb20gbGF5b3V0CisgICAgICAgIHRlc3RzIHRvIHZlcmlmeSBzcGVsbGNoZWNrIGJl
aGF2aW9yIGJvdGggd2l0aCBhbmQgd2l0aG91dCBjb250aW51b3VzIHNwZWxsY2hlY2suCisKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVy
LmNwcDoKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OlRlc3RSdW5uZXIpOgor
ICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6c2V0Q29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKTogQWRkZWQgYSBtZXRob2QgdG8gZW5hYmxlIG9yIGRpc2FibGUgY29udGlu
dW91cyBzcGVsbGNoZWNraW5nLgorICAgICAgICAoV2ViVGVzdFJ1bm5lcik6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5oOgorICAg
ICAgICAoVGVzdFJ1bm5lcik6CisKIDIwMTMtMDMtMDQgIEpvY2hlbiBFaXNpbmdlciAgPGpvY2hl
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBwYXNzIGFsbCBmb2N1cyBoYW5k
bGluZyBtZXRob2RzIHRocm91Z2ggdGhlIFdlYlRlc3REZWxlZ2F0ZQpkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5jcHAg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVy
LmNwcAppbmRleCA0Nzk1MWVmYWMwYTBkODhkMGMzYzQ0NTBkN2I3YWEzZDAyNjk2ZGU5Li41OWE4
YzVlNWEyODM3ZDMxNWVkZDkzMDY4NGMzNmFiMTMxNjc3MDk1IDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVy
LmNwcApAQCAtMjI5LDYgKzIyOSw3IEBAIFRlc3RSdW5uZXI6OlRlc3RSdW5uZXIoVGVzdEludGVy
ZmFjZXMqIGludGVyZmFjZXMpCiAgICAgYmluZE1ldGhvZCgib3ZlcnJpZGVQcmVmZXJlbmNlIiwg
JlRlc3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5jZSk7CiAgICAgYmluZE1ldGhvZCgic2V0UGx1
Z2luc0VuYWJsZWQiLCAmVGVzdFJ1bm5lcjo6c2V0UGx1Z2luc0VuYWJsZWQpOwogICAgIGJpbmRN
ZXRob2QoInNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkIiwgJlRlc3RSdW5uZXI6
OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKKyAgICBiaW5kTWV0aG9kKCJz
ZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQiLCAmVGVzdFJ1bm5lcjo6c2V0Q29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKICAgICBiaW5kTWV0aG9kKCJzZXRUb3VjaERyYWdE
cm9wRW5hYmxlZCIsICZUZXN0UnVubmVyOjpzZXRUb3VjaERyYWdEcm9wRW5hYmxlZCk7CiAKICAg
ICAvLyBUaGUgZm9sbG93aW5nIG1vZGlmeSB0aGUgc3RhdGUgb2YgdGhlIFRlc3RSdW5uZXIuCkBA
IC0xNzE4LDYgKzE3MTksMTMgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRBc3luY2hyb25vdXNTcGVs
bENoZWNraW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3UKICAgICByZXN1bHQt
PnNldE51bGwoKTsKIH0KIAordm9pZCBUZXN0UnVubmVyOjpzZXRDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBd
LmlzQm9vbCgpICYmIG1fd2ViVmlldy0+Zm9jdXNlZEZyYW1lKCkpCisgICAgICAgIG1fd2ViVmll
dy0+Zm9jdXNlZEZyYW1lKCktPmVuYWJsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKGNwcFZhcmlh
bnRUb0Jvb2woYXJndW1lbnRzWzBdKSk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0VG91Y2hEcmFnRHJvcEVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmggYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmgK
aW5kZXggODhkOGIzNzE1NTkyOTEwNzE3YTFmODhlMjUzY2U1YWY1YTJkYjg5Ny4uYTQzNWQzZjAy
MzdmM2FmNTZhNzEzYTRlYmJiYmEzNmE5Nzc2YTBhZiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaApAQCAt
MzEzLDYgKzMxMyw5IEBAIHByaXZhdGU6CiAgICAgLy8gQ2hhbmdlcyBhc3luY2hyb25vdXMgc3Bl
bGxjaGVja2luZyBmbGFnIG9uIHRoZSBzZXR0aW5ncy4KICAgICB2b2lkIHNldEFzeW5jaHJvbm91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKIAorICAgIC8vIENoYW5nZXMgY29udGludW91cyBzcGVsbGNoZWNraW5nIGZsYWcgb24gdGhl
IGVkaXRvci4KKyAgICB2b2lkIHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKICAgICB2b2lkIHNldFRvdWNoRHJh
Z0Ryb3BFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIAogICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDBlMDdmYmYyOWVlNjBhYzE2ZmUxMTVkOTZiZThj
YWRjMTM5ODVmNGIuLjczOWVmNTA2ODczMTM5MjU1YmI0MDZjNjUxZTA3ZGYwZjhlZGQwYzMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMy0wMy0wNCAgUm91c2xhbiBTb2xvbWFraGluICA8cm91
c2xhbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRG8gbm90IHJlcXVpcmUgYXN5bmMgc3BlbGxj
aGVjayBpbiBsYXlvdXQgdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwODM3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyBlZGl0aW5nL3NwZWxsaW5nL3Jlc291cmNl
cy91dGlsLmpzIGZyb20gcmVxdWlyaW5nIGNlcnRhaW4gZmVhdHVyZXMKKyAgICAgICAgdG8gY2hl
Y2tpbmcgZm9yIHRoZSBmZWF0dXJlcyBiZWZvcmUgdGVzdGluZyB0aGVtLiBUaGUgdGVzdHMgYXJl
IG5vdyBydW5uaW5nIHdpdGggY29udGludW91cworICAgICAgICBzcGVsbGNoZWNrIG9uIGFuZCBv
ZmYgYW5kIGFzeW5jaHJvbm91cyBzcGVsbGNoZWNrIG9uIGFuZCBvZmYsIGZvciBhIHRvdGFsIG9m
IGZvdXIgZGlmZmVyZW50CisgICAgICAgIGNvbmZpZ3VyYXRpb25zLiBUaGUgdGVzdHMgaGF2ZSBi
ZWVuIHVwZGF0ZWQgdG8gZXhwbGljaXRseSB0ZXN0IG9ubHkgd2hhdCBuZWVkcyB0byBiZSB0ZXN0
ZWQuCisKKyAgICAgICAgKiBlZGl0aW5nL3NwZWxsaW5nL3Jlc291cmNlcy91dGlsLmpzOiBDaGVj
ayBmb3IgZmVhdHVyZXMgYmVmb3JlIHRlc3RpbmcgdGhlbS4KKyAgICAgICAgKiBlZGl0aW5nL3Nw
ZWxsaW5nL3NwZWxsaW5nLWNoYW5nZWQtdGV4dC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZWRp
dGluZy9zcGVsbGluZy9zcGVsbGluZy1jaGFuZ2VkLXRleHQuaHRtbDogVGVzdCBvbmx5IHdoYXQg
bmVlZHMgdG8gYmUgdGVzdGVkLgorICAgICAgICAqIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmct
ZG91YmxlLWNsaWNrZWQtd29yZC13aXRoLXVuZGVyc2NvcmVzLWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWRvdWJsZS1jbGlja2VkLXdvcmQtd2l0aC11
bmRlcnNjb3Jlcy5odG1sOiBUZXN0IG9ubHkgd2hhdCBuZWVkcyB0byBiZSB0ZXN0ZWQuCisgICAg
ICAgICogZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1kb3VibGUtY2xpY2tlZC13b3JkLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWRvdWJsZS1jbGlj
a2VkLXdvcmQuaHRtbDogVGVzdCBvbmx5IHdoYXQgbmVlZHMgdG8gYmUgdGVzdGVkLgorICAgICAg
ICAqIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctZXhhY3RseS1zZWxlY3RlZC1tdWx0aXBsZS13
b3Jkcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1l
eGFjdGx5LXNlbGVjdGVkLW11bHRpcGxlLXdvcmRzLmh0bWw6IFRlc3Qgb25seSB3aGF0IG5lZWRz
IHRvIGJlIHRlc3RlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWV4YWN0
bHktc2VsZWN0ZWQtd29yZC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZWRpdGluZy9zcGVsbGlu
Zy9zcGVsbGluZy1leGFjdGx5LXNlbGVjdGVkLXdvcmQuaHRtbDogVGVzdCBvbmx5IHdoYXQgbmVl
ZHMgdG8gYmUgdGVzdGVkLgorICAgICAgICAqIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctbXVs
dGl3b3JkLXNlbGVjdGlvbi1leHBlY3RlZC50eHQ6CisgICAgICAgICogZWRpdGluZy9zcGVsbGlu
Zy9zcGVsbGluZy1tdWx0aXdvcmQtc2VsZWN0aW9uLmh0bWw6IFRlc3Qgb25seSB3aGF0IG5lZWRz
IHRvIGJlIHRlc3RlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLXNob3Vs
ZC1zZWxlY3QtbXVsdGlwbGUtd29yZHMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGVkaXRpbmcv
c3BlbGxpbmcvc3BlbGxpbmctc2hvdWxkLXNlbGVjdC1tdWx0aXBsZS13b3Jkcy5odG1sOiBUZXN0
IG9ubHkgd2hhdCBuZWVkcyB0byBiZSB0ZXN0ZWQuCisgICAgICAgICogZWRpdGluZy9zcGVsbGlu
Zy9zcGVsbGluZy1zaG91bGQtc2VsZWN0LXNpbmdsZS13b3JkLWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLXNob3VsZC1zZWxlY3Qtc2luZ2xlLXdvcmQu
aHRtbDogVGVzdCBvbmx5IHdoYXQgbmVlZHMgdG8gYmUgdGVzdGVkLgorICAgICAgICAqIGVkaXRp
bmcvc3BlbGxpbmcvc3BlbGxpbmctc3Vid29yZC1zZWxlY3Rpb24tZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctc3Vid29yZC1zZWxlY3Rpb24uaHRtbDog
VGVzdCBvbmx5IHdoYXQgbmVlZHMgdG8gYmUgdGVzdGVkLgorICAgICAgICAqIGVkaXRpbmcvc3Bl
bGxpbmcvc3BlbGxpbmctd2l0aC1wdW5jdHVhdGlvbi1zZWxlY3Rpb24tZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctd2l0aC1wdW5jdHVhdGlvbi1zZWxl
Y3Rpb24uaHRtbDogVGVzdCBvbmx5IHdoYXQgbmVlZHMgdG8gYmUgdGVzdGVkLgorICAgICAgICAq
IGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctd2l0aC11bmRlcnNjb3JlLXNlbGVjdGlvbi1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy13aXRoLXVuZGVy
c2NvcmUtc2VsZWN0aW9uLmh0bWw6IFRlc3Qgb25seSB3aGF0IG5lZWRzIHRvIGJlIHRlc3RlZC4K
KyAgICAgICAgKiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLXdpdGgtd2hpdGVzcGFjZS1zZWxl
Y3Rpb24tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmct
d2l0aC13aGl0ZXNwYWNlLXNlbGVjdGlvbi5odG1sOiBUZXN0IG9ubHkgd2hhdCBuZWVkcyB0byBi
ZSB0ZXN0ZWQuCisKIDIwMTMtMDMtMDQgIElhbiBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgQVNTRVJUSU9OIEZBSUxFRDogbV9jbGlwUmVjdHNDYWNoZS0+bV9yZXNw
ZWN0aW5nT3ZlcmZsb3dDbGlwW2NsaXBSZWN0c1R5cGVdID09IChjbGlwUmVjdHNDb250ZXh0LnJl
c3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJmbG93Q2xpcCkgaW4gUmVuZGVyTGF5ZXIu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3Jlc291cmNlcy91dGls
LmpzIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9yZXNvdXJjZXMvdXRpbC5qcwppbmRl
eCBjZjgwMzM0MTg4NDNjZjIwYzY2NzFlN2M4NDkwN2I3MDcyZDQ5NTIwLi5mMjk4OTk3YTA1OWNk
NTk4ZmRhNzdmYTNiNTY4OTM1MjU2OWY1NjM1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9lZGl0
aW5nL3NwZWxsaW5nL3Jlc291cmNlcy91dGlsLmpzCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcv
c3BlbGxpbmcvcmVzb3VyY2VzL3V0aWwuanMKQEAgLTMsMzYgKzMsMTA1IEBAIGZ1bmN0aW9uIGxv
Zyhtc2cpCiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lckhUTUwg
Kz0gKG1zZyArICJcbiIpOwogfQogCi1mdW5jdGlvbiB2ZXJpZnlTcGVsbFRlc3QobnJldHJ5KQor
ZnVuY3Rpb24gd2FpdEZvclNwZWxsQ2hlY2sobnJldHJ5LCB0ZXN0RWxlbWVudCwgb25TcGVsbENo
ZWNrRmluaXNoZWQpCiB7CiAgICAgaWYgKCFucmV0cnkpIHsKLSAgICAgICAgbG9nKCJGQUlMIFNw
ZWxsY2hlY2sgdGltZWQgb3V0Iik7Ci0gICAgICAgIGZpbmlzaEpTVGVzdCgpCisgICAgICAgIGxv
ZygiRkFJTCBUaW1lZCBvdXQgd2FpdGluZyBmb3Igc3BlbGxjaGVjayB0byBtYXJrIG1pc3NwZWxs
aW5ncyBpbiB0ZXh0Iik7CisgICAgICAgIG9uU3BlbGxDaGVja0ZpbmlzaGVkKGZhbHNlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoIWludGVybmFscy5tYXJrZXJDb3VudEZvck5v
ZGUoZGVzdGluYXRpb24uY2hpbGROb2Rlc1swXSwgInNwZWxsaW5nIikpIHsKLSAgICAgICAgd2lu
ZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHZlcmlmeVNwZWxsVGVzdChucmV0cnkgLSAxKTsg
fSwgMCk7CisgICAgaWYgKCFpbnRlcm5hbHMubWFya2VyQ291bnRGb3JOb2RlKHRlc3RFbGVtZW50
LmNoaWxkTm9kZXNbMF0sICJzcGVsbGluZyIpKSB7CisgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgd2FpdEZvclNwZWxsQ2hlY2sobnJldHJ5IC0gMSwg
dGVzdEVsZW1lbnQsIG9uU3BlbGxDaGVja0ZpbmlzaGVkKTsKKyAgICAgICAgfSwgMCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgdGVzdEZ1bmN0aW9uQ2FsbGJhY2soZGVzdGluYXRpb24u
Y2hpbGROb2Rlc1swXSk7Ci0gICAgZmluaXNoSlNUZXN0KCkKKyAgICBvblNwZWxsQ2hlY2tGaW5p
c2hlZCh0cnVlKTsKK30KKworZnVuY3Rpb24gcmVzZXRUZXN0VGV4dCh0ZXN0VGV4dCkKK3sKKyAg
ICBkb2N1bWVudC5leGVjQ29tbWFuZCgiU2VsZWN0QWxsIiwgZmFsc2UpOworICAgIGRvY3VtZW50
LmV4ZWNDb21tYW5kKCJEZWxldGUiLCBmYWxzZSk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQo
Ikluc2VydFRleHQiLCBmYWxzZSwgdGVzdFRleHQpOworfQorCitmdW5jdGlvbiB0ZXN0U3luY0Fu
ZEFzeW5jKGNvbnRpbnVvdXNTcGVsbENoZWNrRW5hYmxlZCwgdGVzdEVsZW1lbnQsIHRlc3RUZXh0
LCB0ZXN0RnVuY3Rpb24pCit7CisgICAgaWYgKHRlc3RSdW5uZXIuc2V0QXN5bmNocm9ub3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRBc3luY2hyb25vdXNT
cGVsbENoZWNraW5nRW5hYmxlZChmYWxzZSk7CisgICAgICAgIHJlc2V0VGVzdFRleHQodGVzdFRl
eHQpOworICAgICAgICB0ZXN0RnVuY3Rpb24odGVzdEVsZW1lbnQuY2hpbGROb2Rlc1swXSk7Cisg
ICAgICAgIHRlc3RSdW5uZXIuc2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQodHJ1
ZSk7CisgICAgfQorICAgIHJlc2V0VGVzdFRleHQodGVzdFRleHQpOworICAgIGlmIChjb250aW51
b3VzU3BlbGxDaGVja0VuYWJsZWQpIHsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICB3YWl0Rm9yU3BlbGxDaGVjaygxMCwgdGVzdEVsZW1lbnQsIGZ1
bmN0aW9uKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcykKKyAgICAgICAg
ICAgICAgICAgICAgdGVzdEZ1bmN0aW9uKHRlc3RFbGVtZW50LmNoaWxkTm9kZXNbMF0pCisgICAg
ICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwg
MCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZ1bmN0aW9uKHRlc3RFbGVtZW50LmNoaWxk
Tm9kZXNbMF0pOworICAgIH0KIH0KIAogZnVuY3Rpb24gaW5pdFNwZWxsVGVzdCh0ZXN0RWxlbWVu
dElkLCB0ZXN0VGV4dCwgdGVzdEZ1bmN0aW9uKQogewotICAgIGlmICghd2luZG93LmludGVybmFs
cyB8fCAhd2luZG93LnRlc3RSdW5uZXIgfHwgIXdpbmRvdy50ZXN0UnVubmVyLnNldEFzeW5jaHJv
bm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKSB7CisgICAgaWYgKCF3aW5kb3cuaW50ZXJuYWxzIHx8
ICF3aW5kb3cudGVzdFJ1bm5lcikgewogICAgICAgICBsb2coIkZBSUwgSW5jb21wbGV0ZSB0ZXN0
IGVudmlyb25tZW50Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGVzdEZ1bmN0aW9u
Q2FsbGJhY2sgPSB0ZXN0RnVuY3Rpb247CiAgICAganNUZXN0SXNBc3luYyA9IHRydWU7Ci0gICAg
dGVzdFJ1bm5lci5zZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCh0cnVlKTsKLSAg
ICB0ZXN0UnVubmVyLnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCh0cnVlKTsKLSAgICB0ZXN0
UnVubmVyLnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoZmFsc2UpOwotICAgIGlu
dGVybmFscy5zZXR0aW5ncy5zZXRVbmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKHRydWUpOwotICAg
IGludGVybmFscy5zZXR0aW5ncy5zZXRFZGl0aW5nQmVoYXZpb3IoIndpbiIpOwotICAgIHZhciBk
ZXN0aW5hdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRlc3RFbGVtZW50SWQpOwotICAg
IGRlc3RpbmF0aW9uLmZvY3VzKCk7Ci0gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoIkluc2VydFRl
eHQiLCBmYWxzZSwgdGVzdFRleHQpOwotICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
eyB2ZXJpZnlTcGVsbFRlc3QoMTApOyB9LCAwKTsKKworICAgIGlmICh0ZXN0UnVubmVyLnNldFNt
YXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCkKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTbWFydEluc2Vy
dERlbGV0ZUVuYWJsZWQodHJ1ZSk7CisgICAgaWYgKHRlc3RSdW5uZXIuc2V0U2VsZWN0VHJhaWxp
bmdXaGl0ZXNwYWNlRW5hYmxlZCkKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTZWxlY3RUcmFpbGlu
Z1doaXRlc3BhY2VFbmFibGVkKGZhbHNlKTsKKyAgICBpZiAoaW50ZXJuYWxzLnNldHRpbmdzLnNl
dEVkaXRpbmdCZWhhdmlvcikKKyAgICAgICAgaW50ZXJuYWxzLnNldHRpbmdzLnNldEVkaXRpbmdC
ZWhhdmlvcigid2luIik7CisgICAgaWYgKGludGVybmFscy5zZXR0aW5ncy5zZXRVbmlmaWVkVGV4
dENoZWNrZXJFbmFibGVkKQorICAgICAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0VW5pZmllZFRl
eHRDaGVja2VyRW5hYmxlZCh0cnVlKTsKKworICAgIHZhciB0ZXN0RWxlbWVudCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKHRlc3RFbGVtZW50SWQpOworICAgIHRlc3RFbGVtZW50LmZvY3VzKCk7
CisgICAgaWYgKHRlc3RSdW5uZXIuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKSB7
CisgICAgICAgIHRlc3RSdW5uZXIuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGZh
bHNlKTsKKyAgICAgICAgdGVzdFN5bmNBbmRBc3luYyhmYWxzZSwgdGVzdEVsZW1lbnQsIHRlc3RU
ZXh0LCB0ZXN0RnVuY3Rpb24pOworICAgICAgICB0ZXN0UnVubmVyLnNldENvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCh0cnVlKTsKKyAgICB9CisgICAgdGVzdFN5bmNBbmRBc3luYyh0cnVl
LCB0ZXN0RWxlbWVudCwgdGVzdFRleHQsIHRlc3RGdW5jdGlvbik7Cit9CisKK2Z1bmN0aW9uIGNv
bnRleHRDbGljayhkZXN0aW5hdGlvbkVsZW1lbnQsIHhPZmZzZXQpCit7CisgICAgdmFyIHggPSBk
ZXN0aW5hdGlvbkVsZW1lbnQub2Zmc2V0UGFyZW50Lm9mZnNldExlZnQgKyBkZXN0aW5hdGlvbkVs
ZW1lbnQub2Zmc2V0TGVmdCArIHhPZmZzZXQKKyAgICB2YXIgeSA9IGRlc3RpbmF0aW9uRWxlbWVu
dC5vZmZzZXRQYXJlbnQub2Zmc2V0VG9wICsgZGVzdGluYXRpb25FbGVtZW50Lm9mZnNldFRvcCAr
IGRlc3RpbmF0aW9uRWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOworICAgIGV2ZW50U2VuZGVyLm1v
dXNlTW92ZVRvKHgsIHkpOworICAgIHZhciBjb250ZXh0TWVudUVsZW1lbnRzID0gZXZlbnRTZW5k
ZXIuY29udGV4dENsaWNrKCk7CisgICAgLy8gRXNjIGtleSB0byBoaWRlIHRoZSBjb250ZXh0IG1l
bnUuCisgICAgZXZlbnRTZW5kZXIua2V5RG93bihTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MDAxQiks
IG51bGwpOworICAgIHJldHVybiBjb250ZXh0TWVudUVsZW1lbnRzOworfQorCitmdW5jdGlvbiBk
b3VibGVDbGljayhkZXN0aW5hdGlvbkVsZW1lbnQsIHhPZmZzZXQpCit7CisgICAgdmFyIHggPSBk
ZXN0aW5hdGlvbkVsZW1lbnQub2Zmc2V0UGFyZW50Lm9mZnNldExlZnQgKyBkZXN0aW5hdGlvbkVs
ZW1lbnQub2Zmc2V0TGVmdCArIHhPZmZzZXQ7CisgICAgdmFyIHkgPSBkZXN0aW5hdGlvbkVsZW1l
bnQub2Zmc2V0UGFyZW50Lm9mZnNldFRvcCArIGRlc3RpbmF0aW9uRWxlbWVudC5vZmZzZXRUb3Ag
KyBkZXN0aW5hdGlvbkVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMjsKKyAgICBldmVudFNlbmRlci5t
b3VzZU1vdmVUbyh4LCB5KTsKKyAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAgICBldmVu
dFNlbmRlci5tb3VzZVVwKCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgZXZl
bnRTZW5kZXIubW91c2VVcCgpOworfQorCitmdW5jdGlvbiBzZWxlY3RUZXh0KHRleHROb2RlLCBz
dGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikKK3sKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCku
cmVtb3ZlQWxsUmFuZ2VzKCk7CisgICAgdmFyIHdvcmRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJh
bmdlKCk7CisgICAgd29yZFJhbmdlLnNldFN0YXJ0KHRleHROb2RlLCBzdGFydFBvc2l0aW9uKTsK
KyAgICB3b3JkUmFuZ2Uuc2V0RW5kKHRleHROb2RlLCBlbmRQb3NpdGlvbik7CisgICAgd2luZG93
LmdldFNlbGVjdGlvbigpLmFkZFJhbmdlKHdvcmRSYW5nZSk7CiB9CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWNoYW5nZWQtdGV4dC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWNoYW5nZWQtdGV4dC1l
eHBlY3RlZC50eHQKaW5kZXggYzg5NTgxZjAyMWJkOTE4M2ZiN2FlYTU3MjMzNjIyODZhOTAxZmM2
Ny4uNWIzOWNjOGZjMWZiM2FjNDRlZDA1MzIzOTU3NTU3OTMzMGJiMmViOSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1jaGFuZ2VkLXRleHQtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctY2hhbmdl
ZC10ZXh0LWV4cGVjdGVkLnR4dApAQCAtMyw3ICszLDYgQEAgU3BlbGxjaGVjayBzaG91bGQgbm90
IGNyYXNoIGFmdGVyIHRoZSB0ZXh0IGhhcyBjaGFuZ2VkIGFuZCByZXN1bHRzIGFyZSBzZXJ2ZWQg
ZnIKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1QQVNTIHdpbmRvdy5nZXRTZWxlY3Rp
b24oKS50b1N0cmluZygpIGlzICIgSXMgaXQgYnJva2VuPyIKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRp
dGluZy9zcGVsbGluZy9zcGVsbGluZy1jaGFuZ2VkLXRleHQuaHRtbCBiL0xheW91dFRlc3RzL2Vk
aXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctY2hhbmdlZC10ZXh0Lmh0bWwKaW5kZXggZDVmYTcxZjMy
MmRhNTQ3ZDM3OTQwY2IyY2E5MDI1OTUzNmI5MDYwMC4uMzc3MDU4YmRlZDM2ODY1MDljNDg5MTE5
MjhmYzEwMjI3ZmE0ZjAwYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGlu
Zy9zcGVsbGluZy1jaGFuZ2VkLXRleHQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Nw
ZWxsaW5nL3NwZWxsaW5nLWNoYW5nZWQtdGV4dC5odG1sCkBAIC0xNywyMiArMTcsMTQgQEAgZGVz
Y3JpcHRpb24oIlNwZWxsY2hlY2sgc2hvdWxkIG5vdCBjcmFzaCBhZnRlciB0aGUgdGV4dCBoYXMg
Y2hhbmdlZCBhbmQgcmVzdWx0cwogCiBpbml0U3BlbGxUZXN0KCJkZXN0aW5hdGlvbiIsICJTcGVs
bCB3ZWxsY29tZS4gSXMgaXQgYnJva2VuPyIsIGZ1bmN0aW9uKHRleHROb2RlKSB7CiAgICAgLy8g
U2VsZWN0IHRoZSB0ZXh0ICJJcyBpdCBicm9rZW4/Ii4KLSAgICB2YXIgZGVsZXRlUmFuZ2UgPSBk
b2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgIGRlbGV0ZVJhbmdlLnNldFN0YXJ0KHRleHROb2Rl
LCAxNSk7Ci0gICAgZGVsZXRlUmFuZ2Uuc2V0RW5kKHRleHROb2RlLCAyOSk7Ci0gICAgd2luZG93
LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpOwotICAgIHdpbmRvdy5nZXRTZWxlY3Rp
b24oKS5hZGRSYW5nZShkZWxldGVSYW5nZSk7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3
aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSIsICIgSXMgaXQgYnJva2VuPyIpOworICAg
IHNlbGVjdFRleHQodGV4dE5vZGUsIDE1LCAyOSk7CisKICAgICAvLyBEZWwga2V5IHRvIGRlbGV0
ZSB0aGUgdGV4dCAiSXMgaXQgYnJva2VuPyIuCiAgICAgZXZlbnRTZW5kZXIua2V5RG93bihTdHJp
bmcuZnJvbUNoYXJDb2RlKDB4MDA3RiksIG51bGwpOwogCiAgICAgLy8gQ29udGV4dCBjbGljayB0
byBzaG93IHRoZSBjb250ZXh0IG1lbnUuCi0gICAgdmFyIHggPSBkZXN0aW5hdGlvbi5vZmZzZXRQ
YXJlbnQub2Zmc2V0TGVmdCArIGRlc3RpbmF0aW9uLm9mZnNldExlZnQgKyA1MDsKLSAgICB2YXIg
eSA9IGRlc3RpbmF0aW9uLm9mZnNldFBhcmVudC5vZmZzZXRUb3AgKyBkZXN0aW5hdGlvbi5vZmZz
ZXRUb3AgKyBkZXN0aW5hdGlvbi5vZmZzZXRIZWlnaHQgLyAyOwotICAgIGV2ZW50U2VuZGVyLm1v
dXNlTW92ZVRvKHgsIHkpOwotICAgIGNvbnRleHRNZW51RWxlbWVudHMgPSBldmVudFNlbmRlci5j
b250ZXh0Q2xpY2soKTsKLSAgICAvLyBFc2Mga2V5IHRvIGhpZGUgdGhlIGNvbnRleHQgbWVudS4K
LSAgICBldmVudFNlbmRlci5rZXlEb3duKFN0cmluZy5mcm9tQ2hhckNvZGUoMHgwMDFCKSwgbnVs
bCk7CisgICAgdmFyIGRlc3RpbmF0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRlc3Rp
bmF0aW9uIik7CisgICAgY29udGV4dENsaWNrKGRlc3RpbmF0aW9uLCA1MCk7CiAKICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiZGVzdGluYXRpb24iKS5pbm5lckhUTUwgPSAiIjsKIH0pOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1kb3VibGUt
Y2xpY2tlZC13b3JkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcv
c3BlbGxpbmctZG91YmxlLWNsaWNrZWQtd29yZC1leHBlY3RlZC50eHQKaW5kZXggZmY1NGNkOTJj
MzEyNjkzMDFlOWExM2Q0MmExZjk5MWJlMDk1OGVmMS4uZDQ3M2I2NmYyOGFlZmQ0NWM4NWY5OWVl
Y2Y4NDA3NGY1MDZjNzZlNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGlu
Zy9zcGVsbGluZy1kb3VibGUtY2xpY2tlZC13b3JkLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWRvdWJsZS1jbGlja2VkLXdvcmQtZXhwZWN0
ZWQudHh0CkBAIC0zLDE2ICszLDEzIEBAIFNwZWxsaW5nIHNob3VsZCB3b3JrIGZvciBkb3VibGUt
Y2xpY2tlZCBtaXNzcGVsbGluZ3MuIFRvIHRlc3QgbWFudWFsbHksIHR5cGUgJ3dlCiBPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCiAKIAotUEFTUyBzcGVsbGluZ01hcmtlclJhbmdlLnRvU3RyaW5n
KCkgaXMgIndlbGxjb21lIgotUEFTUyB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSBp
cyAiIgotUEFTUyB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSBpcyAid2VsbGNvbWUi
Ci1QQVNTIHNwZWxsaW5nTWFya2VyUmFuZ2UudG9TdHJpbmcoKSBpcyAid2VsbGNvbWUiCi1QQVNT
IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIGlzICJ3ZWxsY29tZSIKLVBBU1MgY29u
dGV4dE1lbnVFbGVtZW50c1tjb250ZXh0TWVudUVsZW1lbnRzLmxlbmd0aCAtIDFdIGlzICJ3ZWxj
b21lIgotUEFTUyB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSBpcyAiIgotUEFTUyB3
aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSBpcyAid2VsbGNvbWUgIgotUEFTUyBzcGVs
bGluZ01hcmtlclJhbmdlLnRvU3RyaW5nKCkgaXMgIndlbGxjb21lIgotUEFTUyB3aW5kb3cuZ2V0
U2VsZWN0aW9uKCkudG9TdHJpbmcoKSBpcyAid2VsbGNvbWUgIgorUEFTUyBjb250ZXh0TWVudUVs
ZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMubGVuZ3RoIC0gMV0gaXMgIndlbGNvbWUiCitQQVNT
IGNvbnRleHRNZW51RWxlbWVudHNbY29udGV4dE1lbnVFbGVtZW50cy5sZW5ndGggLSAxXSBpcyAi
d2VsY29tZSIKK1BBU1MgY29udGV4dE1lbnVFbGVtZW50c1tjb250ZXh0TWVudUVsZW1lbnRzLmxl
bmd0aCAtIDFdIGlzICJ3ZWxjb21lIgorUEFTUyBjb250ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRN
ZW51RWxlbWVudHMubGVuZ3RoIC0gMV0gaXMgIndlbGNvbWUiCitQQVNTIGNvbnRleHRNZW51RWxl
bWVudHNbY29udGV4dE1lbnVFbGVtZW50cy5sZW5ndGggLSAxXSBpcyAid2VsY29tZSIKK1BBU1Mg
Y29udGV4dE1lbnVFbGVtZW50c1tjb250ZXh0TWVudUVsZW1lbnRzLmxlbmd0aCAtIDFdIGlzICJ3
ZWxjb21lIgorUEFTUyBjb250ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMubGVu
Z3RoIC0gMV0gaXMgIndlbGNvbWUiCiBQQVNTIGNvbnRleHRNZW51RWxlbWVudHNbY29udGV4dE1l
bnVFbGVtZW50cy5sZW5ndGggLSAxXSBpcyAid2VsY29tZSIKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9z
cGVsbGluZy1kb3VibGUtY2xpY2tlZC13b3JkLXdpdGgtdW5kZXJzY29yZXMtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1kb3VibGUtY2xpY2tlZC13
b3JkLXdpdGgtdW5kZXJzY29yZXMtZXhwZWN0ZWQudHh0CmluZGV4IDRlNWI1NmYzMzhjMTFjNDI0
Y2NmNjQ3ZDBkYzc0ZmIwZDY0OGRjNjguLmI0ODI0MjVmNDRiMDczYjY4ZTY4N2MxZmUzZTQxZGVk
MjMxNjJkMzQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxp
bmctZG91YmxlLWNsaWNrZWQtd29yZC13aXRoLXVuZGVyc2NvcmVzLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWRvdWJsZS1jbGlja2VkLXdv
cmQtd2l0aC11bmRlcnNjb3Jlcy1leHBlY3RlZC50eHQKQEAgLTMsMTYgKzMsMTMgQEAgU3BlbGxp
bmcgc2hvdWxkIHdvcmsgZm9yIGRvdWJsZS1jbGlja2VkIG1pc3NwZWxsZWQgd29yZHMgd2l0aCB1
bmRlcnNjb3Jlcy4gVG8gdGUKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1QQVNTIHNw
ZWxsaW5nTWFya2VyUmFuZ2UudG9TdHJpbmcoKSBpcyAid2VsbGNvbWUiCi1QQVNTIHdpbmRvdy5n
ZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIGlzICIiCi1QQVNTIHdpbmRvdy5nZXRTZWxlY3Rpb24o
KS50b1N0cmluZygpIGlzICJ3ZWxsY29tZV8iCi1QQVNTIHNwZWxsaW5nTWFya2VyUmFuZ2UudG9T
dHJpbmcoKSBpcyAid2VsbGNvbWUiCi1QQVNTIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmlu
ZygpIGlzICJ3ZWxsY29tZV8iCi1QQVNTIGNvbnRleHRNZW51RWxlbWVudHNbY29udGV4dE1lbnVF
bGVtZW50cy5sZW5ndGggLSAxXSBpcyAid2VsY29tZSIKLVBBU1Mgd2luZG93LmdldFNlbGVjdGlv
bigpLnRvU3RyaW5nKCkgaXMgIiIKLVBBU1Mgd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5n
KCkgaXMgIndlbGxjb21lXyAiCi1QQVNTIHNwZWxsaW5nTWFya2VyUmFuZ2UudG9TdHJpbmcoKSBp
cyAid2VsbGNvbWUiCi1QQVNTIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIGlzICJ3
ZWxsY29tZV8gIgorUEFTUyBjb250ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMu
bGVuZ3RoIC0gMV0gaXMgIndlbGNvbWUiCitQQVNTIGNvbnRleHRNZW51RWxlbWVudHNbY29udGV4
dE1lbnVFbGVtZW50cy5sZW5ndGggLSAxXSBpcyAid2VsY29tZSIKK1BBU1MgY29udGV4dE1lbnVF
bGVtZW50c1tjb250ZXh0TWVudUVsZW1lbnRzLmxlbmd0aCAtIDFdIGlzICJ3ZWxjb21lIgorUEFT
UyBjb250ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMubGVuZ3RoIC0gMV0gaXMg
IndlbGNvbWUiCitQQVNTIGNvbnRleHRNZW51RWxlbWVudHNbY29udGV4dE1lbnVFbGVtZW50cy5s
ZW5ndGggLSAxXSBpcyAid2VsY29tZSIKK1BBU1MgY29udGV4dE1lbnVFbGVtZW50c1tjb250ZXh0
TWVudUVsZW1lbnRzLmxlbmd0aCAtIDFdIGlzICJ3ZWxjb21lIgorUEFTUyBjb250ZXh0TWVudUVs
ZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMubGVuZ3RoIC0gMV0gaXMgIndlbGNvbWUiCiBQQVNT
IGNvbnRleHRNZW51RWxlbWVudHNbY29udGV4dE1lbnVFbGVtZW50cy5sZW5ndGggLSAxXSBpcyAi
d2VsY29tZSIKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1kb3VibGUtY2xpY2tlZC13b3Jk
LXdpdGgtdW5kZXJzY29yZXMuaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3Bl
bGxpbmctZG91YmxlLWNsaWNrZWQtd29yZC13aXRoLXVuZGVyc2NvcmVzLmh0bWwKaW5kZXggY2E1
OTM1ZmUwMDA1YTVhMDYxMzUyY2Y5YTIzZWY2MzEyM2IxNmEzNi4uNGNjZGFhZmJhY2M3MWVmYmU0
NTA3MGY0YWJjZTIxZGU4MzcyNTdlNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZWRpdGluZy9z
cGVsbGluZy9zcGVsbGluZy1kb3VibGUtY2xpY2tlZC13b3JkLXdpdGgtdW5kZXJzY29yZXMuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWRvdWJsZS1jbGlj
a2VkLXdvcmQtd2l0aC11bmRlcnNjb3Jlcy5odG1sCkBAIC0xMSw2NiArMTEsMzAgQEAKIAogPHNj
cmlwdD4KIAotZGVzY3JpcHRpb24oIlNwZWxsaW5nIHNob3VsZCB3b3JrIGZvciBkb3VibGUtY2xp
Y2tlZCBtaXNzcGVsbGVkIHdvcmRzIHdpdGggdW5kZXJzY29yZXMuICIgKwotICAgICAgICAgICAg
IlRvIHRlc3QgbWFudWFsbHksIHR5cGUgJ3dlbGxjb21lXyBob21lLicsIGRvdWJsZS1jbGljayBv
biAnd2VsbGNvbWVfJywgYW5kIGNvbnRleHQtY2xpY2sgb24gdGhlIHNlbGVjdGlvbi4gIiArCi0g
ICAgICAgICAgICAiVGhlIHRlc3Qgc3VjY2VlZHMgd2hlbiB0aGUgY29udGV4dCBtZW51IHNob3dz
IHNwZWxsIGNoZWNrIHN1Z2dlc3Rpb25zLiIpOworZGVzY3JpcHRpb24oIlNwZWxsaW5nIHNob3Vs
ZCB3b3JrIGZvciBkb3VibGUtY2xpY2tlZCBtaXNzcGVsbGVkIHdvcmRzIHdpdGggdW5kZXJzY29y
ZXMuIgorICAgICsgIiBUbyB0ZXN0IG1hbnVhbGx5LCB0eXBlICd3ZWxsY29tZV8gaG9tZS4nLCBk
b3VibGUtY2xpY2sgb24gJ3dlbGxjb21lXycsIGFuZCBjb250ZXh0LWNsaWNrIG9uIHRoZSBzZWxl
Y3Rpb24uIgorICAgICsgIiBUaGUgdGVzdCBzdWNjZWVkcyB3aGVuIHRoZSBjb250ZXh0IG1lbnUg
c2hvd3Mgc3BlbGwgY2hlY2sgc3VnZ2VzdGlvbnMuIik7CiAKIGluaXRTcGVsbFRlc3QoImRlc3Rp
bmF0aW9uIiwgIndlbGxjb21lXyBob21lLiIsICBmdW5jdGlvbih0ZXh0Tm9kZSkgewotICAgIHNw
ZWxsaW5nTWFya2VyUmFuZ2UgPSBpbnRlcm5hbHMubWFya2VyUmFuZ2VGb3JOb2RlKHRleHROb2Rl
LCAic3BlbGxpbmciLCAwKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInNwZWxsaW5nTWFy
a2VyUmFuZ2UudG9TdHJpbmcoKSIsICJ3ZWxsY29tZSIpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygid2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkiLCAiIik7Ci0KICAgICAvLyBE
b3VibGUtY2xpY2sgdGhlIG1pc3NwZWxsZWQgd29yZCB3aXRob3V0IHRoZSB0cmFpbGluZyB3aGl0
ZXNwYWNlLgotICAgIHRlc3RSdW5uZXIuc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxl
ZChmYWxzZSk7Ci0gICAgdmFyIHggPSBkZXN0aW5hdGlvbi5vZmZzZXRQYXJlbnQub2Zmc2V0TGVm
dCArIGRlc3RpbmF0aW9uLm9mZnNldExlZnQgKyA0MDsKLSAgICB2YXIgeSA9IGRlc3RpbmF0aW9u
Lm9mZnNldFBhcmVudC5vZmZzZXRUb3AgKyBkZXN0aW5hdGlvbi5vZmZzZXRUb3AgKyBkZXN0aW5h
dGlvbi5vZmZzZXRIZWlnaHQgLyAyOwotICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHgsIHkp
OwotICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOwotICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAo
KTsKLSAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKLSAgICBldmVudFNlbmRlci5tb3VzZVVw
KCk7Ci0KLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5nZXRTZWxlY3Rpb24oKS50
b1N0cmluZygpIiwgIndlbGxjb21lXyIpOworICAgIGlmICh0ZXN0UnVubmVyLnNldFNlbGVjdFRy
YWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQpCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U2VsZWN0VHJh
aWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChmYWxzZSk7CisgICAgdmFyIGRlc3RpbmF0aW9uID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRlc3RpbmF0aW9uIik7CisgICAgZG91YmxlQ2xpY2soZGVz
dGluYXRpb24sIDQwKTsKIAogICAgIC8vIENvbnRleHQgY2xpY2sgb24gIndlbGxjb21lXyIgdG8g
c2hvdyB0aGUgY29udGV4dCBtZW51LgotICAgIHggPSBkZXN0aW5hdGlvbi5vZmZzZXRQYXJlbnQu
b2Zmc2V0TGVmdCArIGRlc3RpbmF0aW9uLm9mZnNldExlZnQgKyA0MDsKLSAgICB5ID0gZGVzdGlu
YXRpb24ub2Zmc2V0UGFyZW50Lm9mZnNldFRvcCArIGRlc3RpbmF0aW9uLm9mZnNldFRvcCArIGRl
c3RpbmF0aW9uLm9mZnNldEhlaWdodCAvIDI7Ci0gICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8o
eCwgeSk7Ci0gICAgY29udGV4dE1lbnVFbGVtZW50cyA9IGV2ZW50U2VuZGVyLmNvbnRleHRDbGlj
aygpOwotICAgIC8vIEVzYyBrZXkgdG8gaGlkZSB0aGUgY29udGV4dCBtZW51LgotICAgIGV2ZW50
U2VuZGVyLmtleURvd24oU3RyaW5nLmZyb21DaGFyQ29kZSgweDAwMUIpLCBudWxsKTsKLQotICAg
IHNwZWxsaW5nTWFya2VyUmFuZ2UgPSBpbnRlcm5hbHMubWFya2VyUmFuZ2VGb3JOb2RlKHRleHRO
b2RlLCAic3BlbGxpbmciLCAwKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInNwZWxsaW5n
TWFya2VyUmFuZ2UudG9TdHJpbmcoKSIsICJ3ZWxsY29tZSIpOwotICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygid2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkiLCAid2VsbGNvbWVfIik7
CisgICAgY29udGV4dE1lbnVFbGVtZW50cyA9IGNvbnRleHRDbGljayhkZXN0aW5hdGlvbiwgNDAp
OwogICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiY29udGV4dE1lbnVFbGVtZW50c1tjb250ZXh0
TWVudUVsZW1lbnRzLmxlbmd0aCAtIDFdIiwgIndlbGNvbWUiKTsKIAotICAgIHdpbmRvdy5nZXRT
ZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
IndpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIiwgIiIpOwotCiAgICAgLy8gRG91Ymxl
LWNsaWNrIHRoZSBtaXNzcGVsbGVkIHdvcmQgd2l0aCB0aGUgdHJhaWxpbmcgd2hpdGVzcGFjZS4K
KyAgICBpZiAoIXRlc3RSdW5uZXIuc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCkK
KyAgICAgICAgcmV0dXJuOwogICAgIHRlc3RSdW5uZXIuc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNw
YWNlRW5hYmxlZCh0cnVlKTsKLSAgICB2YXIgeCA9IGRlc3RpbmF0aW9uLm9mZnNldFBhcmVudC5v
ZmZzZXRMZWZ0ICsgZGVzdGluYXRpb24ub2Zmc2V0TGVmdCArIDQwOwotICAgIHZhciB5ID0gZGVz
dGluYXRpb24ub2Zmc2V0UGFyZW50Lm9mZnNldFRvcCArIGRlc3RpbmF0aW9uLm9mZnNldFRvcCAr
IGRlc3RpbmF0aW9uLm9mZnNldEhlaWdodCAvIDI7Ci0gICAgZXZlbnRTZW5kZXIubW91c2VNb3Zl
VG8oeCwgeSk7Ci0gICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7Ci0gICAgZXZlbnRTZW5kZXIu
bW91c2VVcCgpOwotICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOwotICAgIGV2ZW50U2VuZGVy
Lm1vdXNlVXAoKTsKLQotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LmdldFNlbGVj
dGlvbigpLnRvU3RyaW5nKCkiLCAid2VsbGNvbWVfICIpOworICAgIHdpbmRvdy5nZXRTZWxlY3Rp
b24oKS5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgICBkb3VibGVDbGljayhkZXN0aW5hdGlvbiwgNDAp
OwogCiAgICAgLy8gQ29udGV4dCBjbGljayBvbiAid2VsbGNvbWVfICIgdG8gc2hvdyB0aGUgY29u
dGV4dCBtZW51LgotICAgIHggPSBkZXN0aW5hdGlvbi5vZmZzZXRQYXJlbnQub2Zmc2V0TGVmdCAr
IGRlc3RpbmF0aW9uLm9mZnNldExlZnQgKyA0MDsKLSAgICB5ID0gZGVzdGluYXRpb24ub2Zmc2V0
UGFyZW50Lm9mZnNldFRvcCArIGRlc3RpbmF0aW9uLm9mZnNldFRvcCArIGRlc3RpbmF0aW9uLm9m
ZnNldEhlaWdodCAvIDI7Ci0gICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oeCwgeSk7Ci0gICAg
Y29udGV4dE1lbnVFbGVtZW50cyA9IGV2ZW50U2VuZGVyLmNvbnRleHRDbGljaygpOwotICAgIC8v
IEVzYyBrZXkgdG8gaGlkZSB0aGUgY29udGV4dCBtZW51LgotICAgIGV2ZW50U2VuZGVyLmtleURv
d24oU3RyaW5nLmZyb21DaGFyQ29kZSgweDAwMUIpLCBudWxsKTsKLQotICAgIHNwZWxsaW5nTWFy
a2VyUmFuZ2UgPSBpbnRlcm5hbHMubWFya2VyUmFuZ2VGb3JOb2RlKHRleHROb2RlLCAic3BlbGxp
bmciLCAwKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInNwZWxsaW5nTWFya2VyUmFuZ2Uu
dG9TdHJpbmcoKSIsICJ3ZWxsY29tZSIpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2lu
ZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkiLCAid2VsbGNvbWVfICIpOworICAgIGNvbnRl
eHRNZW51RWxlbWVudHMgPSBjb250ZXh0Q2xpY2soZGVzdGluYXRpb24sIDQwKTsKICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoImNvbnRleHRNZW51RWxlbWVudHNbY29udGV4dE1lbnVFbGVtZW50
cy5sZW5ndGggLSAxXSIsICJ3ZWxjb21lIik7CiB9KTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1kb3VibGUtY2xpY2tlZC13b3JkLmh0bWwgYi9M
YXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWRvdWJsZS1jbGlja2VkLXdvcmQu
aHRtbAppbmRleCAyNDkyNzNkMmUwYWJhYjlkOWJjZWM5MjdhMDljM2ZjNDZjZTAyN2NmLi41ZjE4
MzRmY2M5ODlkZTAzMmI0ZTlkYWE1YTdmY2NiZDEyMjBiODc2IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWRvdWJsZS1jbGlja2VkLXdvcmQuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWRvdWJsZS1jbGlja2Vk
LXdvcmQuaHRtbApAQCAtMTEsNjUgKzExLDMwIEBACiAKIDxzY3JpcHQ+CiAKLWRlc2NyaXB0aW9u
KCJTcGVsbGluZyBzaG91bGQgd29yayBmb3IgZG91YmxlLWNsaWNrZWQgbWlzc3BlbGxpbmdzLiAi
ICsKLSAgICAgICAgICAgICJUbyB0ZXN0IG1hbnVhbGx5LCB0eXBlICd3ZWxsY29tZSBob21lLics
IGRvdWJsZS1jbGljayBvbiAnd2VsbGNvbWUnLCBhbmQgY29udGV4dC1jbGljayBvbiB0aGUgc2Vs
ZWN0aW9uLiAiICsKLSAgICAgICAgICAgICJUaGUgdGVzdCBzdWNjZWVkcyB3aGVuIHRoZSBjb250
ZXh0IG1lbnUgc2hvd3Mgc3BlbGwgY2hlY2sgc3VnZ2VzdGlvbnMuIik7CitkZXNjcmlwdGlvbigi
U3BlbGxpbmcgc2hvdWxkIHdvcmsgZm9yIGRvdWJsZS1jbGlja2VkIG1pc3NwZWxsaW5ncy4iCisg
ICAgKyAiIFRvIHRlc3QgbWFudWFsbHksIHR5cGUgJ3dlbGxjb21lIGhvbWUuJywgZG91YmxlLWNs
aWNrIG9uICd3ZWxsY29tZScsIGFuZCBjb250ZXh0LWNsaWNrIG9uIHRoZSBzZWxlY3Rpb24uIgor
ICAgICsgIiBUaGUgdGVzdCBzdWNjZWVkcyB3aGVuIHRoZSBjb250ZXh0IG1lbnUgc2hvd3Mgc3Bl
bGwgY2hlY2sgc3VnZ2VzdGlvbnMuIik7CiAKIGluaXRTcGVsbFRlc3QoImRlc3RpbmF0aW9uIiwg
IndlbGxjb21lIGhvbWUuIiwgZnVuY3Rpb24odGV4dE5vZGUpIHsKLSAgICBzcGVsbGluZ01hcmtl
clJhbmdlID0gaW50ZXJuYWxzLm1hcmtlclJhbmdlRm9yTm9kZSh0ZXh0Tm9kZSwgInNwZWxsaW5n
IiwgMCk7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJzcGVsbGluZ01hcmtlclJhbmdlLnRv
U3RyaW5nKCkiLCAid2VsbGNvbWUiKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRv
dy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIiwgIiIpOwotCiAgICAgLy8gRG91YmxlLWNsaWNr
IHRoZSBtaXNzcGVsbGVkIHdvcmQgd2l0aG91dCB0cmFpbGluZyB3aGl0ZXNwYWNlLgotICAgIHRl
c3RSdW5uZXIuc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChmYWxzZSk7Ci0gICAg
dmFyIHggPSBkZXN0aW5hdGlvbi5vZmZzZXRQYXJlbnQub2Zmc2V0TGVmdCArIGRlc3RpbmF0aW9u
Lm9mZnNldExlZnQgKyA0MDsKLSAgICB2YXIgeSA9IGRlc3RpbmF0aW9uLm9mZnNldFBhcmVudC5v
ZmZzZXRUb3AgKyBkZXN0aW5hdGlvbi5vZmZzZXRUb3AgKyBkZXN0aW5hdGlvbi5vZmZzZXRIZWln
aHQgLyAyOwotICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHgsIHkpOwotICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlRG93bigpOwotICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKLSAgICBldmVudFNl
bmRlci5tb3VzZURvd24oKTsKLSAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Ci0KLSAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIiwgIndl
bGxjb21lIik7CisgICAgaWYgKHRlc3RSdW5uZXIuc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNl
RW5hYmxlZCkKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VF
bmFibGVkKGZhbHNlKTsKKyAgICB2YXIgZGVzdGluYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiZGVzdGluYXRpb24iKTsKKyAgICBkb3VibGVDbGljayhkZXN0aW5hdGlvbiwgNDApOwog
CiAgICAgLy8gQ29udGV4dCBjbGljayBvbiAid2VsbGNvbWUiIHRvIHNob3cgdGhlIGNvbnRleHQg
bWVudS4KLSAgICB4ID0gZGVzdGluYXRpb24ub2Zmc2V0UGFyZW50Lm9mZnNldExlZnQgKyBkZXN0
aW5hdGlvbi5vZmZzZXRMZWZ0ICsgNDA7Ci0gICAgeSA9IGRlc3RpbmF0aW9uLm9mZnNldFBhcmVu
dC5vZmZzZXRUb3AgKyBkZXN0aW5hdGlvbi5vZmZzZXRUb3AgKyBkZXN0aW5hdGlvbi5vZmZzZXRI
ZWlnaHQgLyAyOwotICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHgsIHkpOwotICAgIGNvbnRl
eHRNZW51RWxlbWVudHMgPSBldmVudFNlbmRlci5jb250ZXh0Q2xpY2soKTsKLSAgICAvLyBFc2Mg
a2V5IHRvIGhpZGUgdGhlIGNvbnRleHQgbWVudS4KLSAgICBldmVudFNlbmRlci5rZXlEb3duKFN0
cmluZy5mcm9tQ2hhckNvZGUoMHgwMDFCKSwgbnVsbCk7Ci0KLSAgICBzcGVsbGluZ01hcmtlclJh
bmdlID0gaW50ZXJuYWxzLm1hcmtlclJhbmdlRm9yTm9kZSh0ZXh0Tm9kZSwgInNwZWxsaW5nIiwg
MCk7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJzcGVsbGluZ01hcmtlclJhbmdlLnRvU3Ry
aW5nKCkiLCAid2VsbGNvbWUiKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5n
ZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIiwgIndlbGxjb21lIik7CisgICAgY29udGV4dE1lbnVF
bGVtZW50cyA9IGNvbnRleHRDbGljayhkZXN0aW5hdGlvbiwgNDApOwogICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygiY29udGV4dE1lbnVFbGVtZW50c1tjb250ZXh0TWVudUVsZW1lbnRzLmxlbmd0
aCAtIDFdIiwgIndlbGNvbWUiKTsKIAotICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVB
bGxSYW5nZXMoKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5nZXRTZWxlY3Rp
b24oKS50b1N0cmluZygpIiwgIiIpOwotCiAgICAgLy8gRG91YmxlLWNsaWNrIHRoZSBtaXNzcGVs
bGVkIHdvcmQgd2l0aCB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgIGlmICghdGVzdFJ1bm5lci5z
ZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKQorICAgICAgICByZXR1cm47CiAgICAg
dGVzdFJ1bm5lci5zZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKHRydWUpOwotICAg
IHZhciB4ID0gZGVzdGluYXRpb24ub2Zmc2V0UGFyZW50Lm9mZnNldExlZnQgKyBkZXN0aW5hdGlv
bi5vZmZzZXRMZWZ0ICsgNDA7Ci0gICAgdmFyIHkgPSBkZXN0aW5hdGlvbi5vZmZzZXRQYXJlbnQu
b2Zmc2V0VG9wICsgZGVzdGluYXRpb24ub2Zmc2V0VG9wICsgZGVzdGluYXRpb24ub2Zmc2V0SGVp
Z2h0IC8gMjsKLSAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsKLSAgICBldmVudFNl
bmRlci5tb3VzZURvd24oKTsKLSAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Ci0gICAgZXZlbnRT
ZW5kZXIubW91c2VEb3duKCk7Ci0gICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOwotICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygid2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkiLCAid2Vs
bGNvbWUgIik7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpOwor
ICAgIGRvdWJsZUNsaWNrKGRlc3RpbmF0aW9uLCA0MCk7CiAKICAgICAvLyBDb250ZXh0IGNsaWNr
IG9uICJ3ZWxsY29tZSAiIHRvIHNob3cgdGhlIGNvbnRleHQgbWVudS4KLSAgICB4ID0gZGVzdGlu
YXRpb24ub2Zmc2V0UGFyZW50Lm9mZnNldExlZnQgKyBkZXN0aW5hdGlvbi5vZmZzZXRMZWZ0ICsg
NDA7Ci0gICAgeSA9IGRlc3RpbmF0aW9uLm9mZnNldFBhcmVudC5vZmZzZXRUb3AgKyBkZXN0aW5h
dGlvbi5vZmZzZXRUb3AgKyBkZXN0aW5hdGlvbi5vZmZzZXRIZWlnaHQgLyAyOwotICAgIGV2ZW50
U2VuZGVyLm1vdXNlTW92ZVRvKHgsIHkpOwotICAgIGNvbnRleHRNZW51RWxlbWVudHMgPSBldmVu
dFNlbmRlci5jb250ZXh0Q2xpY2soKTsKLSAgICAvLyBFc2Mga2V5IHRvIGhpZGUgdGhlIGNvbnRl
eHQgbWVudS4KLSAgICBldmVudFNlbmRlci5rZXlEb3duKFN0cmluZy5mcm9tQ2hhckNvZGUoMHgw
MDFCKSwgbnVsbCk7Ci0KLSAgICBzcGVsbGluZ01hcmtlclJhbmdlID0gaW50ZXJuYWxzLm1hcmtl
clJhbmdlRm9yTm9kZSh0ZXh0Tm9kZSwgInNwZWxsaW5nIiwgMCk7Ci0gICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCJzcGVsbGluZ01hcmtlclJhbmdlLnRvU3RyaW5nKCkiLCAid2VsbGNvbWUiKTsK
LSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmlu
ZygpIiwgIndlbGxjb21lICIpOworICAgIGNvbnRleHRNZW51RWxlbWVudHMgPSBjb250ZXh0Q2xp
Y2soZGVzdGluYXRpb24sIDQwKTsKICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImNvbnRleHRN
ZW51RWxlbWVudHNbY29udGV4dE1lbnVFbGVtZW50cy5sZW5ndGggLSAxXSIsICJ3ZWxjb21lIik7
CiB9KTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGlu
Zy1leGFjdGx5LXNlbGVjdGVkLW11bHRpcGxlLXdvcmRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctZXhhY3RseS1zZWxlY3RlZC1tdWx0aXBsZS13
b3Jkcy1leHBlY3RlZC50eHQKaW5kZXggYTBmYzE2ZmVhYmIzNTdlZGQ5OTdkYzA4NWNmZWNkYzQz
MTlhNzAyMC4uMTVkYmQ4NTQxOTQyZWJmNGI1YzAyMzRkZTM1Mzc0YWM1YmQ1NWFiYiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1leGFjdGx5LXNlbGVj
dGVkLW11bHRpcGxlLXdvcmRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5n
L3NwZWxsaW5nL3NwZWxsaW5nLWV4YWN0bHktc2VsZWN0ZWQtbXVsdGlwbGUtd29yZHMtZXhwZWN0
ZWQudHh0CkBAIC0xLDEzICsxLDExIEBACi1TcGVsbGluZyBzaG91bGQgd29yayB3aGVuIHRoZSB1
c2VyIHNlbGVjdHMgYSBtdWx0aS13b3JkIG1pc3NwZWxsaW5nIGV4YWN0bHkuIFRvIHRlc3QgbWFu
dWFsbHksIGVuYWJsZSAnQXNrIEdvb2dsZSBmb3IgU3VnZ2VzdGlvbnMnIGluIENocm9tZSwgdHlw
ZSAnSXQgc2hvdWxkIGJlIHVwcGVyIGNhc2UuJywgc2VsZWN0ICd1cHBlciBjYXNlJywgYW5kIGNv
bnRleHQtY2xpY2sgb24gdGhlIHNlbGVjdGlvbi5UaGUgdGVzdCBzdWNjZWVkcyB3aGVuIHRoZSBj
b250ZXh0IG1lbnUgc2hvd3Mgc3BlbGxpbmcgc3VnZ2VzdGlvbnMuCitTcGVsbGluZyBzaG91bGQg
d29yayB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgYSBtdWx0aS13b3JkIG1pc3NwZWxsaW5nIGV4YWN0
bHkuIFRvIHRlc3QgbWFudWFsbHksIGVuYWJsZSAnQXNrIEdvb2dsZSBmb3IgU3VnZ2VzdGlvbnMn
IGluIENocm9tZSwgdHlwZSAnSXQgc2hvdWxkIGJlIHVwcGVyIGNhc2UuJywgc2VsZWN0ICd1cHBl
ciBjYXNlJywgYW5kIGNvbnRleHQtY2xpY2sgb24gdGhlIHNlbGVjdGlvbi4gVGhlIHRlc3Qgc3Vj
Y2VlZHMgd2hlbiB0aGUgY29udGV4dCBtZW51IHNob3dzIHNwZWxsaW5nIHN1Z2dlc3Rpb25zLgog
CiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotUEFTUyBzcGVsbGluZ01hcmtlclJhbmdl
LnRvU3RyaW5nKCkgaXMgInVwcGVyIGNhc2UiCi1QQVNTIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50
b1N0cmluZygpIGlzICIiCi1QQVNTIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIGlz
ICJ1cHBlciBjYXNlIgotUEFTUyBzcGVsbGluZ01hcmtlclJhbmdlLnRvU3RyaW5nKCkgaXMgInVw
cGVyIGNhc2UiCi1QQVNTIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIGlzICJ1cHBl
ciBjYXNlIgorUEFTUyBjb250ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMubGVu
Z3RoIC0gMV0gaXMgInVwcGVyY2FzZSIKK1BBU1MgY29udGV4dE1lbnVFbGVtZW50c1tjb250ZXh0
TWVudUVsZW1lbnRzLmxlbmd0aCAtIDFdIGlzICJ1cHBlcmNhc2UiCitQQVNTIGNvbnRleHRNZW51
RWxlbWVudHNbY29udGV4dE1lbnVFbGVtZW50cy5sZW5ndGggLSAxXSBpcyAidXBwZXJjYXNlIgog
UEFTUyBjb250ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMubGVuZ3RoIC0gMV0g
aXMgInVwcGVyY2FzZSIKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1leGFjdGx5LXNlbGVj
dGVkLW11bHRpcGxlLXdvcmRzLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3Nw
ZWxsaW5nLWV4YWN0bHktc2VsZWN0ZWQtbXVsdGlwbGUtd29yZHMuaHRtbAppbmRleCAwYjc4YTkx
NDgyOWRmNmU1M2IwN2Y5YjBlNzgzOTA5YjBlNjZmOGQ0Li5hY2E1NThjYTYzM2E4ZjVkZWJjYzZj
NjEzMDAwOGY1NGYxMGQ3MTQ3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxs
aW5nL3NwZWxsaW5nLWV4YWN0bHktc2VsZWN0ZWQtbXVsdGlwbGUtd29yZHMuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWV4YWN0bHktc2VsZWN0ZWQtbXVs
dGlwbGUtd29yZHMuaHRtbApAQCAtMTAsMzUgKzEwLDE3IEBACiA8L2Rpdj4KIDxzY3JpcHQ+CiAK
LWRlc2NyaXB0aW9uKCJTcGVsbGluZyBzaG91bGQgd29yayB3aGVuIHRoZSB1c2VyIHNlbGVjdHMg
YSBtdWx0aS13b3JkIG1pc3NwZWxsaW5nIGV4YWN0bHkuICIgKwotICAgICAgICAgICAgIlRvIHRl
c3QgbWFudWFsbHksIGVuYWJsZSAnQXNrIEdvb2dsZSBmb3IgU3VnZ2VzdGlvbnMnIGluIENocm9t
ZSwgdHlwZSAnSXQgc2hvdWxkIGJlIHVwcGVyIGNhc2UuJywgc2VsZWN0ICd1cHBlciBjYXNlJywg
YW5kIGNvbnRleHQtY2xpY2sgb24gdGhlIHNlbGVjdGlvbi4iICsKLSAgICAgICAgICAgICJUaGUg
dGVzdCBzdWNjZWVkcyB3aGVuIHRoZSBjb250ZXh0IG1lbnUgc2hvd3Mgc3BlbGxpbmcgc3VnZ2Vz
dGlvbnMuIik7CitkZXNjcmlwdGlvbigiU3BlbGxpbmcgc2hvdWxkIHdvcmsgd2hlbiB0aGUgdXNl
ciBzZWxlY3RzIGEgbXVsdGktd29yZCBtaXNzcGVsbGluZyBleGFjdGx5LiIKKyAgICArICIgVG8g
dGVzdCBtYW51YWxseSwgZW5hYmxlICdBc2sgR29vZ2xlIGZvciBTdWdnZXN0aW9ucycgaW4gQ2hy
b21lLCB0eXBlICdJdCBzaG91bGQgYmUgdXBwZXIgY2FzZS4nLCBzZWxlY3QgJ3VwcGVyIGNhc2Un
LCBhbmQgY29udGV4dC1jbGljayBvbiB0aGUgc2VsZWN0aW9uLiIKKyAgICArICIgVGhlIHRlc3Qg
c3VjY2VlZHMgd2hlbiB0aGUgY29udGV4dCBtZW51IHNob3dzIHNwZWxsaW5nIHN1Z2dlc3Rpb25z
LiIpOwogCiBpbml0U3BlbGxUZXN0KCJkZXN0aW5hdGlvbiIsICJJdCBzaG91bGQgYmUgdXBwZXIg
Y2FzZS4iLCBmdW5jdGlvbih0ZXh0Tm9kZSkgewotICAgIHNwZWxsaW5nTWFya2VyUmFuZ2UgPSBp
bnRlcm5hbHMubWFya2VyUmFuZ2VGb3JOb2RlKHRleHROb2RlLCAic3BlbGxpbmciLCAwKTsKLSAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInNwZWxsaW5nTWFya2VyUmFuZ2UudG9TdHJpbmcoKSIs
ICJ1cHBlciBjYXNlIik7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKCkudG9TdHJpbmcoKSIsICIiKTsKLSAgICAKICAgICAvLyBTZWxlY3QgdGhlIG11bHRp
LXdvcmQgbWlzc3BlbGxpbmcgd2l0aG91dCBzdXJyb3VuZGluZyB3aGl0ZXNwYWNlIG9yIHB1bmN0
dWF0aW9uLgotICAgIHZhciB3b3JkUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAg
IHdvcmRSYW5nZS5zZXRTdGFydCh0ZXh0Tm9kZSwgMTMpOwotICAgIHdvcmRSYW5nZS5zZXRFbmQo
dGV4dE5vZGUsIDIzKTsKLSAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2Vz
KCk7Ci0gICAgd2luZG93LmdldFNlbGVjdGlvbigpLmFkZFJhbmdlKHdvcmRSYW5nZSk7Ci0KLSAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygp
IiwgInVwcGVyIGNhc2UiKTsKKyAgICBzZWxlY3RUZXh0KHRleHROb2RlLCAxMywgMjMpOwogCiAg
ICAgLy8gQ29udGV4dCBjbGljayBvbiAidXBwZXIgY2FzZSIgdG8gc2hvdyB0aGUgY29udGV4dCBt
ZW51LgotICAgIHZhciB4ID0gZGVzdGluYXRpb24ub2Zmc2V0UGFyZW50Lm9mZnNldExlZnQgKyBk
ZXN0aW5hdGlvbi5vZmZzZXRMZWZ0ICsgMTAwOwotICAgIHZhciB5ID0gZGVzdGluYXRpb24ub2Zm
c2V0UGFyZW50Lm9mZnNldFRvcCArIGRlc3RpbmF0aW9uLm9mZnNldFRvcCArIGRlc3RpbmF0aW9u
Lm9mZnNldEhlaWdodCAvIDI7Ci0gICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oeCwgeSk7Ci0g
ICAgY29udGV4dE1lbnVFbGVtZW50cyA9IGV2ZW50U2VuZGVyLmNvbnRleHRDbGljaygpOwotICAg
IC8vIEVzYyBrZXkgdG8gaGlkZSB0aGUgY29udGV4dCBtZW51LgotICAgIGV2ZW50U2VuZGVyLmtl
eURvd24oU3RyaW5nLmZyb21DaGFyQ29kZSgweDAwMUIpLCBudWxsKTsKLQotICAgIHNwZWxsaW5n
TWFya2VyUmFuZ2UgPSBpbnRlcm5hbHMubWFya2VyUmFuZ2VGb3JOb2RlKHRleHROb2RlLCAic3Bl
bGxpbmciLCAwKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInNwZWxsaW5nTWFya2VyUmFu
Z2UudG9TdHJpbmcoKSIsICJ1cHBlciBjYXNlIik7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCJ3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSIsICJ1cHBlciBjYXNlIik7CisgICAg
dmFyIGRlc3RpbmF0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRlc3RpbmF0aW9uIik7
CisgICAgY29udGV4dE1lbnVFbGVtZW50cyA9IGNvbnRleHRDbGljayhkZXN0aW5hdGlvbiwgMTAw
KTsKICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImNvbnRleHRNZW51RWxlbWVudHNbY29udGV4
dE1lbnVFbGVtZW50cy5sZW5ndGggLSAxXSIsICJ1cHBlcmNhc2UiKTsKIH0pOwogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWV4YWN0bHktc2VsZWN0
ZWQtd29yZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxs
aW5nLWV4YWN0bHktc2VsZWN0ZWQtd29yZC1leHBlY3RlZC50eHQKaW5kZXggMzRlMzZjZjA0Mzkx
MDQ5OTZmMGNhZjE1NmIzZTk5MzFhMTg4ZTM4My4uZjJlMmMyNjYwOThkYzY3NzczY2UxY2JiNGI1
YzU0ZjgwOGIxZTM1MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9z
cGVsbGluZy1leGFjdGx5LXNlbGVjdGVkLXdvcmQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRl
c3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctZXhhY3RseS1zZWxlY3RlZC13b3JkLWV4cGVj
dGVkLnR4dApAQCAtMywxNCArMywxMyBAQCBTcGVsbGluZyBzaG91bGQgd29yayB3aGVuIHRoZSB1
c2VyIHNlbGVjdHMgdGhlIG1pc3NwZWxsZWQgd29yZCBleGFjdGx5LiBUbyB0ZXN0CiBPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCiAKIAotUEFTUyBzcGVsbGluZ01hcmtlclJhbmdlLnRvU3RyaW5n
KCkgaXMgIndlbGxjb21lIgotUEFTUyB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSBp
cyAiIgotUEFTUyB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSBpcyAid2VsbGNvbWUi
Ci1QQVNTIHNwZWxsaW5nTWFya2VyUmFuZ2UudG9TdHJpbmcoKSBpcyAid2VsbGNvbWUiCi1QQVNT
IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIGlzICJ3ZWxsY29tZSIKIFBBU1MgY29u
dGV4dE1lbnVFbGVtZW50c1tjb250ZXh0TWVudUVsZW1lbnRzLmxlbmd0aCAtIDFdIGlzICJ3ZWxj
b21lIgotUEFTUyB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSBpcyAiaG9tZSIKLVBB
U1Mgd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgaXMgImhvbWUiCitQQVNTIGNvbnRl
eHRNZW51RWxlbWVudHNbY29udGV4dE1lbnVFbGVtZW50cy5sZW5ndGggLSAxXSBpcyAiPHNlcGFy
YXRvcj4iCitQQVNTIGNvbnRleHRNZW51RWxlbWVudHNbY29udGV4dE1lbnVFbGVtZW50cy5sZW5n
dGggLSAxXSBpcyAid2VsY29tZSIKK1BBU1MgY29udGV4dE1lbnVFbGVtZW50c1tjb250ZXh0TWVu
dUVsZW1lbnRzLmxlbmd0aCAtIDFdIGlzICI8c2VwYXJhdG9yPiIKK1BBU1MgY29udGV4dE1lbnVF
bGVtZW50c1tjb250ZXh0TWVudUVsZW1lbnRzLmxlbmd0aCAtIDFdIGlzICJ3ZWxjb21lIgorUEFT
UyBjb250ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMubGVuZ3RoIC0gMV0gaXMg
IjxzZXBhcmF0b3I+IgorUEFTUyBjb250ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRNZW51RWxlbWVu
dHMubGVuZ3RoIC0gMV0gaXMgIndlbGNvbWUiCiBQQVNTIGNvbnRleHRNZW51RWxlbWVudHNbY29u
dGV4dE1lbnVFbGVtZW50cy5sZW5ndGggLSAxXSBpcyAiPHNlcGFyYXRvcj4iCiBQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcv
c3BlbGxpbmcvc3BlbGxpbmctZXhhY3RseS1zZWxlY3RlZC13b3JkLmh0bWwgYi9MYXlvdXRUZXN0
cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWV4YWN0bHktc2VsZWN0ZWQtd29yZC5odG1sCmlu
ZGV4IDIyMWQ5NmQ4N2MwNGQ5NzMxYWJjYjBmYTM1N2NiMjc1NzhlZDg2Y2IuLjlhM2RmNmY3MjEy
NTJkM2NlZDBlZDI5MmJhNGY4YmRjYmUyNjg4ZWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Vk
aXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctZXhhY3RseS1zZWxlY3RlZC13b3JkLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1leGFjdGx5LXNlbGVjdGVkLXdv
cmQuaHRtbApAQCAtMTEsNTMgKzExLDI0IEBACiAKIDxzY3JpcHQ+CiAKLWRlc2NyaXB0aW9uKCJT
cGVsbGluZyBzaG91bGQgd29yayB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgdGhlIG1pc3NwZWxsZWQg
d29yZCBleGFjdGx5LiAiICsKLSAgICAgICAgICAgICJUbyB0ZXN0IG1hbnVhbGx5LCB0eXBlICd3
ZWxsY29tZSBob21lLicsIHNlbGVjdCAnd2VsbGNvbWUnLCBhbmQgY29udGV4dC1jbGljayBvbiB0
aGUgc2VsZWN0aW9uLiAiICsKLSAgICAgICAgICAgICJUaGUgdGVzdCBzdWNjZWVkcyB3aGVuIHRo
ZSBjb250ZXh0IG1lbnUgc2hvd3Mgc3BlbGxpbmcgc3VnZ2VzdGlvbnMuIik7CitkZXNjcmlwdGlv
bigiU3BlbGxpbmcgc2hvdWxkIHdvcmsgd2hlbiB0aGUgdXNlciBzZWxlY3RzIHRoZSBtaXNzcGVs
bGVkIHdvcmQgZXhhY3RseS4iCisgICAgKyAiIFRvIHRlc3QgbWFudWFsbHksIHR5cGUgJ3dlbGxj
b21lIGhvbWUuJywgc2VsZWN0ICd3ZWxsY29tZScsIGFuZCBjb250ZXh0LWNsaWNrIG9uIHRoZSBz
ZWxlY3Rpb24uIgorICAgICsgIiBUaGUgdGVzdCBzdWNjZWVkcyB3aGVuIHRoZSBjb250ZXh0IG1l
bnUgc2hvd3Mgc3BlbGxpbmcgc3VnZ2VzdGlvbnMuIik7CiAKIGluaXRTcGVsbFRlc3QoImRlc3Rp
bmF0aW9uIiwgIndlbGxjb21lIGhvbWUuIiwgZnVuY3Rpb24odGV4dE5vZGUpIHsKLSAgICBzcGVs
bGluZ01hcmtlclJhbmdlID0gaW50ZXJuYWxzLm1hcmtlclJhbmdlRm9yTm9kZSh0ZXh0Tm9kZSwg
InNwZWxsaW5nIiwgMCk7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJzcGVsbGluZ01hcmtl
clJhbmdlLnRvU3RyaW5nKCkiLCAid2VsbGNvbWUiKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJp
bmcoIndpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIiwgIiIpOwotCiAgICAgLy8gU2Vs
ZWN0IHRoZSBtaXNzcGVsbGVkIHdvcmQgd2l0aG91dCBzdXJyb3VuZGluZyB3aGl0ZXNwYWNlIG9y
IHB1bmN0dWF0aW9uLgotICAgIHZhciB3b3JkUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgp
OwotICAgIHdvcmRSYW5nZS5zZXRTdGFydCh0ZXh0Tm9kZSwgMCk7Ci0gICAgd29yZFJhbmdlLnNl
dEVuZCh0ZXh0Tm9kZSwgOCk7Ci0gICAgd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJh
bmdlcygpOwotICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5hZGRSYW5nZSh3b3JkUmFuZ2UpOwot
Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJp
bmcoKSIsICJ3ZWxsY29tZSIpOworICAgIHNlbGVjdFRleHQodGV4dE5vZGUsIDAsIDgpOwogCiAg
ICAgLy8gQ29udGV4dCBjbGljayBvbiAid2VsbGNvbWUiIHRvIHNob3cgdGhlIGNvbnRleHQgbWVu
dS4KLSAgICB2YXIgeCA9IGRlc3RpbmF0aW9uLm9mZnNldFBhcmVudC5vZmZzZXRMZWZ0ICsgZGVz
dGluYXRpb24ub2Zmc2V0TGVmdCArIDQwOwotICAgIHZhciB5ID0gZGVzdGluYXRpb24ub2Zmc2V0
UGFyZW50Lm9mZnNldFRvcCArIGRlc3RpbmF0aW9uLm9mZnNldFRvcCArIGRlc3RpbmF0aW9uLm9m
ZnNldEhlaWdodCAvIDI7Ci0gICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oeCwgeSk7Ci0gICAg
Y29udGV4dE1lbnVFbGVtZW50cyA9IGV2ZW50U2VuZGVyLmNvbnRleHRDbGljaygpOwotICAgIC8v
IEVzYyBrZXkgdG8gaGlkZSB0aGUgY29udGV4dCBtZW51LgotICAgIGV2ZW50U2VuZGVyLmtleURv
d24oU3RyaW5nLmZyb21DaGFyQ29kZSgweDAwMUIpLCBudWxsKTsKLQotICAgIHNwZWxsaW5nTWFy
a2VyUmFuZ2UgPSBpbnRlcm5hbHMubWFya2VyUmFuZ2VGb3JOb2RlKHRleHROb2RlLCAic3BlbGxp
bmciLCAwKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInNwZWxsaW5nTWFya2VyUmFuZ2Uu
dG9TdHJpbmcoKSIsICJ3ZWxsY29tZSIpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2lu
ZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkiLCAid2VsbGNvbWUiKTsKKyAgICB2YXIgZGVz
dGluYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGVzdGluYXRpb24iKTsKKyAgICBj
b250ZXh0TWVudUVsZW1lbnRzID0gY29udGV4dENsaWNrKGRlc3RpbmF0aW9uLCA0MCk7CiAgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJjb250ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRNZW51RWxl
bWVudHMubGVuZ3RoIC0gMV0iLCAid2VsY29tZSIpOwogICAgIAogICAgIC8vIFNlbGVjdCBhIGNv
cnJlY3RseSBzcGVsbGVkIHdvcmQgd2l0aG91dCBzdXJyb3VuZGluZyB3aGl0ZXNwYWNlIG9yIHB1
bmN0dWF0aW9uLgotICAgIHdvcmRSYW5nZS5zZXRTdGFydCh0ZXh0Tm9kZSwgOSk7Ci0gICAgd29y
ZFJhbmdlLnNldEVuZCh0ZXh0Tm9kZSwgMTMpOwotICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5y
ZW1vdmVBbGxSYW5nZXMoKTsKLSAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuYWRkUmFuZ2Uod29y
ZFJhbmdlKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5nZXRTZWxlY3Rpb24o
KS50b1N0cmluZygpIiwgImhvbWUiKTsKKyAgICBzZWxlY3RUZXh0KHRleHROb2RlLCA5LCAxMyk7
CiAKICAgICAvLyBDb250ZXh0IGNsaWNrIG9uICJob21lIiB0byBzaG93IHRoZSBjb250ZXh0IG1l
bnUuCi0gICAgdmFyIHggPSBkZXN0aW5hdGlvbi5vZmZzZXRQYXJlbnQub2Zmc2V0TGVmdCArIGRl
c3RpbmF0aW9uLm9mZnNldExlZnQgKyA4MDsKLSAgICB2YXIgeSA9IGRlc3RpbmF0aW9uLm9mZnNl
dFBhcmVudC5vZmZzZXRUb3AgKyBkZXN0aW5hdGlvbi5vZmZzZXRUb3AgKyBkZXN0aW5hdGlvbi5v
ZmZzZXRIZWlnaHQgLyAyOwotICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHgsIHkpOwotICAg
IGNvbnRleHRNZW51RWxlbWVudHMgPSBldmVudFNlbmRlci5jb250ZXh0Q2xpY2soKTsKLSAgICAv
LyBFc2Mga2V5IHRvIGhpZGUgdGhlIGNvbnRleHQgbWVudS4KLSAgICBldmVudFNlbmRlci5rZXlE
b3duKFN0cmluZy5mcm9tQ2hhckNvZGUoMHgwMDFCKSwgbnVsbCk7Ci0KLSAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoIndpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIiwgImhvbWUiKTsK
KyAgICBjb250ZXh0TWVudUVsZW1lbnRzID0gY29udGV4dENsaWNrKGRlc3RpbmF0aW9uLCA4MCk7
CiAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJjb250ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRN
ZW51RWxlbWVudHMubGVuZ3RoIC0gMV0iLCAiPHNlcGFyYXRvcj4iKTsKIH0pOwogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLW11bHRpd29yZC1zZWxl
Y3Rpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGlu
Zy1tdWx0aXdvcmQtc2VsZWN0aW9uLWV4cGVjdGVkLnR4dAppbmRleCA5ZjBkZDJiZTA5ZjhmZWFl
YzYzMDM2Nzc1MjcyMDMxZTg2NDEwMWVlLi5iNDljOTYzNTRjZDgyZjNlZGVmYTUwMzQ3OGMyYWJk
MWIwYTI5ZTNkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxs
aW5nLW11bHRpd29yZC1zZWxlY3Rpb24tZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Vk
aXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctbXVsdGl3b3JkLXNlbGVjdGlvbi1leHBlY3RlZC50eHQK
QEAgLTMsMTEgKzMsOSBAQCBTcGVsbGluZyBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiB1c2VyIHNl
bGVjdHMgbXVsdGlwbGUgd29yZHMgdGhhdCBhcmUgbm90IGEgc2luZwogT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgogCiAKLVBBU1Mgc3BlbGxpbmdNYXJrZXJSYW5nZS50b1N0cmluZygpIGlzICJ3
ZWxsY29tZSIKLVBBU1Mgd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgaXMgIiIKLVBB
U1Mgd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgaXMgIndlbGxjb21lIGhvbWUiCi1Q
QVNTIHNwZWxsaW5nTWFya2VyUmFuZ2UudG9TdHJpbmcoKSBpcyAid2VsbGNvbWUiCi1QQVNTIHdp
bmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIGlzICJ3ZWxsY29tZSBob21lIgorUEFTUyBj
b250ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMubGVuZ3RoIC0gMV0gaXMgIjxz
ZXBhcmF0b3I+IgorUEFTUyBjb250ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMu
bGVuZ3RoIC0gMV0gaXMgIjxzZXBhcmF0b3I+IgorUEFTUyBjb250ZXh0TWVudUVsZW1lbnRzW2Nv
bnRleHRNZW51RWxlbWVudHMubGVuZ3RoIC0gMV0gaXMgIjxzZXBhcmF0b3I+IgogUEFTUyBjb250
ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMubGVuZ3RoIC0gMV0gaXMgIjxzZXBh
cmF0b3I+IgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLW11bHRpd29yZC1zZWxlY3Rpb24u
aHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctbXVsdGl3b3JkLXNl
bGVjdGlvbi5odG1sCmluZGV4IGUwMjdiOTdiYzcxNGMxZDhkMGM2MGUwNzI4OTI4MDQzNDE2NDZi
ZTkuLmJkNWE5MmZiOTdmMGIxMmE1YzcxNTdiOGZhODhmODNkZmRjMmY4MDYgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctbXVsdGl3b3JkLXNlbGVjdGlv
bi5odG1sCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctbXVsdGl3
b3JkLXNlbGVjdGlvbi5odG1sCkBAIC0xMSwzNSArMTEsMTcgQEAKIAogPHNjcmlwdD4KIAotZGVz
Y3JpcHRpb24oIlNwZWxsaW5nIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHVzZXIgc2VsZWN0cyBt
dWx0aXBsZSB3b3JkcyB0aGF0IGFyZSBub3QgYSBzaW5nbGUgbWlzc3BlbGxpbmcuICIgKwotICAg
ICAgICAgICAgIlRvIHRlc3QgbWFudWFsbHksIHR5cGUgJ3dlbGxjb21lIGhvbWUuJywgc2VsZWN0
ICd3ZWxsY29tZSBob21lJywgYW5kIGNvbnRleHQtY2xpY2sgb24gdGhlIHNlbGVjdGlvbi4gIiAr
Ci0gICAgICAgICAgICAiVGhlIHRlc3Qgc3VjZWVkcyB3aGVuIHRoZSBjb250ZXh0IG1lbnUgaGFz
IG5vIHNwZWxsIGNoZWNrIHN1Z2dlc3Rpb25zLiIpOworZGVzY3JpcHRpb24oIlNwZWxsaW5nIHNo
b3VsZCBiZSBkaXNhYmxlZCB3aGVuIHVzZXIgc2VsZWN0cyBtdWx0aXBsZSB3b3JkcyB0aGF0IGFy
ZSBub3QgYSBzaW5nbGUgbWlzc3BlbGxpbmcuIgorICAgICsgIiBUbyB0ZXN0IG1hbnVhbGx5LCB0
eXBlICd3ZWxsY29tZSBob21lLicsIHNlbGVjdCAnd2VsbGNvbWUgaG9tZScsIGFuZCBjb250ZXh0
LWNsaWNrIG9uIHRoZSBzZWxlY3Rpb24uIgorICAgICsgIiBUaGUgdGVzdCBzdWNlZWRzIHdoZW4g
dGhlIGNvbnRleHQgbWVudSBoYXMgbm8gc3BlbGwgY2hlY2sgc3VnZ2VzdGlvbnMuIik7CiAKIGlu
aXRTcGVsbFRlc3QoImRlc3RpbmF0aW9uIiwgIndlbGxjb21lIGhvbWUuIiwgZnVuY3Rpb24odGV4
dE5vZGUpIHsKLSAgICBzcGVsbGluZ01hcmtlclJhbmdlID0gaW50ZXJuYWxzLm1hcmtlclJhbmdl
Rm9yTm9kZSh0ZXh0Tm9kZSwgInNwZWxsaW5nIiwgMCk7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJzcGVsbGluZ01hcmtlclJhbmdlLnRvU3RyaW5nKCkiLCAid2VsbGNvbWUiKTsKLSAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIiwg
IiIpOwotCiAgICAgLy8gU2VsZWN0IHRoZSB0ZXh0ICJ3ZWxsY29tZSBob21lIi4KLSAgICB2YXIg
bXVsdGlXb3JkUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgIG11bHRpV29yZFJh
bmdlLnNldFN0YXJ0KHRleHROb2RlLCAwKTsKLSAgICBtdWx0aVdvcmRSYW5nZS5zZXRFbmQodGV4
dE5vZGUsIDEzKTsKLSAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7
Ci0gICAgd2luZG93LmdldFNlbGVjdGlvbigpLmFkZFJhbmdlKG11bHRpV29yZFJhbmdlKTsKLQot
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5n
KCkiLCAid2VsbGNvbWUgaG9tZSIpOworICAgIHNlbGVjdFRleHQodGV4dE5vZGUsIDAsIDEzKTsK
IAogICAgIC8vIENvbnRleHQgY2xpY2sgdG8gc2hvdyB0aGUgY29udGV4dCBtZW51LgotICAgIHZh
ciB4ID0gZGVzdGluYXRpb24ub2Zmc2V0UGFyZW50Lm9mZnNldExlZnQgKyBkZXN0aW5hdGlvbi5v
ZmZzZXRMZWZ0ICsgNDA7Ci0gICAgdmFyIHkgPSBkZXN0aW5hdGlvbi5vZmZzZXRQYXJlbnQub2Zm
c2V0VG9wICsgZGVzdGluYXRpb24ub2Zmc2V0VG9wICsgZGVzdGluYXRpb24ub2Zmc2V0SGVpZ2h0
IC8gMjsKLSAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsKLSAgICBjb250ZXh0TWVu
dUVsZW1lbnRzID0gZXZlbnRTZW5kZXIuY29udGV4dENsaWNrKCk7Ci0gICAgLy8gRXNjIGtleSB0
byBoaWRlIHRoZSBjb250ZXh0IG1lbnUuCi0gICAgZXZlbnRTZW5kZXIua2V5RG93bihTdHJpbmcu
ZnJvbUNoYXJDb2RlKDB4MDAxQiksIG51bGwpOwotCi0gICAgc3BlbGxpbmdNYXJrZXJSYW5nZSA9
IGludGVybmFscy5tYXJrZXJSYW5nZUZvck5vZGUodGV4dE5vZGUsICJzcGVsbGluZyIsIDApOwot
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygic3BlbGxpbmdNYXJrZXJSYW5nZS50b1N0cmluZygp
IiwgIndlbGxjb21lIik7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKCkudG9TdHJpbmcoKSIsICJ3ZWxsY29tZSBob21lIik7CisgICAgdmFyIGRlc3RpbmF0
aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRlc3RpbmF0aW9uIik7CisgICAgY29udGV4
dE1lbnVFbGVtZW50cyA9IGNvbnRleHRDbGljayhkZXN0aW5hdGlvbiwgNDApOwogICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygiY29udGV4dE1lbnVFbGVtZW50c1tjb250ZXh0TWVudUVsZW1lbnRz
Lmxlbmd0aCAtIDFdIiwgIjxzZXBhcmF0b3I+Iik7CiB9KTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1zaG91bGQtc2VsZWN0LW11bHRpcGxlLXdv
cmRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmct
c2hvdWxkLXNlbGVjdC1tdWx0aXBsZS13b3Jkcy1leHBlY3RlZC50eHQKaW5kZXggZTQ3ZGVkYjkw
Y2VkYjcwM2M2ODE5ZWFiMDM3OTBkNjMyMDRhMjE4Ny4uMzEzZDYzNDdmNTMwMWM1YjVhODk4ZWEy
NGVmYTc4OGYwNTYxYmE0MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGlu
Zy9zcGVsbGluZy1zaG91bGQtc2VsZWN0LW11bHRpcGxlLXdvcmRzLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLXNob3VsZC1zZWxlY3QtbXVs
dGlwbGUtd29yZHMtZXhwZWN0ZWQudHh0CkBAIC0zLDExICszLDggQEAgU3BlbGwgY2hlY2sgc2hv
dWxkIHNlbGVjdCBtdWx0aS13b3JkIG1pc3NwZWxsaW5ncyBvbiBjb250ZXh0IGNsaWNrLiBUbyB0
ZXN0IG1hbnUKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1QQVNTIHNwZWxsaW5nTWFy
a2VyUmFuZ2UudG9TdHJpbmcoKSBpcyAidXBwZXIgY2FzZSIKLVBBU1Mgd2luZG93LmdldFNlbGVj
dGlvbigpLnRvU3RyaW5nKCkgaXMgIiIKLVBBU1Mgc3BlbGxpbmdNYXJrZXJSYW5nZS50b1N0cmlu
ZygpIGlzICJ1cHBlciBjYXNlIgotUEFTUyB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmco
KSBpcyAidXBwZXIgY2FzZSIKIFBBU1MgY29udGV4dE1lbnVFbGVtZW50c1tjb250ZXh0TWVudUVs
ZW1lbnRzLmxlbmd0aCAtIDFdIGlzICJ1cHBlcmNhc2UiCitQQVNTIHdpbmRvdy5nZXRTZWxlY3Rp
b24oKS50b1N0cmluZygpIGlzICJ1cHBlciBjYXNlIgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5n
L3NwZWxsaW5nL3NwZWxsaW5nLXNob3VsZC1zZWxlY3QtbXVsdGlwbGUtd29yZHMuaHRtbCBiL0xh
eW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctc2hvdWxkLXNlbGVjdC1tdWx0aXBs
ZS13b3Jkcy5odG1sCmluZGV4IGQ5ZDVjMmMwODk3ZWFhNmVhMjllZWMxZjRkOTY2YTQ0NWM5YTQx
YmIuLjVmNzIyMWMwMTg1MzM4MzExMjdmMjVjY2I4ODBlOWRkZmIyNjdlMmMgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctc2hvdWxkLXNlbGVjdC1tdWx0
aXBsZS13b3Jkcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxp
bmctc2hvdWxkLXNlbGVjdC1tdWx0aXBsZS13b3Jkcy5odG1sCkBAIC0xMCwyNyArMTAsMjEgQEAK
IDwvZGl2PgogPHNjcmlwdD4KIAotZGVzY3JpcHRpb24oIlNwZWxsIGNoZWNrIHNob3VsZCBzZWxl
Y3QgbXVsdGktd29yZCBtaXNzcGVsbGluZ3Mgb24gY29udGV4dCBjbGljay4gIisKLSAgICAgICAg
ICAgICJUbyB0ZXN0IG1hbnVhbGx5LCBlbmFibGUgJ0FzayBHb29nbGUgZm9yIFN1Z2dlc3Rpb25z
JyBpbiBDaHJvbWUsIHR5cGUgJ0l0IHNob3VsZCBiZSB1cHBlciBjYXNlLicsIGFuZCBjb250ZXh0
LWNsaWNrIG9uIHRoZSB3b3JkICd1cHBlcicuICIgKwotICAgICAgICAgICAgIlRoZSB0ZXN0IHN1
Y2NlZWRzIHdoZW4gJ3VwcGVyIGNhc2UnIHdhcyBzZWxlY3RlZCBhZnRlciBjb250ZXh0IGNsaWNr
LiIpOworZGVzY3JpcHRpb24oIlNwZWxsIGNoZWNrIHNob3VsZCBzZWxlY3QgbXVsdGktd29yZCBt
aXNzcGVsbGluZ3Mgb24gY29udGV4dCBjbGljay4iCisgICAgKyAiIFRvIHRlc3QgbWFudWFsbHks
IGVuYWJsZSAnQXNrIEdvb2dsZSBmb3IgU3VnZ2VzdGlvbnMnIGluIENocm9tZSwgdHlwZSAnSXQg
c2hvdWxkIGJlIHVwcGVyIGNhc2UuJywgYW5kIGNvbnRleHQtY2xpY2sgb24gdGhlIHdvcmQgJ3Vw
cGVyJy4iCisgICAgKyAiIFRoZSB0ZXN0IHN1Y2NlZWRzIHdoZW4gJ3VwcGVyIGNhc2UnIHdhcyBz
ZWxlY3RlZCBhZnRlciBjb250ZXh0IGNsaWNrLiIpOwogCiBpbml0U3BlbGxUZXN0KCJkZXN0aW5h
dGlvbiIsICJJdCBzaG91bGQgYmUgdXBwZXIgY2FzZS4iLCBmdW5jdGlvbih0ZXh0Tm9kZSkgewor
ICAgIC8vIEEgbXVsdGktd29yZCBtaXNzcGVsbGluZyBjYW4gYmUgc2VsZWN0ZWQgb25seSB3aXRo
IHNwZWxsaW5nIG1hcmtlcnMuCiAgICAgc3BlbGxpbmdNYXJrZXJSYW5nZSA9IGludGVybmFscy5t
YXJrZXJSYW5nZUZvck5vZGUodGV4dE5vZGUsICJzcGVsbGluZyIsIDApOwotICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygic3BlbGxpbmdNYXJrZXJSYW5nZS50b1N0cmluZygpIiwgInVwcGVyIGNh
c2UiKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5nZXRTZWxlY3Rpb24oKS50
b1N0cmluZygpIiwgIiIpOworICAgIGlmICghc3BlbGxpbmdNYXJrZXJSYW5nZSkKKyAgICAgICAg
cmV0dXJuOwogCi0gICAgLy8gQ29udGV4dCBjbGljayBvbiAidXBwZXIgY2FzZSIgdG8gc2hvdyB0
aGUgY29udGV4dCBtZW51LgotICAgIHZhciB4ID0gZGVzdGluYXRpb24ub2Zmc2V0UGFyZW50Lm9m
ZnNldExlZnQgKyBkZXN0aW5hdGlvbi5vZmZzZXRMZWZ0ICsgMTAwOwotICAgIHZhciB5ID0gZGVz
dGluYXRpb24ub2Zmc2V0UGFyZW50Lm9mZnNldFRvcCArIGRlc3RpbmF0aW9uLm9mZnNldFRvcCAr
IGRlc3RpbmF0aW9uLm9mZnNldEhlaWdodCAvIDI7Ci0gICAgZXZlbnRTZW5kZXIubW91c2VNb3Zl
VG8oeCwgeSk7Ci0gICAgY29udGV4dE1lbnVFbGVtZW50cyA9IGV2ZW50U2VuZGVyLmNvbnRleHRD
bGljaygpOwotICAgIC8vIEVzYyBrZXkgdG8gaGlkZSB0aGUgY29udGV4dCBtZW51LgotICAgIGV2
ZW50U2VuZGVyLmtleURvd24oU3RyaW5nLmZyb21DaGFyQ29kZSgweDAwMUIpLCBudWxsKTsKLQot
ICAgIHNwZWxsaW5nTWFya2VyUmFuZ2UgPSBpbnRlcm5hbHMubWFya2VyUmFuZ2VGb3JOb2RlKHRl
eHROb2RlLCAic3BlbGxpbmciLCAwKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInNwZWxs
aW5nTWFya2VyUmFuZ2UudG9TdHJpbmcoKSIsICJ1cHBlciBjYXNlIik7Ci0gICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCJ3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSIsICJ1cHBlciBj
YXNlIik7CisgICAgLy8gQ29udGV4dCBjbGljayBvbiAidXBwZXIiIHRvIHNob3cgdGhlIGNvbnRl
eHQgbWVudS4KKyAgICB2YXIgZGVzdGluYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
ZGVzdGluYXRpb24iKTsKKyAgICBjb250ZXh0TWVudUVsZW1lbnRzID0gY29udGV4dENsaWNrKGRl
c3RpbmF0aW9uLCAxMDApOwogICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiY29udGV4dE1lbnVF
bGVtZW50c1tjb250ZXh0TWVudUVsZW1lbnRzLmxlbmd0aCAtIDFdIiwgInVwcGVyY2FzZSIpOwor
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5n
KCkiLCAidXBwZXIgY2FzZSIpOwogfSk7CiAKIDwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1zaG91bGQtc2VsZWN0LXNpbmdsZS13b3Jk
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctc2hv
dWxkLXNlbGVjdC1zaW5nbGUtd29yZC1leHBlY3RlZC50eHQKaW5kZXggNmE4ZDA4NjZhMzM3ODgw
ZDE5ZGVhNGIyY2ExYzg4M2ZjYmVjMjEyYi4uM2VlZjRlNzE0M2U3MjA5NmQ2NDY1ZGFiODJmMDdi
OTUxYjI0ZjIzOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVs
bGluZy1zaG91bGQtc2VsZWN0LXNpbmdsZS13b3JkLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLXNob3VsZC1zZWxlY3Qtc2luZ2xlLXdvcmQt
ZXhwZWN0ZWQudHh0CkBAIC0xLDE2ICsxLDIwIEBACi1TcGVsbCBjaGVjayBzZWxlY3RzIHRoZSBt
aXNzcGVsbGVkIHdvcmQgb24gY29udGV4dCBjbGljay4gVG8gdGVzdCBtYW51YWxseSwgdHlwZSAn
d2VsbGNvbWUgaG9tZS4nIGFuZCBjb250ZXh0LWNsaWNrIG9uICd3ZWxsY29tZScuIFRoZSB0ZXN0
IHN1Y2NlZWRzIHdoZW4gJ3dlbGxjb21lJyBpcyBzZWxlY3RlZCBhZnRlciB0aGUgY29udGV4dCBj
bGljay4KK1NwZWxsIGNoZWNrIHNlbGVjdHMgd29yZHMgb24gY29udGV4dCBjbGljay4gVG8gdGVz
dCBtYW51YWxseSwgdHlwZSAnd2VsbGNvbWUgaG9tZS4nIGFuZCBjb250ZXh0LWNsaWNrIG9uICd3
ZWxsY29tZScuIFRoZSB0ZXN0IHN1Y2NlZWRzIHdoZW4gJ3dlbGxjb21lJyBpcyBzZWxlY3RlZCBh
ZnRlciB0aGUgY29udGV4dCBjbGljay4KIAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAK
LVBBU1Mgc3BlbGxpbmdNYXJrZXJSYW5nZS50b1N0cmluZygpIGlzICJ3ZWxsY29tZSIKK1BBU1Mg
d2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgaXMgIndlbGxjb21lIgorUEFTUyB3aW5k
b3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSBpcyAiaG9tZSIKK1BBU1Mgd2luZG93LmdldFNl
bGVjdGlvbigpLnRvU3RyaW5nKCkgaXMgIiIKK1BBU1Mgd2luZG93LmdldFNlbGVjdGlvbigpLnRv
U3RyaW5nKCkgaXMgIndlbGxjb21lIgorUEFTUyB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJp
bmcoKSBpcyAiaG9tZSIKIFBBU1Mgd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgaXMg
IiIKLVBBU1Mgc3BlbGxpbmdNYXJrZXJSYW5nZS50b1N0cmluZygpIGlzICJ3ZWxsY29tZSIKIFBB
U1Mgd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgaXMgIndlbGxjb21lIgotUEFTUyBj
b250ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMubGVuZ3RoIC0gMV0gaXMgIndl
bGNvbWUiCitQQVNTIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIGlzICJob21lIgog
UEFTUyB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSBpcyAiIgorUEFTUyB3aW5kb3cu
Z2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSBpcyAid2VsbGNvbWUiCitQQVNTIHdpbmRvdy5nZXRT
ZWxlY3Rpb24oKS50b1N0cmluZygpIGlzICJob21lIgogUEFTUyB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkudG9TdHJpbmcoKSBpcyAiIgotUEFTUyBjb250ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRNZW51
RWxlbWVudHMubGVuZ3RoIC0gMV0gaXMgIjxzZXBhcmF0b3I+IgogUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9l
ZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLXNob3VsZC1zZWxlY3Qtc2luZ2xlLXdvcmQuaHRtbCBi
L0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctc2hvdWxkLXNlbGVjdC1zaW5n
bGUtd29yZC5odG1sCmluZGV4IDBiODI4NGE5NDllYTBlOTBjYjAxNGFmMDI2N2Y3NTc0YzQ4NjQ0
ZTguLmNiMjc4MWRkMzczYTgwZjRiMDU3Yzc5YThmN2RmOGZhZjY5ODFhOTkgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctc2hvdWxkLXNlbGVjdC1zaW5n
bGUtd29yZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmct
c2hvdWxkLXNlbGVjdC1zaW5nbGUtd29yZC5odG1sCkBAIC0xMSw0MiArMTEsMjMgQEAKIAogPHNj
cmlwdD4KIAotZGVzY3JpcHRpb24oIlNwZWxsIGNoZWNrIHNlbGVjdHMgdGhlIG1pc3NwZWxsZWQg
d29yZCBvbiBjb250ZXh0IGNsaWNrLiAiICsKLSAgICAgICAgICAgICJUbyB0ZXN0IG1hbnVhbGx5
LCB0eXBlICd3ZWxsY29tZSBob21lLicgYW5kIGNvbnRleHQtY2xpY2sgb24gJ3dlbGxjb21lJy4g
IiArCi0gICAgICAgICAgICAiVGhlIHRlc3Qgc3VjY2VlZHMgd2hlbiAnd2VsbGNvbWUnIGlzIHNl
bGVjdGVkIGFmdGVyIHRoZSBjb250ZXh0IGNsaWNrLiIpOworZGVzY3JpcHRpb24oIlNwZWxsIGNo
ZWNrIHNlbGVjdHMgd29yZHMgb24gY29udGV4dCBjbGljay4iCisgICAgKyAiIFRvIHRlc3QgbWFu
dWFsbHksIHR5cGUgJ3dlbGxjb21lIGhvbWUuJyBhbmQgY29udGV4dC1jbGljayBvbiAnd2VsbGNv
bWUnLiIKKyAgICArICIgVGhlIHRlc3Qgc3VjY2VlZHMgd2hlbiAnd2VsbGNvbWUnIGlzIHNlbGVj
dGVkIGFmdGVyIHRoZSBjb250ZXh0IGNsaWNrLiIpOwogCiBpbml0U3BlbGxUZXN0KCJkZXN0aW5h
dGlvbiIsICJ3ZWxsY29tZSBob21lLiIsIGZ1bmN0aW9uKHRleHROb2RlKSB7Ci0gICAgc3BlbGxp
bmdNYXJrZXJSYW5nZSA9IGludGVybmFscy5tYXJrZXJSYW5nZUZvck5vZGUodGV4dE5vZGUsICJz
cGVsbGluZyIsIDApOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygic3BlbGxpbmdNYXJrZXJS
YW5nZS50b1N0cmluZygpIiwgIndlbGxjb21lIik7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCJ3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSIsICIiKTsKLQogICAgIC8vIENvbnRl
eHQgY2xpY2sgb24gIndlbGxjb21lIiB0byBzaG93IHRoZSBjb250ZXh0IG1lbnUuCi0gICAgdmFy
IHggPSBkZXN0aW5hdGlvbi5vZmZzZXRQYXJlbnQub2Zmc2V0TGVmdCArIGRlc3RpbmF0aW9uLm9m
ZnNldExlZnQgKyA0MDsKLSAgICB2YXIgeSA9IGRlc3RpbmF0aW9uLm9mZnNldFBhcmVudC5vZmZz
ZXRUb3AgKyBkZXN0aW5hdGlvbi5vZmZzZXRUb3AgKyBkZXN0aW5hdGlvbi5vZmZzZXRIZWlnaHQg
LyAyOwotICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHgsIHkpOwotICAgIGNvbnRleHRNZW51
RWxlbWVudHMgPSBldmVudFNlbmRlci5jb250ZXh0Q2xpY2soKTsKLSAgICAvLyBFc2Mga2V5IHRv
IGhpZGUgdGhlIGNvbnRleHQgbWVudS4KLSAgICBldmVudFNlbmRlci5rZXlEb3duKFN0cmluZy5m
cm9tQ2hhckNvZGUoMHgwMDFCKSwgbnVsbCk7Ci0KLSAgICBzcGVsbGluZ01hcmtlclJhbmdlID0g
aW50ZXJuYWxzLm1hcmtlclJhbmdlRm9yTm9kZSh0ZXh0Tm9kZSwgInNwZWxsaW5nIiwgMCk7Ci0g
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJzcGVsbGluZ01hcmtlclJhbmdlLnRvU3RyaW5nKCki
LCAid2VsbGNvbWUiKTsKKyAgICB2YXIgZGVzdGluYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiZGVzdGluYXRpb24iKTsKKyAgICBjb250ZXh0Q2xpY2soZGVzdGluYXRpb24sIDQwKTsK
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmlu
ZygpIiwgIndlbGxjb21lIik7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJjb250ZXh0TWVu
dUVsZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMubGVuZ3RoIC0gMV0iLCAid2VsY29tZSIpOwot
Ci0gICAgd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpOwotICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygid2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkiLCAiIik7
CiAKICAgICAvLyBDb250ZXh0IGNsaWNrIG9uICJob21lIiB0byBzaG93IHRoZSBjb250ZXh0IG1l
bnUuCi0gICAgdmFyIHggPSBkZXN0aW5hdGlvbi5vZmZzZXRQYXJlbnQub2Zmc2V0TGVmdCArIGRl
c3RpbmF0aW9uLm9mZnNldExlZnQgKyA4MDsKLSAgICB2YXIgeSA9IGRlc3RpbmF0aW9uLm9mZnNl
dFBhcmVudC5vZmZzZXRUb3AgKyBkZXN0aW5hdGlvbi5vZmZzZXRUb3AgKyBkZXN0aW5hdGlvbi5v
ZmZzZXRIZWlnaHQgLyAyOwotICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHgsIHkpOwotICAg
IGNvbnRleHRNZW51RWxlbWVudHMgPSBldmVudFNlbmRlci5jb250ZXh0Q2xpY2soKTsKLSAgICAv
LyBFc2Mga2V5IHRvIGhpZGUgdGhlIGNvbnRleHQgbWVudS4KLSAgICBldmVudFNlbmRlci5rZXlE
b3duKFN0cmluZy5mcm9tQ2hhckNvZGUoMHgwMDFCKSwgbnVsbCk7CisgICAgY29udGV4dENsaWNr
KGRlc3RpbmF0aW9uLCA4MCk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuZ2V0
U2VsZWN0aW9uKCkudG9TdHJpbmcoKSIsICJob21lIik7CiAKLSAgICAvLyBDb250ZXh0IGNsaWNr
IHNob3VsZCBub3Qgc2VsZWN0IGNvcnJlY3RseSBzcGVsbGVkIHdvcmRzIHdpdGggIndpbiIgZWRp
dGluZyBiZWhhdmlvci4KKyAgICAvLyBDb250ZXh0IGNsaWNrIG9uIHdoaXRlc3BhY2UgdG8gc2hv
dyB0aGUgY29udGV4dCBtZW51LgorICAgIGNvbnRleHRDbGljayhkZXN0aW5hdGlvbiwgMTAwKTsK
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmlu
ZygpIiwgIiIpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiY29udGV4dE1lbnVFbGVtZW50
c1tjb250ZXh0TWVudUVsZW1lbnRzLmxlbmd0aCAtIDFdIiwgIjxzZXBhcmF0b3I+Iik7CiB9KTsK
IAogPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3Nw
ZWxsaW5nLXN1YndvcmQtc2VsZWN0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRp
bmcvc3BlbGxpbmcvc3BlbGxpbmctc3Vid29yZC1zZWxlY3Rpb24tZXhwZWN0ZWQudHh0CmluZGV4
IDA5N2VlNzZlYTE0YTUwNWZkOTRmZjg2ODg0MGI5ZjczMmQ1YTViMDkuLmRmZTVjOWRiNzIyZjdk
NzM3MDE4MDI4MGMyYzVkZTI5NjA1NDdhMDcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2VkaXRp
bmcvc3BlbGxpbmcvc3BlbGxpbmctc3Vid29yZC1zZWxlY3Rpb24tZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctc3Vid29yZC1zZWxlY3Rpb24t
ZXhwZWN0ZWQudHh0CkBAIC0xLDE1ICsxLDI1IEBACi1TcGVsbGluZyBzaG91bGQgYmUgZGlzYWJs
ZWQgd2hlbiB1c2VyIHNlbGVjdHMgYSBwYXJ0IG9mIG1pc3NwZWxsaW5nLiBUbyB0ZXN0IG1hbnVh
bGx5LCB0eXBlICd3ZWxsY29tZSBob21lLicgc2VsZWN0ICdsbGNvJywgYW5kIGNvbnRleHQtY2xp
Y2sgb24gdGhlIHNlbGVjdGlvbi4gVGhlIHRlc3Qgc3VjZWVkcyB3aGVuIHRoZSBjb250ZXh0IG1l
bnUgaGFzIG5vIHNwZWxsIGNoZWNrIHN1Z2dlc3Rpb25zLgorU3BlbGxpbmcgc2hvdWxkIGJlIGRp
c2FibGVkIHdoZW4gdXNlciBzZWxlY3RzIGEgcGFydCBvZiBhIHdvcmQuVG8gdGVzdCBtYW51YWxs
eSwgdHlwZSAnd2VsbGNvbWUgc3Vid2VsbGNvbWUuJywgc2VsZWN0ICdsbGNvJyBpbiBmaXJzdCB3
b3JkIG9yICd3ZWxsY29tZScgaW4gc2Vjb25kIHdvcmQsIGFuZCBjb250ZXh0LWNsaWNrIG9uIHRo
ZSBzZWxlY3Rpb24uIFRoZSB0ZXN0IHN1Y2VlZHMgd2hlbiB0aGUgY29udGV4dCBtZW51IGhhcyBu
byBzcGVsbCBjaGVjayBzdWdnZXN0aW9ucy4KIAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgog
CiAKLVBBU1Mgc3BlbGxpbmdNYXJrZXJSYW5nZS50b1N0cmluZygpIGlzICJ3ZWxsY29tZSIKLVBB
U1Mgd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgaXMgIiIKK1BBU1MgY29udGV4dE1l
bnVFbGVtZW50c1tjb250ZXh0TWVudUVsZW1lbnRzLmxlbmd0aCAtIDFdIGlzICI8c2VwYXJhdG9y
PiIKIFBBU1Mgd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgaXMgImxsY28iCi1QQVNT
IHNwZWxsaW5nTWFya2VyUmFuZ2UudG9TdHJpbmcoKSBpcyAid2VsbGNvbWUiCitQQVNTIGNvbnRl
eHRNZW51RWxlbWVudHNbY29udGV4dE1lbnVFbGVtZW50cy5sZW5ndGggLSAxXSBpcyAiPHNlcGFy
YXRvcj4iCitQQVNTIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIGlzICJ3ZWxsY29t
ZSIKK1BBU1MgY29udGV4dE1lbnVFbGVtZW50c1tjb250ZXh0TWVudUVsZW1lbnRzLmxlbmd0aCAt
IDFdIGlzICI8c2VwYXJhdG9yPiIKK1BBU1Mgd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5n
KCkgaXMgImxsY28iCitQQVNTIGNvbnRleHRNZW51RWxlbWVudHNbY29udGV4dE1lbnVFbGVtZW50
cy5sZW5ndGggLSAxXSBpcyAiPHNlcGFyYXRvcj4iCitQQVNTIHdpbmRvdy5nZXRTZWxlY3Rpb24o
KS50b1N0cmluZygpIGlzICJ3ZWxsY29tZSIKK1BBU1MgY29udGV4dE1lbnVFbGVtZW50c1tjb250
ZXh0TWVudUVsZW1lbnRzLmxlbmd0aCAtIDFdIGlzICI8c2VwYXJhdG9yPiIKK1BBU1Mgd2luZG93
LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgaXMgImxsY28iCitQQVNTIGNvbnRleHRNZW51RWxl
bWVudHNbY29udGV4dE1lbnVFbGVtZW50cy5sZW5ndGggLSAxXSBpcyAiPHNlcGFyYXRvcj4iCitQ
QVNTIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIGlzICJ3ZWxsY29tZSIKK1BBU1Mg
Y29udGV4dE1lbnVFbGVtZW50c1tjb250ZXh0TWVudUVsZW1lbnRzLmxlbmd0aCAtIDFdIGlzICI8
c2VwYXJhdG9yPiIKIFBBU1Mgd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgaXMgImxs
Y28iCiBQQVNTIGNvbnRleHRNZW51RWxlbWVudHNbY29udGV4dE1lbnVFbGVtZW50cy5sZW5ndGgg
LSAxXSBpcyAiPHNlcGFyYXRvcj4iCitQQVNTIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmlu
ZygpIGlzICJ3ZWxsY29tZSIKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVT
VCBDT01QTEVURQotd2VsbGNvbWUgaG9tZS4KK3dlbGxjb21lIHN1YndlbGxjb21lLgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1zdWJ3b3JkLXNlbGVj
dGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1zdWJ3b3Jk
LXNlbGVjdGlvbi5odG1sCmluZGV4IGY5YmM4NWRhYzJhOTgzMGEzZjE2NGU3NGQ3YjE1M2YwNjAx
OGVkZjMuLjYzYmJiMGYzNTJlNmNjZGY1NTY4M2U2YjJkNzM0YmFmMzdmOTA0YjIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctc3Vid29yZC1zZWxlY3Rp
b24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLXN1Yndv
cmQtc2VsZWN0aW9uLmh0bWwKQEAgLTExLDM2ICsxMSwyNyBAQAogCiA8c2NyaXB0PgogCi1kZXNj
cmlwdGlvbigiU3BlbGxpbmcgc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gdXNlciBzZWxlY3RzIGEg
cGFydCBvZiBtaXNzcGVsbGluZy4gIiArCi0gICAgICAgICAgICAiVG8gdGVzdCBtYW51YWxseSwg
dHlwZSAnd2VsbGNvbWUgaG9tZS4nIHNlbGVjdCAnbGxjbycsIGFuZCBjb250ZXh0LWNsaWNrIG9u
IHRoZSBzZWxlY3Rpb24uICIgKwotICAgICAgICAgICAgIlRoZSB0ZXN0IHN1Y2VlZHMgd2hlbiB0
aGUgY29udGV4dCBtZW51IGhhcyBubyBzcGVsbCBjaGVjayBzdWdnZXN0aW9ucy4iKTsKK2Rlc2Ny
aXB0aW9uKCJTcGVsbGluZyBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiB1c2VyIHNlbGVjdHMgYSBw
YXJ0IG9mIGEgd29yZC4iCisgICAgKyAiVG8gdGVzdCBtYW51YWxseSwgdHlwZSAnd2VsbGNvbWUg
c3Vid2VsbGNvbWUuJywgc2VsZWN0ICdsbGNvJyBpbiBmaXJzdCB3b3JkIG9yICd3ZWxsY29tZScg
aW4gc2Vjb25kIHdvcmQsIGFuZCBjb250ZXh0LWNsaWNrIG9uIHRoZSBzZWxlY3Rpb24uIgorICAg
ICsgIiBUaGUgdGVzdCBzdWNlZWRzIHdoZW4gdGhlIGNvbnRleHQgbWVudSBoYXMgbm8gc3BlbGwg
Y2hlY2sgc3VnZ2VzdGlvbnMuIik7CiAKLWluaXRTcGVsbFRlc3QoImRlc3RpbmF0aW9uIiwgIndl
bGxjb21lIGhvbWUuIiwgZnVuY3Rpb24odGV4dE5vZGUpIHsKLSAgICBzcGVsbGluZ01hcmtlclJh
bmdlID0gaW50ZXJuYWxzLm1hcmtlclJhbmdlRm9yTm9kZSh0ZXh0Tm9kZSwgInNwZWxsaW5nIiwg
MCk7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJzcGVsbGluZ01hcmtlclJhbmdlLnRvU3Ry
aW5nKCkiLCAid2VsbGNvbWUiKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5n
ZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIiwgIiIpOwotCi0gICAgLy8gU2VsZWN0IHRoZSB0ZXh0
ICJsbGNvIi4KLSAgICB2YXIgc3ViV29yZFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsK
LSAgICBzdWJXb3JkUmFuZ2Uuc2V0U3RhcnQodGV4dE5vZGUsIDIpOwotICAgIHN1YldvcmRSYW5n
ZS5zZXRFbmQodGV4dE5vZGUsIDYpOwotICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVB
bGxSYW5nZXMoKTsKLSAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuYWRkUmFuZ2Uoc3ViV29yZFJh
bmdlKTsKK2luaXRTcGVsbFRlc3QoImRlc3RpbmF0aW9uIiwgIndlbGxjb21lIHN1YndlbGxjb21l
LiIsIGZ1bmN0aW9uKHRleHROb2RlKSB7CisgICAgLy8gU2VsZWN0IHRoZSB0ZXh0ICJsbGNvIiBp
biB0aGUgZmlyc3Qgd29yZC4KKyAgICBzZWxlY3RUZXh0KHRleHROb2RlLCAyLCA2KTsKIAorICAg
IC8vIENvbnRleHQgY2xpY2sgb24gImxsY28iIHRvIHNob3cgdGhlIGNvbnRleHQgbWVudS4KKyAg
ICB2YXIgZGVzdGluYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGVzdGluYXRpb24i
KTsKKyAgICBjb250ZXh0TWVudUVsZW1lbnRzID0gY29udGV4dENsaWNrKGRlc3RpbmF0aW9uLCA0
MCk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJjb250ZXh0TWVudUVsZW1lbnRzW2NvbnRl
eHRNZW51RWxlbWVudHMubGVuZ3RoIC0gMV0iLCAiPHNlcGFyYXRvcj4iKTsKICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIiwgImxsY28i
KTsKIAotICAgIC8vIENvbnRleHQgY2xpY2sgb24gJ2xsY28nIHRvIHNob3cgdGhlIGNvbnRleHQg
bWVudS4KLSAgICB2YXIgeCA9IGRlc3RpbmF0aW9uLm9mZnNldFBhcmVudC5vZmZzZXRMZWZ0ICsg
ZGVzdGluYXRpb24ub2Zmc2V0TGVmdCArIDQwOwotICAgIHZhciB5ID0gZGVzdGluYXRpb24ub2Zm
c2V0UGFyZW50Lm9mZnNldFRvcCArIGRlc3RpbmF0aW9uLm9mZnNldFRvcCArIGRlc3RpbmF0aW9u
Lm9mZnNldEhlaWdodCAvIDI7Ci0gICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oeCwgeSk7Ci0g
ICAgY29udGV4dE1lbnVFbGVtZW50cyA9IGV2ZW50U2VuZGVyLmNvbnRleHRDbGljaygpOwotICAg
IC8vIEVzYyBrZXkgdG8gaGlkZSB0aGUgY29udGV4dCBtZW51LgotICAgIGV2ZW50U2VuZGVyLmtl
eURvd24oU3RyaW5nLmZyb21DaGFyQ29kZSgweDAwMUIpLCBudWxsKTsKKyAgICAvLyBTZWxlY3Qg
dGhlIHRleHQgIndlbGxjb21lIiBpbiB0aGUgc2Vjb25kIHdvcmQuCisgICAgc2VsZWN0VGV4dCh0
ZXh0Tm9kZSwgMTIsIDIwKTsKIAotICAgIHNwZWxsaW5nTWFya2VyUmFuZ2UgPSBpbnRlcm5hbHMu
bWFya2VyUmFuZ2VGb3JOb2RlKHRleHROb2RlLCAic3BlbGxpbmciLCAwKTsKLSAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoInNwZWxsaW5nTWFya2VyUmFuZ2UudG9TdHJpbmcoKSIsICJ3ZWxsY29t
ZSIpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LmdldFNlbGVjdGlvbigpLnRv
U3RyaW5nKCkiLCAibGxjbyIpOworICAgIC8vIENvbnRleHQgY2xpY2sgb24gIndlbGxjb21lIiBp
biB0aGUgc2Vjb25kIHdvcmQgdG8gc2hvdyB0aGUgY29udGV4dCBtZW51LgorICAgIGNvbnRleHRN
ZW51RWxlbWVudHMgPSBjb250ZXh0Q2xpY2soZGVzdGluYXRpb24sIDEyMCk7CiAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCJjb250ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMu
bGVuZ3RoIC0gMV0iLCAiPHNlcGFyYXRvcj4iKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
IndpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIiwgIndlbGxjb21lIik7CiB9KTsKIAog
PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxs
aW5nLXdpdGgtcHVuY3R1YXRpb24tc2VsZWN0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctd2l0aC1wdW5jdHVhdGlvbi1zZWxlY3Rpb24tZXhw
ZWN0ZWQudHh0CmluZGV4IDgyMjE4MGQwZmIwMWZkNTEyZjM5ZDI5NTkxOTE3MjM5ZjZkM2Y4ZGMu
LjBkNjJkNjUyOTU4OWY2YmIzZmY1MmNjMDE4Y2MxZmRkNTA0ZTQ2MWEgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctd2l0aC1wdW5jdHVhdGlvbi1zZWxl
Y3Rpb24tZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3Bl
bGxpbmctd2l0aC1wdW5jdHVhdGlvbi1zZWxlY3Rpb24tZXhwZWN0ZWQudHh0CkBAIC0zLDExICsz
LDkgQEAgUHVuY3R1YXRpb24gbWFya3Mgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgd2hpdGVzcGFjZTog
c3BlbGxpbmcgc2hvdWxkIGlnbm9yZSB0aGVtLgogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgog
CiAKLVBBU1Mgc3BlbGxpbmdNYXJrZXJSYW5nZS50b1N0cmluZygpIGlzICJ3ZWxsY29tZSIKLVBB
U1Mgd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgaXMgIiIKLVBBU1Mgd2luZG93Lmdl
dFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgaXMgIndlbGxjb21lISIKLVBBU1Mgc3BlbGxpbmdNYXJr
ZXJSYW5nZS50b1N0cmluZygpIGlzICJ3ZWxsY29tZSIKLVBBU1Mgd2luZG93LmdldFNlbGVjdGlv
bigpLnRvU3RyaW5nKCkgaXMgIndlbGxjb21lISIKK1BBU1MgY29udGV4dE1lbnVFbGVtZW50c1tj
b250ZXh0TWVudUVsZW1lbnRzLmxlbmd0aCAtIDFdIGlzICJ3ZWxjb21lIgorUEFTUyBjb250ZXh0
TWVudUVsZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMubGVuZ3RoIC0gMV0gaXMgIndlbGNvbWUi
CitQQVNTIGNvbnRleHRNZW51RWxlbWVudHNbY29udGV4dE1lbnVFbGVtZW50cy5sZW5ndGggLSAx
XSBpcyAid2VsY29tZSIKIFBBU1MgY29udGV4dE1lbnVFbGVtZW50c1tjb250ZXh0TWVudUVsZW1l
bnRzLmxlbmd0aCAtIDFdIGlzICJ3ZWxjb21lIgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5n
LXdpdGgtcHVuY3R1YXRpb24tc2VsZWN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Nw
ZWxsaW5nL3NwZWxsaW5nLXdpdGgtcHVuY3R1YXRpb24tc2VsZWN0aW9uLmh0bWwKaW5kZXggZWI1
NjViNzBmYWUxYjY0M2JlMThiZGNkODg2ZThlNDM4MTEyZjk3Yy4uNzllNGU3MGFmZDA1Nzg2NDYw
ODViNTNmMWE0N2JlM2Q4OTg3ZDhmNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZWRpdGluZy9z
cGVsbGluZy9zcGVsbGluZy13aXRoLXB1bmN0dWF0aW9uLXNlbGVjdGlvbi5odG1sCisrKyBiL0xh
eW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctd2l0aC1wdW5jdHVhdGlvbi1zZWxl
Y3Rpb24uaHRtbApAQCAtMTEsMzUgKzExLDE3IEBACiAKIDxzY3JpcHQ+CiAKLWRlc2NyaXB0aW9u
KCJQdW5jdHVhdGlvbiBtYXJrcyBzaG91bGQgYmUgdHJlYXRlZCBhcyB3aGl0ZXNwYWNlOiBzcGVs
bGluZyBzaG91bGQgaWdub3JlIHRoZW0uICIgKwotICAgICAgICAgICAgIlRvIHRlc3QgbWFudWFs
bHksIHR5cGUgJ3dlbGxjb21lIScsIHNlbGVjdCAnd2VsbGNvbWUhJywgYW5kIGNvbnRleHQtY2xp
Y2sgb24gdGhlIHNlbGVjdGlvbi4gIiArCi0gICAgICAgICAgICAiVGhlIHRlc3Qgc3VjY2VlZHMg
d2hlbiB0aGUgY29udGV4dCBtZW51IGhhcyBzcGVsbCBjaGVjayBzdWdnZXN0aW9ucy4iKTsKK2Rl
c2NyaXB0aW9uKCJQdW5jdHVhdGlvbiBtYXJrcyBzaG91bGQgYmUgdHJlYXRlZCBhcyB3aGl0ZXNw
YWNlOiBzcGVsbGluZyBzaG91bGQgaWdub3JlIHRoZW0uIgorICAgICsgIiBUbyB0ZXN0IG1hbnVh
bGx5LCB0eXBlICd3ZWxsY29tZSEnLCBzZWxlY3QgJ3dlbGxjb21lIScsIGFuZCBjb250ZXh0LWNs
aWNrIG9uIHRoZSBzZWxlY3Rpb24uIgorICAgICsgIiBUaGUgdGVzdCBzdWNjZWVkcyB3aGVuIHRo
ZSBjb250ZXh0IG1lbnUgaGFzIHNwZWxsIGNoZWNrIHN1Z2dlc3Rpb25zLiIpOwogCiBpbml0U3Bl
bGxUZXN0KCJkZXN0aW5hdGlvbiIsICJ3ZWxsY29tZSEiLCBmdW5jdGlvbih0ZXh0Tm9kZSkgewot
ICAgIHNwZWxsaW5nTWFya2VyUmFuZ2UgPSBpbnRlcm5hbHMubWFya2VyUmFuZ2VGb3JOb2RlKHRl
eHROb2RlLCAic3BlbGxpbmciLCAwKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInNwZWxs
aW5nTWFya2VyUmFuZ2UudG9TdHJpbmcoKSIsICJ3ZWxsY29tZSIpOwotICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygid2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkiLCAiIik7Ci0KICAg
ICAvLyBTZWxlY3QgdGhlIHRleHQgIndlbGxjb21lISIgd2l0aCB0aGUgZXhjbGFtYXRpb24gbWFy
ay4KLSAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgIHJhbmdlLnNl
dFN0YXJ0KHRleHROb2RlLCAwKTsKLSAgICByYW5nZS5zZXRFbmQodGV4dE5vZGUsIDkpOwotICAg
IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTsKLSAgICB3aW5kb3cuZ2V0
U2VsZWN0aW9uKCkuYWRkUmFuZ2UocmFuZ2UpOwotCi0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCJ3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSIsICJ3ZWxsY29tZSEiKTsKKyAgICBz
ZWxlY3RUZXh0KHRleHROb2RlLCAwLCA5KTsKIAogICAgIC8vIENvbnRleHQgY2xpY2sgdG8gc2hv
dyB0aGUgY29udGV4dCBtZW51LgotICAgIHZhciB4ID0gZGVzdGluYXRpb24ub2Zmc2V0UGFyZW50
Lm9mZnNldExlZnQgKyBkZXN0aW5hdGlvbi5vZmZzZXRMZWZ0ICsgNDA7Ci0gICAgdmFyIHkgPSBk
ZXN0aW5hdGlvbi5vZmZzZXRQYXJlbnQub2Zmc2V0VG9wICsgZGVzdGluYXRpb24ub2Zmc2V0VG9w
ICsgZGVzdGluYXRpb24ub2Zmc2V0SGVpZ2h0IC8gMjsKLSAgICBldmVudFNlbmRlci5tb3VzZU1v
dmVUbyh4LCB5KTsKLSAgICBjb250ZXh0TWVudUVsZW1lbnRzID0gZXZlbnRTZW5kZXIuY29udGV4
dENsaWNrKCk7Ci0gICAgLy8gRXNjIGtleSB0byBoaWRlIHRoZSBjb250ZXh0IG1lbnUuCi0gICAg
ZXZlbnRTZW5kZXIua2V5RG93bihTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MDAxQiksIG51bGwpOwot
Ci0gICAgc3BlbGxpbmdNYXJrZXJSYW5nZSA9IGludGVybmFscy5tYXJrZXJSYW5nZUZvck5vZGUo
dGV4dE5vZGUsICJzcGVsbGluZyIsIDApOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygic3Bl
bGxpbmdNYXJrZXJSYW5nZS50b1N0cmluZygpIiwgIndlbGxjb21lIik7Ci0gICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCJ3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSIsICJ3ZWxsY29t
ZSEiKTsKKyAgICB2YXIgZGVzdGluYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGVz
dGluYXRpb24iKTsKKyAgICBjb250ZXh0TWVudUVsZW1lbnRzID0gY29udGV4dENsaWNrKGRlc3Rp
bmF0aW9uLCA0MCk7CiAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJjb250ZXh0TWVudUVsZW1l
bnRzW2NvbnRleHRNZW51RWxlbWVudHMubGVuZ3RoIC0gMV0iLCAid2VsY29tZSIpOwogfSk7CiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctd2l0aC11
bmRlcnNjb3JlLXNlbGVjdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Nw
ZWxsaW5nL3NwZWxsaW5nLXdpdGgtdW5kZXJzY29yZS1zZWxlY3Rpb24tZXhwZWN0ZWQudHh0Cmlu
ZGV4IDNlMTQ0NjFlZjFiNGFhY2FkMTU5MzNhNmI3ZTI3OGE1ZGZlZjNhZmIuLjBlM2Q5MWFjNjk0
NzQxYTJiNDg2NWZhOGI5NDdkYWUwNTVlODcwNjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Vk
aXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctd2l0aC11bmRlcnNjb3JlLXNlbGVjdGlvbi1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy13aXRoLXVu
ZGVyc2NvcmUtc2VsZWN0aW9uLWV4cGVjdGVkLnR4dApAQCAtMywxMSArMyw5IEBAIFVuZGVyc2Nv
cmVzIHNob3VsZCBiZSB0cmVhdGVkIGFzIHdoaXRlc3BhY2U6IHNwZWxsaW5nIHNob3VsZCBpZ25v
cmUgdGhlbS4gVG8gdGVzCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotUEFTUyBzcGVs
bGluZ01hcmtlclJhbmdlLnRvU3RyaW5nKCkgaXMgIndlbGxjb21lIgotUEFTUyB3aW5kb3cuZ2V0
U2VsZWN0aW9uKCkudG9TdHJpbmcoKSBpcyAiIgotUEFTUyB3aW5kb3cuZ2V0U2VsZWN0aW9uKCku
dG9TdHJpbmcoKSBpcyAiX3dlbGxjb21lXyIKLVBBU1Mgc3BlbGxpbmdNYXJrZXJSYW5nZS50b1N0
cmluZygpIGlzICJ3ZWxsY29tZSIKLVBBU1Mgd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5n
KCkgaXMgIl93ZWxsY29tZV8iCitQQVNTIGNvbnRleHRNZW51RWxlbWVudHNbY29udGV4dE1lbnVF
bGVtZW50cy5sZW5ndGggLSAxXSBpcyAid2VsY29tZSIKK1BBU1MgY29udGV4dE1lbnVFbGVtZW50
c1tjb250ZXh0TWVudUVsZW1lbnRzLmxlbmd0aCAtIDFdIGlzICJ3ZWxjb21lIgorUEFTUyBjb250
ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMubGVuZ3RoIC0gMV0gaXMgIndlbGNv
bWUiCiBQQVNTIGNvbnRleHRNZW51RWxlbWVudHNbY29udGV4dE1lbnVFbGVtZW50cy5sZW5ndGgg
LSAxXSBpcyAid2VsY29tZSIKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy13aXRoLXVuZGVy
c2NvcmUtc2VsZWN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxs
aW5nLXdpdGgtdW5kZXJzY29yZS1zZWxlY3Rpb24uaHRtbAppbmRleCBhYjAzNmJiODJiOWFmMzM0
MmNjNmNmNTU2MTk5YjMyZDcwNDhkY2Y3Li4xMWZiMzRjZTU3ZjZiZTE3ODNiZTZhMjYxYzk3YTI0
YTY1MTNkZTA3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxs
aW5nLXdpdGgtdW5kZXJzY29yZS1zZWxlY3Rpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0
aW5nL3NwZWxsaW5nL3NwZWxsaW5nLXdpdGgtdW5kZXJzY29yZS1zZWxlY3Rpb24uaHRtbApAQCAt
MTEsMzUgKzExLDE3IEBACiAKIDxzY3JpcHQ+CiAKLWRlc2NyaXB0aW9uKCJVbmRlcnNjb3JlcyBz
aG91bGQgYmUgdHJlYXRlZCBhcyB3aGl0ZXNwYWNlOiBzcGVsbGluZyBzaG91bGQgaWdub3JlIHRo
ZW0uICIgKwotICAgICAgICAgICAgIlRvIHRlc3QgbWFudWFsbHksIHR5cGUgJ0hpLCBfd2VsbGNv
bWVfIGhvbWUuJywgc2VsZWN0ICdfd2VsbGNvbWVfJywgYW5kIGNvbnRleHQtY2xpY2sgb24gdGhl
IHNlbGVjdGlvbi4gIiArCi0gICAgICAgICAgICAiVGhlIHRlc3Qgc3VjY2VlZHMgd2hlbiB0aGUg
Y29udGV4dCBtZW51IGhhcyBzcGVsbCBjaGVjayBzdWdnZXN0aW9ucy4iKTsKK2Rlc2NyaXB0aW9u
KCJVbmRlcnNjb3JlcyBzaG91bGQgYmUgdHJlYXRlZCBhcyB3aGl0ZXNwYWNlOiBzcGVsbGluZyBz
aG91bGQgaWdub3JlIHRoZW0uIgorICAgICsgIiBUbyB0ZXN0IG1hbnVhbGx5LCB0eXBlICdIaSwg
X3dlbGxjb21lXyBob21lLicsIHNlbGVjdCAnX3dlbGxjb21lXycsIGFuZCBjb250ZXh0LWNsaWNr
IG9uIHRoZSBzZWxlY3Rpb24uIgorICAgICsgIiBUaGUgdGVzdCBzdWNjZWVkcyB3aGVuIHRoZSBj
b250ZXh0IG1lbnUgaGFzIHNwZWxsIGNoZWNrIHN1Z2dlc3Rpb25zLiIpOwogCiBpbml0U3BlbGxU
ZXN0KCJkZXN0aW5hdGlvbiIsICJIaSwgX3dlbGxjb21lXyBob21lLiIsIGZ1bmN0aW9uKHRleHRO
b2RlKSB7Ci0gICAgc3BlbGxpbmdNYXJrZXJSYW5nZSA9IGludGVybmFscy5tYXJrZXJSYW5nZUZv
ck5vZGUodGV4dE5vZGUsICJzcGVsbGluZyIsIDApOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
Zygic3BlbGxpbmdNYXJrZXJSYW5nZS50b1N0cmluZygpIiwgIndlbGxjb21lIik7Ci0gICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSIsICIi
KTsKLQogICAgIC8vIFNlbGVjdCB0aGUgdGV4dCAiX3dlbGxjb21lXyIuCi0gICAgdmFyIHJhbmdl
V2l0aFVuZGVyc2NvcmVzID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICByYW5nZVdpdGhV
bmRlcnNjb3Jlcy5zZXRTdGFydCh0ZXh0Tm9kZSwgNCk7Ci0gICAgcmFuZ2VXaXRoVW5kZXJzY29y
ZXMuc2V0RW5kKHRleHROb2RlLCAxNCk7Ci0gICAgd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92
ZUFsbFJhbmdlcygpOwotICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5hZGRSYW5nZShyYW5nZVdp
dGhVbmRlcnNjb3Jlcyk7Ci0KLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5nZXRT
ZWxlY3Rpb24oKS50b1N0cmluZygpIiwgIl93ZWxsY29tZV8iKTsKKyAgICBzZWxlY3RUZXh0KHRl
eHROb2RlLCA0LCAxNCk7CiAKICAgICAvLyBDb250ZXh0IGNsaWNrIG9uICJfd2VsbGNvbWVfIiB0
byBzaG93IHRoZSBjb250ZXh0IG1lbnUuCi0gICAgdmFyIHggPSBkZXN0aW5hdGlvbi5vZmZzZXRQ
YXJlbnQub2Zmc2V0TGVmdCArIGRlc3RpbmF0aW9uLm9mZnNldExlZnQgKyA4MDsKLSAgICB2YXIg
eSA9IGRlc3RpbmF0aW9uLm9mZnNldFBhcmVudC5vZmZzZXRUb3AgKyBkZXN0aW5hdGlvbi5vZmZz
ZXRUb3AgKyBkZXN0aW5hdGlvbi5vZmZzZXRIZWlnaHQgLyAyOwotICAgIGV2ZW50U2VuZGVyLm1v
dXNlTW92ZVRvKHgsIHkpOwotICAgIGNvbnRleHRNZW51RWxlbWVudHMgPSBldmVudFNlbmRlci5j
b250ZXh0Q2xpY2soKTsKLSAgICAvLyBFc2Mga2V5IHRvIGhpZGUgdGhlIGNvbnRleHQgbWVudS4K
LSAgICBldmVudFNlbmRlci5rZXlEb3duKFN0cmluZy5mcm9tQ2hhckNvZGUoMHgwMDFCKSwgbnVs
bCk7Ci0KLSAgICBzcGVsbGluZ01hcmtlclJhbmdlID0gaW50ZXJuYWxzLm1hcmtlclJhbmdlRm9y
Tm9kZSh0ZXh0Tm9kZSwgInNwZWxsaW5nIiwgMCk7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCJzcGVsbGluZ01hcmtlclJhbmdlLnRvU3RyaW5nKCkiLCAid2VsbGNvbWUiKTsKLSAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpIiwgIl93
ZWxsY29tZV8iKTsKKyAgICB2YXIgZGVzdGluYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiZGVzdGluYXRpb24iKTsKKyAgICBjb250ZXh0TWVudUVsZW1lbnRzID0gY29udGV4dENsaWNr
KGRlc3RpbmF0aW9uLCA4MCk7CiAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJjb250ZXh0TWVu
dUVsZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMubGVuZ3RoIC0gMV0iLCAid2VsY29tZSIpOwog
fSk7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmct
d2l0aC13aGl0ZXNwYWNlLXNlbGVjdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0
aW5nL3NwZWxsaW5nL3NwZWxsaW5nLXdpdGgtd2hpdGVzcGFjZS1zZWxlY3Rpb24tZXhwZWN0ZWQu
dHh0CmluZGV4IDg0MzU1MTczYTczODc5ZmU0NWI0OWEyOThhM2NmMGM1Y2Y0ZDU2NzIuLjNjNzM0
YjIzOTFmMzRhZjFjNmQ0OTVkOWE1YmQ2ZWQxZDNiNDQ3OGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctd2l0aC13aGl0ZXNwYWNlLXNlbGVjdGlvbi1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy13
aXRoLXdoaXRlc3BhY2Utc2VsZWN0aW9uLWV4cGVjdGVkLnR4dApAQCAtMywxMCArMyw5IEBAIFNw
ZWxsaW5nIHNob3VsZCBpZ25vcmUgd2hpdGVzcGFjZS4gVG8gdGVzdCBtYW51YWxseSwgdHlwZSAn
aGVsbG8sIHdlbGxjb21lIGhvbWUuCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotUEFT
UyBzcGVsbGluZ01hcmtlclJhbmdlLnRvU3RyaW5nKCkgaXMgIndlbGxjb21lIgotUEFTUyB3aW5k
b3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSBpcyAiIHdlbGxjb21lICIKLVBBU1Mgc3BlbGxp
bmdNYXJrZXJSYW5nZS50b1N0cmluZygpIGlzICJ3ZWxsY29tZSIKLVBBU1Mgd2luZG93LmdldFNl
bGVjdGlvbigpLnRvU3RyaW5nKCkgaXMgIiB3ZWxsY29tZSAiCitQQVNTIGNvbnRleHRNZW51RWxl
bWVudHNbY29udGV4dE1lbnVFbGVtZW50cy5sZW5ndGggLSAxXSBpcyAid2VsY29tZSIKK1BBU1Mg
Y29udGV4dE1lbnVFbGVtZW50c1tjb250ZXh0TWVudUVsZW1lbnRzLmxlbmd0aCAtIDFdIGlzICJ3
ZWxjb21lIgorUEFTUyBjb250ZXh0TWVudUVsZW1lbnRzW2NvbnRleHRNZW51RWxlbWVudHMubGVu
Z3RoIC0gMV0gaXMgIndlbGNvbWUiCiBQQVNTIGNvbnRleHRNZW51RWxlbWVudHNbY29udGV4dE1l
bnVFbGVtZW50cy5sZW5ndGggLSAxXSBpcyAid2VsY29tZSIKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9z
cGVsbGluZy13aXRoLXdoaXRlc3BhY2Utc2VsZWN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0
aW5nL3NwZWxsaW5nL3NwZWxsaW5nLXdpdGgtd2hpdGVzcGFjZS1zZWxlY3Rpb24uaHRtbAppbmRl
eCBhZTkxMTkwYjc5ZTlmNDA4OTM1ZWU0YWM3YTFmZjNhNzIyYWZmODBkLi4wMmNmNGIzMzgyODBh
NTNkMTM5YzY0OTIzNmRmN2NhMmVkNzg0NDA2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9lZGl0
aW5nL3NwZWxsaW5nL3NwZWxsaW5nLXdpdGgtd2hpdGVzcGFjZS1zZWxlY3Rpb24uaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLXdpdGgtd2hpdGVzcGFjZS1z
ZWxlY3Rpb24uaHRtbApAQCAtMTEsMzQgKzExLDE3IEBACiAKIDxzY3JpcHQ+CiAKLWRlc2NyaXB0
aW9uKCJTcGVsbGluZyBzaG91bGQgaWdub3JlIHdoaXRlc3BhY2UuICIgKwotICAgICAgICAgICAg
IlRvIHRlc3QgbWFudWFsbHksIHR5cGUgJ2hlbGxvLCB3ZWxsY29tZSBob21lLicsIHNlbGVjdCAn
IHdlbGxjb21lICcsIGFuZCBjb250ZXh0LWNsaWNrIG9uIHRoZSBzZWxlY3Rpb24uICIgKwotICAg
ICAgICAgICAgIlRoZSB0ZXN0IHN1Y2NlZWRzIHdoZW4gdGhlIGNvbnRleHQgbWVudSBoYXMgc3Bl
bGwgY2hlY2sgc3VnZ2VzdGlvbnMuIik7CitkZXNjcmlwdGlvbigiU3BlbGxpbmcgc2hvdWxkIGln
bm9yZSB3aGl0ZXNwYWNlLiIKKyAgICArICIgVG8gdGVzdCBtYW51YWxseSwgdHlwZSAnaGVsbG8s
IHdlbGxjb21lIGhvbWUuJywgc2VsZWN0ICcgd2VsbGNvbWUgJywgYW5kIGNvbnRleHQtY2xpY2sg
b24gdGhlIHNlbGVjdGlvbi4iCisgICAgKyAiIFRoZSB0ZXN0IHN1Y2NlZWRzIHdoZW4gdGhlIGNv
bnRleHQgbWVudSBoYXMgc3BlbGwgY2hlY2sgc3VnZ2VzdGlvbnMuIik7CiAKIGluaXRTcGVsbFRl
c3QoImRlc3RpbmF0aW9uIiwgImhlbGxvLCB3ZWxsY29tZSBob21lLiIsIGZ1bmN0aW9uKHRleHRO
b2RlKSB7Ci0gICAgc3BlbGxpbmdNYXJrZXJSYW5nZSA9IGludGVybmFscy5tYXJrZXJSYW5nZUZv
ck5vZGUodGV4dE5vZGUsICJzcGVsbGluZyIsIDApOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
Zygic3BlbGxpbmdNYXJrZXJSYW5nZS50b1N0cmluZygpIiwgIndlbGxjb21lIik7Ci0KICAgICAv
LyBTZWxlY3QgdGhlIHRleHQgIiB3ZWxsY29tZSAiIHdpdGggc3Vycm91bmRpbmcgd2hpdGVzcGFj
ZS4KLSAgICB2YXIgcmFuZ2VXaXRoV2hpdGVzcGFjZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7
Ci0gICAgcmFuZ2VXaXRoV2hpdGVzcGFjZS5zZXRTdGFydCh0ZXh0Tm9kZSwgNik7Ci0gICAgcmFu
Z2VXaXRoV2hpdGVzcGFjZS5zZXRFbmQodGV4dE5vZGUsIDE2KTsKLSAgICB3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7Ci0gICAgd2luZG93LmdldFNlbGVjdGlvbigpLmFk
ZFJhbmdlKHJhbmdlV2l0aFdoaXRlc3BhY2UpOwotCi0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCJ3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSIsICIgd2VsbGNvbWUgIik7CisgICAg
c2VsZWN0VGV4dCh0ZXh0Tm9kZSwgNiwgMTYpOwogCiAgICAgLy8gQ29udGV4dCBjbGljayBvbiAi
IHdlbGxjb21lICIgdG8gc2hvdyB0aGUgY29udGV4dCBtZW51LgotICAgIHZhciB4ID0gZGVzdGlu
YXRpb24ub2Zmc2V0UGFyZW50Lm9mZnNldExlZnQgKyBkZXN0aW5hdGlvbi5vZmZzZXRMZWZ0ICsg
ODA7Ci0gICAgdmFyIHkgPSBkZXN0aW5hdGlvbi5vZmZzZXRQYXJlbnQub2Zmc2V0VG9wICsgZGVz
dGluYXRpb24ub2Zmc2V0VG9wICsgZGVzdGluYXRpb24ub2Zmc2V0SGVpZ2h0IC8gMjsKLSAgICBl
dmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsKLSAgICBjb250ZXh0TWVudUVsZW1lbnRzID0g
ZXZlbnRTZW5kZXIuY29udGV4dENsaWNrKCk7Ci0gICAgLy8gRXNjIGtleSB0byBoaWRlIHRoZSBj
b250ZXh0IG1lbnUuCi0gICAgZXZlbnRTZW5kZXIua2V5RG93bihTdHJpbmcuZnJvbUNoYXJDb2Rl
KDB4MDAxQiksIG51bGwpOwotCi0gICAgc3BlbGxpbmdNYXJrZXJSYW5nZSA9IGludGVybmFscy5t
YXJrZXJSYW5nZUZvck5vZGUodGV4dE5vZGUsICJzcGVsbGluZyIsIDApOwotICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygic3BlbGxpbmdNYXJrZXJSYW5nZS50b1N0cmluZygpIiwgIndlbGxjb21l
Iik7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9T
dHJpbmcoKSIsICIgd2VsbGNvbWUgIik7CisgICAgdmFyIGRlc3RpbmF0aW9uID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImRlc3RpbmF0aW9uIik7CisgICAgY29udGV4dE1lbnVFbGVtZW50cyA9
IGNvbnRleHRDbGljayhkZXN0aW5hdGlvbiwgODApOwogICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygiY29udGV4dE1lbnVFbGVtZW50c1tjb250ZXh0TWVudUVsZW1lbnRzLmxlbmd0aCAtIDFdIiwg
IndlbGNvbWUiKTsKIH0pOwogCg==
</data>
<flag name="review"
          id="212266"
          type_id="1"
          status="-"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>