<?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>210866</bug_id>
          
          <creation_ts>2020-04-22 10:55:08 -0700</creation_ts>
          <short_desc>TextManipulationController should set range of paragraph using token&apos;s positions</short_desc>
          <delta_ts>2020-07-28 23:10:02 -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>WebCore Misc.</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="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mifenton</cc>
    
    <cc>rniwa</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1644396</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-04-22 10:55:08 -0700</bug_when>
    <thetext>With different ranges, TextIterator may visit different set of nodes, which makes token matching hard, so it&apos;s better to make the range of paragraph close to the actual paragraph as much as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644407</commentid>
    <comment_count>1</comment_count>
      <attachid>397226</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-04-22 11:37:23 -0700</bug_when>
    <thetext>Created attachment 397226
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644443</commentid>
    <comment_count>2</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-04-22 12:45:12 -0700</bug_when>
    <thetext>API test failure should be caused by: https://bugs.webkit.org/show_bug.cgi?id=210871.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644446</commentid>
    <comment_count>3</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-04-22 12:46:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/60646283&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644498</commentid>
    <comment_count>4</comment_count>
      <attachid>397226</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-22 14:21:50 -0700</bug_when>
    <thetext>Comment on attachment 397226
Patch

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

I’ll review again if there’s a version where the iOS API tests pass.

&gt; Source/WebCore/editing/TextManipulationController.cpp:296
&gt; +            if (content.node &amp;&amp; !content.node-&gt;isTextNode() &amp;&amp; currentEndOfCurrentParagraph.equals(endOfCurrentParagraph))

Instead of &quot;!content.node-&gt;isTextNode()&quot;, could write &quot;!is&lt;Text&gt;(*content.node)&quot;.

&gt; Source/WebCore/editing/TextManipulationController.cpp:312
&gt; +            if (content.node &amp;&amp; is&lt;Text&gt;(content.node) &amp;&amp; startOfCurrentLine &lt; offsetOfNextNewLine) {

No need to add the null check here; is&lt;Text&gt; includes the null check.

&gt; Source/WebCore/editing/TextManipulationController.cpp:323
&gt; +                if (content.node &amp;&amp; content.node-&gt;hasTagName(brTag))

Could consider:

    is&lt;HTMLBRElement&gt;(content.node)

instead. Might require including an additional header, though.

&gt; Source/WebCore/editing/TextManipulationController.cpp:331
&gt; +        if (remainingText.length() &amp;&amp; !remainingText.toString().stripWhiteSpace().isEmpty()) {

No need to check remainingText.length() here.

The stripWhiteSpace function is likely the wrong one to use in a few ways:

1) It strips all Unicode whitespace characters. We probably want to strip only HTML whitespace characters, or maybe even strip spaces based on the prevailing whitespace mode. That would be a function more like stripLeadingAndTrailingHTMLSpaces.

2) Checking if a StringView contains only HTML spaces does not require the costly operation of allocating a string. A good way to write this would be a function named containsOnlyHTMLSpace, and then containsOnlyHTMLSpace(remainingText). We could possibly implement this as !remainingText.contains(isNotHTMLSpace) without adding anything.

&gt; Source/WebCore/editing/TextManipulationController.cpp:333
&gt; +                if (startOfCurrentLine &amp;&amp; content.node &amp;&amp; is&lt;Text&gt;(content.node))

No need for the null check of content.node, because is&lt;Text&gt; includes that.

&gt; Source/WebCore/editing/TextManipulationController.cpp:539
&gt; +        if (content.isTextContent &amp;&amp; content.text.toString().stripWhiteSpace().isEmpty()) {

Same comment about stripWhitespace.

&gt; Source/WebCore/editing/TextManipulationController.cpp:541
&gt; +            if (content.node &amp;&amp; content.node-&gt;hasTagName(brTag))

Same comment about is&lt;HTMLBRElement&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644583</commentid>
    <comment_count>5</comment_count>
      <attachid>397291</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-04-22 17:03:03 -0700</bug_when>
    <thetext>Created attachment 397291
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644593</commentid>
    <comment_count>6</comment_count>
      <attachid>397291</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-22 17:22:59 -0700</bug_when>
    <thetext>Comment on attachment 397291
Patch

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

&gt; Source/WebCore/editing/TextManipulationController.cpp:250
&gt; +static bool containsNonHTMLSpace(const StringView&amp; text)

StringView is always fine, don’t need const StringView&amp;, it just makes it less efficient. That’s unlike other things that are costly to copy, where const&amp; could be an important optimization.

I suggest containsOnlyHTMLSpaces rather than containsNonHTMLSpace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644604</commentid>
    <comment_count>7</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-04-22 17:51:20 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #6)
&gt; Comment on attachment 397291 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=397291&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/TextManipulationController.cpp:250
&gt; &gt; +static bool containsNonHTMLSpace(const StringView&amp; text)
&gt; 
&gt; StringView is always fine, don’t need const StringView&amp;, it just makes it
&gt; less efficient. That’s unlike other things that are costly to copy, where
&gt; const&amp; could be an important optimization.
&gt; 
&gt; I suggest containsOnlyHTMLSpaces rather than containsNonHTMLSpace.

Okay. Will update the naming after the api-ios bot runs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644606</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-22 17:52:25 -0700</bug_when>
    <thetext>(In reply to Sihui Liu from comment #7)
&gt; (In reply to Darin Adler from comment #6)
&gt; &gt; I suggest containsOnlyHTMLSpaces rather than containsNonHTMLSpace.
&gt; 
&gt; Okay. Will update the naming after the api-ios bot runs.

Note, not just naming, but also reverses the boolean sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644633</commentid>
    <comment_count>9</comment_count>
      <attachid>397304</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-04-22 19:49:34 -0700</bug_when>
    <thetext>Created attachment 397304
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644634</commentid>
    <comment_count>10</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-04-22 19:50:36 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; (In reply to Sihui Liu from comment #7)
&gt; &gt; (In reply to Darin Adler from comment #6)
&gt; &gt; &gt; I suggest containsOnlyHTMLSpaces rather than containsNonHTMLSpace.
&gt; &gt; 
&gt; &gt; Okay. Will update the naming after the api-ios bot runs.
&gt; 
&gt; Note, not just naming, but also reverses the boolean sense.

Right! Updated it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644807</commentid>
    <comment_count>11</comment_count>
      <attachid>397304</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-04-23 09:52:09 -0700</bug_when>
    <thetext>Comment on attachment 397304
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        start of a paragraph can be set as the first visible position of document, while postion of first token 

Nit - postion =&gt; position</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644810</commentid>
    <comment_count>12</comment_count>
      <attachid>397352</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-04-23 09:58:03 -0700</bug_when>
    <thetext>Created attachment 397352
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644817</commentid>
    <comment_count>13</comment_count>
      <attachid>397352</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-23 10:05:31 -0700</bug_when>
    <thetext>Comment on attachment 397352
Patch for landing

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

&gt; Source/WebCore/editing/TextManipulationController.cpp:258
&gt; +static bool containsOnlyHTMLSpaces(StringView text)
&gt; +{
&gt; +    for (unsigned index = 0; index &lt; text.length(); ++index) {
&gt; +        if (isNotHTMLSpace(text[index]))
&gt; +            return false;
&gt; +    }
&gt; +
&gt; +    return true;
&gt; +}

We eventually will want to move this to another file so it can be shared, but it’s fine to land it exactly like this right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644833</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-23 10:24:00 -0700</bug_when>
    <thetext>Committed r260578: &lt;https://trac.webkit.org/changeset/260578&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 397352.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675915</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-07-28 23:10:02 -0700</bug_when>
    <thetext>Nice!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397226</attachid>
            <date>2020-04-22 11:37:23 -0700</date>
            <delta_ts>2020-04-22 17:03:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210866-20200422113722.patch</filename>
            <type>text/plain</type>
            <size>16129</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNDMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDk1M2E4NTFmZTlmNDBl
YzBmM2VkNDkwMGNjOGJjZGQzZWNjNmY0Mi4uMDFiNDljZGI4NDBkYWFhOTJhOGY1NjQ5NTU3NTMz
Njk0NWE2OWUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIwLTA0LTIyICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAaG90bWFpbC5jb20+CisKKyAgICAgICAgVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIgc2hvdWxkIHNldCByYW5nZSBvZiBwYXJhZ3JhcGggdXNpbmcgdG9rZW4ncyBw
b3NpdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMDg2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFNldCB0aGUgcmFuZ2Ugb2YgcGFyYWdyYXBoIHdpdGggcG9zaXRpb25zIG9mIGZpcnN0IHRva2Vu
IGFuZCBsYXN0IHRva2VuIGluIHRoZSBwYXJhZ3JhcGggYmVjYXVzZToKKyAgICAgICAgMS4gQWNj
dXJhdGUgcmFuZ2UgbWFrZXMgdG9rZW4gbWF0Y2hpbmcgaW4gVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6OnJlcGxhY2UoKSBlYXNpZXIsIGFzIFRleHRJdGVyYXRvciBjb3VsZCBnbworICAgICAg
ICB0byBkaWZmZXJlbnQgbm9kZXMgd2l0aCBkaWZmZXJlbnQgcmFuZ2VzIG9yIGRpZmZlcmVudCBj
b25kaXRpb25zLiBGb3IgZXhhbXBsZSwgaW4gb3VyIHByZXZpb3VzIGltcGxlbWVudGF0aW9uLCAK
KyAgICAgICAgc3RhcnQgb2YgYSBwYXJhZ3JhcGggY2FuIGJlIHNldCBhcyB0aGUgZmlyc3Qgdmlz
aWJsZSBwb3NpdGlvbiBvZiBkb2N1bWVudCwgd2hpbGUgYWN0dWFsIHBvc3Rpb24gb2YgZmlyc3Qg
dG9rZW4gCisgICAgICAgIGlzIGFmdGVyIHRoZSBOb2RlLiBUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlciBtYXkgZXh0cmFjdCBhIHRva2VuIGJlZm9yZSBhY3R1YWwgcG9zaXRpb24gYW5kIHJldHVy
biBlcnJvci4gU2VlIAorICAgICAgICBhZGRlZCB0ZXN0IFRleHRNYW5pcHVsYXRpb24uQ29tcGxl
dGVUZXh0TWFuaXB1bGF0aW9uQ29ycmVjdFBhcmFncmFwaFJhbmdlLgorICAgICAgICAyLiBUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlciBjYW4gaGFuZGxlIGZldyBjb250ZW50LiBGb3IgZXhhbXBs
ZSwgc3ZnIGVsZW1lbnRzIGJlZm9yZS9hZnRlciB0aGUgcGFyYWdyYXBoIHRleHQKKyAgICAgICAg
d2lsbCBub3QgYmUgaWRlbnRpZmllZCBhcyB0b2tlbnMgaW4gdGhlIHBhcmFncmFwaC4gU2VlIHVw
ZGF0ZWQgQVBJIHRlc3RzIGZvciBleGFtcGxlLgorCisgICAgICAgIE5ldyB0ZXN0OiBUZXh0TWFu
aXB1bGF0aW9uLkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkNvcnJlY3RQYXJhZ3JhcGhSYW5nZQor
CisgICAgICAgICogZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3I6Om1vdmVDdXJyZW50Tm9kZUZv
cndhcmQpOiBtX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJsZUNvbnRlbnQgc2hvdWxkIG5v
dCAKKyAgICAgICAgYmUgYWR2YW5jZWQgaWYgaXQgaXMgYWxyZWFkeSBhdCB0aGUgZW5kLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Om9ic2VydmVQYXJhZ3Jh
cGhzKTogU2V0IHRoZSBwYXJhZ3JhcGggc3RhcnQgYXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJz
dCAKKyAgICAgICAgdG9rZW4gYW5kIGVuZCBhcyB0aGUgcG9zaXRpb24gb2YgbGFzdCB0b2tlbi4g
SWYgdGhlIHBhcmFncmFwaCBpcyBzcGxpdCBieSA8YnI+LCB0aGUgZW5kIHdpbGwgYmUgZXh0ZW5k
ZWQgdG8gCisgICAgICAgIHBvc2l0aW9uIG9mIDxicj4gc28gdGhhdCB3ZSBjYW4ga2VlcCB0aGlz
IG5vZGUgYmFjayBpbiByZXBsYW1lbnQ7IG90aGVyd2lzZSwgaXQgY2FuIGJlIHJlbW92ZWQgYWZ0
ZXIgb3JpZ2luYWwgCisgICAgICAgIHRleHQgb2YgcGFyYWdyYXBoIGlzIHJlbW92ZWQgaW4gVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UoKS4gQWxzbywgd2Ugbm93IHN0b3AgaWRl
bnRpZnlpbmcgc3BhY2VzIGFzIAorICAgICAgICB0b2tlbnMgYmVjYXVzZSBub24tdGV4dCBOb2Rl
IGNhbiBlbWl0IHNwYWNlcy4KKworICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6OnJlcGxhY2UpOiBTYW1lLCBvbmx5IGlkZW50aWZ5IHRva2VucyBmcm9tIE5vZGVz
IHdpdGggbWVhbmluZ2Z1bCB0ZXh0LgorCiAyMDIwLTA0LTE2ICBTZXJnaW8gVmlsbGFyIFNlbmlu
ICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXZWJYUl0gVGVzdCBJRExzIGFuZCBz
dHVicwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyLmNwcAppbmRleCAzMGJkN2ZiYWRhNjE1YmM4YTZkN2Q1ZmUxMTliZTViNjZhYTdm
YTUxLi5mOTA4NTZmNDA1YWVlNmQ5N2Y3NDMwN2Y4NWEyNzE1NTRiNTBhYjg5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNw
cApAQCAtMjA3LDYgKzIwNyw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBtb3ZlQ3Vy
cmVudE5vZGVGb3J3YXJkKCkKICAgICB7CisgICAgICAgIGlmIChtX2N1cnJlbnROb2RlRm9yRmlu
ZGluZ0ludmlzaWJsZUNvbnRlbnQgPT0gbV9wYXN0RW5kTm9kZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKwogICAgICAgICBtX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJsZUNvbnRlbnQgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KCptX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJsZUNvbnRl
bnQpOwogICAgICAgICBpZiAoIW1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVu
dCkKICAgICAgICAgICAgIG1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudCA9
IG1fcGFzdEVuZE5vZGU7CkBAIC0yNTcsNyArMjYwLDggQEAgdm9pZCBUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcjo6b2JzZXJ2ZVBhcmFncmFwaHMoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25z
dAogCiAgICAgRXhjbHVzaW9uUnVsZU1hdGNoZXIgZXhjbHVzaW9uUnVsZU1hdGNoZXIobV9leGNs
dXNpb25SdWxlcyk7CiAgICAgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiB0b2tlbnNJbkN1cnJl
bnRQYXJhZ3JhcGg7Ci0gICAgUG9zaXRpb24gc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSB2aXNp
YmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBzdGFydE9mQ3VycmVudFBh
cmFncmFwaDsKKyAgICBQb3NpdGlvbiBlbmRPZkN1cnJlbnRQYXJhZ3JhcGg7CiAgICAgZm9yICg7
ICFpdGVyYXRvci5hdEVuZCgpOyBpdGVyYXRvci5hZHZhbmNlKCkpIHsKICAgICAgICAgYXV0byBj
b250ZW50ID0gaXRlcmF0b3IuY3VycmVudENvbnRlbnQoKTsKICAgICAgICAgaWYgKGNvbnRlbnQu
bm9kZSkgewpAQCAtMjgxLDE1ICsyODUsMjAgQEAgdm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6b2JzZXJ2ZVBhcmFncmFwaHMoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdAogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGguaXNOdWxsKCkgJiYgY29udGVu
dC5pc1RleHRDb250ZW50KQotICAgICAgICAgICAgICAgIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBo
ID0gaXRlcmF0b3Iuc3RhcnRQb3NpdGlvbigpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNv
bnRlbnQuaXNSZXBsYWNlZENvbnRlbnQpIHsKLSAgICAgICAgICAgIGlmIChzdGFydE9mQ3VycmVu
dFBhcmFncmFwaC5pc051bGwoKSkKLSAgICAgICAgICAgICAgICBzdGFydE9mQ3VycmVudFBhcmFn
cmFwaCA9IHBvc2l0aW9uQmVmb3JlTm9kZShjb250ZW50Lm5vZGUuZ2V0KCkpOwotICAgICAgICAg
ICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5pcHVsYXRpb25Ub2tlbiB7IG1f
dG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksICJbXSIsIHRydWUgLyogaXNFeGNsdWRlZCAqL30p
OworICAgICAgICAgICAgaWYgKHRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGF1dG8gY3VycmVudEVuZE9m
Q3VycmVudFBhcmFncmFwaCA9IHBvc2l0aW9uQWZ0ZXJOb2RlKGNvbnRlbnQubm9kZS5nZXQoKSk7
CisgICAgICAgICAgICAvLyBUaGUgc2FtZSBub2RlIGFzIGxhc3QgdG9rZW4gaXMgaW5jbHVkZWQg
aW4gcmFuZ2UuCisgICAgICAgICAgICBpZiAoY29udGVudC5ub2RlICYmICFjb250ZW50Lm5vZGUt
PmlzVGV4dE5vZGUoKSAmJiBjdXJyZW50RW5kT2ZDdXJyZW50UGFyYWdyYXBoLmVxdWFscyhlbmRP
ZkN1cnJlbnRQYXJhZ3JhcGgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICBlbmRPZkN1cnJlbnRQYXJhZ3JhcGggPSBjdXJyZW50RW5kT2ZDdXJyZW50UGFyYWdyYXBo
OworICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5pcHVsYXRp
b25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksICJbXSIsIHRydWUgfSk7CisK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTMwMCwzMSArMzA5LDM5IEBA
IHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0
IFBvc2l0aW9uJiBzdGFydCwgY29uc3QKICAgICAgICAgc2l6ZV90IG9mZnNldE9mTmV4dE5ld0xp
bmUgPSAwOwogICAgICAgICBTdHJpbmdWaWV3IGN1cnJlbnRUZXh0ID0gY29udGVudC50ZXh0Owog
ICAgICAgICB3aGlsZSAoKG9mZnNldE9mTmV4dE5ld0xpbmUgPSBjdXJyZW50VGV4dC5maW5kKCdc
bicsIHN0YXJ0T2ZDdXJyZW50TGluZSkpICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICBpZiAo
c3RhcnRPZkN1cnJlbnRMaW5lIDwgb2Zmc2V0T2ZOZXh0TmV3TGluZSkgeworICAgICAgICAgICAg
aWYgKGNvbnRlbnQubm9kZSAmJiBpczxUZXh0Pihjb250ZW50Lm5vZGUpICYmIHN0YXJ0T2ZDdXJy
ZW50TGluZSA8IG9mZnNldE9mTmV4dE5ld0xpbmUpIHsKICAgICAgICAgICAgICAgICBhdXRvIHN0
cmluZ1VudGlsRW5kT2ZMaW5lID0gY3VycmVudFRleHQuc3Vic3RyaW5nKHN0YXJ0T2ZDdXJyZW50
TGluZSwgb2Zmc2V0T2ZOZXh0TmV3TGluZSAtIHN0YXJ0T2ZDdXJyZW50TGluZSkudG9TdHJpbmco
KTsKKyAgICAgICAgICAgICAgICBhdXRvJiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCpjb250
ZW50Lm5vZGUpOworICAgICAgICAgICAgICAgIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IFBvc2l0
aW9uKCZ0ZXh0Tm9kZSwgb2Zmc2V0T2ZOZXh0TmV3TGluZSk7CisgICAgICAgICAgICAgICAgaWYg
KHRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAg
IHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gUG9zaXRpb24oJnRleHROb2RlLCBzdGFydE9mQ3Vy
cmVudExpbmUpOworCiAgICAgICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFw
cGVuZChNYW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIHN0
cmluZ1VudGlsRW5kT2ZMaW5lLCBleGNsdXNpb25SdWxlTWF0Y2hlci5pc0V4Y2x1ZGVkKGNvbnRl
bnQubm9kZS5nZXQoKSkgfSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICghdG9r
ZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIFBvc2l0
aW9uIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IGl0ZXJhdG9yLmVuZFBvc2l0aW9uKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGlzPFRleHQ+KGNvbnRlbnQubm9kZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0PigqY29udGVudC5ub2RlKTsKLSAg
ICAgICAgICAgICAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gUG9zaXRpb24oJnRleHRO
b2RlLCBvZmZzZXRPZk5leHROZXdMaW5lKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkN1
cnJlbnRQYXJhZ3JhcGggPSBQb3NpdGlvbigmdGV4dE5vZGUsIG9mZnNldE9mTmV4dE5ld0xpbmUg
KyAxKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQubm9k
ZSAmJiBjb250ZW50Lm5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpKQorICAgICAgICAgICAgICAgICAg
ICBlbmRPZkN1cnJlbnRQYXJhZ3JhcGggPSBwb3NpdGlvbkFmdGVyTm9kZShjb250ZW50Lm5vZGUu
Z2V0KCkpOwogICAgICAgICAgICAgICAgIGFkZEl0ZW0oTWFuaXB1bGF0aW9uSXRlbURhdGEgeyBz
dGFydE9mQ3VycmVudFBhcmFncmFwaCwgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBudWxscHRyLCBu
dWxsUU5hbWUoKSwgc3RkOjpleGNoYW5nZSh0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGgsIHsgfSkg
fSk7Ci0gICAgICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGguY2xlYXIoKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHN0YXJ0T2ZDdXJyZW50TGluZSA9IG9mZnNldE9mTmV4
dE5ld0xpbmUgKyAxOwogICAgICAgICB9CiAKICAgICAgICAgYXV0byByZW1haW5pbmdUZXh0ID0g
Y3VycmVudFRleHQuc3Vic3RyaW5nKHN0YXJ0T2ZDdXJyZW50TGluZSk7Ci0gICAgICAgIGlmIChy
ZW1haW5pbmdUZXh0Lmxlbmd0aCgpKQorICAgICAgICBpZiAocmVtYWluaW5nVGV4dC5sZW5ndGgo
KSAmJiAhcmVtYWluaW5nVGV4dC50b1N0cmluZygpLnN0cmlwV2hpdGVTcGFjZSgpLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgaWYgKHRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnRPZkN1cnJlbnRMaW5lICYmIGNvbnRlbnQubm9k
ZSAmJiBpczxUZXh0Pihjb250ZW50Lm5vZGUpKQorICAgICAgICAgICAgICAgICAgICBzdGFydE9m
Q3VycmVudFBhcmFncmFwaCA9IFBvc2l0aW9uKCZkb3duY2FzdDxUZXh0PigqY29udGVudC5ub2Rl
KSwgc3RhcnRPZkN1cnJlbnRMaW5lKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gaXRlcmF0b3Iuc3RhcnRQb3NpdGlv
bigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0g
aXRlcmF0b3IuZW5kUG9zaXRpb24oKTsKICAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudFBhcmFn
cmFwaC5hcHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5lcmF0
ZSgpLCByZW1haW5pbmdUZXh0LnRvU3RyaW5nKCksIGV4Y2x1c2lvblJ1bGVNYXRjaGVyLmlzRXhj
bHVkZWQoY29udGVudC5ub2RlLmdldCgpKSB9KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlm
ICghdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkKLSAgICAgICAgYWRkSXRlbShN
YW5pcHVsYXRpb25JdGVtRGF0YSB7IHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLCB2aXNpYmxlRW5k
LmRlZXBFcXVpdmFsZW50KCksIG51bGxwdHIsIG51bGxRTmFtZSgpLCBXVEZNb3ZlKHRva2Vuc0lu
Q3VycmVudFBhcmFncmFwaCkgfSk7CisgICAgICAgIGFkZEl0ZW0oTWFuaXB1bGF0aW9uSXRlbURh
dGEgeyBzdGFydE9mQ3VycmVudFBhcmFncmFwaCwgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBudWxs
cHRyLCBudWxsUU5hbWUoKSwgV1RGTW92ZSh0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGgpIH0pOwog
fQogCiB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpkaWRDcmVhdGVSZW5kZXJlckZv
ckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKQEAgLTUxOSw2ICs1MzYsMTMgQEAgYXV0byBUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZShjb25zdCBNYW5pcHVsYXRpb25JdGVtRGF0
YSYgaXRlbSwgY29uc3QKICAgICAgICAgICAgIHJldHVybiBNYW5pcHVsYXRpb25GYWlsdXJlVHlw
ZTo6Q29udGVudENoYW5nZWQ7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoY29udGVudC5pc1Rl
eHRDb250ZW50ICYmIGNvbnRlbnQudGV4dC50b1N0cmluZygpLnN0cmlwV2hpdGVTcGFjZSgpLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgLy8gYnIgc2hvdWxkIG5vdCBleGlzdCBpbiB0aGUgbWlk
ZGxlIG9mIGEgcGFyYWdyYXBoLgorICAgICAgICAgICAgaWYgKGNvbnRlbnQubm9kZSAmJiBjb250
ZW50Lm5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpKQorICAgICAgICAgICAgICAgIHJldHVybiBNYW5p
cHVsYXRpb25GYWlsdXJlVHlwZTo6Q29udGVudENoYW5nZWQ7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCiAgICAgICAgIGF1dG8mIGN1cnJlbnRUb2tlbiA9IGl0ZW0udG9rZW5z
W2N1cnJlbnRUb2tlbkluZGV4XTsKICAgICAgICAgaWYgKCFjb250ZW50LmlzUmVwbGFjZWRDb250
ZW50ICYmIGNvbnRlbnQudGV4dCAhPSBjdXJyZW50VG9rZW4uY29udGVudCkKICAgICAgICAgICAg
IHJldHVybiBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTo6Q29udGVudENoYW5nZWQ7CmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjgxYTY5MTVhYzdi
YjM5MGVlNWFmY2Y2NTY1ZjllN2MxMjJhMWYxNC4uNzkwOGZkYWExYmM3MjU4OTI5NDk1N2FlNTlj
MjgzM2M2Yjk2ODdhMyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA0LTIyICBTaWh1aSBMaXUgIDxzaWh1aV9s
aXVAaG90bWFpbC5jb20+CisKKyAgICAgICAgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgc2hv
dWxkIHNldCByYW5nZSBvZiBwYXJhZ3JhcGggdXNpbmcgdG9rZW4ncyBwb3NpdGlvbnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDg2NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisKIDIwMjAtMDQtMjEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBh
cHBsZS5jb20+CiAKICAgICAgICAgQ29ycmVjdCB0aGUgcGF0aCB0byBsaWJjbGFuZ19ydC5hc2Fu
X2lvc3NpbV9keW5hbWljLmR5bGliIGluIExDX1JQQVRICmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0KaW5kZXgg
OGE2ZDQ2YTNmY2JmNDkxNWE0OTlmMjQ5MzY3OTYxNzIwOWE1NjMxNS4uMDcxZjQyMGZiYjhkNGYw
ZDYyY2IyZGIzZDI1Y2MwNTdlMjJmZWVhMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQpAQCAtOTg2LDIy
ICs5ODYsMTQgQEAgVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRp
b25TaG91bGRQcmVzZXJ2ZU9yZGVyT2ZCbG9ja0ltYWdlKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmZG9uZSk7CiAKICAgICBhdXRvICppdGVtcyA9IFtkZWxlZ2F0ZSBpdGVtc107Ci0g
ICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAyVUwpOwotICAgIEVYUEVDVF9FUShpdGVtc1swXS50
b2tlbnMuY291bnQsIDJVTCk7Ci0gICAgRVhQRUNUX1NUUkVRKCJbXSIsIGl0ZW1zWzBdLnRva2Vu
c1swXS5jb250ZW50LlVURjhTdHJpbmcpOwotICAgIEVYUEVDVF9UUlVFKGl0ZW1zWzBdLnRva2Vu
c1swXS5pc0V4Y2x1ZGVkKTsKLSAgICBFWFBFQ1RfU1RSRVEoIltdIiwgaXRlbXNbMF0udG9rZW5z
WzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7Ci0gICAgRVhQRUNUX1RSVUUoaXRlbXNbMF0udG9rZW5z
WzFdLmlzRXhjbHVkZWQpOwotCi0gICAgYXV0byAqdG9rZW5zID0gaXRlbXNbMV0udG9rZW5zOwot
ICAgIEVYUEVDVF9FUSh0b2tlbnMuY291bnQsIDFVTCk7Ci0gICAgRVhQRUNUX1NUUkVRKCJoZWxs
bG8gd29ybGQiLCB0b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKLSAgICBFWFBFQ1RfRkFM
U0UodG9rZW5zWzBdLmlzRXhjbHVkZWQpOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMVVM
KTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVD
VF9TVFJFUSgiaGVsbGxvIHdvcmxkIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0
cmluZyk7CisgICAgRVhQRUNUX1RSVUUoIWl0ZW1zWzBdLnRva2Vuc1swXS5pc0V4Y2x1ZGVkKTsK
IAogICAgIGRvbmUgPSBmYWxzZTsKICAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0
aW9uRm9ySXRlbXM6QFsKLSAgICAgICAgKF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopY3JlYXRl
SXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7IHsgaXRlbXNbMF0udG9rZW5zWzBdLmlkZW50aWZp
ZXIsIG5pbCB9IH0pLAotICAgICAgICAoX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKiljcmVhdGVJ
dGVtKGl0ZW1zWzFdLmlkZW50aWZpZXIsIHsgeyBpdGVtc1sxXS50b2tlbnNbMF0uaWRlbnRpZmll
ciwgQCJoZWxsbywgd29ybGQiIH0gfSksCisgICAgICAgIChfV0tUZXh0TWFuaXB1bGF0aW9uSXRl
bSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeyB7IGl0ZW1zWzBdLnRva2Vuc1sw
XS5pZGVudGlmaWVyLCBAImhlbGxvLCB3b3JsZCIgfSB9KSwKICAgICBdIGNvbXBsZXRpb246XihO
U0FycmF5PE5TRXJyb3IgKj4gKmVycm9ycykgewogICAgICAgICBFWFBFQ1RfRVEoZXJyb3JzLCBu
aWwpOwogICAgICAgICBkb25lID0gdHJ1ZTsKQEAgLTEwNzQsMTYgKzEwNjYsMTMgQEAgVEVTVChU
ZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25TaG91bGRSZXBsYWNlQ29u
dGVudEZvbGxvd2VkQWZ0ZXIKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwog
CiAgICAgYXV0byAqaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNdOwotICAgIEVYUEVDVF9FUShpdGVt
cy5jb3VudCwgMlVMKTsKLSAgICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCAxVUwp
OwotICAgIEVYUEVDVF9TVFJFUSgiW10iLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudC5VVEY4
U3RyaW5nKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDFVTCk7CiAgICAgRVhQRUNUX0VR
KGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMVVMKTsKLSAgICBFWFBFQ1RfU1RSRVEoImhlbGxvIHdv
cmxkIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNU
X1NUUkVRKCJoZWxsbyB3b3JsZCIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJp
bmcpOwogCiAgICAgZG9uZSA9IGZhbHNlOwogICAgIFt3ZWJWaWV3IF9jb21wbGV0ZVRleHRNYW5p
cHVsYXRpb25Gb3JJdGVtczpAWwotICAgICAgICAoX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilj
cmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIsIHsgeyBpdGVtc1swXS50b2tlbnNbMF0uaWRl
bnRpZmllciwgbmlsIH0gfSksCi0gICAgICAgIChfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNy
ZWF0ZUl0ZW0oaXRlbXNbMV0uaWRlbnRpZmllciwgeyB7IGl0ZW1zWzFdLnRva2Vuc1swXS5pZGVu
dGlmaWVyLCBAImhlbGxvLCB3b3JsZCIgfSB9KSwKKyAgICAgICAgKF9XS1RleHRNYW5pcHVsYXRp
b25JdGVtICopY3JlYXRlSXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7IHsgaXRlbXNbMF0udG9r
ZW5zWzBdLmlkZW50aWZpZXIsIEAiaGVsbG8sIHdvcmxkIiB9IH0pLAogICAgIF0gY29tcGxldGlv
bjpeKE5TQXJyYXk8TlNFcnJvciAqPiAqZXJyb3JzKSB7CiAgICAgICAgIEVYUEVDVF9FUShlcnJv
cnMsIG5pbCk7CiAgICAgICAgIGRvbmUgPSB0cnVlOwpAQCAtMTE2MCwxOSArMTE0OSwxNiBAQCBU
RVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvblNob3VsZFJlcGxh
Y2VDb250ZW50c0Fyb3VuZFBhcmFncgogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZSk7CiAKICAgICBhdXRvICppdGVtcyA9IFtkZWxlZ2F0ZSBpdGVtc107Ci0gICAgRVhQRUNUX0VR
KGl0ZW1zLmNvdW50LCAzVUwpOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMlVMKTsKICAg
ICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCAxVUwpOwogICAgIEVYUEVDVF9TVFJF
USgiaGVlZXkiLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKICAgICBF
WFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCAxVUwpOwotICAgIEVYUEVDVF9TVFJFUSgi
W10iLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKLSAgICBFWFBFQ1Rf
RVEoaXRlbXNbMl0udG9rZW5zLmNvdW50LCAxVUwpOwotICAgIEVYUEVDVF9TVFJFUSgid29vcmxk
IiwgaXRlbXNbMl0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NU
UkVRKCJ3b29ybGQiLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKIAog
ICAgIGRvbmUgPSBmYWxzZTsKICAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9u
Rm9ySXRlbXM6QFsKICAgICAgICAgKF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopY3JlYXRlSXRl
bShpdGVtc1swXS5pZGVudGlmaWVyLCB7IHsgaXRlbXNbMF0udG9rZW5zWzBdLmlkZW50aWZpZXIs
IEAiaGVsbG8iIH0gfSksCi0gICAgICAgIChfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNyZWF0
ZUl0ZW0oaXRlbXNbMV0uaWRlbnRpZmllciwgeyB7IGl0ZW1zWzFdLnRva2Vuc1swXS5pZGVudGlm
aWVyLCBuaWwgfSB9KSwKLSAgICAgICAgKF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopY3JlYXRl
SXRlbShpdGVtc1syXS5pZGVudGlmaWVyLCB7IHsgaXRlbXNbMl0udG9rZW5zWzBdLmlkZW50aWZp
ZXIsIEAid29ybGQiIH0gfSksCisgICAgICAgIChfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNy
ZWF0ZUl0ZW0oaXRlbXNbMV0uaWRlbnRpZmllciwgeyB7IGl0ZW1zWzFdLnRva2Vuc1swXS5pZGVu
dGlmaWVyLCBAIndvcmxkIiB9IH0pLAogICAgIF0gY29tcGxldGlvbjpeKE5TQXJyYXk8TlNFcnJv
ciAqPiAqZXJyb3JzKSB7CiAgICAgICAgIEVYUEVDVF9FUShlcnJvcnMsIG5pbCk7CiAgICAgICAg
IGRvbmUgPSB0cnVlOwpAQCAtMTY4Miw2ICsxNjY4LDQwIEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlv
biwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uRG9lc05vdENyZWF0ZU1vcmVUZXh0TWFuaXB1bGF0
aW9uCiAgICAgRVhQRUNUX1dLX1NUUkVRKCI8cD5iYXIgPHN0cm9uZz5nYXJwbHk8L3N0cm9uZz4g
Zm9vPC9wPiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVu
dC5ib2R5LmlubmVySFRNTCJdKTsKIH0KIAorVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0
ZVRleHRNYW5pcHVsYXRpb25Db3JyZWN0UGFyYWdyYXBoUmFuZ2UpCit7CisgICAgYXV0byBkZWxl
Z2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsK
KyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3ZWJWaWV3IF9zZXRU
ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcg
c3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPGhlYWQ+PHN0eWxlPnVse2Rpc3BsYXk6Ymxv
Y2t9bGl7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmlubGluZSB7ZmxvYXQ6IGxlZnQ7fS5zdWJmcmFt
ZSB7aGVpZ2h0OiA0MnB4O30uZnJhbWUge3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IC05OTk5cHg7
fTwvc3R5bGU+PC9oZWFkPjxib2R5PjxkaXYgY2xhc3M9J2ZyYW1lJz48ZGl2IGNsYXNzPSdzdWJm
cmFtZSc+PC9kaXY+PC9kaXY+PHN0eWxlPjwvc3R5bGU+PGRpdiBjbGFzcz0naW5saW5lJz48ZGl2
PjxsaT48YSBocmVmPScjJz5ob2xsZTwvYT48L2xpPjxsaT48YSBocmVmPScjJz53ZHJsbzwvYT48
L2xpPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9J2ZyYW1lJz48ZGl2IGNsYXNzPSdzdWJmcmFtZSc+
PC9kaXY+PC9kaXY+PC9ib2R5PiJdOworCisgICAgUmV0YWluUHRyPF9XS1RleHRNYW5pcHVsYXRp
b25Db25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVs
YXRpb25Db25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgZG9uZSA9IGZhbHNlOworICAg
IFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKSBjb21wbGV0aW9uOl57CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvICppdGVt
cyA9IFtkZWxlZ2F0ZSBpdGVtc107CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAxVUwpOwor
ICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX1NU
UkVRKCJob2xsZSIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAg
IEVYUEVDVF9TVFJFUSgid2RybG8iLCBpdGVtc1swXS50b2tlbnNbMV0uY29udGVudC5VVEY4U3Ry
aW5nKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFu
aXB1bGF0aW9uRm9ySXRlbXM6QFsoX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKiljcmVhdGVJdGVt
KGl0ZW1zWzBdLmlkZW50aWZpZXIsIHsKKyAgICAgICAgeyBpdGVtc1swXS50b2tlbnNbMF0uaWRl
bnRpZmllciwgQCJoZWxsbyIgfSwKKyAgICAgICAgeyBpdGVtc1swXS50b2tlbnNbMV0uaWRlbnRp
ZmllciwgQCJ3b3JsZCIgfSwKKyAgICB9KV0gY29tcGxldGlvbjpeKE5TQXJyYXk8TlNFcnJvciAq
PiAqZXJyb3JzKSB7CisgICAgICAgIEVYUEVDVF9FUShlcnJvcnMsIG5pbCk7CisgICAgICAgIGRv
bmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7
CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIjxkaXYgY2xhc3M9XCJmcmFtZVwiPjxkaXYgY2xhc3M9
XCJzdWJmcmFtZVwiPjwvZGl2PjwvZGl2PjxzdHlsZT48L3N0eWxlPjxkaXYgY2xhc3M9XCJpbmxp
bmVcIj48ZGl2PjxsaT48YSBocmVmPVwiI1wiPmhlbGxvPC9hPjwvbGk+PGxpPjxhIGhyZWY9XCIj
XCI+d29ybGQ8L2E+PC9saT48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPVwiZnJhbWVcIj48ZGl2IGNs
YXNzPVwic3ViZnJhbWVcIj48L2Rpdj48L2Rpdj4iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7Cit9CisKIFRFU1QoVGV4
dE1hbmlwdWxhdGlvbiwgSW5zZXJ0aW5nQ29udGVudEludG9BbHJlYWR5TWFuaXB1bGF0ZWRDb250
ZW50RG9lc05vdENyZWF0ZVRleHRNYW5pcHVsYXRpb25JdGVtKQogewogICAgIGF1dG8gZGVsZWdh
dGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397291</attachid>
            <date>2020-04-22 17:03:03 -0700</date>
            <delta_ts>2020-04-22 19:49:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210866-20200422170302.patch</filename>
            <type>text/plain</type>
            <size>17105</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjkyNTUzNjAwNWYyNTc0
MTVhY2U4NjdhMWNiZGE4MDhlMjgzMTA4Mi4uZGZiMzJjMTdiMmM1YTgyOTRhMTgzNGQ1ZjhjODU4
MTY2MzNiMTYyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDIwLTA0LTIyICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyIHNob3VsZCBzZXQgcmFuZ2Ugb2YgcGFyYWdyYXBoIHVzaW5nIHRva2VuJ3MgcG9z
aXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTA4NjYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYwNjQ2MjgzPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNldCB0aGUgcmFuZ2Ugb2YgcGFyYWdy
YXBoIHVzaW5nIHBvc2l0aW9ucyBvZiBmaXJzdCB0b2tlbiBhbmQgbGFzdCB0b2tlbiBpbiB0aGUg
cGFyYWdyYXBoIGJlY2F1c2U6CisgICAgICAgIDEuIEFjY3VyYXRlIHJhbmdlIG1ha2VzIHRva2Vu
IG1hdGNoaW5nIGluIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpyZXBsYWNlKCkgZWFzaWVy
LCBhcyBUZXh0SXRlcmF0b3IgY291bGQgdmlzaXQKKyAgICAgICAgZGlmZmVyZW50IHBvc2l0aW9u
cyB3aXRoIGRpZmZlcmVudCByYW5nZXMgb3IgZGlmZmVyZW50IGNvbmRpdGlvbnMuIEZvciBleGFt
cGxlLCBpbiBvdXIgcHJldmlvdXMgaW1wbGVtZW50YXRpb24sIAorICAgICAgICBzdGFydCBvZiBh
IHBhcmFncmFwaCBjYW4gYmUgc2V0IGFzIHRoZSBmaXJzdCB2aXNpYmxlIHBvc2l0aW9uIG9mIGRv
Y3VtZW50LCB3aGlsZSBwb3N0aW9uIG9mIGZpcnN0IHRva2VuIAorICAgICAgICBpcyBhZnRlciB0
aGF0LiBUaGVuIGluIHJlcGxhY2UoKSwgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgbWF5IGV4
dHJhY3QgYSB3b3JkIGJlZm9yZSB0aGUgcG9zaXRpb24gb2YgZmlyc3QgdG9rZW4KKyAgICAgICAg
YW5kIHJldHVybiBlcnJvci4gU2VlIGFkZGVkIHRlc3QgVGV4dE1hbmlwdWxhdGlvbi5Db21wbGV0
ZVRleHRNYW5pcHVsYXRpb25Db3JyZWN0UGFyYWdyYXBoUmFuZ2UuCisgICAgICAgIDIuIFRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyIGNhbiBoYW5kbGUgZmV3ZXIgY29udGVudCB3aGljaCBpcyBs
ZXNzIGVycm9yLXByb25lLiBGb3IgZXhhbXBsZSwgc3ZnIGVsZW1lbnRzIAorICAgICAgICBiZWZv
cmUvYWZ0ZXIgdGhlIHBhcmFncmFwaCB0ZXh0IHdpbGwgbm90IGJlIGlkZW50aWZpZWQgYXMgdG9r
ZW5zIFtdIGluIHRoZSBwYXJhZ3JhcGguIFNlZSB1cGRhdGVkIEFQSSB0ZXN0cyBmb3IgCisgICAg
ICAgIGV4YW1wbGUuCisKKyAgICAgICAgTmV3IHRlc3Q6IFRleHRNYW5pcHVsYXRpb24uQ29tcGxl
dGVUZXh0TWFuaXB1bGF0aW9uQ29ycmVjdFBhcmFncmFwaFJhbmdlCisKKyAgICAgICAgKiBlZGl0
aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
cmFncmFwaENvbnRlbnRJdGVyYXRvcjo6bW92ZUN1cnJlbnROb2RlRm9yd2FyZCk6IG1fY3VycmVu
dE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudCBzaG91bGQgbm90IAorICAgICAgICBiZSBh
ZHZhbmNlZCBpZiBpdCBpcyBhbHJlYWR5IGF0IHRoZSBlbmQuCisgICAgICAgIChXZWJDb3JlOjpj
b250YWluc05vbkhUTUxTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcjo6b2JzZXJ2ZVBhcmFncmFwaHMpOlNldCB0aGUgcGFyYWdyYXBoIHN0YXJ0IGFz
IHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgCisgICAgICAgIHRva2VuIGFuZCBlbmQgYXMgdGhl
IHBvc2l0aW9uIG9mIGxhc3QgdG9rZW4uIElmIHRoZSBwYXJhZ3JhcGggaXMgc3BsaXQgd2l0aCA8
YnI+LCB0aGUgZW5kIHdpbGwgYmUgZXh0ZW5kZWQgdG8gCisgICAgICAgIHBvc2l0aW9uIG9mIDxi
cj4gc28gdGhhdCB3ZSBjYW4gYWRkIHRoaXMgbm9kZSBiYWNrIGxhdGVyOyBvdGhlcndpc2UsIDxi
cj4gY2FuIGJlIHJlbW92ZWQgYWZ0ZXIgb3JpZ2luYWwgCisgICAgICAgIHRleHQgb2YgcGFyYWdy
YXBoIGlzIHJlbW92ZWQgaW4gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UoKS4g
QWxzbywgc3RvcCBpZGVudGlmeWluZyBzcGFjZXMgYXMgdG9rZW5zIAorICAgICAgICBiZWNhdXNl
IG5vbi10ZXh0IE5vZGUgY2FuIGVtaXQgc3BhY2VzLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UpOiBPbmx5IGlkZW50aWZ5IHRva2VucyBmcm9t
IGNvbnRlbnQgd2l0aCBtZWFuaW5nZnVsIHRleHQuCisKIDIwMjAtMDQtMjIgIEVyaWMgQ2FybHNv
biAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgZmFzdC9ldmVudHMvZXZlbnQt
aGFuZGxlci1kZXRhY2hlZC1kb2N1bWVudC1kaXNwYXRjaEV2ZW50Lmh0bWwgaXMgY3Jhc2hpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlci5jcHAKaW5kZXggMzBiZDdmYmFkYTYxNWJjOGE2ZDdkNWZlMTE5YmU1YjY2YWE3ZmE1MS4u
YmYxZDVhMzA4OTQ4OWVjM2ZjMDU0YjcyNjE1YmJjNmIwZjdlY2Q4YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKQEAg
LTMwLDggKzMwLDEwIEBACiAjaW5jbHVkZSAiRWRpdGluZy5oIgogI2luY2x1ZGUgIkVsZW1lbnRB
bmNlc3Rvckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRXZlbnRMb29wLmgiCisjaW5jbHVkZSAiSFRN
TEJSRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIk5vZGVUcmF2
ZXJzYWwuaCIKICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIK
QEAgLTIwNyw2ICsyMDksOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgbW92ZUN1cnJl
bnROb2RlRm9yd2FyZCgpCiAgICAgeworICAgICAgICBpZiAobV9jdXJyZW50Tm9kZUZvckZpbmRp
bmdJbnZpc2libGVDb250ZW50ID09IG1fcGFzdEVuZE5vZGUpCisgICAgICAgICAgICByZXR1cm47
CisKICAgICAgICAgbV9jdXJyZW50Tm9kZUZvckZpbmRpbmdJbnZpc2libGVDb250ZW50ID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dCgqbV9jdXJyZW50Tm9kZUZvckZpbmRpbmdJbnZpc2libGVDb250ZW50
KTsKICAgICAgICAgaWYgKCFtX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJsZUNvbnRlbnQp
CiAgICAgICAgICAgICBtX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJsZUNvbnRlbnQgPSBt
X3Bhc3RFbmROb2RlOwpAQCAtMjQyLDYgKzI0NywxNiBAQCBzdGF0aWMgYm9vbCBjYW5QZXJmb3Jt
VGV4dE1hbmlwdWxhdGlvbkJ5UmVwbGFjaW5nRW50aXJlVGV4dENvbnRlbnQoY29uc3QgRWxlbWVu
dAogICAgIHJldHVybiBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aXRsZVRhZykgfHwg
ZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uVGFnKTsKIH0KIAorc3RhdGljIGJv
b2wgY29udGFpbnNOb25IVE1MU3BhY2UoY29uc3QgU3RyaW5nVmlldyYgdGV4dCkKK3sKKyAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCB0ZXh0Lmxlbmd0aCgpOyArK2luZGV4KSB7
CisgICAgICAgIGlmIChpc05vdEhUTUxTcGFjZSh0ZXh0W2luZGV4XSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgVGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBz
dGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKIHsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwg
ZW5kLmlzTnVsbCgpKQpAQCAtMjU3LDcgKzI3Miw4IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QK
IAogICAgIEV4Y2x1c2lvblJ1bGVNYXRjaGVyIGV4Y2x1c2lvblJ1bGVNYXRjaGVyKG1fZXhjbHVz
aW9uUnVsZXMpOwogICAgIFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zSW5DdXJyZW50
UGFyYWdyYXBoOwotICAgIFBvc2l0aW9uIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gdmlzaWJs
ZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCk7CisgICAgUG9zaXRpb24gc3RhcnRPZkN1cnJlbnRQYXJh
Z3JhcGg7CisgICAgUG9zaXRpb24gZW5kT2ZDdXJyZW50UGFyYWdyYXBoOwogICAgIGZvciAoOyAh
aXRlcmF0b3IuYXRFbmQoKTsgaXRlcmF0b3IuYWR2YW5jZSgpKSB7CiAgICAgICAgIGF1dG8gY29u
dGVudCA9IGl0ZXJhdG9yLmN1cnJlbnRDb250ZW50KCk7CiAgICAgICAgIGlmIChjb250ZW50Lm5v
ZGUpIHsKQEAgLTI4MSwxNSArMjk3LDIwIEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLmlzTnVsbCgpICYmIGNvbnRlbnQu
aXNUZXh0Q29udGVudCkKLSAgICAgICAgICAgICAgICBzdGFydE9mQ3VycmVudFBhcmFncmFwaCA9
IGl0ZXJhdG9yLnN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjb250
ZW50LmlzUmVwbGFjZWRDb250ZW50KSB7Ci0gICAgICAgICAgICBpZiAoc3RhcnRPZkN1cnJlbnRQ
YXJhZ3JhcGguaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3Jh
cGggPSBwb3NpdGlvbkJlZm9yZU5vZGUoY29udGVudC5ub2RlLmdldCgpKTsKLSAgICAgICAgICAg
IHRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5hcHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rv
a2VuSWRlbnRpZmllci5nZW5lcmF0ZSgpLCAiW10iLCB0cnVlIC8qIGlzRXhjbHVkZWQgKi99KTsK
KyAgICAgICAgICAgIGlmICh0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBhdXRvIGN1cnJlbnRFbmRPZkN1
cnJlbnRQYXJhZ3JhcGggPSBwb3NpdGlvbkFmdGVyTm9kZShjb250ZW50Lm5vZGUuZ2V0KCkpOwor
ICAgICAgICAgICAgLy8gVGhpcyBpcyBhdCB0aGUgc2FtZSBOb2RlIGFzIGxhc3QgdG9rZW4sIHNv
IGl0IGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gY3VycmVudCByYW5nZS4KKyAgICAgICAgICAgIGlm
ICghaXM8VGV4dD4oY29udGVudC5ub2RlKSAmJiBjdXJyZW50RW5kT2ZDdXJyZW50UGFyYWdyYXBo
LmVxdWFscyhlbmRPZkN1cnJlbnRQYXJhZ3JhcGgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICBlbmRPZkN1cnJlbnRQYXJhZ3JhcGggPSBjdXJyZW50RW5kT2ZDdXJy
ZW50UGFyYWdyYXBoOworICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVu
ZChNYW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksICJbXSIs
IHRydWUgfSk7CisKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTMwMCwz
MSArMzIxLDM5IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Om9ic2VydmVQYXJh
Z3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QKICAgICAgICAgc2l6ZV90IG9mZnNl
dE9mTmV4dE5ld0xpbmUgPSAwOwogICAgICAgICBTdHJpbmdWaWV3IGN1cnJlbnRUZXh0ID0gY29u
dGVudC50ZXh0OwogICAgICAgICB3aGlsZSAoKG9mZnNldE9mTmV4dE5ld0xpbmUgPSBjdXJyZW50
VGV4dC5maW5kKCdcbicsIHN0YXJ0T2ZDdXJyZW50TGluZSkpICE9IG5vdEZvdW5kKSB7Ci0gICAg
ICAgICAgICBpZiAoc3RhcnRPZkN1cnJlbnRMaW5lIDwgb2Zmc2V0T2ZOZXh0TmV3TGluZSkgewor
ICAgICAgICAgICAgaWYgKGlzPFRleHQ+KGNvbnRlbnQubm9kZSkgJiYgc3RhcnRPZkN1cnJlbnRM
aW5lIDwgb2Zmc2V0T2ZOZXh0TmV3TGluZSkgewogICAgICAgICAgICAgICAgIGF1dG8gc3RyaW5n
VW50aWxFbmRPZkxpbmUgPSBjdXJyZW50VGV4dC5zdWJzdHJpbmcoc3RhcnRPZkN1cnJlbnRMaW5l
LCBvZmZzZXRPZk5leHROZXdMaW5lIC0gc3RhcnRPZkN1cnJlbnRMaW5lKS50b1N0cmluZygpOwor
ICAgICAgICAgICAgICAgIGF1dG8mIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKmNvbnRlbnQu
bm9kZSk7CisgICAgICAgICAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gUG9zaXRpb24o
JnRleHROb2RlLCBvZmZzZXRPZk5leHROZXdMaW5lKTsKKyAgICAgICAgICAgICAgICBpZiAodG9r
ZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgc3Rh
cnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBQb3NpdGlvbigmdGV4dE5vZGUsIHN0YXJ0T2ZDdXJyZW50
TGluZSk7CisKICAgICAgICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5k
KE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgc3RyaW5n
VW50aWxFbmRPZkxpbmUsIGV4Y2x1c2lvblJ1bGVNYXRjaGVyLmlzRXhjbHVkZWQoY29udGVudC5u
b2RlLmdldCgpKSB9KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCF0b2tlbnNJ
bkN1cnJlbnRQYXJhZ3JhcGguaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgUG9zaXRpb24g
ZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gaXRlcmF0b3IuZW5kUG9zaXRpb24oKTsKLSAgICAgICAg
ICAgICAgICBpZiAoaXM8VGV4dD4oY29udGVudC5ub2RlKSkgewotICAgICAgICAgICAgICAgICAg
ICBhdXRvJiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCpjb250ZW50Lm5vZGUpOwotICAgICAg
ICAgICAgICAgICAgICBlbmRPZkN1cnJlbnRQYXJhZ3JhcGggPSBQb3NpdGlvbigmdGV4dE5vZGUs
IG9mZnNldE9mTmV4dE5ld0xpbmUpOwotICAgICAgICAgICAgICAgICAgICBzdGFydE9mQ3VycmVu
dFBhcmFncmFwaCA9IFBvc2l0aW9uKCZ0ZXh0Tm9kZSwgb2Zmc2V0T2ZOZXh0TmV3TGluZSArIDEp
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXM8SFRNTEJSRWxlbWVu
dD4oY29udGVudC5ub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdy
YXBoID0gcG9zaXRpb25BZnRlck5vZGUoY29udGVudC5ub2RlLmdldCgpKTsKICAgICAgICAgICAg
ICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgc3RhcnRPZkN1cnJlbnRQYXJhZ3Jh
cGgsIGVuZE9mQ3VycmVudFBhcmFncmFwaCwgbnVsbHB0ciwgbnVsbFFOYW1lKCksIHN0ZDo6ZXhj
aGFuZ2UodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLCB7IH0pIH0pOwotICAgICAgICAgICAgICAg
IHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLmNsZWFyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBzdGFydE9mQ3VycmVudExpbmUgPSBvZmZzZXRPZk5leHROZXdMaW5lICsgMTsKICAgICAg
ICAgfQogCiAgICAgICAgIGF1dG8gcmVtYWluaW5nVGV4dCA9IGN1cnJlbnRUZXh0LnN1YnN0cmlu
ZyhzdGFydE9mQ3VycmVudExpbmUpOwotICAgICAgICBpZiAocmVtYWluaW5nVGV4dC5sZW5ndGgo
KSkKKyAgICAgICAgaWYgKGNvbnRhaW5zTm9uSFRNTFNwYWNlKHJlbWFpbmluZ1RleHQpKSB7Cisg
ICAgICAgICAgICBpZiAodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgICAgIGlmIChzdGFydE9mQ3VycmVudExpbmUgJiYgaXM8VGV4dD4oY29udGVudC5u
b2RlKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBQb3Np
dGlvbigmZG93bmNhc3Q8VGV4dD4oKmNvbnRlbnQubm9kZSksIHN0YXJ0T2ZDdXJyZW50TGluZSk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdGFydE9mQ3VycmVu
dFBhcmFncmFwaCA9IGl0ZXJhdG9yLnN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IGl0ZXJhdG9yLmVuZFBvc2l0aW9uKCk7
CiAgICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlv
blRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgcmVtYWluaW5nVGV4dC50b1N0
cmluZygpLCBleGNsdXNpb25SdWxlTWF0Y2hlci5pc0V4Y2x1ZGVkKGNvbnRlbnQubm9kZS5nZXQo
KSkgfSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIXRva2Vuc0luQ3VycmVudFBhcmFn
cmFwaC5pc0VtcHR5KCkpCi0gICAgICAgIGFkZEl0ZW0oTWFuaXB1bGF0aW9uSXRlbURhdGEgeyBz
dGFydE9mQ3VycmVudFBhcmFncmFwaCwgdmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLCBudWxs
cHRyLCBudWxsUU5hbWUoKSwgV1RGTW92ZSh0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGgpIH0pOwor
ICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgc3RhcnRPZkN1cnJlbnRQYXJh
Z3JhcGgsIGVuZE9mQ3VycmVudFBhcmFncmFwaCwgbnVsbHB0ciwgbnVsbFFOYW1lKCksIFdURk1v
dmUodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoKSB9KTsKIH0KIAogdm9pZCBUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcjo6ZGlkQ3JlYXRlUmVuZGVyZXJGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1l
bnQpCkBAIC01MTksNiArNTQ4LDEzIEBAIGF1dG8gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbURhdGEmIGl0ZW0sIGNvbnN0CiAgICAgICAg
ICAgICByZXR1cm4gTWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU6OkNvbnRlbnRDaGFuZ2VkOwogICAg
ICAgICB9CiAKKyAgICAgICAgaWYgKGNvbnRlbnQuaXNUZXh0Q29udGVudCAmJiAhY29udGFpbnNO
b25IVE1MU3BhY2UoY29udGVudC50ZXh0KSkgeworICAgICAgICAgICAgLy8gPGJyPiBzaG91bGQg
bm90IGV4aXN0IGluIHRoZSBtaWRkbGUgb2YgYSBwYXJhZ3JhcGguCisgICAgICAgICAgICBpZiAo
aXM8SFRNTEJSRWxlbWVudD4oY29udGVudC5ub2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
TWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU6OkNvbnRlbnRDaGFuZ2VkOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKwogICAgICAgICBhdXRvJiBjdXJyZW50VG9rZW4gPSBpdGVtLnRv
a2Vuc1tjdXJyZW50VG9rZW5JbmRleF07CiAgICAgICAgIGlmICghY29udGVudC5pc1JlcGxhY2Vk
Q29udGVudCAmJiBjb250ZW50LnRleHQgIT0gY3VycmVudFRva2VuLmNvbnRlbnQpCiAgICAgICAg
ICAgICByZXR1cm4gTWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU6OkNvbnRlbnRDaGFuZ2VkOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDg1MTUzYjJi
NTY1NjljMzI4OWJjMTU4MTA4MTg1MTM0Y2I3N2E3OTMuLmM2ZDJhOWQyMzlkYzQyMmZhNjQxOGI4
MTU5MDhiYmM0ZTM1N2U4NTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMC0wNC0yMiAgU2lodWkgTGl1ICA8c2lo
dWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciBz
aG91bGQgc2V0IHJhbmdlIG9mIHBhcmFncmFwaCB1c2luZyB0b2tlbidzIHBvc2l0aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwODY2CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS82MDY0NjI4Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
VGV4dE1hbmlwdWxhdGlvbi5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAy
MDIwLTA0LTIyICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgogCiAgICAgICAgIFRl
eHRNYW5pcHVsYXRpb24uQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uQXZvaWRDcmFzaGluZ1doZW5D
b250ZW50SXNSZW1vdmVkIGRvZXMgbm90IHdhaXQgZm9yIHJlc3VsdApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1t
CmluZGV4IDMzNzE2ZWM5NjAxOTllMjE4MmIyNjY1MDYwMDFkMTQ2NjJhYzZkMGEuLjkyYzA3MDRi
Mzc1ZTRhOGE1Zjc0NGZjZmJhN2FkMTAxODE3YWQ2ZWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0KQEAg
LTk4OCwyMiArOTg4LDE0IEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFu
aXB1bGF0aW9uU2hvdWxkUHJlc2VydmVPcmRlck9mQmxvY2tJbWFnZSkKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogCiAgICAgYXV0byAqaXRlbXMgPSBbZGVsZWdhdGUgaXRl
bXNdOwotICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMlVMKTsKLSAgICBFWFBFQ1RfRVEoaXRl
bXNbMF0udG9rZW5zLmNvdW50LCAyVUwpOwotICAgIEVYUEVDVF9TVFJFUSgiW10iLCBpdGVtc1sw
XS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKLSAgICBFWFBFQ1RfVFJVRShpdGVtc1sw
XS50b2tlbnNbMF0uaXNFeGNsdWRlZCk7Ci0gICAgRVhQRUNUX1NUUkVRKCJbXSIsIGl0ZW1zWzBd
LnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOwotICAgIEVYUEVDVF9UUlVFKGl0ZW1zWzBd
LnRva2Vuc1sxXS5pc0V4Y2x1ZGVkKTsKLQotICAgIGF1dG8gKnRva2VucyA9IGl0ZW1zWzFdLnRv
a2VuczsKLSAgICBFWFBFQ1RfRVEodG9rZW5zLmNvdW50LCAxVUwpOwotICAgIEVYUEVDVF9TVFJF
USgiaGVsbGxvIHdvcmxkIiwgdG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7Ci0gICAgRVhQ
RUNUX0ZBTFNFKHRva2Vuc1swXS5pc0V4Y2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291
bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAg
ICBFWFBFQ1RfU1RSRVEoImhlbGxsbyB3b3JsZCIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50
LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9UUlVFKCFpdGVtc1swXS50b2tlbnNbMF0uaXNFeGNs
dWRlZCk7CiAKICAgICBkb25lID0gZmFsc2U7CiAgICAgW3dlYlZpZXcgX2NvbXBsZXRlVGV4dE1h
bmlwdWxhdGlvbkZvckl0ZW1zOkBbCi0gICAgICAgIChfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAq
KWNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeyB7IGl0ZW1zWzBdLnRva2Vuc1swXS5p
ZGVudGlmaWVyLCBuaWwgfSB9KSwKLSAgICAgICAgKF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICop
Y3JlYXRlSXRlbShpdGVtc1sxXS5pZGVudGlmaWVyLCB7IHsgaXRlbXNbMV0udG9rZW5zWzBdLmlk
ZW50aWZpZXIsIEAiaGVsbG8sIHdvcmxkIiB9IH0pLAorICAgICAgICAoX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0gKiljcmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIsIHsgeyBpdGVtc1swXS50
b2tlbnNbMF0uaWRlbnRpZmllciwgQCJoZWxsbywgd29ybGQiIH0gfSksCiAgICAgXSBjb21wbGV0
aW9uOl4oTlNBcnJheTxOU0Vycm9yICo+ICplcnJvcnMpIHsKICAgICAgICAgRVhQRUNUX0VRKGVy
cm9ycywgbmlsKTsKICAgICAgICAgZG9uZSA9IHRydWU7CkBAIC0xMDc2LDE2ICsxMDY4LDEzIEBA
IFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uU2hvdWxkUmVw
bGFjZUNvbnRlbnRGb2xsb3dlZEFmdGVyCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZk
b25lKTsKIAogICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKLSAgICBFWFBFQ1Rf
RVEoaXRlbXMuY291bnQsIDJVTCk7Ci0gICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3Vu
dCwgMVVMKTsKLSAgICBFWFBFQ1RfU1RSRVEoIltdIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRl
bnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAxVUwpOwogICAgIEVY
UEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDFVTCk7Ci0gICAgRVhQRUNUX1NUUkVRKCJo
ZWxsbyB3b3JsZCIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAg
IEVYUEVDVF9TVFJFUSgiaGVsbG8gd29ybGQiLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudC5V
VEY4U3RyaW5nKTsKIAogICAgIGRvbmUgPSBmYWxzZTsKICAgICBbd2ViVmlldyBfY29tcGxldGVU
ZXh0TWFuaXB1bGF0aW9uRm9ySXRlbXM6QFsKLSAgICAgICAgKF9XS1RleHRNYW5pcHVsYXRpb25J
dGVtICopY3JlYXRlSXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7IHsgaXRlbXNbMF0udG9rZW5z
WzBdLmlkZW50aWZpZXIsIG5pbCB9IH0pLAotICAgICAgICAoX1dLVGV4dE1hbmlwdWxhdGlvbkl0
ZW0gKiljcmVhdGVJdGVtKGl0ZW1zWzFdLmlkZW50aWZpZXIsIHsgeyBpdGVtc1sxXS50b2tlbnNb
MF0uaWRlbnRpZmllciwgQCJoZWxsbywgd29ybGQiIH0gfSksCisgICAgICAgIChfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeyB7IGl0ZW1z
WzBdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAImhlbGxvLCB3b3JsZCIgfSB9KSwKICAgICBdIGNv
bXBsZXRpb246XihOU0FycmF5PE5TRXJyb3IgKj4gKmVycm9ycykgewogICAgICAgICBFWFBFQ1Rf
RVEoZXJyb3JzLCBuaWwpOwogICAgICAgICBkb25lID0gdHJ1ZTsKQEAgLTExNjIsMTkgKzExNTEs
MTYgQEAgVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25TaG91
bGRSZXBsYWNlQ29udGVudHNBcm91bmRQYXJhZ3IKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOwogCiAgICAgYXV0byAqaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNdOwotICAgIEVY
UEVDVF9FUShpdGVtcy5jb3VudCwgM1VMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJV
TCk7CiAgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMVVMKTsKICAgICBFWFBF
Q1RfU1RSRVEoImhlZWV5IiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7
CiAgICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgMVVMKTsKLSAgICBFWFBFQ1Rf
U1RSRVEoIltdIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7Ci0gICAg
RVhQRUNUX0VRKGl0ZW1zWzJdLnRva2Vucy5jb3VudCwgMVVMKTsKLSAgICBFWFBFQ1RfU1RSRVEo
Indvb3JsZCIsIGl0ZW1zWzJdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVY
UEVDVF9TVFJFUSgid29vcmxkIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmlu
Zyk7CiAKICAgICBkb25lID0gZmFsc2U7CiAgICAgW3dlYlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlw
dWxhdGlvbkZvckl0ZW1zOkBbCiAgICAgICAgIChfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNy
ZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeyB7IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVu
dGlmaWVyLCBAImhlbGxvIiB9IH0pLAotICAgICAgICAoX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0g
KiljcmVhdGVJdGVtKGl0ZW1zWzFdLmlkZW50aWZpZXIsIHsgeyBpdGVtc1sxXS50b2tlbnNbMF0u
aWRlbnRpZmllciwgbmlsIH0gfSksCi0gICAgICAgIChfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAq
KWNyZWF0ZUl0ZW0oaXRlbXNbMl0uaWRlbnRpZmllciwgeyB7IGl0ZW1zWzJdLnRva2Vuc1swXS5p
ZGVudGlmaWVyLCBAIndvcmxkIiB9IH0pLAorICAgICAgICAoX1dLVGV4dE1hbmlwdWxhdGlvbkl0
ZW0gKiljcmVhdGVJdGVtKGl0ZW1zWzFdLmlkZW50aWZpZXIsIHsgeyBpdGVtc1sxXS50b2tlbnNb
MF0uaWRlbnRpZmllciwgQCJ3b3JsZCIgfSB9KSwKICAgICBdIGNvbXBsZXRpb246XihOU0FycmF5
PE5TRXJyb3IgKj4gKmVycm9ycykgewogICAgICAgICBFWFBFQ1RfRVEoZXJyb3JzLCBuaWwpOwog
ICAgICAgICBkb25lID0gdHJ1ZTsKQEAgLTE2ODQsNiArMTY3MCw0MCBAQCBURVNUKFRleHRNYW5p
cHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkRvZXNOb3RDcmVhdGVNb3JlVGV4dE1h
bmlwdWxhdGlvbgogICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+YmFyIDxzdHJvbmc+Z2FycGx5PC9z
dHJvbmc+IGZvbzwvcD4iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
ZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7CiB9CiAKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwg
Q29tcGxldGVUZXh0TWFuaXB1bGF0aW9uQ29ycmVjdFBhcmFncmFwaFJhbmdlKQoreworICAgIGF1
dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBp
bml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmll
dyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjxoZWFkPjxzdHlsZT51bHtkaXNw
bGF5OmJsb2NrfWxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5pbmxpbmUge2Zsb2F0OiBsZWZ0O30u
c3ViZnJhbWUge2hlaWdodDogNDJweDt9LmZyYW1lIHtwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiAt
OTk5OXB4O308L3N0eWxlPjwvaGVhZD48Ym9keT48ZGl2IGNsYXNzPSdmcmFtZSc+PGRpdiBjbGFz
cz0nc3ViZnJhbWUnPjwvZGl2PjwvZGl2PjxzdHlsZT48L3N0eWxlPjxkaXYgY2xhc3M9J2lubGlu
ZSc+PGRpdj48bGk+PGEgaHJlZj0nIyc+aG9sbGU8L2E+PC9saT48bGk+PGEgaHJlZj0nIyc+d2Ry
bG88L2E+PC9saT48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSdmcmFtZSc+PGRpdiBjbGFzcz0nc3Vi
ZnJhbWUnPjwvZGl2PjwvZGl2PjwvYm9keT4iXTsKKworICAgIFJldGFpblB0cjxfV0tUZXh0TWFu
aXB1bGF0aW9uQ29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tfV0tUZXh0
TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIGRvbmUgPSBmYWxz
ZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb24uZ2V0KCkgY29tcGxldGlvbjpeeworICAgICAgICBkb25lID0gdHJ1ZTsK
KyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0
byAqaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNdOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwg
MVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCAyVUwpOworICAgIEVY
UEVDVF9TVFJFUSgiaG9sbGUiLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5n
KTsKKyAgICBFWFBFQ1RfU1RSRVEoIndkcmxvIiwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQu
VVRGOFN0cmluZyk7CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX2NvbXBsZXRl
VGV4dE1hbmlwdWxhdGlvbkZvckl0ZW1zOkBbKF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopY3Jl
YXRlSXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7CisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5z
WzBdLmlkZW50aWZpZXIsIEAiaGVsbG8iIH0sCisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5zWzFd
LmlkZW50aWZpZXIsIEAid29ybGQiIH0sCisgICAgfSldIGNvbXBsZXRpb246XihOU0FycmF5PE5T
RXJyb3IgKj4gKmVycm9ycykgeworICAgICAgICBFWFBFQ1RfRVEoZXJyb3JzLCBuaWwpOworICAg
ICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCI8ZGl2IGNsYXNzPVwiZnJhbWVcIj48ZGl2
IGNsYXNzPVwic3ViZnJhbWVcIj48L2Rpdj48L2Rpdj48c3R5bGU+PC9zdHlsZT48ZGl2IGNsYXNz
PVwiaW5saW5lXCI+PGRpdj48bGk+PGEgaHJlZj1cIiNcIj5oZWxsbzwvYT48L2xpPjxsaT48YSBo
cmVmPVwiI1wiPndvcmxkPC9hPjwvbGk+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz1cImZyYW1lXCI+
PGRpdiBjbGFzcz1cInN1YmZyYW1lXCI+PC9kaXY+PC9kaXY+IiwgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MIl0pOworfQorCiBU
RVNUKFRleHRNYW5pcHVsYXRpb24sIEluc2VydGluZ0NvbnRlbnRJbnRvQWxyZWFkeU1hbmlwdWxh
dGVkQ29udGVudERvZXNOb3RDcmVhdGVUZXh0TWFuaXB1bGF0aW9uSXRlbSkKIHsKICAgICBhdXRv
IGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5p
dF0pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397304</attachid>
            <date>2020-04-22 19:49:34 -0700</date>
            <delta_ts>2020-04-23 09:58:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210866-20200422194933.patch</filename>
            <type>text/plain</type>
            <size>17106</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjkyNTUzNjAwNWYyNTc0
MTVhY2U4NjdhMWNiZGE4MDhlMjgzMTA4Mi4uNTAyY2FiZmIxZTg4MWJkMmRjNGI2ZDZkZDQyMzNm
MWQ1OTFmMmQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDIwLTA0LTIyICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyIHNob3VsZCBzZXQgcmFuZ2Ugb2YgcGFyYWdyYXBoIHVzaW5nIHRva2VuJ3MgcG9z
aXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTA4NjYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYwNjQ2MjgzPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNldCB0aGUgcmFuZ2Ugb2YgcGFyYWdy
YXBoIHVzaW5nIHBvc2l0aW9ucyBvZiBmaXJzdCB0b2tlbiBhbmQgbGFzdCB0b2tlbiBpbiB0aGUg
cGFyYWdyYXBoIGJlY2F1c2U6CisgICAgICAgIDEuIEFjY3VyYXRlIHJhbmdlIG1ha2VzIHRva2Vu
IG1hdGNoaW5nIGluIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpyZXBsYWNlKCkgZWFzaWVy
LCBhcyBUZXh0SXRlcmF0b3IgY291bGQgdmlzaXQKKyAgICAgICAgZGlmZmVyZW50IHBvc2l0aW9u
cyB3aXRoIGRpZmZlcmVudCByYW5nZXMgb3IgZGlmZmVyZW50IGNvbmRpdGlvbnMuIEZvciBleGFt
cGxlLCBpbiBvdXIgcHJldmlvdXMgaW1wbGVtZW50YXRpb24sIAorICAgICAgICBzdGFydCBvZiBh
IHBhcmFncmFwaCBjYW4gYmUgc2V0IGFzIHRoZSBmaXJzdCB2aXNpYmxlIHBvc2l0aW9uIG9mIGRv
Y3VtZW50LCB3aGlsZSBwb3N0aW9uIG9mIGZpcnN0IHRva2VuIAorICAgICAgICBpcyBhZnRlciB0
aGF0LiBUaGVuIGluIHJlcGxhY2UoKSwgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgbWF5IGV4
dHJhY3QgYSB3b3JkIGJlZm9yZSB0aGUgcG9zaXRpb24gb2YgZmlyc3QgdG9rZW4KKyAgICAgICAg
YW5kIHJldHVybiBlcnJvci4gU2VlIGFkZGVkIHRlc3QgVGV4dE1hbmlwdWxhdGlvbi5Db21wbGV0
ZVRleHRNYW5pcHVsYXRpb25Db3JyZWN0UGFyYWdyYXBoUmFuZ2UuCisgICAgICAgIDIuIFRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyIGNhbiBoYW5kbGUgZmV3ZXIgY29udGVudCB3aGljaCBpcyBs
ZXNzIGVycm9yLXByb25lLiBGb3IgZXhhbXBsZSwgc3ZnIGVsZW1lbnRzIAorICAgICAgICBiZWZv
cmUvYWZ0ZXIgdGhlIHBhcmFncmFwaCB0ZXh0IHdpbGwgbm90IGJlIGlkZW50aWZpZWQgYXMgdG9r
ZW5zIFtdIGluIHRoZSBwYXJhZ3JhcGguIFNlZSB1cGRhdGVkIEFQSSB0ZXN0cyBmb3IgCisgICAg
ICAgIGV4YW1wbGUuCisKKyAgICAgICAgTmV3IHRlc3Q6IFRleHRNYW5pcHVsYXRpb24uQ29tcGxl
dGVUZXh0TWFuaXB1bGF0aW9uQ29ycmVjdFBhcmFncmFwaFJhbmdlCisKKyAgICAgICAgKiBlZGl0
aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
cmFncmFwaENvbnRlbnRJdGVyYXRvcjo6bW92ZUN1cnJlbnROb2RlRm9yd2FyZCk6IG1fY3VycmVu
dE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudCBzaG91bGQgbm90IAorICAgICAgICBiZSBh
ZHZhbmNlZCBpZiBpdCBpcyBhbHJlYWR5IGF0IHRoZSBlbmQuCisgICAgICAgIChXZWJDb3JlOjpj
b250YWluc09ubHlIVE1MU3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyk6U2V0IHRoZSBwYXJhZ3JhcGggc3RhcnQg
YXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCAKKyAgICAgICAgdG9rZW4gYW5kIGVuZCBhcyB0
aGUgcG9zaXRpb24gb2YgbGFzdCB0b2tlbi4gSWYgdGhlIHBhcmFncmFwaCBpcyBzcGxpdCB3aXRo
IDxicj4sIHRoZSBlbmQgd2lsbCBiZSBleHRlbmRlZCB0byAKKyAgICAgICAgcG9zaXRpb24gb2Yg
PGJyPiBzbyB0aGF0IHdlIGNhbiBhZGQgdGhpcyBub2RlIGJhY2sgbGF0ZXI7IG90aGVyd2lzZSwg
PGJyPiBjYW4gYmUgcmVtb3ZlZCBhZnRlciBvcmlnaW5hbCAKKyAgICAgICAgdGV4dCBvZiBwYXJh
Z3JhcGggaXMgcmVtb3ZlZCBpbiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZSgp
LiBBbHNvLCBzdG9wIGlkZW50aWZ5aW5nIHNwYWNlcyBhcyB0b2tlbnMgCisgICAgICAgIGJlY2F1
c2Ugbm9uLXRleHQgTm9kZSBjYW4gZW1pdCBzcGFjZXMuCisgICAgICAgIChXZWJDb3JlOjpUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZSk6IE9ubHkgaWRlbnRpZnkgdG9rZW5zIGZy
b20gY29udGVudCB3aXRoIG1lYW5pbmdmdWwgdGV4dC4KKwogMjAyMC0wNC0yMiAgRXJpYyBDYXJs
c29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBmYXN0L2V2ZW50cy9ldmVu
dC1oYW5kbGVyLWRldGFjaGVkLWRvY3VtZW50LWRpc3BhdGNoRXZlbnQuaHRtbCBpcyBjcmFzaGlu
ZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyLmNwcAppbmRleCAzMGJkN2ZiYWRhNjE1YmM4YTZkN2Q1ZmUxMTliZTViNjZhYTdmYTUx
Li44MDBkMTQ0NGY5NDlmOWVjODgwNWY1OWQyZTM4NDRkM2MzOTM3YjkwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcApA
QCAtMzAsOCArMzAsMTAgQEAKICNpbmNsdWRlICJFZGl0aW5nLmgiCiAjaW5jbHVkZSAiRWxlbWVu
dEFuY2VzdG9ySXRlcmF0b3IuaCIKICNpbmNsdWRlICJFdmVudExvb3AuaCIKKyNpbmNsdWRlICJI
VE1MQlJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiTm9kZVRy
YXZlcnNhbC5oIgogI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKICNpbmNsdWRlICJSYW5nZS5o
IgpAQCAtMjA3LDYgKzIwOSw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBtb3ZlQ3Vy
cmVudE5vZGVGb3J3YXJkKCkKICAgICB7CisgICAgICAgIGlmIChtX2N1cnJlbnROb2RlRm9yRmlu
ZGluZ0ludmlzaWJsZUNvbnRlbnQgPT0gbV9wYXN0RW5kTm9kZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKwogICAgICAgICBtX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJsZUNvbnRlbnQgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KCptX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJsZUNvbnRl
bnQpOwogICAgICAgICBpZiAoIW1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVu
dCkKICAgICAgICAgICAgIG1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudCA9
IG1fcGFzdEVuZE5vZGU7CkBAIC0yNDIsNiArMjQ3LDE2IEBAIHN0YXRpYyBib29sIGNhblBlcmZv
cm1UZXh0TWFuaXB1bGF0aW9uQnlSZXBsYWNpbmdFbnRpcmVUZXh0Q29udGVudChjb25zdCBFbGVt
ZW50CiAgICAgcmV0dXJuIGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnRpdGxlVGFnKSB8
fCBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb25UYWcpOwogfQogCitzdGF0aWMg
Ym9vbCBjb250YWluc09ubHlIVE1MU3BhY2VzKFN0cmluZ1ZpZXcgdGV4dCkKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCB0ZXh0Lmxlbmd0aCgpOyArK2luZGV4KSB7Cisg
ICAgICAgIGlmIChpc05vdEhUTUxTcGFjZSh0ZXh0W2luZGV4XSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgVGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFy
dCwgY29uc3QgUG9zaXRpb24mIGVuZCkKIHsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5k
LmlzTnVsbCgpKQpAQCAtMjU3LDcgKzI3Miw4IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QKIAog
ICAgIEV4Y2x1c2lvblJ1bGVNYXRjaGVyIGV4Y2x1c2lvblJ1bGVNYXRjaGVyKG1fZXhjbHVzaW9u
UnVsZXMpOwogICAgIFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zSW5DdXJyZW50UGFy
YWdyYXBoOwotICAgIFBvc2l0aW9uIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gdmlzaWJsZVN0
YXJ0LmRlZXBFcXVpdmFsZW50KCk7CisgICAgUG9zaXRpb24gc3RhcnRPZkN1cnJlbnRQYXJhZ3Jh
cGg7CisgICAgUG9zaXRpb24gZW5kT2ZDdXJyZW50UGFyYWdyYXBoOwogICAgIGZvciAoOyAhaXRl
cmF0b3IuYXRFbmQoKTsgaXRlcmF0b3IuYWR2YW5jZSgpKSB7CiAgICAgICAgIGF1dG8gY29udGVu
dCA9IGl0ZXJhdG9yLmN1cnJlbnRDb250ZW50KCk7CiAgICAgICAgIGlmIChjb250ZW50Lm5vZGUp
IHsKQEAgLTI4MSwxNSArMjk3LDIwIEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLmlzTnVsbCgpICYmIGNvbnRlbnQuaXNU
ZXh0Q29udGVudCkKLSAgICAgICAgICAgICAgICBzdGFydE9mQ3VycmVudFBhcmFncmFwaCA9IGl0
ZXJhdG9yLnN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjb250ZW50
LmlzUmVwbGFjZWRDb250ZW50KSB7Ci0gICAgICAgICAgICBpZiAoc3RhcnRPZkN1cnJlbnRQYXJh
Z3JhcGguaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgg
PSBwb3NpdGlvbkJlZm9yZU5vZGUoY29udGVudC5ub2RlLmdldCgpKTsKLSAgICAgICAgICAgIHRv
a2Vuc0luQ3VycmVudFBhcmFncmFwaC5hcHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2Vu
SWRlbnRpZmllci5nZW5lcmF0ZSgpLCAiW10iLCB0cnVlIC8qIGlzRXhjbHVkZWQgKi99KTsKKyAg
ICAgICAgICAgIGlmICh0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguaXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBhdXRvIGN1cnJlbnRFbmRPZkN1cnJl
bnRQYXJhZ3JhcGggPSBwb3NpdGlvbkFmdGVyTm9kZShjb250ZW50Lm5vZGUuZ2V0KCkpOworICAg
ICAgICAgICAgLy8gVGhpcyBpcyBhdCB0aGUgc2FtZSBOb2RlIGFzIGxhc3QgdG9rZW4sIHNvIGl0
IGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gY3VycmVudCByYW5nZS4KKyAgICAgICAgICAgIGlmICgh
aXM8VGV4dD4oY29udGVudC5ub2RlKSAmJiBjdXJyZW50RW5kT2ZDdXJyZW50UGFyYWdyYXBoLmVx
dWFscyhlbmRPZkN1cnJlbnRQYXJhZ3JhcGgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBlbmRPZkN1cnJlbnRQYXJhZ3JhcGggPSBjdXJyZW50RW5kT2ZDdXJyZW50
UGFyYWdyYXBoOworICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChN
YW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksICJbXSIsIHRy
dWUgfSk7CisKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTMwMCwzMSAr
MzIxLDM5IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Om9ic2VydmVQYXJhZ3Jh
cGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QKICAgICAgICAgc2l6ZV90IG9mZnNldE9m
TmV4dE5ld0xpbmUgPSAwOwogICAgICAgICBTdHJpbmdWaWV3IGN1cnJlbnRUZXh0ID0gY29udGVu
dC50ZXh0OwogICAgICAgICB3aGlsZSAoKG9mZnNldE9mTmV4dE5ld0xpbmUgPSBjdXJyZW50VGV4
dC5maW5kKCdcbicsIHN0YXJ0T2ZDdXJyZW50TGluZSkpICE9IG5vdEZvdW5kKSB7Ci0gICAgICAg
ICAgICBpZiAoc3RhcnRPZkN1cnJlbnRMaW5lIDwgb2Zmc2V0T2ZOZXh0TmV3TGluZSkgeworICAg
ICAgICAgICAgaWYgKGlzPFRleHQ+KGNvbnRlbnQubm9kZSkgJiYgc3RhcnRPZkN1cnJlbnRMaW5l
IDwgb2Zmc2V0T2ZOZXh0TmV3TGluZSkgewogICAgICAgICAgICAgICAgIGF1dG8gc3RyaW5nVW50
aWxFbmRPZkxpbmUgPSBjdXJyZW50VGV4dC5zdWJzdHJpbmcoc3RhcnRPZkN1cnJlbnRMaW5lLCBv
ZmZzZXRPZk5leHROZXdMaW5lIC0gc3RhcnRPZkN1cnJlbnRMaW5lKS50b1N0cmluZygpOworICAg
ICAgICAgICAgICAgIGF1dG8mIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKmNvbnRlbnQubm9k
ZSk7CisgICAgICAgICAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gUG9zaXRpb24oJnRl
eHROb2RlLCBvZmZzZXRPZk5leHROZXdMaW5lKTsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW5z
SW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRP
ZkN1cnJlbnRQYXJhZ3JhcGggPSBQb3NpdGlvbigmdGV4dE5vZGUsIHN0YXJ0T2ZDdXJyZW50TGlu
ZSk7CisKICAgICAgICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1h
bmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgc3RyaW5nVW50
aWxFbmRPZkxpbmUsIGV4Y2x1c2lvblJ1bGVNYXRjaGVyLmlzRXhjbHVkZWQoY29udGVudC5ub2Rl
LmdldCgpKSB9KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCF0b2tlbnNJbkN1
cnJlbnRQYXJhZ3JhcGguaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgUG9zaXRpb24gZW5k
T2ZDdXJyZW50UGFyYWdyYXBoID0gaXRlcmF0b3IuZW5kUG9zaXRpb24oKTsKLSAgICAgICAgICAg
ICAgICBpZiAoaXM8VGV4dD4oY29udGVudC5ub2RlKSkgewotICAgICAgICAgICAgICAgICAgICBh
dXRvJiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCpjb250ZW50Lm5vZGUpOwotICAgICAgICAg
ICAgICAgICAgICBlbmRPZkN1cnJlbnRQYXJhZ3JhcGggPSBQb3NpdGlvbigmdGV4dE5vZGUsIG9m
ZnNldE9mTmV4dE5ld0xpbmUpOwotICAgICAgICAgICAgICAgICAgICBzdGFydE9mQ3VycmVudFBh
cmFncmFwaCA9IFBvc2l0aW9uKCZ0ZXh0Tm9kZSwgb2Zmc2V0T2ZOZXh0TmV3TGluZSArIDEpOwot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXM8SFRNTEJSRWxlbWVudD4o
Y29udGVudC5ub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBo
ID0gcG9zaXRpb25BZnRlck5vZGUoY29udGVudC5ub2RlLmdldCgpKTsKICAgICAgICAgICAgICAg
ICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgs
IGVuZE9mQ3VycmVudFBhcmFncmFwaCwgbnVsbHB0ciwgbnVsbFFOYW1lKCksIHN0ZDo6ZXhjaGFu
Z2UodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLCB7IH0pIH0pOwotICAgICAgICAgICAgICAgIHN0
YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLmNsZWFyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBzdGFydE9mQ3VycmVudExpbmUgPSBvZmZzZXRPZk5leHROZXdMaW5lICsgMTsKICAgICAgICAg
fQogCiAgICAgICAgIGF1dG8gcmVtYWluaW5nVGV4dCA9IGN1cnJlbnRUZXh0LnN1YnN0cmluZyhz
dGFydE9mQ3VycmVudExpbmUpOwotICAgICAgICBpZiAocmVtYWluaW5nVGV4dC5sZW5ndGgoKSkK
KyAgICAgICAgaWYgKCFjb250YWluc09ubHlIVE1MU3BhY2VzKHJlbWFpbmluZ1RleHQpKSB7Cisg
ICAgICAgICAgICBpZiAodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgICAgIGlmIChzdGFydE9mQ3VycmVudExpbmUgJiYgaXM8VGV4dD4oY29udGVudC5u
b2RlKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBQb3Np
dGlvbigmZG93bmNhc3Q8VGV4dD4oKmNvbnRlbnQubm9kZSksIHN0YXJ0T2ZDdXJyZW50TGluZSk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdGFydE9mQ3VycmVu
dFBhcmFncmFwaCA9IGl0ZXJhdG9yLnN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IGl0ZXJhdG9yLmVuZFBvc2l0aW9uKCk7
CiAgICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlv
blRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgcmVtYWluaW5nVGV4dC50b1N0
cmluZygpLCBleGNsdXNpb25SdWxlTWF0Y2hlci5pc0V4Y2x1ZGVkKGNvbnRlbnQubm9kZS5nZXQo
KSkgfSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIXRva2Vuc0luQ3VycmVudFBhcmFn
cmFwaC5pc0VtcHR5KCkpCi0gICAgICAgIGFkZEl0ZW0oTWFuaXB1bGF0aW9uSXRlbURhdGEgeyBz
dGFydE9mQ3VycmVudFBhcmFncmFwaCwgdmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLCBudWxs
cHRyLCBudWxsUU5hbWUoKSwgV1RGTW92ZSh0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGgpIH0pOwor
ICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgc3RhcnRPZkN1cnJlbnRQYXJh
Z3JhcGgsIGVuZE9mQ3VycmVudFBhcmFncmFwaCwgbnVsbHB0ciwgbnVsbFFOYW1lKCksIFdURk1v
dmUodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoKSB9KTsKIH0KIAogdm9pZCBUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcjo6ZGlkQ3JlYXRlUmVuZGVyZXJGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1l
bnQpCkBAIC01MTksNiArNTQ4LDEzIEBAIGF1dG8gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbURhdGEmIGl0ZW0sIGNvbnN0CiAgICAgICAg
ICAgICByZXR1cm4gTWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU6OkNvbnRlbnRDaGFuZ2VkOwogICAg
ICAgICB9CiAKKyAgICAgICAgaWYgKGNvbnRlbnQuaXNUZXh0Q29udGVudCAmJiBjb250YWluc09u
bHlIVE1MU3BhY2VzKGNvbnRlbnQudGV4dCkpIHsKKyAgICAgICAgICAgIC8vIDxicj4gc2hvdWxk
IG5vdCBleGlzdCBpbiB0aGUgbWlkZGxlIG9mIGEgcGFyYWdyYXBoLgorICAgICAgICAgICAgaWYg
KGlzPEhUTUxCUkVsZW1lbnQ+KGNvbnRlbnQubm9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpDb250ZW50Q2hhbmdlZDsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisKICAgICAgICAgYXV0byYgY3VycmVudFRva2VuID0gaXRlbS50
b2tlbnNbY3VycmVudFRva2VuSW5kZXhdOwogICAgICAgICBpZiAoIWNvbnRlbnQuaXNSZXBsYWNl
ZENvbnRlbnQgJiYgY29udGVudC50ZXh0ICE9IGN1cnJlbnRUb2tlbi5jb250ZW50KQogICAgICAg
ICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpDb250ZW50Q2hhbmdlZDsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4NTE1M2Iy
YjU2NTY5YzMyODliYzE1ODEwODE4NTEzNGNiNzdhNzkzLi5jNmQyYTlkMjM5ZGM0MjJmYTY0MThi
ODE1OTA4YmJjNGUzNTdlODU5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDQtMjIgIFNpaHVpIExpdSAgPHNp
aHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIg
c2hvdWxkIHNldCByYW5nZSBvZiBwYXJhZ3JhcGggdXNpbmcgdG9rZW4ncyBwb3NpdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDg2NgorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNjA2NDYyODM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1RleHRNYW5pcHVsYXRpb24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwog
MjAyMC0wNC0yMiAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBU
ZXh0TWFuaXB1bGF0aW9uLkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkF2b2lkQ3Jhc2hpbmdXaGVu
Q29udGVudElzUmVtb3ZlZCBkb2VzIG5vdCB3YWl0IGZvciByZXN1bHQKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5t
bQppbmRleCAzMzcxNmVjOTYwMTk5ZTIxODJiMjY2NTA2MDAxZDE0NjYyYWM2ZDBhLi45MmMwNzA0
YjM3NWU0YThhNWY3NDRmY2ZiYTdhZDEwMTgxN2FkNmVkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCkBA
IC05ODgsMjIgKzk4OCwxNCBAQCBURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1h
bmlwdWxhdGlvblNob3VsZFByZXNlcnZlT3JkZXJPZkJsb2NrSW1hZ2UpCiAgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIAogICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0
ZW1zXTsKLSAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJVTCk7Ci0gICAgRVhQRUNUX0VRKGl0
ZW1zWzBdLnRva2Vucy5jb3VudCwgMlVMKTsKLSAgICBFWFBFQ1RfU1RSRVEoIltdIiwgaXRlbXNb
MF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7Ci0gICAgRVhQRUNUX1RSVUUoaXRlbXNb
MF0udG9rZW5zWzBdLmlzRXhjbHVkZWQpOwotICAgIEVYUEVDVF9TVFJFUSgiW10iLCBpdGVtc1sw
XS50b2tlbnNbMV0uY29udGVudC5VVEY4U3RyaW5nKTsKLSAgICBFWFBFQ1RfVFJVRShpdGVtc1sw
XS50b2tlbnNbMV0uaXNFeGNsdWRlZCk7Ci0KLSAgICBhdXRvICp0b2tlbnMgPSBpdGVtc1sxXS50
b2tlbnM7Ci0gICAgRVhQRUNUX0VRKHRva2Vucy5jb3VudCwgMVVMKTsKLSAgICBFWFBFQ1RfU1RS
RVEoImhlbGxsbyB3b3JsZCIsIHRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOwotICAgIEVY
UEVDVF9GQUxTRSh0b2tlbnNbMF0uaXNFeGNsdWRlZCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNv
dW50LCAxVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDFVTCk7Cisg
ICAgRVhQRUNUX1NUUkVRKCJoZWxsbG8gd29ybGQiLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVu
dC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfVFJVRSghaXRlbXNbMF0udG9rZW5zWzBdLmlzRXhj
bHVkZWQpOwogCiAgICAgZG9uZSA9IGZhbHNlOwogICAgIFt3ZWJWaWV3IF9jb21wbGV0ZVRleHRN
YW5pcHVsYXRpb25Gb3JJdGVtczpAWwotICAgICAgICAoX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0g
KiljcmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIsIHsgeyBpdGVtc1swXS50b2tlbnNbMF0u
aWRlbnRpZmllciwgbmlsIH0gfSksCi0gICAgICAgIChfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAq
KWNyZWF0ZUl0ZW0oaXRlbXNbMV0uaWRlbnRpZmllciwgeyB7IGl0ZW1zWzFdLnRva2Vuc1swXS5p
ZGVudGlmaWVyLCBAImhlbGxvLCB3b3JsZCIgfSB9KSwKKyAgICAgICAgKF9XS1RleHRNYW5pcHVs
YXRpb25JdGVtICopY3JlYXRlSXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7IHsgaXRlbXNbMF0u
dG9rZW5zWzBdLmlkZW50aWZpZXIsIEAiaGVsbG8sIHdvcmxkIiB9IH0pLAogICAgIF0gY29tcGxl
dGlvbjpeKE5TQXJyYXk8TlNFcnJvciAqPiAqZXJyb3JzKSB7CiAgICAgICAgIEVYUEVDVF9FUShl
cnJvcnMsIG5pbCk7CiAgICAgICAgIGRvbmUgPSB0cnVlOwpAQCAtMTA3NiwxNiArMTA2OCwxMyBA
QCBURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvblNob3VsZFJl
cGxhY2VDb250ZW50Rm9sbG93ZWRBZnRlcgogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
ZG9uZSk7CiAKICAgICBhdXRvICppdGVtcyA9IFtkZWxlZ2F0ZSBpdGVtc107Ci0gICAgRVhQRUNU
X0VRKGl0ZW1zLmNvdW50LCAyVUwpOwotICAgIEVYUEVDVF9FUShpdGVtc1sxXS50b2tlbnMuY291
bnQsIDFVTCk7Ci0gICAgRVhQRUNUX1NUUkVRKCJbXSIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250
ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMVVMKTsKICAgICBF
WFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCAxVUwpOwotICAgIEVYUEVDVF9TVFJFUSgi
aGVsbG8gd29ybGQiLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAg
ICBFWFBFQ1RfU1RSRVEoImhlbGxvIHdvcmxkIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQu
VVRGOFN0cmluZyk7CiAKICAgICBkb25lID0gZmFsc2U7CiAgICAgW3dlYlZpZXcgX2NvbXBsZXRl
VGV4dE1hbmlwdWxhdGlvbkZvckl0ZW1zOkBbCi0gICAgICAgIChfV0tUZXh0TWFuaXB1bGF0aW9u
SXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeyB7IGl0ZW1zWzBdLnRva2Vu
c1swXS5pZGVudGlmaWVyLCBuaWwgfSB9KSwKLSAgICAgICAgKF9XS1RleHRNYW5pcHVsYXRpb25J
dGVtICopY3JlYXRlSXRlbShpdGVtc1sxXS5pZGVudGlmaWVyLCB7IHsgaXRlbXNbMV0udG9rZW5z
WzBdLmlkZW50aWZpZXIsIEAiaGVsbG8sIHdvcmxkIiB9IH0pLAorICAgICAgICAoX1dLVGV4dE1h
bmlwdWxhdGlvbkl0ZW0gKiljcmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIsIHsgeyBpdGVt
c1swXS50b2tlbnNbMF0uaWRlbnRpZmllciwgQCJoZWxsbywgd29ybGQiIH0gfSksCiAgICAgXSBj
b21wbGV0aW9uOl4oTlNBcnJheTxOU0Vycm9yICo+ICplcnJvcnMpIHsKICAgICAgICAgRVhQRUNU
X0VRKGVycm9ycywgbmlsKTsKICAgICAgICAgZG9uZSA9IHRydWU7CkBAIC0xMTYyLDE5ICsxMTUx
LDE2IEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uU2hv
dWxkUmVwbGFjZUNvbnRlbnRzQXJvdW5kUGFyYWdyCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lKTsKIAogICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKLSAgICBF
WFBFQ1RfRVEoaXRlbXMuY291bnQsIDNVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAy
VUwpOwogICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDFVTCk7CiAgICAgRVhQ
RUNUX1NUUkVRKCJoZWVleSIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcp
OwogICAgIEVYUEVDVF9FUShpdGVtc1sxXS50b2tlbnMuY291bnQsIDFVTCk7Ci0gICAgRVhQRUNU
X1NUUkVRKCJbXSIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOwotICAg
IEVYUEVDVF9FUShpdGVtc1syXS50b2tlbnMuY291bnQsIDFVTCk7Ci0gICAgRVhQRUNUX1NUUkVR
KCJ3b29ybGQiLCBpdGVtc1syXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBF
WFBFQ1RfU1RSRVEoIndvb3JsZCIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJp
bmcpOwogCiAgICAgZG9uZSA9IGZhbHNlOwogICAgIFt3ZWJWaWV3IF9jb21wbGV0ZVRleHRNYW5p
cHVsYXRpb25Gb3JJdGVtczpAWwogICAgICAgICAoX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilj
cmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIsIHsgeyBpdGVtc1swXS50b2tlbnNbMF0uaWRl
bnRpZmllciwgQCJoZWxsbyIgfSB9KSwKLSAgICAgICAgKF9XS1RleHRNYW5pcHVsYXRpb25JdGVt
ICopY3JlYXRlSXRlbShpdGVtc1sxXS5pZGVudGlmaWVyLCB7IHsgaXRlbXNbMV0udG9rZW5zWzBd
LmlkZW50aWZpZXIsIG5pbCB9IH0pLAotICAgICAgICAoX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0g
KiljcmVhdGVJdGVtKGl0ZW1zWzJdLmlkZW50aWZpZXIsIHsgeyBpdGVtc1syXS50b2tlbnNbMF0u
aWRlbnRpZmllciwgQCJ3b3JsZCIgfSB9KSwKKyAgICAgICAgKF9XS1RleHRNYW5pcHVsYXRpb25J
dGVtICopY3JlYXRlSXRlbShpdGVtc1sxXS5pZGVudGlmaWVyLCB7IHsgaXRlbXNbMV0udG9rZW5z
WzBdLmlkZW50aWZpZXIsIEAid29ybGQiIH0gfSksCiAgICAgXSBjb21wbGV0aW9uOl4oTlNBcnJh
eTxOU0Vycm9yICo+ICplcnJvcnMpIHsKICAgICAgICAgRVhQRUNUX0VRKGVycm9ycywgbmlsKTsK
ICAgICAgICAgZG9uZSA9IHRydWU7CkBAIC0xNjg0LDYgKzE2NzAsNDAgQEAgVEVTVChUZXh0TWFu
aXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25Eb2VzTm90Q3JlYXRlTW9yZVRleHRN
YW5pcHVsYXRpb24KICAgICBFWFBFQ1RfV0tfU1RSRVEoIjxwPmJhciA8c3Ryb25nPmdhcnBseTwv
c3Ryb25nPiBmb288L3A+IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
ImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MIl0pOwogfQogCitURVNUKFRleHRNYW5pcHVsYXRpb24s
IENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkNvcnJlY3RQYXJhZ3JhcGhSYW5nZSkKK3sKKyAgICBh
dXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10g
aW5pdF0pOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgW3dlYlZp
ZXcgX3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBb
d2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8aGVhZD48c3R5bGU+dWx7ZGlz
cGxheTpibG9ja31saXtkaXNwbGF5OmlubGluZS1ibG9ja30uaW5saW5lIHtmbG9hdDogbGVmdDt9
LnN1YmZyYW1lIHtoZWlnaHQ6IDQycHg7fS5mcmFtZSB7cG9zaXRpb246IGFic29sdXRlO3RvcDog
LTk5OTlweDt9PC9zdHlsZT48L2hlYWQ+PGJvZHk+PGRpdiBjbGFzcz0nZnJhbWUnPjxkaXYgY2xh
c3M9J3N1YmZyYW1lJz48L2Rpdj48L2Rpdj48c3R5bGU+PC9zdHlsZT48ZGl2IGNsYXNzPSdpbmxp
bmUnPjxkaXY+PGxpPjxhIGhyZWY9JyMnPmhvbGxlPC9hPjwvbGk+PGxpPjxhIGhyZWY9JyMnPndk
cmxvPC9hPjwvbGk+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0nZnJhbWUnPjxkaXYgY2xhc3M9J3N1
YmZyYW1lJz48L2Rpdj48L2Rpdj48L2JvZHk+Il07CisKKyAgICBSZXRhaW5QdHI8X1dLVGV4dE1h
bmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbX1dLVGV4
dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBkb25lID0gZmFs
c2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlv
bjpjb25maWd1cmF0aW9uLmdldCgpIGNvbXBsZXRpb246XnsKKyAgICAgICAgZG9uZSA9IHRydWU7
CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1
dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQs
IDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMlVMKTsKKyAgICBF
WFBFQ1RfU1RSRVEoImhvbGxlIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmlu
Zyk7CisgICAgRVhQRUNUX1NUUkVRKCJ3ZHJsbyIsIGl0ZW1zWzBdLnRva2Vuc1sxXS5jb250ZW50
LlVURjhTdHJpbmcpOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9jb21wbGV0
ZVRleHRNYW5pcHVsYXRpb25Gb3JJdGVtczpAWyhfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNy
ZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeworICAgICAgICB7IGl0ZW1zWzBdLnRva2Vu
c1swXS5pZGVudGlmaWVyLCBAImhlbGxvIiB9LAorICAgICAgICB7IGl0ZW1zWzBdLnRva2Vuc1sx
XS5pZGVudGlmaWVyLCBAIndvcmxkIiB9LAorICAgIH0pXSBjb21wbGV0aW9uOl4oTlNBcnJheTxO
U0Vycm9yICo+ICplcnJvcnMpIHsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9ycywgbmlsKTsKKyAg
ICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lKTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgiPGRpdiBjbGFzcz1cImZyYW1lXCI+PGRp
diBjbGFzcz1cInN1YmZyYW1lXCI+PC9kaXY+PC9kaXY+PHN0eWxlPjwvc3R5bGU+PGRpdiBjbGFz
cz1cImlubGluZVwiPjxkaXY+PGxpPjxhIGhyZWY9XCIjXCI+aGVsbG88L2E+PC9saT48bGk+PGEg
aHJlZj1cIiNcIj53b3JsZDwvYT48L2xpPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9XCJmcmFtZVwi
PjxkaXYgY2xhc3M9XCJzdWJmcmFtZVwiPjwvZGl2PjwvZGl2PiIsIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCJdKTsKK30KKwog
VEVTVChUZXh0TWFuaXB1bGF0aW9uLCBJbnNlcnRpbmdDb250ZW50SW50b0FscmVhZHlNYW5pcHVs
YXRlZENvbnRlbnREb2VzTm90Q3JlYXRlVGV4dE1hbmlwdWxhdGlvbkl0ZW0pCiB7CiAgICAgYXV0
byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGlu
aXRdKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397352</attachid>
            <date>2020-04-23 09:58:03 -0700</date>
            <delta_ts>2020-04-23 10:24:01 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-210866-20200423095802.patch</filename>
            <type>text/plain</type>
            <size>17110</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjkyNTUzNjAwNWYyNTc0
MTVhY2U4NjdhMWNiZGE4MDhlMjgzMTA4Mi4uODNiZWE0MmYzMzIzODg4ZjM3MTFmZDkwOTk2YzZh
YWNmYjEzNjIwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDIwLTA0LTIyICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyIHNob3VsZCBzZXQgcmFuZ2Ugb2YgcGFyYWdyYXBoIHVzaW5nIHRva2VuJ3MgcG9z
aXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTA4NjYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYwNjQ2MjgzPgorCisgICAgICAgIFJldmll
d2VkIGJ5IFdlbnNvbiBIc2llaC4KKworICAgICAgICBTZXQgdGhlIHJhbmdlIG9mIHBhcmFncmFw
aCB1c2luZyBwb3NpdGlvbnMgb2YgZmlyc3QgdG9rZW4gYW5kIGxhc3QgdG9rZW4gaW4gdGhlIHBh
cmFncmFwaCBiZWNhdXNlOgorICAgICAgICAxLiBBY2N1cmF0ZSByYW5nZSBtYWtlcyB0b2tlbiBt
YXRjaGluZyBpbiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZSgpIGVhc2llciwg
YXMgVGV4dEl0ZXJhdG9yIGNvdWxkIAorICAgICAgICB2aXNpdCBkaWZmZXJlbnQgcG9zaXRpb25z
IHdpdGggZGlmZmVyZW50IHJhbmdlcyBvciBkaWZmZXJlbnQgY29uZGl0aW9ucy4gRm9yIGV4YW1w
bGUsIGluIG91ciBwcmV2aW91cyAKKyAgICAgICAgaW1wbGVtZW50YXRpb24sIHN0YXJ0IG9mIGEg
cGFyYWdyYXBoIGNhbiBiZSBzZXQgYXMgdGhlIGZpcnN0IHZpc2libGUgcG9zaXRpb24gb2YgZG9j
dW1lbnQsIHdoaWxlIHBvc2l0aW9uIG9mIAorICAgICAgICBmaXJzdCB0b2tlbiBpcyBhZnRlciB0
aGF0LiBUaGVuIGluIHJlcGxhY2UoKSwgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgbWF5IGV4
dHJhY3QgYSB3b3JkIGJlZm9yZSB0aGUgcG9zaXRpb24gCisgICAgICAgIG9mIGZpcnN0IHRva2Vu
IGFuZCByZXR1cm4gZXJyb3IuIFNlZSBhZGRlZCB0ZXN0IFRleHRNYW5pcHVsYXRpb24uQ29tcGxl
dGVUZXh0TWFuaXB1bGF0aW9uQ29ycmVjdFBhcmFncmFwaFJhbmdlLgorICAgICAgICAyLiBUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlciBjYW4gaGFuZGxlIGZld2VyIGNvbnRlbnQgYW5kIHRoaXMg
aXMgbGVzcyBlcnJvci1wcm9uZS4gRm9yIGV4YW1wbGUsIHN2ZyBlbGVtZW50cyAKKyAgICAgICAg
YmVmb3JlL2FmdGVyIHRoZSBwYXJhZ3JhcGggdGV4dCB3aWxsIG5vdCBiZSBpZGVudGlmaWVkIGFz
IHRva2VucyBbXSBpbiBhIHBhcmFncmFwaCBub3cuIFNlZSB1cGRhdGVkIEFQSSB0ZXN0cyAKKyAg
ICAgICAgZm9yIGV4YW1wbGUuCisKKyAgICAgICAgTmV3IHRlc3Q6IFRleHRNYW5pcHVsYXRpb24u
Q29tcGxldGVUZXh0TWFuaXB1bGF0aW9uQ29ycmVjdFBhcmFncmFwaFJhbmdlCisKKyAgICAgICAg
KiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhcmFncmFwaENvbnRlbnRJdGVyYXRvcjo6bW92ZUN1cnJlbnROb2RlRm9yd2FyZCk6IG1f
Y3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29udGVudCBzaG91bGQgbm90IAorICAgICAg
ICBiZSBhZHZhbmNlZCBpZiBpdCBpcyBhbHJlYWR5IGF0IHRoZSBlbmQuCisgICAgICAgIChXZWJD
b3JlOjpjb250YWluc09ubHlIVE1MU3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyk6U2V0IHRoZSBwYXJhZ3JhcGgg
c3RhcnQgYXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCAKKyAgICAgICAgdG9rZW4gYW5kIGVu
ZCBhcyB0aGUgcG9zaXRpb24gb2YgbGFzdCB0b2tlbi4gSWYgdGhlIHBhcmFncmFwaCBpcyBzcGxp
dCB3aXRoIDxicj4sIHRoZSBlbmQgd2lsbCBiZSBleHRlbmRlZCB0byAKKyAgICAgICAgcG9zaXRp
b24gb2YgPGJyPiBzbyB0aGF0IHdlIGNhbiBhZGQgdGhpcyBub2RlIGJhY2sgbGF0ZXI7IG90aGVy
d2lzZSwgPGJyPiBjYW4gYmUgcmVtb3ZlZCBhZnRlciBvcmlnaW5hbCAKKyAgICAgICAgdGV4dCBv
ZiBwYXJhZ3JhcGggaXMgcmVtb3ZlZCBpbiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVw
bGFjZSgpLiBBbHNvLCBzdG9wIGlkZW50aWZ5aW5nIHNwYWNlcyBhcyB0b2tlbnMgCisgICAgICAg
IGJlY2F1c2Ugbm9uLXRleHQgTm9kZSBjYW4gZW1pdCBzcGFjZXMuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZSk6IE9ubHkgaWRlbnRpZnkgdG9r
ZW5zIGZyb20gY29udGVudCB3aXRoIG1lYW5pbmdmdWwgdGV4dC4KKwogMjAyMC0wNC0yMiAgRXJp
YyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBmYXN0L2V2ZW50
cy9ldmVudC1oYW5kbGVyLWRldGFjaGVkLWRvY3VtZW50LWRpc3BhdGNoRXZlbnQuaHRtbCBpcyBj
cmFzaGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyLmNwcAppbmRleCAzMGJkN2ZiYWRhNjE1YmM4YTZkN2Q1ZmUxMTliZTViNjZh
YTdmYTUxLi44MDBkMTQ0NGY5NDlmOWVjODgwNWY1OWQyZTM4NDRkM2MzOTM3YjkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
LmNwcApAQCAtMzAsOCArMzAsMTAgQEAKICNpbmNsdWRlICJFZGl0aW5nLmgiCiAjaW5jbHVkZSAi
RWxlbWVudEFuY2VzdG9ySXRlcmF0b3IuaCIKICNpbmNsdWRlICJFdmVudExvb3AuaCIKKyNpbmNs
dWRlICJIVE1MQlJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAi
Tm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKICNpbmNsdWRlICJS
YW5nZS5oIgpAQCAtMjA3LDYgKzIwOSw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBt
b3ZlQ3VycmVudE5vZGVGb3J3YXJkKCkKICAgICB7CisgICAgICAgIGlmIChtX2N1cnJlbnROb2Rl
Rm9yRmluZGluZ0ludmlzaWJsZUNvbnRlbnQgPT0gbV9wYXN0RW5kTm9kZSkKKyAgICAgICAgICAg
IHJldHVybjsKKwogICAgICAgICBtX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJsZUNvbnRl
bnQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCptX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJs
ZUNvbnRlbnQpOwogICAgICAgICBpZiAoIW1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxl
Q29udGVudCkKICAgICAgICAgICAgIG1fY3VycmVudE5vZGVGb3JGaW5kaW5nSW52aXNpYmxlQ29u
dGVudCA9IG1fcGFzdEVuZE5vZGU7CkBAIC0yNDIsNiArMjQ3LDE2IEBAIHN0YXRpYyBib29sIGNh
blBlcmZvcm1UZXh0TWFuaXB1bGF0aW9uQnlSZXBsYWNpbmdFbnRpcmVUZXh0Q29udGVudChjb25z
dCBFbGVtZW50CiAgICAgcmV0dXJuIGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnRpdGxl
VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb25UYWcpOwogfQogCitz
dGF0aWMgYm9vbCBjb250YWluc09ubHlIVE1MU3BhY2VzKFN0cmluZ1ZpZXcgdGV4dCkKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCB0ZXh0Lmxlbmd0aCgpOyArK2luZGV4
KSB7CisgICAgICAgIGlmIChpc05vdEhUTUxTcGFjZSh0ZXh0W2luZGV4XSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9u
JiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKIHsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkg
fHwgZW5kLmlzTnVsbCgpKQpAQCAtMjU3LDcgKzI3Miw4IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29u
c3QKIAogICAgIEV4Y2x1c2lvblJ1bGVNYXRjaGVyIGV4Y2x1c2lvblJ1bGVNYXRjaGVyKG1fZXhj
bHVzaW9uUnVsZXMpOwogICAgIFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zSW5DdXJy
ZW50UGFyYWdyYXBoOwotICAgIFBvc2l0aW9uIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gdmlz
aWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCk7CisgICAgUG9zaXRpb24gc3RhcnRPZkN1cnJlbnRQ
YXJhZ3JhcGg7CisgICAgUG9zaXRpb24gZW5kT2ZDdXJyZW50UGFyYWdyYXBoOwogICAgIGZvciAo
OyAhaXRlcmF0b3IuYXRFbmQoKTsgaXRlcmF0b3IuYWR2YW5jZSgpKSB7CiAgICAgICAgIGF1dG8g
Y29udGVudCA9IGl0ZXJhdG9yLmN1cnJlbnRDb250ZW50KCk7CiAgICAgICAgIGlmIChjb250ZW50
Lm5vZGUpIHsKQEAgLTI4MSwxNSArMjk3LDIwIEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLmlzTnVsbCgpICYmIGNvbnRl
bnQuaXNUZXh0Q29udGVudCkKLSAgICAgICAgICAgICAgICBzdGFydE9mQ3VycmVudFBhcmFncmFw
aCA9IGl0ZXJhdG9yLnN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChj
b250ZW50LmlzUmVwbGFjZWRDb250ZW50KSB7Ci0gICAgICAgICAgICBpZiAoc3RhcnRPZkN1cnJl
bnRQYXJhZ3JhcGguaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJh
Z3JhcGggPSBwb3NpdGlvbkJlZm9yZU5vZGUoY29udGVudC5ub2RlLmdldCgpKTsKLSAgICAgICAg
ICAgIHRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5hcHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBt
X3Rva2VuSWRlbnRpZmllci5nZW5lcmF0ZSgpLCAiW10iLCB0cnVlIC8qIGlzRXhjbHVkZWQgKi99
KTsKKyAgICAgICAgICAgIGlmICh0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBhdXRvIGN1cnJlbnRFbmRP
ZkN1cnJlbnRQYXJhZ3JhcGggPSBwb3NpdGlvbkFmdGVyTm9kZShjb250ZW50Lm5vZGUuZ2V0KCkp
OworICAgICAgICAgICAgLy8gVGhpcyBpcyBhdCB0aGUgc2FtZSBOb2RlIGFzIGxhc3QgdG9rZW4s
IHNvIGl0IGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gY3VycmVudCByYW5nZS4KKyAgICAgICAgICAg
IGlmICghaXM8VGV4dD4oY29udGVudC5ub2RlKSAmJiBjdXJyZW50RW5kT2ZDdXJyZW50UGFyYWdy
YXBoLmVxdWFscyhlbmRPZkN1cnJlbnRQYXJhZ3JhcGgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICBlbmRPZkN1cnJlbnRQYXJhZ3JhcGggPSBjdXJyZW50RW5kT2ZD
dXJyZW50UGFyYWdyYXBoOworICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFw
cGVuZChNYW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksICJb
XSIsIHRydWUgfSk7CisKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTMw
MCwzMSArMzIxLDM5IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Om9ic2VydmVQ
YXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QKICAgICAgICAgc2l6ZV90IG9m
ZnNldE9mTmV4dE5ld0xpbmUgPSAwOwogICAgICAgICBTdHJpbmdWaWV3IGN1cnJlbnRUZXh0ID0g
Y29udGVudC50ZXh0OwogICAgICAgICB3aGlsZSAoKG9mZnNldE9mTmV4dE5ld0xpbmUgPSBjdXJy
ZW50VGV4dC5maW5kKCdcbicsIHN0YXJ0T2ZDdXJyZW50TGluZSkpICE9IG5vdEZvdW5kKSB7Ci0g
ICAgICAgICAgICBpZiAoc3RhcnRPZkN1cnJlbnRMaW5lIDwgb2Zmc2V0T2ZOZXh0TmV3TGluZSkg
eworICAgICAgICAgICAgaWYgKGlzPFRleHQ+KGNvbnRlbnQubm9kZSkgJiYgc3RhcnRPZkN1cnJl
bnRMaW5lIDwgb2Zmc2V0T2ZOZXh0TmV3TGluZSkgewogICAgICAgICAgICAgICAgIGF1dG8gc3Ry
aW5nVW50aWxFbmRPZkxpbmUgPSBjdXJyZW50VGV4dC5zdWJzdHJpbmcoc3RhcnRPZkN1cnJlbnRM
aW5lLCBvZmZzZXRPZk5leHROZXdMaW5lIC0gc3RhcnRPZkN1cnJlbnRMaW5lKS50b1N0cmluZygp
OworICAgICAgICAgICAgICAgIGF1dG8mIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKmNvbnRl
bnQubm9kZSk7CisgICAgICAgICAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gUG9zaXRp
b24oJnRleHROb2RlLCBvZmZzZXRPZk5leHROZXdMaW5lKTsKKyAgICAgICAgICAgICAgICBpZiAo
dG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAg
c3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBQb3NpdGlvbigmdGV4dE5vZGUsIHN0YXJ0T2ZDdXJy
ZW50TGluZSk7CisKICAgICAgICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBw
ZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgc3Ry
aW5nVW50aWxFbmRPZkxpbmUsIGV4Y2x1c2lvblJ1bGVNYXRjaGVyLmlzRXhjbHVkZWQoY29udGVu
dC5ub2RlLmdldCgpKSB9KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCF0b2tl
bnNJbkN1cnJlbnRQYXJhZ3JhcGguaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgUG9zaXRp
b24gZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gaXRlcmF0b3IuZW5kUG9zaXRpb24oKTsKLSAgICAg
ICAgICAgICAgICBpZiAoaXM8VGV4dD4oY29udGVudC5ub2RlKSkgewotICAgICAgICAgICAgICAg
ICAgICBhdXRvJiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCpjb250ZW50Lm5vZGUpOwotICAg
ICAgICAgICAgICAgICAgICBlbmRPZkN1cnJlbnRQYXJhZ3JhcGggPSBQb3NpdGlvbigmdGV4dE5v
ZGUsIG9mZnNldE9mTmV4dE5ld0xpbmUpOwotICAgICAgICAgICAgICAgICAgICBzdGFydE9mQ3Vy
cmVudFBhcmFncmFwaCA9IFBvc2l0aW9uKCZ0ZXh0Tm9kZSwgb2Zmc2V0T2ZOZXh0TmV3TGluZSAr
IDEpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXM8SFRNTEJSRWxl
bWVudD4oY29udGVudC5ub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgZW5kT2ZDdXJyZW50UGFy
YWdyYXBoID0gcG9zaXRpb25BZnRlck5vZGUoY29udGVudC5ub2RlLmdldCgpKTsKICAgICAgICAg
ICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgc3RhcnRPZkN1cnJlbnRQYXJh
Z3JhcGgsIGVuZE9mQ3VycmVudFBhcmFncmFwaCwgbnVsbHB0ciwgbnVsbFFOYW1lKCksIHN0ZDo6
ZXhjaGFuZ2UodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLCB7IH0pIH0pOwotICAgICAgICAgICAg
ICAgIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLmNsZWFyKCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBzdGFydE9mQ3VycmVudExpbmUgPSBvZmZzZXRPZk5leHROZXdMaW5lICsgMTsKICAg
ICAgICAgfQogCiAgICAgICAgIGF1dG8gcmVtYWluaW5nVGV4dCA9IGN1cnJlbnRUZXh0LnN1YnN0
cmluZyhzdGFydE9mQ3VycmVudExpbmUpOwotICAgICAgICBpZiAocmVtYWluaW5nVGV4dC5sZW5n
dGgoKSkKKyAgICAgICAgaWYgKCFjb250YWluc09ubHlIVE1MU3BhY2VzKHJlbWFpbmluZ1RleHQp
KSB7CisgICAgICAgICAgICBpZiAodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgIGlmIChzdGFydE9mQ3VycmVudExpbmUgJiYgaXM8VGV4dD4oY29u
dGVudC5ub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgg
PSBQb3NpdGlvbigmZG93bmNhc3Q8VGV4dD4oKmNvbnRlbnQubm9kZSksIHN0YXJ0T2ZDdXJyZW50
TGluZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdGFydE9m
Q3VycmVudFBhcmFncmFwaCA9IGl0ZXJhdG9yLnN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IGl0ZXJhdG9yLmVuZFBvc2l0
aW9uKCk7CiAgICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlw
dWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgcmVtYWluaW5nVGV4
dC50b1N0cmluZygpLCBleGNsdXNpb25SdWxlTWF0Y2hlci5pc0V4Y2x1ZGVkKGNvbnRlbnQubm9k
ZS5nZXQoKSkgfSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIXRva2Vuc0luQ3VycmVu
dFBhcmFncmFwaC5pc0VtcHR5KCkpCi0gICAgICAgIGFkZEl0ZW0oTWFuaXB1bGF0aW9uSXRlbURh
dGEgeyBzdGFydE9mQ3VycmVudFBhcmFncmFwaCwgdmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgp
LCBudWxscHRyLCBudWxsUU5hbWUoKSwgV1RGTW92ZSh0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGgp
IH0pOworICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgc3RhcnRPZkN1cnJl
bnRQYXJhZ3JhcGgsIGVuZE9mQ3VycmVudFBhcmFncmFwaCwgbnVsbHB0ciwgbnVsbFFOYW1lKCks
IFdURk1vdmUodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoKSB9KTsKIH0KIAogdm9pZCBUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlcjo6ZGlkQ3JlYXRlUmVuZGVyZXJGb3JFbGVtZW50KEVsZW1lbnQm
IGVsZW1lbnQpCkBAIC01MTksNiArNTQ4LDEzIEBAIGF1dG8gVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbURhdGEmIGl0ZW0sIGNvbnN0CiAg
ICAgICAgICAgICByZXR1cm4gTWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU6OkNvbnRlbnRDaGFuZ2Vk
OwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKGNvbnRlbnQuaXNUZXh0Q29udGVudCAmJiBjb250
YWluc09ubHlIVE1MU3BhY2VzKGNvbnRlbnQudGV4dCkpIHsKKyAgICAgICAgICAgIC8vIDxicj4g
c2hvdWxkIG5vdCBleGlzdCBpbiB0aGUgbWlkZGxlIG9mIGEgcGFyYWdyYXBoLgorICAgICAgICAg
ICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KGNvbnRlbnQubm9kZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpDb250ZW50Q2hhbmdlZDsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKICAgICAgICAgYXV0byYgY3VycmVudFRva2VuID0g
aXRlbS50b2tlbnNbY3VycmVudFRva2VuSW5kZXhdOwogICAgICAgICBpZiAoIWNvbnRlbnQuaXNS
ZXBsYWNlZENvbnRlbnQgJiYgY29udGVudC50ZXh0ICE9IGN1cnJlbnRUb2tlbi5jb250ZW50KQog
ICAgICAgICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpDb250ZW50Q2hhbmdl
ZDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4
NTE1M2IyYjU2NTY5YzMyODliYzE1ODEwODE4NTEzNGNiNzdhNzkzLi5mMWI2ODNhMDIwMzM2OGY5
NTQ0ZDQ4ZWJjMjQyZTg3MGFiYTM1YWU0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDQtMjIgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIgc2hvdWxkIHNldCByYW5nZSBvZiBwYXJhZ3JhcGggdXNpbmcgdG9rZW4ncyBwb3NpdGlv
bnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDg2
NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjA2NDYyODM+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgV2Vuc29uIEhzaWVoLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6
CisKIDIwMjAtMDQtMjIgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CiAKICAgICAg
ICAgVGV4dE1hbmlwdWxhdGlvbi5Db21wbGV0ZVRleHRNYW5pcHVsYXRpb25Bdm9pZENyYXNoaW5n
V2hlbkNvbnRlbnRJc1JlbW92ZWQgZG9lcyBub3Qgd2FpdCBmb3IgcmVzdWx0CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24u
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRp
b24ubW0KaW5kZXggMzM3MTZlYzk2MDE5OWUyMTgyYjI2NjUwNjAwMWQxNDY2MmFjNmQwYS4uOTJj
MDcwNGIzNzVlNGE4YTVmNzQ0ZmNmYmE3YWQxMDE4MTdhZDZlZCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5t
bQpAQCAtOTg4LDIyICs5ODgsMTQgQEAgVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRl
eHRNYW5pcHVsYXRpb25TaG91bGRQcmVzZXJ2ZU9yZGVyT2ZCbG9ja0ltYWdlKQogICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAKICAgICBhdXRvICppdGVtcyA9IFtkZWxlZ2F0
ZSBpdGVtc107Ci0gICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAyVUwpOwotICAgIEVYUEVDVF9F
UShpdGVtc1swXS50b2tlbnMuY291bnQsIDJVTCk7Ci0gICAgRVhQRUNUX1NUUkVRKCJbXSIsIGl0
ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOwotICAgIEVYUEVDVF9UUlVFKGl0
ZW1zWzBdLnRva2Vuc1swXS5pc0V4Y2x1ZGVkKTsKLSAgICBFWFBFQ1RfU1RSRVEoIltdIiwgaXRl
bXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7Ci0gICAgRVhQRUNUX1RSVUUoaXRl
bXNbMF0udG9rZW5zWzFdLmlzRXhjbHVkZWQpOwotCi0gICAgYXV0byAqdG9rZW5zID0gaXRlbXNb
MV0udG9rZW5zOwotICAgIEVYUEVDVF9FUSh0b2tlbnMuY291bnQsIDFVTCk7Ci0gICAgRVhQRUNU
X1NUUkVRKCJoZWxsbG8gd29ybGQiLCB0b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKLSAg
ICBFWFBFQ1RfRkFMU0UodG9rZW5zWzBdLmlzRXhjbHVkZWQpOworICAgIEVYUEVDVF9FUShpdGVt
cy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCAxVUwp
OworICAgIEVYUEVDVF9TVFJFUSgiaGVsbGxvIHdvcmxkIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNv
bnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1RSVUUoIWl0ZW1zWzBdLnRva2Vuc1swXS5p
c0V4Y2x1ZGVkKTsKIAogICAgIGRvbmUgPSBmYWxzZTsKICAgICBbd2ViVmlldyBfY29tcGxldGVU
ZXh0TWFuaXB1bGF0aW9uRm9ySXRlbXM6QFsKLSAgICAgICAgKF9XS1RleHRNYW5pcHVsYXRpb25J
dGVtICopY3JlYXRlSXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7IHsgaXRlbXNbMF0udG9rZW5z
WzBdLmlkZW50aWZpZXIsIG5pbCB9IH0pLAotICAgICAgICAoX1dLVGV4dE1hbmlwdWxhdGlvbkl0
ZW0gKiljcmVhdGVJdGVtKGl0ZW1zWzFdLmlkZW50aWZpZXIsIHsgeyBpdGVtc1sxXS50b2tlbnNb
MF0uaWRlbnRpZmllciwgQCJoZWxsbywgd29ybGQiIH0gfSksCisgICAgICAgIChfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeyB7IGl0ZW1z
WzBdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAImhlbGxvLCB3b3JsZCIgfSB9KSwKICAgICBdIGNv
bXBsZXRpb246XihOU0FycmF5PE5TRXJyb3IgKj4gKmVycm9ycykgewogICAgICAgICBFWFBFQ1Rf
RVEoZXJyb3JzLCBuaWwpOwogICAgICAgICBkb25lID0gdHJ1ZTsKQEAgLTEwNzYsMTYgKzEwNjgs
MTMgQEAgVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25TaG91
bGRSZXBsYWNlQ29udGVudEZvbGxvd2VkQWZ0ZXIKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOwogCiAgICAgYXV0byAqaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNdOwotICAgIEVY
UEVDVF9FUShpdGVtcy5jb3VudCwgMlVMKTsKLSAgICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5z
LmNvdW50LCAxVUwpOwotICAgIEVYUEVDVF9TVFJFUSgiW10iLCBpdGVtc1swXS50b2tlbnNbMF0u
Y29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDFVTCk7CiAg
ICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMVVMKTsKLSAgICBFWFBFQ1RfU1RS
RVEoImhlbGxvIHdvcmxkIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7
CisgICAgRVhQRUNUX1NUUkVRKCJoZWxsbyB3b3JsZCIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250
ZW50LlVURjhTdHJpbmcpOwogCiAgICAgZG9uZSA9IGZhbHNlOwogICAgIFt3ZWJWaWV3IF9jb21w
bGV0ZVRleHRNYW5pcHVsYXRpb25Gb3JJdGVtczpAWwotICAgICAgICAoX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0gKiljcmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIsIHsgeyBpdGVtc1swXS50
b2tlbnNbMF0uaWRlbnRpZmllciwgbmlsIH0gfSksCi0gICAgICAgIChfV0tUZXh0TWFuaXB1bGF0
aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMV0uaWRlbnRpZmllciwgeyB7IGl0ZW1zWzFdLnRv
a2Vuc1swXS5pZGVudGlmaWVyLCBAImhlbGxvLCB3b3JsZCIgfSB9KSwKKyAgICAgICAgKF9XS1Rl
eHRNYW5pcHVsYXRpb25JdGVtICopY3JlYXRlSXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7IHsg
aXRlbXNbMF0udG9rZW5zWzBdLmlkZW50aWZpZXIsIEAiaGVsbG8sIHdvcmxkIiB9IH0pLAogICAg
IF0gY29tcGxldGlvbjpeKE5TQXJyYXk8TlNFcnJvciAqPiAqZXJyb3JzKSB7CiAgICAgICAgIEVY
UEVDVF9FUShlcnJvcnMsIG5pbCk7CiAgICAgICAgIGRvbmUgPSB0cnVlOwpAQCAtMTE2MiwxOSAr
MTE1MSwxNiBAQCBURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlv
blNob3VsZFJlcGxhY2VDb250ZW50c0Fyb3VuZFBhcmFncgogICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmZG9uZSk7CiAKICAgICBhdXRvICppdGVtcyA9IFtkZWxlZ2F0ZSBpdGVtc107Ci0g
ICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAzVUwpOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3Vu
dCwgMlVMKTsKICAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCAxVUwpOwogICAg
IEVYUEVDVF9TVFJFUSgiaGVlZXkiLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3Ry
aW5nKTsKICAgICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCAxVUwpOwotICAgIEVY
UEVDVF9TVFJFUSgiW10iLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsK
LSAgICBFWFBFQ1RfRVEoaXRlbXNbMl0udG9rZW5zLmNvdW50LCAxVUwpOwotICAgIEVYUEVDVF9T
VFJFUSgid29vcmxkIiwgaXRlbXNbMl0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7Cisg
ICAgRVhQRUNUX1NUUkVRKCJ3b29ybGQiLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4
U3RyaW5nKTsKIAogICAgIGRvbmUgPSBmYWxzZTsKICAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0
TWFuaXB1bGF0aW9uRm9ySXRlbXM6QFsKICAgICAgICAgKF9XS1RleHRNYW5pcHVsYXRpb25JdGVt
ICopY3JlYXRlSXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7IHsgaXRlbXNbMF0udG9rZW5zWzBd
LmlkZW50aWZpZXIsIEAiaGVsbG8iIH0gfSksCi0gICAgICAgIChfV0tUZXh0TWFuaXB1bGF0aW9u
SXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMV0uaWRlbnRpZmllciwgeyB7IGl0ZW1zWzFdLnRva2Vu
c1swXS5pZGVudGlmaWVyLCBuaWwgfSB9KSwKLSAgICAgICAgKF9XS1RleHRNYW5pcHVsYXRpb25J
dGVtICopY3JlYXRlSXRlbShpdGVtc1syXS5pZGVudGlmaWVyLCB7IHsgaXRlbXNbMl0udG9rZW5z
WzBdLmlkZW50aWZpZXIsIEAid29ybGQiIH0gfSksCisgICAgICAgIChfV0tUZXh0TWFuaXB1bGF0
aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMV0uaWRlbnRpZmllciwgeyB7IGl0ZW1zWzFdLnRv
a2Vuc1swXS5pZGVudGlmaWVyLCBAIndvcmxkIiB9IH0pLAogICAgIF0gY29tcGxldGlvbjpeKE5T
QXJyYXk8TlNFcnJvciAqPiAqZXJyb3JzKSB7CiAgICAgICAgIEVYUEVDVF9FUShlcnJvcnMsIG5p
bCk7CiAgICAgICAgIGRvbmUgPSB0cnVlOwpAQCAtMTY4NCw2ICsxNjcwLDQwIEBAIFRFU1QoVGV4
dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uRG9lc05vdENyZWF0ZU1vcmVU
ZXh0TWFuaXB1bGF0aW9uCiAgICAgRVhQRUNUX1dLX1NUUkVRKCI8cD5iYXIgPHN0cm9uZz5nYXJw
bHk8L3N0cm9uZz4gZm9vPC9wPiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCJdKTsKIH0KIAorVEVTVChUZXh0TWFuaXB1bGF0
aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25Db3JyZWN0UGFyYWdyYXBoUmFuZ2UpCit7Cisg
ICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxs
b2NdIGluaXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3
ZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisg
ICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPGhlYWQ+PHN0eWxlPnVs
e2Rpc3BsYXk6YmxvY2t9bGl7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmlubGluZSB7ZmxvYXQ6IGxl
ZnQ7fS5zdWJmcmFtZSB7aGVpZ2h0OiA0MnB4O30uZnJhbWUge3Bvc2l0aW9uOiBhYnNvbHV0ZTt0
b3A6IC05OTk5cHg7fTwvc3R5bGU+PC9oZWFkPjxib2R5PjxkaXYgY2xhc3M9J2ZyYW1lJz48ZGl2
IGNsYXNzPSdzdWJmcmFtZSc+PC9kaXY+PC9kaXY+PHN0eWxlPjwvc3R5bGU+PGRpdiBjbGFzcz0n
aW5saW5lJz48ZGl2PjxsaT48YSBocmVmPScjJz5ob2xsZTwvYT48L2xpPjxsaT48YSBocmVmPScj
Jz53ZHJsbzwvYT48L2xpPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9J2ZyYW1lJz48ZGl2IGNsYXNz
PSdzdWJmcmFtZSc+PC9kaXY+PC9kaXY+PC9ib2R5PiJdOworCisgICAgUmV0YWluUHRyPF9XS1Rl
eHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW19X
S1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgZG9uZSA9
IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3Vy
YXRpb246Y29uZmlndXJhdGlvbi5nZXQoKSBjb21wbGV0aW9uOl57CisgICAgICAgIGRvbmUgPSB0
cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAg
ICBhdXRvICppdGVtcyA9IFtkZWxlZ2F0ZSBpdGVtc107CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNv
dW50LCAxVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDJVTCk7Cisg
ICAgRVhQRUNUX1NUUkVRKCJob2xsZSIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhT
dHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgid2RybG8iLCBpdGVtc1swXS50b2tlbnNbMV0uY29u
dGVudC5VVEY4U3RyaW5nKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29t
cGxldGVUZXh0TWFuaXB1bGF0aW9uRm9ySXRlbXM6QFsoX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0g
KiljcmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIsIHsKKyAgICAgICAgeyBpdGVtc1swXS50
b2tlbnNbMF0uaWRlbnRpZmllciwgQCJoZWxsbyIgfSwKKyAgICAgICAgeyBpdGVtc1swXS50b2tl
bnNbMV0uaWRlbnRpZmllciwgQCJ3b3JsZCIgfSwKKyAgICB9KV0gY29tcGxldGlvbjpeKE5TQXJy
YXk8TlNFcnJvciAqPiAqZXJyb3JzKSB7CisgICAgICAgIEVYUEVDVF9FUShlcnJvcnMsIG5pbCk7
CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZSk7CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIjxkaXYgY2xhc3M9XCJmcmFtZVwi
PjxkaXYgY2xhc3M9XCJzdWJmcmFtZVwiPjwvZGl2PjwvZGl2PjxzdHlsZT48L3N0eWxlPjxkaXYg
Y2xhc3M9XCJpbmxpbmVcIj48ZGl2PjxsaT48YSBocmVmPVwiI1wiPmhlbGxvPC9hPjwvbGk+PGxp
PjxhIGhyZWY9XCIjXCI+d29ybGQ8L2E+PC9saT48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPVwiZnJh
bWVcIj48ZGl2IGNsYXNzPVwic3ViZnJhbWVcIj48L2Rpdj48L2Rpdj4iLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7Cit9
CisKIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgSW5zZXJ0aW5nQ29udGVudEludG9BbHJlYWR5TWFu
aXB1bGF0ZWRDb250ZW50RG9lc05vdENyZWF0ZVRleHRNYW5pcHVsYXRpb25JdGVtKQogewogICAg
IGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9j
XSBpbml0XSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>