<?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>57794</bug_id>
          
          <creation_ts>2011-04-04 14:56:13 -0700</creation_ts>
          <short_desc>REGRESSION (r64712): Microsoft Outlook 2011: original message contents not included when replying to an email.</short_desc>
          <delta_ts>2011-04-07 13:23:52 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, NeedsReduction, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>41115</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Estes">aestes</reporter>
          <assigned_to name="Andy Estes">aestes</assigned_to>
          <cc>abarth</cc>
    
    <cc>aestes</cc>
    
    <cc>eric</cc>
    
    <cc>hsivonen</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>379104</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-04 14:56:13 -0700</bug_when>
    <thetext>When Microsoft Outlook 2011 is running with a version of WebKit &gt;= r64712, reply messages do not include the original message content.

I have a copy of Outlook 2011 installed and am working on creating a reduction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379105</commentid>
    <comment_count>1</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-04 14:56:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/9065834&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379111</commentid>
    <comment_count>2</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-04 15:05:24 -0700</bug_when>
    <thetext>Caused by http://trac.webkit.org/changeset/64712</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379159</commentid>
    <comment_count>3</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-04 16:00:22 -0700</bug_when>
    <thetext>This is fixed by flipping the parser quirks bit for Outlook.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379173</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-04 16:14:54 -0700</bug_when>
    <thetext>How does Firefox 4 behave?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379175</commentid>
    <comment_count>5</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-04 16:15:44 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; How does Firefox 4 behave?

This is a application that embeds WebKit.framework.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379178</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-04 16:18:46 -0700</bug_when>
    <thetext>Oh, I assumed you meant OWA.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379301</commentid>
    <comment_count>7</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-04 20:08:00 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; This is fixed by flipping the parser quirks bit for Outlook.

s/is fixed/is *not* fixed/g

:(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379388</commentid>
    <comment_count>8</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-05 02:14:37 -0700</bug_when>
    <thetext>I&apos;m not quite sure what to make of this yet. I sent myself an HTML email with this content:

This text is &lt;b&gt;bold&lt;/b&gt;

When I select this message and click reply, I see the roughly the following sequence of ObjC DOM API calls:

[DOMHTMLElement setInnerHTML:@&quot;This text is &lt;b&gt;bold&lt;/b&gt;&quot;]
...
[DOMHTMLElement innerHMTL]
...
[WebFrame loadHTMLString:@&quot;&lt;stringThatIncludesMessageHeadersAndContent&gt;&quot;]

&lt;stringThatIncludesMessageHeadersAndContent&gt; contains &quot;This text is &lt;b&gt;bold&lt;/b&gt;&quot;, prefixed with message headers (From, Date, To, Subject). Basically, it&apos;s the content you&apos;d expect to see below your cursor when replying to an email.

When the legacy parser is used, [DOMHTMLElement innerHTML] returns the string that was set in the previous call to [DOMHTMLElement setInnerHTML]. When the new parser is enabled, [DOMHTMLElement innerHTML] returns an empty string.

Presumably Outlook does the setInnerHTML/innerHTML combination so that it can do some DOM manipulation on the message contents, and I&apos;m guessing it expects a certain quirk of the old parser to do this manipulation correctly. Maybe it expects a particular DOM layout that is no longer guaranteed due to creation of implicit tags like HEAD.

I&apos;ll set some more breakpoints in HTMLElement. Maybe I can catch it removing a node or something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379389</commentid>
    <comment_count>9</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-05 02:16:45 -0700</bug_when>
    <thetext>I should clarify that &lt;stringThatIncludesMessageHeadersAndContent&gt; is also only valid when the legacy parser is used. With the new parser, it contains the message headers but not the body. It appears to be constructed based in part on the previous call to [DOMHTMLElement innerHTML].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379692</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-05 10:03:49 -0700</bug_when>
    <thetext>&gt; [DOMHTMLElement setInnerHTML:@&quot;This text is &lt;b&gt;bold&lt;/b&gt;&quot;]
&gt; ...
&gt; [DOMHTMLElement innerHMTL]

Are these called on the same element?  What is the DOM below that element?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379998</commentid>
    <comment_count>11</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-05 17:36:33 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; [DOMHTMLElement setInnerHTML:@&quot;This text is &lt;b&gt;bold&lt;/b&gt;&quot;]
&gt; &gt; ...
&gt; &gt; [DOMHTMLElement innerHMTL]
&gt; 
&gt; Are these called on the same element?  What is the DOM below that element?

They are the same element. If I walk up to the document element and call innerHTML, here is what I see:

&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;/body&gt;&lt;body&gt;this text is &lt;b&gt;bold&lt;/b&gt;&lt;/body&gt;

No doubt it&apos;s that extra BODY that is causing the problem. They probably later ask for document.body, which has no children, when they really want the second body element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380000</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-05 17:39:51 -0700</bug_when>
    <thetext>Interesting!  I don&apos;t think you&apos;re supposed to be able to end with with two body elements...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380002</commentid>
    <comment_count>13</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-05 17:42:29 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; &gt; [DOMHTMLElement setInnerHTML:@&quot;This text is &lt;b&gt;bold&lt;/b&gt;&quot;]
&gt; &gt; &gt; ...
&gt; &gt; &gt; [DOMHTMLElement innerHMTL]
&gt; &gt; 
&gt; &gt; Are these called on the same element?  What is the DOM below that element?
&gt; 
&gt; They are the same element. If I walk up to the document element and call innerHTML, here is what I see:
&gt; 
&gt; &lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;/body&gt;&lt;body&gt;this text is &lt;b&gt;bold&lt;/b&gt;&lt;/body&gt;
&gt; 

The legacy parser gives us:

&lt;body&gt;this text is &lt;b&gt;bold&lt;/b&gt;&lt;/body&gt;

The problem could possibly be that they assume document.firstChild.firstChild == document.body, in which case the implicit HEAD is a problem. It seems more likely to be related to the duplicate BODY element though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380038</commentid>
    <comment_count>14</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-05 19:02:12 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Interesting!  I don&apos;t think you&apos;re supposed to be able to end with with two body elements...

It&apos;s pretty simple to end up with two BODY elements:

&lt;script&gt;
document.firstChild.innerHTML = &quot;&quot;;
&lt;/script&gt;

will give you:

&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;/body&gt;&lt;body&gt;&lt;/body&gt;

This is because the fragment will start in BeforeHeadMode so will get implicit HEAD and BODY tags which get moved to the main document. Then when regular parsing resumes a second implicit BODY is added. Firefox 4 does this too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380117</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-05 22:02:55 -0700</bug_when>
    <thetext>&gt; It&apos;s pretty simple to end up with two BODY elements:

Crazy!  I&apos;m not sure if that&apos;s an intentional behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380153</commentid>
    <comment_count>16</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-05 23:21:28 -0700</bug_when>
    <thetext>I agree, it doesn&apos;t seem right to behave like this. I&apos;ll file a spec bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380193</commentid>
    <comment_count>17</comment_count>
    <who name="Henri Sivonen">hsivonen</who>
    <bug_when>2011-04-06 00:51:01 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; It&apos;s pretty simple to end up with two BODY elements:
&gt; 
&gt; Crazy!  I&apos;m not sure if that&apos;s an intentional behavior.

The behavior is entirely logical and makes sense, because
 1) DOM operations (including the innerHTML setter) don&apos;t care about the parser that&apos;s parsing the network stream.
AND
 2) The parser doesn&apos;t read back from the DOM.

If you don&apos;t like the outcome, don&apos;t write code that sets innerHTML of the document element before the network stream parser has finished.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380197</commentid>
    <comment_count>18</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-06 01:03:33 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; It&apos;s pretty simple to end up with two BODY elements:
&gt; 
&gt; Crazy!  I&apos;m not sure if that&apos;s an intentional behavior.

It also turns out that this behavior is unrelated to the Outlook bug. I found that Outlook is explicitly creating a BODY node that parents the message fragment, so this bug is all about the new parser creating a duplicate implicit BODY. The parser needs a new quirk to accommodate Outlook that doesn&apos;t create these implicit nodes for empty documents.

Apologies for the red herring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380200</commentid>
    <comment_count>19</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-06 01:06:58 -0700</bug_when>
    <thetext>Even better, we might be able to do this with an injected script a la &lt;https://bugs.webkit.org/show_bug.cgi?id=45693&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380201</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-06 01:07:41 -0700</bug_when>
    <thetext>I was going to suggest that, but we got a mid-air collision.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380258</commentid>
    <comment_count>21</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-06 04:21:35 -0700</bug_when>
    <thetext>&lt;http://trac.webkit.org/changeset/71339&gt; made it such that we can&apos;t inject scripts into the initial document, which prevents me from removing the implicit BODY from the initial empty document before Outlook adds its own BODY.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380276</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-06 05:24:13 -0700</bug_when>
    <thetext>I suspect we could double-quirk it for mail. :)  i.e. turn back on the always-inject feature only for outlook and then write such an early-inject script for outlook. :Donno.  The inject-based quirks are just so clean to write!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381083</commentid>
    <comment_count>23</comment_count>
      <attachid>88560</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-06 20:11:57 -0700</bug_when>
    <thetext>Created attachment 88560
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381087</commentid>
    <comment_count>24</comment_count>
      <attachid>88560</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-04-06 20:24:08 -0700</bug_when>
    <thetext>Comment on attachment 88560
Patch

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

&gt; Source/WebCore/loader/FrameLoader.cpp:-796
&gt; +    m_frame-&gt;injectUserScripts(InjectAtDocumentEnd);
&gt; +
&gt;      if (m_stateMachine.creatingInitialEmptyDocument())
&gt;          return;
&gt;  
&gt; -    m_frame-&gt;injectUserScripts(InjectAtDocumentEnd);

No explanation of this change. This is why per-file/per-function comments in ChangeLog are better. You could have said why you changed this.

&gt; Source/WebCore/page/Frame.cpp:522
&gt; +    if (loader()-&gt;stateMachine()-&gt;creatingInitialEmptyDocument()
&gt; +        &amp;&amp; !settings()-&gt;injectUserScriptsInInitialEmptyDocument())

I suggest combining into one line.

&gt; Source/WebCore/page/Settings.cpp:175
&gt; +    , m_injectUserScriptsInInitialEmptyDocument(false)

SInce this is a verb phrase, I think you should add the word “should” to its name.

&gt; Source/WebCore/page/Settings.h:390
&gt; +        void setInjectUserScriptsInInitialEmptyDocument(bool flag) { m_injectUserScriptsInInitialEmptyDocument = flag; }
&gt; +        bool injectUserScriptsInInitialEmptyDocument() { return m_injectUserScriptsInInitialEmptyDocument; }

Ditto.

&gt; Source/WebCore/page/Settings.h:493
&gt; +        bool m_injectUserScriptsInInitialEmptyDocument : 1;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381090</commentid>
    <comment_count>25</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-06 20:27:46 -0700</bug_when>
    <thetext>Very slick.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381595</commentid>
    <comment_count>26</comment_count>
      <attachid>88560</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-07 12:56:11 -0700</bug_when>
    <thetext>Comment on attachment 88560
Patch

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

&gt;&gt; Source/WebCore/page/Settings.cpp:175
&gt;&gt; +    , m_injectUserScriptsInInitialEmptyDocument(false)
&gt; 
&gt; SInce this is a verb phrase, I think you should add the word “should” to its name.

Yea I should have known better. In my defense, I consciously rejected doing this in preference of being consistent with the other boolean members of this class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381626</commentid>
    <comment_count>27</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-07 13:23:52 -0700</bug_when>
    <thetext>Committed r83201: &lt;http://trac.webkit.org/changeset/83201&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88560</attachid>
            <date>2011-04-06 20:11:57 -0700</date>
            <delta_ts>2011-04-07 12:56:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57794-20110406201156.patch</filename>
            <type>text/plain</type>
            <size>20723</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMTMxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDQtMDYgIEFuZHkgRXN0
ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJFR1JFU1NJT04gKHI2NDcxMik6IE1pY3Jvc29mdCBPdXRsb29rIDIw
MTE6IG9yaWdpbmFsIG1lc3NhZ2UgY29udGVudHMKKyAgICAgICAgbm90IGluY2x1ZGVkIHdoZW4g
cmVwbHlpbmcgdG8gYW4gZW1haWwuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01Nzc5NAorICAgICAgICAKKyAgICAgICAgQWRkIGEgZnVuY3Rpb24gdG8g
Y2hlY2sgaWYgdGhlIGVtYmVkZGluZyBhcHBsaWNhdGlvbiBpcyBNaWNyb3NvZnQKKyAgICAgICAg
T3V0bG9vay4gQWxzbywgYWRkIGEgc2V0dGluZyB0byBjb250cm9sIHdoZXRoZXIgdXNlciBzY3Jp
cHRzIHNob3VsZCBiZQorICAgICAgICBpbmplY3RlZCBpbnRvIHRoZSBpbml0aWFsIGVtcHR5IGRv
Y3VtZW50LiBUaGlzIHNldHRpbmcgZGVmYXVsdHMgdG8KKyAgICAgICAgZmFsc2UuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmZpbmlzaGVkUGFyc2luZyk6CisgICAgICAg
ICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aW5qZWN0VXNlclNj
cmlwdHMpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2V0dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAg
IChXZWJDb3JlOjpTZXR0aW5nczo6c2V0SW5qZWN0VXNlclNjcmlwdHNJbkluaXRpYWxFbXB0eURv
Y3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjppbmplY3RVc2VyU2NyaXB0c0lu
SW5pdGlhbEVtcHR5RG9jdW1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9SdW50aW1lQXBw
bGljYXRpb25DaGVja3MuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUnVudGltZUFwcGxpY2F0
aW9uQ2hlY2tzLm1tOgorICAgICAgICAoV2ViQ29yZTo6YXBwbGljYXRpb25Jc01pY3Jvc29mdE91
dGxvb2spOgorCiAyMDExLTA0LTA2ICBTdGVwaGFuaWUgTGV3aXMgIDxzbGV3aXNAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4JKHJldmlzaW9uIDgzMDMyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTYxNiw2ICs2MTYsNyBAQCBfX1pON1dlYkNvcmUyOGNvbnRleHRN
ZW51SXRlbVRhZ1NtYXJ0TGluCiBfX1pON1dlYkNvcmUyOGNvbnRleHRNZW51SXRlbVRhZ1NwZWVj
aE1lbnVFdgogX19aTjdXZWJDb3JlMjhlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzRVJLTjNX
VEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMjhyZW1vdmVMYW5ndWFnZUNoYW5nZU9ic2VydmVyRVB2
CitfX1pON1dlYkNvcmUyOWFwcGxpY2F0aW9uSXNNaWNyb3NvZnRPdXRsb29rRXYKIF9fWk43V2Vi
Q29yZTI5Y29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHRFdgogX19aTjdXZWJDb3JlMjljb250
ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVmdEV2CiBfX1pON1dlYkNvcmUyOWNvbnRleHRNZW51SXRl
bVRhZ1NtYXJ0RGFzaGVzRXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cAkocmV2aXNpb24gODMwMzIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTAsMTEgKzc5MCwxMSBAQCB2b2lkIEZyYW1lTG9hZGVy
Ojpjb21taXRJY29uVVJMVG9JY29uRGF0CiAKIHZvaWQgRnJhbWVMb2FkZXI6OmZpbmlzaGVkUGFy
c2luZygpCiB7CisgICAgbV9mcmFtZS0+aW5qZWN0VXNlclNjcmlwdHMoSW5qZWN0QXREb2N1bWVu
dEVuZCk7CisKICAgICBpZiAobV9zdGF0ZU1hY2hpbmUuY3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1
bWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2ZyYW1lLT5pbmplY3RVc2VyU2NyaXB0
cyhJbmplY3RBdERvY3VtZW50RW5kKTsKLQogICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBmcm9t
IHRoZSBGcmFtZSdzIGRlc3RydWN0b3IsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkbid0IHByb3Rl
Y3Qgb3Vyc2VsdmVzCiAgICAgLy8gYmVjYXVzZSBkb2luZyBzbyB3aWxsIGNhdXNlIHVzIHRvIHJl
LWVudGVyIHRoZSBkZXN0cnVjdG9yIHdoZW4gcHJvdGVjdG9yIGdvZXMgb3V0IG9mIHNjb3BlLgog
ICAgIC8vIE51bGwtY2hlY2tpbmcgdGhlIEZyYW1lVmlldyBpbmRpY2F0ZXMgd2hldGhlciBvciBu
b3Qgd2UncmUgaW4gdGhlIGRlc3RydWN0b3IuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2
aXNpb24gODMwMzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgMjAwMCBTaW1vbiBI
YXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KICAqICAgICAgICAgICAgICAgICAgICAgMjAwMCBT
dGVmYW4gU2NoaW1hbnNraSA8MVN0ZWluQGdteC5kZT4KICAqICAgICAgICAgICAgICAgICAgICAg
MjAwMSBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgog
ICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CkBAIC01MTgsOSArNTE4LDEwIEBAIHZvaWQgRnJhbWU6OmluamVjdFVzZXJTY3JpcHRz
KFVzZXJTY3JpcHQKICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KGxvYWRlcigpLT5zdGF0ZU1hY2hpbmUoKS0+Y3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgp
KQorICAgIGlmIChsb2FkZXIoKS0+c3RhdGVNYWNoaW5lKCktPmNyZWF0aW5nSW5pdGlhbEVtcHR5
RG9jdW1lbnQoKQorICAgICAgICAmJiAhc2V0dGluZ3MoKS0+aW5qZWN0VXNlclNjcmlwdHNJbklu
aXRpYWxFbXB0eURvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIC8vIFdh
bGsgdGhlIGhhc2h0YWJsZS4gSW5qZWN0IGJ5IHdvcmxkLgogICAgIGNvbnN0IFVzZXJTY3JpcHRN
YXAqIHVzZXJTY3JpcHRzID0gbV9wYWdlLT5ncm91cCgpLnVzZXJTY3JpcHRzKCk7CiAgICAgaWYg
KCF1c2VyU2NyaXB0cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZpc2lvbiA4
MzAzMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzIsNiArMTcyLDcgQEAgU2V0
dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX2Nyb3NzT3JpZ2luQ2hlY2tJbkdl
dE1hdGNoZWRDU1NSdWxlc0Rpc2FibGVkKGZhbHNlKQogICAgICwgbV91c2VRdWlja0xvb2tSZXNv
dXJjZUNhY2hpbmdRdWlya3MoZmFsc2UpCiAgICAgLCBtX2ZvcmNlQ29tcG9zaXRpbmdNb2RlKGZh
bHNlKQorICAgICwgbV9pbmplY3RVc2VyU2NyaXB0c0luSW5pdGlhbEVtcHR5RG9jdW1lbnQoZmFs
c2UpCiB7CiAgICAgLy8gQSBGcmFtZSBtYXkgbm90IGhhdmUgYmVlbiBjcmVhdGVkIHlldCwgc28g
d2UgaW5pdGlhbGl6ZSB0aGUgQXRvbWljU3RyaW5nIAogICAgIC8vIGhhc2ggYmVmb3JlIHRyeWlu
ZyB0byB1c2UgaXQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCShyZXZpc2lvbiA4MzAzMikK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlz
QGdtYWlsLmNvbSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM4NSw2ICszODUsOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzZXRGb3JjZUNvbXBvc2l0aW5nTW9kZShib29s
IGZsYWcpIHsgbV9mb3JjZUNvbXBvc2l0aW5nTW9kZSA9IGZsYWc7IH0KICAgICAgICAgYm9vbCBm
b3JjZUNvbXBvc2l0aW5nTW9kZSgpIHsgcmV0dXJuIG1fZm9yY2VDb21wb3NpdGluZ01vZGU7IH0K
KyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0SW5qZWN0VXNlclNjcmlwdHNJbkluaXRpYWxFbXB0
eURvY3VtZW50KGJvb2wgZmxhZykgeyBtX2luamVjdFVzZXJTY3JpcHRzSW5Jbml0aWFsRW1wdHlE
b2N1bWVudCA9IGZsYWc7IH0KKyAgICAgICAgYm9vbCBpbmplY3RVc2VyU2NyaXB0c0luSW5pdGlh
bEVtcHR5RG9jdW1lbnQoKSB7IHJldHVybiBtX2luamVjdFVzZXJTY3JpcHRzSW5Jbml0aWFsRW1w
dHlEb2N1bWVudDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUGFnZSogbV9wYWdlOwpAQCAt
NDg3LDYgKzQ5MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2Nyb3Nz
T3JpZ2luQ2hlY2tJbkdldE1hdGNoZWRDU1NSdWxlc0Rpc2FibGVkIDogMTsKICAgICAgICAgYm9v
bCBtX3VzZVF1aWNrTG9va1Jlc291cmNlQ2FjaGluZ1F1aXJrcyA6IDE7CiAgICAgICAgIGJvb2wg
bV9mb3JjZUNvbXBvc2l0aW5nTW9kZSA6IDE7CisgICAgICAgIGJvb2wgbV9pbmplY3RVc2VyU2Ny
aXB0c0luSW5pdGlhbEVtcHR5RG9jdW1lbnQgOiAxOwogCiAjaWYgVVNFKFNBRkFSSV9USEVNRSkK
ICAgICAgICAgc3RhdGljIGJvb2wgZ1Nob3VsZFBhaW50TmF0aXZlQ29udHJvbHM7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1J1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrcy5oCShyZXZpc2lvbiA4MzAzMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBA
QCBib29sIGFwcGxpY2F0aW9uSXNNaWNyb3NvZnRNZXNzZW5nZXIoKTsKIGJvb2wgYXBwbGljYXRp
b25Jc0Fkb2JlSW5zdGFsbGVyKCk7CiBib29sIGFwcGxpY2F0aW9uSXNBT0xJbnN0YW50TWVzc2Vu
Z2VyKCk7CiBib29sIGFwcGxpY2F0aW9uSXNNaWNyb3NvZnRNeURheSgpOworYm9vbCBhcHBsaWNh
dGlvbklzTWljcm9zb2Z0T3V0bG9vaygpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9SdW50aW1lQXBwbGljYXRpb25DaGVja3Mu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1J1bnRpbWVBcHBs
aWNhdGlvbkNoZWNrcy5tbQkocmV2aXNpb24gODMwMzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw1
ICs2NCwxMSBAQCBib29sIGFwcGxpY2F0aW9uSXNNaWNyb3NvZnRNeURheSgpCiAgICAgc3RhdGlj
IGJvb2wgaXNNaWNyb3NvZnRNeURheSA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlk
ZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5taWNyb3NvZnQubXlkYXkiXTsKICAgICBy
ZXR1cm4gaXNNaWNyb3NvZnRNeURheTsKIH0KKyAgICAKK2Jvb2wgYXBwbGljYXRpb25Jc01pY3Jv
c29mdE91dGxvb2soKQoreworICAgIHN0YXRpYyBib29sIGlzTWljcm9zb2Z0T3V0bG9vayA9IFtb
W05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpA
ImNvbS5taWNyb3NvZnQuT3V0bG9vayJdOworICAgIHJldHVybiBpc01pY3Jvc29mdE91dGxvb2s7
Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MzEz
MSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTEtMDQtMDYgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJFR1JFU1NJT04gKHI2
NDcxMik6IE1pY3Jvc29mdCBPdXRsb29rIDIwMTE6IG9yaWdpbmFsIG1lc3NhZ2UgY29udGVudHMK
KyAgICAgICAgbm90IGluY2x1ZGVkIHdoZW4gcmVwbHlpbmcgdG8gYW4gZW1haWwuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Nzc5NAorCisgICAgICAg
ICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTEtMDQtMDUgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDgzMDMyKQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsOCBAQAog
CQkyMjZFOUU2QTA5RDBBQTgyMDBGM0EyQkMgLyogV2ViTmV0c2NhcGVEZXByZWNhdGVkRnVuY3Rp
b25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjZF
OUU2ODA5RDBBQTgyMDBGM0EyQkMgLyogV2ViTmV0c2NhcGVEZXByZWNhdGVkRnVuY3Rpb25zLmgg
Ki87IH07CiAJCTIyNkU5RTZCMDlEMEFBODIwMEYzQTJCQyAvKiBXZWJOZXRzY2FwZURlcHJlY2F0
ZWRGdW5jdGlvbnMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDIyNkU5RTY5MDlEMEFBODIwMEYzQTJCQyAvKiBXZWJOZXRzY2FwZURlcHJlY2F0ZWRGdW5j
dGlvbnMuYyAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLVduby1kZXByZWNhdGVk
LWRlY2xhcmF0aW9ucyI7IH07IH07CiAJCTIyRjIxOUNDMDhEMjM2NzMwMDMwRTA3OCAvKiBXZWJC
YWNrRm9yd2FyZExpc3RQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyMkYyMTlDQjA4RDIzNjczMDAzMEUwNzggLyogV2ViQmFja0ZvcndhcmRM
aXN0UHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTI5QUVGOTVFMTM0Qzc1NTQwMEZFNTA5NiAvKiBPdXRsb29rUXVpcmtzVXNlclNjcmlw
dC5qcyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5QUVG
OTVEMTM0Qzc1NTQwMEZFNTA5NiAvKiBPdXRsb29rUXVpcmtzVXNlclNjcmlwdC5qcyAqLzsgfTsK
KwkJMjlBRUY5NjAxMzRDNzZGQjAwRkU1MDk2IC8qIE91dGxvb2tRdWlya3NVc2VyU2NyaXB0Lmpz
IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUFFRjk1
RDEzNEM3NTU0MDBGRTUwOTYgLyogT3V0bG9va1F1aXJrc1VzZXJTY3JpcHQuanMgKi87IH07CiAJ
CTM3QjZGQjRFMTA2MzUzMEMwMDBGREIzQiAvKiBXZWJQREZEb2N1bWVudEV4dHJhcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdCNkZCNEMxMDYzNTMw
QzAwMEZEQjNCIC8qIFdlYlBERkRvY3VtZW50RXh0cmFzLmggKi87IH07CiAJCTM3QjZGQjRGMTA2
MzUzMEMwMDBGREIzQiAvKiBXZWJQREZEb2N1bWVudEV4dHJhcy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QjZGQjREMTA2MzUzMEMwMDBGREIzQiAv
KiBXZWJQREZEb2N1bWVudEV4dHJhcy5tbSAqLzsgfTsKIAkJMzdEMURDQTgxMDY1OTI4QzAwNjhG
N0VGIC8qIFdlYkpTUERGRG9jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzN0QxRENBNjEwNjU5MjhDMDA2OEY3RUYgLyogV2ViSlNQREZEb2MuaCAqLzsg
fTsKQEAgLTQ2NCw2ICs0NjYsNyBAQAogCQkyMjZFOUU2OTA5RDBBQTgyMDBGM0EyQkMgLyogV2Vi
TmV0c2NhcGVEZXByZWNhdGVkRnVuY3Rpb25zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsg
cGF0aCA9IFdlYk5ldHNjYXBlRGVwcmVjYXRlZEZ1bmN0aW9ucy5jOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyMkYyMTlDQjA4RDIzNjczMDAzMEUwNzggLyogV2ViQmFja0ZvcndhcmRM
aXN0UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTI1NjhDNzJDMDE3NDkxMkQwRUNB
MTQ5RSAvKiBXZWJLaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJLaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CisJCTI5QUVGOTVEMTM0Qzc1NTQwMEZFNTA5NiAvKiBPdXRsb29r
UXVpcmtzVXNlclNjcmlwdC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0
aCA9IE91dGxvb2tRdWlya3NVc2VyU2NyaXB0LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRDM2RkQ1RTAzRjc4RjlFMDBBODAxNjYgLyogV2ViRm9ybURlbGVnYXRlUHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZv
cm1EZWxlZ2F0ZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCTJEODFEQUIyMDNFQjBCMkQwMEE4MDE2NiAvKiBXZWJGb3Jt
RGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViRm9ybURlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRo
ID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQkyRDgxREFCMzAzRUIwQjJEMDBBODAxNjYgLyogV2Vi
Rm9ybURlbGVnYXRlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
b2JqYzsgcGF0aCA9IFdlYkZvcm1EZWxlZ2F0ZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTkzOSw2ICs5NDIsNyBAQAogCQkyNTRE
QzMzNDAxNkUxRDNGMEVDQTE0OUUgLyogTWlzYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJMjlBRUY5NUQxMzRDNzU1NDAwRkU1MDk2IC8qIE91dGxvb2tR
dWlya3NVc2VyU2NyaXB0LmpzICovLAogCQkJCUE4NjRCM0U1MTIzRUQ4M0QwMEMyQTYxMiAvKiBN
YWlsUXVpcmtzVXNlclNjcmlwdC5qcyAqLywKIAkJCQkxQ0NGRkQxMjBCMUY4MUYyMDAyRUU5MjYg
LyogT2xkV2ViQXNzZXJ0aW9ucy5jICovLAogCQkJCTVERTkyRkVFMEJENzAxN0UwMDU5QTVGRCAv
KiBXZWJBc3NlcnRpb25zLmggKi8sCkBAIC0xNzEyLDYgKzE3MTYsNyBAQAogCQkJaXNhID0gUEJY
UmVzb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJ
CQlmaWxlcyA9ICgKKwkJCQkyOUFFRjk2MDEzNEM3NkZCMDBGRTUwOTYgLyogT3V0bG9va1F1aXJr
c1VzZXJTY3JpcHQuanMgaW4gUmVzb3VyY2VzICovLAogCQkJCUE4NjRCM0Y2MTIzRUQ5RkEwMEMy
QTYxMiAvKiBNYWlsUXVpcmtzVXNlclNjcmlwdC5qcyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJOTM5
ODEwQkEwODI0QkYwMTAwOERGMDM4IC8qIElETlNjcmlwdFdoaXRlTGlzdC50eHQgaW4gUmVzb3Vy
Y2VzICovLAogCQkJCTkzOTgxMEI3MDgyNEJGMDEwMDhERjAzOCAvKiB1cmxfaWNvbi50aWZmIGlu
IFJlc291cmNlcyAqLywKQEAgLTIwMTUsNiArMjAyMCw3IEBACiAJCQkJM0FCQjNDN0IxMzA5QzNC
NTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM0MkQzNEQxMzFFRDM4ODAwNzVGQTRCIC8qIFdlYkxvY2FsaXphYmxlU3RyaW5nc0ludGVy
bmFsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjgyOTU4RDQxMzI3MDdEMDAwMEQwRTc5IC8qIENv
cnJlY3Rpb25QYW5lbC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTI5QUVGOTVFMTM0Qzc1NTQwMEZF
NTA5NiAvKiBPdXRsb29rUXVpcmtzVXNlclNjcmlwdC5qcyBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwkocmV2aXNpb24gODMxMzEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MyBAQAorMjAxMS0wNC0wNiAgQW5keSBF
c3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUkVHUkVTU0lPTiAocjY0NzEyKTogTWljcm9zb2Z0IE91dGxvb2sg
MjAxMTogb3JpZ2luYWwgbWVzc2FnZSBjb250ZW50cworICAgICAgICBub3QgaW5jbHVkZWQgd2hl
biByZXBseWluZyB0byBhbiBlbWFpbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU3Nzk0CisgICAgICAgIAorICAgICAgICBPdXRsb29rIHBvcHVsYXRl
cyBhIHJlcGx5IG1lc3NhZ2UgYnkgY3JlYXRpbmcgYW4gZW1wdHkgV2ViVmlldyBhbmQKKyAgICAg
ICAgdXNpbmcgRE9NIEFQSSB0byBwb3B1bGF0ZSB0aGUgV2ViVmlldydzIGVtcHR5IGRvY3VtZW50
IHdpdGggY29udGVudAorICAgICAgICBmcm9tIHRoZSBvcmlnaW5hbCBtZXNzYWdlLiBJdCBleHBl
Y3RzIHRoZSBpbml0aWFsIGVtcHR5IGRvY3VtZW50IHRvCisgICAgICAgIHNpbXBseSBiZSAiPGh0
bWw+PC9odG1sPiIsIGFuZCBpdCBwcm9jZWVkcyB0byBkeW5hbWljYWxseSBjcmVhdGUgYW5kCisg
ICAgICAgIGFwcGVuZCBhIEJPRFkgbm9kZSBhbmQgYWRkIHRoZSBvcmlnaW5hbCBtZXNzYWdlIGNv
bnRlbnQgYXMgYSBjaGlsZCBvZgorICAgICAgICB0aGF0IG5vZGUuIE91dGxvb2sgdGhlbiB0YWtl
cyB0aGUgaW5uZXJIVE1MIG9mIHRoZSBmcmFtZSdzIGZpcnN0IGJvZHkKKyAgICAgICAgZWxlbWVu
dCBhbmQgY29waWVzIGl0IGludG8gYSAqbmV3KiBkb2N1bWVudCB0aGF0IGlzIGRpc3BsYXllZCBh
bmQKKyAgICAgICAgZWRpdGVkIGluIHRoZSByZXBseSBtZXNzYWdlIHdpbmRvdy4KKyAgICAgICAg
CisgICAgICAgIER1ZSB0byBpbXBsZW1lbnRpbmcgdGhlIEhUTUw1IHRyZWUgYnVpbGRpbmcgYWxn
b3JpdGhtIGluIHI2NDcxMiwKKyAgICAgICAgaW5pdGlhbCBlbXB0eSBkb2N1bWVudHMgd2VudCBm
cm9tIGJlaW5nICI8aHRtbD48L2h0bWw+IiB0byBiZWluZworICAgICAgICAiPGh0bWw+PGhlYWQ+
PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+Ii4gT3V0bG9vayBzdGlsbCBkeW5hbWljYWxseQor
ICAgICAgICBjcmVhdGVzIGEgQk9EWSBub2RlIHRvIHBhcmVudCB0aGUgb3JpZ2luYWwgbWVzc2Fn
ZSBjb250ZW50LCBidXQgdGhpcworICAgICAgICBCT0RZIG5vZGUgZHVwbGljYXRlcyB0aGUgb25l
IGNyZWF0ZWQgYnkgdGhlIHRyZWUgYnVpbGRlci4gV2hlbiBPdXRsb29rCisgICAgICAgIHRoZW4g
dGFrZXMgdGhlIGlubmVySFRNTCBvZiB0aGUgZmlyc3QgYm9keSBlbGVtZW50IHRvIHBvcHVsYXRl
IHRoZQorICAgICAgICByZXBseSBtZXNzYWdlIHdpbmRvdyBpdCBnZXRzIHRoZSBlbXB0eSBib2R5
IGVsZW1lbnQgY3JlYXRlZCBieSB0aGUKKyAgICAgICAgcGFyc2VyLCBub3QgdGhlIG9uZSBpdCBj
cmVhdGVkIHdpdGggdGhlIG9yaWdpbmFsIG1lc3NhZ2UgY29udGVudC4KKyAgICAgICAgCisgICAg
ICAgIEZpeCB0aGlzIGJ5IGluamVjdGluZyBhIHVzZXIgc2NyaXB0IGludG8gdGhlIGluaXRpYWwg
ZW1wdHkgZG9jdW1lbnQKKyAgICAgICAgdGhhdCByZW1vdmVzIHRoZSBIRUFEIGFuZCBCT0RZIG5v
ZGVzIGNyZWF0ZWQgYnkgdGhlIHBhcnNlci4gVGhpcworICAgICAgICBlbnN1cmVzIHRoYXQgdGhl
IEJPRFkgY3JlYXRlZCBieSBPdXRsb29rIGlzIHRoZSBvbmx5IEJPRFkgaW4gdGhlCisgICAgICAg
IGRvY3VtZW50LgorCisgICAgICAgICogTWlzYy9PdXRsb29rUXVpcmtzVXNlclNjcmlwdC5qczog
QWRkZWQuCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAobGVha01haWxR
dWlya3NVc2VyU2NyaXB0Q29udGVudHMpOgorICAgICAgICAoLVtXZWJWaWV3IF9pbmplY3RNYWls
UXVpcmtzU2NyaXB0XSk6CisgICAgICAgIChuZWVkc091dGxvb2tRdWlya3NTY3JpcHQpOgorICAg
ICAgICAobGVha091dGxvb2tRdWlya3NVc2VyU2NyaXB0Q29udGVudHMpOgorICAgICAgICAoLVtX
ZWJWaWV3IF9pbmplY3RPdXRsb29rUXVpcmtzU2NyaXB0XSk6CisgICAgICAgICgtW1dlYlZpZXcg
X2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmFtZTpncm91cE5hbWU6dXNlc0RvY3VtZW50
Vmlld3M6XSk6CisKIDIwMTEtMDQtMDYgIFJvYmVydCBTZXNlayAgPHJzZXNla0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL01pc2MvT3V0bG9va1F1aXJrc1VzZXJTY3JpcHQuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9PdXRsb29rUXVpcmtzVXNlclNjcmlwdC5qcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvT3V0bG9va1F1aXJrc1VzZXJT
Y3JpcHQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworKGZ1bmN0
aW9uKCkgeworICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYXBwbHkgdG8gdGhlIGluaXRpYWwgZW1w
dHkgZG9jdW1lbnQsIHdoaWNoIHNob3VsZCBsb29rIGxpa2U6CisgICAgLy8gPGh0bWw+PGhlYWQ+
PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+CisgICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxl
bWVudC5vdXRlckhUTUwgIT0gIjxodG1sPjxoZWFkPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1s
PiIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE91dGxvb2sgZXhwZWN0cyB0aGUgaW5pdGlh
bCBlbXB0eSBkb2N1bWVudCB0byBvbmx5IGNvbnRhaW4gdGhlIGRvY3VtZW50CisgICAgLy8gZWxl
bWVudC4gSXQgd2lsbCBleHBsaWNpdGx5IGluc2VydCBhIEJPRFkgbm9kZS4KKyAgICBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuaGVhZCk7CisgICAgZG9jdW1l
bnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKGRvY3VtZW50LmJvZHkpOworfSkoKTsKKwor
IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0JKHJldmlzaW9uIDgzMDMyKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA2IERhdmlkIFNtaXRoIChjYXRmaXNoLm1hbkBnbWFpbC5jb20pCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTAogICoKQEAgLTYzOSw3ICs2MzksNyBAQCAt
IChCT09MKV91c2VzRG9jdW1lbnRWaWV3cwogICAgIHJldHVybiBfcHJpdmF0ZS0+dXNlc0RvY3Vt
ZW50Vmlld3M7CiB9CiAKLXN0YXRpYyBOU1N0cmluZyAqbGVha01haWxRdWlya3NVc2VyU2NyaXB0
UGF0aCgpCitzdGF0aWMgTlNTdHJpbmcgKmxlYWtNYWlsUXVpcmtzVXNlclNjcmlwdENvbnRlbnRz
KCkKIHsKICAgICBOU1N0cmluZyAqc2NyaXB0UGF0aCA9IFtbTlNCdW5kbGUgYnVuZGxlRm9yQ2xh
c3M6W1dlYlZpZXcgY2xhc3NdXSBwYXRoRm9yUmVzb3VyY2U6QCJNYWlsUXVpcmtzVXNlclNjcmlw
dCIgb2ZUeXBlOkAianMiXTsKICAgICByZXR1cm4gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhD
b250ZW50c09mRmlsZTpzY3JpcHRQYXRoXTsKQEAgLTY0Nyw5ICs2NDcsMjkgQEAgc3RhdGljIE5T
U3RyaW5nICpsZWFrTWFpbFF1aXJrc1VzZXJTY3JpcAogCiAtICh2b2lkKV9pbmplY3RNYWlsUXVp
cmtzU2NyaXB0CiB7Ci0gICAgc3RhdGljIE5TU3RyaW5nICptYWlsUXVpcmtzU2NyaXB0UGF0aCA9
IGxlYWtNYWlsUXVpcmtzVXNlclNjcmlwdFBhdGgoKTsKKyAgICBzdGF0aWMgTlNTdHJpbmcgKm1h
aWxRdWlya3NTY3JpcHRDb250ZW50cyA9IGxlYWtNYWlsUXVpcmtzVXNlclNjcmlwdENvbnRlbnRz
KCk7CiAgICAgY29yZShzZWxmKS0+Z3JvdXAoKS5hZGRVc2VyU2NyaXB0VG9Xb3JsZChjb3JlKFtX
ZWJTY3JpcHRXb3JsZCB3b3JsZF0pLAotICAgICAgICBtYWlsUXVpcmtzU2NyaXB0UGF0aCwgS1VS
TCgpLCAwLCAwLCBJbmplY3RBdERvY3VtZW50RW5kLCBJbmplY3RJbkFsbEZyYW1lcyk7CisgICAg
ICAgIG1haWxRdWlya3NTY3JpcHRDb250ZW50cywgS1VSTCgpLCAwLCAwLCBJbmplY3RBdERvY3Vt
ZW50RW5kLCBJbmplY3RJbkFsbEZyYW1lcyk7Cit9CisKK3N0YXRpYyBib29sIG5lZWRzT3V0bG9v
a1F1aXJrc1NjcmlwdCgpCit7CisgICAgc3RhdGljIGJvb2wgaXNPdXRsb29rTmVlZGluZ1F1aXJr
c1NjcmlwdCA9ICFXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lU
SF9IVE1MNV9QQVJTRVIpCisgICAgICAgICYmIGFwcGxpY2F0aW9uSXNNaWNyb3NvZnRPdXRsb29r
KCk7CisgICAgcmV0dXJuIGlzT3V0bG9va05lZWRpbmdRdWlya3NTY3JpcHQ7Cit9CisKK3N0YXRp
YyBOU1N0cmluZyAqbGVha091dGxvb2tRdWlya3NVc2VyU2NyaXB0Q29udGVudHMoKQoreworICAg
IE5TU3RyaW5nICpzY3JpcHRQYXRoID0gW1tOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2ViVmll
dyBjbGFzc11dIHBhdGhGb3JSZXNvdXJjZTpAIk91dGxvb2tRdWlya3NVc2VyU2NyaXB0IiBvZlR5
cGU6QCJqcyJdOworICAgIHJldHVybiBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENvbnRlbnRz
T2ZGaWxlOnNjcmlwdFBhdGhdOworfQorCistKHZvaWQpX2luamVjdE91dGxvb2tRdWlya3NTY3Jp
cHQKK3sKKyAgICBzdGF0aWMgTlNTdHJpbmcgKm91dGxvb2tRdWlya3NTY3JpcHRDb250ZW50cyA9
IGxlYWtPdXRsb29rUXVpcmtzVXNlclNjcmlwdENvbnRlbnRzKCk7CisgICAgY29yZShzZWxmKS0+
Z3JvdXAoKS5hZGRVc2VyU2NyaXB0VG9Xb3JsZChjb3JlKFtXZWJTY3JpcHRXb3JsZCB3b3JsZF0p
LAorICAgICAgICBvdXRsb29rUXVpcmtzU2NyaXB0Q29udGVudHMsIEtVUkwoKSwgMCwgMCwgSW5q
ZWN0QXREb2N1bWVudEVuZCwgSW5qZWN0SW5BbGxGcmFtZXMpOwogfQogCiAtICh2b2lkKV9jb21t
b25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hbWU6KE5TU3RyaW5nICopZnJhbWVOYW1lIGdyb3Vw
TmFtZTooTlNTdHJpbmcgKilncm91cE5hbWUgdXNlc0RvY3VtZW50Vmlld3M6KEJPT0wpdXNlc0Rv
Y3VtZW50Vmlld3MKQEAgLTcyMCw2ICs3NDAsMTEgQEAgLSAodm9pZClfY29tbW9uSW5pdGlhbGl6
YXRpb25XaXRoRnJhbWVOYQogICAgIF9wcml2YXRlLT5wYWdlLT5zZXRDYW5TdGFydE1lZGlhKFtz
ZWxmIHdpbmRvd10pOwogICAgIF9wcml2YXRlLT5wYWdlLT5zZXR0aW5ncygpLT5zZXRMb2NhbFN0
b3JhZ2VEYXRhYmFzZVBhdGgoW1tzZWxmIHByZWZlcmVuY2VzXSBfbG9jYWxTdG9yYWdlRGF0YWJh
c2VQYXRoXSk7CiAKKyAgICBpZiAobmVlZHNPdXRsb29rUXVpcmtzU2NyaXB0KCkpIHsKKyAgICAg
ICAgX3ByaXZhdGUtPnBhZ2UtPnNldHRpbmdzKCktPnNldEluamVjdFVzZXJTY3JpcHRzSW5Jbml0
aWFsRW1wdHlEb2N1bWVudCh0cnVlKTsKKyAgICAgICAgW3NlbGYgX2luamVjdE91dGxvb2tRdWly
a3NTY3JpcHRdOworICAgIH0KKwogICAgIFtXZWJGcmFtZSBfY3JlYXRlTWFpbkZyYW1lV2l0aFBh
Z2U6X3ByaXZhdGUtPnBhZ2UgZnJhbWVOYW1lOmZyYW1lTmFtZSBmcmFtZVZpZXc6ZnJhbWVWaWV3
XTsKIAogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgo=
</data>
<flag name="review"
          id="81087"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>