<?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>188335</bug_id>
          
          <creation_ts>2018-08-05 18:22:52 -0700</creation_ts>
          <short_desc>[iOS] Tests that try to interact with the QuickType bar time out on iOS 11+</short_desc>
          <delta_ts>2018-08-06 10:47:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>lforschler</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1448023</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-05 18:22:52 -0700</bug_when>
    <thetext>&lt;rdar://problem/32542437&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448034</commentid>
    <comment_count>1</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-05 19:51:51 -0700</bug_when>
    <thetext>...and I might as well fix &lt;rdar://problem/32542433&gt; too while I&apos;m at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448035</commentid>
    <comment_count>2</comment_count>
      <attachid>346610</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-05 20:06:36 -0700</bug_when>
    <thetext>Created attachment 346610
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448044</commentid>
    <comment_count>3</comment_count>
      <attachid>346610</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-08-05 21:50:30 -0700</bug_when>
    <thetext>Comment on attachment 346610
Patch

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

&gt; LayoutTests/ChangeLog:27
&gt; +        Add a new UIHelper method to type a character using the keyboard. Sends hardware keyboard events on the WebKit2
&gt; +        port of iOS, and uses EventSender elsewhere.

Should we just make EventSender work so the tests don&apos;t have to mind? Does that even make sense? (like, is it possible to hide this behind the existing interface)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448048</commentid>
    <comment_count>4</comment_count>
      <attachid>346610</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-05 22:03:33 -0700</bug_when>
    <thetext>Comment on attachment 346610
Patch

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

&gt;&gt; LayoutTests/ChangeLog:27
&gt;&gt; +        port of iOS, and uses EventSender elsewhere.
&gt; 
&gt; Should we just make EventSender work so the tests don&apos;t have to mind? Does that even make sense? (like, is it possible to hide this behind the existing interface)

IIRC, this was my original approach back in 2015, when I prototyped gesture/interaction testing in WK2 iOS. We ultimately went with UIScriptController instead, which offers more flexibility and doesn&apos;t limit us to dispatching and waiting for all events to finish synchronously, since its API is all completion-block-based.

In a sense, UIHelper and its static functions help mitigate this schism in testing API by providing ways to simulate cross-platform user interaction, but I think that in the future, we would ideally implement the UIScriptController stubs on macOS so that interactions could be simulated via UIScriptController, and then EventSenderProxy could then be implemented in terms of calls to UIScriptController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448049</commentid>
    <comment_count>5</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-08-05 22:07:33 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #4)
&gt; Comment on attachment 346610 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=346610&amp;action=review
&gt; 
&gt; &gt;&gt; LayoutTests/ChangeLog:27
&gt; &gt;&gt; +        port of iOS, and uses EventSender elsewhere.
&gt; &gt; 
&gt; &gt; Should we just make EventSender work so the tests don&apos;t have to mind? Does that even make sense? (like, is it possible to hide this behind the existing interface)
&gt; 
&gt; IIRC, this was my original approach back in 2015, when I prototyped
&gt; gesture/interaction testing in WK2 iOS. We ultimately went with
&gt; UIScriptController instead, which offers more flexibility and doesn&apos;t limit
&gt; us to dispatching and waiting for all events to finish synchronously, since
&gt; its API is all completion-block-based.

&gt; In a sense, UIHelper and its static functions help mitigate this schism in

Good point.

&gt; testing API by providing ways to simulate cross-platform user interaction,
&gt; but I think that in the future, we would ideally implement the
&gt; UIScriptController stubs on macOS so that interactions could be simulated
&gt; via UIScriptController, and then EventSenderProxy could then be implemented
&gt; in terms of calls to UIScriptController.

Ah! That sounds like a good plan for maximum flexibility.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448116</commentid>
    <comment_count>6</comment_count>
      <attachid>346610</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-06 07:21:59 -0700</bug_when>
    <thetext>Comment on attachment 346610
Patch

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

&gt; Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm:-393
&gt; -    id UIKeyboardPredictionViewClass = NSClassFromString(@&quot;UIKeyboardPredictionView&quot;);

Ah, this means I can also remove the UIKeyboardPredictionView forward declaration in UIKitTestSPI.h...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448117</commentid>
    <comment_count>7</comment_count>
      <attachid>346626</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-06 07:22:37 -0700</bug_when>
    <thetext>Created attachment 346626
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448122</commentid>
    <comment_count>8</comment_count>
      <attachid>346626</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-08-06 08:01:55 -0700</bug_when>
    <thetext>Comment on attachment 346626
Patch for landing

Clearing flags on attachment: 346626

Committed r234601: &lt;https://trac.webkit.org/changeset/234601&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448150</commentid>
    <comment_count>9</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2018-08-06 10:34:26 -0700</bug_when>
    <thetext>(In reply to WebKit Commit Bot from comment #8)
&gt; Committed r234601: &lt;https://trac.webkit.org/changeset/234601&gt;

The following API test is timing out on iOS Simulator after this change:

    TestWebKitAPI.KeyboardInputTests.CaretSelectionRectAfterRestoringFirstResponder
        2018-08-06 09:28:39.260 TestWebKitAPI[9284:303241744] Expected a caret rect of {{16, 13}, {3, 15}}, but still observed {{16.000000000000004, 13.000000000000002}, {2.0631577968597412, 15.000000000000002}}

https://build.webkit.org/builders/Apple%20iOS%2011%20Simulator%20Release%20WK2%20%28Tests%29/builds/6630</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448151</commentid>
    <comment_count>10</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-06 10:35:33 -0700</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #9)
&gt; (In reply to WebKit Commit Bot from comment #8)
&gt; &gt; Committed r234601: &lt;https://trac.webkit.org/changeset/234601&gt;
&gt; 
&gt; The following API test is timing out on iOS Simulator after this change:
&gt; 
&gt;    
&gt; TestWebKitAPI.KeyboardInputTests.
&gt; CaretSelectionRectAfterRestoringFirstResponder
&gt;         2018-08-06 09:28:39.260 TestWebKitAPI[9284:303241744] Expected a
&gt; caret rect of {{16, 13}, {3, 15}}, but still observed {{16.000000000000004,
&gt; 13.000000000000002}, {2.0631577968597412, 15.000000000000002}}
&gt; 
&gt; https://build.webkit.org/builders/
&gt; Apple%20iOS%2011%20Simulator%20Release%20WK2%20%28Tests%29/builds/6630

Taking a look now. Looks like it just needs to be tweaked a bit...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448152</commentid>
    <comment_count>11</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-06 10:36:35 -0700</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #9)
&gt; (In reply to WebKit Commit Bot from comment #8)
&gt; &gt; Committed r234601: &lt;https://trac.webkit.org/changeset/234601&gt;
&gt; 
&gt; The following API test is timing out on iOS Simulator after this change:
&gt; 
&gt;    
&gt; TestWebKitAPI.KeyboardInputTests.
&gt; CaretSelectionRectAfterRestoringFirstResponder
&gt;         2018-08-06 09:28:39.260 TestWebKitAPI[9284:303241744] Expected a
&gt; caret rect of {{16, 13}, {3, 15}}, but still observed {{16.000000000000004,
&gt; 13.000000000000002}, {2.0631577968597412, 15.000000000000002}}
&gt; 
&gt; https://build.webkit.org/builders/
&gt; Apple%20iOS%2011%20Simulator%20Release%20WK2%20%28Tests%29/builds/6630

Also, surely you mean after https://trac.webkit.org/changeset/234600/webkit, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448157</commentid>
    <comment_count>12</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2018-08-06 10:46:24 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #11)
&gt; (In reply to Ryan Haddad from comment #9)
&gt; Also, surely you mean after https://trac.webkit.org/changeset/234600/webkit,
&gt; no?
Indeed, my apologies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448158</commentid>
    <comment_count>13</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-06 10:47:05 -0700</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #12)
&gt; (In reply to Wenson Hsieh from comment #11)
&gt; &gt; (In reply to Ryan Haddad from comment #9)
&gt; &gt; Also, surely you mean after https://trac.webkit.org/changeset/234600/webkit,
&gt; &gt; no?
&gt; Indeed, my apologies.

No worries :)

Migrated the CC&apos;s over to that bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346610</attachid>
            <date>2018-08-05 20:06:36 -0700</date>
            <delta_ts>2018-08-05 21:50:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188335-20180805200635.patch</filename>
            <type>text/plain</type>
            <size>25638</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0NTY2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggM2UwM2Q1OTc0NzExNjVjNWY3NjJmYWEzMGZhNmVlMGJh
OTNmZWU5MC4uYWVkYmQ4NTE1MGU5N2ZhNjdkOWNlODJiMjI1ODFlYjViNmM4NzBiMCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2
IEBACisyMDE4LTA4LTA1ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgor
CisgICAgICAgIFtpT1NdIFRlc3RzIHRoYXQgdHJ5IHRvIGludGVyYWN0IHdpdGggdGhlIFF1aWNr
VHlwZSBiYXIgdGltZSBvdXQgb24gaU9TIDExKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4MzM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjU0
MjQzNz4gYW5kIDxyZGFyOi8vcHJvYmxlbS8zMjU0MjQzMz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgYSBVSVNjcmlwdENvbnRyb2xsZXIg
aGVscGVyIG1ldGhvZCB0aGF0IGF0dGVtcHRlZCB0byB3YWl0IGZvciBRdWlja1R5cGUgYnV0dG9u
cyB0byBhcHBlYXIsIGFuZCB0aGVuIHNlbmQKKyAgICAgICAgdG91Y2ggZXZlbnRzIHRvIHRoZSBi
dXR0b25zLiBUaGVzZSB3ZXJlIG9ubHkgdXNlZCBmb3IgdGhlIHR3byB0ZXN0cyB3aGljaCB0aGlz
IHBhdGNoIHJlZmFjdG9ycy4gU2VlIHRoZQorICAgICAgICBMYXlvdXRUZXN0cyBDaGFuZ2VMb2cg
Zm9yIG1vcmUgZGV0YWlsLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvaW9zL1VJU2NyaXB0
Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjpzZWxl
Y3RUZXh0Q2FuZGlkYXRlQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogVGVzdFJ1bm5lclNo
YXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbDoKKyAg
ICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnNlbGVjdFRleHRDYW5k
aWRhdGVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVy
Ojp3YWl0Rm9yVGV4dFByZWRpY3Rpb25zVmlld0FuZFNlbGVjdENhbmRpZGF0ZUF0SW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2Ny
aXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0
Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjpzZWxl
Y3RUZXh0Q2FuZGlkYXRlQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OlVJU2NyaXB0
Q29udHJvbGxlcjo6d2FpdEZvclRleHRQcmVkaWN0aW9uc1ZpZXdBbmRTZWxlY3RDYW5kaWRhdGVB
dEluZGV4KTogRGVsZXRlZC4KKwogMjAxOC0wOC0wMyAgRGF2aWQgRmVudG9uICA8ZGF2aWRfZmVu
dG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjM0NTE3
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJU2NyaXB0Q29udHJvbGxl
cklPUy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1Mu
bW0KaW5kZXggYjk0Y2E4ZDgzMWU1NDBlYmQ0YmE0NDE1NjljNzQwOTdjMTViMWRlNS4uMjVmNTUz
YWVhOTg4MTBmZDNiYjg5YmZkMjE0MWQ0ZDNjMTE2NTQ4ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCkBAIC0xNDMsMTAgKzE0Myw2
IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjp0eXBlQ2hhcmFjdGVyVXNpbmdIYXJkd2FyZUtl
eWJvYXJkKEpTU3RyaW5nUmVmIGNoYXJhY3RlCiB7CiB9CiAKLXZvaWQgVUlTY3JpcHRDb250cm9s
bGVyOjpzZWxlY3RUZXh0Q2FuZGlkYXRlQXRJbmRleChsb25nLCBKU1ZhbHVlUmVmKQotewotfQot
CiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6a2V5RG93blVzaW5nSGFyZHdhcmVLZXlib2FyZChK
U1N0cmluZ1JlZiBjaGFyYWN0ZXIsIEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiB9CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNj
cmlwdENvbnRyb2xsZXIuaWRsIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRl
eHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbAppbmRleCA4MDllNDc1YmM0NWY4OWY0
YWY0YjIxY2YwMmIwOTc3MTBhNTI3NjYzLi44MjNlNDMzOThjYTZkYjgyZjQ1ODlhMjlmYWFlZWE1
NWZlNDZjODUwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29u
dGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsCisrKyBiL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwK
QEAgLTYzLDggKzYzLDYgQEAgaW50ZXJmYWNlIFVJU2NyaXB0Q29udHJvbGxlciB7CiAgICAgdm9p
ZCBrZXlEb3duVXNpbmdIYXJkd2FyZUtleWJvYXJkKERPTVN0cmluZyBjaGFyYWN0ZXIsIG9iamVj
dCBjYWxsYmFjayk7CiAgICAgdm9pZCBrZXlVcFVzaW5nSGFyZHdhcmVLZXlib2FyZChET01TdHJp
bmcgY2hhcmFjdGVyLCBvYmplY3QgY2FsbGJhY2spOwogCi0gICAgdm9pZCBzZWxlY3RUZXh0Q2Fu
ZGlkYXRlQXRJbmRleChsb25nIGluZGV4LCBvYmplY3QgY2FsbGJhY2spOwotCiAgICAgLy8gZXZl
bnRzSlNPTiBkZXNjcmliZXMgYSBzZXJpZXMgb2YgdXNlciBldmVudHMgaW4gSlNPTiBmb3JtLiBG
b3IgdGhlIGtleXMsIHNlZSBISURFdmVudEdlbmVyYXRvci5tbS4KICAgICAvLyBGb3IgZXhhbXBs
ZSwgdGhpcyBKU09OIGRlc2NyaWJlcyBhIHRvdWNoIGRvd24gZm9sbG93ZWQgYnkgYSB0b3VjaCB1
cCAoaS5lLiBhIHNpbmdsZSB0YXApLgogICAgIC8vICB7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3BwIGIvVG9v
bHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmNw
cAppbmRleCA0MmMxMmNlZjFiN2JiZTI0Y2Y3MjYwNWQzMDcyN2I3ZDcwY2ZlZjljLi45NGNmMTUw
Yjc3ZjQ5NjA0ZGFhMjE0NDYwYTY5NTg0MTRhYTdhZDg1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBi
L1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxl
ci5jcHAKQEAgLTI4MiwxNCArMjgyLDYgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OmtleVVw
VXNpbmdIYXJkd2FyZUtleWJvYXJkKEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKQogewogfQogCi12
b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6c2VsZWN0VGV4dENhbmRpZGF0ZUF0SW5kZXgobG9uZywg
SlNWYWx1ZVJlZikKLXsKLX0KLQotdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OndhaXRGb3JUZXh0
UHJlZGljdGlvbnNWaWV3QW5kU2VsZWN0Q2FuZGlkYXRlQXRJbmRleChsb25nLCB1bnNpZ25lZCwg
ZmxvYXQpCi17Ci19Ci0KIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjprZXlEb3duVXNpbmdIYXJk
d2FyZUtleWJvYXJkKEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKQogewogfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVy
LmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRy
b2xsZXIuaAppbmRleCBiMmUxYWRlYjgzOWZmZDNiMjY2MmEwODM3MjhhYTIzZjEwMTIwNjRjLi42
YTEzYzFkYmNjMTY2YTllNWUwMzkxNjIzOWRmMWJjNmRhMDZiOTRkIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaAor
KysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRy
b2xsZXIuaApAQCAtODksOCArODksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBrZXlEb3duVXNpbmdI
YXJkd2FyZUtleWJvYXJkKEpTU3RyaW5nUmVmIGNoYXJhY3RlciwgSlNWYWx1ZVJlZiBjYWxsYmFj
ayk7CiAgICAgdm9pZCBrZXlVcFVzaW5nSGFyZHdhcmVLZXlib2FyZChKU1N0cmluZ1JlZiBjaGFy
YWN0ZXIsIEpTVmFsdWVSZWYgY2FsbGJhY2spOwogCi0gICAgdm9pZCBzZWxlY3RUZXh0Q2FuZGlk
YXRlQXRJbmRleChsb25nIGluZGV4LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKTsKLQogICAgIHZvaWQg
a2V5Ym9hcmRBY2Nlc3NvcnlCYXJOZXh0KCk7CiAgICAgdm9pZCBrZXlib2FyZEFjY2Vzc29yeUJh
clByZXZpb3VzKCk7CiAKQEAgLTIwNSw3ICsyMDMsNiBAQCBwcml2YXRlOgogICAgIEpTQ2xhc3NS
ZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7CiAKICAgICBKU09iamVjdFJlZiBvYmplY3RGcm9tUmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBjb25zdDsKLSAgICB2b2lkIHdhaXRGb3JUZXh0
UHJlZGljdGlvbnNWaWV3QW5kU2VsZWN0Q2FuZGlkYXRlQXRJbmRleChsb25nIGluZGV4LCB1bnNp
Z25lZCBjYWxsYmFja0lELCBmbG9hdCBpbnRlcnZhbCk7CiAKICAgICBVSVNjcmlwdENvbnRleHQq
IG1fY29udGV4dDsKIH07CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9V
SVNjcmlwdENvbnRyb2xsZXJJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNj
cmlwdENvbnRyb2xsZXJJT1MubW0KaW5kZXggYmQ0MmQzYWVkNGVkNWEwMGViZDk5ZDYzNzM0MjAw
NDEyNmVlZDk3Yy4uMWFhZDcyZGQzNzFlOGFmNTg0MzQ2ZDk2YTc1NmZkYzc2YjRkZWU1MiAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9T
Lm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklP
Uy5tbQpAQCAtMzc0LDUxICszNzQsNiBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6a2V5VXBV
c2luZ0hhcmR3YXJlS2V5Ym9hcmQoSlNTdHJpbmdSZWYgY2hhcmFjdGVyLCBKU1ZhbAogICAgIH1d
OwogfQogCi12b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6c2VsZWN0VGV4dENhbmRpZGF0ZUF0SW5k
ZXgobG9uZyBpbmRleCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKLXsKLSNpZiBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQotICAgIHN0YXRpYyBjb25zdCBmbG9hdCB0ZXh0UHJlZGljdGlvbnNQb2xsaW5n
SW50ZXJ2YWwgPSAwLjE7Ci0gICAgdW5zaWduZWQgY2FsbGJhY2tJRCA9IG1fY29udGV4dC0+cHJl
cGFyZUZvckFzeW5jVGFzayhjYWxsYmFjaywgQ2FsbGJhY2tUeXBlTm9uUGVyc2lzdGVudCk7Ci0g
ICAgd2FpdEZvclRleHRQcmVkaWN0aW9uc1ZpZXdBbmRTZWxlY3RDYW5kaWRhdGVBdEluZGV4KGlu
ZGV4LCBjYWxsYmFja0lELCB0ZXh0UHJlZGljdGlvbnNQb2xsaW5nSW50ZXJ2YWwpOwotI2Vsc2UK
LSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIG5vLW9wIG9uIG5vbi1pbnRlcm5hbCBidWlsZHMgZHVl
IHRvIFVJS2V5Ym9hcmRQcmVkaWN0aW9uVmlldyBiZWluZyB1bmF2YWlsYWJsZS4gSWRlYWxseSwg
dGhlcmUgc2hvdWxkIGJlIGEgYmV0dGVyIHdheSB0bwotICAgIC8vIHJldHJpZXZlIGluZm9ybWF0
aW9uIGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBwcmVkaWN0aXZlIHRleHQgdmlldyB0aGF0IHdpbGwg
YmUgY29tcGF0aWJsZSB3aXRoIE9wZW5Tb3VyY2UuCi0gICAgVU5VU0VEX1BBUkFNKGluZGV4KTsK
LSAgICBVTlVTRURfUEFSQU0oY2FsbGJhY2spOwotI2VuZGlmCi19Ci0KLXZvaWQgVUlTY3JpcHRD
b250cm9sbGVyOjp3YWl0Rm9yVGV4dFByZWRpY3Rpb25zVmlld0FuZFNlbGVjdENhbmRpZGF0ZUF0
SW5kZXgobG9uZyBpbmRleCwgdW5zaWduZWQgY2FsbGJhY2tJRCwgZmxvYXQgaW50ZXJ2YWwpCi17
Ci0gICAgaWQgVUlLZXlib2FyZFByZWRpY3Rpb25WaWV3Q2xhc3MgPSBOU0NsYXNzRnJvbVN0cmlu
ZyhAIlVJS2V5Ym9hcmRQcmVkaWN0aW9uVmlldyIpOwotICAgIGlmICghVUlLZXlib2FyZFByZWRp
Y3Rpb25WaWV3Q2xhc3MpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShBUFBMRV9JTlRFUk5B
TF9TREspCi0gICAgVUlLZXlib2FyZFByZWRpY3Rpb25WaWV3ICpwcmVkaWN0aW9uVmlldyA9IChV
SUtleWJvYXJkUHJlZGljdGlvblZpZXcgKilbVUlLZXlib2FyZFByZWRpY3Rpb25WaWV3Q2xhc3Mg
YWN0aXZlSW5zdGFuY2VdOwotICAgIGlmICghW3ByZWRpY3Rpb25WaWV3IGhhc1ByZWRpY3Rpb25z
XSkgewotICAgICAgICBkaXNwYXRjaF9hZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVf
Tk9XLCBpbnRlcnZhbCAqIE5TRUNfUEVSX1NFQyksIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IF4oKSB7Ci0gICAgICAgICAgICB3YWl0Rm9yVGV4dFByZWRpY3Rpb25zVmlld0FuZFNlbGVjdENh
bmRpZGF0ZUF0SW5kZXgoaW5kZXgsIGNhbGxiYWNrSUQsIGludGVydmFsKTsKLSAgICAgICAgfSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBQbGF0Zm9ybVdLVmlldyB3ZWJWaWV3ID0g
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygp
OwotICAgIENHUmVjdCBwcmVkaWN0aW9uVmlld0ZyYW1lID0gW3ByZWRpY3Rpb25WaWV3IGZyYW1l
XTsKLSAgICAvLyBUaGlzIGFzc3VtZXMgdGhlcmUgYXJlIDMgcHJlZGljdGVkIHRleHQgY2VsbHMg
b2YgZXF1YWwgd2lkdGgsIHdoaWNoIGlzIHRoZSBjYXNlIG9uIGlPUy4KLSAgICBmbG9hdCBvZmZz
ZXRYID0gKGluZGV4ICogMiArIDEpICogQ0dSZWN0R2V0V2lkdGgocHJlZGljdGlvblZpZXdGcmFt
ZSkgLyA2OwotICAgIGZsb2F0IG9mZnNldFkgPSBDR1JlY3RHZXRIZWlnaHQod2ViVmlldy53aW5k
b3cuZnJhbWUpIC0gQ0dSZWN0R2V0SGVpZ2h0KFtbcHJlZGljdGlvblZpZXcgc3VwZXJ2aWV3XSBm
cmFtZV0pICsgQ0dSZWN0R2V0SGVpZ2h0KHByZWRpY3Rpb25WaWV3RnJhbWUpIC8gMjsKLSAgICBb
W0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSB0YXA6Q0dQb2ludE1h
a2Uob2Zmc2V0WCwgb2Zmc2V0WSkgY29tcGxldGlvbkJsb2NrOl57Ci0gICAgICAgIGlmIChtX2Nv
bnRleHQpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmFzeW5jVGFza0NvbXBsZXRlKGNhbGxiYWNr
SUQpOwotICAgIH1dOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNF
RF9QQVJBTShjYWxsYmFja0lEKTsKLSAgICBVTlVTRURfUEFSQU0oaW50ZXJ2YWwpOwotI2VuZGlm
Ci19Ci0KIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpkaXNtaXNzRm9ybUFjY2Vzc29yeVZpZXco
KQogewogICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndlYlZpZXcgPSBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMjM0MDRj
ZWY2OGJkODU2YWMwZDI4Nzk0ZDAzOTJmYmYwYWQ5ODE2Ni4uN2U3YWY3NGVjNTI3ZGJkZTFkMDU3
NDJkZTYzZmRlOTI4OTk1YzhhYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE4LTA4LTA1ICBX
ZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFRl
c3RzIHRoYXQgdHJ5IHRvIGludGVyYWN0IHdpdGggdGhlIFF1aWNrVHlwZSBiYXIgdGltZSBvdXQg
b24gaU9TIDExKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg4MzM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjU0MjQzNz4gYW5kIDxyZGFyOi8v
cHJvYmxlbS8zMjU0MjQzMz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBSZWZhY3RvcnMgYSBjb3VwbGUgb2YgdGVzdHMgdGhhdCBjdXJyZW50bHkgcmVs
eSBvbiB0aGUgUXVpY2tUeXBlIGJhciBiZWluZyBzaG93biB3aGVuIHRoZSBoYXJkd2FyZSBrZXli
b2FyZCBpcworICAgICAgICBwcmVzZW50ZWQgaW4gdGhlIGlPUyBzaW11bGF0b3IsIHNvIHRoYXQg
aXQgY2FuIGluc2VydCB0ZXh0IHN1Z2dlc3Rpb25zIGJ5IHRhcHBpbmcgUXVpY2tUeXBlIGJhciBi
dXR0b25zOyBpbiB0aGUKKyAgICAgICAgZmlyc3QgcGxhY2UsIGl0IHdhcyBuZXZlciBndWFyYW50
ZWVkIHRoYXQgdGhpcyBiYXIgd291bGQgc2hvdyB1cCwgb3IgZXZlbiBoYXZlIG1vcmUgdGhhbiAx
IHRleHQgc3VnZ2VzdGlvbi4KKyAgICAgICAgSW5zdGVhZCwgd2UgdXNlIHRoZSBleGlzdGluZyBV
SVNjcmlwdENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb24gbWV0aG9kIHRvIHRyaWdnZXIg
dGV4dCByZXBsYWNlbWVudCBpbiB0aGUKKyAgICAgICAgc2FtZSB3YXkgdGFwcGluZyBhIGJ1dHRv
biBvbiB0aGUgUXVpY2tUeXBlIGJhciB3b3VsZCByZXBsYWNlIHRoZSBjdXJyZW50IHdvcmQgd2l0
aCB0aGUgc3VnZ2VzdGVkIHdvcmQuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9pb3MvYmVmb3Jl
LWlucHV0LWV2ZW50cy1wcmV2ZW50LWNhbmRpZGF0ZS1pbnNlcnRpb24tZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGZhc3QvZXZlbnRzL2lvcy9iZWZvcmUtaW5wdXQtZXZlbnRzLXByZXZlbnQtY2Fu
ZGlkYXRlLWluc2VydGlvbi5odG1sOgorICAgICAgICAqIGZhc3QvZXZlbnRzL2lvcy9pbnB1dC1l
dmVudHMtaW5zZXJ0LXJlcGxhY2VtZW50LXRleHQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZh
c3QvZXZlbnRzL2lvcy9pbnB1dC1ldmVudHMtaW5zZXJ0LXJlcGxhY2VtZW50LXRleHQuaHRtbDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9uczoKKworICAgICAgICBSZW1v
dmVzIGEgW1RpbWVvdXRdIGV4cGVjdGF0aW9uLgorCisgICAgICAgICogcmVzb3VyY2VzL3VpLWhl
bHBlci5qczoKKyAgICAgICAgKHdpbmRvdy5VSUhlbHBlci50eXBlQ2hhcmFjdGVyKToKKworICAg
ICAgICBBZGQgYSBuZXcgVUlIZWxwZXIgbWV0aG9kIHRvIHR5cGUgYSBjaGFyYWN0ZXIgdXNpbmcg
dGhlIGtleWJvYXJkLiBTZW5kcyBoYXJkd2FyZSBrZXlib2FyZCBldmVudHMgb24gdGhlIFdlYktp
dDIKKyAgICAgICAgcG9ydCBvZiBpT1MsIGFuZCB1c2VzIEV2ZW50U2VuZGVyIGVsc2V3aGVyZS4K
KworICAgICAgICAod2luZG93LlVJSGVscGVyLmFwcGx5QXV0b2NvcnJlY3Rpb24pOgorCisgICAg
ICAgIEFkZCBhIG5ldyBVSUhlbHBlciBtZXRob2QgdGhhdCB3cmFwcyBVSVNjcmlwdENvbnRyb2xs
ZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb24uIE9ubHkgc3VwcG9ydGVkIGluIFdlYktpdDIKKyAgICAg
ICAgY3VycmVudGx5LgorCisgICAgICAgICh3aW5kb3cuVUlIZWxwZXIpOgorCiAyMDE4LTA4LTAz
ICBKdXN0aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViR0wgMiBj
b25mb3JtYW5jZTogdmVydGV4X2FycmF5cy92ZXJ0ZXhfYXJyYXlfb2JqZWN0Lmh0bWwKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy9iZWZvcmUtaW5wdXQtZXZlbnRzLXBy
ZXZlbnQtY2FuZGlkYXRlLWluc2VydGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9pb3MvYmVmb3JlLWlucHV0LWV2ZW50cy1wcmV2ZW50LWNhbmRpZGF0ZS1pbnNlcnRp
b24tZXhwZWN0ZWQudHh0CmluZGV4IDk4ZDBjMmU4NmM4ZTgzY2ZkNzJkOWY1ZmY4OWYwNWIyZmY2
MzAwMTIuLjIyNjc1ZTM4ZWVlYjdkODhlYzQ0NmM0NGVkOGNmMDljN2VkZGMyZDUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy9iZWZvcmUtaW5wdXQtZXZlbnRzLXByZXZl
bnQtY2FuZGlkYXRlLWluc2VydGlvbi1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvaW9zL2JlZm9yZS1pbnB1dC1ldmVudHMtcHJldmVudC1jYW5kaWRhdGUtaW5zZXJ0
aW9uLWV4cGVjdGVkLnR4dApAQCAtMSw1ICsxLDkgQEAKIAotVG8gbWFudWFsbHkgdGVzdCwgdHlw
ZSAndCcgaW50byB0aGUgY29udGVudGVkaXRhYmxlIGFuZCB0cnkgdG8gc2VsZWN0IGEgY2FuZGlk
YXRlLiBUaGUgcmVwbGFjZW1lbnQgdGV4dCBzaG91bGQgbm90IGJlIGluc2VydGVkLgorVGhpcyB0
ZXN0IHZlcmlmaWVzIHRoYXQgYmVmb3JlaW5wdXQgZXZlbnRzIG9mIGlucHV0VHlwZSAiaW5zZXJ0
UmVwbGFjZW1lbnRUZXh0IiBjYW4gYmUgcHJldmVudGVkLgogCi1QQVNTOiBUaGUgcmVwbGFjZW1l
bnQgdGV4dCB3YXMgcHJldmVudGVkLgorVG8gbWFudWFsbHkgdGVzdCwgdHlwZSAnVCcgaW50byB0
aGUgdGV4dCBmaWVsZCBhbmQgdHJ5IHRvIHNlbGVjdCBhIGNhbmRpZGF0ZS4gVGhlIHJlcGxhY2Vt
ZW50IHRleHQgc2hvdWxkIG5vdCBiZSBpbnNlcnRlZC4KKworUmVwbGFjaW5nICJUIiB3aXRoICJU
aGUiLi4uCitQcmV2ZW50ZWQgImluc2VydFJlcGxhY2VtZW50VGV4dCIgd2l0aCBkYXRhOiAiVGhl
IgorRG9lcyB0aGUgaW5wdXQgdmFsdWUgY29udGFpbiByZXBsYWNlbWVudCB0ZXh0PyBmYWxzZQog
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pb3MvYmVmb3JlLWlucHV0LWV2
ZW50cy1wcmV2ZW50LWNhbmRpZGF0ZS1pbnNlcnRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL2lvcy9iZWZvcmUtaW5wdXQtZXZlbnRzLXByZXZlbnQtY2FuZGlkYXRlLWluc2VydGlv
bi5odG1sCmluZGV4IGIxYWY0OTAyZTczOGRkMGNjNTZjMzNjZmNkNzQ3Y2Y5MGZhNTBiNmMuLjk4
ZWVlYTdlOWVhZWEyMDI1MmM3YTMwZGJiNTc5M2UwMjA3YjkxYjAgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy9iZWZvcmUtaW5wdXQtZXZlbnRzLXByZXZlbnQtY2FuZGlk
YXRlLWluc2VydGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy9iZWZv
cmUtaW5wdXQtZXZlbnRzLXByZXZlbnQtY2FuZGlkYXRlLWluc2VydGlvbi5odG1sCkBAIC0xLDky
ICsxLDYzIEBACiA8IURPQ1RZUEUgaHRtbD4gPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyB1c2VG
bGV4aWJsZVZpZXdwb3J0PXRydWUgXSAtLT4KIAogPGh0bWw+Ci0KIDxoZWFkPgotICAgIDxtZXRh
IG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJpbml0aWFsLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJs
ZT1ubyI+Ci0gICAgPHNjcmlwdCBpZD0idWktc2NyaXB0IiB0eXBlPSJ0ZXh0L3BsYWluIj4KLSAg
ICAgICAgKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdWlDb250cm9sbGVyLmRpZFNob3dLZXli
b2FyZENhbGxiYWNrID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdWlDb250cm9sbGVy
LnR5cGVDaGFyYWN0ZXJVc2luZ0hhcmR3YXJlS2V5Ym9hcmQoInQiLCBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnNlbGVjdFRleHRDYW5kaWRhdGVBdEluZGV4
KDEsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnVp
U2NyaXB0Q29tcGxldGUoKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1aUNvbnRyb2xsZXIuc2luZ2xlVGFw
QXRQb2ludCgkeCwgJHksIGZ1bmN0aW9uKCkge30pOwotICAgICAgICB9KSgpOwotICAgIDwvc2Ny
aXB0PgotCi0gICAgPHNjcmlwdD4KLSAgICAgICAgdmFyIHByb2dyZXNzID0gMDsKLSAgICAgICAg
dmFyIHJlcGxhY2VtZW50VGV4dCA9ICIiOwotICAgICAgICBsZXQgd3JpdGUgPSAobWVzc2FnZSkg
PT4gb3V0cHV0LmlubmVySFRNTCArPSAobWVzc2FnZSArICI8YnI+Iik7Ci0gICAgICAgIGZ1bmN0
aW9uIGdldFVJU2NyaXB0KCkgewotICAgICAgICAgICAgbGV0IHJlY3QgPSBlZGl0YWJsZS5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICAgICAgICAgIGxldCBzY3JpcHQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgidWktc2NyaXB0IikudGV4dDsKLSAgICAgICAgICAgIHNjcmlwdCA9IHNj
cmlwdC5yZXBsYWNlKCIkeCIsIHJlY3QubGVmdCArIHJlY3Qud2lkdGggLyAyKTsKLSAgICAgICAg
ICAgIHJldHVybiBzY3JpcHQucmVwbGFjZSgiJHkiLCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8g
Mik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKLSAgICAg
ICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwotICAgICAgICAgICAgdGVzdFJ1bm5lci53
YWl0VW50aWxEb25lKCk7Ci0gICAgICAgICAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0SW5wdXRF
dmVudHNFbmFibGVkKHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gaW5jcmVt
ZW50UHJvZ3Jlc3MoKQotICAgICAgICB7Ci0gICAgICAgICAgICBwcm9ncmVzcysrOwotICAgICAg
ICAgICAgaWYgKCF3aW5kb3cudGVzdFJ1bm5lciB8fCBwcm9ncmVzcyAhPT0gMikKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGVkaXRhYmxlLnZhbHVlLmluZGV4T2YocmVwbGFjZW1lbnRUZXh0
KSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoYFBBU1M6IFRoZSByZXBsYWNlbWVu
dCB0ZXh0IHdhcyBwcmV2ZW50ZWQuYCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICB3cml0ZShgRkFJTDogVGhlIGlucHV0IHZhbHVlICR7ZWRpdGFibGUudmFsdWV9
IHNob3VsZCBub3QgY29udGFpbiByZXBsYWNlbWVudCB0ZXh0ICR7cmVwbGFjZW1lbnRUZXh0fS5g
KTsKLSAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICAgICAgICAg
IH0sIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGVkaXRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZWlucHV0Iiwg
cHJldmVudEJlZm9yZUlucHV0KTsKLSAgICAgICAgICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIg
fHwgIXRlc3RSdW5uZXIucnVuVUlTY3JpcHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgICAgICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KGdldFVJU2NyaXB0KCksIGZ1bmN0aW9u
KHJlc3VsdCkgewotICAgICAgICAgICAgICAgIGluY3JlbWVudFByb2dyZXNzKCk7Ci0gICAgICAg
ICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHByZXZlbnRCZWZvcmVJbnB1
dChldmVudCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGV2ZW50LmlucHV0VHlwZSA9PT0g
Imluc2VydFJlcGxhY2VtZW50VGV4dCIpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlbWVudFRl
eHQgPSBldmVudC5kYXRhOwotICAgICAgICAgICAgICAgIGlmICghcmVwbGFjZW1lbnRUZXh0KQot
ICAgICAgICAgICAgICAgICAgICB3cml0ZSgiRkFJTDogVGhlIHJlcGxhY2VtZW50IHRleHQgaW5w
dXQgZXZlbnQgbGFja3MgZGF0YS4iKTsKLSAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVm
YXVsdCgpOwotICAgICAgICAgICAgICAgIGluY3JlbWVudFByb2dyZXNzKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgIDwvc2NyaXB0PgotICAgIDxzdHlsZT4KLSAgICAjZWRpdGFi
bGUgewotICAgICAgICB3aWR0aDogMjAwcHg7Ci0gICAgICAgIGhlaWdodDogMTAwcHg7Ci0gICAg
ICAgIHRvcDogMDsKLSAgICAgICAgbGVmdDogMDsKLSAgICAgICAgcG9zaXRpb246IGFic29sdXRl
OwotICAgIH0KLSAgICA8L3N0eWxlPgorPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9Imlu
aXRpYWwtc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8u
Li9yZXNvdXJjZXMvdWktaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzdHlsZT4KKyNlZGl0YWJsZSB7
CisgICAgd2lkdGg6IDMyMHB4OworICAgIGhlaWdodDogMzIwcHg7CisgICAgdG9wOiAwOworICAg
IGxlZnQ6IDA7CisgICAgcG9zaXRpb246IGFic29sdXRlOworfQorPC9zdHlsZT4KIDwvaGVhZD4K
IAotPGJvZHkgc3R5bGU9Im1hcmdpbjogMDsiIG9ubG9hZD1ydW5UZXN0KCk+Ci0gICAgPGlucHV0
IGNvbnRlbnRlZGl0YWJsZSBpZD0iZWRpdGFibGUiPjwvaW5wdXQ+Ci0gICAgPHA+VG8gbWFudWFs
bHkgdGVzdCwgdHlwZSAndCcgaW50byB0aGUgY29udGVudGVkaXRhYmxlIGFuZCB0cnkgdG8gc2Vs
ZWN0IGEgY2FuZGlkYXRlLiBUaGUgcmVwbGFjZW1lbnQgdGV4dCBzaG91bGQgbm90IGJlIGluc2Vy
dGVkLjwvcD4KLSAgICA8ZGl2IGlkPSJvdXRwdXQiPjwvZGl2PgorPGJvZHkgc3R5bGU9Im1hcmdp
bjogMDsiPgorPGlucHV0IGNvbnRlbnRlZGl0YWJsZSBpZD0iZWRpdGFibGUiPjwvaW5wdXQ+Cis8
cD5UaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCA8Y29kZT5iZWZvcmVpbnB1dDwvY29kZT4gZXZlbnRz
IG9mIGlucHV0VHlwZSAiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0IiBjYW4gYmUgcHJldmVudGVkLjwv
cD4KKzxwPlRvIG1hbnVhbGx5IHRlc3QsIHR5cGUgJ1QnIGludG8gdGhlIHRleHQgZmllbGQgYW5k
IHRyeSB0byBzZWxlY3QgYSBjYW5kaWRhdGUuIFRoZSByZXBsYWNlbWVudCB0ZXh0IHNob3VsZCBu
b3QgYmUgaW5zZXJ0ZWQuPC9wPgorPHByZSBpZD0ib3V0cHV0Ij48L3ByZT4KKzxzY3JpcHQ+Cits
ZXQgd3JpdGUgPSAobWVzc2FnZSkgPT4gb3V0cHV0LmlubmVySFRNTCArPSAobWVzc2FnZSArICI8
YnI+Iik7CisKK2Z1bmN0aW9uIGNoZWNrRm9yQ29tcGxldGlvbigpIHsKKyAgICBkb25lQ291bnQg
PSB3aW5kb3cuZG9uZUNvdW50ID8gZG9uZUNvdW50IDogMDsKKyAgICBpZiAoKytkb25lQ291bnQg
PT0gMiAmJiB3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7Cit9CisKK2Z1bmN0aW9uIGhhbmRsZUJlZm9yZUlucHV0KGV2ZW50KSB7CisgICAgaWYgKGV2
ZW50LmlucHV0VHlwZSAhPT0gImluc2VydFJlcGxhY2VtZW50VGV4dCIpCisgICAgICAgIHJldHVy
bjsKKworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisKKyAgICB3cml0ZShgUHJldmVudGVk
ICJpbnNlcnRSZXBsYWNlbWVudFRleHQiIHdpdGggZGF0YTogIiR7ZXZlbnQuZGF0YX0iYCk7Cisg
ICAgc2V0VGltZW91dCgoKSA9PiB7CisgICAgICAgIHdyaXRlKGBEb2VzIHRoZSBpbnB1dCB2YWx1
ZSBjb250YWluIHJlcGxhY2VtZW50IHRleHQ/ICR7ZWRpdGFibGUudmFsdWUuaW5jbHVkZXMoIlRo
ZSIpfWApOworICAgICAgICBjaGVja0ZvckNvbXBsZXRpb24oKTsKKyAgICB9LCAwKTsKK30KKwor
ZnVuY3Rpb24gdHJpZ2dlckF1dG9jb3JyZWN0aW9uQWZ0ZXJGaXJzdElucHV0KCkgeworICAgIGVk
aXRhYmxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImlucHV0IiwgdHJpZ2dlckF1dG9jb3JyZWN0aW9u
QWZ0ZXJGaXJzdElucHV0KTsKKyAgICB3cml0ZShgUmVwbGFjaW5nICJUIiB3aXRoICJUaGUiLi4u
YCk7CisgICAgZWRpdGFibGUuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgMSk7CisgICAgVUlIZWxwZXIu
YXBwbHlBdXRvY29ycmVjdGlvbigiVGhlIiwgIlQiKS50aGVuKGNoZWNrRm9yQ29tcGxldGlvbik7
Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4
dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworfQorCitlZGl0YWJsZS5hZGRF
dmVudExpc3RlbmVyKCJiZWZvcmVpbnB1dCIsIGhhbmRsZUJlZm9yZUlucHV0KTsKK2VkaXRhYmxl
LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgdHJpZ2dlckF1dG9jb3JyZWN0aW9uQWZ0ZXJGaXJz
dElucHV0KTsKK1VJSGVscGVyLmFjdGl2YXRlQW5kV2FpdEZvcklucHV0U2Vzc2lvbkF0KDE2MCwg
MTYwKS50aGVuKCgpID0+IFVJSGVscGVyLnR5cGVDaGFyYWN0ZXIoIlQiKSk7Cis8L3NjcmlwdD4K
IDwvYm9keT4KIAogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
aW9zL2lucHV0LWV2ZW50cy1pbnNlcnQtcmVwbGFjZW1lbnQtdGV4dC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pb3MvaW5wdXQtZXZlbnRzLWluc2VydC1yZXBsYWNlbWVu
dC10ZXh0LWV4cGVjdGVkLnR4dAppbmRleCA5ZmE0MGY5ZjQ3NDA4MmRkZWExODBiMWI4MmJkOTdl
M2M1MTk0OWYxLi4xZDI4Y2JhN2YxZjExYWQwYjZlYjY4YTIwNTk2NDNmMTBiNDUwMDE0IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pb3MvaW5wdXQtZXZlbnRzLWluc2VydC1y
ZXBsYWNlbWVudC10ZXh0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9pb3MvaW5wdXQtZXZlbnRzLWluc2VydC1yZXBsYWNlbWVudC10ZXh0LWV4cGVjdGVkLnR4dApA
QCAtMSw1ICsxLDkgQEAKLVRvIG1hbnVhbGx5IHRlc3QsIHR5cGUgJ3QnIGludG8gdGhlIGNvbnRl
bnRlZGl0YWJsZSBhbmQgdHJ5IHRvIHNlbGVjdCBhIGNhbmRpZGF0ZS4gVGhlIG91dHB1dCBzaG91
bGQgaW5kaWNhdGUgdGhhdCB0aGUgYmVmb3JlaW5wdXQgYW5kIGlucHV0IGV2ZW50cyBmb3IgdGhl
IHRleHQgcmVwbGFjZW1lbnQgd2VyZSBoYW5kbGVkLCBhbmQgdGhhdCB0aGUgcmFuZ2Ugb2YgdGhl
IGJlZm9yZWlucHV0IGV2ZW50IGlzIGZyb20gMCB0byAxLgorVGhlCitUaGlzIHRlc3QgdmVyaWZp
ZXMgdGhhdCBpbnB1dCBldmVudHMgb2YgdHlwZSAiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0IiB0YXJn
ZXQgdGhlIHJpZ2h0IHJhbmdlcy4KIAotUEFTUzogSGFuZGxlZCB0ZXh0IHJlcGxhY2VtZW50IGJl
Zm9yZSBpbnB1dCBldmVudCB3aXRoIHJhbmdlOiBbMCwgMV0uCi1QQVNTOiBIYW5kbGVkIHRleHQg
cmVwbGFjZW1lbnQgaW5wdXQgZXZlbnQuCitUbyBtYW51YWxseSB0ZXN0LCB0eXBlICdUJyBpbnRv
IHRoZSBpbnB1dCBmaWVsZCBhbmQgdHJ5IHRvIHNlbGVjdCBhIGNhbmRpZGF0ZS4gVGhlIG91dHB1
dCBzaG91bGQgaW5kaWNhdGUgdGhhdCB0aGUgYmVmb3JlaW5wdXQgYW5kIGlucHV0IGV2ZW50cyBm
b3IgdGhlIHRleHQgcmVwbGFjZW1lbnQgd2VyZSBoYW5kbGVkLCBhbmQgdGhhdCB0aGUgcmFuZ2Ug
b2YgdGhlIGJlZm9yZWlucHV0IGV2ZW50IGlzIGZyb20gMCB0byAxLgorCitSZXBsYWNpbmcgIlQi
IHdpdGggIlRoZSIuLi4KK09ic2VydmVkIHRleHQgcmVwbGFjZW1lbnQgYmVmb3JlIGlucHV0IGV2
ZW50IHdpdGggcmFuZ2U6IFswLCAxXSBhbmQgZGF0YTogIlRoZSIKK09ic2VydmVkIHRleHQgcmVw
bGFjZW1lbnQgaW5wdXQgZXZlbnQgd2l0aCBkYXRhOiAiVGhlIgogCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9pb3MvaW5wdXQtZXZlbnRzLWluc2VydC1yZXBsYWNlbWVudC10
ZXh0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pb3MvaW5wdXQtZXZlbnRzLWluc2Vy
dC1yZXBsYWNlbWVudC10ZXh0Lmh0bWwKaW5kZXggOGFkOWE3NzRlYzM0ODM5OGY4OTgwNTE5NGI5
MjVhZDc1OWY1NzY1OS4uMWFkYzI3ZmM5OWMzNjJlNTEwZGE5Yzc2ODY4OTg0MDZlY2NmYWVhNCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW9zL2lucHV0LWV2ZW50cy1pbnNl
cnQtcmVwbGFjZW1lbnQtdGV4dC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lv
cy9pbnB1dC1ldmVudHMtaW5zZXJ0LXJlcGxhY2VtZW50LXRleHQuaHRtbApAQCAtMSw5MCArMSw2
NCBAQAogPCFET0NUWVBFIGh0bWw+IDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgdXNlRmxleGli
bGVWaWV3cG9ydD10cnVlIF0gLS0+CiAKIDxodG1sPgotCiA8aGVhZD4KLSAgICA8bWV0YSBuYW1l
PSJ2aWV3cG9ydCIgY29udGVudD0iaW5pdGlhbC1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8i
PgotICAgIDxzY3JpcHQgaWQ9InVpLXNjcmlwdCIgdHlwZT0idGV4dC9wbGFpbiI+Ci0gICAgICAg
IChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHVpQ29udHJvbGxlci5kaWRTaG93S2V5Ym9hcmRD
YWxsYmFjayA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci50eXBl
Q2hhcmFjdGVyVXNpbmdIYXJkd2FyZUtleWJvYXJkKCJ0IiwgZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHVpQ29udHJvbGxlci5zZWxlY3RUZXh0Q2FuZGlkYXRlQXRJbmRleCgxLCBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci51aVNjcmlw
dENvbXBsZXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdWlDb250cm9sbGVyLnNpbmdsZVRhcEF0UG9p
bnQoJHgsICR5LCBmdW5jdGlvbigpIHt9KTsKLSAgICAgICAgfSkoKTsKLSAgICA8L3NjcmlwdD4K
KzxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJpbml0aWFsLXNjYWxlPTEuMCwgdXNlci1z
Y2FsYWJsZT1ubyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL3VpLWhlbHBlci5q
cyI+PC9zY3JpcHQ+Cis8c3R5bGU+CisjZWRpdGFibGUgeworICAgIHdpZHRoOiAyMDBweDsKKyAg
ICBoZWlnaHQ6IDIwMHB4OworICAgIHRvcDogMDsKKyAgICBsZWZ0OiAwOworICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+CiAKLSAgICA8c2NyaXB0PgotICAgICAg
ICB2YXIgcHJvZ3Jlc3MgPSAwOwotICAgICAgICBsZXQgd3JpdGUgPSAobWVzc2FnZSkgPT4gb3V0
cHV0LmlubmVySFRNTCArPSAobWVzc2FnZSArICI8YnI+Iik7Ci0gICAgICAgIGZ1bmN0aW9uIGdl
dFVJU2NyaXB0KCkgewotICAgICAgICAgICAgbGV0IHJlY3QgPSBlZGl0YWJsZS5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKTsKLSAgICAgICAgICAgIGxldCBzY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgidWktc2NyaXB0IikudGV4dDsKLSAgICAgICAgICAgIHNjcmlwdCA9IHNjcmlwdC5y
ZXBsYWNlKCIkeCIsIHJlY3QubGVmdCArIHJlY3Qud2lkdGggLyAyKTsKLSAgICAgICAgICAgIHJl
dHVybiBzY3JpcHQucmVwbGFjZSgiJHkiLCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMik7Ci0g
ICAgICAgIH0KKzxib2R5IHN0eWxlPSJtYXJnaW46IDA7Ij4KKzxkaXYgY29udGVudGVkaXRhYmxl
IGlkPSJlZGl0YWJsZSI+PC9kaXY+Cis8cD5UaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBpbnB1dCBl
dmVudHMgb2YgdHlwZSAiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0IiB0YXJnZXQgdGhlIHJpZ2h0IHJh
bmdlcy48L3A+Cis8cD5UbyBtYW51YWxseSB0ZXN0LCB0eXBlICdUJyBpbnRvIHRoZSBpbnB1dCBm
aWVsZCBhbmQgdHJ5IHRvIHNlbGVjdCBhIGNhbmRpZGF0ZS4gVGhlIG91dHB1dCBzaG91bGQgaW5k
aWNhdGUgdGhhdCB0aGUgYmVmb3JlaW5wdXQgYW5kIGlucHV0IGV2ZW50cyBmb3IgdGhlIHRleHQg
cmVwbGFjZW1lbnQgd2VyZSBoYW5kbGVkLCBhbmQgdGhhdCB0aGUgcmFuZ2Ugb2YgdGhlIGJlZm9y
ZWlucHV0IGV2ZW50IGlzIGZyb20gMCB0byAxLjwvcD4KKzxkaXYgaWQ9Im91dHB1dCI+PC9kaXY+
Cis8c2NyaXB0PgorbGV0IHdyaXRlID0gKG1lc3NhZ2UpID0+IG91dHB1dC5pbm5lckhUTUwgKz0g
KG1lc3NhZ2UgKyAiPGJyPiIpOwogCi0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewot
ICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Ci0gICAgICAgICAgICB0ZXN0UnVu
bmVyLndhaXRVbnRpbERvbmUoKTsKLSAgICAgICAgICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRJ
bnB1dEV2ZW50c0VuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIH0KK2Z1bmN0aW9uIGNoZWNrRm9yQ29t
cGxldGlvbigpIHsKKyAgICBkb25lQ291bnQgPSB3aW5kb3cuZG9uZUNvdW50ID8gZG9uZUNvdW50
IDogMDsKKyAgICBpZiAoKytkb25lQ291bnQgPT0gMyAmJiB3aW5kb3cudGVzdFJ1bm5lcikKKyAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CiAKLSAgICAgICAgZnVuY3Rpb24gaW5j
cmVtZW50UHJvZ3Jlc3MoKQotICAgICAgICB7Ci0gICAgICAgICAgICBwcm9ncmVzcysrOwotICAg
ICAgICAgICAgaWYgKCF3aW5kb3cudGVzdFJ1bm5lciB8fCBwcm9ncmVzcyAhPT0gMykKLSAgICAg
ICAgICAgICAgICByZXR1cm47CitmdW5jdGlvbiBsb2dJbnB1dEV2ZW50KGV2ZW50KQoreworICAg
IGlmIChldmVudC5pbnB1dFR5cGUgIT09ICJpbnNlcnRSZXBsYWNlbWVudFRleHQiKQorICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgZWRpdGFibGUudGV4dENvbnRlbnQgPSAiIjsKLSAgICAgICAgICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICAgICAgICAgIH0sIDApOwotICAgICAgICB9CisgICAg
aWYgKGV2ZW50LnR5cGUgPT09ICJiZWZvcmVpbnB1dCIpIHsKKyAgICAgICAgbGV0IGZpcnN0UmFu
Z2UgPSBldmVudC5nZXRUYXJnZXRSYW5nZXMoKVswXTsKKyAgICAgICAgd3JpdGUoYE9ic2VydmVk
IHRleHQgcmVwbGFjZW1lbnQgYmVmb3JlIGlucHV0IGV2ZW50IHdpdGggcmFuZ2U6IFske2ZpcnN0
UmFuZ2Uuc3RhcnRPZmZzZXR9LCAke2ZpcnN0UmFuZ2UuZW5kT2Zmc2V0fV0gYW5kIGRhdGE6ICIk
e2V2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCJ0ZXh0L3BsYWluIil9ImApOworICAgIH0gZWxz
ZQorICAgICAgICB3cml0ZShgT2JzZXJ2ZWQgdGV4dCByZXBsYWNlbWVudCBpbnB1dCBldmVudCB3
aXRoIGRhdGE6ICIke2V2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCJ0ZXh0L3BsYWluIil9ImAp
OwogCi0gICAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgICBl
ZGl0YWJsZS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIGxvZ0lucHV0RXZlbnQpOwotICAgICAg
ICAgICAgZWRpdGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlaW5wdXQiLCBsb2dJbnB1dEV2
ZW50KTsKLSAgICAgICAgICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIgfHwgIXRlc3RSdW5uZXIu
cnVuVUlTY3JpcHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgIGNoZWNrRm9yQ29tcGxl
dGlvbigpOworfQogCi0gICAgICAgICAgICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KGdldFVJU2Ny
aXB0KCksIGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICAgICAgICAgIGluY3JlbWVudFByb2dy
ZXNzKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQorZnVuY3Rpb24gdHJpZ2dlckF1dG9j
b3JyZWN0aW9uQWZ0ZXJGaXJzdElucHV0KCkgeworICAgIGVkaXRhYmxlLnJlbW92ZUV2ZW50TGlz
dGVuZXIoImlucHV0IiwgdHJpZ2dlckF1dG9jb3JyZWN0aW9uQWZ0ZXJGaXJzdElucHV0KTsKKyAg
ICB3cml0ZShgUmVwbGFjaW5nICJUIiB3aXRoICJUaGUiLi4uYCk7CisgICAgZ2V0U2VsZWN0aW9u
KCkuc2V0QmFzZUFuZEV4dGVudChlZGl0YWJsZSwgMCwgZWRpdGFibGUsIDEpOworICAgIFVJSGVs
cGVyLmFwcGx5QXV0b2NvcnJlY3Rpb24oIlRoZSIsICJUIikudGhlbihjaGVja0ZvckNvbXBsZXRp
b24pOworfQogCi0gICAgICAgIGZ1bmN0aW9uIGxvZ0lucHV0RXZlbnQoZXZlbnQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChldmVudC5pbnB1dFR5cGUgIT09ICJpbnNlcnRSZXBsYWNlbWVu
dFRleHQiKQotICAgICAgICAgICAgICAgIHJldHVybjsKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikg
eworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGls
RG9uZSgpOworfQogCi0gICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gImJlZm9yZWlucHV0
IikgewotICAgICAgICAgICAgICAgIGxldCBmaXJzdFJhbmdlID0gZXZlbnQuZ2V0VGFyZ2V0UmFu
Z2VzKClbMF07Ci0gICAgICAgICAgICAgICAgd3JpdGUoYFBBU1M6IEhhbmRsZWQgdGV4dCByZXBs
YWNlbWVudCBiZWZvcmUgaW5wdXQgZXZlbnQgd2l0aCByYW5nZTogWyR7Zmlyc3RSYW5nZS5zdGFy
dE9mZnNldH0sICR7Zmlyc3RSYW5nZS5lbmRPZmZzZXR9XS5gKTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIHdyaXRlKGBQQVNTOiBIYW5kbGVkIHRleHQgcmVwbGFjZW1lbnQg
aW5wdXQgZXZlbnQuYCk7Ci0gICAgICAgICAgICBpbmNyZW1lbnRQcm9ncmVzcygpOwotICAgICAg
ICB9Ci0gICAgPC9zY3JpcHQ+Ci0gICAgPHN0eWxlPgotICAgICNlZGl0YWJsZSB7Ci0gICAgICAg
IHdpZHRoOiAyMDBweDsKLSAgICAgICAgaGVpZ2h0OiAyMDBweDsKLSAgICAgICAgdG9wOiAwOwot
ICAgICAgICBsZWZ0OiAwOwotICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgfQotICAg
IDwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IHN0eWxlPSJtYXJnaW46IDA7IiBvbmxvYWQ9cnVu
VGVzdCgpPgotICAgIDxkaXYgY29udGVudGVkaXRhYmxlIGlkPSJlZGl0YWJsZSI+PC9kaXY+Ci0g
ICAgPHA+VG8gbWFudWFsbHkgdGVzdCwgdHlwZSAndCcgaW50byB0aGUgY29udGVudGVkaXRhYmxl
IGFuZCB0cnkgdG8gc2VsZWN0IGEgY2FuZGlkYXRlLiBUaGUgb3V0cHV0IHNob3VsZCBpbmRpY2F0
ZSB0aGF0IHRoZSBiZWZvcmVpbnB1dCBhbmQgaW5wdXQgZXZlbnRzIGZvciB0aGUgdGV4dCByZXBs
YWNlbWVudCB3ZXJlIGhhbmRsZWQsIGFuZCB0aGF0IHRoZSByYW5nZSBvZiB0aGUgYmVmb3JlaW5w
dXQgZXZlbnQgaXMgZnJvbSAwIHRvIDEuPC9wPgotICAgIDxkaXYgaWQ9Im91dHB1dCI+PC9kaXY+
CitlZGl0YWJsZS5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmVpbnB1dCIsIGxvZ0lucHV0RXZlbnQp
OworZWRpdGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCBsb2dJbnB1dEV2ZW50KTsKK2Vk
aXRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgdHJpZ2dlckF1dG9jb3JyZWN0aW9uQWZ0
ZXJGaXJzdElucHV0KTsKK1VJSGVscGVyLmFjdGl2YXRlQW5kV2FpdEZvcklucHV0U2Vzc2lvbkF0
KDEwMCwgMTAwKS50aGVuKCgpID0+IFVJSGVscGVyLnR5cGVDaGFyYWN0ZXIoIlQiKSk7Cis8L3Nj
cmlwdD4KIDwvYm9keT4KLQogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vaW9zL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4
cGVjdGF0aW9ucwppbmRleCBiODgxZWQwMDRlYzAxNzI3ZDFmNTE4YjkzMDc2ZTlmOWNmNDhhMDMy
Li4zNjk0NGZhZTk4ZDQ5ODM0YjMwNTQ1NGU4MTIwZDI5MjAyOWNkMmQxIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMzA3OCw5ICszMDc4LDYgQEAgd2Vi
a2l0Lm9yZy9iLzE1NTA5MiBqcy9hcnJheWJ1ZmZlci13cmFwcGVycy5odG1sIFsgUGFzcyBUaW1l
b3V0IF0KIAogd2Via2l0Lm9yZy9iLzE3MjA1MiBbIFJlbGVhc2UgXSBpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2h0bWwvd2ViYXBwYXBpcy90aW1lcnMvdHlwZS1sb25nLXNldGludGVy
dmFsLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogCi0jIDxyZGFyOi8vcHJvYmxlbS8zMjU0MjQzNz4g
UkVHUkVTU0lPTiAoaU9TIDExKTogTGF5b3V0VGVzdCBmYXN0L2V2ZW50cy9pb3MvYmVmb3JlLWlu
cHV0LWV2ZW50cy1wcmV2ZW50LWNhbmRpZGF0ZS1pbnNlcnRpb24uaHRtbCBpcyB0aW1pbmcgb3V0
Ci1mYXN0L2V2ZW50cy9pb3MvYmVmb3JlLWlucHV0LWV2ZW50cy1wcmV2ZW50LWNhbmRpZGF0ZS1p
bnNlcnRpb24uaHRtbCBbIFRpbWVvdXQgXQotCiAjIDxyZGFyOi8vcHJvYmxlbS8zMjU0MjMwMD4g
UkVHUkVTU0lPTiAoaU9TIDExKTogTGF5b3V0VGVzdCBmYXN0L2V2ZW50cy9pb3MvY29udGVudGVk
aXRhYmxlLWF1dG9jYXBpdGFsaXplLmh0bWwgaXMgZmFpbGluZwogZmFzdC9ldmVudHMvaW9zL2Nv
bnRlbnRlZGl0YWJsZS1hdXRvY2FwaXRhbGl6ZS5odG1sIFsgRmFpbHVyZSBdCiAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3Jlc291cmNlcy91aS1oZWxwZXIuanMgYi9MYXlvdXRUZXN0cy9yZXNv
dXJjZXMvdWktaGVscGVyLmpzCmluZGV4IDQwYWQ4MmQ2M2RlZmRkNjViM2JkNzM0ZTY1NDA4Mjgx
OTg2YzZkYjQuLjE0ZjkzZTAxN2FkM2Y2N2I3NDc3MjhlNjEyNzA2N2I4YTcxNWYyYWQgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3Jlc291cmNlcy91aS1oZWxwZXIuanMKKysrIGIvTGF5b3V0VGVz
dHMvcmVzb3VyY2VzL3VpLWhlbHBlci5qcwpAQCAtMjQ2LDQgKzI0NiwyNiBAQCB3aW5kb3cuVUlI
ZWxwZXIgPSBjbGFzcyBVSUhlbHBlciB7CiAgICAgICAgICAgICB9KSgpYCwgcmVzb2x2ZSk7CiAg
ICAgICAgIH0pOwogICAgIH0KKworICAgIHN0YXRpYyB0eXBlQ2hhcmFjdGVyKGNoYXJhY3RlclN0
cmluZykKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5pc1dlYktpdDIoKSB8fCAhdGhpcy5pc0lP
UygpKSB7CisgICAgICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKGtleSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBlc2NhcGVkU3RyaW5nID0gY2hh
cmFjdGVyU3RyaW5nLnJlcGxhY2UoL2AvZywgIlxcYCIpOworICAgICAgICBjb25zdCB1aVNjcmlw
dCA9IGB1aUNvbnRyb2xsZXIudHlwZUNoYXJhY3RlclVzaW5nSGFyZHdhcmVLZXlib2FyZChcYCR7
ZXNjYXBlZFN0cmluZ31cYCwgKCkgPT4gdWlDb250cm9sbGVyLnVpU2NyaXB0Q29tcGxldGUoKSlg
OworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB0ZXN0UnVubmVyLnJ1blVJ
U2NyaXB0KHVpU2NyaXB0LCByZXNvbHZlKSk7CisgICAgfQorCisgICAgc3RhdGljIGFwcGx5QXV0
b2NvcnJlY3Rpb24obmV3VGV4dCwgb2xkVGV4dCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5p
c1dlYktpdDIoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjb25zdCBbZXNjYXBl
ZE5ld1RleHQsIGVzY2FwZWRPbGRUZXh0XSA9IFtuZXdUZXh0LnJlcGxhY2UoL2AvZywgIlxcYCIp
LCBvbGRUZXh0LnJlcGxhY2UoL2AvZywgIlxcYCIpXTsKKyAgICAgICAgY29uc3QgdWlTY3JpcHQg
PSBgdWlDb250cm9sbGVyLmFwcGx5QXV0b2NvcnJlY3Rpb24oXGAke2VzY2FwZWROZXdUZXh0fVxg
LCBcYCR7ZXNjYXBlZE9sZFRleHR9XGAsICgpID0+IHVpQ29udHJvbGxlci51aVNjcmlwdENvbXBs
ZXRlKCkpYDsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gdGVzdFJ1bm5l
ci5ydW5VSVNjcmlwdCh1aVNjcmlwdCwgcmVzb2x2ZSkpOworICAgIH0KIH0K
</data>
<flag name="review"
          id="364447"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346626</attachid>
            <date>2018-08-06 07:22:37 -0700</date>
            <delta_ts>2018-08-06 08:01:55 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-188335-20180806072237.patch</filename>
            <type>text/plain</type>
            <size>26424</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0NjAwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYWVlNzQ3ZDg3NDc5MmNjNDQwNjQxNDA0OTAwNTM5NmQz
OGZhMzZjNC4uODJkNDg1NTMzMWVjN2JiNmRiYzFjZWZlZjQ1OWE3Y2E3MTYxNDc0MCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMw
IEBACisyMDE4LTA4LTA1ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgor
CisgICAgICAgIFtpT1NdIFRlc3RzIHRoYXQgdHJ5IHRvIGludGVyYWN0IHdpdGggdGhlIFF1aWNr
VHlwZSBiYXIgdGltZSBvdXQgb24gaU9TIDExKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4MzM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjU0
MjQzNz4gYW5kIDxyZGFyOi8vcHJvYmxlbS8zMjU0MjQzMz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBUaW0gSG9ydG9uLgorCisgICAgICAgIFJlbW92ZSBhIFVJU2NyaXB0Q29udHJvbGxlciBoZWxw
ZXIgbWV0aG9kIHRoYXQgYXR0ZW1wdGVkIHRvIHdhaXQgZm9yIFF1aWNrVHlwZSBidXR0b25zIHRv
IGFwcGVhciwgYW5kIHRoZW4gc2VuZAorICAgICAgICB0b3VjaCBldmVudHMgdG8gdGhlIGJ1dHRv
bnMuIFRoZXNlIHdlcmUgb25seSB1c2VkIGZvciB0aGUgdHdvIHRlc3RzIHdoaWNoIHRoaXMgcGF0
Y2ggcmVmYWN0b3JzLiBTZWUgdGhlCisgICAgICAgIExheW91dFRlc3RzIENoYW5nZUxvZyBmb3Ig
bW9yZSBkZXRhaWwuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250
cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnNlbGVjdFRl
eHRDYW5kaWRhdGVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVk
L1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsOgorICAgICAg
ICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5j
cHA6CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6c2VsZWN0VGV4dENhbmRpZGF0
ZUF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6Ondh
aXRGb3JUZXh0UHJlZGljdGlvbnNWaWV3QW5kU2VsZWN0Q2FuZGlkYXRlQXRJbmRleCk6IERlbGV0
ZWQuCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRD
b250cm9sbGVyLmg6CisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9zcGkvVUlLaXRUZXN0U1BJ
Lmg6CisKKyAgICAgICAgUmVtb3ZlIGFuIGludGVybmFsIGNsYXNzIGRlY2xhcmF0aW9uIHRoYXQg
aXMgbm93IHVubmVjZXNzYXJ5LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlT
Y3JpcHRDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6
OnNlbGVjdFRleHRDYW5kaWRhdGVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6VUlT
Y3JpcHRDb250cm9sbGVyOjp3YWl0Rm9yVGV4dFByZWRpY3Rpb25zVmlld0FuZFNlbGVjdENhbmRp
ZGF0ZUF0SW5kZXgpOiBEZWxldGVkLgorCiAyMDE4LTA4LTA2ICBXZW5zb24gSHNpZWggIDx3ZW5z
b25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIENhcmV0IGRpc2FwcGVhcnMgYWZ0
ZXIgcmVzaWduaW5nIGFuZCBiZWNvbWluZyBmaXJzdCByZXNwb25kZXIgaWYgYWN0aXZlIGZvY3Vz
IHN0YXRlIGlzIHJldGFpbmVkCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3Mv
VUlTY3JpcHRDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJU2Ny
aXB0Q29udHJvbGxlcklPUy5tbQppbmRleCBhNDQ2ZmY1NTUyYTAzODc3ODNjMDMxNzQ3Y2VlMDRl
ZDhjYTAzYTFhLi43NjQyNWI5NzM2MTFhZjA0YjM2M2UwMzA4NWI5MjI2ZGQ3YzZmNmMyIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1t
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0K
QEAgLTE0MywxMCArMTQzLDYgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnR5cGVDaGFyYWN0
ZXJVc2luZ0hhcmR3YXJlS2V5Ym9hcmQoSlNTdHJpbmdSZWYgY2hhcmFjdGUKIHsKIH0KIAotdm9p
ZCBVSVNjcmlwdENvbnRyb2xsZXI6OnNlbGVjdFRleHRDYW5kaWRhdGVBdEluZGV4KGxvbmcsIEpT
VmFsdWVSZWYpCi17Ci19Ci0KIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjprZXlEb3duVXNpbmdI
YXJkd2FyZUtleWJvYXJkKEpTU3RyaW5nUmVmIGNoYXJhY3RlciwgSlNWYWx1ZVJlZiBjYWxsYmFj
aykKIHsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250
ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwgYi9Ub29scy9UZXN0UnVubmVyU2hh
cmVkL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsCmluZGV4
IDhkZWI0ZWIxMGIyMjYyYzA1YTY0YzNkM2E4Yzk2YWE2MjQ0YzA5ZmEuLmFiZjg0NzA4NTc2ZjM3
ODNhM2M3OTdmMWE5OGNkNGZlMDgwMWM1ZTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJT
aGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwKKysr
IGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3Jp
cHRDb250cm9sbGVyLmlkbApAQCAtNjMsOCArNjMsNiBAQCBpbnRlcmZhY2UgVUlTY3JpcHRDb250
cm9sbGVyIHsKICAgICB2b2lkIGtleURvd25Vc2luZ0hhcmR3YXJlS2V5Ym9hcmQoRE9NU3RyaW5n
IGNoYXJhY3Rlciwgb2JqZWN0IGNhbGxiYWNrKTsKICAgICB2b2lkIGtleVVwVXNpbmdIYXJkd2Fy
ZUtleWJvYXJkKERPTVN0cmluZyBjaGFyYWN0ZXIsIG9iamVjdCBjYWxsYmFjayk7CiAKLSAgICB2
b2lkIHNlbGVjdFRleHRDYW5kaWRhdGVBdEluZGV4KGxvbmcgaW5kZXgsIG9iamVjdCBjYWxsYmFj
ayk7Ci0KICAgICAvLyBldmVudHNKU09OIGRlc2NyaWJlcyBhIHNlcmllcyBvZiB1c2VyIGV2ZW50
cyBpbiBKU09OIGZvcm0uIEZvciB0aGUga2V5cywgc2VlIEhJREV2ZW50R2VuZXJhdG9yLm1tLgog
ICAgIC8vIEZvciBleGFtcGxlLCB0aGlzIEpTT04gZGVzY3JpYmVzIGEgdG91Y2ggZG93biBmb2xs
b3dlZCBieSBhIHRvdWNoIHVwIChpLmUuIGEgc2luZ2xlIHRhcCkuCiAgICAgLy8gIHsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dHJvbGxlci5jcHAgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNj
cmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IGU5NGYwYWY3MmJiYjM0NWFmNjY5MzM1N2YzMDgxMWI3
Zjg5N2EyODIuLjQ5MmM5NDhjMzc4ZDQ0NDM4NTcxZGJkMjJhZjUzNGExNWNhMTg2NzUgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dHJvbGxlci5jcHAKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQv
VUlTY3JpcHRDb250cm9sbGVyLmNwcApAQCAtMjgyLDE0ICsyODIsNiBAQCB2b2lkIFVJU2NyaXB0
Q29udHJvbGxlcjo6a2V5VXBVc2luZ0hhcmR3YXJlS2V5Ym9hcmQoSlNTdHJpbmdSZWYsIEpTVmFs
dWVSZWYpCiB7CiB9CiAKLXZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpzZWxlY3RUZXh0Q2FuZGlk
YXRlQXRJbmRleChsb25nLCBKU1ZhbHVlUmVmKQotewotfQotCi12b2lkIFVJU2NyaXB0Q29udHJv
bGxlcjo6d2FpdEZvclRleHRQcmVkaWN0aW9uc1ZpZXdBbmRTZWxlY3RDYW5kaWRhdGVBdEluZGV4
KGxvbmcsIHVuc2lnbmVkLCBmbG9hdCkKLXsKLX0KLQogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6
OmtleURvd25Vc2luZ0hhcmR3YXJlS2V5Ym9hcmQoSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYpCiB7
CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9V
SVNjcmlwdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250
ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IDk1ZDdkNTQ5ODU2NDVhYjdiMzYzMmVlODA5
YjJjMGY2NGJiMjZiMDYuLjdmZDc0ZGE5NTcwNDc2ZDA1Mjk1ZTBjMjdmNTQ2MDJjMzdmOWRkZGQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2Ny
aXB0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250
ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCkBAIC04OSw4ICs4OSw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIGtleURvd25Vc2luZ0hhcmR3YXJlS2V5Ym9hcmQoSlNTdHJpbmdSZWYgY2hhcmFjdGVyLCBK
U1ZhbHVlUmVmIGNhbGxiYWNrKTsKICAgICB2b2lkIGtleVVwVXNpbmdIYXJkd2FyZUtleWJvYXJk
KEpTU3RyaW5nUmVmIGNoYXJhY3RlciwgSlNWYWx1ZVJlZiBjYWxsYmFjayk7CiAKLSAgICB2b2lk
IHNlbGVjdFRleHRDYW5kaWRhdGVBdEluZGV4KGxvbmcgaW5kZXgsIEpTVmFsdWVSZWYgY2FsbGJh
Y2spOwotCiAgICAgdm9pZCBrZXlib2FyZEFjY2Vzc29yeUJhck5leHQoKTsKICAgICB2b2lkIGtl
eWJvYXJkQWNjZXNzb3J5QmFyUHJldmlvdXMoKTsKIApAQCAtMjA3LDcgKzIwNSw2IEBAIHByaXZh
dGU6CiAgICAgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKSBmaW5hbDsKIAogICAgIEpTT2JqZWN0
UmVmIG9iamVjdEZyb21SZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGNvbnN0OwotICAg
IHZvaWQgd2FpdEZvclRleHRQcmVkaWN0aW9uc1ZpZXdBbmRTZWxlY3RDYW5kaWRhdGVBdEluZGV4
KGxvbmcgaW5kZXgsIHVuc2lnbmVkIGNhbGxiYWNrSUQsIGZsb2F0IGludGVydmFsKTsKIAogICAg
IFVJU2NyaXB0Q29udGV4dCogbV9jb250ZXh0OwogfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvc3BpL1VJS2l0VGVzdFNQSS5oIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9z
cGkvVUlLaXRUZXN0U1BJLmgKaW5kZXggZGZjYzIxMzA0ODQ2NTAwYzcyODY5YTFmMzA2NDgxZTY0
YjJmNWUwYi4uMDM0ZWIyYmUyMmY5ZjFkOGI1ODMyNmU1M2UyZWU1MWNkZTA5YWQ0OSAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9zcGkvVUlLaXRUZXN0U1BJLmgKKysrIGIvVG9v
bHMvVGVzdFJ1bm5lclNoYXJlZC9zcGkvVUlLaXRUZXN0U1BJLmgKQEAgLTQxLDExICs0MSw2IEBA
CiAjaW1wb3J0IDxVSUtpdC9VSVNjcmVlbl9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9fVUlB
cHBsaWNhdGlvblJvdGF0aW9uRm9sbG93aW5nLmg+CiAKLUBpbnRlcmZhY2UgVUlLZXlib2FyZFBy
ZWRpY3Rpb25WaWV3IDogVUlWaWV3Ci0rIChVSUtleWJvYXJkUHJlZGljdGlvblZpZXcgKilhY3Rp
dmVJbnN0YW5jZTsKLS0gKEJPT0wpaGFzUHJlZGljdGlvbnM7Ci1AZW5kCi0KICNlbHNlCiAKICNp
bXBvcnQgIklPS2l0U1BJLmgiCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lv
cy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9V
SVNjcmlwdENvbnRyb2xsZXJJT1MubW0KaW5kZXggYzZlYmZjYTUyMTUxOTA2ZjY0MjBkYzc2MGQw
NTFhODBmZWE3MzVhZi4uNjU5NzA0MDM4NGUzZmU3ZWEzOWZkZDE2MjBlYmIxMzlkZjMyYzljMyAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVy
SU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxl
cklPUy5tbQpAQCAtMzc0LDUxICszNzQsNiBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6a2V5
VXBVc2luZ0hhcmR3YXJlS2V5Ym9hcmQoSlNTdHJpbmdSZWYgY2hhcmFjdGVyLCBKU1ZhbAogICAg
IH1dOwogfQogCi12b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6c2VsZWN0VGV4dENhbmRpZGF0ZUF0
SW5kZXgobG9uZyBpbmRleCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKLXsKLSNpZiBVU0UoQVBQTEVf
SU5URVJOQUxfU0RLKQotICAgIHN0YXRpYyBjb25zdCBmbG9hdCB0ZXh0UHJlZGljdGlvbnNQb2xs
aW5nSW50ZXJ2YWwgPSAwLjE7Ci0gICAgdW5zaWduZWQgY2FsbGJhY2tJRCA9IG1fY29udGV4dC0+
cHJlcGFyZUZvckFzeW5jVGFzayhjYWxsYmFjaywgQ2FsbGJhY2tUeXBlTm9uUGVyc2lzdGVudCk7
Ci0gICAgd2FpdEZvclRleHRQcmVkaWN0aW9uc1ZpZXdBbmRTZWxlY3RDYW5kaWRhdGVBdEluZGV4
KGluZGV4LCBjYWxsYmFja0lELCB0ZXh0UHJlZGljdGlvbnNQb2xsaW5nSW50ZXJ2YWwpOwotI2Vs
c2UKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIG5vLW9wIG9uIG5vbi1pbnRlcm5hbCBidWlsZHMg
ZHVlIHRvIFVJS2V5Ym9hcmRQcmVkaWN0aW9uVmlldyBiZWluZyB1bmF2YWlsYWJsZS4gSWRlYWxs
eSwgdGhlcmUgc2hvdWxkIGJlIGEgYmV0dGVyIHdheSB0bwotICAgIC8vIHJldHJpZXZlIGluZm9y
bWF0aW9uIGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBwcmVkaWN0aXZlIHRleHQgdmlldyB0aGF0IHdp
bGwgYmUgY29tcGF0aWJsZSB3aXRoIE9wZW5Tb3VyY2UuCi0gICAgVU5VU0VEX1BBUkFNKGluZGV4
KTsKLSAgICBVTlVTRURfUEFSQU0oY2FsbGJhY2spOwotI2VuZGlmCi19Ci0KLXZvaWQgVUlTY3Jp
cHRDb250cm9sbGVyOjp3YWl0Rm9yVGV4dFByZWRpY3Rpb25zVmlld0FuZFNlbGVjdENhbmRpZGF0
ZUF0SW5kZXgobG9uZyBpbmRleCwgdW5zaWduZWQgY2FsbGJhY2tJRCwgZmxvYXQgaW50ZXJ2YWwp
Ci17Ci0gICAgaWQgVUlLZXlib2FyZFByZWRpY3Rpb25WaWV3Q2xhc3MgPSBOU0NsYXNzRnJvbVN0
cmluZyhAIlVJS2V5Ym9hcmRQcmVkaWN0aW9uVmlldyIpOwotICAgIGlmICghVUlLZXlib2FyZFBy
ZWRpY3Rpb25WaWV3Q2xhc3MpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCi0gICAgVUlLZXlib2FyZFByZWRpY3Rpb25WaWV3ICpwcmVkaWN0aW9uVmlldyA9
IChVSUtleWJvYXJkUHJlZGljdGlvblZpZXcgKilbVUlLZXlib2FyZFByZWRpY3Rpb25WaWV3Q2xh
c3MgYWN0aXZlSW5zdGFuY2VdOwotICAgIGlmICghW3ByZWRpY3Rpb25WaWV3IGhhc1ByZWRpY3Rp
b25zXSkgewotICAgICAgICBkaXNwYXRjaF9hZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJ
TUVfTk9XLCBpbnRlcnZhbCAqIE5TRUNfUEVSX1NFQyksIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF4oKSB7Ci0gICAgICAgICAgICB3YWl0Rm9yVGV4dFByZWRpY3Rpb25zVmlld0FuZFNlbGVj
dENhbmRpZGF0ZUF0SW5kZXgoaW5kZXgsIGNhbGxiYWNrSUQsIGludGVydmFsKTsKLSAgICAgICAg
fSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBQbGF0Zm9ybVdLVmlldyB3ZWJWaWV3
ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmll
dygpOwotICAgIENHUmVjdCBwcmVkaWN0aW9uVmlld0ZyYW1lID0gW3ByZWRpY3Rpb25WaWV3IGZy
YW1lXTsKLSAgICAvLyBUaGlzIGFzc3VtZXMgdGhlcmUgYXJlIDMgcHJlZGljdGVkIHRleHQgY2Vs
bHMgb2YgZXF1YWwgd2lkdGgsIHdoaWNoIGlzIHRoZSBjYXNlIG9uIGlPUy4KLSAgICBmbG9hdCBv
ZmZzZXRYID0gKGluZGV4ICogMiArIDEpICogQ0dSZWN0R2V0V2lkdGgocHJlZGljdGlvblZpZXdG
cmFtZSkgLyA2OwotICAgIGZsb2F0IG9mZnNldFkgPSBDR1JlY3RHZXRIZWlnaHQod2ViVmlldy53
aW5kb3cuZnJhbWUpIC0gQ0dSZWN0R2V0SGVpZ2h0KFtbcHJlZGljdGlvblZpZXcgc3VwZXJ2aWV3
XSBmcmFtZV0pICsgQ0dSZWN0R2V0SGVpZ2h0KHByZWRpY3Rpb25WaWV3RnJhbWUpIC8gMjsKLSAg
ICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSB0YXA6Q0dQb2lu
dE1ha2Uob2Zmc2V0WCwgb2Zmc2V0WSkgY29tcGxldGlvbkJsb2NrOl57Ci0gICAgICAgIGlmICht
X2NvbnRleHQpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmFzeW5jVGFza0NvbXBsZXRlKGNhbGxi
YWNrSUQpOwotICAgIH1dOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVO
VVNFRF9QQVJBTShjYWxsYmFja0lEKTsKLSAgICBVTlVTRURfUEFSQU0oaW50ZXJ2YWwpOwotI2Vu
ZGlmCi19Ci0KIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpkaXNtaXNzRm9ybUFjY2Vzc29yeVZp
ZXcoKQogewogICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndlYlZpZXcgPSBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYTA0
NTI3MzMzZjM0NDUyMDkzMzkzOTYwNDllY2M4OGY0MTQ0ZTBkOC4uNmIyMjI3MDU3MWYwOWY2MmNj
NDZiM2FmNDFiYzBkZDRiYTA5MWQ0MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE4LTA4LTA1
ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1Nd
IFRlc3RzIHRoYXQgdHJ5IHRvIGludGVyYWN0IHdpdGggdGhlIFF1aWNrVHlwZSBiYXIgdGltZSBv
dXQgb24gaU9TIDExKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTg4MzM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjU0MjQzNz4gYW5kIDxyZGFy
Oi8vcHJvYmxlbS8zMjU0MjQzMz4KKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgor
CisgICAgICAgIFJlZmFjdG9ycyBhIGNvdXBsZSBvZiB0ZXN0cyB0aGF0IGN1cnJlbnRseSByZWx5
IG9uIHRoZSBRdWlja1R5cGUgYmFyIGJlaW5nIHNob3duIHdoZW4gdGhlIGhhcmR3YXJlIGtleWJv
YXJkIGlzCisgICAgICAgIHByZXNlbnRlZCBpbiB0aGUgaU9TIHNpbXVsYXRvciwgc28gdGhhdCBp
dCBjYW4gaW5zZXJ0IHRleHQgc3VnZ2VzdGlvbnMgYnkgdGFwcGluZyBRdWlja1R5cGUgYmFyIGJ1
dHRvbnM7IGluIHRoZQorICAgICAgICBmaXJzdCBwbGFjZSwgaXQgd2FzIG5ldmVyIGd1YXJhbnRl
ZWQgdGhhdCB0aGlzIGJhciB3b3VsZCBzaG93IHVwLCBvciBldmVuIGhhdmUgbW9yZSB0aGFuIDEg
dGV4dCBzdWdnZXN0aW9uLgorICAgICAgICBJbnN0ZWFkLCB3ZSB1c2UgdGhlIGV4aXN0aW5nIFVJ
U2NyaXB0Q29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVjdGlvbiBtZXRob2QgdG8gdHJpZ2dlciB0
ZXh0IHJlcGxhY2VtZW50IGluIHRoZQorICAgICAgICBzYW1lIHdheSB0YXBwaW5nIGEgYnV0dG9u
IG9uIHRoZSBRdWlja1R5cGUgYmFyIHdvdWxkIHJlcGxhY2UgdGhlIGN1cnJlbnQgd29yZCB3aXRo
IHRoZSBzdWdnZXN0ZWQgd29yZC4KKworICAgICAgICAqIGZhc3QvZXZlbnRzL2lvcy9iZWZvcmUt
aW5wdXQtZXZlbnRzLXByZXZlbnQtY2FuZGlkYXRlLWluc2VydGlvbi1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZmFzdC9ldmVudHMvaW9zL2JlZm9yZS1pbnB1dC1ldmVudHMtcHJldmVudC1jYW5k
aWRhdGUtaW5zZXJ0aW9uLmh0bWw6CisgICAgICAgICogZmFzdC9ldmVudHMvaW9zL2lucHV0LWV2
ZW50cy1pbnNlcnQtcmVwbGFjZW1lbnQtdGV4dC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFz
dC9ldmVudHMvaW9zL2lucHV0LWV2ZW50cy1pbnNlcnQtcmVwbGFjZW1lbnQtdGV4dC5odG1sOgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9UZXN0RXhwZWN0YXRpb25zOgorCisgICAgICAgIFJlbW92
ZXMgYSBbVGltZW91dF0gZXhwZWN0YXRpb24uCisKKyAgICAgICAgKiByZXNvdXJjZXMvdWktaGVs
cGVyLmpzOgorICAgICAgICAod2luZG93LlVJSGVscGVyLnR5cGVDaGFyYWN0ZXIpOgorCisgICAg
ICAgIEFkZCBhIG5ldyBVSUhlbHBlciBtZXRob2QgdG8gdHlwZSBhIGNoYXJhY3RlciB1c2luZyB0
aGUga2V5Ym9hcmQuIFNlbmRzIGhhcmR3YXJlIGtleWJvYXJkIGV2ZW50cyBvbiB0aGUgV2ViS2l0
MgorICAgICAgICBwb3J0IG9mIGlPUywgYW5kIHVzZXMgRXZlbnRTZW5kZXIgZWxzZXdoZXJlLgor
CisgICAgICAgICh3aW5kb3cuVUlIZWxwZXIuYXBwbHlBdXRvY29ycmVjdGlvbik6CisKKyAgICAg
ICAgQWRkIGEgbmV3IFVJSGVscGVyIG1ldGhvZCB0aGF0IHdyYXBzIFVJU2NyaXB0Q29udHJvbGxl
cjo6YXBwbHlBdXRvY29ycmVjdGlvbi4gT25seSBzdXBwb3J0ZWQgaW4gV2ViS2l0MgorICAgICAg
ICBjdXJyZW50bHkuCisKKyAgICAgICAgKHdpbmRvdy5VSUhlbHBlcik6CisKIDIwMTgtMDgtMDYg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10g
Q2FyZXQgZGlzYXBwZWFycyBhZnRlciByZXNpZ25pbmcgYW5kIGJlY29taW5nIGZpcnN0IHJlc3Bv
bmRlciBpZiBhY3RpdmUgZm9jdXMgc3RhdGUgaXMgcmV0YWluZWQKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy9iZWZvcmUtaW5wdXQtZXZlbnRzLXByZXZlbnQtY2FuZGlk
YXRlLWluc2VydGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pb3Mv
YmVmb3JlLWlucHV0LWV2ZW50cy1wcmV2ZW50LWNhbmRpZGF0ZS1pbnNlcnRpb24tZXhwZWN0ZWQu
dHh0CmluZGV4IDk4ZDBjMmU4NmM4ZTgzY2ZkNzJkOWY1ZmY4OWYwNWIyZmY2MzAwMTIuLjIyNjc1
ZTM4ZWVlYjdkODhlYzQ0NmM0NGVkOGNmMDljN2VkZGMyZDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL2lvcy9iZWZvcmUtaW5wdXQtZXZlbnRzLXByZXZlbnQtY2FuZGlkYXRl
LWluc2VydGlvbi1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW9z
L2JlZm9yZS1pbnB1dC1ldmVudHMtcHJldmVudC1jYW5kaWRhdGUtaW5zZXJ0aW9uLWV4cGVjdGVk
LnR4dApAQCAtMSw1ICsxLDkgQEAKIAotVG8gbWFudWFsbHkgdGVzdCwgdHlwZSAndCcgaW50byB0
aGUgY29udGVudGVkaXRhYmxlIGFuZCB0cnkgdG8gc2VsZWN0IGEgY2FuZGlkYXRlLiBUaGUgcmVw
bGFjZW1lbnQgdGV4dCBzaG91bGQgbm90IGJlIGluc2VydGVkLgorVGhpcyB0ZXN0IHZlcmlmaWVz
IHRoYXQgYmVmb3JlaW5wdXQgZXZlbnRzIG9mIGlucHV0VHlwZSAiaW5zZXJ0UmVwbGFjZW1lbnRU
ZXh0IiBjYW4gYmUgcHJldmVudGVkLgogCi1QQVNTOiBUaGUgcmVwbGFjZW1lbnQgdGV4dCB3YXMg
cHJldmVudGVkLgorVG8gbWFudWFsbHkgdGVzdCwgdHlwZSAnVCcgaW50byB0aGUgdGV4dCBmaWVs
ZCBhbmQgdHJ5IHRvIHNlbGVjdCBhIGNhbmRpZGF0ZS4gVGhlIHJlcGxhY2VtZW50IHRleHQgc2hv
dWxkIG5vdCBiZSBpbnNlcnRlZC4KKworUmVwbGFjaW5nICJUIiB3aXRoICJUaGUiLi4uCitQcmV2
ZW50ZWQgImluc2VydFJlcGxhY2VtZW50VGV4dCIgd2l0aCBkYXRhOiAiVGhlIgorRG9lcyB0aGUg
aW5wdXQgdmFsdWUgY29udGFpbiByZXBsYWNlbWVudCB0ZXh0PyBmYWxzZQogCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pb3MvYmVmb3JlLWlucHV0LWV2ZW50cy1wcmV2ZW50
LWNhbmRpZGF0ZS1pbnNlcnRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy9i
ZWZvcmUtaW5wdXQtZXZlbnRzLXByZXZlbnQtY2FuZGlkYXRlLWluc2VydGlvbi5odG1sCmluZGV4
IGIxYWY0OTAyZTczOGRkMGNjNTZjMzNjZmNkNzQ3Y2Y5MGZhNTBiNmMuLjk4ZWVlYTdlOWVhZWEy
MDI1MmM3YTMwZGJiNTc5M2UwMjA3YjkxYjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL2lvcy9iZWZvcmUtaW5wdXQtZXZlbnRzLXByZXZlbnQtY2FuZGlkYXRlLWluc2VydGlv
bi5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy9iZWZvcmUtaW5wdXQtZXZl
bnRzLXByZXZlbnQtY2FuZGlkYXRlLWluc2VydGlvbi5odG1sCkBAIC0xLDkyICsxLDYzIEBACiA8
IURPQ1RZUEUgaHRtbD4gPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyB1c2VGbGV4aWJsZVZpZXdw
b3J0PXRydWUgXSAtLT4KIAogPGh0bWw+Ci0KIDxoZWFkPgotICAgIDxtZXRhIG5hbWU9InZpZXdw
b3J0IiBjb250ZW50PSJpbml0aWFsLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyI+Ci0gICAg
PHNjcmlwdCBpZD0idWktc2NyaXB0IiB0eXBlPSJ0ZXh0L3BsYWluIj4KLSAgICAgICAgKGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgdWlDb250cm9sbGVyLmRpZFNob3dLZXlib2FyZENhbGxiYWNr
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnR5cGVDaGFyYWN0
ZXJVc2luZ0hhcmR3YXJlS2V5Ym9hcmQoInQiLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdWlDb250cm9sbGVyLnNlbGVjdFRleHRDYW5kaWRhdGVBdEluZGV4KDEsIGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnVpU2NyaXB0Q29tcGxl
dGUoKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB1aUNvbnRyb2xsZXIuc2luZ2xlVGFwQXRQb2ludCgkeCwg
JHksIGZ1bmN0aW9uKCkge30pOwotICAgICAgICB9KSgpOwotICAgIDwvc2NyaXB0PgotCi0gICAg
PHNjcmlwdD4KLSAgICAgICAgdmFyIHByb2dyZXNzID0gMDsKLSAgICAgICAgdmFyIHJlcGxhY2Vt
ZW50VGV4dCA9ICIiOwotICAgICAgICBsZXQgd3JpdGUgPSAobWVzc2FnZSkgPT4gb3V0cHV0Lmlu
bmVySFRNTCArPSAobWVzc2FnZSArICI8YnI+Iik7Ci0gICAgICAgIGZ1bmN0aW9uIGdldFVJU2Ny
aXB0KCkgewotICAgICAgICAgICAgbGV0IHJlY3QgPSBlZGl0YWJsZS5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTsKLSAgICAgICAgICAgIGxldCBzY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgidWktc2NyaXB0IikudGV4dDsKLSAgICAgICAgICAgIHNjcmlwdCA9IHNjcmlwdC5yZXBsYWNl
KCIkeCIsIHJlY3QubGVmdCArIHJlY3Qud2lkdGggLyAyKTsKLSAgICAgICAgICAgIHJldHVybiBz
Y3JpcHQucmVwbGFjZSgiJHkiLCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMik7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKLSAgICAgICAgICAgIHRlc3RS
dW5uZXIuZHVtcEFzVGV4dCgpOwotICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25l
KCk7Ci0gICAgICAgICAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0SW5wdXRFdmVudHNFbmFibGVk
KHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gaW5jcmVtZW50UHJvZ3Jlc3Mo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBwcm9ncmVzcysrOwotICAgICAgICAgICAgaWYgKCF3
aW5kb3cudGVzdFJ1bm5lciB8fCBwcm9ncmVzcyAhPT0gMikKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGVkaXRhYmxlLnZhbHVlLmluZGV4T2YocmVwbGFjZW1lbnRUZXh0KSA9PSAtMSkKLSAg
ICAgICAgICAgICAgICAgICAgd3JpdGUoYFBBU1M6IFRoZSByZXBsYWNlbWVudCB0ZXh0IHdhcyBw
cmV2ZW50ZWQuYCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB3
cml0ZShgRkFJTDogVGhlIGlucHV0IHZhbHVlICR7ZWRpdGFibGUudmFsdWV9IHNob3VsZCBub3Qg
Y29udGFpbiByZXBsYWNlbWVudCB0ZXh0ICR7cmVwbGFjZW1lbnRUZXh0fS5gKTsKLSAgICAgICAg
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICAgICAgICAgIH0sIDApOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGVkaXRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZWlucHV0IiwgcHJldmVudEJlZm9y
ZUlucHV0KTsKLSAgICAgICAgICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIgfHwgIXRlc3RSdW5u
ZXIucnVuVUlTY3JpcHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICB0
ZXN0UnVubmVyLnJ1blVJU2NyaXB0KGdldFVJU2NyaXB0KCksIGZ1bmN0aW9uKHJlc3VsdCkgewot
ICAgICAgICAgICAgICAgIGluY3JlbWVudFByb2dyZXNzKCk7Ci0gICAgICAgICAgICB9KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHByZXZlbnRCZWZvcmVJbnB1dChldmVudCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKGV2ZW50LmlucHV0VHlwZSA9PT0gImluc2VydFJlcGxh
Y2VtZW50VGV4dCIpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlbWVudFRleHQgPSBldmVudC5k
YXRhOwotICAgICAgICAgICAgICAgIGlmICghcmVwbGFjZW1lbnRUZXh0KQotICAgICAgICAgICAg
ICAgICAgICB3cml0ZSgiRkFJTDogVGhlIHJlcGxhY2VtZW50IHRleHQgaW5wdXQgZXZlbnQgbGFj
a3MgZGF0YS4iKTsKLSAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAg
ICAgICAgICAgICAgIGluY3JlbWVudFByb2dyZXNzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgIDwvc2NyaXB0PgotICAgIDxzdHlsZT4KLSAgICAjZWRpdGFibGUgewotICAgICAg
ICB3aWR0aDogMjAwcHg7Ci0gICAgICAgIGhlaWdodDogMTAwcHg7Ci0gICAgICAgIHRvcDogMDsK
LSAgICAgICAgbGVmdDogMDsKLSAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIH0KLSAg
ICA8L3N0eWxlPgorPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9ImluaXRpYWwtc2NhbGU9
MS4wLCB1c2VyLXNjYWxhYmxlPW5vIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMv
dWktaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzdHlsZT4KKyNlZGl0YWJsZSB7CisgICAgd2lkdGg6
IDMyMHB4OworICAgIGhlaWdodDogMzIwcHg7CisgICAgdG9wOiAwOworICAgIGxlZnQ6IDA7Cisg
ICAgcG9zaXRpb246IGFic29sdXRlOworfQorPC9zdHlsZT4KIDwvaGVhZD4KIAotPGJvZHkgc3R5
bGU9Im1hcmdpbjogMDsiIG9ubG9hZD1ydW5UZXN0KCk+Ci0gICAgPGlucHV0IGNvbnRlbnRlZGl0
YWJsZSBpZD0iZWRpdGFibGUiPjwvaW5wdXQ+Ci0gICAgPHA+VG8gbWFudWFsbHkgdGVzdCwgdHlw
ZSAndCcgaW50byB0aGUgY29udGVudGVkaXRhYmxlIGFuZCB0cnkgdG8gc2VsZWN0IGEgY2FuZGlk
YXRlLiBUaGUgcmVwbGFjZW1lbnQgdGV4dCBzaG91bGQgbm90IGJlIGluc2VydGVkLjwvcD4KLSAg
ICA8ZGl2IGlkPSJvdXRwdXQiPjwvZGl2PgorPGJvZHkgc3R5bGU9Im1hcmdpbjogMDsiPgorPGlu
cHV0IGNvbnRlbnRlZGl0YWJsZSBpZD0iZWRpdGFibGUiPjwvaW5wdXQ+Cis8cD5UaGlzIHRlc3Qg
dmVyaWZpZXMgdGhhdCA8Y29kZT5iZWZvcmVpbnB1dDwvY29kZT4gZXZlbnRzIG9mIGlucHV0VHlw
ZSAiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0IiBjYW4gYmUgcHJldmVudGVkLjwvcD4KKzxwPlRvIG1h
bnVhbGx5IHRlc3QsIHR5cGUgJ1QnIGludG8gdGhlIHRleHQgZmllbGQgYW5kIHRyeSB0byBzZWxl
Y3QgYSBjYW5kaWRhdGUuIFRoZSByZXBsYWNlbWVudCB0ZXh0IHNob3VsZCBub3QgYmUgaW5zZXJ0
ZWQuPC9wPgorPHByZSBpZD0ib3V0cHV0Ij48L3ByZT4KKzxzY3JpcHQ+CitsZXQgd3JpdGUgPSAo
bWVzc2FnZSkgPT4gb3V0cHV0LmlubmVySFRNTCArPSAobWVzc2FnZSArICI8YnI+Iik7CisKK2Z1
bmN0aW9uIGNoZWNrRm9yQ29tcGxldGlvbigpIHsKKyAgICBkb25lQ291bnQgPSB3aW5kb3cuZG9u
ZUNvdW50ID8gZG9uZUNvdW50IDogMDsKKyAgICBpZiAoKytkb25lQ291bnQgPT0gMiAmJiB3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1
bmN0aW9uIGhhbmRsZUJlZm9yZUlucHV0KGV2ZW50KSB7CisgICAgaWYgKGV2ZW50LmlucHV0VHlw
ZSAhPT0gImluc2VydFJlcGxhY2VtZW50VGV4dCIpCisgICAgICAgIHJldHVybjsKKworICAgIGV2
ZW50LnByZXZlbnREZWZhdWx0KCk7CisKKyAgICB3cml0ZShgUHJldmVudGVkICJpbnNlcnRSZXBs
YWNlbWVudFRleHQiIHdpdGggZGF0YTogIiR7ZXZlbnQuZGF0YX0iYCk7CisgICAgc2V0VGltZW91
dCgoKSA9PiB7CisgICAgICAgIHdyaXRlKGBEb2VzIHRoZSBpbnB1dCB2YWx1ZSBjb250YWluIHJl
cGxhY2VtZW50IHRleHQ/ICR7ZWRpdGFibGUudmFsdWUuaW5jbHVkZXMoIlRoZSIpfWApOworICAg
ICAgICBjaGVja0ZvckNvbXBsZXRpb24oKTsKKyAgICB9LCAwKTsKK30KKworZnVuY3Rpb24gdHJp
Z2dlckF1dG9jb3JyZWN0aW9uQWZ0ZXJGaXJzdElucHV0KCkgeworICAgIGVkaXRhYmxlLnJlbW92
ZUV2ZW50TGlzdGVuZXIoImlucHV0IiwgdHJpZ2dlckF1dG9jb3JyZWN0aW9uQWZ0ZXJGaXJzdElu
cHV0KTsKKyAgICB3cml0ZShgUmVwbGFjaW5nICJUIiB3aXRoICJUaGUiLi4uYCk7CisgICAgZWRp
dGFibGUuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgMSk7CisgICAgVUlIZWxwZXIuYXBwbHlBdXRvY29y
cmVjdGlvbigiVGhlIiwgIlQiKS50aGVuKGNoZWNrRm9yQ29tcGxldGlvbik7Cit9CisKK2lmICh3
aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworfQorCitlZGl0YWJsZS5hZGRFdmVudExpc3RlbmVy
KCJiZWZvcmVpbnB1dCIsIGhhbmRsZUJlZm9yZUlucHV0KTsKK2VkaXRhYmxlLmFkZEV2ZW50TGlz
dGVuZXIoImlucHV0IiwgdHJpZ2dlckF1dG9jb3JyZWN0aW9uQWZ0ZXJGaXJzdElucHV0KTsKK1VJ
SGVscGVyLmFjdGl2YXRlQW5kV2FpdEZvcklucHV0U2Vzc2lvbkF0KDE2MCwgMTYwKS50aGVuKCgp
ID0+IFVJSGVscGVyLnR5cGVDaGFyYWN0ZXIoIlQiKSk7Cis8L3NjcmlwdD4KIDwvYm9keT4KIAog
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW9zL2lucHV0LWV2
ZW50cy1pbnNlcnQtcmVwbGFjZW1lbnQtdGV4dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9pb3MvaW5wdXQtZXZlbnRzLWluc2VydC1yZXBsYWNlbWVudC10ZXh0LWV4cGVj
dGVkLnR4dAppbmRleCA5ZmE0MGY5ZjQ3NDA4MmRkZWExODBiMWI4MmJkOTdlM2M1MTk0OWYxLi4x
ZDI4Y2JhN2YxZjExYWQwYjZlYjY4YTIwNTk2NDNmMTBiNDUwMDE0IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9pb3MvaW5wdXQtZXZlbnRzLWluc2VydC1yZXBsYWNlbWVudC10
ZXh0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pb3MvaW5wdXQt
ZXZlbnRzLWluc2VydC1yZXBsYWNlbWVudC10ZXh0LWV4cGVjdGVkLnR4dApAQCAtMSw1ICsxLDkg
QEAKLVRvIG1hbnVhbGx5IHRlc3QsIHR5cGUgJ3QnIGludG8gdGhlIGNvbnRlbnRlZGl0YWJsZSBh
bmQgdHJ5IHRvIHNlbGVjdCBhIGNhbmRpZGF0ZS4gVGhlIG91dHB1dCBzaG91bGQgaW5kaWNhdGUg
dGhhdCB0aGUgYmVmb3JlaW5wdXQgYW5kIGlucHV0IGV2ZW50cyBmb3IgdGhlIHRleHQgcmVwbGFj
ZW1lbnQgd2VyZSBoYW5kbGVkLCBhbmQgdGhhdCB0aGUgcmFuZ2Ugb2YgdGhlIGJlZm9yZWlucHV0
IGV2ZW50IGlzIGZyb20gMCB0byAxLgorVGhlCitUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBpbnB1
dCBldmVudHMgb2YgdHlwZSAiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0IiB0YXJnZXQgdGhlIHJpZ2h0
IHJhbmdlcy4KIAotUEFTUzogSGFuZGxlZCB0ZXh0IHJlcGxhY2VtZW50IGJlZm9yZSBpbnB1dCBl
dmVudCB3aXRoIHJhbmdlOiBbMCwgMV0uCi1QQVNTOiBIYW5kbGVkIHRleHQgcmVwbGFjZW1lbnQg
aW5wdXQgZXZlbnQuCitUbyBtYW51YWxseSB0ZXN0LCB0eXBlICdUJyBpbnRvIHRoZSBpbnB1dCBm
aWVsZCBhbmQgdHJ5IHRvIHNlbGVjdCBhIGNhbmRpZGF0ZS4gVGhlIG91dHB1dCBzaG91bGQgaW5k
aWNhdGUgdGhhdCB0aGUgYmVmb3JlaW5wdXQgYW5kIGlucHV0IGV2ZW50cyBmb3IgdGhlIHRleHQg
cmVwbGFjZW1lbnQgd2VyZSBoYW5kbGVkLCBhbmQgdGhhdCB0aGUgcmFuZ2Ugb2YgdGhlIGJlZm9y
ZWlucHV0IGV2ZW50IGlzIGZyb20gMCB0byAxLgorCitSZXBsYWNpbmcgIlQiIHdpdGggIlRoZSIu
Li4KK09ic2VydmVkIHRleHQgcmVwbGFjZW1lbnQgYmVmb3JlIGlucHV0IGV2ZW50IHdpdGggcmFu
Z2U6IFswLCAxXSBhbmQgZGF0YTogIlRoZSIKK09ic2VydmVkIHRleHQgcmVwbGFjZW1lbnQgaW5w
dXQgZXZlbnQgd2l0aCBkYXRhOiAiVGhlIgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9pb3MvaW5wdXQtZXZlbnRzLWluc2VydC1yZXBsYWNlbWVudC10ZXh0Lmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pb3MvaW5wdXQtZXZlbnRzLWluc2VydC1yZXBsYWNlbWVu
dC10ZXh0Lmh0bWwKaW5kZXggOGFkOWE3NzRlYzM0ODM5OGY4OTgwNTE5NGI5MjVhZDc1OWY1NzY1
OS4uMWFkYzI3ZmM5OWMzNjJlNTEwZGE5Yzc2ODY4OTg0MDZlY2NmYWVhNCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW9zL2lucHV0LWV2ZW50cy1pbnNlcnQtcmVwbGFjZW1l
bnQtdGV4dC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy9pbnB1dC1ldmVu
dHMtaW5zZXJ0LXJlcGxhY2VtZW50LXRleHQuaHRtbApAQCAtMSw5MCArMSw2NCBAQAogPCFET0NU
WVBFIGh0bWw+IDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgdXNlRmxleGlibGVWaWV3cG9ydD10
cnVlIF0gLS0+CiAKIDxodG1sPgotCiA8aGVhZD4KLSAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIg
Y29udGVudD0iaW5pdGlhbC1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iPgotICAgIDxzY3Jp
cHQgaWQ9InVpLXNjcmlwdCIgdHlwZT0idGV4dC9wbGFpbiI+Ci0gICAgICAgIChmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgIHVpQ29udHJvbGxlci5kaWRTaG93S2V5Ym9hcmRDYWxsYmFjayA9IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci50eXBlQ2hhcmFjdGVyVXNp
bmdIYXJkd2FyZUtleWJvYXJkKCJ0IiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHVpQ29udHJvbGxlci5zZWxlY3RUZXh0Q2FuZGlkYXRlQXRJbmRleCgxLCBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci51aVNjcmlwdENvbXBsZXRlKCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgdWlDb250cm9sbGVyLnNpbmdsZVRhcEF0UG9pbnQoJHgsICR5LCBm
dW5jdGlvbigpIHt9KTsKLSAgICAgICAgfSkoKTsKLSAgICA8L3NjcmlwdD4KKzxtZXRhIG5hbWU9
InZpZXdwb3J0IiBjb250ZW50PSJpbml0aWFsLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyI+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL3VpLWhlbHBlci5qcyI+PC9zY3JpcHQ+
Cis8c3R5bGU+CisjZWRpdGFibGUgeworICAgIHdpZHRoOiAyMDBweDsKKyAgICBoZWlnaHQ6IDIw
MHB4OworICAgIHRvcDogMDsKKyAgICBsZWZ0OiAwOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
K30KKzwvc3R5bGU+Cis8L2hlYWQ+CiAKLSAgICA8c2NyaXB0PgotICAgICAgICB2YXIgcHJvZ3Jl
c3MgPSAwOwotICAgICAgICBsZXQgd3JpdGUgPSAobWVzc2FnZSkgPT4gb3V0cHV0LmlubmVySFRN
TCArPSAobWVzc2FnZSArICI8YnI+Iik7Ci0gICAgICAgIGZ1bmN0aW9uIGdldFVJU2NyaXB0KCkg
ewotICAgICAgICAgICAgbGV0IHJlY3QgPSBlZGl0YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo
KTsKLSAgICAgICAgICAgIGxldCBzY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidWkt
c2NyaXB0IikudGV4dDsKLSAgICAgICAgICAgIHNjcmlwdCA9IHNjcmlwdC5yZXBsYWNlKCIkeCIs
IHJlY3QubGVmdCArIHJlY3Qud2lkdGggLyAyKTsKLSAgICAgICAgICAgIHJldHVybiBzY3JpcHQu
cmVwbGFjZSgiJHkiLCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMik7Ci0gICAgICAgIH0KKzxi
b2R5IHN0eWxlPSJtYXJnaW46IDA7Ij4KKzxkaXYgY29udGVudGVkaXRhYmxlIGlkPSJlZGl0YWJs
ZSI+PC9kaXY+Cis8cD5UaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBpbnB1dCBldmVudHMgb2YgdHlw
ZSAiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0IiB0YXJnZXQgdGhlIHJpZ2h0IHJhbmdlcy48L3A+Cis8
cD5UbyBtYW51YWxseSB0ZXN0LCB0eXBlICdUJyBpbnRvIHRoZSBpbnB1dCBmaWVsZCBhbmQgdHJ5
IHRvIHNlbGVjdCBhIGNhbmRpZGF0ZS4gVGhlIG91dHB1dCBzaG91bGQgaW5kaWNhdGUgdGhhdCB0
aGUgYmVmb3JlaW5wdXQgYW5kIGlucHV0IGV2ZW50cyBmb3IgdGhlIHRleHQgcmVwbGFjZW1lbnQg
d2VyZSBoYW5kbGVkLCBhbmQgdGhhdCB0aGUgcmFuZ2Ugb2YgdGhlIGJlZm9yZWlucHV0IGV2ZW50
IGlzIGZyb20gMCB0byAxLjwvcD4KKzxkaXYgaWQ9Im91dHB1dCI+PC9kaXY+Cis8c2NyaXB0Pgor
bGV0IHdyaXRlID0gKG1lc3NhZ2UpID0+IG91dHB1dC5pbm5lckhUTUwgKz0gKG1lc3NhZ2UgKyAi
PGJyPiIpOwogCi0gICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewotICAgICAgICAgICAg
dGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Ci0gICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRp
bERvbmUoKTsKLSAgICAgICAgICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRJbnB1dEV2ZW50c0Vu
YWJsZWQodHJ1ZSk7Ci0gICAgICAgIH0KK2Z1bmN0aW9uIGNoZWNrRm9yQ29tcGxldGlvbigpIHsK
KyAgICBkb25lQ291bnQgPSB3aW5kb3cuZG9uZUNvdW50ID8gZG9uZUNvdW50IDogMDsKKyAgICBp
ZiAoKytkb25lQ291bnQgPT0gMyAmJiB3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7Cit9CiAKLSAgICAgICAgZnVuY3Rpb24gaW5jcmVtZW50UHJvZ3Jl
c3MoKQotICAgICAgICB7Ci0gICAgICAgICAgICBwcm9ncmVzcysrOwotICAgICAgICAgICAgaWYg
KCF3aW5kb3cudGVzdFJ1bm5lciB8fCBwcm9ncmVzcyAhPT0gMykKLSAgICAgICAgICAgICAgICBy
ZXR1cm47CitmdW5jdGlvbiBsb2dJbnB1dEV2ZW50KGV2ZW50KQoreworICAgIGlmIChldmVudC5p
bnB1dFR5cGUgIT09ICJpbnNlcnRSZXBsYWNlbWVudFRleHQiKQorICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgZWRp
dGFibGUudGV4dENvbnRlbnQgPSAiIjsKLSAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKLSAgICAgICAgICAgIH0sIDApOwotICAgICAgICB9CisgICAgaWYgKGV2ZW50LnR5
cGUgPT09ICJiZWZvcmVpbnB1dCIpIHsKKyAgICAgICAgbGV0IGZpcnN0UmFuZ2UgPSBldmVudC5n
ZXRUYXJnZXRSYW5nZXMoKVswXTsKKyAgICAgICAgd3JpdGUoYE9ic2VydmVkIHRleHQgcmVwbGFj
ZW1lbnQgYmVmb3JlIGlucHV0IGV2ZW50IHdpdGggcmFuZ2U6IFske2ZpcnN0UmFuZ2Uuc3RhcnRP
ZmZzZXR9LCAke2ZpcnN0UmFuZ2UuZW5kT2Zmc2V0fV0gYW5kIGRhdGE6ICIke2V2ZW50LmRhdGFU
cmFuc2Zlci5nZXREYXRhKCJ0ZXh0L3BsYWluIil9ImApOworICAgIH0gZWxzZQorICAgICAgICB3
cml0ZShgT2JzZXJ2ZWQgdGV4dCByZXBsYWNlbWVudCBpbnB1dCBldmVudCB3aXRoIGRhdGE6ICIk
e2V2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCJ0ZXh0L3BsYWluIil9ImApOwogCi0gICAgICAg
IGZ1bmN0aW9uIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgICBlZGl0YWJsZS5hZGRF
dmVudExpc3RlbmVyKCJpbnB1dCIsIGxvZ0lucHV0RXZlbnQpOwotICAgICAgICAgICAgZWRpdGFi
bGUuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlaW5wdXQiLCBsb2dJbnB1dEV2ZW50KTsKLSAgICAg
ICAgICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIgfHwgIXRlc3RSdW5uZXIucnVuVUlTY3JpcHQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgIGNoZWNrRm9yQ29tcGxldGlvbigpOworfQog
Ci0gICAgICAgICAgICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KGdldFVJU2NyaXB0KCksIGZ1bmN0
aW9uKHJlc3VsdCkgewotICAgICAgICAgICAgICAgIGluY3JlbWVudFByb2dyZXNzKCk7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgfQorZnVuY3Rpb24gdHJpZ2dlckF1dG9jb3JyZWN0aW9uQWZ0
ZXJGaXJzdElucHV0KCkgeworICAgIGVkaXRhYmxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImlucHV0
IiwgdHJpZ2dlckF1dG9jb3JyZWN0aW9uQWZ0ZXJGaXJzdElucHV0KTsKKyAgICB3cml0ZShgUmVw
bGFjaW5nICJUIiB3aXRoICJUaGUiLi4uYCk7CisgICAgZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFu
ZEV4dGVudChlZGl0YWJsZSwgMCwgZWRpdGFibGUsIDEpOworICAgIFVJSGVscGVyLmFwcGx5QXV0
b2NvcnJlY3Rpb24oIlRoZSIsICJUIikudGhlbihjaGVja0ZvckNvbXBsZXRpb24pOworfQogCi0g
ICAgICAgIGZ1bmN0aW9uIGxvZ0lucHV0RXZlbnQoZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChldmVudC5pbnB1dFR5cGUgIT09ICJpbnNlcnRSZXBsYWNlbWVudFRleHQiKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RS
dW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworfQog
Ci0gICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gImJlZm9yZWlucHV0IikgewotICAgICAg
ICAgICAgICAgIGxldCBmaXJzdFJhbmdlID0gZXZlbnQuZ2V0VGFyZ2V0UmFuZ2VzKClbMF07Ci0g
ICAgICAgICAgICAgICAgd3JpdGUoYFBBU1M6IEhhbmRsZWQgdGV4dCByZXBsYWNlbWVudCBiZWZv
cmUgaW5wdXQgZXZlbnQgd2l0aCByYW5nZTogWyR7Zmlyc3RSYW5nZS5zdGFydE9mZnNldH0sICR7
Zmlyc3RSYW5nZS5lbmRPZmZzZXR9XS5gKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgIHdyaXRlKGBQQVNTOiBIYW5kbGVkIHRleHQgcmVwbGFjZW1lbnQgaW5wdXQgZXZlbnQu
YCk7Ci0gICAgICAgICAgICBpbmNyZW1lbnRQcm9ncmVzcygpOwotICAgICAgICB9Ci0gICAgPC9z
Y3JpcHQ+Ci0gICAgPHN0eWxlPgotICAgICNlZGl0YWJsZSB7Ci0gICAgICAgIHdpZHRoOiAyMDBw
eDsKLSAgICAgICAgaGVpZ2h0OiAyMDBweDsKLSAgICAgICAgdG9wOiAwOwotICAgICAgICBsZWZ0
OiAwOwotICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgfQotICAgIDwvc3R5bGU+Ci08
L2hlYWQ+Ci0KLTxib2R5IHN0eWxlPSJtYXJnaW46IDA7IiBvbmxvYWQ9cnVuVGVzdCgpPgotICAg
IDxkaXYgY29udGVudGVkaXRhYmxlIGlkPSJlZGl0YWJsZSI+PC9kaXY+Ci0gICAgPHA+VG8gbWFu
dWFsbHkgdGVzdCwgdHlwZSAndCcgaW50byB0aGUgY29udGVudGVkaXRhYmxlIGFuZCB0cnkgdG8g
c2VsZWN0IGEgY2FuZGlkYXRlLiBUaGUgb3V0cHV0IHNob3VsZCBpbmRpY2F0ZSB0aGF0IHRoZSBi
ZWZvcmVpbnB1dCBhbmQgaW5wdXQgZXZlbnRzIGZvciB0aGUgdGV4dCByZXBsYWNlbWVudCB3ZXJl
IGhhbmRsZWQsIGFuZCB0aGF0IHRoZSByYW5nZSBvZiB0aGUgYmVmb3JlaW5wdXQgZXZlbnQgaXMg
ZnJvbSAwIHRvIDEuPC9wPgotICAgIDxkaXYgaWQ9Im91dHB1dCI+PC9kaXY+CitlZGl0YWJsZS5h
ZGRFdmVudExpc3RlbmVyKCJiZWZvcmVpbnB1dCIsIGxvZ0lucHV0RXZlbnQpOworZWRpdGFibGUu
YWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCBsb2dJbnB1dEV2ZW50KTsKK2VkaXRhYmxlLmFkZEV2
ZW50TGlzdGVuZXIoImlucHV0IiwgdHJpZ2dlckF1dG9jb3JyZWN0aW9uQWZ0ZXJGaXJzdElucHV0
KTsKK1VJSGVscGVyLmFjdGl2YXRlQW5kV2FpdEZvcklucHV0U2Vzc2lvbkF0KDEwMCwgMTAwKS50
aGVuKCgpID0+IFVJSGVscGVyLnR5cGVDaGFyYWN0ZXIoIlQiKSk7Cis8L3NjcmlwdD4KIDwvYm9k
eT4KLQogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL1Rlc3RF
eHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9ucwpp
bmRleCBiODgxZWQwMDRlYzAxNzI3ZDFmNTE4YjkzMDc2ZTlmOWNmNDhhMDMyLi4zNjk0NGZhZTk4
ZDQ5ODM0YjMwNTQ1NGU4MTIwZDI5MjAyOWNkMmQxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9p
b3MvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMzA3OCw5ICszMDc4LDYgQEAgd2Via2l0Lm9yZy9iLzE1
NTA5MiBqcy9hcnJheWJ1ZmZlci13cmFwcGVycy5odG1sIFsgUGFzcyBUaW1lb3V0IF0KIAogd2Vi
a2l0Lm9yZy9iLzE3MjA1MiBbIFJlbGVhc2UgXSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL2h0bWwvd2ViYXBwYXBpcy90aW1lcnMvdHlwZS1sb25nLXNldGludGVydmFsLmh0bWwgWyBQ
YXNzIEZhaWx1cmUgXQogCi0jIDxyZGFyOi8vcHJvYmxlbS8zMjU0MjQzNz4gUkVHUkVTU0lPTiAo
aU9TIDExKTogTGF5b3V0VGVzdCBmYXN0L2V2ZW50cy9pb3MvYmVmb3JlLWlucHV0LWV2ZW50cy1w
cmV2ZW50LWNhbmRpZGF0ZS1pbnNlcnRpb24uaHRtbCBpcyB0aW1pbmcgb3V0Ci1mYXN0L2V2ZW50
cy9pb3MvYmVmb3JlLWlucHV0LWV2ZW50cy1wcmV2ZW50LWNhbmRpZGF0ZS1pbnNlcnRpb24uaHRt
bCBbIFRpbWVvdXQgXQotCiAjIDxyZGFyOi8vcHJvYmxlbS8zMjU0MjMwMD4gUkVHUkVTU0lPTiAo
aU9TIDExKTogTGF5b3V0VGVzdCBmYXN0L2V2ZW50cy9pb3MvY29udGVudGVkaXRhYmxlLWF1dG9j
YXBpdGFsaXplLmh0bWwgaXMgZmFpbGluZwogZmFzdC9ldmVudHMvaW9zL2NvbnRlbnRlZGl0YWJs
ZS1hdXRvY2FwaXRhbGl6ZS5odG1sIFsgRmFpbHVyZSBdCiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3Jlc291cmNlcy91aS1oZWxwZXIuanMgYi9MYXlvdXRUZXN0cy9yZXNvdXJjZXMvdWktaGVs
cGVyLmpzCmluZGV4IDlkMGM2MTQ2YWI0NDdkMjEyYTg5MzM4YWU3MGY2NjVhYjU3ZDgzYjcuLjkw
YTgyMTE5YmUxMjJiZTA5NWNiODU5MTNlNjM1N2Q5Y2FjMzE4NjggMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3Jlc291cmNlcy91aS1oZWxwZXIuanMKKysrIGIvTGF5b3V0VGVzdHMvcmVzb3VyY2Vz
L3VpLWhlbHBlci5qcwpAQCAtMjc4LDQgKzI3OCwyNiBAQCB3aW5kb3cuVUlIZWxwZXIgPSBjbGFz
cyBVSUhlbHBlciB7CiAgICAgICAgICAgICB9KSgpYCwgcmVzb2x2ZSk7CiAgICAgICAgIH0pOwog
ICAgIH0KKworICAgIHN0YXRpYyB0eXBlQ2hhcmFjdGVyKGNoYXJhY3RlclN0cmluZykKKyAgICB7
CisgICAgICAgIGlmICghdGhpcy5pc1dlYktpdDIoKSB8fCAhdGhpcy5pc0lPUygpKSB7CisgICAg
ICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKGtleSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBjb25zdCBlc2NhcGVkU3RyaW5nID0gY2hhcmFjdGVyU3RyaW5n
LnJlcGxhY2UoL2AvZywgIlxcYCIpOworICAgICAgICBjb25zdCB1aVNjcmlwdCA9IGB1aUNvbnRy
b2xsZXIudHlwZUNoYXJhY3RlclVzaW5nSGFyZHdhcmVLZXlib2FyZChcYCR7ZXNjYXBlZFN0cmlu
Z31cYCwgKCkgPT4gdWlDb250cm9sbGVyLnVpU2NyaXB0Q29tcGxldGUoKSlgOworICAgICAgICBy
ZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KHVpU2Ny
aXB0LCByZXNvbHZlKSk7CisgICAgfQorCisgICAgc3RhdGljIGFwcGx5QXV0b2NvcnJlY3Rpb24o
bmV3VGV4dCwgb2xkVGV4dCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5pc1dlYktpdDIoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjb25zdCBbZXNjYXBlZE5ld1RleHQsIGVz
Y2FwZWRPbGRUZXh0XSA9IFtuZXdUZXh0LnJlcGxhY2UoL2AvZywgIlxcYCIpLCBvbGRUZXh0LnJl
cGxhY2UoL2AvZywgIlxcYCIpXTsKKyAgICAgICAgY29uc3QgdWlTY3JpcHQgPSBgdWlDb250cm9s
bGVyLmFwcGx5QXV0b2NvcnJlY3Rpb24oXGAke2VzY2FwZWROZXdUZXh0fVxgLCBcYCR7ZXNjYXBl
ZE9sZFRleHR9XGAsICgpID0+IHVpQ29udHJvbGxlci51aVNjcmlwdENvbXBsZXRlKCkpYDsKKyAg
ICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gdGVzdFJ1bm5lci5ydW5VSVNjcmlw
dCh1aVNjcmlwdCwgcmVzb2x2ZSkpOworICAgIH0KIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>