<?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>41236</bug_id>
          
          <creation_ts>2010-06-25 17:06:14 -0700</creation_ts>
          <short_desc>Autocomplete entries are missing when AutoFill entries are shown in the suggestions popup on Chrome</short_desc>
          <delta_ts>2010-12-13 13:51:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="David Holloway">dhollowa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dhollowa</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>jcivelli</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>243264</commentid>
    <comment_count>0</comment_count>
      <attachid>59812</attachid>
    <who name="David Holloway">dhollowa</who>
    <bug_when>2010-06-25 17:06:14 -0700</bug_when>
    <thetext>Created attachment 59812
Example form.

Overview: On Chrome, when user enters AutoFill data (in Preferences) and triggers the display of the suggestion popup in a form field their Autocomplete suggestions are not displayed.

Steps to Reproduce:

1) Launch Chrome.

2) Open a page with a form containing AutoFillable fields.  (See attached form.html file).

3) Type the name &quot;Jay&quot; into the &quot;First Name&quot; field of the form and click the send button.

4) Double-click the &quot;First Name&quot; field, and notice &quot;Jay&quot; appears in the popup.

5) Open Preferences, Open AutoFill settings, and enter a new Address with &quot;David&quot; as the name in the address.

6.)  Double-click the &quot;First Name&quot; field, and notice &quot;David&quot; appears in the popup, but not &quot;Jay&quot;.

Actual Results: The suggestion popup does not contained the combined &quot;David&quot; and &quot;Jay&quot; suggestions, only &quot;David&quot;.

Expected Results: The suggestions popup should contain &quot;David&quot; followed by &quot;Jay&quot;.  That is, the combined results of AutoFill and Autocomplete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243288</commentid>
    <comment_count>1</comment_count>
      <attachid>59819</attachid>
    <who name="David Holloway">dhollowa</who>
    <bug_when>2010-06-25 17:51:08 -0700</bug_when>
    <thetext>Created attachment 59819
Proposed patch.

Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243289</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-25 17:53:07 -0700</bug_when>
    <thetext>Attachment 59819 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKit/chromium/src/WebViewImpl.cpp:1914:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebKit/chromium/src/AutoFillPopupMenuClient.cpp:98:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebKit/chromium/src/AutoFillPopupMenuClient.cpp:111:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
WebKit/chromium/src/AutoFillPopupMenuClient.cpp:112:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebKit/chromium/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
WebKit/chromium/ChangeLog:9:  Line contains tab character.  [whitespace/tab] [5]
WebKit/chromium/ChangeLog:10:  Line contains tab character.  [whitespace/tab] [5]
WebKit/chromium/ChangeLog:11:  Line contains tab character.  [whitespace/tab] [5]
WebKit/chromium/ChangeLog:12:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 9 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243294</commentid>
    <comment_count>3</comment_count>
      <attachid>59820</attachid>
    <who name="David Holloway">dhollowa</who>
    <bug_when>2010-06-25 18:03:26 -0700</bug_when>
    <thetext>Created attachment 59820
Proposed patch, fixed style issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243297</commentid>
    <comment_count>4</comment_count>
    <who name="David Holloway">dhollowa</who>
    <bug_when>2010-06-25 18:07:09 -0700</bug_when>
    <thetext>Reviewed on the Chrome side by jhawkins and (at design level by) jcivelli.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244799</commentid>
    <comment_count>5</comment_count>
      <attachid>59820</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-06-30 09:04:35 -0700</bug_when>
    <thetext>Comment on attachment 59820
Proposed patch, fixed style issues.

WebKit/chromium/public/WebFrame.h:490
 +          WebInputElement) = 0;
please pass a WebInputElement using a const ref.  |const WebInputElement&amp;|
WebKit/chromium/public/WebFrame.h:489
 +      virtual void notifiyPasswordListenerOfAutocomplete(
elsewhere you seem to be converging on the term autofill, but here
you still use the term autocomplete.  should this use autofill?

WebKit/chromium/public/WebView.h:243
 +          int separatorIndex) = 0;
was this parameter just misnamed before?  defaultSuggestionIndex
and separatorIndex seem like very different things.

WebKit/chromium/src/WebFrameImpl.cpp:1967
 +      RefPtr&lt;HTMLInputElement&gt; element = inputElement.operator PassRefPtr&lt;HTMLInputElement&gt;();
I don&apos;t think we should be invoking an operator this way.  Can&apos;t you
just write it like this:

  RefPtr&lt;HTMLInputElement&gt; element(inputElement);

That should cause inputElement to be implicitly converted to
PassRefPtr&lt;HTMLInputElement&gt; to fit the RefPtr constructor.

Overall, looks fine to me.  Please make sure that Jay has
reviewed this patch as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244839</commentid>
    <comment_count>6</comment_count>
      <attachid>60132</attachid>
    <who name="David Holloway">dhollowa</who>
    <bug_when>2010-06-30 10:39:55 -0700</bug_when>
    <thetext>Created attachment 60132
Proposed patch, addresses review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244841</commentid>
    <comment_count>7</comment_count>
    <who name="David Holloway">dhollowa</who>
    <bug_when>2010-06-30 10:47:51 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 59820 [details])
&gt; WebKit/chromium/public/WebFrame.h:490
&gt;  +          WebInputElement) = 0;
&gt; please pass a WebInputElement using a const ref.  |const WebInputElement&amp;|

Done.

&gt; WebKit/chromium/public/WebFrame.h:489
&gt;  +      virtual void notifiyPasswordListenerOfAutocomplete(
&gt; elsewhere you seem to be converging on the term autofill, but here
&gt; you still use the term autocomplete.  should this use autofill?

It is appropriate to keep this named as Autocomplete.  The distinction remains for certain types of handling, this is one.

&gt; 
&gt; WebKit/chromium/public/WebView.h:243
&gt;  +          int separatorIndex) = 0;
&gt; was this parameter just misnamed before?  defaultSuggestionIndex
&gt; and separatorIndex seem like very different things.

Yes, defaultSuggestionIndex was no longer used by Autocomplete and had been appropriated by Autofill to indicate separatorIndex.  I renamed to reflect actual use in the combined implementation.

&gt; 
&gt; WebKit/chromium/src/WebFrameImpl.cpp:1967
&gt;  +      RefPtr&lt;HTMLInputElement&gt; element = inputElement.operator PassRefPtr&lt;HTMLInputElement&gt;();
&gt; I don&apos;t think we should be invoking an operator this way.  Can&apos;t you
&gt; just write it like this:
&gt; 
&gt;   RefPtr&lt;HTMLInputElement&gt; element(inputElement);
&gt; 
&gt; That should cause inputElement to be implicitly converted to
&gt; PassRefPtr&lt;HTMLInputElement&gt; to fit the RefPtr constructor.
&gt; 

The RefPtr constructor does not allow for implicit construction from a WebInputElement.  So that doesn&apos;t work.  The syntax:

 RefPtr&lt;HTMLInputElement&gt; element = static_cast&lt;PassRefPtr&lt;HTMLInputElement&gt; &gt;(inputElement);

seems a bit cleaner to me.  But I left it with explicit call to cast operator to match local style at line 1963.

&gt; Overall, looks fine to me.  Please make sure that Jay has
&gt; reviewed this patch as well.

I&apos;ve emailed Jay with link to proposed changes on Chrome side as well to give sense of overall direction here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244848</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-06-30 11:08:21 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; WebKit/chromium/src/WebFrameImpl.cpp:1967
&gt; &gt;  +      RefPtr&lt;HTMLInputElement&gt; element = inputElement.operator PassRefPtr&lt;HTMLInputElement&gt;();
&gt; &gt; I don&apos;t think we should be invoking an operator this way.  Can&apos;t you
&gt; &gt; just write it like this:
&gt; &gt; 
&gt; &gt;   RefPtr&lt;HTMLInputElement&gt; element(inputElement);
&gt; &gt; 
&gt; &gt; That should cause inputElement to be implicitly converted to
&gt; &gt; PassRefPtr&lt;HTMLInputElement&gt; to fit the RefPtr constructor.
&gt; &gt; 
&gt; 
&gt; The RefPtr constructor does not allow for implicit construction from a WebInputElement.  So that doesn&apos;t work.  The syntax:
&gt; 
&gt;  RefPtr&lt;HTMLInputElement&gt; element = static_cast&lt;PassRefPtr&lt;HTMLInputElement&gt; &gt;(inputElement);
&gt; 
&gt; seems a bit cleaner to me.  But I left it with explicit call to cast operator to match local style at line 1963.

I see.  I&apos;m sad to see that others have been calling the operator explicitly.
That is really not how operators are intended to be used!!

It seems like we should make WebNode&apos;s unwrap and constUnwrap methods public.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244849</commentid>
    <comment_count>9</comment_count>
      <attachid>60132</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-06-30 11:11:07 -0700</bug_when>
    <thetext>Comment on attachment 60132
Proposed patch, addresses review comments.

OK, r=me with agreement to do the operator cleanup in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244953</commentid>
    <comment_count>10</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2010-06-30 14:43:07 -0700</bug_when>
    <thetext>This looks good to me with regards to my upcoming changes to password and field autocomplete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245409</commentid>
    <comment_count>11</comment_count>
      <attachid>60132</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-01 10:15:07 -0700</bug_when>
    <thetext>Comment on attachment 60132
Proposed patch, addresses review comments.

Clearing flags on attachment: 60132

Committed r62272: &lt;http://trac.webkit.org/changeset/62272&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245410</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-01 10:15:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321377</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-13 13:51:38 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/73940 might have broken SnowLeopard Intel Release (Tests) and GTK Linux 64-bit Debug
The following tests are not passing:
editing/selection/extend-to-line-boundary.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>59812</attachid>
            <date>2010-06-25 17:06:14 -0700</date>
            <delta_ts>2010-06-25 17:06:14 -0700</delta_ts>
            <desc>Example form.</desc>
            <filename>form.html</filename>
            <type>text/html</type>
            <size>3526</size>
            <attacher name="David Holloway">dhollowa</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIj4KPGh0bWw+
Cgk8aGVhZD4KCQk8dGl0bGU+QXV0b0ZpbGwgRm9ybTwvdGl0bGU+Cgk8L2hlYWQ+Cgk8Ym9keT4K
CQk8Zm9ybSBuYW1lPSJteSBmb3JtIiBhY3Rpb249ImZvcm0uaHRtbCIgbWV0aG9kPSJwb3N0Ij4K
CQkJPHA+CgkJCQk8bGFiZWwgZm9yPSJmaXJzdG5hbWUiPkZpcnN0IE5hbWU6PC9sYWJlbD4gPGlu
cHV0IHR5cGU9InRleHQiIGlkPSJmaXJzdG5hbWUiID48YnI+CgkJCQk8bGFiZWwgZm9yPSJsYXN0
bmFtZSI+TGFzdCBOYW1lOjwvbGFiZWw+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibGFzdG5hbWUi
ID48YnI+CgkJCQk8bGFiZWwgZm9yPSJlbWFpbCI+RW1haWw6PC9sYWJlbD4gPGlucHV0IHR5cGU9
InRleHQiIGlkPSJlbWFpbCIgPjxicj4KCQkJCTxsYWJlbCBmb3I9InBob25lIj5QaG9uZTo8L2xh
YmVsPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InBob25lIiA+PGJyPgoJCQkJPGxhYmVsIGZvcj0i
ZmF4Ij5GYXg6PC9sYWJlbD4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJmYXgiID48YnI+CgkJCQk8
bGFiZWwgZm9yPSJhZGRyZXNzIj5BZGRyZXNzOjwvbGFiZWw+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBp
ZD0iYWRkcmVzcyIgPjxicj4KCQkJCTxsYWJlbCBmb3I9ImNpdHkiPkNpdHk6PC9sYWJlbD4gPGlu
cHV0IHR5cGU9InRleHQiIGlkPSJjaXR5IiA+PGJyPgoJCQkJPGxhYmVsIGZvcj0ic3RhdGUiPlN0
YXRlOjwvbGFiZWw+IDxzZWxlY3QgbmFtZT0ic3RhdGUiPgoJCQkJCTxvcHRpb24gc2VsZWN0ZWQ+
CgkJCQkJCT8KCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlBQQoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCUFFCgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJQUsKCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlBTAoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCUFQCgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJQVIKCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlBUwoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCUFaCgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJQ0EKCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlDTwoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCUNUCgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJREMKCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlERQoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCUZMCgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJR0EKCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlHVQoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCUhJCgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJSUEKCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlJRAoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCUlMCgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJSU4KCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlLUwoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCUtZCgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJTEEKCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlNQQoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCU1ECgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJTUUKCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlNSQoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCU1OCgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJTU8KCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlNUAoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCU1TCgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJTVQKCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlOQwoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCU5ECgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJTkUKCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlOSAoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCU5KCgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJTk0KCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlOVgoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCU5ZCgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJT0gKCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlPSwoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCU9SCgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJUEEKCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlQUgoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCVBXCgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJUkkKCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlTQwoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCVNECgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJVE4KCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlUWAoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCVVUCgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJVkEKCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlWSQoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCVZUCgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJV0EKCQkJCQk8L29wdGlvbj4KCQkJCQk8b3B0aW9uPgoJCQkJCQlXSQoJCQkJCTwvb3B0
aW9uPgoJCQkJCTxvcHRpb24+CgkJCQkJCVdWCgkJCQkJPC9vcHRpb24+CgkJCQkJPG9wdGlvbj4K
CQkJCQkJV1kKCQkJCQk8L29wdGlvbj4KCQkJCTwvc2VsZWN0Pjxicj4KCQkJCTxsYWJlbCBmb3I9
InppcGNvZGUiPlppcDo8L2xhYmVsPiA8aW5wdXQgc2l6ZT0iMTAiIG1heD0iMTAiIHR5cGU9InRl
eHQiIGlkPSJ6aXBjb2RlIiA+PGJyPgoJCQkJPGxhYmVsIGZvcj0iY291bnRyeSI+Q291bnRyeTo8
L2xhYmVsPiA8aW5wdXQgc2l6ZT0iMTAiIG1heD0iMTAiIHR5cGU9InRleHQiIGlkPSJjb3VudHJ5
Ij48YnI+CgkJCQk8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNleCIgdmFsdWU9Ik1hbGUiPk1h
bGU8YnI+CgkJCQk8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNleCIgdmFsdWU9IkZlbWFsZSI+
RmVtYWxlPGJyPgoJCQkJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9InNlbmQiPiA8aW5wdXQg
dHlwZT0icmVzZXQiPgoJCQk8L3A+CgkJPC9mb3JtPgoJPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59819</attachid>
            <date>2010-06-25 17:51:08 -0700</date>
            <delta_ts>2010-06-25 18:03:26 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>autofill_popup.patch</filename>
            <type>text/plain</type>
            <size>57322</size>
            <attacher name="David Holloway">dhollowa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjE5MjEpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODMgQEAKKzIwMTAtMDYtMjUgIERhdmlk
IEhvbGxvd2F5ICA8ZGhvbGxvd2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29uc29saWRhdGVzIEF1dG9G
aWxsIGFuZCBBdXRvY29tcGxldGUgcG9wdXAgbWVudXMgaW50byBhIHNpbmdsZSBwb3B1cCBtZW51
LgorCisgICAgICAgIFRoaXMgY2hhbmdlIGNvbWJpbmVzIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xp
ZW50LCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudCwgYW5kIAorCQlBdXRvY29tcGxldGVQb3B1cE1l
bnVDbGllbnQgY2xhc3NlcyBpbnRvIGEgc2luZ2xlIGNvbnNvbGlkYXRlZCBBdXRvRmlsbFBvcHVw
TWVudUNsaWVudCBjbGFzcy4KKwkJUHJpb3IgdG8gdGhpcyBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9m
IHRoZSBBdXRvRmlsbCBwb3B1cCBtZW51IG9ubHkgaW5jbHVkZWQgQXV0b0ZpbGwKKwkJc3VnZ2Vz
dGlvbnMgYW5kIHNpbWlsYXJseSB0aGUgQXV0b2NvbXBsZXRlIHBvcHVwIG1lbnUgb25seSBpbmNs
dWRlZCBBdXRvY29tcGxldGUKKwkJc3VnZ2VzdGlvbnMuICBXaXRoIHRoaXMgY29uc29saWRhdGlv
biwgYm90aCBBdXRvRmlsbCBhbmQgQXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb25zIGNhbgorCQlub3cg
YmUgZGlzcGxheWVkIGluIGEgc2luZ2xlIG1lbnUuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMjM2CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgor
ICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5oOgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Lmg6
CisgICAgICAgICogc3JjL0F1dG9GaWxsUG9wdXBNZW51Q2xpZW50LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50KToK
KyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6On5BdXRvRmlsbFBvcHVw
TWVudUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojp2
YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6
c2VsZWN0aW9uQ2xlYXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xp
ZW50OjppdGVtVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50
OjppdGVtU3R5bGUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6
bWVudVN0eWxlKToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNs
aWVudFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGll
bnQ6OmNsaWVudFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBN
ZW51Q2xpZW50Ojpwb3B1cERpZEhpZGUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVw
TWVudUNsaWVudDo6c2V0VGV4dEZyb21JdGVtKToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQ
b3B1cE1lbnVDbGllbnQ6OmZvbnRTZWxlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OkF1dG9GaWxs
UG9wdXBNZW51Q2xpZW50Ojpob3N0V2luZG93KToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQ
b3B1cE1lbnVDbGllbnQ6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJLaXQ6OkF1dG9G
aWxsUG9wdXBNZW51Q2xpZW50Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6QXV0b0Zp
bGxQb3B1cE1lbnVDbGllbnQ6OmdldFdlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpBdXRvRmls
bFBvcHVwTWVudUNsaWVudDo6dGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAqIHNyYy9BdXRvRmls
bFBvcHVwTWVudUNsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNs
aWVudDo6aXRlbVRvb2xUaXApOgorICAgICAgICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNs
aWVudDo6aXRlbUFjY2Vzc2liaWxpdHlUZXh0KToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQ
b3B1cE1lbnVDbGllbnQ6Oml0ZW1Jc0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpBdXRvRmls
bFBvcHVwTWVudUNsaWVudDo6Y2xpZW50SW5zZXRMZWZ0KToKKyAgICAgICAgKFdlYktpdDo6QXV0
b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNsaWVudEluc2V0UmlnaHQpOgorICAgICAgICAoV2ViS2l0
OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6bGlzdFNpemUpOgorICAgICAgICAoV2ViS2l0OjpB
dXRvRmlsbFBvcHVwTWVudUNsaWVudDo6c2VsZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJLaXQ6
OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjppdGVtSXNMYWJlbCk6CisgICAgICAgIChXZWJLaXQ6
OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjppdGVtSXNTZWxlY3RlZCk6CisgICAgICAgIChXZWJL
aXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjpzaG91bGRQb3BPdmVyKToKKyAgICAgICAgKFdl
YktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OnZhbHVlU2hvdWxkQ2hhbmdlT25Ib3RUcmFj
ayk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjpzZXRBdXRvY29t
cGxldGVNb2RlKToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6Omdl
dFRleHRGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojpn
ZXRTZWxlY3RlZEluZGV4KToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGll
bnQ6OnNldFNlbGVjdGVkSW5kZXgpOgorICAgICAgICAqIHNyYy9BdXRvY29tcGxldGVQb3B1cE1l
bnVDbGllbnQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9BdXRvY29tcGxldGVQb3B1cE1l
bnVDbGllbnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvRWRpdG9yQ2xpZW50SW1wbC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudEltcGw6OnRleHRGaWVsZERpZEVuZEVkaXRp
bmcpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBsOjpkb0F1dG9maWxsKToKKyAg
ICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1wbDo6b25BdXRvY29tcGxldGVTdWdnZXN0aW9u
QWNjZXB0ZWQpOgorICAgICAgICAqIHNyYy9TdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogc3JjL1N1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50Lmg6IFJl
bW92ZWQuCisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lSW1wbDo6Y3VycmVudEhpc3RvcnlJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWVJbXBsOjpub3RpZml5UGFzc3dvcmRMaXN0ZW5lck9mQXV0b2NvbXBsZXRlKToKKyAgICAg
ICAgKiBzcmMvV2ViRnJhbWVJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OldlYlZp
ZXdJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6Om1vdXNlRG93bik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjptb3VzZVVwKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnNlbGVjdFBvcHVwSGFuZGxlS2V5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6YXV0b2NvbXBsZXRlSGFuZGxlS2V5RXZlbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6aGlkZUF1dG9GaWxsUG9wdXApOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6c2V0Rm9jdXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YXBwbHlB
dXRvRmlsbFN1Z2dlc3Rpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFwcGx5
QXV0b2NvbXBsZXRlU3VnZ2VzdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
aGlkZVBvcHVwcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZWZyZXNoQXV0b0Zp
bGxQb3B1cCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjphdXRvRmlsbFBvcHVwRGlkSGlkZSk6CisKIDIwMTAtMDYtMjUgIEpvaG4g
QWJkLUVsLU1hbGVrICA8amFtQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXZpZCBMZXZpbi4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA2MTkxNSkKKysrIFdlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsOCArMjMxLDYgQEAK
ICAgICAgICAgICAgICAgICAnc3JjL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9BcHBsaWNhdGlvbkNhY2hlSG9zdEludGVybmFsLmgnLAogICAgICAgICAg
ICAgICAgICdzcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAnLAotICAgICAgICAgICAgICAgICdz
cmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmNwcCcsCi0gICAgICAgICAgICAgICAgJ3Ny
Yy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9B
dXRvRmlsbFBvcHVwTWVudUNsaWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvQXV0b0Zp
bGxQb3B1cE1lbnVDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExp
c3RDbGllbnRJbXBsLmNwcCcsCkBAIC0zMTIsOCArMzEwLDYgQEAKICAgICAgICAgICAgICAgICAn
c3JjL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMv
U3RvcmFnZU5hbWVzcGFjZVByb3h5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9TdG9yYWdl
TmFtZXNwYWNlUHJveHkuaCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9TdWdnZXN0aW9uc1BvcHVw
TWVudUNsaWVudC5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMvU3VnZ2VzdGlvbnNQb3B1cE1l
bnVDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9UZW1wb3JhcnlHbHVlLmgnLAogICAg
ICAgICAgICAgICAgICdzcmMvVG9vbHNBZ2VudC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkFjY2Vzc2liaWxpdHlDYWNoZS5jcHAnLApJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUu
aAkocmV2aXNpb24gNjE5MTUpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4NCw2ICs0ODQsMTEgQEAgcHVibGljOgogICAgICAgICBXZWJJ
bnB1dEVsZW1lbnQsCiAgICAgICAgIFdlYlBhc3N3b3JkQXV0b2NvbXBsZXRlTGlzdGVuZXIqKSA9
IDA7CiAKKyAgICAvLyBEaXNwYXRjaGVzIGFuIEF1dG9jb21wbGV0aW9uIG5vdGlmaWNhdGlvbiB0
byByZWdpc3RlcmVkIGxpc3RlbmVyIGlmIG9uZQorICAgIC8vIGV4aXN0cyB0aGF0IGlzIHJlZ2lz
dGVyZWQgYWdhaW5zdCB0aGUgV2ViSW5wdXRFbGVtZW50IHNwZWNpZmllZC4KKyAgICB2aXJ0dWFs
IHZvaWQgbm90aWZpeVBhc3N3b3JkTGlzdGVuZXJPZkF1dG9jb21wbGV0ZSgKKyAgICAgICAgV2Vi
SW5wdXRFbGVtZW50KSA9IDA7CisKIAogICAgIC8vIFV0aWxpdHkgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlZpZXcuaAkocmV2aXNpb24gNjE5MTUpCisrKyBXZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDE3ICsyMzMsMTggQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCBhY2Nlc3NpYmlsaXR5T2Jq
ZWN0KCkgPSAwOwogCiAKLSAgICAvLyBBdXRvRmlsbCAvIEF1dG9jb21wbGV0ZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBBdXRvRmlsbCAgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogICAgIC8vIE5vdGlmaWVzIHRoZSBXZWJWaWV3IHRoYXQgQXV0b0ZpbGwgc3VnZ2VzdGlvbnMg
YXJlIGF2YWlsYWJsZSBmb3IgYSBub2RlLgogICAgIHZpcnR1YWwgdm9pZCBhcHBseUF1dG9GaWxs
U3VnZ2VzdGlvbnMoCiAgICAgICAgIGNvbnN0IFdlYk5vZGUmLAogICAgICAgICBjb25zdCBXZWJW
ZWN0b3I8V2ViU3RyaW5nPiYgbmFtZXMsCiAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJp
bmc+JiBsYWJlbHMsCi0gICAgICAgIGludCBkZWZhdWx0U3VnZ2VzdGlvbkluZGV4KSA9IDA7Cisg
ICAgICAgIGludCBzZXBhcmF0b3JJbmRleCkgPSAwOwogCiAgICAgLy8gTm90aWZpZXMgdGhlIFdl
YlZpZXcgdGhhdCBBdXRvY29tcGxldGUgc3VnZ2VzdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgYQog
ICAgIC8vIG5vZGUuCisgICAgLy8gREVQUkVDQVRFRDogbWVyZ2luZyB3aXRoIGFwcGx5QXV0b0Zp
bGxTdWdnZXN0aW9ucy4KICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBdXRvY29tcGxldGVTdWdnZXN0
aW9ucygKICAgICAgICAgY29uc3QgV2ViTm9kZSYsCiAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxX
ZWJTdHJpbmc+JiBzdWdnZXN0aW9ucywKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b0Zp
bGxQb3B1cE1lbnVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMv
QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuY3BwCShyZXZpc2lvbiA2MTkxNSkKKysrIFdlYktpdC9j
aHJvbWl1bS9zcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw3ICszMSwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkF1dG9GaWxs
UG9wdXBNZW51Q2xpZW50LmgiCiAKKyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5j
bHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJS
ZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIldlYk5vZGUuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcu
aCIKICNpbmNsdWRlICJXZWJWZWN0b3IuaCIKQEAgLTQyLDYgKzQ3LDE4IEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorQXV0b0ZpbGxQb3B1cE1lbnVD
bGllbnQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50KCkKKyAgICA6IG1fc2VwYXJhdG9ySW5kZXgo
LTEpCisgICAgLCBtX3NlbGVjdGVkSW5kZXgoLTEpCisgICAgLCBtX3RleHRGaWVsZCgwKQorICAg
ICwgbV9BdXRvY29tcGxldGVNb2RlRW5hYmxlZChmYWxzZSkKK3sKK30KKworQXV0b0ZpbGxQb3B1
cE1lbnVDbGllbnQ6On5BdXRvRmlsbFBvcHVwTWVudUNsaWVudCgpCit7Cit9CisKIHVuc2lnbmVk
IEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjpnZXRTdWdnZXN0aW9uc0NvdW50KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9uYW1lcy5zaXplKCkgKyAoKG1fc2VwYXJhdG9ySW5kZXggPT0gLTEpID8g
MCA6IDEpOwpAQCAtNzUsMTkgKzkyLDM4IEBAIHZvaWQgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6
OnJlbW92ZVN1Z2cKIAogdm9pZCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6dmFsdWVDaGFuZ2Vk
KHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQogewotICAgIFdlYlZpZXdJbXBs
KiB3ZWJWaWV3ID0gZ2V0V2ViVmlldygpOwotICAgIGlmICghd2ViVmlldykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1fc2VwYXJhdG9ySW5kZXggIT0gLTEgJiYgbGlzdEluZGV4ID4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2VwYXJhdG9ySW5kZXgpKQotICAgICAgICAtLWxpc3RJbmRl
eDsKLQotICAgIEFTU0VSVChsaXN0SW5kZXggPCBtX25hbWVzLnNpemUoKSk7Ci0KLSAgICB3ZWJW
aWV3LT5jbGllbnQoKS0+ZGlkQWNjZXB0QXV0b0ZpbGxTdWdnZXN0aW9uKFdlYk5vZGUoZ2V0VGV4
dEZpZWxkKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9uYW1lc1tsaXN0SW5kZXhdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9sYWJlbHNbbGlzdEluZGV4XSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJbmRleCk7CisgICAgLy8g
REVQUkVDQVRFRDogV2lsbCBiZSByZW1vdmVkIG9uY2UgQXV0b0ZpbGwgYW5kIEF1dG9jb21wbGV0
ZSBtZXJnZSBpcworICAgIC8vIGNvbXBsZXRlZC4KKyAgICBpZiAobV9BdXRvY29tcGxldGVNb2Rl
RW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShnZXRTdWdnZXN0
aW9uKGxpc3RJbmRleCkpOworCisgICAgICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3ID0gZ2V0V2Vi
VmlldygpOworICAgICAgICBpZiAoIXdlYlZpZXcpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgRWRpdG9yQ2xpZW50SW1wbCogZWRpdG9yID0KKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PEVkaXRvckNsaWVudEltcGwqPih3ZWJWaWV3LT5wYWdlKCktPmVkaXRvckNsaWVudCgpKTsKKyAg
ICAgICAgQVNTRVJUKGVkaXRvcik7CisgICAgICAgIGVkaXRvci0+b25BdXRvY29tcGxldGVTdWdn
ZXN0aW9uQWNjZXB0ZWQoCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50
Kj4obV90ZXh0RmllbGQuZ2V0KCkpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIFdl
YlZpZXdJbXBsKiB3ZWJWaWV3ID0gZ2V0V2ViVmlldygpOworICAgICAgaWYgKCF3ZWJWaWV3KQor
ICAgICAgICAgIHJldHVybjsKKworICAgICAgaWYgKG1fc2VwYXJhdG9ySW5kZXggIT0gLTEgJiYg
bGlzdEluZGV4ID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2VwYXJhdG9ySW5kZXgpKQorICAg
ICAgICAgIC0tbGlzdEluZGV4OworCisgICAgICBBU1NFUlQobGlzdEluZGV4IDwgbV9uYW1lcy5z
aXplKCkpOworCisgICAgICB3ZWJWaWV3LT5jbGllbnQoKS0+ZGlkQWNjZXB0QXV0b0ZpbGxTdWdn
ZXN0aW9uKFdlYk5vZGUoZ2V0VGV4dEZpZWxkKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX25hbWVzW2xpc3RJbmRleF0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbGFiZWxzW2xp
c3RJbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpc3RJbmRleCk7CisgICAgfQogfQogCiB2b2lkIEF1dG9GaWxsUG9wdXBNZW51Q2xp
ZW50OjpzZWxlY3Rpb25DaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRz
KQpAQCAtMTA4LDIyICsxNDQsNTIgQEAgdm9pZCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6c2Vs
ZWN0aW9uQwogCiB2b2lkIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjpzZWxlY3Rpb25DbGVhcmVk
KCkKIHsKLSAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IGdldFdlYlZpZXcoKTsKLSAgICBpZiAo
IXdlYlZpZXcpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBTYW1lIGVmZmVjdCBkZXNpcmVkIGFz
IHBvcHVwRGlkSGlkZSwgc28gY2FsbCB0aHJvdWdoLgorICAgIHBvcHVwRGlkSGlkZSgpOworfQog
Ci0gICAgd2ViVmlldy0+c3VnZ2VzdGlvbnNQb3B1cERpZEhpZGUoKTsKLSAgICB3ZWJWaWV3LT5j
bGllbnQoKS0+ZGlkQ2xlYXJBdXRvRmlsbFNlbGVjdGlvbihXZWJOb2RlKGdldFRleHRGaWVsZCgp
KSk7CitTdHJpbmcgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6Oml0ZW1UZXh0KHVuc2lnbmVkIGxp
c3RJbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0U3VnZ2VzdGlvbihsaXN0SW5kZXgpOwor
fQorCitQb3B1cE1lbnVTdHlsZSBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6aXRlbVN0eWxlKHVu
c2lnbmVkIGxpc3RJbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fc3R5bGU7Cit9CisKK1Bv
cHVwTWVudVN0eWxlIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjptZW51U3R5bGUoKSBjb25zdAor
eworICAgIHJldHVybiAqbV9zdHlsZTsKK30KKworaW50IEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50
OjpjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0Cit7CisgICAgLy8gQnVnIGh0dHA6Ly9jcmJ1Zy5j
b20vNzcwOCBzZWVtcyB0byBpbmRpY2F0ZSB0aGUgc3R5bGUgY2FuIGJlIDAuCisgICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gdGV4dEZpZWxkU3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+cG9w
dXBJbnRlcm5hbFBhZGRpbmdMZWZ0KHN0eWxlKTsKK30KKworaW50IEF1dG9GaWxsUG9wdXBNZW51
Q2xpZW50OjpjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAoreworICAgIC8vIEJ1ZyBodHRwOi8v
Y3JidWcuY29tLzc3MDggc2VlbXMgdG8gaW5kaWNhdGUgdGhlIHN0eWxlIGNhbiBiZSAwLgorICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRGaWVsZFN0eWxlKCk7CisgICAgaWYgKCFzdHlsZSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVt
ZSgpLT5wb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KHN0eWxlKTsKIH0KIAogdm9pZCBBdXRvRmls
bFBvcHVwTWVudUNsaWVudDo6cG9wdXBEaWRIaWRlKCkKIHsKLSAgICAvLyBGSVhNRTogUmVmYWN0
b3IgdGhpcyBtZXRob2QsIGFzIHNlbGVjdGlvbkNsZWFyZWQoKSBhbmQgcG9wdXBEaWRIaWRlKCkK
LSAgICAvLyBzaGFyZSB0aGUgZXhhY3Qgc2FtZSBmdW5jdGlvbmFsaXR5LgogICAgIFdlYlZpZXdJ
bXBsKiB3ZWJWaWV3ID0gZ2V0V2ViVmlldygpOwogICAgIGlmICghd2ViVmlldykKICAgICAgICAg
cmV0dXJuOwogCisgICAgd2ViVmlldy0+YXV0b0ZpbGxQb3B1cERpZEhpZGUoKTsKICAgICB3ZWJW
aWV3LT5jbGllbnQoKS0+ZGlkQ2xlYXJBdXRvRmlsbFNlbGVjdGlvbihXZWJOb2RlKGdldFRleHRG
aWVsZCgpKSk7CiB9CiAKQEAgLTEzMiw2ICsxOTgsMjkgQEAgYm9vbCBBdXRvRmlsbFBvcHVwTWVu
dUNsaWVudDo6aXRlbUlzU2VwYQogICAgIHJldHVybiAobV9zZXBhcmF0b3JJbmRleCAhPSAtMSAm
JiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zZXBhcmF0b3JJbmRleCkgPT0gbGlzdEluZGV4KTsK
IH0KIAordm9pZCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6c2V0VGV4dEZyb21JdGVtKHVuc2ln
bmVkIGxpc3RJbmRleCkKK3sKKyAgICBtX3RleHRGaWVsZC0+c2V0VmFsdWUoZ2V0U3VnZ2VzdGlv
bihsaXN0SW5kZXgpKTsKK30KKworRm9udFNlbGVjdG9yKiBBdXRvRmlsbFBvcHVwTWVudUNsaWVu
dDo6Zm9udFNlbGVjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90ZXh0RmllbGQtPmRvY3Vt
ZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+Zm9udFNlbGVjdG9yKCk7Cit9CisKK0hvc3RXaW5kb3cq
IEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojpob3N0V2luZG93KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV90ZXh0RmllbGQtPmRvY3VtZW50KCktPnZpZXcoKS0+aG9zdFdpbmRvdygpOworfQorCitQ
YXNzUmVmUHRyPFNjcm9sbGJhcj4gQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNyZWF0ZVNjcm9s
bGJhcigKKyAgICBTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwKKyAgICBTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbiwKKyAgICBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQoreworICAg
IHJldHVybiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihjbGllbnQsIG9yaWVudGF0
aW9uLCBzaXplKTsKK30KKwogdm9pZCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6aW5pdGlhbGl6
ZSgKICAgICBIVE1MSW5wdXRFbGVtZW50KiB0ZXh0RmllbGQsCiAgICAgY29uc3QgV2ViVmVjdG9y
PFdlYlN0cmluZz4mIG5hbWVzLApAQCAtMTQxLDExICsyMzAsMjYgQEAgdm9pZCBBdXRvRmlsbFBv
cHVwTWVudUNsaWVudDo6aW5pdGlhbGl6ZQogICAgIEFTU0VSVChuYW1lcy5zaXplKCkgPT0gbGFi
ZWxzLnNpemUoKSk7CiAgICAgQVNTRVJUKHNlcGFyYXRvckluZGV4IDwgc3RhdGljX2Nhc3Q8aW50
PihuYW1lcy5zaXplKCkpKTsKIAorICAgIG1fc2VsZWN0ZWRJbmRleCA9IC0xOworICAgIG1fdGV4
dEZpZWxkID0gdGV4dEZpZWxkOworCiAgICAgLy8gVGhlIHN1Z2dlc3Rpb25zIG11c3QgYmUgc2V0
IGJlZm9yZSBpbml0aWFsaXppbmcgdGhlCi0gICAgLy8gU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGll
bnQuCisgICAgLy8gQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuCiAgICAgc2V0U3VnZ2VzdGlvbnMo
bmFtZXMsIGxhYmVscywgc2VwYXJhdG9ySW5kZXgpOwogCi0gICAgU3VnZ2VzdGlvbnNQb3B1cE1l
bnVDbGllbnQ6OmluaXRpYWxpemUodGV4dEZpZWxkLCAtMSk7CisgICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbjsKKyAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3Rl
bUZvbnQoQ1NTVmFsdWVXZWJraXRDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24pOworICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IG1fdGV4dEZpZWxkLT5jb21wdXRlZFN0eWxlKCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNl
dENvbXB1dGVkU2l6ZShzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCkpOwor
CisgICAgRm9udCBmb250KGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7CisgICAgZm9udC51cGRhdGUo
dGV4dEZpZWxkLT5kb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPmZvbnRTZWxlY3RvcigpKTsK
KyAgICAvLyBUaGUgZGlyZWN0aW9uIG9mIHRleHQgaW4gcG9wdXAgbWVudSBpcyBzZXQgdGhlIHNh
bWUgYXMgdGhlIGRpcmVjdGlvbiBvZgorICAgIC8vIHRoZSBpbnB1dCBlbGVtZW50OiB0ZXh0Rmll
bGQuCisgICAgbV9zdHlsZS5zZXQobmV3IFBvcHVwTWVudVN0eWxlKENvbG9yOjpibGFjaywgQ29s
b3I6OndoaXRlLCBmb250LCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMZW5ndGgoV2ViQ29yZTo6Rml4ZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0RmllbGQtPnJlbmRlcmVyKCktPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7CiB9CiAK
IHZvaWQgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OnNldFN1Z2dlc3Rpb25zKGNvbnN0IFdlYlZl
Y3RvcjxXZWJTdHJpbmc+JiBuYW1lcywKQEAgLTE2OSw0ICsyNzMsMzAgQEAgdm9pZCBBdXRvRmls
bFBvcHVwTWVudUNsaWVudDo6c2V0U3VnZ2VzdAogICAgICAgICBzZXRTZWxlY3RlZEluZGV4KC0x
KTsKIH0KIAorV2ViVmlld0ltcGwqIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjpnZXRXZWJWaWV3
KCkgY29uc3QKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBtX3RleHRGaWVsZC0+ZG9jdW1lbnQoKS0+
ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFBhZ2Uq
IHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2hyb21lQ2xpZW50SW1wbCo+KHBhZ2UtPmNocm9t
ZSgpLT5jbGllbnQoKSktPndlYlZpZXcoKTsKK30KKworUmVuZGVyU3R5bGUqIEF1dG9GaWxsUG9w
dXBNZW51Q2xpZW50Ojp0ZXh0RmllbGRTdHlsZSgpIGNvbnN0Cit7CisgICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gbV90ZXh0RmllbGQtPmNvbXB1dGVkU3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlKSB7
CisgICAgICAgIC8vIEl0IHNlZW1zIHdlIGNhbiBvbmx5IGhhdmUgYSAwIHN0eWxlIGluIGEgVGV4
dEZpZWxkIGlmIHRoZQorICAgICAgICAvLyBub2RlIGlzIGRldGFjaGVkLCBpbiB3aGljaCBjYXNl
IHdlIHRoZSBwb3B1cCBzaG91ZCBub3QgYmUKKyAgICAgICAgLy8gc2hvd2luZy4gIFBsZWFzZSBy
ZXBvcnQgdGhpcyBpbiBodHRwOi8vY3JidWcuY29tLzc3MDggYW5kCisgICAgICAgIC8vIGluY2x1
ZGUgdGhlIHBhZ2UgeW91IHdlcmUgdmlzaXRpbmcuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKyAgICByZXR1cm4gc3R5bGU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvRmlsbFBvcHVwTWVudUNsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQu
aAkocmV2aXNpb24gNjE5MTUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9GaWxsUG9wdXBN
ZW51Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDMxICszMSw2NCBAQAogI2lmbmRlZiBB
dXRvRmlsbFBvcHVwTWVudUNsaWVudF9oCiAjZGVmaW5lIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50
X2gKIAotI2luY2x1ZGUgIlN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50LmgiCisjaW5jbHVkZSAi
UG9wdXBNZW51Q2xpZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEhUTUxJbnB1
dEVsZW1lbnQ7CitjbGFzcyBQb3B1cE1lbnVTdHlsZTsKK2NsYXNzIFJlbmRlclN0eWxlOwogfQog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdlYlZpZXdJbXBs
OwogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIAogLy8gVGhlIEF1dG9G
aWxsIHN1Z2dlc3Rpb25zIHBvcHVwIG1lbnUgY2xpZW50LCB1c2VkIHRvIGRpc3BsYXkgbmFtZSBz
dWdnZXN0aW9ucwogLy8gd2l0aCByaWdodC1qdXN0aWZpZWQgbGFiZWxzLgotY2xhc3MgQXV0b0Zp
bGxQb3B1cE1lbnVDbGllbnQgOiBwdWJsaWMgU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQgewor
Y2xhc3MgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6UG9wdXBNZW51
Q2xpZW50IHsKIHB1YmxpYzoKLSAgICAvLyBTdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudCBpbXBs
ZW1lbnRhdGlvbjoKKyAgICBBdXRvRmlsbFBvcHVwTWVudUNsaWVudCgpOworICAgIHZpcnR1YWwg
fkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50KCk7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIg
b2Ygc3VnZ2VzdGlvbnMgYXZhaWxhYmxlLgogICAgIHZpcnR1YWwgdW5zaWduZWQgZ2V0U3VnZ2Vz
dGlvbnNDb3VudCgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUgc3VnZ2VzdGlvbiBhdCB8
bGlzdEluZGV4fC4KICAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTdWdnZXN0aW9uKHVuc2lnbmVk
IGxpc3RJbmRleCkgY29uc3Q7CisKKyAgICAvLyBSZW1vdmVzIHRoZSBzdWdnZXN0aW9uIGF0IHxs
aXN0SW5kZXh8IGZyb20gdGhlIGxpc3Qgb2Ygc3VnZ2VzdGlvbnMuCiAgICAgdmlydHVhbCB2b2lk
IHJlbW92ZVN1Z2dlc3Rpb25BdEluZGV4KHVuc2lnbmVkIGxpc3RJbmRleCk7CiAKLSAgICAvLyBX
ZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQgaW1wbGVtZW50YXRpb246CisgICAgLy8gV2ViQ29yZTo6
UG9wdXBNZW51Q2xpZW50IG1ldGhvZHM6CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZCh1
bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRydWUpOwotICAgIHZpcnR1YWwg
dm9pZCBzZWxlY3Rpb25DaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRz
ID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvbkNoYW5nZWQodW5zaWduZWQsIGJv
b2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25DbGVhcmVkKCk7CisgICAgdmlydHVhbCBX
ZWJDb3JlOjpTdHJpbmcgaXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBpdGVtVG9vbFRpcCh1bnNpZ25lZCBsYXN0SW5kZXgpIGNv
bnN0IHsgcmV0dXJuIFdlYkNvcmU6OlN0cmluZygpOyB9CisgICAgdmlydHVhbCBXZWJDb3JlOjpT
dHJpbmcgaXRlbUFjY2Vzc2liaWxpdHlUZXh0KHVuc2lnbmVkIGxhc3RJbmRleCkgY29uc3QgeyBy
ZXR1cm4gV2ViQ29yZTo6U3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzRW5hYmxl
ZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OlBvcHVwTWVudVN0eWxlIGl0ZW1TdHlsZSh1bnNpZ25lZCBsaXN0SW5kZXgpIGNv
bnN0OworICAgIHZpcnR1YWwgV2ViQ29yZTo6UG9wdXBNZW51U3R5bGUgbWVudVN0eWxlKCkgY29u
c3Q7CisgICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRMZWZ0KCkgY29uc3QgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0UmlnaHQoKSBjb25zdCB7IHJldHVybiAwOyB9
CisgICAgdmlydHVhbCBpbnQgY2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGludCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBsaXN0U2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIGdldFN1Z2dlc3Rpb25zQ291bnQoKTsgfQorICAgIHZpcnR1YWwg
aW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGVkSW5kZXg7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRlKCk7CiAgICAgdmlydHVhbCBib29sIGl0ZW1Jc1Nl
cGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpdGVt
SXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCBib29sIGl0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUG9wT3ZlcigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHZhbHVlU2hvdWxkQ2hhbmdlT25Ib3RU
cmFjaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFRleHRG
cm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6Rm9udFNl
bGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6Okhvc3RX
aW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoCisgICAgICAgIFdlYkNvcmU6OlNjcm9sbGJh
ckNsaWVudCogY2xpZW50LAorICAgICAgICBXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbiwKKyAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFyQ29udHJvbFNpemUgc2l6ZSk7
CiAKICAgICB2b2lkIGluaXRpYWxpemUoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCosCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBuYW1lcywKQEAgLTY2
LDEyICs5OSwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJW
ZWN0b3I8V2ViU3RyaW5nPiYgbGFiZWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNl
cGFyYXRvckluZGV4KTsKIAorICAgIC8vIERFUFJFQ0FURUQ6IFdpbGwgYmUgcmVtb3ZlZCBvbmNl
IEF1dG9jb21wbGV0ZSBhbmQgQXV0b0ZpbGwgbWVyZ2UgaXMKKyAgICAvLyBjb21wbGV0ZS4KKyAg
ICB2b2lkIHNldEF1dG9jb21wbGV0ZU1vZGUoYm9vbCBlbmFibGVkKSB7IG1fQXV0b2NvbXBsZXRl
TW9kZUVuYWJsZWQgPSBlbmFibGVkOyB9CisKIHByaXZhdGU6CisgICAgV2ViVmlld0ltcGwqIGdl
dFdlYlZpZXcoKSBjb25zdDsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBnZXRUZXh0
RmllbGQoKSBjb25zdCB7IHJldHVybiBtX3RleHRGaWVsZC5nZXQoKTsgfQorICAgIFdlYkNvcmU6
OlJlbmRlclN0eWxlKiB0ZXh0RmllbGRTdHlsZSgpIGNvbnN0OworCisgICAgaW50IGdldFNlbGVj
dGVkSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGVkSW5kZXg7IH0KKyAgICB2b2lkIHNl
dFNlbGVjdGVkSW5kZXgoaW50IGluZGV4KSB7IG1fc2VsZWN0ZWRJbmRleCA9IGluZGV4OyB9CisK
KyAgICAvLyBUaGUgbmFtZXMgYW5kIGxhYmVscyB0aGF0IG1ha2UgdXAgdGhlIHRleHQgb2YgdGhl
IG1lbnUgaXRlbXMuCiAgICAgVmVjdG9yPFdlYkNvcmU6OlN0cmluZz4gbV9uYW1lczsKICAgICBW
ZWN0b3I8V2ViQ29yZTo6U3RyaW5nPiBtX2xhYmVsczsKIAogICAgIC8vIFRoZSBpbmRleCBvZiB0
aGUgc2VwYXJhdG9yLiAgLTEgaWYgdGhlcmUgaXMgbm8gc2VwYXJhdG9yLgogICAgIGludCBtX3Nl
cGFyYXRvckluZGV4OworCisgICAgLy8gVGhlIGluZGV4IG9mIHRoZSBzZWxlY3RlZCBpdGVtLiAg
LTEgaWYgdGhlcmUgaXMgbm8gc2VsZWN0ZWQgaXRlbS4KKyAgICBpbnQgbV9zZWxlY3RlZEluZGV4
OworCisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ+IG1fdGV4dEZpZWxkOwor
ICAgIE93blB0cjxXZWJDb3JlOjpQb3B1cE1lbnVTdHlsZT4gbV9zdHlsZTsKKworICAgIC8vIERF
UFJFQ0FURUQ6IFdpbGwgYmUgcmVtb3ZlZCBvbmNlIEF1dG9jb21wbGV0ZSBhbmQgQXV0b0ZpbGwg
bWVyZ2UgaXMKKyAgICAvLyBjb21wbGV0ZS4KKyAgICBib29sIG1fQXV0b2NvbXBsZXRlTW9kZUVu
YWJsZWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9zcmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vc3JjL0F1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudC5jcHAJKHJldmlzaW9u
IDYxOTE1KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGll
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmgiCi0KLSNpbmNsdWRlICJI
VE1MSW5wdXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiV2ViU3RyaW5nLmgiCi0jaW5jbHVkZSAiV2Vi
VmVjdG9yLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotdW5zaWduZWQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpnZXRTdWdnZXN0aW9u
c0NvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdWdnZXN0aW9ucy5zaXplKCk7Ci19Ci0K
LVdlYlN0cmluZyBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OmdldFN1Z2dlc3Rpb24odW5z
aWduZWQgbGlzdEluZGV4KSBjb25zdAotewotICAgIEFTU0VSVChsaXN0SW5kZXggPCBtX3N1Z2dl
c3Rpb25zLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1fc3VnZ2VzdGlvbnNbbGlzdEluZGV4XTsKLX0K
LQotdm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OnJlbW92ZVN1Z2dlc3Rpb25BdElu
ZGV4KHVuc2lnbmVkIGxpc3RJbmRleCkKLXsKLSAgICBBU1NFUlQobGlzdEluZGV4IDwgbV9zdWdn
ZXN0aW9ucy5zaXplKCkpOwotICAgIG1fc3VnZ2VzdGlvbnMucmVtb3ZlKGxpc3RJbmRleCk7Ci19
Ci0KLXZvaWQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Ojppbml0aWFsaXplKAotICAgIEhU
TUxJbnB1dEVsZW1lbnQqIHRleHRGaWVsZCwKLSAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5n
PiYgc3VnZ2VzdGlvbnMsCi0gICAgaW50IGRlZmF1bHRTdWdnZXN0aW9uSW5kZXgpCi17Ci0gICAg
QVNTRVJUKGRlZmF1bHRTdWdnZXN0aW9uSW5kZXggPCBzdGF0aWNfY2FzdDxpbnQ+KHN1Z2dlc3Rp
b25zLnNpemUoKSkpOwotCi0gICAgLy8gVGhlIHN1Z2dlc3Rpb25zIG11c3QgYmUgc2V0IGJlZm9y
ZSBpbml0aWFsaXppbmcgdGhlCi0gICAgLy8gU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQuCi0g
ICAgc2V0U3VnZ2VzdGlvbnMoc3VnZ2VzdGlvbnMpOwotCi0gICAgU3VnZ2VzdGlvbnNQb3B1cE1l
bnVDbGllbnQ6OmluaXRpYWxpemUodGV4dEZpZWxkLCBkZWZhdWx0U3VnZ2VzdGlvbkluZGV4KTsK
LX0KLQotdm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OnNldFN1Z2dlc3Rpb25zKGNv
bnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBzdWdnZXN0aW9ucykKLXsKLSAgICBtX3N1Z2dlc3Rp
b25zLmNsZWFyKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWdnZXN0aW9ucy5zaXpl
KCk7ICsraSkKLSAgICAgICAgbV9zdWdnZXN0aW9ucy5hcHBlbmQoc3VnZ2VzdGlvbnNbaV0pOwot
Ci0gICAgLy8gVHJ5IHRvIHByZXNlcnZlIHNlbGVjdGlvbiBpZiBwb3NzaWJsZS4KLSAgICBpZiAo
Z2V0U2VsZWN0ZWRJbmRleCgpID49IHN0YXRpY19jYXN0PGludD4oc3VnZ2VzdGlvbnMuc2l6ZSgp
KSkKLSAgICAgICAgc2V0U2VsZWN0ZWRJbmRleCgtMSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9jb21wbGV0ZVBvcHVw
TWVudUNsaWVudC5oCShyZXZpc2lvbiA2MTkxNSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0
b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50X2gKLSNkZWZpbmUgQXV0b2NvbXBs
ZXRlUG9wdXBNZW51Q2xpZW50X2gKLSAKLSNpbmNsdWRlICJTdWdnZXN0aW9uc1BvcHVwTWVudUNs
aWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBIVE1MSW5wdXRFbGVtZW50Owot
fQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlN0cmluZzsKLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7Ci0KLS8vIFRoZSBBdXRvY29tcGxldGUgc3VnZ2VzdGlv
bnMgcG9wdXAgbWVudSBjbGllbnQsIHVzZWQgdG8gZGlzcGxheSBhIGxpc3Qgb2YKLS8vIGF1dG9j
b21wbGV0ZSBzdWdnZXN0aW9ucy4KLWNsYXNzIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudCA6
IHB1YmxpYyBTdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgLy8gU3Vn
Z2VzdGlvbnNQb3B1cE1lbnVDbGllbnQgaW1wbGVtZW50YXRpb246Ci0gICAgdmlydHVhbCB1bnNp
Z25lZCBnZXRTdWdnZXN0aW9uc0NvdW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBXZWJTdHJpbmcg
Z2V0U3VnZ2VzdGlvbih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVTdWdnZXN0aW9uQXRJbmRleCh1bnNpZ25lZCBsaXN0SW5kZXgpOwotCi0gICAgdm9p
ZCBpbml0aWFsaXplKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqLAotICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgc3VnZ2VzdGlvbnMsCi0gICAgICAgICAg
ICAgICAgICAgIGludCBkZWZhdWx0U3VnZ2VzdGlvbkluZGV4KTsKLQotICAgIHZvaWQgc2V0U3Vn
Z2VzdGlvbnMoY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mKTsKLQotcHJpdmF0ZToKLSAgICBW
ZWN0b3I8V2ViQ29yZTo6U3RyaW5nPiBtX3N1Z2dlc3Rpb25zOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9FZGl0b3JDbGll
bnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0VkaXRvckNsaWVu
dEltcGwuY3BwCShyZXZpc2lvbiA2MTkxNSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvRWRpdG9y
Q2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1OCw3ICs2NTgsNyBAQCB2b2lkIEVk
aXRvckNsaWVudEltcGw6OnRleHRGaWVsZERpZEVuZEVkCiAgICAgbV9hdXRvZmlsbFRpbWVyLnN0
b3AoKTsKIAogICAgIC8vIEhpZGUgYW55IHNob3dpbmcgcG9wdXAuCi0gICAgbV93ZWJWaWV3LT5o
aWRlU3VnZ2VzdGlvbnNQb3B1cCgpOworICAgIG1fd2ViVmlldy0+aGlkZUF1dG9GaWxsUG9wdXAo
KTsKIAogICAgIGlmICghbV93ZWJWaWV3LT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuOyAvLyBU
aGUgcGFnZSBpcyBnZXR0aW5nIGNsb3NlZCwgZG9uJ3QgZmlsbCB0aGUgcGFzc3dvcmQuCkBAIC03
NTQsNyArNzU0LDcgQEAgdm9pZCBFZGl0b3JDbGllbnRJbXBsOjpkb0F1dG9maWxsKFRpbWVyPAog
ICAgICAgICAgICAgICAgICAgICAgICAmJiBpbnB1dEVsZW1lbnQtPnNlbGVjdGlvbkVuZCgpID09
IHN0YXRpY19jYXN0PGludD4odmFsdWUubGVuZ3RoKCkpOwogCiAgICAgaWYgKCghYXJncy0+YXV0
b2ZpbGxPbkVtcHR5VmFsdWUgJiYgdmFsdWUuaXNFbXB0eSgpKSB8fCAhaXNDYXJldEF0RW5kKSB7
Ci0gICAgICAgIG1fd2ViVmlldy0+aGlkZVN1Z2dlc3Rpb25zUG9wdXAoKTsKKyAgICAgICAgbV93
ZWJWaWV3LT5oaWRlQXV0b0ZpbGxQb3B1cCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC03OTYsMTEgKzc5Niw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50SW1wbDo6b25BdXRvY29tcGxldGVT
dWcKICAgICBpZiAoIXdlYmZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJQYXNzd29y
ZEF1dG9jb21wbGV0ZUxpc3RlbmVyKiBsaXN0ZW5lciA9IHdlYmZyYW1lLT5nZXRQYXNzd29yZExp
c3RlbmVyKHRleHRGaWVsZCk7Ci0gICAgLy8gUGFzc3dvcmQgbGlzdGVuZXJzIG5lZWQgdG8gYXV0
b2NvbXBsZXRlIG90aGVyIGZpZWxkcyB0aGF0IGRlcGVuZCBvbiB0aGUKLSAgICAvLyBpbnB1dCBl
bGVtZW50IHdpdGggYXV0b2ZpbGwgc3VnZ2VzdGlvbnMuCi0gICAgaWYgKGxpc3RlbmVyKQotICAg
ICAgICBsaXN0ZW5lci0+cGVyZm9ybUlubGluZUF1dG9jb21wbGV0ZSh0ZXh0RmllbGQtPnZhbHVl
KCksIGZhbHNlLCBmYWxzZSk7CisgICAgd2ViZnJhbWUtPm5vdGlmaXlQYXNzd29yZExpc3RlbmVy
T2ZBdXRvY29tcGxldGUoV2ViSW5wdXRFbGVtZW50KHRleHRGaWVsZCkpOwogfQogCiBib29sIEVk
aXRvckNsaWVudEltcGw6OmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChFbGVtZW50KiBlbGVt
ZW50LApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9TdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9TdWdnZXN0aW9uc1BvcHVw
TWVudUNsaWVudC5jcHAJKHJldmlzaW9uIDYxOTE1KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9T
dWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTg0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3VnZ2VzdGlvbnNQb3B1cE1lbnVD
bGllbnQuaCIKLQotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NW
YWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1l
LmgiCi0jaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1TdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudDo6U3Vn
Z2VzdGlvbnNQb3B1cE1lbnVDbGllbnQoKQotICAgIDogbV90ZXh0RmllbGQoMCkKLSAgICAsIG1f
c2VsZWN0ZWRJbmRleCgwKQotewotfQotCi1TdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudDo6flN1
Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50KCkKLXsKLX0KLQotLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzIHBlci1kZXJpdmVkIGNsYXNzPwotdm9pZCBTdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudDo6
dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQotewotICAg
IG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShnZXRTdWdnZXN0aW9uKGxpc3RJbmRleCkpOwotCi0gICAg
V2ViVmlld0ltcGwqIHdlYlZpZXcgPSBnZXRXZWJWaWV3KCk7Ci0gICAgaWYgKCF3ZWJWaWV3KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBFZGl0b3JDbGllbnRJbXBsKiBlZGl0b3IgPQotICAgICAg
ICBzdGF0aWNfY2FzdDxFZGl0b3JDbGllbnRJbXBsKj4od2ViVmlldy0+cGFnZSgpLT5lZGl0b3JD
bGllbnQoKSk7Ci0gICAgQVNTRVJUKGVkaXRvcik7Ci0gICAgZWRpdG9yLT5vbkF1dG9jb21wbGV0
ZVN1Z2dlc3Rpb25BY2NlcHRlZCgKLSAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dCo+KG1fdGV4dEZpZWxkLmdldCgpKSk7Ci19Ci0KLVN0cmluZyBTdWdnZXN0aW9uc1BvcHVwTWVu
dUNsaWVudDo6aXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAotewotICAgIHJldHVy
biBnZXRTdWdnZXN0aW9uKGxpc3RJbmRleCk7Ci19Ci0KLVBvcHVwTWVudVN0eWxlIFN1Z2dlc3Rp
b25zUG9wdXBNZW51Q2xpZW50OjppdGVtU3R5bGUodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAot
ewotICAgIHJldHVybiAqbV9zdHlsZTsKLX0KLQotUG9wdXBNZW51U3R5bGUgU3VnZ2VzdGlvbnNQ
b3B1cE1lbnVDbGllbnQ6Om1lbnVTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICptX3N0eWxl
OwotfQotCi1pbnQgU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ6OmNsaWVudFBhZGRpbmdMZWZ0
KCkgY29uc3QKLXsKLSAgICAvLyBCdWcgaHR0cDovL2NyYnVnLmNvbS83NzA4IHNlZW1zIHRvIGlu
ZGljYXRlIHRoZSBzdHlsZSBjYW4gYmUgMC4KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0
RmllbGRTdHlsZSgpOwotICAgIGlmICghc3R5bGUpCi0gICAgICAgcmV0dXJuIDA7Ci0KLSAgICBy
ZXR1cm4gUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5wb3B1cEludGVybmFsUGFkZGluZ0xl
ZnQoc3R5bGUpOwotfQotCi1pbnQgU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ6OmNsaWVudFBh
ZGRpbmdSaWdodCgpIGNvbnN0Ci17Ci0gICAgLy8gQnVnIGh0dHA6Ly9jcmJ1Zy5jb20vNzcwOCBz
ZWVtcyB0byBpbmRpY2F0ZSB0aGUgc3R5bGUgY2FuIGJlIDAuCi0gICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gdGV4dEZpZWxkU3R5bGUoKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnBvcHVwSW50ZXJu
YWxQYWRkaW5nUmlnaHQoc3R5bGUpOwotfQotCi12b2lkIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xp
ZW50Ojpwb3B1cERpZEhpZGUoKQotewotICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3ID0gZ2V0V2Vi
VmlldygpOwotICAgIGlmICh3ZWJWaWV3KQotICAgICAgICB3ZWJWaWV3LT5zdWdnZXN0aW9uc1Bv
cHVwRGlkSGlkZSgpOwotfQotCi12b2lkIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50OjpzZXRU
ZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdEluZGV4KQotewotICAgIG1fdGV4dEZpZWxkLT5zZXRW
YWx1ZShnZXRTdWdnZXN0aW9uKGxpc3RJbmRleCkpOwotfQotCi1Gb250U2VsZWN0b3IqIFN1Z2dl
c3Rpb25zUG9wdXBNZW51Q2xpZW50Ojpmb250U2VsZWN0b3IoKSBjb25zdAotewotICAgIHJldHVy
biBtX3RleHRGaWVsZC0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5mb250U2VsZWN0b3Io
KTsKLX0KLQotSG9zdFdpbmRvdyogU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ6Omhvc3RXaW5k
b3coKSBjb25zdAotewotICAgIHJldHVybiBtX3RleHRGaWVsZC0+ZG9jdW1lbnQoKS0+dmlldygp
LT5ob3N0V2luZG93KCk7Ci19Ci0KLVBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBTdWdnZXN0aW9uc1Bv
cHVwTWVudUNsaWVudDo6Y3JlYXRlU2Nyb2xsYmFyKAotICAgIFNjcm9sbGJhckNsaWVudCogY2xp
ZW50LAotICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLAotICAgIFNjcm9sbGJh
ckNvbnRyb2xTaXplIHNpemUpCi17Ci0gICAgcmV0dXJuIFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZl
U2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRpb24sIHNpemUpOwotfQotCi1SZW5kZXJTdHlsZSog
U3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ6OnRleHRGaWVsZFN0eWxlKCkgY29uc3QKLXsKLSAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3RleHRGaWVsZC0+Y29tcHV0ZWRTdHlsZSgpOwotICAg
IGlmICghc3R5bGUpIHsKLSAgICAgICAgLy8gSXQgc2VlbXMgd2UgY2FuIG9ubHkgaGF2ZSBhIDAg
c3R5bGUgaW4gYSBUZXh0RmllbGQgaWYgdGhlCi0gICAgICAgIC8vIG5vZGUgaXMgZGV0YWNoZWQs
IGluIHdoaWNoIGNhc2Ugd2UgdGhlIHBvcHVwIHNob3VkIG5vdCBiZQotICAgICAgICAvLyBzaG93
aW5nLiAgUGxlYXNlIHJlcG9ydCB0aGlzIGluIGh0dHA6Ly9jcmJ1Zy5jb20vNzcwOCBhbmQKLSAg
ICAgICAgLy8gaW5jbHVkZSB0aGUgcGFnZSB5b3Ugd2VyZSB2aXNpdGluZy4KLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiBzdHlsZTsKLX0KLQotdm9pZCBT
dWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudDo6aW5pdGlhbGl6ZShIVE1MSW5wdXRFbGVtZW50KiB0
ZXh0RmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBkZWZhdWx0U3VnZ2VzdGlvbkluZGV4KQotewotICAgIG1fdGV4dEZpZWxkID0gdGV4dEZpZWxk
OwotICAgIG1fc2VsZWN0ZWRJbmRleCA9IGRlZmF1bHRTdWdnZXN0aW9uSW5kZXg7Ci0KLSAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwotICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0
VGhlbWUoKS0+c3lzdGVtRm9udChDU1NWYWx1ZVdlYmtpdENvbnRyb2wsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbik7Ci0gICAgUmVu
ZGVyU3R5bGUqIHN0eWxlID0gbV90ZXh0RmllbGQtPmNvbXB1dGVkU3R5bGUoKTsKLSAgICBmb250
RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5jb21w
dXRlZFNpemUoKSk7Ci0KLSAgICBGb250IGZvbnQoZm9udERlc2NyaXB0aW9uLCAwLCAwKTsKLSAg
ICBmb250LnVwZGF0ZSh0ZXh0RmllbGQtPmRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+Zm9u
dFNlbGVjdG9yKCkpOwotICAgIC8vIFRoZSBkaXJlY3Rpb24gb2YgdGV4dCBpbiBwb3B1cCBtZW51
IGlzIHNldCB0aGUgc2FtZSBhcyB0aGUgZGlyZWN0aW9uIG9mCi0gICAgLy8gdGhlIGlucHV0IGVs
ZW1lbnQ6IHRleHRGaWVsZC4KLSAgICBtX3N0eWxlLnNldChuZXcgUG9wdXBNZW51U3R5bGUoQ29s
b3I6OmJsYWNrLCBDb2xvcjo6d2hpdGUsIGZvbnQsIHRydWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIExlbmd0aChXZWJDb3JlOjpGaXhlZCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+ZGlyZWN0
aW9uKCkpKTsKLX0KLQotV2ViVmlld0ltcGwqIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50Ojpn
ZXRXZWJWaWV3KCkgY29uc3QKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBtX3RleHRGaWVsZC0+ZG9j
dW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2hyb21lQ2xpZW50SW1wbCo+KHBh
Z2UtPmNocm9tZSgpLT5jbGllbnQoKSktPndlYlZpZXcoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1N1Z2dlc3Rpb25zUG9wdXBNZW51Q2xp
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9TdWdnZXN0aW9uc1BvcHVw
TWVudUNsaWVudC5oCShyZXZpc2lvbiA2MTkxNSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvU3Vn
Z2VzdGlvbnNQb3B1cE1lbnVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKLQotI2lmbmRlZiBTdWdnZXN0aW9uc1BvcHVw
TWVudUNsaWVudF9oCi0jZGVmaW5lIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50X2gKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSFRNTElucHV0RWxlbWVudDsKLWNsYXNzIFBvcHVwTWVu
dVN0eWxlOwotY2xhc3MgUmVuZGVyU3R5bGU7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xh
c3MgV2ViU3RyaW5nOwotY2xhc3MgV2ViVmlld0ltcGw7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
Y2xhc3MgV2ViVmVjdG9yOwotCi0vLyBUaGUgU3VnZ2VzdGlvbnMgcG9wdXAgbWVudSBjbGllbnQs
IHVzZWQgdG8gZGlzcGxheSBhIGxpc3Qgb2Ygc3VnZ2VzdGlvbnMuCi1jbGFzcyBTdWdnZXN0aW9u
c1BvcHVwTWVudUNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQgewotcHVi
bGljOgotICAgIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50KCk7Ci0gICAgdmlydHVhbCB+U3Vn
Z2VzdGlvbnNQb3B1cE1lbnVDbGllbnQoKTsKLQotICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBv
ZiBzdWdnZXN0aW9ucyBhdmFpbGFibGUuCi0gICAgdmlydHVhbCB1bnNpZ25lZCBnZXRTdWdnZXN0
aW9uc0NvdW50KCkgY29uc3QgPSAwOwotCi0gICAgLy8gUmV0dXJucyB0aGUgc3VnZ2VzdGlvbiBh
dCB8bGlzdEluZGV4fC4KLSAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTdWdnZXN0aW9uKHVuc2ln
bmVkIGxpc3RJbmRleCkgY29uc3QgPSAwOwotCi0gICAgLy8gUmVtb3ZlcyB0aGUgc3VnZ2VzdGlv
biBhdCB8bGlzdEluZGV4fCBmcm9tIHRoZSBsaXN0IG9mIHN1Z2dlc3Rpb25zLgotICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVTdWdnZXN0aW9uQXRJbmRleCh1bnNpZ25lZCBsaXN0SW5kZXgpID0gMDsK
LQotICAgIC8vIFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCBtZXRob2RzOgotICAgIHZpcnR1YWwg
dm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVudHMgPSB0
cnVlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCh1bnNpZ25lZCwgYm9vbCkg
e30KLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2xlYXJlZCgpIHt9Ci0gICAgdmlydHVhbCBX
ZWJDb3JlOjpTdHJpbmcgaXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBpdGVtVG9vbFRpcCh1bnNpZ25lZCBsYXN0SW5kZXgpIGNv
bnN0IHsgcmV0dXJuIFdlYkNvcmU6OlN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpT
dHJpbmcgaXRlbUFjY2Vzc2liaWxpdHlUZXh0KHVuc2lnbmVkIGxhc3RJbmRleCkgY29uc3QgeyBy
ZXR1cm4gV2ViQ29yZTo6U3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzRW5hYmxl
ZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFs
IFdlYkNvcmU6OlBvcHVwTWVudVN0eWxlIGl0ZW1TdHlsZSh1bnNpZ25lZCBsaXN0SW5kZXgpIGNv
bnN0OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6UG9wdXBNZW51U3R5bGUgbWVudVN0eWxlKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRMZWZ0KCkgY29uc3QgeyByZXR1cm4gMDsg
fQotICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0UmlnaHQoKSBjb25zdCB7IHJldHVybiAwOyB9
Ci0gICAgdmlydHVhbCBpbnQgY2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGludCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBsaXN0U2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIGdldFN1Z2dlc3Rpb25zQ291bnQoKTsgfQotICAgIHZpcnR1YWwg
aW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGVkSW5kZXg7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRlKCk7Ci0gICAgdmlydHVhbCBib29sIGl0ZW1Jc1Nl
cGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBib29sIGl0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VsZWN0ZWQodW5zaWduZWQgbGlz
dEluZGV4KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRQ
b3BPdmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgdmFsdWVT
aG91bGRDaGFuZ2VPbkhvdFRyYWNrKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0VGV4dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRleCk7Ci0gICAgdmlydHVh
bCBXZWJDb3JlOjpGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0OwotICAgIHZpcnR1
YWwgV2ViQ29yZTo6SG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0OwotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcigKLSAgICAgICAg
V2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsCi0gICAgICAgIFdlYkNvcmU6OlNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLAotICAgICAgICBXZWJDb3JlOjpTY3JvbGxiYXJD
b250cm9sU2l6ZSBzaXplKTsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgaW5pdGlhbGl6ZShXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50KiB0ZXh0RmllbGQsCi0gICAgICAgICAgICAgICAgICAgIGlu
dCBkZWZhdWx0U3VnZ2VzdGlvbkluZGV4KTsKLQotICAgIGludCBnZXRTZWxlY3RlZEluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9zZWxlY3RlZEluZGV4OyB9Ci0gICAgdm9pZCBzZXRTZWxlY3RlZElu
ZGV4KGludCBpbmRleCkgeyBtX3NlbGVjdGVkSW5kZXggPSBpbmRleDsgfQotCi0gICAgV2ViVmll
d0ltcGwqIGdldFdlYlZpZXcoKSBjb25zdDsKLSAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50
KiBnZXRUZXh0RmllbGQoKSBjb25zdCB7IHJldHVybiBtX3RleHRGaWVsZC5nZXQoKTsgfQotCi1w
cml2YXRlOgotICAgIFdlYkNvcmU6OlJlbmRlclN0eWxlKiB0ZXh0RmllbGRTdHlsZSgpIGNvbnN0
OwotCi0gICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ+IG1fdGV4dEZpZWxkOwot
ICAgIGludCBtX3NlbGVjdGVkSW5kZXg7Ci0gICAgT3duUHRyPFdlYkNvcmU6OlBvcHVwTWVudVN0
eWxlPiBtX3N0eWxlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24gNjE5MTUpCisrKyBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2
Miw3ICs5NjIsNyBAQCBXZWJIaXN0b3J5SXRlbSBXZWJGcmFtZUltcGw6OnByZXZpb3VzSGlzCiBX
ZWJIaXN0b3J5SXRlbSBXZWJGcmFtZUltcGw6OmN1cnJlbnRIaXN0b3J5SXRlbSgpIGNvbnN0CiB7
CiAgICAgLy8gSWYgd2UgYXJlIHN0aWxsIGxvYWRpbmcsIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBj
bG9iYmVyIHRoZSBjdXJyZW50Ci0gICAgLy8gaGlzdG9yeSBpdGVtIGFzIHRoaXMgY291bGQgY2F1
c2UgdXMgdG8gbG9zZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIGFuZCAKKyAgICAvLyBoaXN0b3J5IGl0
ZW0gYXMgdGhpcyBjb3VsZCBjYXVzZSB1cyB0byBsb3NlIHRoZSBzY3JvbGwgcG9zaXRpb24gYW5k
CiAgICAgLy8gZG9jdW1lbnQgc3RhdGUuICBIb3dldmVyLCBpdCBpcyBPSyBmb3IgbmV3IG5hdmln
YXRpb25zLgogICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+bG9hZFR5cGUoKSA9PSBGcmFtZUxv
YWRUeXBlU3RhbmRhcmQKICAgICAgICAgfHwgIW1fZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1
bWVudExvYWRlcigpLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkpCkBAIC0xOTYxLDYgKzE5NjEsMTcg
QEAgYm9vbCBXZWJGcmFtZUltcGw6OnJlZ2lzdGVyUGFzc3dvcmRMaXN0ZQogICAgIHJldHVybiB0
cnVlOwogfQogCit2b2lkIFdlYkZyYW1lSW1wbDo6bm90aWZpeVBhc3N3b3JkTGlzdGVuZXJPZkF1
dG9jb21wbGV0ZSgKKyAgICBXZWJJbnB1dEVsZW1lbnQgaW5wdXRFbGVtZW50KQoreworICAgIFJl
ZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBlbGVtZW50ID0gaW5wdXRFbGVtZW50Lm9wZXJhdG9yIFBh
c3NSZWZQdHI8SFRNTElucHV0RWxlbWVudD4oKTsKKyAgICBXZWJQYXNzd29yZEF1dG9jb21wbGV0
ZUxpc3RlbmVyKiBsaXN0ZW5lciA9IGdldFBhc3N3b3JkTGlzdGVuZXIoZWxlbWVudC5nZXQoKSk7
CisgICAgLy8gUGFzc3dvcmQgbGlzdGVuZXJzIG5lZWQgdG8gYXV0b2NvbXBsZXRlIG90aGVyIGZp
ZWxkcyB0aGF0IGRlcGVuZCBvbiB0aGUKKyAgICAvLyBpbnB1dCBlbGVtZW50IHdpdGggYXV0b2Zp
bGwgc3VnZ2VzdGlvbnMuCisgICAgaWYgKGxpc3RlbmVyKQorICAgICAgICBsaXN0ZW5lci0+cGVy
Zm9ybUlubGluZUF1dG9jb21wbGV0ZShlbGVtZW50LT52YWx1ZSgpLCBmYWxzZSwgZmFsc2UpOwor
fQorCiBXZWJQYXNzd29yZEF1dG9jb21wbGV0ZUxpc3RlbmVyKiBXZWJGcmFtZUltcGw6OmdldFBh
c3N3b3JkTGlzdGVuZXIoCiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KQogewpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCShyZXZpc2lvbiA2MTkxNSkKKysrIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2
ICsxNjQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0TWF0Y2hDb3VudCgpOwog
ICAgIHZpcnR1YWwgYm9vbCByZWdpc3RlclBhc3N3b3JkTGlzdGVuZXIoCiAgICAgICAgIFdlYklu
cHV0RWxlbWVudCwgV2ViUGFzc3dvcmRBdXRvY29tcGxldGVMaXN0ZW5lciopOworICAgIHZpcnR1
YWwgdm9pZCBub3RpZml5UGFzc3dvcmRMaXN0ZW5lck9mQXV0b2NvbXBsZXRlKAorICAgICAgICBX
ZWJJbnB1dEVsZW1lbnQpOwogCiAgICAgdmlydHVhbCBXZWJTdHJpbmcgY29udGVudEFzVGV4dChz
aXplX3QgbWF4Q2hhcnMpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViU3RyaW5nIGNvbnRlbnRBc01h
cmt1cCgpIGNvbnN0OwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlz
aW9uIDYxOTE1KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogCiAj
aW5jbHVkZSAiQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuaCIKLSNpbmNsdWRlICJBdXRvY29tcGxl
dGVQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVk
ZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ29tcG9zaXRpb25VbmRlcmxpbmVWZWN0b3JCdWlsZGVy
LmgiCkBAIC0xNTMsNyArMTUyLDcgQEAgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShEcmFn
T3BlcmF0aQogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShEcmFnT3BlcmF0aW9uRGVsZXRl
KTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oRHJhZ09wZXJhdGlvbkV2ZXJ5KTsKIAot
c3RhdGljIGNvbnN0IFBvcHVwQ29udGFpbmVyU2V0dGluZ3Mgc3VnZ2VzdGlvbnNQb3B1cFNldHRp
bmdzID0geworc3RhdGljIGNvbnN0IFBvcHVwQ29udGFpbmVyU2V0dGluZ3MgYXV0b0ZpbGxQb3B1
cFNldHRpbmdzID0gewogICAgIGZhbHNlLCAgLy8gc2V0VGV4dE9uSW5kZXhDaGFuZ2UKICAgICBm
YWxzZSwgIC8vIGFjY2VwdE9uQWJhbmRvbgogICAgIHRydWUsICAgLy8gbG9vcFNlbGVjdGlvbk5h
dmlnYXRpb24KQEAgLTIzOSw5ICsyMzgsOSBAQCBXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwoV2Vi
Vmlld0NsaWVudCogCiAgICAgLCBtX2Ryb3BFZmZlY3QoRHJvcEVmZmVjdERlZmF1bHQpCiAgICAg
LCBtX29wZXJhdGlvbnNBbGxvd2VkKFdlYkRyYWdPcGVyYXRpb25Ob25lKQogICAgICwgbV9kcmFn
T3BlcmF0aW9uKFdlYkRyYWdPcGVyYXRpb25Ob25lKQotICAgICwgbV9zdWdnZXN0aW9uc1BvcHVw
U2hvd2luZyhmYWxzZSkKLSAgICAsIG1fc3VnZ2VzdGlvbnNQb3B1cENsaWVudCgwKQotICAgICwg
bV9zdWdnZXN0aW9uc1BvcHVwKDApCisgICAgLCBtX2F1dG9GaWxsUG9wdXBTaG93aW5nKGZhbHNl
KQorICAgICwgbV9hdXRvRmlsbFBvcHVwQ2xpZW50KDApCisgICAgLCBtX2F1dG9GaWxsUG9wdXAo
MCkKICAgICAsIG1faXNUcmFuc3BhcmVudChmYWxzZSkKICAgICAsIG1fdGFic1RvTGlua3MoZmFs
c2UpCiAgICAgLCBtX2RyYWdTY3JvbGxUaW1lcihuZXcgRHJhZ1Njcm9sbFRpbWVyKCkpCkBAIC0z
NTYsNyArMzU1LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bW91c2VEb3duKGNvbnN0IFdlYk1vdQog
ICAgICAgICAgICAgbV9tb3VzZUNhcHR1cmVOb2RlID0gaGl0Tm9kZTsKIAogICAgICAgICAvLyBJ
ZiBhIHRleHQgZmllbGQgdGhhdCBoYXMgZm9jdXMgaXMgY2xpY2tlZCBhZ2Fpbiwgd2Ugc2hvdWxk
IGRpc3BsYXkgdGhlCi0gICAgICAgIC8vIHN1Z2dlc3Rpb25zIHBvcHVwLgorICAgICAgICAvLyBB
dXRvRmlsbCBwb3B1cC4KICAgICAgICAgUmVmUHRyPE5vZGU+IGZvY3VzZWROb2RlID0gZm9jdXNl
ZFdlYkNvcmVOb2RlKCk7CiAgICAgICAgIGlmIChmb2N1c2VkTm9kZS5nZXQoKSAmJiB0b0hUTUxJ
bnB1dEVsZW1lbnQoZm9jdXNlZE5vZGUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBpZiAoaGl0Tm9k
ZSA9PSBmb2N1c2VkTm9kZSkgewpAQCAtMzc0LDcgKzM3Myw3IEBAIHZvaWQgV2ViVmlld0ltcGw6
Om1vdXNlRG93bihjb25zdCBXZWJNb3UKICAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRl
cihtYWluRnJhbWVJbXBsKCktPmZyYW1lVmlldygpLCBldmVudCkpOwogCiAgICAgaWYgKGNsaWNr
ZWROb2RlLmdldCgpICYmIGNsaWNrZWROb2RlID09IGZvY3VzZWRXZWJDb3JlTm9kZSgpKSB7Ci0g
ICAgICAgIC8vIEZvY3VzIGhhcyBub3QgY2hhbmdlZCwgc2hvdyB0aGUgc3VnZ2VzdGlvbnMgcG9w
dXAuCisgICAgICAgIC8vIEZvY3VzIGhhcyBub3QgY2hhbmdlZCwgc2hvdyB0aGUgQXV0b0ZpbGwg
cG9wdXAuCiAgICAgICAgIHN0YXRpY19jYXN0PEVkaXRvckNsaWVudEltcGwqPihtX3BhZ2UtPmVk
aXRvckNsaWVudCgpKS0+CiAgICAgICAgICAgICBzaG93Rm9ybUF1dG9maWxsRm9yTm9kZShjbGlj
a2VkTm9kZS5nZXQoKSk7CiAgICAgfQpAQCAtNDU2LDcgKzQ1NSw3IEBAIHZvaWQgV2ViVmlld0lt
cGw6Om1vdXNlVXAoY29uc3QgV2ViTW91c2UKICAgICAgICAgSW50UG9pbnQgY29udGVudFBvaW50
ID0gdmlldy0+d2luZG93VG9Db250ZW50cyhjbGlja1BvaW50KTsKICAgICAgICAgSGl0VGVzdFJl
c3VsdCBoaXRUZXN0UmVzdWx0ID0gZm9jdXNlZC0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1
bHRBdFBvaW50KGNvbnRlbnRQb2ludCwgZmFsc2UsIGZhbHNlLCBTaG91bGRIaXRUZXN0U2Nyb2xs
YmFycyk7CiAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc2VuZCBhIHBhc3RlIHdoZW4gbWlk
ZGxlIGNsaWNraW5nIGEgc2Nyb2xsIGJhciBvciBhCi0gICAgICAgIC8vIGxpbmsgKHdoaWNoIHdp
bGwgbmF2aWdhdGUgbGF0ZXIgaW4gdGhlIGNvZGUpLiAgVGhlIG1haW4gc2Nyb2xsYmFycyAKKyAg
ICAgICAgLy8gbGluayAod2hpY2ggd2lsbCBuYXZpZ2F0ZSBsYXRlciBpbiB0aGUgY29kZSkuICBU
aGUgbWFpbiBzY3JvbGxiYXJzCiAgICAgICAgIC8vIGhhdmUgdG8gYmUgaGFuZGxlZCBzZXBhcmF0
ZWx5LgogICAgICAgICBpZiAoIWhpdFRlc3RSZXN1bHQuc2Nyb2xsYmFyKCkgJiYgIWhpdFRlc3RS
ZXN1bHQuaXNMaXZlTGluaygpICYmIGZvY3VzZWQgJiYgIXZpZXctPnNjcm9sbGJhckF0UG9pbnQo
Y2xpY2tQb2ludCkpIHsKICAgICAgICAgICAgIEVkaXRvciogZWRpdG9yID0gZm9jdXNlZC0+ZWRp
dG9yKCk7CkBAIC01NTcsMTMgKzU1NiwxMyBAQCBib29sIFdlYlZpZXdJbXBsOjpzZWxlY3RQb3B1
cEhhbmRsZUtleUV2CiB7CiAgICAgaWYgKCFtX3NlbGVjdFBvcHVwKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCisKICAgICByZXR1cm4gbV9zZWxlY3RQb3B1cC0+aGFuZGxlS2V5RXZlbnQo
UGxhdGZvcm1LZXlib2FyZEV2ZW50QnVpbGRlcihldmVudCkpOwogfQogCiBib29sIFdlYlZpZXdJ
bXBsOjphdXRvY29tcGxldGVIYW5kbGVLZXlFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBl
dmVudCkKIHsKLSAgICBpZiAoIW1fc3VnZ2VzdGlvbnNQb3B1cFNob3dpbmcKKyAgICBpZiAoIW1f
YXV0b0ZpbGxQb3B1cFNob3dpbmcKICAgICAgICAgLy8gSG9tZSBhbmQgRW5kIHNob3VsZCBiZSBs
ZWZ0IHRvIHRoZSB0ZXh0IGZpZWxkIHRvIHByb2Nlc3MuCiAgICAgICAgIHx8IGV2ZW50LndpbmRv
d3NLZXlDb2RlID09IFZLRVlfSE9NRQogICAgICAgICB8fCBldmVudC53aW5kb3dzS2V5Q29kZSA9
PSBWS0VZX0VORCkKQEAgLTU3MSw3ICs1NzAsNyBAQCBib29sIFdlYlZpZXdJbXBsOjphdXRvY29t
cGxldGVIYW5kbGVLZXlFCiAKICAgICAvLyBQcmVzc2luZyBkZWxldGUgdHJpZ2dlcnMgdGhlIHJl
bW92YWwgb2YgdGhlIHNlbGVjdGVkIHN1Z2dlc3Rpb24gZnJvbSB0aGUgREIuCiAgICAgaWYgKGV2
ZW50LndpbmRvd3NLZXlDb2RlID09IFZLRVlfREVMRVRFCi0gICAgICAgICYmIG1fc3VnZ2VzdGlv
bnNQb3B1cC0+c2VsZWN0ZWRJbmRleCgpICE9IC0xKSB7CisgICAgICAgICYmIG1fYXV0b0ZpbGxQ
b3B1cC0+c2VsZWN0ZWRJbmRleCgpICE9IC0xKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBmb2N1
c2VkV2ViQ29yZU5vZGUoKTsKICAgICAgICAgaWYgKCFub2RlIHx8IChub2RlLT5ub2RlVHlwZSgp
ICE9IE5vZGU6OkVMRU1FTlRfTk9ERSkpIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtNTgzLDIyICs1ODIsMjIgQEAgYm9vbCBXZWJWaWV3SW1wbDo6YXV0b2NvbXBsZXRl
SGFuZGxlS2V5RQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaW50IHNlbGVjdGVkSW5kZXggPSBtX3N1Z2dlc3Rpb25zUG9wdXAtPnNlbGVjdGVkSW5kZXgo
KTsKKyAgICAgICAgaW50IHNlbGVjdGVkSW5kZXggPSBtX2F1dG9GaWxsUG9wdXAtPnNlbGVjdGVk
SW5kZXgoKTsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnQpOwogICAgICAgICBXZWJTdHJpbmcgbmFt
ZSA9IGlucHV0RWxlbWVudC0+bmFtZSgpOwotICAgICAgICBXZWJTdHJpbmcgdmFsdWUgPSBtX3N1
Z2dlc3Rpb25zUG9wdXBDbGllbnQtPml0ZW1UZXh0KHNlbGVjdGVkSW5kZXgpOworICAgICAgICBX
ZWJTdHJpbmcgdmFsdWUgPSBtX2F1dG9GaWxsUG9wdXBDbGllbnQtPml0ZW1UZXh0KHNlbGVjdGVk
SW5kZXgpOwogICAgICAgICBtX2NsaWVudC0+cmVtb3ZlQXV0b2ZpbGxTdWdnZXN0aW9ucyhuYW1l
LCB2YWx1ZSk7CiAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZW50cmllcyBpbiB0aGUgY3VycmVudGx5
IHNob3dpbmcgcG9wdXAgdG8gcmVmbGVjdCB0aGUKICAgICAgICAgLy8gZGVsZXRpb24uCi0gICAg
ICAgIG1fc3VnZ2VzdGlvbnNQb3B1cENsaWVudC0+cmVtb3ZlU3VnZ2VzdGlvbkF0SW5kZXgoc2Vs
ZWN0ZWRJbmRleCk7Ci0gICAgICAgIHJlZnJlc2hTdWdnZXN0aW9uc1BvcHVwKCk7CisgICAgICAg
IG1fYXV0b0ZpbGxQb3B1cENsaWVudC0+cmVtb3ZlU3VnZ2VzdGlvbkF0SW5kZXgoc2VsZWN0ZWRJ
bmRleCk7CisgICAgICAgIHJlZnJlc2hBdXRvRmlsbFBvcHVwKCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBpZiAoIW1fc3VnZ2VzdGlvbnNQb3B1cC0+aXNJbnRlcmVzdGVk
SW5FdmVudEZvcktleShldmVudC53aW5kb3dzS2V5Q29kZSkpCisgICAgaWYgKCFtX2F1dG9GaWxs
UG9wdXAtPmlzSW50ZXJlc3RlZEluRXZlbnRGb3JLZXkoZXZlbnQud2luZG93c0tleUNvZGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9zdWdnZXN0aW9uc1BvcHVwLT5oYW5k
bGVLZXlFdmVudChQbGF0Zm9ybUtleWJvYXJkRXZlbnRCdWlsZGVyKGV2ZW50KSkpIHsKKyAgICBp
ZiAobV9hdXRvRmlsbFBvcHVwLT5oYW5kbGVLZXlFdmVudChQbGF0Zm9ybUtleWJvYXJkRXZlbnRC
dWlsZGVyKGV2ZW50KSkpIHsKICAgICAgICAgLy8gV2UgbmVlZCB0byBpZ25vcmUgdGhlIG5leHQg
Q2hhciBldmVudCBhZnRlciB0aGlzIG90aGVyd2lzZSBwcmVzc2luZwogICAgICAgICAvLyBlbnRl
ciB3aGVuIHNlbGVjdGluZyBhbiBpdGVtIGluIHRoZSBtZW51IHdpbGwgZ28gdG8gdGhlIHBhZ2Uu
CiAgICAgICAgIGlmIChXZWJJbnB1dEV2ZW50OjpSYXdLZXlEb3duID09IGV2ZW50LnR5cGUpCkBA
IC04ODAsMTEgKzg3OSwxMSBAQCB2b2lkICBXZWJWaWV3SW1wbDo6cG9wdXBDbG9zZWQoV2ViQ29y
ZTo6CiAgICAgfQogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpoaWRlU3VnZ2VzdGlvbnNQb3B1cCgp
Cit2b2lkIFdlYlZpZXdJbXBsOjpoaWRlQXV0b0ZpbGxQb3B1cCgpCiB7Ci0gICAgaWYgKG1fc3Vn
Z2VzdGlvbnNQb3B1cFNob3dpbmcpIHsKLSAgICAgICAgbV9zdWdnZXN0aW9uc1BvcHVwLT5oaWRl
UG9wdXAoKTsKLSAgICAgICAgbV9zdWdnZXN0aW9uc1BvcHVwU2hvd2luZyA9IGZhbHNlOworICAg
IGlmIChtX2F1dG9GaWxsUG9wdXBTaG93aW5nKSB7CisgICAgICAgIG1fYXV0b0ZpbGxQb3B1cC0+
aGlkZVBvcHVwKCk7CisgICAgICAgIG1fYXV0b0ZpbGxQb3B1cFNob3dpbmcgPSBmYWxzZTsKICAg
ICB9CiB9CiAKQEAgLTExNDIsNyArMTE0MSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldEZvY3Vz
KGJvb2wgZW5hYmxlKQogICAgICAgICB9CiAgICAgICAgIG1faW1lQWNjZXB0RXZlbnRzID0gdHJ1
ZTsKICAgICB9IGVsc2UgewotICAgICAgICBoaWRlU3VnZ2VzdGlvbnNQb3B1cCgpOworICAgICAg
ICBoaWRlQXV0b0ZpbGxQb3B1cCgpOwogICAgICAgICBoaWRlU2VsZWN0UG9wdXAoKTsKIAogICAg
ICAgICAvLyBDbGVhciBmb2N1cyBvbiB0aGUgY3VycmVudGx5IGZvY3VzZWQgZnJhbWUgaWYgYW55
LgpAQCAtMTg1OCw3ICsxODU3LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6YXBwbHlBdXRvRmlsbFN1
Z2dlc3RpbwogICAgIEFTU0VSVChzZXBhcmF0b3JJbmRleCA8IHN0YXRpY19jYXN0PGludD4obmFt
ZXMuc2l6ZSgpKSk7CiAKICAgICBpZiAobmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGhpZGVT
dWdnZXN0aW9uc1BvcHVwKCk7CisgICAgICAgIGhpZGVBdXRvRmlsbFBvcHVwKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTE4NjcsNyArMTg2Niw3IEBAIHZvaWQgV2ViVmlld0ltcGw6
OmFwcGx5QXV0b0ZpbGxTdWdnZXN0aW8KICAgICAvLyBmb2N1c2VkIG5vZGUsIHRoZW4gd2UgaGF2
ZSBub3RoaW5nIHRvIGRvLiAgRklYTUU6IGFsc28gY2hlY2sgdGhlCiAgICAgLy8gY2FyZXQgaXMg
YXQgdGhlIGVuZCBhbmQgdGhhdCB0aGUgdGV4dCBoYXMgbm90IGNoYW5nZWQuCiAgICAgaWYgKCFm
b2N1c2VkTm9kZSB8fCBmb2N1c2VkTm9kZSAhPSBQYXNzUmVmUHRyPE5vZGU+KG5vZGUpKSB7Ci0g
ICAgICAgIGhpZGVTdWdnZXN0aW9uc1BvcHVwKCk7CisgICAgICAgIGhpZGVBdXRvRmlsbFBvcHVw
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE4NzksOTMgKzE4NzgsNTMgQEAgdm9p
ZCBXZWJWaWV3SW1wbDo6YXBwbHlBdXRvRmlsbFN1Z2dlc3RpbwogICAgIGlmICghbV9hdXRvRmls
bFBvcHVwQ2xpZW50LmdldCgpKQogICAgICAgICBtX2F1dG9GaWxsUG9wdXBDbGllbnQuc2V0KG5l
dyBBdXRvRmlsbFBvcHVwTWVudUNsaWVudCk7CiAKLSAgICBtX2F1dG9GaWxsUG9wdXBDbGllbnQt
PmluaXRpYWxpemUoaW5wdXRFbGVtLCBuYW1lcywgbGFiZWxzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3JJbmRleCk7Ci0KLSAgICBpZiAobV9zdWdnZXN0
aW9uc1BvcHVwQ2xpZW50ICE9IG1fYXV0b0ZpbGxQb3B1cENsaWVudC5nZXQoKSkgewotICAgICAg
ICBoaWRlU3VnZ2VzdGlvbnNQb3B1cCgpOwotICAgICAgICBtX3N1Z2dlc3Rpb25zUG9wdXBDbGll
bnQgPSBtX2F1dG9GaWxsUG9wdXBDbGllbnQuZ2V0KCk7Ci0gICAgfQorICAgIG1fYXV0b0ZpbGxQ
b3B1cENsaWVudC0+aW5pdGlhbGl6ZShpbnB1dEVsZW0sIG5hbWVzLCBsYWJlbHMsIHNlcGFyYXRv
ckluZGV4KTsKIAogICAgIGlmICghbV9hdXRvRmlsbFBvcHVwLmdldCgpKSB7Ci0gICAgICAgIG1f
YXV0b0ZpbGxQb3B1cCA9IFBvcHVwQ29udGFpbmVyOjpjcmVhdGUobV9zdWdnZXN0aW9uc1BvcHVw
Q2xpZW50LAorICAgICAgICBtX2F1dG9GaWxsUG9wdXAgPSBQb3B1cENvbnRhaW5lcjo6Y3JlYXRl
KG1fYXV0b0ZpbGxQb3B1cENsaWVudC5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQb3B1cENvbnRhaW5lcjo6U3VnZ2VzdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uc1Bv
cHVwU2V0dGluZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG9GaWxsUG9wdXBTZXR0aW5ncyk7CiAgICAgfQogCi0gICAgaWYgKG1fc3VnZ2Vz
dGlvbnNQb3B1cCAhPSBtX2F1dG9GaWxsUG9wdXAuZ2V0KCkpCi0gICAgICAgIG1fc3VnZ2VzdGlv
bnNQb3B1cCA9IG1fYXV0b0ZpbGxQb3B1cC5nZXQoKTsKLQotICAgIGlmIChtX3N1Z2dlc3Rpb25z
UG9wdXBTaG93aW5nKSB7CisgICAgaWYgKG1fYXV0b0ZpbGxQb3B1cFNob3dpbmcpIHsKICAgICAg
ICAgbV9hdXRvRmlsbFBvcHVwQ2xpZW50LT5zZXRTdWdnZXN0aW9ucyhuYW1lcywgbGFiZWxzLCBz
ZXBhcmF0b3JJbmRleCk7Ci0gICAgICAgIHJlZnJlc2hTdWdnZXN0aW9uc1BvcHVwKCk7CisgICAg
ICAgIHJlZnJlc2hBdXRvRmlsbFBvcHVwKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9zdWdn
ZXN0aW9uc1BvcHVwLT5zaG93KGZvY3VzZWROb2RlLT5nZXRSZWN0KCksCisgICAgICAgIG1fYXV0
b0ZpbGxQb3B1cC0+c2hvdyhmb2N1c2VkTm9kZS0+Z2V0UmVjdCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9jdXNlZE5vZGUtPm93bmVyRG9jdW1lbnQoKS0+dmlldygpLCAw
KTsKLSAgICAgICAgbV9zdWdnZXN0aW9uc1BvcHVwU2hvd2luZyA9IHRydWU7CisgICAgICAgIG1f
YXV0b0ZpbGxQb3B1cFNob3dpbmcgPSB0cnVlOwogICAgIH0KKworICAgIC8vIERFUFJFQ0FURUQ6
IFRoaXMgc3BlY2lhbCBtb2RlIHdpbGwgZ28gYXdheSBvbmNlIEF1dG9GaWxsIGFuZCBBdXRvY29t
cGxldGUKKyAgICAvLyBtZXJnZSBpcyBjb21wbGV0ZS4KKyAgICBpZiAobV9hdXRvRmlsbFBvcHVw
Q2xpZW50KQorICAgICAgICBtX2F1dG9GaWxsUG9wdXBDbGllbnQtPnNldEF1dG9jb21wbGV0ZU1v
ZGUoZmFsc2UpOwogfQogCisvLyBERVBSRUNBVEVEOiByZXBsYWNpbmcgd2l0aCBhcHBseUF1dG9G
aWxsU3VnZ2VzdGlvbnMuCiB2b2lkIFdlYlZpZXdJbXBsOjphcHBseUF1dG9jb21wbGV0ZVN1Z2dl
c3Rpb25zKAogICAgIGNvbnN0IFdlYk5vZGUmIG5vZGUsCiAgICAgY29uc3QgV2ViVmVjdG9yPFdl
YlN0cmluZz4mIHN1Z2dlc3Rpb25zLAogICAgIGludCBkZWZhdWx0U3VnZ2VzdGlvbkluZGV4KQog
ewotICAgIEFTU0VSVChkZWZhdWx0U3VnZ2VzdGlvbkluZGV4IDwgc3RhdGljX2Nhc3Q8aW50Pihz
dWdnZXN0aW9ucy5zaXplKCkpKTsKLQotICAgIGlmICghbV9wYWdlLmdldCgpIHx8IHN1Z2dlc3Rp
b25zLmlzRW1wdHkoKSkgewotICAgICAgICBoaWRlU3VnZ2VzdGlvbnNQb3B1cCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPE5vZGU+IGZvY3VzZWROb2RlID0gZm9jdXNl
ZFdlYkNvcmVOb2RlKCk7Ci0gICAgLy8gSWYgdGhlIG5vZGUgZm9yIHdoaWNoIHdlIHF1ZXJpZWQg
dGhlIEF1dG9jb21wbGV0ZSBzdWdnZXN0aW9ucyBpcyBub3QgdGhlCi0gICAgLy8gZm9jdXNlZCBu
b2RlLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4gIEZJWE1FOiBhbHNvIGNoZWNrIHRoZQot
ICAgIC8vIGNhcmV0IGlzIGF0IHRoZSBlbmQgYW5kIHRoYXQgdGhlIHRleHQgaGFzIG5vdCBjaGFu
Z2VkLgotICAgIGlmICghZm9jdXNlZE5vZGUgfHwgZm9jdXNlZE5vZGUgIT0gUGFzc1JlZlB0cjxO
b2RlPihub2RlKSkgewotICAgICAgICBoaWRlU3VnZ2VzdGlvbnNQb3B1cCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtID0KLSAgICAg
ICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGZvY3VzZWROb2RlLmdldCgpKTsKLQot
ICAgIC8vIFRoZSBmaXJzdCB0aW1lIHRoZSBBdXRvY29tcGxldGUgaXMgc2hvd24gd2UnbGwgY3Jl
YXRlIHRoZSBjbGllbnQgYW5kIHRoZQotICAgIC8vIHBvcHVwLgotICAgIGlmICghbV9hdXRvY29t
cGxldGVQb3B1cENsaWVudC5nZXQoKSkKLSAgICAgICAgbV9hdXRvY29tcGxldGVQb3B1cENsaWVu
dC5zZXQobmV3IEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudCk7Ci0KLSAgICBtX2F1dG9jb21w
bGV0ZVBvcHVwQ2xpZW50LT5pbml0aWFsaXplKGlucHV0RWxlbSwgc3VnZ2VzdGlvbnMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U3VnZ2VzdGlvbklu
ZGV4KTsKKyAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiBuYW1lcyhzdWdnZXN0aW9ucy5zaXplKCkp
OworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IGxhYmVscyhzdWdnZXN0aW9ucy5zaXplKCkpOwog
Ci0gICAgaWYgKG1fc3VnZ2VzdGlvbnNQb3B1cENsaWVudCAhPSBtX2F1dG9jb21wbGV0ZVBvcHVw
Q2xpZW50LmdldCgpKSB7Ci0gICAgICAgIGhpZGVTdWdnZXN0aW9uc1BvcHVwKCk7Ci0gICAgICAg
IG1fc3VnZ2VzdGlvbnNQb3B1cENsaWVudCA9IG1fYXV0b2NvbXBsZXRlUG9wdXBDbGllbnQuZ2V0
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWdnZXN0aW9ucy5zaXplKCk7ICsraSkK
KyAgICB7CisgICAgICAgIG5hbWVzW2ldID0gc3VnZ2VzdGlvbnNbaV07CisgICAgICAgIGxhYmVs
c1tpXSA9IFdlYlN0cmluZygpOwogICAgIH0KIAotICAgIGlmICghbV9hdXRvY29tcGxldGVQb3B1
cC5nZXQoKSkgewotICAgICAgICBtX2F1dG9jb21wbGV0ZVBvcHVwID0gUG9wdXBDb250YWluZXI6
OmNyZWF0ZShtX3N1Z2dlc3Rpb25zUG9wdXBDbGllbnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcHVwQ29udGFpbmVyOjpTdWdnZXN0aW9u
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dWdnZXN0aW9uc1BvcHVwU2V0dGluZ3MpOwotICAgIH0KLQotICAgIGlmIChtX3N1Z2dlc3Rpb25z
UG9wdXAgIT0gbV9hdXRvY29tcGxldGVQb3B1cC5nZXQoKSkKLSAgICAgICAgbV9zdWdnZXN0aW9u
c1BvcHVwID0gbV9hdXRvY29tcGxldGVQb3B1cC5nZXQoKTsKLQotICAgIGlmIChtX3N1Z2dlc3Rp
b25zUG9wdXBTaG93aW5nKSB7Ci0gICAgICAgIG1fYXV0b2NvbXBsZXRlUG9wdXBDbGllbnQtPnNl
dFN1Z2dlc3Rpb25zKHN1Z2dlc3Rpb25zKTsKLSAgICAgICAgcmVmcmVzaFN1Z2dlc3Rpb25zUG9w
dXAoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3N1Z2dlc3Rpb25zUG9wdXAtPnNob3coZm9j
dXNlZE5vZGUtPmdldFJlY3QoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
Y3VzZWROb2RlLT5vd25lckRvY3VtZW50KCktPnZpZXcoKSwgMCk7Ci0gICAgICAgIG1fc3VnZ2Vz
dGlvbnNQb3B1cFNob3dpbmcgPSB0cnVlOwotICAgIH0KKyAgICBhcHBseUF1dG9GaWxsU3VnZ2Vz
dGlvbnMobm9kZSwgbmFtZXMsIGxhYmVscywgLTEpOworICAgIGlmIChtX2F1dG9GaWxsUG9wdXBD
bGllbnQpCisgICAgICAgIG1fYXV0b0ZpbGxQb3B1cENsaWVudC0+c2V0QXV0b2NvbXBsZXRlTW9k
ZSh0cnVlKTsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6aGlkZVBvcHVwcygpCiB7CiAgICAgaGlk
ZVNlbGVjdFBvcHVwKCk7Ci0gICAgaGlkZVN1Z2dlc3Rpb25zUG9wdXAoKTsKKyAgICBoaWRlQXV0
b0ZpbGxQb3B1cCgpOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpwZXJmb3JtQ3VzdG9tQ29udGV4
dE1lbnVBY3Rpb24odW5zaWduZWQgYWN0aW9uKQpAQCAtMjE1MSwyNCArMjExMCwyNSBAQCBOb3Rp
ZmljYXRpb25QcmVzZW50ZXJJbXBsKiBXZWJWaWV3SW1wbDo6CiB9CiAjZW5kaWYKIAotdm9pZCBX
ZWJWaWV3SW1wbDo6cmVmcmVzaFN1Z2dlc3Rpb25zUG9wdXAoKQordm9pZCBXZWJWaWV3SW1wbDo6
cmVmcmVzaEF1dG9GaWxsUG9wdXAoKQogewotICAgIEFTU0VSVChtX3N1Z2dlc3Rpb25zUG9wdXBT
aG93aW5nKTsKKyAgICBBU1NFUlQobV9hdXRvRmlsbFBvcHVwU2hvd2luZyk7CiAKICAgICAvLyBI
aWRlIHRoZSBwb3B1cCBpZiBpdCBoYXMgYmVjb21lIGVtcHR5LgotICAgIGlmICghbV9zdWdnZXN0
aW9uc1BvcHVwQ2xpZW50LT5saXN0U2l6ZSgpKSB7Ci0gICAgICAgIGhpZGVTdWdnZXN0aW9uc1Bv
cHVwKCk7CisgICAgaWYgKCFtX2F1dG9GaWxsUG9wdXBDbGllbnQtPmxpc3RTaXplKCkpIHsKKyAg
ICAgICAgaGlkZUF1dG9GaWxsUG9wdXAoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IEludFJlY3Qgb2xkQm91bmRzID0gbV9zdWdnZXN0aW9uc1BvcHVwLT5ib3VuZHNSZWN0KCk7Ci0g
ICAgbV9zdWdnZXN0aW9uc1BvcHVwLT5yZWZyZXNoKCk7Ci0gICAgSW50UmVjdCBuZXdCb3VuZHMg
PSBtX3N1Z2dlc3Rpb25zUG9wdXAtPmJvdW5kc1JlY3QoKTsKKyAgICBJbnRSZWN0IG9sZEJvdW5k
cyA9IG1fYXV0b0ZpbGxQb3B1cC0+Ym91bmRzUmVjdCgpOworICAgIG1fYXV0b0ZpbGxQb3B1cC0+
cmVmcmVzaCgpOworICAgIEludFJlY3QgbmV3Qm91bmRzID0gbV9hdXRvRmlsbFBvcHVwLT5ib3Vu
ZHNSZWN0KCk7CiAgICAgLy8gTGV0J3MgcmVzaXplIHRoZSBiYWNraW5nIHdpbmRvdyBpZiBuZWNl
c3NhcnkuCiAgICAgaWYgKG9sZEJvdW5kcyAhPSBuZXdCb3VuZHMpIHsKICAgICAgICAgV2ViUG9w
dXBNZW51SW1wbCogcG9wdXBNZW51ID0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFdlYlBvcHVw
TWVudUltcGwqPihtX3N1Z2dlc3Rpb25zUG9wdXAtPmNsaWVudCgpKTsKLSAgICAgICAgcG9wdXBN
ZW51LT5jbGllbnQoKS0+c2V0V2luZG93UmVjdChuZXdCb3VuZHMpOworICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8V2ViUG9wdXBNZW51SW1wbCo+KG1fYXV0b0ZpbGxQb3B1cC0+Y2xpZW50KCkpOwor
ICAgICAgICBpZiAocG9wdXBNZW51KQorICAgICAgICAgICAgcG9wdXBNZW51LT5jbGllbnQoKS0+
c2V0V2luZG93UmVjdChuZXdCb3VuZHMpOwogICAgIH0KIH0KIApJbmRleDogV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuaAkocmV2aXNpb24gNjE5MTUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDYgQEAgY2xhc3MgQXV0b2Nv
bXBsZXRlUG9wdXBNZW51Q2xpZW50OwogY2xhc3MgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ7CiBj
bGFzcyBDb250ZXh0TWVudUNsaWVudEltcGw7CiBjbGFzcyBEcmFnU2Nyb2xsVGltZXI7Ci1jbGFz
cyBTdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudDsKIGNsYXNzIFdlYkFjY2Vzc2liaWxpdHlPYmpl
Y3Q7CiBjbGFzcyBXZWJEZXZUb29sc0FnZW50Q2xpZW50OwogY2xhc3MgV2ViRGV2VG9vbHNBZ2Vu
dFByaXZhdGU7CkBAIC0xNDcsOCArMTQ2LDggQEAgcHVibGljOgogICAgICAgICBjb25zdCBXZWJQ
b2ludCYgc2NyZWVuUG9pbnQsCiAgICAgICAgIFdlYkRyYWdPcGVyYXRpb24gb3BlcmF0aW9uKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZHJhZ1NvdXJjZU1vdmVkVG8oCi0gICAgICAgIGNvbnN0IFdlYlBv
aW50JiBjbGllbnRQb2ludCwgCi0gICAgICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwg
CisgICAgICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKKyAgICAgICAgY29uc3QgV2Vi
UG9pbnQmIHNjcmVlblBvaW50LAogICAgICAgICBXZWJEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbik7
CiAgICAgdmlydHVhbCB2b2lkIGRyYWdTb3VyY2VTeXN0ZW1EcmFnRW5kZWQoKTsKICAgICB2aXJ0
dWFsIFdlYkRyYWdPcGVyYXRpb24gZHJhZ1RhcmdldERyYWdFbnRlcigKQEAgLTE4MSw2ICsxODAs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBuYW1lcywK
ICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGxhYmVscywKICAgICAgICAgaW50
IHNlcGFyYXRvckluZGV4KTsKKyAgICAvLyBERVBSRUNBVEVEOiByZXBsYWNpbmcgd2l0aCBhcHBs
eUF1dG9GaWxsU3VnZ2VzdGlvbnMuCiAgICAgdmlydHVhbCB2b2lkIGFwcGx5QXV0b2NvbXBsZXRl
U3VnZ2VzdGlvbnMoCiAgICAgICAgIGNvbnN0IFdlYk5vZGUmLAogICAgICAgICBjb25zdCBXZWJW
ZWN0b3I8V2ViU3RyaW5nPiYgc3VnZ2VzdGlvbnMsCkBAIC0yOTYsOSArMjk2LDkgQEAgcHVibGlj
OgogICAgICAgICBjb25zdCBXZWJJbWFnZSYgZHJhZ0ltYWdlLAogICAgICAgICBjb25zdCBXZWJQ
b2ludCYgZHJhZ0ltYWdlT2Zmc2V0KTsKIAotICAgIHZvaWQgc3VnZ2VzdGlvbnNQb3B1cERpZEhp
ZGUoKQorICAgIHZvaWQgYXV0b0ZpbGxQb3B1cERpZEhpZGUoKQogICAgIHsKLSAgICAgICAgbV9z
dWdnZXN0aW9uc1BvcHVwU2hvd2luZyA9IGZhbHNlOworICAgICAgICBtX2F1dG9GaWxsUG9wdXBT
aG93aW5nID0gZmFsc2U7CiAgICAgfQogCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCkBAIC0z
MTQsNyArMzE0LDcgQEAgcHVibGljOgogICAgIHZvaWQgcG9wdXBPcGVuZWQoV2ViQ29yZTo6UG9w
dXBDb250YWluZXIqIHBvcHVwQ29udGFpbmVyKTsKICAgICB2b2lkIHBvcHVwQ2xvc2VkKFdlYkNv
cmU6OlBvcHVwQ29udGFpbmVyKiBwb3B1cENvbnRhaW5lcik7CiAKLSAgICB2b2lkIGhpZGVTdWdn
ZXN0aW9uc1BvcHVwKCk7CisgICAgdm9pZCBoaWRlQXV0b0ZpbGxQb3B1cCgpOwogCiAgICAgLy8g
SEFDSzogY3VycmVudElucHV0RXZlbnQoKSBpcyBmb3IgQ2hyb21lQ2xpZW50SW1wbDo6c2hvdygp
LCB1bnRpbCB3ZSBjYW4KICAgICAvLyBmaXggV2ViS2l0IHRvIHBhc3MgZW5vdWdoIGluZm9ybWF0
aW9uIHVwIGludG8gQ2hyb21lQ2xpZW50OjpzaG93KCkgc28gd2UKQEAgLTM2MSwxMCArMzYxLDEw
IEBAIHByaXZhdGU6CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBhdXRvY29tcGxlIGhhcyBj
b25zdW1lZCB0aGUgZXZlbnQuCiAgICAgYm9vbCBhdXRvY29tcGxldGVIYW5kbGVLZXlFdmVudChj
b25zdCBXZWJLZXlib2FyZEV2ZW50Jik7CiAKLSAgICAvLyBSZXBhaW50cyB0aGUgc3VnZ2VzdGlv
bnMgcG9wdXAuIFNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgc3VnZ2VzdGlvbnMKLSAgICAvLyBo
YXZlIGNoYW5nZWQuIE5vdGUgdGhhdCB0aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRo
ZSBzdWdnZXN0aW9ucworICAgIC8vIFJlcGFpbnRzIHRoZSBBdXRvRmlsbCBwb3B1cC4gU2hvdWxk
IGJlIGNhbGxlZCB3aGVuIHRoZSBzdWdnZXN0aW9ucworICAgIC8vIGhhdmUgY2hhbmdlZC4gTm90
ZSB0aGF0IHRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlIEF1dG9GaWxsCiAgICAg
Ly8gcG9wdXAgaXMgc2hvd2luZy4KLSAgICB2b2lkIHJlZnJlc2hTdWdnZXN0aW9uc1BvcHVwKCk7
CisgICAgdm9pZCByZWZyZXNoQXV0b0ZpbGxQb3B1cCgpOwogCiAgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSB2aWV3IHdhcyBzY3JvbGxlZC4KICAgICBib29sIHNjcm9sbFZpZXdXaXRoS2V5Ym9h
cmQoaW50IGtleUNvZGUsIGludCBtb2RpZmllcnMpOwpAQCAtNDczLDMyICs0NzMsMTggQEAgcHJp
dmF0ZToKICAgICAvLyBjdXJyZW50IGRyb3AgdGFyZ2V0IGluIHRoaXMgV2ViVmlldyAodGhlIGRy
b3AgdGFyZ2V0IGNhbiBhY2NlcHQgdGhlIGRyb3ApLgogICAgIFdlYkRyYWdPcGVyYXRpb24gbV9k
cmFnT3BlcmF0aW9uOwogCi0gICAgLy8gV2hldGhlciBhIHN1Z2dlc3Rpb25zIHBvcHVwIGlzIGN1
cnJlbnRseSBzaG93aW5nLgotICAgIGJvb2wgbV9zdWdnZXN0aW9uc1BvcHVwU2hvd2luZzsKLQot
ICAgIC8vIEEgcG9pbnRlciB0byB0aGUgY3VycmVudCBzdWdnZXN0aW9ucyBwb3B1cCBtZW51IGNs
aWVudC4gVGhpcyBjYW4gYmUKLSAgICAvLyBlaXRoZXIgYW4gQXV0b0ZpbGxQb3B1cE1lbnVDbGll
bnQgb3IgYW4gQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LiBXZQotICAgIC8vIGRvIG5vdCBv
d24gdGhpcyBwb2ludGVyLgotICAgIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50KiBtX3N1Z2dl
c3Rpb25zUG9wdXBDbGllbnQ7CisgICAgLy8gV2hldGhlciBhbiBBdXRvRmlsbCBwb3B1cCBpcyBj
dXJyZW50bHkgc2hvd2luZy4KKyAgICBib29sIG1fYXV0b0ZpbGxQb3B1cFNob3dpbmc7CiAKICAg
ICAvLyBUaGUgQXV0b0ZpbGwgcG9wdXAgY2xpZW50LgogICAgIE93blB0cjxBdXRvRmlsbFBvcHVw
TWVudUNsaWVudD4gbV9hdXRvRmlsbFBvcHVwQ2xpZW50OwogCi0gICAgLy8gVGhlIEF1dG9jb21w
bGV0ZSBwb3B1cCBjbGllbnQuCi0gICAgT3duUHRyPEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVu
dD4gbV9hdXRvY29tcGxldGVQb3B1cENsaWVudDsKLQotICAgIC8vIEEgcG9pbnRlciB0byB0aGUg
Y3VycmVudCBzdWdnZXN0aW9ucyBwb3B1cC4gV2UgZG8gbm90IG93biB0aGlzIHBvaW50ZXIuCi0g
ICAgV2ViQ29yZTo6UG9wdXBDb250YWluZXIqIG1fc3VnZ2VzdGlvbnNQb3B1cDsKKyAgICAvLyBU
aGUgQXV0b0ZpbGwgcG9wdXAuCisgICAgUmVmUHRyPFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyPiBt
X2F1dG9GaWxsUG9wdXA7CiAKICAgICAvLyBUaGUgcG9wdXAgYXNzb2NpYXRlZCB3aXRoIGEgc2Vs
ZWN0IGVsZW1lbnQuCiAgICAgUmVmUHRyPFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyPiBtX3NlbGVj
dFBvcHVwOwogCi0gICAgLy8gVGhlIEF1dG9GaWxsIHN1Z2dlc3Rpb25zIHBvcHVwLgotICAgIFJl
ZlB0cjxXZWJDb3JlOjpQb3B1cENvbnRhaW5lcj4gbV9hdXRvRmlsbFBvcHVwOwotCi0gICAgLy8g
VGhlIEF1dG9Db21wbGV0ZSBzdWdnZXN0aW9ucyBwb3B1cC4KLSAgICBSZWZQdHI8V2ViQ29yZTo6
UG9wdXBDb250YWluZXI+IG1fYXV0b2NvbXBsZXRlUG9wdXA7Ci0KICAgICBPd25QdHI8V2ViRGV2
VG9vbHNBZ2VudFByaXZhdGU+IG1fZGV2VG9vbHNBZ2VudDsKIAogICAgIC8vIFdoZXRoZXIgdGhl
IHdlYnZpZXcgaXMgcmVuZGVyaW5nIHRyYW5zcGFyZW50bHkuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59820</attachid>
            <date>2010-06-25 18:03:26 -0700</date>
            <delta_ts>2010-06-30 10:39:55 -0700</delta_ts>
            <desc>Proposed patch, fixed style issues.</desc>
            <filename>autofill_popup.patch</filename>
            <type>text/plain</type>
            <size>57332</size>
            <attacher name="David Holloway">dhollowa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjE5MjEpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODMgQEAKKzIwMTAtMDYtMjUgIERhdmlk
IEhvbGxvd2F5ICA8ZGhvbGxvd2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29uc29saWRhdGVzIEF1dG9G
aWxsIGFuZCBBdXRvY29tcGxldGUgcG9wdXAgbWVudXMgaW50byBhIHNpbmdsZSBwb3B1cCBtZW51
LgorCisgICAgICAgIFRoaXMgY2hhbmdlIGNvbWJpbmVzIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xp
ZW50LCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudCwgYW5kIAorICAgICAgICBBdXRvY29tcGxldGVQ
b3B1cE1lbnVDbGllbnQgY2xhc3NlcyBpbnRvIGEgc2luZ2xlIGNvbnNvbGlkYXRlZCBBdXRvRmls
bFBvcHVwTWVudUNsaWVudCBjbGFzcy4KKyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UgdGhl
IGNvbnRlbnRzIG9mIHRoZSBBdXRvRmlsbCBwb3B1cCBtZW51IG9ubHkgaW5jbHVkZWQgQXV0b0Zp
bGwKKyAgICAgICAgc3VnZ2VzdGlvbnMgYW5kIHNpbWlsYXJseSB0aGUgQXV0b2NvbXBsZXRlIHBv
cHVwIG1lbnUgb25seSBpbmNsdWRlZCBBdXRvY29tcGxldGUKKyAgICAgICAgc3VnZ2VzdGlvbnMu
ICBXaXRoIHRoaXMgY29uc29saWRhdGlvbiwgYm90aCBBdXRvRmlsbCBhbmQgQXV0b2NvbXBsZXRl
IHN1Z2dlc3Rpb25zIGNhbgorICAgICAgICBub3cgYmUgZGlzcGxheWVkIGluIGEgc2luZ2xlIG1l
bnUuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQx
MjM2CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5o
OgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgICogc3JjL0F1dG9GaWxsUG9w
dXBNZW51Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGll
bnQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQ
b3B1cE1lbnVDbGllbnQ6On5BdXRvRmlsbFBvcHVwTWVudUNsaWVudCk6CisgICAgICAgIChXZWJL
aXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojp2YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
S2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6c2VsZWN0aW9uQ2xlYXJlZCk6CisgICAgICAg
IChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjppdGVtVGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjppdGVtU3R5bGUpOgorICAgICAgICAoV2Vi
S2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6bWVudVN0eWxlKToKKyAgICAgICAgKFdlYktp
dDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNsaWVudFBhZGRpbmdMZWZ0KToKKyAgICAgICAg
KFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNsaWVudFBhZGRpbmdSaWdodCk6Cisg
ICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojpwb3B1cERpZEhpZGUpOgor
ICAgICAgICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6c2V0VGV4dEZyb21JdGVt
KToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmZvbnRTZWxlY3Rv
cik6CisgICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojpob3N0V2luZG93
KToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNyZWF0ZVNjcm9s
bGJhcik6CisgICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojppbml0aWFs
aXplKToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmdldFdlYlZp
ZXcpOgorICAgICAgICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6dGV4dEZpZWxk
U3R5bGUpOgorICAgICAgICAqIHNyYy9BdXRvRmlsbFBvcHVwTWVudUNsaWVudC5oOgorICAgICAg
ICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6aXRlbVRvb2xUaXApOgorICAgICAg
ICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6aXRlbUFjY2Vzc2liaWxpdHlUZXh0
KToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6Oml0ZW1Jc0VuYWJs
ZWQpOgorICAgICAgICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6Y2xpZW50SW5z
ZXRMZWZ0KToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNsaWVu
dEluc2V0UmlnaHQpOgorICAgICAgICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6
bGlzdFNpemUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6c2Vs
ZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojpp
dGVtSXNMYWJlbCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojpp
dGVtSXNTZWxlY3RlZCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50
OjpzaG91bGRQb3BPdmVyKToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGll
bnQ6OnZhbHVlU2hvdWxkQ2hhbmdlT25Ib3RUcmFjayk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9G
aWxsUG9wdXBNZW51Q2xpZW50OjpzZXRBdXRvY29tcGxldGVNb2RlKToKKyAgICAgICAgKFdlYktp
dDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmdldFRleHRGaWVsZCk6CisgICAgICAgIChXZWJL
aXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjpnZXRTZWxlY3RlZEluZGV4KToKKyAgICAgICAg
KFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OnNldFNlbGVjdGVkSW5kZXgpOgorICAg
ICAgICAqIHNyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHNyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBzcmMvRWRpdG9yQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNs
aWVudEltcGw6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpFZGl0
b3JDbGllbnRJbXBsOjpkb0F1dG9maWxsKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50
SW1wbDo6b25BdXRvY29tcGxldGVTdWdnZXN0aW9uQWNjZXB0ZWQpOgorICAgICAgICAqIHNyYy9T
dWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3JjL1N1
Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL1dlYkZy
YW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Y3VycmVudEhpc3Rv
cnlJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpub3RpZml5UGFzc3dvcmRM
aXN0ZW5lck9mQXV0b2NvbXBsZXRlKToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmg6Cisg
ICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6Om1vdXNlRG93bik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpt
b3VzZVVwKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNlbGVjdFBvcHVwSGFuZGxl
S2V5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YXV0b2NvbXBsZXRlSGFu
ZGxlS2V5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aGlkZUF1dG9GaWxs
UG9wdXApOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Rm9jdXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YXBwbHlBdXRvRmlsbFN1Z2dlc3Rpb25zKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFwcGx5QXV0b2NvbXBsZXRlU3VnZ2VzdGlvbnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aGlkZVBvcHVwcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpyZWZyZXNoQXV0b0ZpbGxQb3B1cCk6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphdXRvRmlsbFBvcHVw
RGlkSGlkZSk6CisKIDIwMTAtMDYtMjUgIEpvaG4gQWJkLUVsLU1hbGVrICA8amFtQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCShyZXZpc2lvbiA2MTkxNSkKKysrIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzEsOCArMjMxLDYgQEAKICAgICAgICAgICAgICAgICAnc3JjL0FwcGxp
Y2F0aW9uQ2FjaGVIb3N0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9BcHBsaWNhdGlvbkNh
Y2hlSG9zdEludGVybmFsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvQXNzZXJ0TWF0Y2hpbmdF
bnVtcy5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xp
ZW50LmNwcCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGll
bnQuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9BdXRvRmlsbFBvcHVwTWVudUNsaWVudC5jcHAn
LAogICAgICAgICAgICAgICAgICdzcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuaCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsLmNwcCcsCkBAIC0zMTIs
OCArMzEwLDYgQEAKICAgICAgICAgICAgICAgICAnc3JjL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJJ
bXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuaCcsCi0gICAgICAg
ICAgICAgICAgJ3NyYy9TdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudC5jcHAnLAotICAgICAgICAg
ICAgICAgICdzcmMvU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQuaCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9UZW1wb3JhcnlHbHVlLmgnLAogICAgICAgICAgICAgICAgICdzcmMvVG9vbHNBZ2Vu
dC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkFjY2Vzc2liaWxpdHlDYWNoZS5jcHAnLApJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAkocmV2aXNpb24gNjE5MTUpCisrKyBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4NCw2ICs0
ODQsMTEgQEAgcHVibGljOgogICAgICAgICBXZWJJbnB1dEVsZW1lbnQsCiAgICAgICAgIFdlYlBh
c3N3b3JkQXV0b2NvbXBsZXRlTGlzdGVuZXIqKSA9IDA7CiAKKyAgICAvLyBEaXNwYXRjaGVzIGFu
IEF1dG9jb21wbGV0aW9uIG5vdGlmaWNhdGlvbiB0byByZWdpc3RlcmVkIGxpc3RlbmVyIGlmIG9u
ZQorICAgIC8vIGV4aXN0cyB0aGF0IGlzIHJlZ2lzdGVyZWQgYWdhaW5zdCB0aGUgV2ViSW5wdXRF
bGVtZW50IHNwZWNpZmllZC4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZpeVBhc3N3b3JkTGlzdGVu
ZXJPZkF1dG9jb21wbGV0ZSgKKyAgICAgICAgV2ViSW5wdXRFbGVtZW50KSA9IDA7CisKIAogICAg
IC8vIFV0aWxpdHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAkocmV2aXNp
b24gNjE5MTUpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMzLDE3ICsyMzMsMTggQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViQWNjZXNz
aWJpbGl0eU9iamVjdCBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkgPSAwOwogCiAKLSAgICAvLyBBdXRv
RmlsbCAvIEF1dG9jb21wbGV0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyAgICAvLyBBdXRvRmlsbCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIC8vIE5vdGlmaWVzIHRoZSBXZWJW
aWV3IHRoYXQgQXV0b0ZpbGwgc3VnZ2VzdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgYSBub2RlLgog
ICAgIHZpcnR1YWwgdm9pZCBhcHBseUF1dG9GaWxsU3VnZ2VzdGlvbnMoCiAgICAgICAgIGNvbnN0
IFdlYk5vZGUmLAogICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbmFtZXMsCiAg
ICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsYWJlbHMsCi0gICAgICAgIGludCBk
ZWZhdWx0U3VnZ2VzdGlvbkluZGV4KSA9IDA7CisgICAgICAgIGludCBzZXBhcmF0b3JJbmRleCkg
PSAwOwogCiAgICAgLy8gTm90aWZpZXMgdGhlIFdlYlZpZXcgdGhhdCBBdXRvY29tcGxldGUgc3Vn
Z2VzdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgYQogICAgIC8vIG5vZGUuCisgICAgLy8gREVQUkVD
QVRFRDogbWVyZ2luZyB3aXRoIGFwcGx5QXV0b0ZpbGxTdWdnZXN0aW9ucy4KICAgICB2aXJ0dWFs
IHZvaWQgYXBwbHlBdXRvY29tcGxldGVTdWdnZXN0aW9ucygKICAgICAgICAgY29uc3QgV2ViTm9k
ZSYsCiAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBzdWdnZXN0aW9ucywKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuY3Bw
CShyZXZpc2lvbiA2MTkxNSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b0ZpbGxQb3B1cE1l
bnVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSwxMiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50LmgiCiAKKyNpbmNs
dWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgor
I2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhU
TUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIldl
Yk5vZGUuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJWZWN0b3IuaCIK
QEAgLTQyLDYgKzQ3LDE4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAorQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xp
ZW50KCkKKyAgICA6IG1fc2VwYXJhdG9ySW5kZXgoLTEpCisgICAgLCBtX3NlbGVjdGVkSW5kZXgo
LTEpCisgICAgLCBtX3RleHRGaWVsZCgwKQorICAgICwgbV9BdXRvY29tcGxldGVNb2RlRW5hYmxl
ZChmYWxzZSkKK3sKK30KKworQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6On5BdXRvRmlsbFBvcHVw
TWVudUNsaWVudCgpCit7Cit9CisKIHVuc2lnbmVkIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojpn
ZXRTdWdnZXN0aW9uc0NvdW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9uYW1lcy5zaXplKCkg
KyAoKG1fc2VwYXJhdG9ySW5kZXggPT0gLTEpID8gMCA6IDEpOwpAQCAtNzUsMTkgKzkyLDM1IEBA
IHZvaWQgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OnJlbW92ZVN1Z2cKIAogdm9pZCBBdXRvRmls
bFBvcHVwTWVudUNsaWVudDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBm
aXJlRXZlbnRzKQogewotICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3ID0gZ2V0V2ViVmlldygpOwot
ICAgIGlmICghd2ViVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2VwYXJhdG9y
SW5kZXggIT0gLTEgJiYgbGlzdEluZGV4ID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2VwYXJh
dG9ySW5kZXgpKQotICAgICAgICAtLWxpc3RJbmRleDsKLQotICAgIEFTU0VSVChsaXN0SW5kZXgg
PCBtX25hbWVzLnNpemUoKSk7Ci0KLSAgICB3ZWJWaWV3LT5jbGllbnQoKS0+ZGlkQWNjZXB0QXV0
b0ZpbGxTdWdnZXN0aW9uKFdlYk5vZGUoZ2V0VGV4dEZpZWxkKCkpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9uYW1lc1tsaXN0SW5kZXhdLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9sYWJl
bHNbbGlzdEluZGV4XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpc3RJbmRleCk7CisgICAgLy8gREVQUkVDQVRFRDogV2lsbCBiZSByZW1vdmVk
IG9uY2UgQXV0b0ZpbGwgYW5kIEF1dG9jb21wbGV0ZSBtZXJnZSBpcworICAgIC8vIGNvbXBsZXRl
ZC4KKyAgICBpZiAobV9BdXRvY29tcGxldGVNb2RlRW5hYmxlZCkgeworICAgICAgICBtX3RleHRG
aWVsZC0+c2V0VmFsdWUoZ2V0U3VnZ2VzdGlvbihsaXN0SW5kZXgpKTsKKworICAgICAgICBXZWJW
aWV3SW1wbCogd2ViVmlldyA9IGdldFdlYlZpZXcoKTsKKyAgICAgICAgaWYgKCF3ZWJWaWV3KQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEVkaXRvckNsaWVudEltcGwqIGVkaXRvciA9
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxFZGl0b3JDbGllbnRJbXBsKj4od2ViVmlldy0+cGFn
ZSgpLT5lZGl0b3JDbGllbnQoKSk7CisgICAgICAgIEFTU0VSVChlZGl0b3IpOworICAgICAgICBl
ZGl0b3ItPm9uQXV0b2NvbXBsZXRlU3VnZ2VzdGlvbkFjY2VwdGVkKAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fdGV4dEZpZWxkLmdldCgpKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3ID0gZ2V0V2ViVmlldygpOworICAgICAg
aWYgKCF3ZWJWaWV3KQorICAgICAgICAgIHJldHVybjsKKworICAgICAgaWYgKG1fc2VwYXJhdG9y
SW5kZXggIT0gLTEgJiYgbGlzdEluZGV4ID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2VwYXJh
dG9ySW5kZXgpKQorICAgICAgICAgIC0tbGlzdEluZGV4OworCisgICAgICBBU1NFUlQobGlzdElu
ZGV4IDwgbV9uYW1lcy5zaXplKCkpOworCisgICAgICB3ZWJWaWV3LT5jbGllbnQoKS0+ZGlkQWNj
ZXB0QXV0b0ZpbGxTdWdnZXN0aW9uKFdlYk5vZGUoZ2V0VGV4dEZpZWxkKCkpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX25hbWVzW2xpc3RJ
bmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fbGFiZWxzW2xpc3RJbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpc3RJbmRleCk7CisgICAgfQogfQogCiB2b2lkIEF1dG9G
aWxsUG9wdXBNZW51Q2xpZW50OjpzZWxlY3Rpb25DaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwg
Ym9vbCBmaXJlRXZlbnRzKQpAQCAtMTA4LDIyICsxNDEsNTIgQEAgdm9pZCBBdXRvRmlsbFBvcHVw
TWVudUNsaWVudDo6c2VsZWN0aW9uQwogCiB2b2lkIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojpz
ZWxlY3Rpb25DbGVhcmVkKCkKIHsKLSAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IGdldFdlYlZp
ZXcoKTsKLSAgICBpZiAoIXdlYlZpZXcpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBTYW1lIGVm
ZmVjdCBkZXNpcmVkIGFzIHBvcHVwRGlkSGlkZSwgc28gY2FsbCB0aHJvdWdoLgorICAgIHBvcHVw
RGlkSGlkZSgpOworfQogCi0gICAgd2ViVmlldy0+c3VnZ2VzdGlvbnNQb3B1cERpZEhpZGUoKTsK
LSAgICB3ZWJWaWV3LT5jbGllbnQoKS0+ZGlkQ2xlYXJBdXRvRmlsbFNlbGVjdGlvbihXZWJOb2Rl
KGdldFRleHRGaWVsZCgpKSk7CitTdHJpbmcgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6Oml0ZW1U
ZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0U3VnZ2VzdGlv
bihsaXN0SW5kZXgpOworfQorCitQb3B1cE1lbnVTdHlsZSBBdXRvRmlsbFBvcHVwTWVudUNsaWVu
dDo6aXRlbVN0eWxlKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1f
c3R5bGU7Cit9CisKK1BvcHVwTWVudVN0eWxlIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjptZW51
U3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiAqbV9zdHlsZTsKK30KKworaW50IEF1dG9GaWxs
UG9wdXBNZW51Q2xpZW50OjpjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0Cit7CisgICAgLy8gQnVn
IGh0dHA6Ly9jcmJ1Zy5jb20vNzcwOCBzZWVtcyB0byBpbmRpY2F0ZSB0aGUgc3R5bGUgY2FuIGJl
IDAuCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEZpZWxkU3R5bGUoKTsKKyAgICBpZiAo
IXN0eWxlKQorICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpkZWZh
dWx0VGhlbWUoKS0+cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KHN0eWxlKTsKK30KKworaW50IEF1
dG9GaWxsUG9wdXBNZW51Q2xpZW50OjpjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAoreworICAg
IC8vIEJ1ZyBodHRwOi8vY3JidWcuY29tLzc3MDggc2VlbXMgdG8gaW5kaWNhdGUgdGhlIHN0eWxl
IGNhbiBiZSAwLgorICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRGaWVsZFN0eWxlKCk7Cisg
ICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gUmVuZGVyVGhl
bWU6OmRlZmF1bHRUaGVtZSgpLT5wb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KHN0eWxlKTsKIH0K
IAogdm9pZCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6cG9wdXBEaWRIaWRlKCkKIHsKLSAgICAv
LyBGSVhNRTogUmVmYWN0b3IgdGhpcyBtZXRob2QsIGFzIHNlbGVjdGlvbkNsZWFyZWQoKSBhbmQg
cG9wdXBEaWRIaWRlKCkKLSAgICAvLyBzaGFyZSB0aGUgZXhhY3Qgc2FtZSBmdW5jdGlvbmFsaXR5
LgogICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3ID0gZ2V0V2ViVmlldygpOwogICAgIGlmICghd2Vi
VmlldykKICAgICAgICAgcmV0dXJuOwogCisgICAgd2ViVmlldy0+YXV0b0ZpbGxQb3B1cERpZEhp
ZGUoKTsKICAgICB3ZWJWaWV3LT5jbGllbnQoKS0+ZGlkQ2xlYXJBdXRvRmlsbFNlbGVjdGlvbihX
ZWJOb2RlKGdldFRleHRGaWVsZCgpKSk7CiB9CiAKQEAgLTEzMiw2ICsxOTUsMjkgQEAgYm9vbCBB
dXRvRmlsbFBvcHVwTWVudUNsaWVudDo6aXRlbUlzU2VwYQogICAgIHJldHVybiAobV9zZXBhcmF0
b3JJbmRleCAhPSAtMSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zZXBhcmF0b3JJbmRleCkg
PT0gbGlzdEluZGV4KTsKIH0KIAordm9pZCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6c2V0VGV4
dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRleCkKK3sKKyAgICBtX3RleHRGaWVsZC0+c2V0VmFs
dWUoZ2V0U3VnZ2VzdGlvbihsaXN0SW5kZXgpKTsKK30KKworRm9udFNlbGVjdG9yKiBBdXRvRmls
bFBvcHVwTWVudUNsaWVudDo6Zm9udFNlbGVjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90
ZXh0RmllbGQtPmRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+Zm9udFNlbGVjdG9yKCk7Cit9
CisKK0hvc3RXaW5kb3cqIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojpob3N0V2luZG93KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV90ZXh0RmllbGQtPmRvY3VtZW50KCktPnZpZXcoKS0+aG9zdFdp
bmRvdygpOworfQorCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gQXV0b0ZpbGxQb3B1cE1lbnVDbGll
bnQ6OmNyZWF0ZVNjcm9sbGJhcigKKyAgICBTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwKKyAgICBT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwKKyAgICBTY3JvbGxiYXJDb250cm9sU2l6
ZSBzaXplKQoreworICAgIHJldHVybiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihj
bGllbnQsIG9yaWVudGF0aW9uLCBzaXplKTsKK30KKwogdm9pZCBBdXRvRmlsbFBvcHVwTWVudUNs
aWVudDo6aW5pdGlhbGl6ZSgKICAgICBIVE1MSW5wdXRFbGVtZW50KiB0ZXh0RmllbGQsCiAgICAg
Y29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIG5hbWVzLApAQCAtMTQxLDExICsyMjcsMjYgQEAg
dm9pZCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6aW5pdGlhbGl6ZQogICAgIEFTU0VSVChuYW1l
cy5zaXplKCkgPT0gbGFiZWxzLnNpemUoKSk7CiAgICAgQVNTRVJUKHNlcGFyYXRvckluZGV4IDwg
c3RhdGljX2Nhc3Q8aW50PihuYW1lcy5zaXplKCkpKTsKIAorICAgIG1fc2VsZWN0ZWRJbmRleCA9
IC0xOworICAgIG1fdGV4dEZpZWxkID0gdGV4dEZpZWxkOworCiAgICAgLy8gVGhlIHN1Z2dlc3Rp
b25zIG11c3QgYmUgc2V0IGJlZm9yZSBpbml0aWFsaXppbmcgdGhlCi0gICAgLy8gU3VnZ2VzdGlv
bnNQb3B1cE1lbnVDbGllbnQuCisgICAgLy8gQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuCiAgICAg
c2V0U3VnZ2VzdGlvbnMobmFtZXMsIGxhYmVscywgc2VwYXJhdG9ySW5kZXgpOwogCi0gICAgU3Vn
Z2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ6OmluaXRpYWxpemUodGV4dEZpZWxkLCAtMSk7CisgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAgICBSZW5kZXJUaGVtZTo6ZGVmYXVs
dFRoZW1lKCktPnN5c3RlbUZvbnQoQ1NTVmFsdWVXZWJraXRDb250cm9sLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24pOworICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IG1fdGV4dEZpZWxkLT5jb21wdXRlZFN0eWxlKCk7CisgICAgZm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29t
cHV0ZWRTaXplKCkpOworCisgICAgRm9udCBmb250KGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7Cisg
ICAgZm9udC51cGRhdGUodGV4dEZpZWxkLT5kb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPmZv
bnRTZWxlY3RvcigpKTsKKyAgICAvLyBUaGUgZGlyZWN0aW9uIG9mIHRleHQgaW4gcG9wdXAgbWVu
dSBpcyBzZXQgdGhlIHNhbWUgYXMgdGhlIGRpcmVjdGlvbiBvZgorICAgIC8vIHRoZSBpbnB1dCBl
bGVtZW50OiB0ZXh0RmllbGQuCisgICAgbV9zdHlsZS5zZXQobmV3IFBvcHVwTWVudVN0eWxlKENv
bG9yOjpibGFjaywgQ29sb3I6OndoaXRlLCBmb250LCB0cnVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMZW5ndGgoV2ViQ29yZTo6Rml4ZWQpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0RmllbGQtPnJlbmRlcmVyKCktPnN0eWxlKCktPmRpcmVj
dGlvbigpKSk7CiB9CiAKIHZvaWQgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OnNldFN1Z2dlc3Rp
b25zKGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBuYW1lcywKQEAgLTE2OSw0ICsyNzAsMzAg
QEAgdm9pZCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6c2V0U3VnZ2VzdAogICAgICAgICBzZXRT
ZWxlY3RlZEluZGV4KC0xKTsKIH0KIAorV2ViVmlld0ltcGwqIEF1dG9GaWxsUG9wdXBNZW51Q2xp
ZW50OjpnZXRXZWJWaWV3KCkgY29uc3QKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBtX3RleHRGaWVs
ZC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2hyb21lQ2xpZW50SW1w
bCo+KHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKSktPndlYlZpZXcoKTsKK30KKworUmVuZGVyU3R5
bGUqIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojp0ZXh0RmllbGRTdHlsZSgpIGNvbnN0Cit7Cisg
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV90ZXh0RmllbGQtPmNvbXB1dGVkU3R5bGUoKTsKKyAg
ICBpZiAoIXN0eWxlKSB7CisgICAgICAgIC8vIEl0IHNlZW1zIHdlIGNhbiBvbmx5IGhhdmUgYSAw
IHN0eWxlIGluIGEgVGV4dEZpZWxkIGlmIHRoZQorICAgICAgICAvLyBub2RlIGlzIGRldGFjaGVk
LCBpbiB3aGljaCBjYXNlIHdlIHRoZSBwb3B1cCBzaG91ZCBub3QgYmUKKyAgICAgICAgLy8gc2hv
d2luZy4gIFBsZWFzZSByZXBvcnQgdGhpcyBpbiBodHRwOi8vY3JidWcuY29tLzc3MDggYW5kCisg
ICAgICAgIC8vIGluY2x1ZGUgdGhlIHBhZ2UgeW91IHdlcmUgdmlzaXRpbmcuCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gc3R5bGU7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvRmlsbFBvcHVw
TWVudUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b0ZpbGxQ
b3B1cE1lbnVDbGllbnQuaAkocmV2aXNpb24gNjE5MTUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3Jj
L0F1dG9GaWxsUG9wdXBNZW51Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDMxICszMSw2
NCBAQAogI2lmbmRlZiBBdXRvRmlsbFBvcHVwTWVudUNsaWVudF9oCiAjZGVmaW5lIEF1dG9GaWxs
UG9wdXBNZW51Q2xpZW50X2gKIAotI2luY2x1ZGUgIlN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50
LmgiCisjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CitjbGFzcyBQb3B1cE1lbnVTdHlsZTsKK2NsYXNzIFJl
bmRlclN0eWxlOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYlN0cmluZzsKK2Ns
YXNzIFdlYlZpZXdJbXBsOwogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsK
IAogLy8gVGhlIEF1dG9GaWxsIHN1Z2dlc3Rpb25zIHBvcHVwIG1lbnUgY2xpZW50LCB1c2VkIHRv
IGRpc3BsYXkgbmFtZSBzdWdnZXN0aW9ucwogLy8gd2l0aCByaWdodC1qdXN0aWZpZWQgbGFiZWxz
LgotY2xhc3MgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQgOiBwdWJsaWMgU3VnZ2VzdGlvbnNQb3B1
cE1lbnVDbGllbnQgeworY2xhc3MgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQgOiBwdWJsaWMgV2Vi
Q29yZTo6UG9wdXBNZW51Q2xpZW50IHsKIHB1YmxpYzoKLSAgICAvLyBTdWdnZXN0aW9uc1BvcHVw
TWVudUNsaWVudCBpbXBsZW1lbnRhdGlvbjoKKyAgICBBdXRvRmlsbFBvcHVwTWVudUNsaWVudCgp
OworICAgIHZpcnR1YWwgfkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50KCk7CisKKyAgICAvLyBSZXR1
cm5zIHRoZSBudW1iZXIgb2Ygc3VnZ2VzdGlvbnMgYXZhaWxhYmxlLgogICAgIHZpcnR1YWwgdW5z
aWduZWQgZ2V0U3VnZ2VzdGlvbnNDb3VudCgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUg
c3VnZ2VzdGlvbiBhdCB8bGlzdEluZGV4fC4KICAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTdWdn
ZXN0aW9uKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7CisKKyAgICAvLyBSZW1vdmVzIHRoZSBz
dWdnZXN0aW9uIGF0IHxsaXN0SW5kZXh8IGZyb20gdGhlIGxpc3Qgb2Ygc3VnZ2VzdGlvbnMuCiAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZVN1Z2dlc3Rpb25BdEluZGV4KHVuc2lnbmVkIGxpc3RJbmRl
eCk7CiAKLSAgICAvLyBXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQgaW1wbGVtZW50YXRpb246Cisg
ICAgLy8gV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50IG1ldGhvZHM6CiAgICAgdmlydHVhbCB2b2lk
IHZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRydWUp
OwotICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwg
Ym9vbCBmaXJlRXZlbnRzID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvbkNoYW5n
ZWQodW5zaWduZWQsIGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25DbGVhcmVkKCk7
CisgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBpdGVtVG9vbFRpcCh1bnNpZ25l
ZCBsYXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OlN0cmluZygpOyB9CisgICAgdmly
dHVhbCBXZWJDb3JlOjpTdHJpbmcgaXRlbUFjY2Vzc2liaWxpdHlUZXh0KHVuc2lnbmVkIGxhc3RJ
bmRleCkgY29uc3QgeyByZXR1cm4gV2ViQ29yZTo6U3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlBvcHVwTWVudVN0eWxlIGl0ZW1TdHlsZSh1bnNpZ25l
ZCBsaXN0SW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgV2ViQ29yZTo6UG9wdXBNZW51U3R5bGUg
bWVudVN0eWxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRMZWZ0KCkgY29u
c3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0UmlnaHQoKSBjb25z
dCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgY2xpZW50UGFkZGluZ0xlZnQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGdldFN1Z2dlc3Rpb25zQ291bnQoKTsg
fQorICAgIHZpcnR1YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3NlbGVj
dGVkSW5kZXg7IH0KICAgICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRlKCk7CiAgICAgdmlydHVh
bCBib29sIGl0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBpdGVtSXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkIGxpc3RJ
bmRleCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUG9w
T3ZlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHZhbHVlU2hv
dWxkQ2hhbmdlT25Ib3RUcmFjaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCB2b2lkIHNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpOworICAgIHZpcnR1YWwg
V2ViQ29yZTo6Rm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6Okhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoCisgICAgICAgIFdl
YkNvcmU6OlNjcm9sbGJhckNsaWVudCogY2xpZW50LAorICAgICAgICBXZWJDb3JlOjpTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwKKyAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFyQ29u
dHJvbFNpemUgc2l6ZSk7CiAKICAgICB2b2lkIGluaXRpYWxpemUoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudCosCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+
JiBuYW1lcywKQEAgLTY2LDEyICs5OSwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbGFiZWxzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHNlcGFyYXRvckluZGV4KTsKIAorICAgIC8vIERFUFJFQ0FURUQ6IFdpbGwg
YmUgcmVtb3ZlZCBvbmNlIEF1dG9jb21wbGV0ZSBhbmQgQXV0b0ZpbGwgbWVyZ2UgaXMKKyAgICAv
LyBjb21wbGV0ZS4KKyAgICB2b2lkIHNldEF1dG9jb21wbGV0ZU1vZGUoYm9vbCBlbmFibGVkKSB7
IG1fQXV0b2NvbXBsZXRlTW9kZUVuYWJsZWQgPSBlbmFibGVkOyB9CisKIHByaXZhdGU6CisgICAg
V2ViVmlld0ltcGwqIGdldFdlYlZpZXcoKSBjb25zdDsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50KiBnZXRUZXh0RmllbGQoKSBjb25zdCB7IHJldHVybiBtX3RleHRGaWVsZC5nZXQoKTsg
fQorICAgIFdlYkNvcmU6OlJlbmRlclN0eWxlKiB0ZXh0RmllbGRTdHlsZSgpIGNvbnN0OworCisg
ICAgaW50IGdldFNlbGVjdGVkSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGVkSW5kZXg7
IH0KKyAgICB2b2lkIHNldFNlbGVjdGVkSW5kZXgoaW50IGluZGV4KSB7IG1fc2VsZWN0ZWRJbmRl
eCA9IGluZGV4OyB9CisKKyAgICAvLyBUaGUgbmFtZXMgYW5kIGxhYmVscyB0aGF0IG1ha2UgdXAg
dGhlIHRleHQgb2YgdGhlIG1lbnUgaXRlbXMuCiAgICAgVmVjdG9yPFdlYkNvcmU6OlN0cmluZz4g
bV9uYW1lczsKICAgICBWZWN0b3I8V2ViQ29yZTo6U3RyaW5nPiBtX2xhYmVsczsKIAogICAgIC8v
IFRoZSBpbmRleCBvZiB0aGUgc2VwYXJhdG9yLiAgLTEgaWYgdGhlcmUgaXMgbm8gc2VwYXJhdG9y
LgogICAgIGludCBtX3NlcGFyYXRvckluZGV4OworCisgICAgLy8gVGhlIGluZGV4IG9mIHRoZSBz
ZWxlY3RlZCBpdGVtLiAgLTEgaWYgdGhlcmUgaXMgbm8gc2VsZWN0ZWQgaXRlbS4KKyAgICBpbnQg
bV9zZWxlY3RlZEluZGV4OworCisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ+
IG1fdGV4dEZpZWxkOworICAgIE93blB0cjxXZWJDb3JlOjpQb3B1cE1lbnVTdHlsZT4gbV9zdHls
ZTsKKworICAgIC8vIERFUFJFQ0FURUQ6IFdpbGwgYmUgcmVtb3ZlZCBvbmNlIEF1dG9jb21wbGV0
ZSBhbmQgQXV0b0ZpbGwgbWVyZ2UgaXMKKyAgICAvLyBjb21wbGV0ZS4KKyAgICBib29sIG1fQXV0
b2NvbXBsZXRlTW9kZUVuYWJsZWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVu
dC5jcHAJKHJldmlzaW9uIDYxOTE1KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvY29tcGxl
dGVQb3B1cE1lbnVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Lmgi
Ci0KLSNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiV2ViU3RyaW5nLmgi
Ci0jaW5jbHVkZSAiV2ViVmVjdG9yLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotdW5zaWduZWQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50
OjpnZXRTdWdnZXN0aW9uc0NvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdWdnZXN0aW9u
cy5zaXplKCk7Ci19Ci0KLVdlYlN0cmluZyBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6Omdl
dFN1Z2dlc3Rpb24odW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAotewotICAgIEFTU0VSVChsaXN0
SW5kZXggPCBtX3N1Z2dlc3Rpb25zLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1fc3VnZ2VzdGlvbnNb
bGlzdEluZGV4XTsKLX0KLQotdm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OnJlbW92
ZVN1Z2dlc3Rpb25BdEluZGV4KHVuc2lnbmVkIGxpc3RJbmRleCkKLXsKLSAgICBBU1NFUlQobGlz
dEluZGV4IDwgbV9zdWdnZXN0aW9ucy5zaXplKCkpOwotICAgIG1fc3VnZ2VzdGlvbnMucmVtb3Zl
KGxpc3RJbmRleCk7Ci19Ci0KLXZvaWQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Ojppbml0
aWFsaXplKAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIHRleHRGaWVsZCwKLSAgICBjb25zdCBXZWJW
ZWN0b3I8V2ViU3RyaW5nPiYgc3VnZ2VzdGlvbnMsCi0gICAgaW50IGRlZmF1bHRTdWdnZXN0aW9u
SW5kZXgpCi17Ci0gICAgQVNTRVJUKGRlZmF1bHRTdWdnZXN0aW9uSW5kZXggPCBzdGF0aWNfY2Fz
dDxpbnQ+KHN1Z2dlc3Rpb25zLnNpemUoKSkpOwotCi0gICAgLy8gVGhlIHN1Z2dlc3Rpb25zIG11
c3QgYmUgc2V0IGJlZm9yZSBpbml0aWFsaXppbmcgdGhlCi0gICAgLy8gU3VnZ2VzdGlvbnNQb3B1
cE1lbnVDbGllbnQuCi0gICAgc2V0U3VnZ2VzdGlvbnMoc3VnZ2VzdGlvbnMpOwotCi0gICAgU3Vn
Z2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ6OmluaXRpYWxpemUodGV4dEZpZWxkLCBkZWZhdWx0U3Vn
Z2VzdGlvbkluZGV4KTsKLX0KLQotdm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OnNl
dFN1Z2dlc3Rpb25zKGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBzdWdnZXN0aW9ucykKLXsK
LSAgICBtX3N1Z2dlc3Rpb25zLmNsZWFyKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
dWdnZXN0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9zdWdnZXN0aW9ucy5hcHBlbmQoc3Vn
Z2VzdGlvbnNbaV0pOwotCi0gICAgLy8gVHJ5IHRvIHByZXNlcnZlIHNlbGVjdGlvbiBpZiBwb3Nz
aWJsZS4KLSAgICBpZiAoZ2V0U2VsZWN0ZWRJbmRleCgpID49IHN0YXRpY19jYXN0PGludD4oc3Vn
Z2VzdGlvbnMuc2l6ZSgpKSkKLSAgICAgICAgc2V0U2VsZWN0ZWRJbmRleCgtMSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvY29tcGxl
dGVQb3B1cE1lbnVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0F1
dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudC5oCShyZXZpc2lvbiA2MTkxNSkKKysrIFdlYktpdC9j
aHJvbWl1bS9zcmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50X2gKLSNk
ZWZpbmUgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50X2gKLSAKLSNpbmNsdWRlICJTdWdnZXN0
aW9uc1BvcHVwTWVudUNsaWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBIVE1M
SW5wdXRFbGVtZW50OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlN0cmluZzsK
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7Ci0KLS8vIFRoZSBBdXRvY29t
cGxldGUgc3VnZ2VzdGlvbnMgcG9wdXAgbWVudSBjbGllbnQsIHVzZWQgdG8gZGlzcGxheSBhIGxp
c3Qgb2YKLS8vIGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9ucy4KLWNsYXNzIEF1dG9jb21wbGV0ZVBv
cHVwTWVudUNsaWVudCA6IHB1YmxpYyBTdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudCB7Ci1wdWJs
aWM6Ci0gICAgLy8gU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQgaW1wbGVtZW50YXRpb246Ci0g
ICAgdmlydHVhbCB1bnNpZ25lZCBnZXRTdWdnZXN0aW9uc0NvdW50KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBXZWJTdHJpbmcgZ2V0U3VnZ2VzdGlvbih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTdWdnZXN0aW9uQXRJbmRleCh1bnNpZ25lZCBsaXN0SW5k
ZXgpOwotCi0gICAgdm9pZCBpbml0aWFsaXplKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqLAot
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgc3VnZ2VzdGlv
bnMsCi0gICAgICAgICAgICAgICAgICAgIGludCBkZWZhdWx0U3VnZ2VzdGlvbkluZGV4KTsKLQot
ICAgIHZvaWQgc2V0U3VnZ2VzdGlvbnMoY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mKTsKLQot
cHJpdmF0ZToKLSAgICBWZWN0b3I8V2ViQ29yZTo6U3RyaW5nPiBtX3N1Z2dlc3Rpb25zOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpJbmRleDogV2ViS2l0L2Nocm9taXVt
L3NyYy9FZGl0b3JDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0v
c3JjL0VkaXRvckNsaWVudEltcGwuY3BwCShyZXZpc2lvbiA2MTkxNSkKKysrIFdlYktpdC9jaHJv
bWl1bS9zcmMvRWRpdG9yQ2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1OCw3ICs2
NTgsNyBAQCB2b2lkIEVkaXRvckNsaWVudEltcGw6OnRleHRGaWVsZERpZEVuZEVkCiAgICAgbV9h
dXRvZmlsbFRpbWVyLnN0b3AoKTsKIAogICAgIC8vIEhpZGUgYW55IHNob3dpbmcgcG9wdXAuCi0g
ICAgbV93ZWJWaWV3LT5oaWRlU3VnZ2VzdGlvbnNQb3B1cCgpOworICAgIG1fd2ViVmlldy0+aGlk
ZUF1dG9GaWxsUG9wdXAoKTsKIAogICAgIGlmICghbV93ZWJWaWV3LT5jbGllbnQoKSkKICAgICAg
ICAgcmV0dXJuOyAvLyBUaGUgcGFnZSBpcyBnZXR0aW5nIGNsb3NlZCwgZG9uJ3QgZmlsbCB0aGUg
cGFzc3dvcmQuCkBAIC03NTQsNyArNzU0LDcgQEAgdm9pZCBFZGl0b3JDbGllbnRJbXBsOjpkb0F1
dG9maWxsKFRpbWVyPAogICAgICAgICAgICAgICAgICAgICAgICAmJiBpbnB1dEVsZW1lbnQtPnNl
bGVjdGlvbkVuZCgpID09IHN0YXRpY19jYXN0PGludD4odmFsdWUubGVuZ3RoKCkpOwogCiAgICAg
aWYgKCghYXJncy0+YXV0b2ZpbGxPbkVtcHR5VmFsdWUgJiYgdmFsdWUuaXNFbXB0eSgpKSB8fCAh
aXNDYXJldEF0RW5kKSB7Ci0gICAgICAgIG1fd2ViVmlldy0+aGlkZVN1Z2dlc3Rpb25zUG9wdXAo
KTsKKyAgICAgICAgbV93ZWJWaWV3LT5oaWRlQXV0b0ZpbGxQb3B1cCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC03OTYsMTEgKzc5Niw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50SW1wbDo6
b25BdXRvY29tcGxldGVTdWcKICAgICBpZiAoIXdlYmZyYW1lKQogICAgICAgICByZXR1cm47CiAK
LSAgICBXZWJQYXNzd29yZEF1dG9jb21wbGV0ZUxpc3RlbmVyKiBsaXN0ZW5lciA9IHdlYmZyYW1l
LT5nZXRQYXNzd29yZExpc3RlbmVyKHRleHRGaWVsZCk7Ci0gICAgLy8gUGFzc3dvcmQgbGlzdGVu
ZXJzIG5lZWQgdG8gYXV0b2NvbXBsZXRlIG90aGVyIGZpZWxkcyB0aGF0IGRlcGVuZCBvbiB0aGUK
LSAgICAvLyBpbnB1dCBlbGVtZW50IHdpdGggYXV0b2ZpbGwgc3VnZ2VzdGlvbnMuCi0gICAgaWYg
KGxpc3RlbmVyKQotICAgICAgICBsaXN0ZW5lci0+cGVyZm9ybUlubGluZUF1dG9jb21wbGV0ZSh0
ZXh0RmllbGQtPnZhbHVlKCksIGZhbHNlLCBmYWxzZSk7CisgICAgd2ViZnJhbWUtPm5vdGlmaXlQ
YXNzd29yZExpc3RlbmVyT2ZBdXRvY29tcGxldGUoV2ViSW5wdXRFbGVtZW50KHRleHRGaWVsZCkp
OwogfQogCiBib29sIEVkaXRvckNsaWVudEltcGw6OmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVu
dChFbGVtZW50KiBlbGVtZW50LApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9TdWdnZXN0aW9u
c1BvcHVwTWVudUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9T
dWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudC5jcHAJKHJldmlzaW9uIDYxOTE1KQorKysgV2ViS2l0
L2Nocm9taXVtL3NyYy9TdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3VnZ2Vz
dGlvbnNQb3B1cE1lbnVDbGllbnQuaCIKLQotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIK
LSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1
ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1TdWdnZXN0aW9uc1BvcHVw
TWVudUNsaWVudDo6U3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQoKQotICAgIDogbV90ZXh0Rmll
bGQoMCkKLSAgICAsIG1fc2VsZWN0ZWRJbmRleCgwKQotewotfQotCi1TdWdnZXN0aW9uc1BvcHVw
TWVudUNsaWVudDo6flN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50KCkKLXsKLX0KLQotLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzIHBlci1kZXJpdmVkIGNsYXNzPwotdm9pZCBTdWdnZXN0aW9uc1Bv
cHVwTWVudUNsaWVudDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJl
RXZlbnRzKQotewotICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShnZXRTdWdnZXN0aW9uKGxpc3RJ
bmRleCkpOwotCi0gICAgV2ViVmlld0ltcGwqIHdlYlZpZXcgPSBnZXRXZWJWaWV3KCk7Ci0gICAg
aWYgKCF3ZWJWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBFZGl0b3JDbGllbnRJbXBsKiBl
ZGl0b3IgPQotICAgICAgICBzdGF0aWNfY2FzdDxFZGl0b3JDbGllbnRJbXBsKj4od2ViVmlldy0+
cGFnZSgpLT5lZGl0b3JDbGllbnQoKSk7Ci0gICAgQVNTRVJUKGVkaXRvcik7Ci0gICAgZWRpdG9y
LT5vbkF1dG9jb21wbGV0ZVN1Z2dlc3Rpb25BY2NlcHRlZCgKLSAgICAgICAgc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KG1fdGV4dEZpZWxkLmdldCgpKSk7Ci19Ci0KLVN0cmluZyBTdWdn
ZXN0aW9uc1BvcHVwTWVudUNsaWVudDo6aXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25z
dAotewotICAgIHJldHVybiBnZXRTdWdnZXN0aW9uKGxpc3RJbmRleCk7Ci19Ci0KLVBvcHVwTWVu
dVN0eWxlIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50OjppdGVtU3R5bGUodW5zaWduZWQgbGlz
dEluZGV4KSBjb25zdAotewotICAgIHJldHVybiAqbV9zdHlsZTsKLX0KLQotUG9wdXBNZW51U3R5
bGUgU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ6Om1lbnVTdHlsZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuICptX3N0eWxlOwotfQotCi1pbnQgU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ6OmNs
aWVudFBhZGRpbmdMZWZ0KCkgY29uc3QKLXsKLSAgICAvLyBCdWcgaHR0cDovL2NyYnVnLmNvbS83
NzA4IHNlZW1zIHRvIGluZGljYXRlIHRoZSBzdHlsZSBjYW4gYmUgMC4KLSAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSB0ZXh0RmllbGRTdHlsZSgpOwotICAgIGlmICghc3R5bGUpCi0gICAgICAgcmV0
dXJuIDA7Ci0KLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5wb3B1cElu
dGVybmFsUGFkZGluZ0xlZnQoc3R5bGUpOwotfQotCi1pbnQgU3VnZ2VzdGlvbnNQb3B1cE1lbnVD
bGllbnQ6OmNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0Ci17Ci0gICAgLy8gQnVnIGh0dHA6Ly9j
cmJ1Zy5jb20vNzcwOCBzZWVtcyB0byBpbmRpY2F0ZSB0aGUgc3R5bGUgY2FuIGJlIDAuCi0gICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEZpZWxkU3R5bGUoKTsKLSAgICBpZiAoIXN0eWxlKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1l
KCktPnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoc3R5bGUpOwotfQotCi12b2lkIFN1Z2dlc3Rp
b25zUG9wdXBNZW51Q2xpZW50Ojpwb3B1cERpZEhpZGUoKQotewotICAgIFdlYlZpZXdJbXBsKiB3
ZWJWaWV3ID0gZ2V0V2ViVmlldygpOwotICAgIGlmICh3ZWJWaWV3KQotICAgICAgICB3ZWJWaWV3
LT5zdWdnZXN0aW9uc1BvcHVwRGlkSGlkZSgpOwotfQotCi12b2lkIFN1Z2dlc3Rpb25zUG9wdXBN
ZW51Q2xpZW50OjpzZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdEluZGV4KQotewotICAgIG1f
dGV4dEZpZWxkLT5zZXRWYWx1ZShnZXRTdWdnZXN0aW9uKGxpc3RJbmRleCkpOwotfQotCi1Gb250
U2VsZWN0b3IqIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50Ojpmb250U2VsZWN0b3IoKSBjb25z
dAotewotICAgIHJldHVybiBtX3RleHRGaWVsZC0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rvcigp
LT5mb250U2VsZWN0b3IoKTsKLX0KLQotSG9zdFdpbmRvdyogU3VnZ2VzdGlvbnNQb3B1cE1lbnVD
bGllbnQ6Omhvc3RXaW5kb3coKSBjb25zdAotewotICAgIHJldHVybiBtX3RleHRGaWVsZC0+ZG9j
dW1lbnQoKS0+dmlldygpLT5ob3N0V2luZG93KCk7Ci19Ci0KLVBhc3NSZWZQdHI8U2Nyb2xsYmFy
PiBTdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudDo6Y3JlYXRlU2Nyb2xsYmFyKAotICAgIFNjcm9s
bGJhckNsaWVudCogY2xpZW50LAotICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
LAotICAgIFNjcm9sbGJhckNvbnRyb2xTaXplIHNpemUpCi17Ci0gICAgcmV0dXJuIFNjcm9sbGJh
cjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRpb24sIHNpemUpOwotfQot
Ci1SZW5kZXJTdHlsZSogU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ6OnRleHRGaWVsZFN0eWxl
KCkgY29uc3QKLXsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3RleHRGaWVsZC0+Y29tcHV0
ZWRTdHlsZSgpOwotICAgIGlmICghc3R5bGUpIHsKLSAgICAgICAgLy8gSXQgc2VlbXMgd2UgY2Fu
IG9ubHkgaGF2ZSBhIDAgc3R5bGUgaW4gYSBUZXh0RmllbGQgaWYgdGhlCi0gICAgICAgIC8vIG5v
ZGUgaXMgZGV0YWNoZWQsIGluIHdoaWNoIGNhc2Ugd2UgdGhlIHBvcHVwIHNob3VkIG5vdCBiZQot
ICAgICAgICAvLyBzaG93aW5nLiAgUGxlYXNlIHJlcG9ydCB0aGlzIGluIGh0dHA6Ly9jcmJ1Zy5j
b20vNzcwOCBhbmQKLSAgICAgICAgLy8gaW5jbHVkZSB0aGUgcGFnZSB5b3Ugd2VyZSB2aXNpdGlu
Zy4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiBzdHls
ZTsKLX0KLQotdm9pZCBTdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudDo6aW5pdGlhbGl6ZShIVE1M
SW5wdXRFbGVtZW50KiB0ZXh0RmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBkZWZhdWx0U3VnZ2VzdGlvbkluZGV4KQotewotICAgIG1fdGV4dEZp
ZWxkID0gdGV4dEZpZWxkOwotICAgIG1fc2VsZWN0ZWRJbmRleCA9IGRlZmF1bHRTdWdnZXN0aW9u
SW5kZXg7Ci0KLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwotICAgIFJlbmRl
clRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtRm9udChDU1NWYWx1ZVdlYmtpdENvbnRyb2ws
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbik7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV90ZXh0RmllbGQtPmNvbXB1dGVkU3R5
bGUoKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250RGVz
Y3JpcHRpb24oKS5jb21wdXRlZFNpemUoKSk7Ci0KLSAgICBGb250IGZvbnQoZm9udERlc2NyaXB0
aW9uLCAwLCAwKTsKLSAgICBmb250LnVwZGF0ZSh0ZXh0RmllbGQtPmRvY3VtZW50KCktPnN0eWxl
U2VsZWN0b3IoKS0+Zm9udFNlbGVjdG9yKCkpOwotICAgIC8vIFRoZSBkaXJlY3Rpb24gb2YgdGV4
dCBpbiBwb3B1cCBtZW51IGlzIHNldCB0aGUgc2FtZSBhcyB0aGUgZGlyZWN0aW9uIG9mCi0gICAg
Ly8gdGhlIGlucHV0IGVsZW1lbnQ6IHRleHRGaWVsZC4KLSAgICBtX3N0eWxlLnNldChuZXcgUG9w
dXBNZW51U3R5bGUoQ29sb3I6OmJsYWNrLCBDb2xvcjo6d2hpdGUsIGZvbnQsIHRydWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aChXZWJDb3JlOjpGaXhlZCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZC0+cmVuZGVyZXIoKS0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKLX0KLQotV2ViVmlld0ltcGwqIFN1Z2dlc3Rpb25zUG9w
dXBNZW51Q2xpZW50OjpnZXRXZWJWaWV3KCkgY29uc3QKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBt
X3RleHRGaWVsZC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICgh
cGFnZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2hyb21l
Q2xpZW50SW1wbCo+KHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKSktPndlYlZpZXcoKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1N1Z2dlc3Rp
b25zUG9wdXBNZW51Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9T
dWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudC5oCShyZXZpc2lvbiA2MTkxNSkKKysrIFdlYktpdC9j
aHJvbWl1bS9zcmMvU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKLQotI2lmbmRlZiBT
dWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudF9oCi0jZGVmaW5lIFN1Z2dlc3Rpb25zUG9wdXBNZW51
Q2xpZW50X2gKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSFRNTElucHV0RWxlbWVudDsK
LWNsYXNzIFBvcHVwTWVudVN0eWxlOwotY2xhc3MgUmVuZGVyU3R5bGU7Ci19Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotY2xhc3MgV2ViU3RyaW5nOwotY2xhc3MgV2ViVmlld0ltcGw7Ci10ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOwotCi0vLyBUaGUgU3VnZ2VzdGlvbnMgcG9w
dXAgbWVudSBjbGllbnQsIHVzZWQgdG8gZGlzcGxheSBhIGxpc3Qgb2Ygc3VnZ2VzdGlvbnMuCi1j
bGFzcyBTdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpQb3B1cE1l
bnVDbGllbnQgewotcHVibGljOgotICAgIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50KCk7Ci0g
ICAgdmlydHVhbCB+U3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQoKTsKLQotICAgIC8vIFJldHVy
bnMgdGhlIG51bWJlciBvZiBzdWdnZXN0aW9ucyBhdmFpbGFibGUuCi0gICAgdmlydHVhbCB1bnNp
Z25lZCBnZXRTdWdnZXN0aW9uc0NvdW50KCkgY29uc3QgPSAwOwotCi0gICAgLy8gUmV0dXJucyB0
aGUgc3VnZ2VzdGlvbiBhdCB8bGlzdEluZGV4fC4KLSAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRT
dWdnZXN0aW9uKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgPSAwOwotCi0gICAgLy8gUmVtb3Zl
cyB0aGUgc3VnZ2VzdGlvbiBhdCB8bGlzdEluZGV4fCBmcm9tIHRoZSBsaXN0IG9mIHN1Z2dlc3Rp
b25zLgotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTdWdnZXN0aW9uQXRJbmRleCh1bnNpZ25lZCBs
aXN0SW5kZXgpID0gMDsKLQotICAgIC8vIFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCBtZXRob2Rz
OgotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29s
IGZpcmVFdmVudHMgPSB0cnVlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCh1
bnNpZ25lZCwgYm9vbCkge30KLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2xlYXJlZCgpIHt9
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4
KSBjb25zdDsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBpdGVtVG9vbFRpcCh1bnNpZ25l
ZCBsYXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OlN0cmluZygpOyB9Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpTdHJpbmcgaXRlbUFjY2Vzc2liaWxpdHlUZXh0KHVuc2lnbmVkIGxhc3RJ
bmRleCkgY29uc3QgeyByZXR1cm4gV2ViQ29yZTo6U3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgaXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBvcHVwTWVudVN0eWxlIGl0ZW1TdHlsZSh1bnNpZ25l
ZCBsaXN0SW5kZXgpIGNvbnN0OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6UG9wdXBNZW51U3R5bGUg
bWVudVN0eWxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRMZWZ0KCkgY29u
c3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0UmlnaHQoKSBjb25z
dCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBpbnQgY2xpZW50UGFkZGluZ0xlZnQoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGdldFN1Z2dlc3Rpb25zQ291bnQoKTsg
fQotICAgIHZpcnR1YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3NlbGVj
dGVkSW5kZXg7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRlKCk7Ci0gICAgdmlydHVh
bCBib29sIGl0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGl0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRl
eCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VsZWN0
ZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRQb3BPdmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgdmFsdWVTaG91bGRDaGFuZ2VPbkhvdFRyYWNrKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRl
eCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNv
bnN0OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0
OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IGNyZWF0ZVNjcm9s
bGJhcigKLSAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsCi0gICAgICAg
IFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLAotICAgICAgICBXZWJD
b3JlOjpTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKTsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQg
aW5pdGlhbGl6ZShXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiB0ZXh0RmllbGQsCi0gICAgICAg
ICAgICAgICAgICAgIGludCBkZWZhdWx0U3VnZ2VzdGlvbkluZGV4KTsKLQotICAgIGludCBnZXRT
ZWxlY3RlZEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RlZEluZGV4OyB9Ci0gICAgdm9p
ZCBzZXRTZWxlY3RlZEluZGV4KGludCBpbmRleCkgeyBtX3NlbGVjdGVkSW5kZXggPSBpbmRleDsg
fQotCi0gICAgV2ViVmlld0ltcGwqIGdldFdlYlZpZXcoKSBjb25zdDsKLSAgICBXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50KiBnZXRUZXh0RmllbGQoKSBjb25zdCB7IHJldHVybiBtX3RleHRGaWVs
ZC5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIFdlYkNvcmU6OlJlbmRlclN0eWxlKiB0ZXh0Rmll
bGRTdHlsZSgpIGNvbnN0OwotCi0gICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ+
IG1fdGV4dEZpZWxkOwotICAgIGludCBtX3NlbGVjdGVkSW5kZXg7Ci0gICAgT3duUHRyPFdlYkNv
cmU6OlBvcHVwTWVudVN0eWxlPiBtX3N0eWxlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLSNlbmRpZgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNp
b24gNjE5MTUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk2Miw3ICs5NjIsNyBAQCBXZWJIaXN0b3J5SXRlbSBXZWJGcmFtZUltcGw6
OnByZXZpb3VzSGlzCiBXZWJIaXN0b3J5SXRlbSBXZWJGcmFtZUltcGw6OmN1cnJlbnRIaXN0b3J5
SXRlbSgpIGNvbnN0CiB7CiAgICAgLy8gSWYgd2UgYXJlIHN0aWxsIGxvYWRpbmcsIHRoZW4gd2Ug
ZG9uJ3Qgd2FudCB0byBjbG9iYmVyIHRoZSBjdXJyZW50Ci0gICAgLy8gaGlzdG9yeSBpdGVtIGFz
IHRoaXMgY291bGQgY2F1c2UgdXMgdG8gbG9zZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIGFuZCAKKyAg
ICAvLyBoaXN0b3J5IGl0ZW0gYXMgdGhpcyBjb3VsZCBjYXVzZSB1cyB0byBsb3NlIHRoZSBzY3Jv
bGwgcG9zaXRpb24gYW5kCiAgICAgLy8gZG9jdW1lbnQgc3RhdGUuICBIb3dldmVyLCBpdCBpcyBP
SyBmb3IgbmV3IG5hdmlnYXRpb25zLgogICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+bG9hZFR5
cGUoKSA9PSBGcmFtZUxvYWRUeXBlU3RhbmRhcmQKICAgICAgICAgfHwgIW1fZnJhbWUtPmxvYWRl
cigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkpCkBAIC0x
OTYxLDYgKzE5NjEsMTcgQEAgYm9vbCBXZWJGcmFtZUltcGw6OnJlZ2lzdGVyUGFzc3dvcmRMaXN0
ZQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIFdlYkZyYW1lSW1wbDo6bm90aWZpeVBhc3N3
b3JkTGlzdGVuZXJPZkF1dG9jb21wbGV0ZSgKKyAgICBXZWJJbnB1dEVsZW1lbnQgaW5wdXRFbGVt
ZW50KQoreworICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBlbGVtZW50ID0gaW5wdXRFbGVt
ZW50Lm9wZXJhdG9yIFBhc3NSZWZQdHI8SFRNTElucHV0RWxlbWVudD4oKTsKKyAgICBXZWJQYXNz
d29yZEF1dG9jb21wbGV0ZUxpc3RlbmVyKiBsaXN0ZW5lciA9IGdldFBhc3N3b3JkTGlzdGVuZXIo
ZWxlbWVudC5nZXQoKSk7CisgICAgLy8gUGFzc3dvcmQgbGlzdGVuZXJzIG5lZWQgdG8gYXV0b2Nv
bXBsZXRlIG90aGVyIGZpZWxkcyB0aGF0IGRlcGVuZCBvbiB0aGUKKyAgICAvLyBpbnB1dCBlbGVt
ZW50IHdpdGggYXV0b2ZpbGwgc3VnZ2VzdGlvbnMuCisgICAgaWYgKGxpc3RlbmVyKQorICAgICAg
ICBsaXN0ZW5lci0+cGVyZm9ybUlubGluZUF1dG9jb21wbGV0ZShlbGVtZW50LT52YWx1ZSgpLCBm
YWxzZSwgZmFsc2UpOworfQorCiBXZWJQYXNzd29yZEF1dG9jb21wbGV0ZUxpc3RlbmVyKiBXZWJG
cmFtZUltcGw6OmdldFBhc3N3b3JkTGlzdGVuZXIoCiAgICAgSFRNTElucHV0RWxlbWVudCogaW5w
dXRFbGVtZW50KQogewpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCShyZXZpc2lv
biA2MTkxNSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE2NCw2ICsxNjQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0
TWF0Y2hDb3VudCgpOwogICAgIHZpcnR1YWwgYm9vbCByZWdpc3RlclBhc3N3b3JkTGlzdGVuZXIo
CiAgICAgICAgIFdlYklucHV0RWxlbWVudCwgV2ViUGFzc3dvcmRBdXRvY29tcGxldGVMaXN0ZW5l
ciopOworICAgIHZpcnR1YWwgdm9pZCBub3RpZml5UGFzc3dvcmRMaXN0ZW5lck9mQXV0b2NvbXBs
ZXRlKAorICAgICAgICBXZWJJbnB1dEVsZW1lbnQpOwogCiAgICAgdmlydHVhbCBXZWJTdHJpbmcg
Y29udGVudEFzVGV4dChzaXplX3QgbWF4Q2hhcnMpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViU3Ry
aW5nIGNvbnRlbnRBc01hcmt1cCgpIGNvbnN0OwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5jcHAJKHJldmlzaW9uIDYxOTE1KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJXZWJW
aWV3SW1wbC5oIgogCiAjaW5jbHVkZSAiQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuaCIKLSNpbmNs
dWRlICJBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJBWE9iamVjdENh
Y2hlLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ29tcG9zaXRpb25VbmRlcmxp
bmVWZWN0b3JCdWlsZGVyLmgiCkBAIC0xNTMsNyArMTUyLDcgQEAgQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShEcmFnT3BlcmF0aQogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShEcmFn
T3BlcmF0aW9uRGVsZXRlKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oRHJhZ09wZXJh
dGlvbkV2ZXJ5KTsKIAotc3RhdGljIGNvbnN0IFBvcHVwQ29udGFpbmVyU2V0dGluZ3Mgc3VnZ2Vz
dGlvbnNQb3B1cFNldHRpbmdzID0geworc3RhdGljIGNvbnN0IFBvcHVwQ29udGFpbmVyU2V0dGlu
Z3MgYXV0b0ZpbGxQb3B1cFNldHRpbmdzID0gewogICAgIGZhbHNlLCAgLy8gc2V0VGV4dE9uSW5k
ZXhDaGFuZ2UKICAgICBmYWxzZSwgIC8vIGFjY2VwdE9uQWJhbmRvbgogICAgIHRydWUsICAgLy8g
bG9vcFNlbGVjdGlvbk5hdmlnYXRpb24KQEAgLTIzOSw5ICsyMzgsOSBAQCBXZWJWaWV3SW1wbDo6
V2ViVmlld0ltcGwoV2ViVmlld0NsaWVudCogCiAgICAgLCBtX2Ryb3BFZmZlY3QoRHJvcEVmZmVj
dERlZmF1bHQpCiAgICAgLCBtX29wZXJhdGlvbnNBbGxvd2VkKFdlYkRyYWdPcGVyYXRpb25Ob25l
KQogICAgICwgbV9kcmFnT3BlcmF0aW9uKFdlYkRyYWdPcGVyYXRpb25Ob25lKQotICAgICwgbV9z
dWdnZXN0aW9uc1BvcHVwU2hvd2luZyhmYWxzZSkKLSAgICAsIG1fc3VnZ2VzdGlvbnNQb3B1cENs
aWVudCgwKQotICAgICwgbV9zdWdnZXN0aW9uc1BvcHVwKDApCisgICAgLCBtX2F1dG9GaWxsUG9w
dXBTaG93aW5nKGZhbHNlKQorICAgICwgbV9hdXRvRmlsbFBvcHVwQ2xpZW50KDApCisgICAgLCBt
X2F1dG9GaWxsUG9wdXAoMCkKICAgICAsIG1faXNUcmFuc3BhcmVudChmYWxzZSkKICAgICAsIG1f
dGFic1RvTGlua3MoZmFsc2UpCiAgICAgLCBtX2RyYWdTY3JvbGxUaW1lcihuZXcgRHJhZ1Njcm9s
bFRpbWVyKCkpCkBAIC0zNTYsNyArMzU1LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bW91c2VEb3du
KGNvbnN0IFdlYk1vdQogICAgICAgICAgICAgbV9tb3VzZUNhcHR1cmVOb2RlID0gaGl0Tm9kZTsK
IAogICAgICAgICAvLyBJZiBhIHRleHQgZmllbGQgdGhhdCBoYXMgZm9jdXMgaXMgY2xpY2tlZCBh
Z2Fpbiwgd2Ugc2hvdWxkIGRpc3BsYXkgdGhlCi0gICAgICAgIC8vIHN1Z2dlc3Rpb25zIHBvcHVw
LgorICAgICAgICAvLyBBdXRvRmlsbCBwb3B1cC4KICAgICAgICAgUmVmUHRyPE5vZGU+IGZvY3Vz
ZWROb2RlID0gZm9jdXNlZFdlYkNvcmVOb2RlKCk7CiAgICAgICAgIGlmIChmb2N1c2VkTm9kZS5n
ZXQoKSAmJiB0b0hUTUxJbnB1dEVsZW1lbnQoZm9jdXNlZE5vZGUuZ2V0KCkpKSB7CiAgICAgICAg
ICAgICBpZiAoaGl0Tm9kZSA9PSBmb2N1c2VkTm9kZSkgewpAQCAtMzc0LDcgKzM3Myw3IEBAIHZv
aWQgV2ViVmlld0ltcGw6Om1vdXNlRG93bihjb25zdCBXZWJNb3UKICAgICAgICAgUGxhdGZvcm1N
b3VzZUV2ZW50QnVpbGRlcihtYWluRnJhbWVJbXBsKCktPmZyYW1lVmlldygpLCBldmVudCkpOwog
CiAgICAgaWYgKGNsaWNrZWROb2RlLmdldCgpICYmIGNsaWNrZWROb2RlID09IGZvY3VzZWRXZWJD
b3JlTm9kZSgpKSB7Ci0gICAgICAgIC8vIEZvY3VzIGhhcyBub3QgY2hhbmdlZCwgc2hvdyB0aGUg
c3VnZ2VzdGlvbnMgcG9wdXAuCisgICAgICAgIC8vIEZvY3VzIGhhcyBub3QgY2hhbmdlZCwgc2hv
dyB0aGUgQXV0b0ZpbGwgcG9wdXAuCiAgICAgICAgIHN0YXRpY19jYXN0PEVkaXRvckNsaWVudElt
cGwqPihtX3BhZ2UtPmVkaXRvckNsaWVudCgpKS0+CiAgICAgICAgICAgICBzaG93Rm9ybUF1dG9m
aWxsRm9yTm9kZShjbGlja2VkTm9kZS5nZXQoKSk7CiAgICAgfQpAQCAtNDU2LDcgKzQ1NSw3IEBA
IHZvaWQgV2ViVmlld0ltcGw6Om1vdXNlVXAoY29uc3QgV2ViTW91c2UKICAgICAgICAgSW50UG9p
bnQgY29udGVudFBvaW50ID0gdmlldy0+d2luZG93VG9Db250ZW50cyhjbGlja1BvaW50KTsKICAg
ICAgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0ID0gZm9jdXNlZC0+ZXZlbnRIYW5kbGVy
KCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KGNvbnRlbnRQb2ludCwgZmFsc2UsIGZhbHNlLCBTaG91
bGRIaXRUZXN0U2Nyb2xsYmFycyk7CiAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc2VuZCBh
IHBhc3RlIHdoZW4gbWlkZGxlIGNsaWNraW5nIGEgc2Nyb2xsIGJhciBvciBhCi0gICAgICAgIC8v
IGxpbmsgKHdoaWNoIHdpbGwgbmF2aWdhdGUgbGF0ZXIgaW4gdGhlIGNvZGUpLiAgVGhlIG1haW4g
c2Nyb2xsYmFycyAKKyAgICAgICAgLy8gbGluayAod2hpY2ggd2lsbCBuYXZpZ2F0ZSBsYXRlciBp
biB0aGUgY29kZSkuICBUaGUgbWFpbiBzY3JvbGxiYXJzCiAgICAgICAgIC8vIGhhdmUgdG8gYmUg
aGFuZGxlZCBzZXBhcmF0ZWx5LgogICAgICAgICBpZiAoIWhpdFRlc3RSZXN1bHQuc2Nyb2xsYmFy
KCkgJiYgIWhpdFRlc3RSZXN1bHQuaXNMaXZlTGluaygpICYmIGZvY3VzZWQgJiYgIXZpZXctPnNj
cm9sbGJhckF0UG9pbnQoY2xpY2tQb2ludCkpIHsKICAgICAgICAgICAgIEVkaXRvciogZWRpdG9y
ID0gZm9jdXNlZC0+ZWRpdG9yKCk7CkBAIC01NTcsMTMgKzU1NiwxMyBAQCBib29sIFdlYlZpZXdJ
bXBsOjpzZWxlY3RQb3B1cEhhbmRsZUtleUV2CiB7CiAgICAgaWYgKCFtX3NlbGVjdFBvcHVwKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICByZXR1cm4gbV9zZWxlY3RQb3B1cC0+
aGFuZGxlS2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50QnVpbGRlcihldmVudCkpOwogfQog
CiBib29sIFdlYlZpZXdJbXBsOjphdXRvY29tcGxldGVIYW5kbGVLZXlFdmVudChjb25zdCBXZWJL
ZXlib2FyZEV2ZW50JiBldmVudCkKIHsKLSAgICBpZiAoIW1fc3VnZ2VzdGlvbnNQb3B1cFNob3dp
bmcKKyAgICBpZiAoIW1fYXV0b0ZpbGxQb3B1cFNob3dpbmcKICAgICAgICAgLy8gSG9tZSBhbmQg
RW5kIHNob3VsZCBiZSBsZWZ0IHRvIHRoZSB0ZXh0IGZpZWxkIHRvIHByb2Nlc3MuCiAgICAgICAg
IHx8IGV2ZW50LndpbmRvd3NLZXlDb2RlID09IFZLRVlfSE9NRQogICAgICAgICB8fCBldmVudC53
aW5kb3dzS2V5Q29kZSA9PSBWS0VZX0VORCkKQEAgLTU3MSw3ICs1NzAsNyBAQCBib29sIFdlYlZp
ZXdJbXBsOjphdXRvY29tcGxldGVIYW5kbGVLZXlFCiAKICAgICAvLyBQcmVzc2luZyBkZWxldGUg
dHJpZ2dlcnMgdGhlIHJlbW92YWwgb2YgdGhlIHNlbGVjdGVkIHN1Z2dlc3Rpb24gZnJvbSB0aGUg
REIuCiAgICAgaWYgKGV2ZW50LndpbmRvd3NLZXlDb2RlID09IFZLRVlfREVMRVRFCi0gICAgICAg
ICYmIG1fc3VnZ2VzdGlvbnNQb3B1cC0+c2VsZWN0ZWRJbmRleCgpICE9IC0xKSB7CisgICAgICAg
ICYmIG1fYXV0b0ZpbGxQb3B1cC0+c2VsZWN0ZWRJbmRleCgpICE9IC0xKSB7CiAgICAgICAgIE5v
ZGUqIG5vZGUgPSBmb2N1c2VkV2ViQ29yZU5vZGUoKTsKICAgICAgICAgaWYgKCFub2RlIHx8IChu
b2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9ERSkpIHsKICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTgzLDIyICs1ODIsMjIgQEAgYm9vbCBXZWJWaWV3SW1w
bDo6YXV0b2NvbXBsZXRlSGFuZGxlS2V5RQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAKLSAgICAgICAgaW50IHNlbGVjdGVkSW5kZXggPSBtX3N1Z2dlc3Rpb25zUG9wdXAt
PnNlbGVjdGVkSW5kZXgoKTsKKyAgICAgICAgaW50IHNlbGVjdGVkSW5kZXggPSBtX2F1dG9GaWxs
UG9wdXAtPnNlbGVjdGVkSW5kZXgoKTsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnQpOwogICAgICAg
ICBXZWJTdHJpbmcgbmFtZSA9IGlucHV0RWxlbWVudC0+bmFtZSgpOwotICAgICAgICBXZWJTdHJp
bmcgdmFsdWUgPSBtX3N1Z2dlc3Rpb25zUG9wdXBDbGllbnQtPml0ZW1UZXh0KHNlbGVjdGVkSW5k
ZXgpOworICAgICAgICBXZWJTdHJpbmcgdmFsdWUgPSBtX2F1dG9GaWxsUG9wdXBDbGllbnQtPml0
ZW1UZXh0KHNlbGVjdGVkSW5kZXgpOwogICAgICAgICBtX2NsaWVudC0+cmVtb3ZlQXV0b2ZpbGxT
dWdnZXN0aW9ucyhuYW1lLCB2YWx1ZSk7CiAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZW50cmllcyBp
biB0aGUgY3VycmVudGx5IHNob3dpbmcgcG9wdXAgdG8gcmVmbGVjdCB0aGUKICAgICAgICAgLy8g
ZGVsZXRpb24uCi0gICAgICAgIG1fc3VnZ2VzdGlvbnNQb3B1cENsaWVudC0+cmVtb3ZlU3VnZ2Vz
dGlvbkF0SW5kZXgoc2VsZWN0ZWRJbmRleCk7Ci0gICAgICAgIHJlZnJlc2hTdWdnZXN0aW9uc1Bv
cHVwKCk7CisgICAgICAgIG1fYXV0b0ZpbGxQb3B1cENsaWVudC0+cmVtb3ZlU3VnZ2VzdGlvbkF0
SW5kZXgoc2VsZWN0ZWRJbmRleCk7CisgICAgICAgIHJlZnJlc2hBdXRvRmlsbFBvcHVwKCk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoIW1fc3VnZ2VzdGlvbnNQb3B1
cC0+aXNJbnRlcmVzdGVkSW5FdmVudEZvcktleShldmVudC53aW5kb3dzS2V5Q29kZSkpCisgICAg
aWYgKCFtX2F1dG9GaWxsUG9wdXAtPmlzSW50ZXJlc3RlZEluRXZlbnRGb3JLZXkoZXZlbnQud2lu
ZG93c0tleUNvZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9zdWdnZXN0
aW9uc1BvcHVwLT5oYW5kbGVLZXlFdmVudChQbGF0Zm9ybUtleWJvYXJkRXZlbnRCdWlsZGVyKGV2
ZW50KSkpIHsKKyAgICBpZiAobV9hdXRvRmlsbFBvcHVwLT5oYW5kbGVLZXlFdmVudChQbGF0Zm9y
bUtleWJvYXJkRXZlbnRCdWlsZGVyKGV2ZW50KSkpIHsKICAgICAgICAgLy8gV2UgbmVlZCB0byBp
Z25vcmUgdGhlIG5leHQgQ2hhciBldmVudCBhZnRlciB0aGlzIG90aGVyd2lzZSBwcmVzc2luZwog
ICAgICAgICAvLyBlbnRlciB3aGVuIHNlbGVjdGluZyBhbiBpdGVtIGluIHRoZSBtZW51IHdpbGwg
Z28gdG8gdGhlIHBhZ2UuCiAgICAgICAgIGlmIChXZWJJbnB1dEV2ZW50OjpSYXdLZXlEb3duID09
IGV2ZW50LnR5cGUpCkBAIC04ODAsMTEgKzg3OSwxMSBAQCB2b2lkICBXZWJWaWV3SW1wbDo6cG9w
dXBDbG9zZWQoV2ViQ29yZTo6CiAgICAgfQogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpoaWRlU3Vn
Z2VzdGlvbnNQb3B1cCgpCit2b2lkIFdlYlZpZXdJbXBsOjpoaWRlQXV0b0ZpbGxQb3B1cCgpCiB7
Ci0gICAgaWYgKG1fc3VnZ2VzdGlvbnNQb3B1cFNob3dpbmcpIHsKLSAgICAgICAgbV9zdWdnZXN0
aW9uc1BvcHVwLT5oaWRlUG9wdXAoKTsKLSAgICAgICAgbV9zdWdnZXN0aW9uc1BvcHVwU2hvd2lu
ZyA9IGZhbHNlOworICAgIGlmIChtX2F1dG9GaWxsUG9wdXBTaG93aW5nKSB7CisgICAgICAgIG1f
YXV0b0ZpbGxQb3B1cC0+aGlkZVBvcHVwKCk7CisgICAgICAgIG1fYXV0b0ZpbGxQb3B1cFNob3dp
bmcgPSBmYWxzZTsKICAgICB9CiB9CiAKQEAgLTExNDIsNyArMTE0MSw3IEBAIHZvaWQgV2ViVmll
d0ltcGw6OnNldEZvY3VzKGJvb2wgZW5hYmxlKQogICAgICAgICB9CiAgICAgICAgIG1faW1lQWNj
ZXB0RXZlbnRzID0gdHJ1ZTsKICAgICB9IGVsc2UgewotICAgICAgICBoaWRlU3VnZ2VzdGlvbnNQ
b3B1cCgpOworICAgICAgICBoaWRlQXV0b0ZpbGxQb3B1cCgpOwogICAgICAgICBoaWRlU2VsZWN0
UG9wdXAoKTsKIAogICAgICAgICAvLyBDbGVhciBmb2N1cyBvbiB0aGUgY3VycmVudGx5IGZvY3Vz
ZWQgZnJhbWUgaWYgYW55LgpAQCAtMTg1OCw3ICsxODU3LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6
YXBwbHlBdXRvRmlsbFN1Z2dlc3RpbwogICAgIEFTU0VSVChzZXBhcmF0b3JJbmRleCA8IHN0YXRp
Y19jYXN0PGludD4obmFtZXMuc2l6ZSgpKSk7CiAKICAgICBpZiAobmFtZXMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGhpZGVTdWdnZXN0aW9uc1BvcHVwKCk7CisgICAgICAgIGhpZGVBdXRvRmlsbFBv
cHVwKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE4NjcsNyArMTg2Niw3IEBAIHZv
aWQgV2ViVmlld0ltcGw6OmFwcGx5QXV0b0ZpbGxTdWdnZXN0aW8KICAgICAvLyBmb2N1c2VkIG5v
ZGUsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLiAgRklYTUU6IGFsc28gY2hlY2sgdGhlCiAg
ICAgLy8gY2FyZXQgaXMgYXQgdGhlIGVuZCBhbmQgdGhhdCB0aGUgdGV4dCBoYXMgbm90IGNoYW5n
ZWQuCiAgICAgaWYgKCFmb2N1c2VkTm9kZSB8fCBmb2N1c2VkTm9kZSAhPSBQYXNzUmVmUHRyPE5v
ZGU+KG5vZGUpKSB7Ci0gICAgICAgIGhpZGVTdWdnZXN0aW9uc1BvcHVwKCk7CisgICAgICAgIGhp
ZGVBdXRvRmlsbFBvcHVwKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE4NzksOTMg
KzE4NzgsNTIgQEAgdm9pZCBXZWJWaWV3SW1wbDo6YXBwbHlBdXRvRmlsbFN1Z2dlc3RpbwogICAg
IGlmICghbV9hdXRvRmlsbFBvcHVwQ2xpZW50LmdldCgpKQogICAgICAgICBtX2F1dG9GaWxsUG9w
dXBDbGllbnQuc2V0KG5ldyBBdXRvRmlsbFBvcHVwTWVudUNsaWVudCk7CiAKLSAgICBtX2F1dG9G
aWxsUG9wdXBDbGllbnQtPmluaXRpYWxpemUoaW5wdXRFbGVtLCBuYW1lcywgbGFiZWxzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3JJbmRleCk7Ci0KLSAg
ICBpZiAobV9zdWdnZXN0aW9uc1BvcHVwQ2xpZW50ICE9IG1fYXV0b0ZpbGxQb3B1cENsaWVudC5n
ZXQoKSkgewotICAgICAgICBoaWRlU3VnZ2VzdGlvbnNQb3B1cCgpOwotICAgICAgICBtX3N1Z2dl
c3Rpb25zUG9wdXBDbGllbnQgPSBtX2F1dG9GaWxsUG9wdXBDbGllbnQuZ2V0KCk7Ci0gICAgfQor
ICAgIG1fYXV0b0ZpbGxQb3B1cENsaWVudC0+aW5pdGlhbGl6ZShpbnB1dEVsZW0sIG5hbWVzLCBs
YWJlbHMsIHNlcGFyYXRvckluZGV4KTsKIAogICAgIGlmICghbV9hdXRvRmlsbFBvcHVwLmdldCgp
KSB7Ci0gICAgICAgIG1fYXV0b0ZpbGxQb3B1cCA9IFBvcHVwQ29udGFpbmVyOjpjcmVhdGUobV9z
dWdnZXN0aW9uc1BvcHVwQ2xpZW50LAorICAgICAgICBtX2F1dG9GaWxsUG9wdXAgPSBQb3B1cENv
bnRhaW5lcjo6Y3JlYXRlKG1fYXV0b0ZpbGxQb3B1cENsaWVudC5nZXQoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3B1cENvbnRhaW5lcjo6U3Vn
Z2VzdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdWdnZXN0aW9uc1BvcHVwU2V0dGluZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG9GaWxsUG9wdXBTZXR0aW5ncyk7CiAgICAgfQogCi0g
ICAgaWYgKG1fc3VnZ2VzdGlvbnNQb3B1cCAhPSBtX2F1dG9GaWxsUG9wdXAuZ2V0KCkpCi0gICAg
ICAgIG1fc3VnZ2VzdGlvbnNQb3B1cCA9IG1fYXV0b0ZpbGxQb3B1cC5nZXQoKTsKLQotICAgIGlm
IChtX3N1Z2dlc3Rpb25zUG9wdXBTaG93aW5nKSB7CisgICAgaWYgKG1fYXV0b0ZpbGxQb3B1cFNo
b3dpbmcpIHsKICAgICAgICAgbV9hdXRvRmlsbFBvcHVwQ2xpZW50LT5zZXRTdWdnZXN0aW9ucyhu
YW1lcywgbGFiZWxzLCBzZXBhcmF0b3JJbmRleCk7Ci0gICAgICAgIHJlZnJlc2hTdWdnZXN0aW9u
c1BvcHVwKCk7CisgICAgICAgIHJlZnJlc2hBdXRvRmlsbFBvcHVwKCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgbV9zdWdnZXN0aW9uc1BvcHVwLT5zaG93KGZvY3VzZWROb2RlLT5nZXRSZWN0KCks
CisgICAgICAgIG1fYXV0b0ZpbGxQb3B1cC0+c2hvdyhmb2N1c2VkTm9kZS0+Z2V0UmVjdCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZE5vZGUtPm93bmVyRG9jdW1l
bnQoKS0+dmlldygpLCAwKTsKLSAgICAgICAgbV9zdWdnZXN0aW9uc1BvcHVwU2hvd2luZyA9IHRy
dWU7CisgICAgICAgIG1fYXV0b0ZpbGxQb3B1cFNob3dpbmcgPSB0cnVlOwogICAgIH0KKworICAg
IC8vIERFUFJFQ0FURUQ6IFRoaXMgc3BlY2lhbCBtb2RlIHdpbGwgZ28gYXdheSBvbmNlIEF1dG9G
aWxsIGFuZCBBdXRvY29tcGxldGUKKyAgICAvLyBtZXJnZSBpcyBjb21wbGV0ZS4KKyAgICBpZiAo
bV9hdXRvRmlsbFBvcHVwQ2xpZW50KQorICAgICAgICBtX2F1dG9GaWxsUG9wdXBDbGllbnQtPnNl
dEF1dG9jb21wbGV0ZU1vZGUoZmFsc2UpOwogfQogCisvLyBERVBSRUNBVEVEOiByZXBsYWNpbmcg
d2l0aCBhcHBseUF1dG9GaWxsU3VnZ2VzdGlvbnMuCiB2b2lkIFdlYlZpZXdJbXBsOjphcHBseUF1
dG9jb21wbGV0ZVN1Z2dlc3Rpb25zKAogICAgIGNvbnN0IFdlYk5vZGUmIG5vZGUsCiAgICAgY29u
c3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHN1Z2dlc3Rpb25zLAogICAgIGludCBkZWZhdWx0U3Vn
Z2VzdGlvbkluZGV4KQogewotICAgIEFTU0VSVChkZWZhdWx0U3VnZ2VzdGlvbkluZGV4IDwgc3Rh
dGljX2Nhc3Q8aW50PihzdWdnZXN0aW9ucy5zaXplKCkpKTsKLQotICAgIGlmICghbV9wYWdlLmdl
dCgpIHx8IHN1Z2dlc3Rpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBoaWRlU3VnZ2VzdGlvbnNQ
b3B1cCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPE5vZGU+IGZvY3Vz
ZWROb2RlID0gZm9jdXNlZFdlYkNvcmVOb2RlKCk7Ci0gICAgLy8gSWYgdGhlIG5vZGUgZm9yIHdo
aWNoIHdlIHF1ZXJpZWQgdGhlIEF1dG9jb21wbGV0ZSBzdWdnZXN0aW9ucyBpcyBub3QgdGhlCi0g
ICAgLy8gZm9jdXNlZCBub2RlLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4gIEZJWE1FOiBh
bHNvIGNoZWNrIHRoZQotICAgIC8vIGNhcmV0IGlzIGF0IHRoZSBlbmQgYW5kIHRoYXQgdGhlIHRl
eHQgaGFzIG5vdCBjaGFuZ2VkLgotICAgIGlmICghZm9jdXNlZE5vZGUgfHwgZm9jdXNlZE5vZGUg
IT0gUGFzc1JlZlB0cjxOb2RlPihub2RlKSkgewotICAgICAgICBoaWRlU3VnZ2VzdGlvbnNQb3B1
cCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5w
dXRFbGVtID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGZvY3VzZWRO
b2RlLmdldCgpKTsKLQotICAgIC8vIFRoZSBmaXJzdCB0aW1lIHRoZSBBdXRvY29tcGxldGUgaXMg
c2hvd24gd2UnbGwgY3JlYXRlIHRoZSBjbGllbnQgYW5kIHRoZQotICAgIC8vIHBvcHVwLgotICAg
IGlmICghbV9hdXRvY29tcGxldGVQb3B1cENsaWVudC5nZXQoKSkKLSAgICAgICAgbV9hdXRvY29t
cGxldGVQb3B1cENsaWVudC5zZXQobmV3IEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudCk7Ci0K
LSAgICBtX2F1dG9jb21wbGV0ZVBvcHVwQ2xpZW50LT5pbml0aWFsaXplKGlucHV0RWxlbSwgc3Vn
Z2VzdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0U3VnZ2VzdGlvbkluZGV4KTsKKyAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiBuYW1lcyhzdWdn
ZXN0aW9ucy5zaXplKCkpOworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IGxhYmVscyhzdWdnZXN0
aW9ucy5zaXplKCkpOwogCi0gICAgaWYgKG1fc3VnZ2VzdGlvbnNQb3B1cENsaWVudCAhPSBtX2F1
dG9jb21wbGV0ZVBvcHVwQ2xpZW50LmdldCgpKSB7Ci0gICAgICAgIGhpZGVTdWdnZXN0aW9uc1Bv
cHVwKCk7Ci0gICAgICAgIG1fc3VnZ2VzdGlvbnNQb3B1cENsaWVudCA9IG1fYXV0b2NvbXBsZXRl
UG9wdXBDbGllbnQuZ2V0KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWdnZXN0aW9u
cy5zaXplKCk7ICsraSkgeworICAgICAgICBuYW1lc1tpXSA9IHN1Z2dlc3Rpb25zW2ldOworICAg
ICAgICBsYWJlbHNbaV0gPSBXZWJTdHJpbmcoKTsKICAgICB9CiAKLSAgICBpZiAoIW1fYXV0b2Nv
bXBsZXRlUG9wdXAuZ2V0KCkpIHsKLSAgICAgICAgbV9hdXRvY29tcGxldGVQb3B1cCA9IFBvcHVw
Q29udGFpbmVyOjpjcmVhdGUobV9zdWdnZXN0aW9uc1BvcHVwQ2xpZW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3B1cENvbnRhaW5lcjo6
U3VnZ2VzdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3VnZ2VzdGlvbnNQb3B1cFNldHRpbmdzKTsKLSAgICB9Ci0KLSAgICBpZiAobV9z
dWdnZXN0aW9uc1BvcHVwICE9IG1fYXV0b2NvbXBsZXRlUG9wdXAuZ2V0KCkpCi0gICAgICAgIG1f
c3VnZ2VzdGlvbnNQb3B1cCA9IG1fYXV0b2NvbXBsZXRlUG9wdXAuZ2V0KCk7Ci0KLSAgICBpZiAo
bV9zdWdnZXN0aW9uc1BvcHVwU2hvd2luZykgewotICAgICAgICBtX2F1dG9jb21wbGV0ZVBvcHVw
Q2xpZW50LT5zZXRTdWdnZXN0aW9ucyhzdWdnZXN0aW9ucyk7Ci0gICAgICAgIHJlZnJlc2hTdWdn
ZXN0aW9uc1BvcHVwKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9zdWdnZXN0aW9uc1BvcHVw
LT5zaG93KGZvY3VzZWROb2RlLT5nZXRSZWN0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb2N1c2VkTm9kZS0+b3duZXJEb2N1bWVudCgpLT52aWV3KCksIDApOwotICAgICAg
ICBtX3N1Z2dlc3Rpb25zUG9wdXBTaG93aW5nID0gdHJ1ZTsKLSAgICB9CisgICAgYXBwbHlBdXRv
RmlsbFN1Z2dlc3Rpb25zKG5vZGUsIG5hbWVzLCBsYWJlbHMsIC0xKTsKKyAgICBpZiAobV9hdXRv
RmlsbFBvcHVwQ2xpZW50KQorICAgICAgICBtX2F1dG9GaWxsUG9wdXBDbGllbnQtPnNldEF1dG9j
b21wbGV0ZU1vZGUodHJ1ZSk7CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OmhpZGVQb3B1cHMoKQog
ewogICAgIGhpZGVTZWxlY3RQb3B1cCgpOwotICAgIGhpZGVTdWdnZXN0aW9uc1BvcHVwKCk7Cisg
ICAgaGlkZUF1dG9GaWxsUG9wdXAoKTsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6cGVyZm9ybUN1
c3RvbUNvbnRleHRNZW51QWN0aW9uKHVuc2lnbmVkIGFjdGlvbikKQEAgLTIxNTEsMjQgKzIxMDks
MjUgQEAgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCogV2ViVmlld0ltcGw6OgogfQogI2VuZGlm
CiAKLXZvaWQgV2ViVmlld0ltcGw6OnJlZnJlc2hTdWdnZXN0aW9uc1BvcHVwKCkKK3ZvaWQgV2Vi
Vmlld0ltcGw6OnJlZnJlc2hBdXRvRmlsbFBvcHVwKCkKIHsKLSAgICBBU1NFUlQobV9zdWdnZXN0
aW9uc1BvcHVwU2hvd2luZyk7CisgICAgQVNTRVJUKG1fYXV0b0ZpbGxQb3B1cFNob3dpbmcpOwog
CiAgICAgLy8gSGlkZSB0aGUgcG9wdXAgaWYgaXQgaGFzIGJlY29tZSBlbXB0eS4KLSAgICBpZiAo
IW1fc3VnZ2VzdGlvbnNQb3B1cENsaWVudC0+bGlzdFNpemUoKSkgewotICAgICAgICBoaWRlU3Vn
Z2VzdGlvbnNQb3B1cCgpOworICAgIGlmICghbV9hdXRvRmlsbFBvcHVwQ2xpZW50LT5saXN0U2l6
ZSgpKSB7CisgICAgICAgIGhpZGVBdXRvRmlsbFBvcHVwKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBJbnRSZWN0IG9sZEJvdW5kcyA9IG1fc3VnZ2VzdGlvbnNQb3B1cC0+Ym91bmRz
UmVjdCgpOwotICAgIG1fc3VnZ2VzdGlvbnNQb3B1cC0+cmVmcmVzaCgpOwotICAgIEludFJlY3Qg
bmV3Qm91bmRzID0gbV9zdWdnZXN0aW9uc1BvcHVwLT5ib3VuZHNSZWN0KCk7CisgICAgSW50UmVj
dCBvbGRCb3VuZHMgPSBtX2F1dG9GaWxsUG9wdXAtPmJvdW5kc1JlY3QoKTsKKyAgICBtX2F1dG9G
aWxsUG9wdXAtPnJlZnJlc2goKTsKKyAgICBJbnRSZWN0IG5ld0JvdW5kcyA9IG1fYXV0b0ZpbGxQ
b3B1cC0+Ym91bmRzUmVjdCgpOwogICAgIC8vIExldCdzIHJlc2l6ZSB0aGUgYmFja2luZyB3aW5k
b3cgaWYgbmVjZXNzYXJ5LgogICAgIGlmIChvbGRCb3VuZHMgIT0gbmV3Qm91bmRzKSB7CiAgICAg
ICAgIFdlYlBvcHVwTWVudUltcGwqIHBvcHVwTWVudSA9Ci0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxXZWJQb3B1cE1lbnVJbXBsKj4obV9zdWdnZXN0aW9uc1BvcHVwLT5jbGllbnQoKSk7Ci0gICAg
ICAgIHBvcHVwTWVudS0+Y2xpZW50KCktPnNldFdpbmRvd1JlY3QobmV3Qm91bmRzKTsKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PFdlYlBvcHVwTWVudUltcGwqPihtX2F1dG9GaWxsUG9wdXAtPmNs
aWVudCgpKTsKKyAgICAgICAgaWYgKHBvcHVwTWVudSkKKyAgICAgICAgICAgIHBvcHVwTWVudS0+
Y2xpZW50KCktPnNldFdpbmRvd1JlY3QobmV3Qm91bmRzKTsKICAgICB9CiB9CiAKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmgJKHJldmlzaW9uIDYxOTE1KQorKysgV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw2IEBAIGNs
YXNzIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDsKIGNsYXNzIEF1dG9GaWxsUG9wdXBNZW51
Q2xpZW50OwogY2xhc3MgQ29udGV4dE1lbnVDbGllbnRJbXBsOwogY2xhc3MgRHJhZ1Njcm9sbFRp
bWVyOwotY2xhc3MgU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ7CiBjbGFzcyBXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0OwogY2xhc3MgV2ViRGV2VG9vbHNBZ2VudENsaWVudDsKIGNsYXNzIFdlYkRl
dlRvb2xzQWdlbnRQcml2YXRlOwpAQCAtMTQ3LDggKzE0Niw4IEBAIHB1YmxpYzoKICAgICAgICAg
Y29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAogICAgICAgICBXZWJEcmFnT3BlcmF0aW9uIG9w
ZXJhdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIGRyYWdTb3VyY2VNb3ZlZFRvKAotICAgICAgICBj
b25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsIAotICAgICAgICBjb25zdCBXZWJQb2ludCYgc2Ny
ZWVuUG9pbnQsIAorICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCisgICAgICAg
IGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKICAgICAgICAgV2ViRHJhZ09wZXJhdGlvbiBv
cGVyYXRpb24pOwogICAgIHZpcnR1YWwgdm9pZCBkcmFnU291cmNlU3lzdGVtRHJhZ0VuZGVkKCk7
CiAgICAgdmlydHVhbCBXZWJEcmFnT3BlcmF0aW9uIGRyYWdUYXJnZXREcmFnRW50ZXIoCkBAIC0x
ODEsNiArMTgwLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5n
PiYgbmFtZXMsCiAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsYWJlbHMsCiAg
ICAgICAgIGludCBzZXBhcmF0b3JJbmRleCk7CisgICAgLy8gREVQUkVDQVRFRDogcmVwbGFjaW5n
IHdpdGggYXBwbHlBdXRvRmlsbFN1Z2dlc3Rpb25zLgogICAgIHZpcnR1YWwgdm9pZCBhcHBseUF1
dG9jb21wbGV0ZVN1Z2dlc3Rpb25zKAogICAgICAgICBjb25zdCBXZWJOb2RlJiwKICAgICAgICAg
Y29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHN1Z2dlc3Rpb25zLApAQCAtMjk2LDkgKzI5Niw5
IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgV2ViSW1hZ2UmIGRyYWdJbWFnZSwKICAgICAgICAg
Y29uc3QgV2ViUG9pbnQmIGRyYWdJbWFnZU9mZnNldCk7CiAKLSAgICB2b2lkIHN1Z2dlc3Rpb25z
UG9wdXBEaWRIaWRlKCkKKyAgICB2b2lkIGF1dG9GaWxsUG9wdXBEaWRIaWRlKCkKICAgICB7Ci0g
ICAgICAgIG1fc3VnZ2VzdGlvbnNQb3B1cFNob3dpbmcgPSBmYWxzZTsKKyAgICAgICAgbV9hdXRv
RmlsbFBvcHVwU2hvd2luZyA9IGZhbHNlOwogICAgIH0KIAogI2lmIEVOQUJMRShOT1RJRklDQVRJ
T05TKQpAQCAtMzE0LDcgKzMxNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBvcHVwT3BlbmVkKFdl
YkNvcmU6OlBvcHVwQ29udGFpbmVyKiBwb3B1cENvbnRhaW5lcik7CiAgICAgdm9pZCBwb3B1cENs
b3NlZChXZWJDb3JlOjpQb3B1cENvbnRhaW5lciogcG9wdXBDb250YWluZXIpOwogCi0gICAgdm9p
ZCBoaWRlU3VnZ2VzdGlvbnNQb3B1cCgpOworICAgIHZvaWQgaGlkZUF1dG9GaWxsUG9wdXAoKTsK
IAogICAgIC8vIEhBQ0s6IGN1cnJlbnRJbnB1dEV2ZW50KCkgaXMgZm9yIENocm9tZUNsaWVudElt
cGw6OnNob3coKSwgdW50aWwgd2UgY2FuCiAgICAgLy8gZml4IFdlYktpdCB0byBwYXNzIGVub3Vn
aCBpbmZvcm1hdGlvbiB1cCBpbnRvIENocm9tZUNsaWVudDo6c2hvdygpIHNvIHdlCkBAIC0zNjEs
MTAgKzM2MSwxMCBAQCBwcml2YXRlOgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXV0b2Nv
bXBsZSBoYXMgY29uc3VtZWQgdGhlIGV2ZW50LgogICAgIGJvb2wgYXV0b2NvbXBsZXRlSGFuZGxl
S2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpOwogCi0gICAgLy8gUmVwYWludHMgdGhl
IHN1Z2dlc3Rpb25zIHBvcHVwLiBTaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIHN1Z2dlc3Rpb25z
Ci0gICAgLy8gaGF2ZSBjaGFuZ2VkLiBOb3RlIHRoYXQgdGhpcyBzaG91bGQgb25seSBiZSBjYWxs
ZWQgd2hlbiB0aGUgc3VnZ2VzdGlvbnMKKyAgICAvLyBSZXBhaW50cyB0aGUgQXV0b0ZpbGwgcG9w
dXAuIFNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgc3VnZ2VzdGlvbnMKKyAgICAvLyBoYXZlIGNo
YW5nZWQuIE5vdGUgdGhhdCB0aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBBdXRv
RmlsbAogICAgIC8vIHBvcHVwIGlzIHNob3dpbmcuCi0gICAgdm9pZCByZWZyZXNoU3VnZ2VzdGlv
bnNQb3B1cCgpOworICAgIHZvaWQgcmVmcmVzaEF1dG9GaWxsUG9wdXAoKTsKIAogICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgdmlldyB3YXMgc2Nyb2xsZWQuCiAgICAgYm9vbCBzY3JvbGxWaWV3
V2l0aEtleWJvYXJkKGludCBrZXlDb2RlLCBpbnQgbW9kaWZpZXJzKTsKQEAgLTQ3MywzMiArNDcz
LDE4IEBAIHByaXZhdGU6CiAgICAgLy8gY3VycmVudCBkcm9wIHRhcmdldCBpbiB0aGlzIFdlYlZp
ZXcgKHRoZSBkcm9wIHRhcmdldCBjYW4gYWNjZXB0IHRoZSBkcm9wKS4KICAgICBXZWJEcmFnT3Bl
cmF0aW9uIG1fZHJhZ09wZXJhdGlvbjsKIAotICAgIC8vIFdoZXRoZXIgYSBzdWdnZXN0aW9ucyBw
b3B1cCBpcyBjdXJyZW50bHkgc2hvd2luZy4KLSAgICBib29sIG1fc3VnZ2VzdGlvbnNQb3B1cFNo
b3dpbmc7Ci0KLSAgICAvLyBBIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgc3VnZ2VzdGlvbnMgcG9w
dXAgbWVudSBjbGllbnQuIFRoaXMgY2FuIGJlCi0gICAgLy8gZWl0aGVyIGFuIEF1dG9GaWxsUG9w
dXBNZW51Q2xpZW50IG9yIGFuIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudC4gV2UKLSAgICAv
LyBkbyBub3Qgb3duIHRoaXMgcG9pbnRlci4KLSAgICBTdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVu
dCogbV9zdWdnZXN0aW9uc1BvcHVwQ2xpZW50OworICAgIC8vIFdoZXRoZXIgYW4gQXV0b0ZpbGwg
cG9wdXAgaXMgY3VycmVudGx5IHNob3dpbmcuCisgICAgYm9vbCBtX2F1dG9GaWxsUG9wdXBTaG93
aW5nOwogCiAgICAgLy8gVGhlIEF1dG9GaWxsIHBvcHVwIGNsaWVudC4KICAgICBPd25QdHI8QXV0
b0ZpbGxQb3B1cE1lbnVDbGllbnQ+IG1fYXV0b0ZpbGxQb3B1cENsaWVudDsKIAotICAgIC8vIFRo
ZSBBdXRvY29tcGxldGUgcG9wdXAgY2xpZW50LgotICAgIE93blB0cjxBdXRvY29tcGxldGVQb3B1
cE1lbnVDbGllbnQ+IG1fYXV0b2NvbXBsZXRlUG9wdXBDbGllbnQ7Ci0KLSAgICAvLyBBIHBvaW50
ZXIgdG8gdGhlIGN1cnJlbnQgc3VnZ2VzdGlvbnMgcG9wdXAuIFdlIGRvIG5vdCBvd24gdGhpcyBw
b2ludGVyLgotICAgIFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyKiBtX3N1Z2dlc3Rpb25zUG9wdXA7
CisgICAgLy8gVGhlIEF1dG9GaWxsIHBvcHVwLgorICAgIFJlZlB0cjxXZWJDb3JlOjpQb3B1cENv
bnRhaW5lcj4gbV9hdXRvRmlsbFBvcHVwOwogCiAgICAgLy8gVGhlIHBvcHVwIGFzc29jaWF0ZWQg
d2l0aCBhIHNlbGVjdCBlbGVtZW50LgogICAgIFJlZlB0cjxXZWJDb3JlOjpQb3B1cENvbnRhaW5l
cj4gbV9zZWxlY3RQb3B1cDsKIAotICAgIC8vIFRoZSBBdXRvRmlsbCBzdWdnZXN0aW9ucyBwb3B1
cC4KLSAgICBSZWZQdHI8V2ViQ29yZTo6UG9wdXBDb250YWluZXI+IG1fYXV0b0ZpbGxQb3B1cDsK
LQotICAgIC8vIFRoZSBBdXRvQ29tcGxldGUgc3VnZ2VzdGlvbnMgcG9wdXAuCi0gICAgUmVmUHRy
PFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyPiBtX2F1dG9jb21wbGV0ZVBvcHVwOwotCiAgICAgT3du
UHRyPFdlYkRldlRvb2xzQWdlbnRQcml2YXRlPiBtX2RldlRvb2xzQWdlbnQ7CiAKICAgICAvLyBX
aGV0aGVyIHRoZSB3ZWJ2aWV3IGlzIHJlbmRlcmluZyB0cmFuc3BhcmVudGx5Lgo=
</data>
<flag name="review"
          id="46921"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60132</attachid>
            <date>2010-06-30 10:39:55 -0700</date>
            <delta_ts>2010-07-01 10:15:07 -0700</delta_ts>
            <desc>Proposed patch, addresses review comments.</desc>
            <filename>proposed_patch.diff</filename>
            <type>text/plain</type>
            <size>57359</size>
            <attacher name="David Holloway">dhollowa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjIxOTApCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODMgQEAKKzIwMTAtMDYtMjUgIERhdmlk
IEhvbGxvd2F5ICA8ZGhvbGxvd2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29uc29saWRhdGVzIEF1dG9G
aWxsIGFuZCBBdXRvY29tcGxldGUgcG9wdXAgbWVudXMgaW50byBhIHNpbmdsZSBwb3B1cCBtZW51
LgorCisgICAgICAgIFRoaXMgY2hhbmdlIGNvbWJpbmVzIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xp
ZW50LCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudCwgYW5kIAorICAgICAgICBBdXRvY29tcGxldGVQ
b3B1cE1lbnVDbGllbnQgY2xhc3NlcyBpbnRvIGEgc2luZ2xlIGNvbnNvbGlkYXRlZCBBdXRvRmls
bFBvcHVwTWVudUNsaWVudCBjbGFzcy4KKyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UgdGhl
IGNvbnRlbnRzIG9mIHRoZSBBdXRvRmlsbCBwb3B1cCBtZW51IG9ubHkgaW5jbHVkZWQgQXV0b0Zp
bGwKKyAgICAgICAgc3VnZ2VzdGlvbnMgYW5kIHNpbWlsYXJseSB0aGUgQXV0b2NvbXBsZXRlIHBv
cHVwIG1lbnUgb25seSBpbmNsdWRlZCBBdXRvY29tcGxldGUKKyAgICAgICAgc3VnZ2VzdGlvbnMu
ICBXaXRoIHRoaXMgY29uc29saWRhdGlvbiwgYm90aCBBdXRvRmlsbCBhbmQgQXV0b2NvbXBsZXRl
IHN1Z2dlc3Rpb25zIGNhbgorICAgICAgICBub3cgYmUgZGlzcGxheWVkIGluIGEgc2luZ2xlIG1l
bnUuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQx
MjM2CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5o
OgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgICogc3JjL0F1dG9GaWxsUG9w
dXBNZW51Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGll
bnQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQ
b3B1cE1lbnVDbGllbnQ6On5BdXRvRmlsbFBvcHVwTWVudUNsaWVudCk6CisgICAgICAgIChXZWJL
aXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojp2YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
S2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6c2VsZWN0aW9uQ2xlYXJlZCk6CisgICAgICAg
IChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjppdGVtVGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjppdGVtU3R5bGUpOgorICAgICAgICAoV2Vi
S2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6bWVudVN0eWxlKToKKyAgICAgICAgKFdlYktp
dDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNsaWVudFBhZGRpbmdMZWZ0KToKKyAgICAgICAg
KFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNsaWVudFBhZGRpbmdSaWdodCk6Cisg
ICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojpwb3B1cERpZEhpZGUpOgor
ICAgICAgICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6c2V0VGV4dEZyb21JdGVt
KToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmZvbnRTZWxlY3Rv
cik6CisgICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojpob3N0V2luZG93
KToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNyZWF0ZVNjcm9s
bGJhcik6CisgICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojppbml0aWFs
aXplKToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmdldFdlYlZp
ZXcpOgorICAgICAgICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6dGV4dEZpZWxk
U3R5bGUpOgorICAgICAgICAqIHNyYy9BdXRvRmlsbFBvcHVwTWVudUNsaWVudC5oOgorICAgICAg
ICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6aXRlbVRvb2xUaXApOgorICAgICAg
ICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6aXRlbUFjY2Vzc2liaWxpdHlUZXh0
KToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6Oml0ZW1Jc0VuYWJs
ZWQpOgorICAgICAgICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6Y2xpZW50SW5z
ZXRMZWZ0KToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNsaWVu
dEluc2V0UmlnaHQpOgorICAgICAgICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6
bGlzdFNpemUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6c2Vs
ZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojpp
dGVtSXNMYWJlbCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojpp
dGVtSXNTZWxlY3RlZCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50
OjpzaG91bGRQb3BPdmVyKToKKyAgICAgICAgKFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGll
bnQ6OnZhbHVlU2hvdWxkQ2hhbmdlT25Ib3RUcmFjayk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9G
aWxsUG9wdXBNZW51Q2xpZW50OjpzZXRBdXRvY29tcGxldGVNb2RlKToKKyAgICAgICAgKFdlYktp
dDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmdldFRleHRGaWVsZCk6CisgICAgICAgIChXZWJL
aXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjpnZXRTZWxlY3RlZEluZGV4KToKKyAgICAgICAg
KFdlYktpdDo6QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OnNldFNlbGVjdGVkSW5kZXgpOgorICAg
ICAgICAqIHNyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHNyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBzcmMvRWRpdG9yQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNs
aWVudEltcGw6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpFZGl0
b3JDbGllbnRJbXBsOjpkb0F1dG9maWxsKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50
SW1wbDo6b25BdXRvY29tcGxldGVTdWdnZXN0aW9uQWNjZXB0ZWQpOgorICAgICAgICAqIHNyYy9T
dWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3JjL1N1
Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL1dlYkZy
YW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Y3VycmVudEhpc3Rv
cnlJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpub3RpZml5UGFzc3dvcmRM
aXN0ZW5lck9mQXV0b2NvbXBsZXRlKToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmg6Cisg
ICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6Om1vdXNlRG93bik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpt
b3VzZVVwKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNlbGVjdFBvcHVwSGFuZGxl
S2V5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YXV0b2NvbXBsZXRlSGFu
ZGxlS2V5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aGlkZUF1dG9GaWxs
UG9wdXApOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Rm9jdXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YXBwbHlBdXRvRmlsbFN1Z2dlc3Rpb25zKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFwcGx5QXV0b2NvbXBsZXRlU3VnZ2VzdGlvbnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aGlkZVBvcHVwcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpyZWZyZXNoQXV0b0ZpbGxQb3B1cCk6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphdXRvRmlsbFBvcHVw
RGlkSGlkZSk6CisKIDIwMTAtMDYtMjUgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCShyZXZpc2lvbiA2MjE5MCkKKysrIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjksOCArMjI5LDYgQEAKICAgICAgICAgICAgICAgICAnc3Jj
L0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9BcHBsaWNh
dGlvbkNhY2hlSG9zdEludGVybmFsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvQXNzZXJ0TWF0
Y2hpbmdFbnVtcy5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMvQXV0b2NvbXBsZXRlUG9wdXBN
ZW51Q2xpZW50LmNwcCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9BdXRvY29tcGxldGVQb3B1cE1l
bnVDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9BdXRvRmlsbFBvcHVwTWVudUNsaWVu
dC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuaCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsLmNwcCcsCkBA
IC0zMTAsOCArMzA4LDYgQEAKICAgICAgICAgICAgICAgICAnc3JjL1N0b3JhZ2VFdmVudERpc3Bh
dGNoZXJJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuaCcsCi0g
ICAgICAgICAgICAgICAgJ3NyYy9TdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudC5jcHAnLAotICAg
ICAgICAgICAgICAgICdzcmMvU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQuaCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9UZW1wb3JhcnlHbHVlLmgnLAogICAgICAgICAgICAgICAgICdzcmMvVG9v
bHNBZ2VudC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkFjY2Vzc2liaWxpdHlDYWNoZS5j
cHAnLApJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAkocmV2aXNpb24gNjIxOTApCisr
KyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
OCw2ICs0ODgsMTEgQEAgcHVibGljOgogICAgICAgICBXZWJJbnB1dEVsZW1lbnQsCiAgICAgICAg
IFdlYlBhc3N3b3JkQXV0b2NvbXBsZXRlTGlzdGVuZXIqKSA9IDA7CiAKKyAgICAvLyBEaXNwYXRj
aGVzIGFuIEF1dG9jb21wbGV0aW9uIG5vdGlmaWNhdGlvbiB0byByZWdpc3RlcmVkIGxpc3RlbmVy
IGlmIG9uZQorICAgIC8vIGV4aXN0cyB0aGF0IGlzIHJlZ2lzdGVyZWQgYWdhaW5zdCB0aGUgV2Vi
SW5wdXRFbGVtZW50IHNwZWNpZmllZC4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZpeVBhc3N3b3Jk
TGlzdGVuZXJPZkF1dG9jb21wbGV0ZSgKKyAgICAgICAgY29uc3QgV2ViSW5wdXRFbGVtZW50Jikg
PSAwOworCiAKICAgICAvLyBVdGlsaXR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJW
aWV3LmgJKHJldmlzaW9uIDYyMTkwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMywxNyArMjMzLDE4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIFdlYkFjY2Vzc2liaWxpdHlPYmplY3QgYWNjZXNzaWJpbGl0eU9iamVjdCgpID0gMDsKIAog
Ci0gICAgLy8gQXV0b0ZpbGwgLyBBdXRvY29tcGxldGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gQXV0b0ZpbGwgIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICAvLyBOb3Rp
ZmllcyB0aGUgV2ViVmlldyB0aGF0IEF1dG9GaWxsIHN1Z2dlc3Rpb25zIGFyZSBhdmFpbGFibGUg
Zm9yIGEgbm9kZS4KICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBdXRvRmlsbFN1Z2dlc3Rpb25zKAog
ICAgICAgICBjb25zdCBXZWJOb2RlJiwKICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmlu
Zz4mIG5hbWVzLAogICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbGFiZWxzLAot
ICAgICAgICBpbnQgZGVmYXVsdFN1Z2dlc3Rpb25JbmRleCkgPSAwOworICAgICAgICBpbnQgc2Vw
YXJhdG9ySW5kZXgpID0gMDsKIAogICAgIC8vIE5vdGlmaWVzIHRoZSBXZWJWaWV3IHRoYXQgQXV0
b2NvbXBsZXRlIHN1Z2dlc3Rpb25zIGFyZSBhdmFpbGFibGUgZm9yIGEKICAgICAvLyBub2RlLgor
ICAgIC8vIERFUFJFQ0FURUQ6IG1lcmdpbmcgd2l0aCBhcHBseUF1dG9GaWxsU3VnZ2VzdGlvbnMu
CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5QXV0b2NvbXBsZXRlU3VnZ2VzdGlvbnMoCiAgICAgICAg
IGNvbnN0IFdlYk5vZGUmLAogICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgc3Vn
Z2VzdGlvbnMsCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9GaWxsUG9wdXBNZW51Q2xp
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9GaWxsUG9wdXBN
ZW51Q2xpZW50LmNwcAkocmV2aXNpb24gNjIxOTApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0F1
dG9GaWxsUG9wdXBNZW51Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsMTIg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBdXRvRmlsbFBvcHVwTWVudUNsaWVu
dC5oIgogCisjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1ZhbHVl
S2V5d29yZHMuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIK
ICNpbmNsdWRlICJXZWJOb2RlLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAi
V2ViVmVjdG9yLmgiCkBAIC00Miw2ICs0NywxOCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK0F1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjpBdXRvRmls
bFBvcHVwTWVudUNsaWVudCgpCisgICAgOiBtX3NlcGFyYXRvckluZGV4KC0xKQorICAgICwgbV9z
ZWxlY3RlZEluZGV4KC0xKQorICAgICwgbV90ZXh0RmllbGQoMCkKKyAgICAsIG1fQXV0b2NvbXBs
ZXRlTW9kZUVuYWJsZWQoZmFsc2UpCit7Cit9CisKK0F1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojp+
QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQoKQoreworfQorCiB1bnNpZ25lZCBBdXRvRmlsbFBvcHVw
TWVudUNsaWVudDo6Z2V0U3VnZ2VzdGlvbnNDb3VudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
bmFtZXMuc2l6ZSgpICsgKChtX3NlcGFyYXRvckluZGV4ID09IC0xKSA/IDAgOiAxKTsKQEAgLTc1
LDE5ICs5MiwzNSBAQCB2b2lkIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjpyZW1vdmVTdWdnCiAK
IHZvaWQgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0
SW5kZXgsIGJvb2wgZmlyZUV2ZW50cykKIHsKLSAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IGdl
dFdlYlZpZXcoKTsKLSAgICBpZiAoIXdlYlZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX3NlcGFyYXRvckluZGV4ICE9IC0xICYmIGxpc3RJbmRleCA+IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX3NlcGFyYXRvckluZGV4KSkKLSAgICAgICAgLS1saXN0SW5kZXg7Ci0KLSAgICBBU1NF
UlQobGlzdEluZGV4IDwgbV9uYW1lcy5zaXplKCkpOwotCi0gICAgd2ViVmlldy0+Y2xpZW50KCkt
PmRpZEFjY2VwdEF1dG9GaWxsU3VnZ2VzdGlvbihXZWJOb2RlKGdldFRleHRGaWVsZCgpKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbmFtZXNb
bGlzdEluZGV4XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fbGFiZWxzW2xpc3RJbmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaXN0SW5kZXgpOworICAgIC8vIERFUFJFQ0FURUQ6IFdp
bGwgYmUgcmVtb3ZlZCBvbmNlIEF1dG9GaWxsIGFuZCBBdXRvY29tcGxldGUgbWVyZ2UgaXMKKyAg
ICAvLyBjb21wbGV0ZWQuCisgICAgaWYgKG1fQXV0b2NvbXBsZXRlTW9kZUVuYWJsZWQpIHsKKyAg
ICAgICAgbV90ZXh0RmllbGQtPnNldFZhbHVlKGdldFN1Z2dlc3Rpb24obGlzdEluZGV4KSk7CisK
KyAgICAgICAgV2ViVmlld0ltcGwqIHdlYlZpZXcgPSBnZXRXZWJWaWV3KCk7CisgICAgICAgIGlm
ICghd2ViVmlldykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBFZGl0b3JDbGllbnRJ
bXBsKiBlZGl0b3IgPQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWRpdG9yQ2xpZW50SW1wbCo+
KHdlYlZpZXctPnBhZ2UoKS0+ZWRpdG9yQ2xpZW50KCkpOworICAgICAgICBBU1NFUlQoZWRpdG9y
KTsKKyAgICAgICAgZWRpdG9yLT5vbkF1dG9jb21wbGV0ZVN1Z2dlc3Rpb25BY2NlcHRlZCgKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX3RleHRGaWVsZC5nZXQo
KSkpOworICAgIH0gZWxzZSB7CisgICAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IGdldFdlYlZp
ZXcoKTsKKyAgICAgIGlmICghd2ViVmlldykKKyAgICAgICAgICByZXR1cm47CisKKyAgICAgIGlm
IChtX3NlcGFyYXRvckluZGV4ICE9IC0xICYmIGxpc3RJbmRleCA+IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX3NlcGFyYXRvckluZGV4KSkKKyAgICAgICAgICAtLWxpc3RJbmRleDsKKworICAgICAg
QVNTRVJUKGxpc3RJbmRleCA8IG1fbmFtZXMuc2l6ZSgpKTsKKworICAgICAgd2ViVmlldy0+Y2xp
ZW50KCktPmRpZEFjY2VwdEF1dG9GaWxsU3VnZ2VzdGlvbihXZWJOb2RlKGdldFRleHRGaWVsZCgp
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9uYW1lc1tsaXN0SW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2xhYmVsc1tsaXN0SW5kZXhdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SW5kZXgpOworICAgIH0KIH0K
IAogdm9pZCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6c2VsZWN0aW9uQ2hhbmdlZCh1bnNpZ25l
ZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cykKQEAgLTEwOCwyMiArMTQxLDUyIEBAIHZvaWQg
QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OnNlbGVjdGlvbkMKIAogdm9pZCBBdXRvRmlsbFBvcHVw
TWVudUNsaWVudDo6c2VsZWN0aW9uQ2xlYXJlZCgpCiB7Ci0gICAgV2ViVmlld0ltcGwqIHdlYlZp
ZXcgPSBnZXRXZWJWaWV3KCk7Ci0gICAgaWYgKCF3ZWJWaWV3KQotICAgICAgICByZXR1cm47Cisg
ICAgLy8gU2FtZSBlZmZlY3QgZGVzaXJlZCBhcyBwb3B1cERpZEhpZGUsIHNvIGNhbGwgdGhyb3Vn
aC4KKyAgICBwb3B1cERpZEhpZGUoKTsKK30KIAotICAgIHdlYlZpZXctPnN1Z2dlc3Rpb25zUG9w
dXBEaWRIaWRlKCk7Ci0gICAgd2ViVmlldy0+Y2xpZW50KCktPmRpZENsZWFyQXV0b0ZpbGxTZWxl
Y3Rpb24oV2ViTm9kZShnZXRUZXh0RmllbGQoKSkpOworU3RyaW5nIEF1dG9GaWxsUG9wdXBNZW51
Q2xpZW50OjppdGVtVGV4dCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGdldFN1Z2dlc3Rpb24obGlzdEluZGV4KTsKK30KKworUG9wdXBNZW51U3R5bGUgQXV0b0ZpbGxQ
b3B1cE1lbnVDbGllbnQ6Oml0ZW1TdHlsZSh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICptX3N0eWxlOworfQorCitQb3B1cE1lbnVTdHlsZSBBdXRvRmlsbFBvcHVwTWVu
dUNsaWVudDo6bWVudVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fc3R5bGU7Cit9CisK
K2ludCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAor
eworICAgIC8vIEJ1ZyBodHRwOi8vY3JidWcuY29tLzc3MDggc2VlbXMgdG8gaW5kaWNhdGUgdGhl
IHN0eWxlIGNhbiBiZSAwLgorICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRGaWVsZFN0eWxl
KCk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBSZW5k
ZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChzdHlsZSk7
Cit9CisKK2ludCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6Y2xpZW50UGFkZGluZ1JpZ2h0KCkg
Y29uc3QKK3sKKyAgICAvLyBCdWcgaHR0cDovL2NyYnVnLmNvbS83NzA4IHNlZW1zIHRvIGluZGlj
YXRlIHRoZSBzdHlsZSBjYW4gYmUgMC4KKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0Rmll
bGRTdHlsZSgpOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0
dXJuIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdo
dChzdHlsZSk7CiB9CiAKIHZvaWQgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OnBvcHVwRGlkSGlk
ZSgpCiB7Ci0gICAgLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMgbWV0aG9kLCBhcyBzZWxlY3Rpb25D
bGVhcmVkKCkgYW5kIHBvcHVwRGlkSGlkZSgpCi0gICAgLy8gc2hhcmUgdGhlIGV4YWN0IHNhbWUg
ZnVuY3Rpb25hbGl0eS4KICAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IGdldFdlYlZpZXcoKTsK
ICAgICBpZiAoIXdlYlZpZXcpCiAgICAgICAgIHJldHVybjsKIAorICAgIHdlYlZpZXctPmF1dG9G
aWxsUG9wdXBEaWRIaWRlKCk7CiAgICAgd2ViVmlldy0+Y2xpZW50KCktPmRpZENsZWFyQXV0b0Zp
bGxTZWxlY3Rpb24oV2ViTm9kZShnZXRUZXh0RmllbGQoKSkpOwogfQogCkBAIC0xMzIsNiArMTk1
LDI5IEBAIGJvb2wgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6Oml0ZW1Jc1NlcGEKICAgICByZXR1
cm4gKG1fc2VwYXJhdG9ySW5kZXggIT0gLTEgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2Vw
YXJhdG9ySW5kZXgpID09IGxpc3RJbmRleCk7CiB9CiAKK3ZvaWQgQXV0b0ZpbGxQb3B1cE1lbnVD
bGllbnQ6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCit7CisgICAgbV90ZXh0
RmllbGQtPnNldFZhbHVlKGdldFN1Z2dlc3Rpb24obGlzdEluZGV4KSk7Cit9CisKK0ZvbnRTZWxl
Y3RvciogQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmZvbnRTZWxlY3RvcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fdGV4dEZpZWxkLT5kb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPmZvbnRT
ZWxlY3RvcigpOworfQorCitIb3N0V2luZG93KiBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6aG9z
dFdpbmRvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGV4dEZpZWxkLT5kb2N1bWVudCgpLT52
aWV3KCktPmhvc3RXaW5kb3coKTsKK30KKworUGFzc1JlZlB0cjxTY3JvbGxiYXI+IEF1dG9GaWxs
UG9wdXBNZW51Q2xpZW50OjpjcmVhdGVTY3JvbGxiYXIoCisgICAgU2Nyb2xsYmFyQ2xpZW50KiBj
bGllbnQsCisgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sCisgICAgU2Nyb2xs
YmFyQ29udHJvbFNpemUgc2l6ZSkKK3sKKyAgICByZXR1cm4gU2Nyb2xsYmFyOjpjcmVhdGVOYXRp
dmVTY3JvbGxiYXIoY2xpZW50LCBvcmllbnRhdGlvbiwgc2l6ZSk7Cit9CisKIHZvaWQgQXV0b0Zp
bGxQb3B1cE1lbnVDbGllbnQ6OmluaXRpYWxpemUoCiAgICAgSFRNTElucHV0RWxlbWVudCogdGV4
dEZpZWxkLAogICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBuYW1lcywKQEAgLTE0MSwx
MSArMjI3LDI2IEBAIHZvaWQgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmluaXRpYWxpemUKICAg
ICBBU1NFUlQobmFtZXMuc2l6ZSgpID09IGxhYmVscy5zaXplKCkpOwogICAgIEFTU0VSVChzZXBh
cmF0b3JJbmRleCA8IHN0YXRpY19jYXN0PGludD4obmFtZXMuc2l6ZSgpKSk7CiAKKyAgICBtX3Nl
bGVjdGVkSW5kZXggPSAtMTsKKyAgICBtX3RleHRGaWVsZCA9IHRleHRGaWVsZDsKKwogICAgIC8v
IFRoZSBzdWdnZXN0aW9ucyBtdXN0IGJlIHNldCBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZQotICAg
IC8vIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50LgorICAgIC8vIEF1dG9GaWxsUG9wdXBNZW51
Q2xpZW50LgogICAgIHNldFN1Z2dlc3Rpb25zKG5hbWVzLCBsYWJlbHMsIHNlcGFyYXRvckluZGV4
KTsKIAotICAgIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50Ojppbml0aWFsaXplKHRleHRGaWVs
ZCwgLTEpOworICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CisgICAgUmVuZGVy
VGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250KENTU1ZhbHVlV2Via2l0Q29udHJvbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3RleHRGaWVsZC0+Y29tcHV0ZWRTdHls
ZSgpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpKTsKKworICAgIEZvbnQgZm9udChmb250RGVzY3JpcHRp
b24sIDAsIDApOworICAgIGZvbnQudXBkYXRlKHRleHRGaWVsZC0+ZG9jdW1lbnQoKS0+c3R5bGVT
ZWxlY3RvcigpLT5mb250U2VsZWN0b3IoKSk7CisgICAgLy8gVGhlIGRpcmVjdGlvbiBvZiB0ZXh0
IGluIHBvcHVwIG1lbnUgaXMgc2V0IHRoZSBzYW1lIGFzIHRoZSBkaXJlY3Rpb24gb2YKKyAgICAv
LyB0aGUgaW5wdXQgZWxlbWVudDogdGV4dEZpZWxkLgorICAgIG1fc3R5bGUuc2V0KG5ldyBQb3B1
cE1lbnVTdHlsZShDb2xvcjo6YmxhY2ssIENvbG9yOjp3aGl0ZSwgZm9udCwgdHJ1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKFdlYkNvcmU6OkZpeGVkKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkLT5yZW5kZXJlcigpLT5z
dHlsZSgpLT5kaXJlY3Rpb24oKSkpOwogfQogCiB2b2lkIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50
OjpzZXRTdWdnZXN0aW9ucyhjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbmFtZXMsCkBAIC0x
NjksNCArMjcwLDMwIEBAIHZvaWQgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OnNldFN1Z2dlc3QK
ICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleCgtMSk7CiB9CiAKK1dlYlZpZXdJbXBsKiBBdXRvRmls
bFBvcHVwTWVudUNsaWVudDo6Z2V0V2ViVmlldygpIGNvbnN0Cit7CisgICAgRnJhbWUqIGZyYW1l
ID0gbV90ZXh0RmllbGQtPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBp
ZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENo
cm9tZUNsaWVudEltcGwqPihwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpLT53ZWJWaWV3KCk7Cit9
CisKK1JlbmRlclN0eWxlKiBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6dGV4dEZpZWxkU3R5bGUo
KSBjb25zdAoreworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fdGV4dEZpZWxkLT5jb21wdXRl
ZFN0eWxlKCk7CisgICAgaWYgKCFzdHlsZSkgeworICAgICAgICAvLyBJdCBzZWVtcyB3ZSBjYW4g
b25seSBoYXZlIGEgMCBzdHlsZSBpbiBhIFRleHRGaWVsZCBpZiB0aGUKKyAgICAgICAgLy8gbm9k
ZSBpcyBkZXRhY2hlZCwgaW4gd2hpY2ggY2FzZSB3ZSB0aGUgcG9wdXAgc2hvdWQgbm90IGJlCisg
ICAgICAgIC8vIHNob3dpbmcuICBQbGVhc2UgcmVwb3J0IHRoaXMgaW4gaHR0cDovL2NyYnVnLmNv
bS83NzA4IGFuZAorICAgICAgICAvLyBpbmNsdWRlIHRoZSBwYWdlIHlvdSB3ZXJlIHZpc2l0aW5n
LgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIHN0eWxl
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMv
QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0v
c3JjL0F1dG9GaWxsUG9wdXBNZW51Q2xpZW50LmgJKHJldmlzaW9uIDYyMTkwKQorKysgV2ViS2l0
L2Nocm9taXVtL3NyYy9BdXRvRmlsbFBvcHVwTWVudUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwzMSArMzEsNjQgQEAKICNpZm5kZWYgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnRfaAogI2Rl
ZmluZSBBdXRvRmlsbFBvcHVwTWVudUNsaWVudF9oCiAKLSNpbmNsdWRlICJTdWdnZXN0aW9uc1Bv
cHVwTWVudUNsaWVudC5oIgorI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MSW5wdXRFbGVtZW50OworY2xhc3MgUG9wdXBNZW51U3R5
bGU7CitjbGFzcyBSZW5kZXJTdHlsZTsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBX
ZWJTdHJpbmc7CitjbGFzcyBXZWJWaWV3SW1wbDsKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFz
cyBXZWJWZWN0b3I7CiAKIC8vIFRoZSBBdXRvRmlsbCBzdWdnZXN0aW9ucyBwb3B1cCBtZW51IGNs
aWVudCwgdXNlZCB0byBkaXNwbGF5IG5hbWUgc3VnZ2VzdGlvbnMKIC8vIHdpdGggcmlnaHQtanVz
dGlmaWVkIGxhYmVscy4KLWNsYXNzIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50IDogcHVibGljIFN1
Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50IHsKK2NsYXNzIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50
IDogcHVibGljIFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCB7CiBwdWJsaWM6Ci0gICAgLy8gU3Vn
Z2VzdGlvbnNQb3B1cE1lbnVDbGllbnQgaW1wbGVtZW50YXRpb246CisgICAgQXV0b0ZpbGxQb3B1
cE1lbnVDbGllbnQoKTsKKyAgICB2aXJ0dWFsIH5BdXRvRmlsbFBvcHVwTWVudUNsaWVudCgpOwor
CisgICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1Z2dlc3Rpb25zIGF2YWlsYWJsZS4KICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGdldFN1Z2dlc3Rpb25zQ291bnQoKSBjb25zdDsKKworICAgIC8v
IFJldHVybnMgdGhlIHN1Z2dlc3Rpb24gYXQgfGxpc3RJbmRleHwuCiAgICAgdmlydHVhbCBXZWJT
dHJpbmcgZ2V0U3VnZ2VzdGlvbih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OworCisgICAgLy8g
UmVtb3ZlcyB0aGUgc3VnZ2VzdGlvbiBhdCB8bGlzdEluZGV4fCBmcm9tIHRoZSBsaXN0IG9mIHN1
Z2dlc3Rpb25zLgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTdWdnZXN0aW9uQXRJbmRleCh1bnNp
Z25lZCBsaXN0SW5kZXgpOwogCi0gICAgLy8gV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50IGltcGxl
bWVudGF0aW9uOgorICAgIC8vIFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCBtZXRob2RzOgogICAg
IHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVF
dmVudHMgPSB0cnVlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCh1bnNpZ25l
ZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRydWUpOworICAgIHZpcnR1YWwgdm9pZCBz
ZWxlY3Rpb25DaGFuZ2VkKHVuc2lnbmVkLCBib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0
aW9uQ2xlYXJlZCgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGl0ZW1UZXh0KHVuc2ln
bmVkIGxpc3RJbmRleCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaXRlbVRv
b2xUaXAodW5zaWduZWQgbGFzdEluZGV4KSBjb25zdCB7IHJldHVybiBXZWJDb3JlOjpTdHJpbmco
KTsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGl0ZW1BY2Nlc3NpYmlsaXR5VGV4dCh1
bnNpZ25lZCBsYXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OlN0cmluZygpOyB9Cisg
ICAgdmlydHVhbCBib29sIGl0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBXZWJDb3JlOjpQb3B1cE1lbnVTdHlsZSBpdGVt
U3R5bGUodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlBv
cHVwTWVudVN0eWxlIG1lbnVTdHlsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGNsaWVudElu
c2V0TGVmdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBjbGllbnRJbnNl
dFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IGNsaWVudFBhZGRp
bmdMZWZ0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgY2xpZW50UGFkZGluZ1JpZ2h0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBpbnQgbGlzdFNpemUoKSBjb25zdCB7IHJldHVybiBnZXRTdWdnZXN0
aW9uc0NvdW50KCk7IH0KKyAgICB2aXJ0dWFsIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWxlY3RlZEluZGV4OyB9CiAgICAgdmlydHVhbCB2b2lkIHBvcHVwRGlkSGlkZSgp
OwogICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4KSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZWxlY3RlZCh1
bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIHNob3VsZFBvcE92ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCB2YWx1ZVNob3VsZENoYW5nZU9uSG90VHJhY2soKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdEluZGV4KTsK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Q7
CisgICAgdmlydHVhbCBXZWJDb3JlOjpIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFy
KAorICAgICAgICBXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwKKyAgICAgICAgV2Vi
Q29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sCisgICAgICAgIFdlYkNvcmU6
OlNjcm9sbGJhckNvbnRyb2xTaXplIHNpemUpOwogCiAgICAgdm9pZCBpbml0aWFsaXplKFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQqLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0
b3I8V2ViU3RyaW5nPiYgbmFtZXMsCkBAIC02NiwxMiArOTksMzQgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGxhYmVscywKICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBzZXBhcmF0b3JJbmRleCk7CiAKKyAgICAvLyBERVBS
RUNBVEVEOiBXaWxsIGJlIHJlbW92ZWQgb25jZSBBdXRvY29tcGxldGUgYW5kIEF1dG9GaWxsIG1l
cmdlIGlzCisgICAgLy8gY29tcGxldGUuCisgICAgdm9pZCBzZXRBdXRvY29tcGxldGVNb2RlKGJv
b2wgZW5hYmxlZCkgeyBtX0F1dG9jb21wbGV0ZU1vZGVFbmFibGVkID0gZW5hYmxlZDsgfQorCiBw
cml2YXRlOgorICAgIFdlYlZpZXdJbXBsKiBnZXRXZWJWaWV3KCkgY29uc3Q7CisgICAgV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudCogZ2V0VGV4dEZpZWxkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0
RmllbGQuZ2V0KCk7IH0KKyAgICBXZWJDb3JlOjpSZW5kZXJTdHlsZSogdGV4dEZpZWxkU3R5bGUo
KSBjb25zdDsKKworICAgIGludCBnZXRTZWxlY3RlZEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9z
ZWxlY3RlZEluZGV4OyB9CisgICAgdm9pZCBzZXRTZWxlY3RlZEluZGV4KGludCBpbmRleCkgeyBt
X3NlbGVjdGVkSW5kZXggPSBpbmRleDsgfQorCisgICAgLy8gVGhlIG5hbWVzIGFuZCBsYWJlbHMg
dGhhdCBtYWtlIHVwIHRoZSB0ZXh0IG9mIHRoZSBtZW51IGl0ZW1zLgogICAgIFZlY3RvcjxXZWJD
b3JlOjpTdHJpbmc+IG1fbmFtZXM7CiAgICAgVmVjdG9yPFdlYkNvcmU6OlN0cmluZz4gbV9sYWJl
bHM7CiAKICAgICAvLyBUaGUgaW5kZXggb2YgdGhlIHNlcGFyYXRvci4gIC0xIGlmIHRoZXJlIGlz
IG5vIHNlcGFyYXRvci4KICAgICBpbnQgbV9zZXBhcmF0b3JJbmRleDsKKworICAgIC8vIFRoZSBp
bmRleCBvZiB0aGUgc2VsZWN0ZWQgaXRlbS4gIC0xIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGVkIGl0
ZW0uCisgICAgaW50IG1fc2VsZWN0ZWRJbmRleDsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50PiBtX3RleHRGaWVsZDsKKyAgICBPd25QdHI8V2ViQ29yZTo6UG9wdXBNZW51
U3R5bGU+IG1fc3R5bGU7CisKKyAgICAvLyBERVBSRUNBVEVEOiBXaWxsIGJlIHJlbW92ZWQgb25j
ZSBBdXRvY29tcGxldGUgYW5kIEF1dG9GaWxsIG1lcmdlIGlzCisgICAgLy8gY29tcGxldGUuCisg
ICAgYm9vbCBtX0F1dG9jb21wbGV0ZU1vZGVFbmFibGVkOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9jb21wbGV0ZVBvcHVwTWVudUNs
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvY29tcGxldGVQ
b3B1cE1lbnVDbGllbnQuY3BwCShyZXZpc2lvbiA2MjE5MCkKKysrIFdlYktpdC9jaHJvbWl1bS9z
cmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkF1dG9jb21wbGV0ZVBvcHVw
TWVudUNsaWVudC5oIgotCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUg
IldlYlN0cmluZy5oIgotI2luY2x1ZGUgIldlYlZlY3Rvci5oIgotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVuc2lnbmVkIEF1dG9jb21wbGV0ZVBv
cHVwTWVudUNsaWVudDo6Z2V0U3VnZ2VzdGlvbnNDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fc3VnZ2VzdGlvbnMuc2l6ZSgpOwotfQotCi1XZWJTdHJpbmcgQXV0b2NvbXBsZXRlUG9wdXBN
ZW51Q2xpZW50OjpnZXRTdWdnZXN0aW9uKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAg
ICBBU1NFUlQobGlzdEluZGV4IDwgbV9zdWdnZXN0aW9ucy5zaXplKCkpOwotICAgIHJldHVybiBt
X3N1Z2dlc3Rpb25zW2xpc3RJbmRleF07Ci19Ci0KLXZvaWQgQXV0b2NvbXBsZXRlUG9wdXBNZW51
Q2xpZW50OjpyZW1vdmVTdWdnZXN0aW9uQXRJbmRleCh1bnNpZ25lZCBsaXN0SW5kZXgpCi17Ci0g
ICAgQVNTRVJUKGxpc3RJbmRleCA8IG1fc3VnZ2VzdGlvbnMuc2l6ZSgpKTsKLSAgICBtX3N1Z2dl
c3Rpb25zLnJlbW92ZShsaXN0SW5kZXgpOwotfQotCi12b2lkIEF1dG9jb21wbGV0ZVBvcHVwTWVu
dUNsaWVudDo6aW5pdGlhbGl6ZSgKLSAgICBIVE1MSW5wdXRFbGVtZW50KiB0ZXh0RmllbGQsCi0g
ICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHN1Z2dlc3Rpb25zLAotICAgIGludCBkZWZh
dWx0U3VnZ2VzdGlvbkluZGV4KQotewotICAgIEFTU0VSVChkZWZhdWx0U3VnZ2VzdGlvbkluZGV4
IDwgc3RhdGljX2Nhc3Q8aW50PihzdWdnZXN0aW9ucy5zaXplKCkpKTsKLQotICAgIC8vIFRoZSBz
dWdnZXN0aW9ucyBtdXN0IGJlIHNldCBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZQotICAgIC8vIFN1
Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50LgotICAgIHNldFN1Z2dlc3Rpb25zKHN1Z2dlc3Rpb25z
KTsKLQotICAgIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50Ojppbml0aWFsaXplKHRleHRGaWVs
ZCwgZGVmYXVsdFN1Z2dlc3Rpb25JbmRleCk7Ci19Ci0KLXZvaWQgQXV0b2NvbXBsZXRlUG9wdXBN
ZW51Q2xpZW50OjpzZXRTdWdnZXN0aW9ucyhjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgc3Vn
Z2VzdGlvbnMpCi17Ci0gICAgbV9zdWdnZXN0aW9ucy5jbGVhcigpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc3VnZ2VzdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fc3VnZ2VzdGlv
bnMuYXBwZW5kKHN1Z2dlc3Rpb25zW2ldKTsKLQotICAgIC8vIFRyeSB0byBwcmVzZXJ2ZSBzZWxl
Y3Rpb24gaWYgcG9zc2libGUuCi0gICAgaWYgKGdldFNlbGVjdGVkSW5kZXgoKSA+PSBzdGF0aWNf
Y2FzdDxpbnQ+KHN1Z2dlc3Rpb25zLnNpemUoKSkpCi0gICAgICAgIHNldFNlbGVjdGVkSW5kZXgo
LTEpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9z
cmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3NyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQuaAkocmV2aXNpb24gNjIxOTAp
CisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1dG9jb21wbGV0ZVBvcHVwTWVu
dUNsaWVudF9oCi0jZGVmaW5lIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudF9oCi0gCi0jaW5j
bHVkZSAiU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotY2xhc3MgSFRNTElucHV0RWxlbWVudDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFz
cyBXZWJTdHJpbmc7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOwotCi0v
LyBUaGUgQXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb25zIHBvcHVwIG1lbnUgY2xpZW50LCB1c2VkIHRv
IGRpc3BsYXkgYSBsaXN0IG9mCi0vLyBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbnMuCi1jbGFzcyBB
dXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQgOiBwdWJsaWMgU3VnZ2VzdGlvbnNQb3B1cE1lbnVD
bGllbnQgewotcHVibGljOgotICAgIC8vIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50IGltcGxl
bWVudGF0aW9uOgotICAgIHZpcnR1YWwgdW5zaWduZWQgZ2V0U3VnZ2VzdGlvbnNDb3VudCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFN1Z2dlc3Rpb24odW5zaWduZWQgbGlzdElu
ZGV4KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU3VnZ2VzdGlvbkF0SW5kZXgodW5z
aWduZWQgbGlzdEluZGV4KTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZShXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50KiwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmlu
Zz4mIHN1Z2dlc3Rpb25zLAotICAgICAgICAgICAgICAgICAgICBpbnQgZGVmYXVsdFN1Z2dlc3Rp
b25JbmRleCk7Ci0KLSAgICB2b2lkIHNldFN1Z2dlc3Rpb25zKGNvbnN0IFdlYlZlY3RvcjxXZWJT
dHJpbmc+Jik7Ci0KLXByaXZhdGU6Ci0gICAgVmVjdG9yPFdlYkNvcmU6OlN0cmluZz4gbV9zdWdn
ZXN0aW9uczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9zcmMvRWRpdG9yQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL3NyYy9FZGl0b3JDbGllbnRJbXBsLmNwcAkocmV2aXNpb24gNjIxOTApCisr
KyBXZWJLaXQvY2hyb21pdW0vc3JjL0VkaXRvckNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NTgsNyArNjU4LDcgQEAgdm9pZCBFZGl0b3JDbGllbnRJbXBsOjp0ZXh0RmllbGREaWRF
bmRFZAogICAgIG1fYXV0b2ZpbGxUaW1lci5zdG9wKCk7CiAKICAgICAvLyBIaWRlIGFueSBzaG93
aW5nIHBvcHVwLgotICAgIG1fd2ViVmlldy0+aGlkZVN1Z2dlc3Rpb25zUG9wdXAoKTsKKyAgICBt
X3dlYlZpZXctPmhpZGVBdXRvRmlsbFBvcHVwKCk7CiAKICAgICBpZiAoIW1fd2ViVmlldy0+Y2xp
ZW50KCkpCiAgICAgICAgIHJldHVybjsgLy8gVGhlIHBhZ2UgaXMgZ2V0dGluZyBjbG9zZWQsIGRv
bid0IGZpbGwgdGhlIHBhc3N3b3JkLgpAQCAtNzU0LDcgKzc1NCw3IEBAIHZvaWQgRWRpdG9yQ2xp
ZW50SW1wbDo6ZG9BdXRvZmlsbChUaW1lcjwKICAgICAgICAgICAgICAgICAgICAgICAgJiYgaW5w
dXRFbGVtZW50LT5zZWxlY3Rpb25FbmQoKSA9PSBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlLmxlbmd0
aCgpKTsKIAogICAgIGlmICgoIWFyZ3MtPmF1dG9maWxsT25FbXB0eVZhbHVlICYmIHZhbHVlLmlz
RW1wdHkoKSkgfHwgIWlzQ2FyZXRBdEVuZCkgewotICAgICAgICBtX3dlYlZpZXctPmhpZGVTdWdn
ZXN0aW9uc1BvcHVwKCk7CisgICAgICAgIG1fd2ViVmlldy0+aGlkZUF1dG9GaWxsUG9wdXAoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzk2LDExICs3OTYsNyBAQCB2b2lkIEVkaXRv
ckNsaWVudEltcGw6Om9uQXV0b2NvbXBsZXRlU3VnCiAgICAgaWYgKCF3ZWJmcmFtZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgV2ViUGFzc3dvcmRBdXRvY29tcGxldGVMaXN0ZW5lciogbGlzdGVu
ZXIgPSB3ZWJmcmFtZS0+Z2V0UGFzc3dvcmRMaXN0ZW5lcih0ZXh0RmllbGQpOwotICAgIC8vIFBh
c3N3b3JkIGxpc3RlbmVycyBuZWVkIHRvIGF1dG9jb21wbGV0ZSBvdGhlciBmaWVsZHMgdGhhdCBk
ZXBlbmQgb24gdGhlCi0gICAgLy8gaW5wdXQgZWxlbWVudCB3aXRoIGF1dG9maWxsIHN1Z2dlc3Rp
b25zLgotICAgIGlmIChsaXN0ZW5lcikKLSAgICAgICAgbGlzdGVuZXItPnBlcmZvcm1JbmxpbmVB
dXRvY29tcGxldGUodGV4dEZpZWxkLT52YWx1ZSgpLCBmYWxzZSwgZmFsc2UpOworICAgIHdlYmZy
YW1lLT5ub3RpZml5UGFzc3dvcmRMaXN0ZW5lck9mQXV0b2NvbXBsZXRlKFdlYklucHV0RWxlbWVu
dCh0ZXh0RmllbGQpKTsKIH0KIAogYm9vbCBFZGl0b3JDbGllbnRJbXBsOjpkb1RleHRGaWVsZENv
bW1hbmRGcm9tRXZlbnQoRWxlbWVudCogZWxlbWVudCwKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9z
cmMvU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9zcmMvU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQuY3BwCShyZXZpc2lvbiA2MjE5
MCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50LmgiCi0KLSNpbmNsdWRlICJDU1NTdHls
ZVNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkNo
cm9tZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1l
bnQuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgi
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotU3Vn
Z2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ6OlN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50KCkKLSAg
ICA6IG1fdGV4dEZpZWxkKDApCi0gICAgLCBtX3NlbGVjdGVkSW5kZXgoMCkKLXsKLX0KLQotU3Vn
Z2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ6On5TdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudCgpCi17
Ci19Ci0KLS8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBwZXItZGVyaXZlZCBjbGFzcz8KLXZvaWQg
U3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5k
ZXgsIGJvb2wgZmlyZUV2ZW50cykKLXsKLSAgICBtX3RleHRGaWVsZC0+c2V0VmFsdWUoZ2V0U3Vn
Z2VzdGlvbihsaXN0SW5kZXgpKTsKLQotICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3ID0gZ2V0V2Vi
VmlldygpOwotICAgIGlmICghd2ViVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRWRpdG9y
Q2xpZW50SW1wbCogZWRpdG9yID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8RWRpdG9yQ2xpZW50SW1w
bCo+KHdlYlZpZXctPnBhZ2UoKS0+ZWRpdG9yQ2xpZW50KCkpOwotICAgIEFTU0VSVChlZGl0b3Ip
OwotICAgIGVkaXRvci0+b25BdXRvY29tcGxldGVTdWdnZXN0aW9uQWNjZXB0ZWQoCi0gICAgICAg
IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX3RleHRGaWVsZC5nZXQoKSkpOwotfQot
Ci1TdHJpbmcgU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ6Oml0ZW1UZXh0KHVuc2lnbmVkIGxp
c3RJbmRleCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0U3VnZ2VzdGlvbihsaXN0SW5kZXgpOwot
fQotCi1Qb3B1cE1lbnVTdHlsZSBTdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudDo6aXRlbVN0eWxl
KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAgICByZXR1cm4gKm1fc3R5bGU7Ci19Ci0K
LVBvcHVwTWVudVN0eWxlIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50OjptZW51U3R5bGUoKSBj
b25zdAotewotICAgIHJldHVybiAqbV9zdHlsZTsKLX0KLQotaW50IFN1Z2dlc3Rpb25zUG9wdXBN
ZW51Q2xpZW50OjpjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0Ci17Ci0gICAgLy8gQnVnIGh0dHA6
Ly9jcmJ1Zy5jb20vNzcwOCBzZWVtcyB0byBpbmRpY2F0ZSB0aGUgc3R5bGUgY2FuIGJlIDAuCi0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEZpZWxkU3R5bGUoKTsKLSAgICBpZiAoIXN0eWxl
KQotICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhl
bWUoKS0+cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KHN0eWxlKTsKLX0KLQotaW50IFN1Z2dlc3Rp
b25zUG9wdXBNZW51Q2xpZW50OjpjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAotewotICAgIC8v
IEJ1ZyBodHRwOi8vY3JidWcuY29tLzc3MDggc2VlbXMgdG8gaW5kaWNhdGUgdGhlIHN0eWxlIGNh
biBiZSAwLgotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRGaWVsZFN0eWxlKCk7Ci0gICAg
aWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6
OmRlZmF1bHRUaGVtZSgpLT5wb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KHN0eWxlKTsKLX0KLQot
dm9pZCBTdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudDo6cG9wdXBEaWRIaWRlKCkKLXsKLSAgICBX
ZWJWaWV3SW1wbCogd2ViVmlldyA9IGdldFdlYlZpZXcoKTsKLSAgICBpZiAod2ViVmlldykKLSAg
ICAgICAgd2ViVmlldy0+c3VnZ2VzdGlvbnNQb3B1cERpZEhpZGUoKTsKLX0KLQotdm9pZCBTdWdn
ZXN0aW9uc1BvcHVwTWVudUNsaWVudDo6c2V0VGV4dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRl
eCkKLXsKLSAgICBtX3RleHRGaWVsZC0+c2V0VmFsdWUoZ2V0U3VnZ2VzdGlvbihsaXN0SW5kZXgp
KTsKLX0KLQotRm9udFNlbGVjdG9yKiBTdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudDo6Zm9udFNl
bGVjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90ZXh0RmllbGQtPmRvY3VtZW50KCktPnN0
eWxlU2VsZWN0b3IoKS0+Zm9udFNlbGVjdG9yKCk7Ci19Ci0KLUhvc3RXaW5kb3cqIFN1Z2dlc3Rp
b25zUG9wdXBNZW51Q2xpZW50Ojpob3N0V2luZG93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90
ZXh0RmllbGQtPmRvY3VtZW50KCktPnZpZXcoKS0+aG9zdFdpbmRvdygpOwotfQotCi1QYXNzUmVm
UHRyPFNjcm9sbGJhcj4gU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ6OmNyZWF0ZVNjcm9sbGJh
cigKLSAgICBTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwKLSAgICBTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwKLSAgICBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQotewotICAgIHJl
dHVybiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihjbGllbnQsIG9yaWVudGF0aW9u
LCBzaXplKTsKLX0KLQotUmVuZGVyU3R5bGUqIFN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50Ojp0
ZXh0RmllbGRTdHlsZSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV90ZXh0
RmllbGQtPmNvbXB1dGVkU3R5bGUoKTsKLSAgICBpZiAoIXN0eWxlKSB7Ci0gICAgICAgIC8vIEl0
IHNlZW1zIHdlIGNhbiBvbmx5IGhhdmUgYSAwIHN0eWxlIGluIGEgVGV4dEZpZWxkIGlmIHRoZQot
ICAgICAgICAvLyBub2RlIGlzIGRldGFjaGVkLCBpbiB3aGljaCBjYXNlIHdlIHRoZSBwb3B1cCBz
aG91ZCBub3QgYmUKLSAgICAgICAgLy8gc2hvd2luZy4gIFBsZWFzZSByZXBvcnQgdGhpcyBpbiBo
dHRwOi8vY3JidWcuY29tLzc3MDggYW5kCi0gICAgICAgIC8vIGluY2x1ZGUgdGhlIHBhZ2UgeW91
IHdlcmUgdmlzaXRpbmcuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAg
ICByZXR1cm4gc3R5bGU7Ci19Ci0KLXZvaWQgU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ6Omlu
aXRpYWxpemUoSFRNTElucHV0RWxlbWVudCogdGV4dEZpZWxkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVmYXVsdFN1Z2dlc3Rpb25JbmRleCkKLXsK
LSAgICBtX3RleHRGaWVsZCA9IHRleHRGaWVsZDsKLSAgICBtX3NlbGVjdGVkSW5kZXggPSBkZWZh
dWx0U3VnZ2VzdGlvbkluZGV4OwotCi0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
bjsKLSAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUZvbnQoQ1NTVmFsdWVX
ZWJraXRDb250cm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24pOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fdGV4dEZpZWxk
LT5jb21wdXRlZFN0eWxlKCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCkpOwotCi0gICAgRm9udCBmb250
KGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7Ci0gICAgZm9udC51cGRhdGUodGV4dEZpZWxkLT5kb2N1
bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPmZvbnRTZWxlY3RvcigpKTsKLSAgICAvLyBUaGUgZGly
ZWN0aW9uIG9mIHRleHQgaW4gcG9wdXAgbWVudSBpcyBzZXQgdGhlIHNhbWUgYXMgdGhlIGRpcmVj
dGlvbiBvZgotICAgIC8vIHRoZSBpbnB1dCBlbGVtZW50OiB0ZXh0RmllbGQuCi0gICAgbV9zdHls
ZS5zZXQobmV3IFBvcHVwTWVudVN0eWxlKENvbG9yOjpibGFjaywgQ29sb3I6OndoaXRlLCBmb250
LCB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgoV2ViQ29y
ZTo6Rml4ZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RmllbGQt
PnJlbmRlcmVyKCktPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7Ci19Ci0KLVdlYlZpZXdJbXBsKiBT
dWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudDo6Z2V0V2ViVmlldygpIGNvbnN0Ci17Ci0gICAgRnJh
bWUqIGZyYW1lID0gbV90ZXh0RmllbGQtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2Uo
KTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PENocm9tZUNsaWVudEltcGwqPihwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpLT53ZWJW
aWV3KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVt
L3NyYy9TdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9zcmMvU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQuaAkocmV2aXNpb24gNjIxOTAp
CisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1N1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50Lmgi
Ci0KLSNpZm5kZWYgU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnRfaAotI2RlZmluZSBTdWdnZXN0
aW9uc1BvcHVwTWVudUNsaWVudF9oCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEhUTUxJ
bnB1dEVsZW1lbnQ7Ci1jbGFzcyBQb3B1cE1lbnVTdHlsZTsKLWNsYXNzIFJlbmRlclN0eWxlOwot
fQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlN0cmluZzsKLWNsYXNzIFdlYlZpZXdJ
bXBsOwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKLQotLy8gVGhlIFN1
Z2dlc3Rpb25zIHBvcHVwIG1lbnUgY2xpZW50LCB1c2VkIHRvIGRpc3BsYXkgYSBsaXN0IG9mIHN1
Z2dlc3Rpb25zLgotY2xhc3MgU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQgOiBwdWJsaWMgV2Vi
Q29yZTo6UG9wdXBNZW51Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBTdWdnZXN0aW9uc1BvcHVwTWVu
dUNsaWVudCgpOwotICAgIHZpcnR1YWwgflN1Z2dlc3Rpb25zUG9wdXBNZW51Q2xpZW50KCk7Ci0K
LSAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VnZ2VzdGlvbnMgYXZhaWxhYmxlLgotICAg
IHZpcnR1YWwgdW5zaWduZWQgZ2V0U3VnZ2VzdGlvbnNDb3VudCgpIGNvbnN0ID0gMDsKLQotICAg
IC8vIFJldHVybnMgdGhlIHN1Z2dlc3Rpb24gYXQgfGxpc3RJbmRleHwuCi0gICAgdmlydHVhbCBX
ZWJTdHJpbmcgZ2V0U3VnZ2VzdGlvbih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0ID0gMDsKLQot
ICAgIC8vIFJlbW92ZXMgdGhlIHN1Z2dlc3Rpb24gYXQgfGxpc3RJbmRleHwgZnJvbSB0aGUgbGlz
dCBvZiBzdWdnZXN0aW9ucy4KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU3VnZ2VzdGlvbkF0SW5k
ZXgodW5zaWduZWQgbGlzdEluZGV4KSA9IDA7Ci0KLSAgICAvLyBXZWJDb3JlOjpQb3B1cE1lbnVD
bGllbnQgbWV0aG9kczoKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxp
c3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzID0gdHJ1ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVj
dGlvbkNoYW5nZWQodW5zaWduZWQsIGJvb2wpIHt9Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdGlv
bkNsZWFyZWQoKSB7fQotICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGl0ZW1UZXh0KHVuc2ln
bmVkIGxpc3RJbmRleCkgY29uc3Q7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaXRlbVRv
b2xUaXAodW5zaWduZWQgbGFzdEluZGV4KSBjb25zdCB7IHJldHVybiBXZWJDb3JlOjpTdHJpbmco
KTsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGl0ZW1BY2Nlc3NpYmlsaXR5VGV4dCh1
bnNpZ25lZCBsYXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OlN0cmluZygpOyB9Ci0g
ICAgdmlydHVhbCBib29sIGl0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCB7
IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpQb3B1cE1lbnVTdHlsZSBpdGVt
U3R5bGUodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBv
cHVwTWVudVN0eWxlIG1lbnVTdHlsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGNsaWVudElu
c2V0TGVmdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGludCBjbGllbnRJbnNl
dFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IGNsaWVudFBhZGRp
bmdMZWZ0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgY2xpZW50UGFkZGluZ1JpZ2h0KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBpbnQgbGlzdFNpemUoKSBjb25zdCB7IHJldHVybiBnZXRTdWdnZXN0
aW9uc0NvdW50KCk7IH0KLSAgICB2aXJ0dWFsIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWxlY3RlZEluZGV4OyB9Ci0gICAgdmlydHVhbCB2b2lkIHBvcHVwRGlkSGlkZSgp
OwotICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4KSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNMYWJlbCh1bnNp
Z25lZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29s
IGl0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUG9wT3ZlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdmlydHVhbCBib29sIHZhbHVlU2hvdWxkQ2hhbmdlT25Ib3RUcmFjaygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFRleHRGcm9tSXRlbSh1bnNp
Z25lZCBsaXN0SW5kZXgpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6Rm9udFNlbGVjdG9yKiBmb250
U2VsZWN0b3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6Okhvc3RXaW5kb3cqIGhvc3RX
aW5kb3coKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFy
PiBjcmVhdGVTY3JvbGxiYXIoCi0gICAgICAgIFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudCogY2xp
ZW50LAotICAgICAgICBXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwK
LSAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFyQ29udHJvbFNpemUgc2l6ZSk7Ci0KLXByb3RlY3Rl
ZDoKLSAgICB2b2lkIGluaXRpYWxpemUoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogdGV4dEZp
ZWxkLAotICAgICAgICAgICAgICAgICAgICBpbnQgZGVmYXVsdFN1Z2dlc3Rpb25JbmRleCk7Ci0K
LSAgICBpbnQgZ2V0U2VsZWN0ZWRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0ZWRJbmRl
eDsgfQotICAgIHZvaWQgc2V0U2VsZWN0ZWRJbmRleChpbnQgaW5kZXgpIHsgbV9zZWxlY3RlZElu
ZGV4ID0gaW5kZXg7IH0KLQotICAgIFdlYlZpZXdJbXBsKiBnZXRXZWJWaWV3KCkgY29uc3Q7Ci0g
ICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogZ2V0VGV4dEZpZWxkKCkgY29uc3QgeyByZXR1
cm4gbV90ZXh0RmllbGQuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBXZWJDb3JlOjpSZW5kZXJT
dHlsZSogdGV4dEZpZWxkU3R5bGUoKSBjb25zdDsKLQotICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50PiBtX3RleHRGaWVsZDsKLSAgICBpbnQgbV9zZWxlY3RlZEluZGV4OwotICAg
IE93blB0cjxXZWJDb3JlOjpQb3B1cE1lbnVTdHlsZT4gbV9zdHlsZTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJh
bWVJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1w
bC5jcHAJKHJldmlzaW9uIDYyMTkwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUlt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NjIsNyArOTYyLDcgQEAgV2ViSGlzdG9yeUl0ZW0g
V2ViRnJhbWVJbXBsOjpwcmV2aW91c0hpcwogV2ViSGlzdG9yeUl0ZW0gV2ViRnJhbWVJbXBsOjpj
dXJyZW50SGlzdG9yeUl0ZW0oKSBjb25zdAogewogICAgIC8vIElmIHdlIGFyZSBzdGlsbCBsb2Fk
aW5nLCB0aGVuIHdlIGRvbid0IHdhbnQgdG8gY2xvYmJlciB0aGUgY3VycmVudAotICAgIC8vIGhp
c3RvcnkgaXRlbSBhcyB0aGlzIGNvdWxkIGNhdXNlIHVzIHRvIGxvc2UgdGhlIHNjcm9sbCBwb3Np
dGlvbiBhbmQgCisgICAgLy8gaGlzdG9yeSBpdGVtIGFzIHRoaXMgY291bGQgY2F1c2UgdXMgdG8g
bG9zZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIGFuZAogICAgIC8vIGRvY3VtZW50IHN0YXRlLiAgSG93
ZXZlciwgaXQgaXMgT0sgZm9yIG5ldyBuYXZpZ2F0aW9ucy4KICAgICBpZiAobV9mcmFtZS0+bG9h
ZGVyKCktPmxvYWRUeXBlKCkgPT0gRnJhbWVMb2FkVHlwZVN0YW5kYXJkCiAgICAgICAgIHx8ICFt
X2ZyYW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+aXNMb2FkaW5nSW5BUElT
ZW5zZSgpKQpAQCAtMTk2OCw2ICsxOTY4LDE3IEBAIGJvb2wgV2ViRnJhbWVJbXBsOjpyZWdpc3Rl
clBhc3N3b3JkTGlzdGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBXZWJGcmFtZUltcGw6
Om5vdGlmaXlQYXNzd29yZExpc3RlbmVyT2ZBdXRvY29tcGxldGUoCisgICAgY29uc3QgV2ViSW5w
dXRFbGVtZW50JiBpbnB1dEVsZW1lbnQpCit7CisgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+
IGVsZW1lbnQgPSBpbnB1dEVsZW1lbnQub3BlcmF0b3IgUGFzc1JlZlB0cjxIVE1MSW5wdXRFbGVt
ZW50PigpOworICAgIFdlYlBhc3N3b3JkQXV0b2NvbXBsZXRlTGlzdGVuZXIqIGxpc3RlbmVyID0g
Z2V0UGFzc3dvcmRMaXN0ZW5lcihlbGVtZW50LmdldCgpKTsKKyAgICAvLyBQYXNzd29yZCBsaXN0
ZW5lcnMgbmVlZCB0byBhdXRvY29tcGxldGUgb3RoZXIgZmllbGRzIHRoYXQgZGVwZW5kIG9uIHRo
ZQorICAgIC8vIGlucHV0IGVsZW1lbnQgd2l0aCBhdXRvZmlsbCBzdWdnZXN0aW9ucy4KKyAgICBp
ZiAobGlzdGVuZXIpCisgICAgICAgIGxpc3RlbmVyLT5wZXJmb3JtSW5saW5lQXV0b2NvbXBsZXRl
KGVsZW1lbnQtPnZhbHVlKCksIGZhbHNlLCBmYWxzZSk7Cit9CisKIFdlYlBhc3N3b3JkQXV0b2Nv
bXBsZXRlTGlzdGVuZXIqIFdlYkZyYW1lSW1wbDo6Z2V0UGFzc3dvcmRMaXN0ZW5lcigKICAgICBI
VE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQpCiB7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkZyYW1lSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RnJhbWVJbXBsLmgJKHJldmlzaW9uIDYyMTkwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJG
cmFtZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDYgKzE2OCw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXRNYXRjaENvdW50KCk7CiAgICAgdmlydHVhbCBib29sIHJlZ2lz
dGVyUGFzc3dvcmRMaXN0ZW5lcigKICAgICAgICAgV2ViSW5wdXRFbGVtZW50LCBXZWJQYXNzd29y
ZEF1dG9jb21wbGV0ZUxpc3RlbmVyKik7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmaXlQYXNzd29y
ZExpc3RlbmVyT2ZBdXRvY29tcGxldGUoCisgICAgICAgIGNvbnN0IFdlYklucHV0RWxlbWVudCYp
OwogCiAgICAgdmlydHVhbCBXZWJTdHJpbmcgY29udGVudEFzVGV4dChzaXplX3QgbWF4Q2hhcnMp
IGNvbnN0OwogICAgIHZpcnR1YWwgV2ViU3RyaW5nIGNvbnRlbnRBc01hcmt1cCgpIGNvbnN0OwpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDYyMTkwKQorKysg
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDcgKzMyLDYgQEAKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogCiAjaW5jbHVkZSAiQXV0b0Zp
bGxQb3B1cE1lbnVDbGllbnQuaCIKLSNpbmNsdWRlICJBdXRvY29tcGxldGVQb3B1cE1lbnVDbGll
bnQuaCIKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAj
aW5jbHVkZSAiQ29tcG9zaXRpb25VbmRlcmxpbmVWZWN0b3JCdWlsZGVyLmgiCkBAIC0xNTMsNyAr
MTUyLDcgQEAgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShEcmFnT3BlcmF0aQogQ09NUElM
RV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShEcmFnT3BlcmF0aW9uRGVsZXRlKTsKIENPTVBJTEVfQVNT
RVJUX01BVENISU5HX0VOVU0oRHJhZ09wZXJhdGlvbkV2ZXJ5KTsKIAotc3RhdGljIGNvbnN0IFBv
cHVwQ29udGFpbmVyU2V0dGluZ3Mgc3VnZ2VzdGlvbnNQb3B1cFNldHRpbmdzID0geworc3RhdGlj
IGNvbnN0IFBvcHVwQ29udGFpbmVyU2V0dGluZ3MgYXV0b0ZpbGxQb3B1cFNldHRpbmdzID0gewog
ICAgIGZhbHNlLCAgLy8gc2V0VGV4dE9uSW5kZXhDaGFuZ2UKICAgICBmYWxzZSwgIC8vIGFjY2Vw
dE9uQWJhbmRvbgogICAgIHRydWUsICAgLy8gbG9vcFNlbGVjdGlvbk5hdmlnYXRpb24KQEAgLTIz
OSw5ICsyMzgsOSBAQCBXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwoV2ViVmlld0NsaWVudCogCiAg
ICAgLCBtX2Ryb3BFZmZlY3QoRHJvcEVmZmVjdERlZmF1bHQpCiAgICAgLCBtX29wZXJhdGlvbnNB
bGxvd2VkKFdlYkRyYWdPcGVyYXRpb25Ob25lKQogICAgICwgbV9kcmFnT3BlcmF0aW9uKFdlYkRy
YWdPcGVyYXRpb25Ob25lKQotICAgICwgbV9zdWdnZXN0aW9uc1BvcHVwU2hvd2luZyhmYWxzZSkK
LSAgICAsIG1fc3VnZ2VzdGlvbnNQb3B1cENsaWVudCgwKQotICAgICwgbV9zdWdnZXN0aW9uc1Bv
cHVwKDApCisgICAgLCBtX2F1dG9GaWxsUG9wdXBTaG93aW5nKGZhbHNlKQorICAgICwgbV9hdXRv
RmlsbFBvcHVwQ2xpZW50KDApCisgICAgLCBtX2F1dG9GaWxsUG9wdXAoMCkKICAgICAsIG1faXNU
cmFuc3BhcmVudChmYWxzZSkKICAgICAsIG1fdGFic1RvTGlua3MoZmFsc2UpCiAgICAgLCBtX2Ry
YWdTY3JvbGxUaW1lcihuZXcgRHJhZ1Njcm9sbFRpbWVyKCkpCkBAIC0zNTYsNyArMzU1LDcgQEAg
dm9pZCBXZWJWaWV3SW1wbDo6bW91c2VEb3duKGNvbnN0IFdlYk1vdQogICAgICAgICAgICAgbV9t
b3VzZUNhcHR1cmVOb2RlID0gaGl0Tm9kZTsKIAogICAgICAgICAvLyBJZiBhIHRleHQgZmllbGQg
dGhhdCBoYXMgZm9jdXMgaXMgY2xpY2tlZCBhZ2Fpbiwgd2Ugc2hvdWxkIGRpc3BsYXkgdGhlCi0g
ICAgICAgIC8vIHN1Z2dlc3Rpb25zIHBvcHVwLgorICAgICAgICAvLyBBdXRvRmlsbCBwb3B1cC4K
ICAgICAgICAgUmVmUHRyPE5vZGU+IGZvY3VzZWROb2RlID0gZm9jdXNlZFdlYkNvcmVOb2RlKCk7
CiAgICAgICAgIGlmIChmb2N1c2VkTm9kZS5nZXQoKSAmJiB0b0hUTUxJbnB1dEVsZW1lbnQoZm9j
dXNlZE5vZGUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBpZiAoaGl0Tm9kZSA9PSBmb2N1c2VkTm9k
ZSkgewpAQCAtMzc0LDcgKzM3Myw3IEBAIHZvaWQgV2ViVmlld0ltcGw6Om1vdXNlRG93bihjb25z
dCBXZWJNb3UKICAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlcihtYWluRnJhbWVJbXBs
KCktPmZyYW1lVmlldygpLCBldmVudCkpOwogCiAgICAgaWYgKGNsaWNrZWROb2RlLmdldCgpICYm
IGNsaWNrZWROb2RlID09IGZvY3VzZWRXZWJDb3JlTm9kZSgpKSB7Ci0gICAgICAgIC8vIEZvY3Vz
IGhhcyBub3QgY2hhbmdlZCwgc2hvdyB0aGUgc3VnZ2VzdGlvbnMgcG9wdXAuCisgICAgICAgIC8v
IEZvY3VzIGhhcyBub3QgY2hhbmdlZCwgc2hvdyB0aGUgQXV0b0ZpbGwgcG9wdXAuCiAgICAgICAg
IHN0YXRpY19jYXN0PEVkaXRvckNsaWVudEltcGwqPihtX3BhZ2UtPmVkaXRvckNsaWVudCgpKS0+
CiAgICAgICAgICAgICBzaG93Rm9ybUF1dG9maWxsRm9yTm9kZShjbGlja2VkTm9kZS5nZXQoKSk7
CiAgICAgfQpAQCAtNDU2LDcgKzQ1NSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6Om1vdXNlVXAoY29u
c3QgV2ViTW91c2UKICAgICAgICAgSW50UG9pbnQgY29udGVudFBvaW50ID0gdmlldy0+d2luZG93
VG9Db250ZW50cyhjbGlja1BvaW50KTsKICAgICAgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVz
dWx0ID0gZm9jdXNlZC0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KGNvbnRl
bnRQb2ludCwgZmFsc2UsIGZhbHNlLCBTaG91bGRIaXRUZXN0U2Nyb2xsYmFycyk7CiAgICAgICAg
IC8vIFdlIGRvbid0IHdhbnQgdG8gc2VuZCBhIHBhc3RlIHdoZW4gbWlkZGxlIGNsaWNraW5nIGEg
c2Nyb2xsIGJhciBvciBhCi0gICAgICAgIC8vIGxpbmsgKHdoaWNoIHdpbGwgbmF2aWdhdGUgbGF0
ZXIgaW4gdGhlIGNvZGUpLiAgVGhlIG1haW4gc2Nyb2xsYmFycyAKKyAgICAgICAgLy8gbGluayAo
d2hpY2ggd2lsbCBuYXZpZ2F0ZSBsYXRlciBpbiB0aGUgY29kZSkuICBUaGUgbWFpbiBzY3JvbGxi
YXJzCiAgICAgICAgIC8vIGhhdmUgdG8gYmUgaGFuZGxlZCBzZXBhcmF0ZWx5LgogICAgICAgICBp
ZiAoIWhpdFRlc3RSZXN1bHQuc2Nyb2xsYmFyKCkgJiYgIWhpdFRlc3RSZXN1bHQuaXNMaXZlTGlu
aygpICYmIGZvY3VzZWQgJiYgIXZpZXctPnNjcm9sbGJhckF0UG9pbnQoY2xpY2tQb2ludCkpIHsK
ICAgICAgICAgICAgIEVkaXRvciogZWRpdG9yID0gZm9jdXNlZC0+ZWRpdG9yKCk7CkBAIC01NTcs
MTMgKzU1NiwxMyBAQCBib29sIFdlYlZpZXdJbXBsOjpzZWxlY3RQb3B1cEhhbmRsZUtleUV2CiB7
CiAgICAgaWYgKCFtX3NlbGVjdFBvcHVwKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisK
ICAgICByZXR1cm4gbV9zZWxlY3RQb3B1cC0+aGFuZGxlS2V5RXZlbnQoUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50QnVpbGRlcihldmVudCkpOwogfQogCiBib29sIFdlYlZpZXdJbXBsOjphdXRvY29tcGxl
dGVIYW5kbGVLZXlFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKLSAgICBp
ZiAoIW1fc3VnZ2VzdGlvbnNQb3B1cFNob3dpbmcKKyAgICBpZiAoIW1fYXV0b0ZpbGxQb3B1cFNo
b3dpbmcKICAgICAgICAgLy8gSG9tZSBhbmQgRW5kIHNob3VsZCBiZSBsZWZ0IHRvIHRoZSB0ZXh0
IGZpZWxkIHRvIHByb2Nlc3MuCiAgICAgICAgIHx8IGV2ZW50LndpbmRvd3NLZXlDb2RlID09IFZL
RVlfSE9NRQogICAgICAgICB8fCBldmVudC53aW5kb3dzS2V5Q29kZSA9PSBWS0VZX0VORCkKQEAg
LTU3MSw3ICs1NzAsNyBAQCBib29sIFdlYlZpZXdJbXBsOjphdXRvY29tcGxldGVIYW5kbGVLZXlF
CiAKICAgICAvLyBQcmVzc2luZyBkZWxldGUgdHJpZ2dlcnMgdGhlIHJlbW92YWwgb2YgdGhlIHNl
bGVjdGVkIHN1Z2dlc3Rpb24gZnJvbSB0aGUgREIuCiAgICAgaWYgKGV2ZW50LndpbmRvd3NLZXlD
b2RlID09IFZLRVlfREVMRVRFCi0gICAgICAgICYmIG1fc3VnZ2VzdGlvbnNQb3B1cC0+c2VsZWN0
ZWRJbmRleCgpICE9IC0xKSB7CisgICAgICAgICYmIG1fYXV0b0ZpbGxQb3B1cC0+c2VsZWN0ZWRJ
bmRleCgpICE9IC0xKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBmb2N1c2VkV2ViQ29yZU5vZGUo
KTsKICAgICAgICAgaWYgKCFub2RlIHx8IChub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1F
TlRfTk9ERSkpIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTgzLDIy
ICs1ODIsMjIgQEAgYm9vbCBXZWJWaWV3SW1wbDo6YXV0b2NvbXBsZXRlSGFuZGxlS2V5RQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNlbGVjdGVk
SW5kZXggPSBtX3N1Z2dlc3Rpb25zUG9wdXAtPnNlbGVjdGVkSW5kZXgoKTsKKyAgICAgICAgaW50
IHNlbGVjdGVkSW5kZXggPSBtX2F1dG9GaWxsUG9wdXAtPnNlbGVjdGVkSW5kZXgoKTsKICAgICAg
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0
RWxlbWVudCo+KGVsZW1lbnQpOwogICAgICAgICBXZWJTdHJpbmcgbmFtZSA9IGlucHV0RWxlbWVu
dC0+bmFtZSgpOwotICAgICAgICBXZWJTdHJpbmcgdmFsdWUgPSBtX3N1Z2dlc3Rpb25zUG9wdXBD
bGllbnQtPml0ZW1UZXh0KHNlbGVjdGVkSW5kZXgpOworICAgICAgICBXZWJTdHJpbmcgdmFsdWUg
PSBtX2F1dG9GaWxsUG9wdXBDbGllbnQtPml0ZW1UZXh0KHNlbGVjdGVkSW5kZXgpOwogICAgICAg
ICBtX2NsaWVudC0+cmVtb3ZlQXV0b2ZpbGxTdWdnZXN0aW9ucyhuYW1lLCB2YWx1ZSk7CiAgICAg
ICAgIC8vIFVwZGF0ZSB0aGUgZW50cmllcyBpbiB0aGUgY3VycmVudGx5IHNob3dpbmcgcG9wdXAg
dG8gcmVmbGVjdCB0aGUKICAgICAgICAgLy8gZGVsZXRpb24uCi0gICAgICAgIG1fc3VnZ2VzdGlv
bnNQb3B1cENsaWVudC0+cmVtb3ZlU3VnZ2VzdGlvbkF0SW5kZXgoc2VsZWN0ZWRJbmRleCk7Ci0g
ICAgICAgIHJlZnJlc2hTdWdnZXN0aW9uc1BvcHVwKCk7CisgICAgICAgIG1fYXV0b0ZpbGxQb3B1
cENsaWVudC0+cmVtb3ZlU3VnZ2VzdGlvbkF0SW5kZXgoc2VsZWN0ZWRJbmRleCk7CisgICAgICAg
IHJlZnJlc2hBdXRvRmlsbFBvcHVwKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBpZiAoIW1fc3VnZ2VzdGlvbnNQb3B1cC0+aXNJbnRlcmVzdGVkSW5FdmVudEZvcktleShl
dmVudC53aW5kb3dzS2V5Q29kZSkpCisgICAgaWYgKCFtX2F1dG9GaWxsUG9wdXAtPmlzSW50ZXJl
c3RlZEluRXZlbnRGb3JLZXkoZXZlbnQud2luZG93c0tleUNvZGUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpZiAobV9zdWdnZXN0aW9uc1BvcHVwLT5oYW5kbGVLZXlFdmVudChQbGF0
Zm9ybUtleWJvYXJkRXZlbnRCdWlsZGVyKGV2ZW50KSkpIHsKKyAgICBpZiAobV9hdXRvRmlsbFBv
cHVwLT5oYW5kbGVLZXlFdmVudChQbGF0Zm9ybUtleWJvYXJkRXZlbnRCdWlsZGVyKGV2ZW50KSkp
IHsKICAgICAgICAgLy8gV2UgbmVlZCB0byBpZ25vcmUgdGhlIG5leHQgQ2hhciBldmVudCBhZnRl
ciB0aGlzIG90aGVyd2lzZSBwcmVzc2luZwogICAgICAgICAvLyBlbnRlciB3aGVuIHNlbGVjdGlu
ZyBhbiBpdGVtIGluIHRoZSBtZW51IHdpbGwgZ28gdG8gdGhlIHBhZ2UuCiAgICAgICAgIGlmIChX
ZWJJbnB1dEV2ZW50OjpSYXdLZXlEb3duID09IGV2ZW50LnR5cGUpCkBAIC04ODAsMTEgKzg3OSwx
MSBAQCB2b2lkICBXZWJWaWV3SW1wbDo6cG9wdXBDbG9zZWQoV2ViQ29yZTo6CiAgICAgfQogfQog
Ci12b2lkIFdlYlZpZXdJbXBsOjpoaWRlU3VnZ2VzdGlvbnNQb3B1cCgpCit2b2lkIFdlYlZpZXdJ
bXBsOjpoaWRlQXV0b0ZpbGxQb3B1cCgpCiB7Ci0gICAgaWYgKG1fc3VnZ2VzdGlvbnNQb3B1cFNo
b3dpbmcpIHsKLSAgICAgICAgbV9zdWdnZXN0aW9uc1BvcHVwLT5oaWRlUG9wdXAoKTsKLSAgICAg
ICAgbV9zdWdnZXN0aW9uc1BvcHVwU2hvd2luZyA9IGZhbHNlOworICAgIGlmIChtX2F1dG9GaWxs
UG9wdXBTaG93aW5nKSB7CisgICAgICAgIG1fYXV0b0ZpbGxQb3B1cC0+aGlkZVBvcHVwKCk7Cisg
ICAgICAgIG1fYXV0b0ZpbGxQb3B1cFNob3dpbmcgPSBmYWxzZTsKICAgICB9CiB9CiAKQEAgLTEx
NDIsNyArMTE0MSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldEZvY3VzKGJvb2wgZW5hYmxlKQog
ICAgICAgICB9CiAgICAgICAgIG1faW1lQWNjZXB0RXZlbnRzID0gdHJ1ZTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBoaWRlU3VnZ2VzdGlvbnNQb3B1cCgpOworICAgICAgICBoaWRlQXV0b0ZpbGxQ
b3B1cCgpOwogICAgICAgICBoaWRlU2VsZWN0UG9wdXAoKTsKIAogICAgICAgICAvLyBDbGVhciBm
b2N1cyBvbiB0aGUgY3VycmVudGx5IGZvY3VzZWQgZnJhbWUgaWYgYW55LgpAQCAtMTc3OSw3ICsx
Nzc4LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6YXBwbHlBdXRvRmlsbFN1Z2dlc3RpbwogICAgIEFT
U0VSVChzZXBhcmF0b3JJbmRleCA8IHN0YXRpY19jYXN0PGludD4obmFtZXMuc2l6ZSgpKSk7CiAK
ICAgICBpZiAobmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGhpZGVTdWdnZXN0aW9uc1BvcHVw
KCk7CisgICAgICAgIGhpZGVBdXRvRmlsbFBvcHVwKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTE3ODgsNyArMTc4Nyw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmFwcGx5QXV0b0ZpbGxT
dWdnZXN0aW8KICAgICAvLyBmb2N1c2VkIG5vZGUsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRv
LiAgRklYTUU6IGFsc28gY2hlY2sgdGhlCiAgICAgLy8gY2FyZXQgaXMgYXQgdGhlIGVuZCBhbmQg
dGhhdCB0aGUgdGV4dCBoYXMgbm90IGNoYW5nZWQuCiAgICAgaWYgKCFmb2N1c2VkTm9kZSB8fCBm
b2N1c2VkTm9kZSAhPSBQYXNzUmVmUHRyPE5vZGU+KG5vZGUpKSB7Ci0gICAgICAgIGhpZGVTdWdn
ZXN0aW9uc1BvcHVwKCk7CisgICAgICAgIGhpZGVBdXRvRmlsbFBvcHVwKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTE4MDAsOTMgKzE3OTksNTIgQEAgdm9pZCBXZWJWaWV3SW1wbDo6
YXBwbHlBdXRvRmlsbFN1Z2dlc3RpbwogICAgIGlmICghbV9hdXRvRmlsbFBvcHVwQ2xpZW50Lmdl
dCgpKQogICAgICAgICBtX2F1dG9GaWxsUG9wdXBDbGllbnQuc2V0KG5ldyBBdXRvRmlsbFBvcHVw
TWVudUNsaWVudCk7CiAKLSAgICBtX2F1dG9GaWxsUG9wdXBDbGllbnQtPmluaXRpYWxpemUoaW5w
dXRFbGVtLCBuYW1lcywgbGFiZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXBhcmF0b3JJbmRleCk7Ci0KLSAgICBpZiAobV9zdWdnZXN0aW9uc1BvcHVwQ2xpZW50
ICE9IG1fYXV0b0ZpbGxQb3B1cENsaWVudC5nZXQoKSkgewotICAgICAgICBoaWRlU3VnZ2VzdGlv
bnNQb3B1cCgpOwotICAgICAgICBtX3N1Z2dlc3Rpb25zUG9wdXBDbGllbnQgPSBtX2F1dG9GaWxs
UG9wdXBDbGllbnQuZ2V0KCk7Ci0gICAgfQorICAgIG1fYXV0b0ZpbGxQb3B1cENsaWVudC0+aW5p
dGlhbGl6ZShpbnB1dEVsZW0sIG5hbWVzLCBsYWJlbHMsIHNlcGFyYXRvckluZGV4KTsKIAogICAg
IGlmICghbV9hdXRvRmlsbFBvcHVwLmdldCgpKSB7Ci0gICAgICAgIG1fYXV0b0ZpbGxQb3B1cCA9
IFBvcHVwQ29udGFpbmVyOjpjcmVhdGUobV9zdWdnZXN0aW9uc1BvcHVwQ2xpZW50LAorICAgICAg
ICBtX2F1dG9GaWxsUG9wdXAgPSBQb3B1cENvbnRhaW5lcjo6Y3JlYXRlKG1fYXV0b0ZpbGxQb3B1
cENsaWVudC5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQb3B1cENvbnRhaW5lcjo6U3VnZ2VzdGlvbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uc1BvcHVwU2V0dGluZ3MpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9GaWxs
UG9wdXBTZXR0aW5ncyk7CiAgICAgfQogCi0gICAgaWYgKG1fc3VnZ2VzdGlvbnNQb3B1cCAhPSBt
X2F1dG9GaWxsUG9wdXAuZ2V0KCkpCi0gICAgICAgIG1fc3VnZ2VzdGlvbnNQb3B1cCA9IG1fYXV0
b0ZpbGxQb3B1cC5nZXQoKTsKLQotICAgIGlmIChtX3N1Z2dlc3Rpb25zUG9wdXBTaG93aW5nKSB7
CisgICAgaWYgKG1fYXV0b0ZpbGxQb3B1cFNob3dpbmcpIHsKICAgICAgICAgbV9hdXRvRmlsbFBv
cHVwQ2xpZW50LT5zZXRTdWdnZXN0aW9ucyhuYW1lcywgbGFiZWxzLCBzZXBhcmF0b3JJbmRleCk7
Ci0gICAgICAgIHJlZnJlc2hTdWdnZXN0aW9uc1BvcHVwKCk7CisgICAgICAgIHJlZnJlc2hBdXRv
RmlsbFBvcHVwKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9zdWdnZXN0aW9uc1BvcHVwLT5z
aG93KGZvY3VzZWROb2RlLT5nZXRSZWN0KCksCisgICAgICAgIG1fYXV0b0ZpbGxQb3B1cC0+c2hv
dyhmb2N1c2VkTm9kZS0+Z2V0UmVjdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9jdXNlZE5vZGUtPm93bmVyRG9jdW1lbnQoKS0+dmlldygpLCAwKTsKLSAgICAgICAgbV9z
dWdnZXN0aW9uc1BvcHVwU2hvd2luZyA9IHRydWU7CisgICAgICAgIG1fYXV0b0ZpbGxQb3B1cFNo
b3dpbmcgPSB0cnVlOwogICAgIH0KKworICAgIC8vIERFUFJFQ0FURUQ6IFRoaXMgc3BlY2lhbCBt
b2RlIHdpbGwgZ28gYXdheSBvbmNlIEF1dG9GaWxsIGFuZCBBdXRvY29tcGxldGUKKyAgICAvLyBt
ZXJnZSBpcyBjb21wbGV0ZS4KKyAgICBpZiAobV9hdXRvRmlsbFBvcHVwQ2xpZW50KQorICAgICAg
ICBtX2F1dG9GaWxsUG9wdXBDbGllbnQtPnNldEF1dG9jb21wbGV0ZU1vZGUoZmFsc2UpOwogfQog
CisvLyBERVBSRUNBVEVEOiByZXBsYWNpbmcgd2l0aCBhcHBseUF1dG9GaWxsU3VnZ2VzdGlvbnMu
CiB2b2lkIFdlYlZpZXdJbXBsOjphcHBseUF1dG9jb21wbGV0ZVN1Z2dlc3Rpb25zKAogICAgIGNv
bnN0IFdlYk5vZGUmIG5vZGUsCiAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHN1Z2dl
c3Rpb25zLAogICAgIGludCBkZWZhdWx0U3VnZ2VzdGlvbkluZGV4KQogewotICAgIEFTU0VSVChk
ZWZhdWx0U3VnZ2VzdGlvbkluZGV4IDwgc3RhdGljX2Nhc3Q8aW50PihzdWdnZXN0aW9ucy5zaXpl
KCkpKTsKLQotICAgIGlmICghbV9wYWdlLmdldCgpIHx8IHN1Z2dlc3Rpb25zLmlzRW1wdHkoKSkg
ewotICAgICAgICBoaWRlU3VnZ2VzdGlvbnNQb3B1cCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgUmVmUHRyPE5vZGU+IGZvY3VzZWROb2RlID0gZm9jdXNlZFdlYkNvcmVOb2RlKCk7
Ci0gICAgLy8gSWYgdGhlIG5vZGUgZm9yIHdoaWNoIHdlIHF1ZXJpZWQgdGhlIEF1dG9jb21wbGV0
ZSBzdWdnZXN0aW9ucyBpcyBub3QgdGhlCi0gICAgLy8gZm9jdXNlZCBub2RlLCB0aGVuIHdlIGhh
dmUgbm90aGluZyB0byBkby4gIEZJWE1FOiBhbHNvIGNoZWNrIHRoZQotICAgIC8vIGNhcmV0IGlz
IGF0IHRoZSBlbmQgYW5kIHRoYXQgdGhlIHRleHQgaGFzIG5vdCBjaGFuZ2VkLgotICAgIGlmICgh
Zm9jdXNlZE5vZGUgfHwgZm9jdXNlZE5vZGUgIT0gUGFzc1JlZlB0cjxOb2RlPihub2RlKSkgewot
ICAgICAgICBoaWRlU3VnZ2VzdGlvbnNQb3B1cCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KGZvY3VzZWROb2RlLmdldCgpKTsKLQotICAgIC8vIFRoZSBmaXJz
dCB0aW1lIHRoZSBBdXRvY29tcGxldGUgaXMgc2hvd24gd2UnbGwgY3JlYXRlIHRoZSBjbGllbnQg
YW5kIHRoZQotICAgIC8vIHBvcHVwLgotICAgIGlmICghbV9hdXRvY29tcGxldGVQb3B1cENsaWVu
dC5nZXQoKSkKLSAgICAgICAgbV9hdXRvY29tcGxldGVQb3B1cENsaWVudC5zZXQobmV3IEF1dG9j
b21wbGV0ZVBvcHVwTWVudUNsaWVudCk7Ci0KLSAgICBtX2F1dG9jb21wbGV0ZVBvcHVwQ2xpZW50
LT5pbml0aWFsaXplKGlucHV0RWxlbSwgc3VnZ2VzdGlvbnMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U3VnZ2VzdGlvbkluZGV4KTsKKyAgICBXZWJW
ZWN0b3I8V2ViU3RyaW5nPiBuYW1lcyhzdWdnZXN0aW9ucy5zaXplKCkpOworICAgIFdlYlZlY3Rv
cjxXZWJTdHJpbmc+IGxhYmVscyhzdWdnZXN0aW9ucy5zaXplKCkpOwogCi0gICAgaWYgKG1fc3Vn
Z2VzdGlvbnNQb3B1cENsaWVudCAhPSBtX2F1dG9jb21wbGV0ZVBvcHVwQ2xpZW50LmdldCgpKSB7
Ci0gICAgICAgIGhpZGVTdWdnZXN0aW9uc1BvcHVwKCk7Ci0gICAgICAgIG1fc3VnZ2VzdGlvbnNQ
b3B1cENsaWVudCA9IG1fYXV0b2NvbXBsZXRlUG9wdXBDbGllbnQuZ2V0KCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzdWdnZXN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBuYW1l
c1tpXSA9IHN1Z2dlc3Rpb25zW2ldOworICAgICAgICBsYWJlbHNbaV0gPSBXZWJTdHJpbmcoKTsK
ICAgICB9CiAKLSAgICBpZiAoIW1fYXV0b2NvbXBsZXRlUG9wdXAuZ2V0KCkpIHsKLSAgICAgICAg
bV9hdXRvY29tcGxldGVQb3B1cCA9IFBvcHVwQ29udGFpbmVyOjpjcmVhdGUobV9zdWdnZXN0aW9u
c1BvcHVwQ2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQb3B1cENvbnRhaW5lcjo6U3VnZ2VzdGlvbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnNQb3B1cFNldHRp
bmdzKTsKLSAgICB9Ci0KLSAgICBpZiAobV9zdWdnZXN0aW9uc1BvcHVwICE9IG1fYXV0b2NvbXBs
ZXRlUG9wdXAuZ2V0KCkpCi0gICAgICAgIG1fc3VnZ2VzdGlvbnNQb3B1cCA9IG1fYXV0b2NvbXBs
ZXRlUG9wdXAuZ2V0KCk7Ci0KLSAgICBpZiAobV9zdWdnZXN0aW9uc1BvcHVwU2hvd2luZykgewot
ICAgICAgICBtX2F1dG9jb21wbGV0ZVBvcHVwQ2xpZW50LT5zZXRTdWdnZXN0aW9ucyhzdWdnZXN0
aW9ucyk7Ci0gICAgICAgIHJlZnJlc2hTdWdnZXN0aW9uc1BvcHVwKCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgbV9zdWdnZXN0aW9uc1BvcHVwLT5zaG93KGZvY3VzZWROb2RlLT5nZXRSZWN0KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2VkTm9kZS0+b3duZXJEb2N1
bWVudCgpLT52aWV3KCksIDApOwotICAgICAgICBtX3N1Z2dlc3Rpb25zUG9wdXBTaG93aW5nID0g
dHJ1ZTsKLSAgICB9CisgICAgYXBwbHlBdXRvRmlsbFN1Z2dlc3Rpb25zKG5vZGUsIG5hbWVzLCBs
YWJlbHMsIC0xKTsKKyAgICBpZiAobV9hdXRvRmlsbFBvcHVwQ2xpZW50KQorICAgICAgICBtX2F1
dG9GaWxsUG9wdXBDbGllbnQtPnNldEF1dG9jb21wbGV0ZU1vZGUodHJ1ZSk7CiB9CiAKIHZvaWQg
V2ViVmlld0ltcGw6OmhpZGVQb3B1cHMoKQogewogICAgIGhpZGVTZWxlY3RQb3B1cCgpOwotICAg
IGhpZGVTdWdnZXN0aW9uc1BvcHVwKCk7CisgICAgaGlkZUF1dG9GaWxsUG9wdXAoKTsKIH0KIAog
dm9pZCBXZWJWaWV3SW1wbDo6cGVyZm9ybUN1c3RvbUNvbnRleHRNZW51QWN0aW9uKHVuc2lnbmVk
IGFjdGlvbikKQEAgLTIwNzIsMjQgKzIwMzAsMjUgQEAgTm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bCogV2ViVmlld0ltcGw6OgogfQogI2VuZGlmCiAKLXZvaWQgV2ViVmlld0ltcGw6OnJlZnJlc2hT
dWdnZXN0aW9uc1BvcHVwKCkKK3ZvaWQgV2ViVmlld0ltcGw6OnJlZnJlc2hBdXRvRmlsbFBvcHVw
KCkKIHsKLSAgICBBU1NFUlQobV9zdWdnZXN0aW9uc1BvcHVwU2hvd2luZyk7CisgICAgQVNTRVJU
KG1fYXV0b0ZpbGxQb3B1cFNob3dpbmcpOwogCiAgICAgLy8gSGlkZSB0aGUgcG9wdXAgaWYgaXQg
aGFzIGJlY29tZSBlbXB0eS4KLSAgICBpZiAoIW1fc3VnZ2VzdGlvbnNQb3B1cENsaWVudC0+bGlz
dFNpemUoKSkgewotICAgICAgICBoaWRlU3VnZ2VzdGlvbnNQb3B1cCgpOworICAgIGlmICghbV9h
dXRvRmlsbFBvcHVwQ2xpZW50LT5saXN0U2l6ZSgpKSB7CisgICAgICAgIGhpZGVBdXRvRmlsbFBv
cHVwKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBJbnRSZWN0IG9sZEJvdW5kcyA9
IG1fc3VnZ2VzdGlvbnNQb3B1cC0+Ym91bmRzUmVjdCgpOwotICAgIG1fc3VnZ2VzdGlvbnNQb3B1
cC0+cmVmcmVzaCgpOwotICAgIEludFJlY3QgbmV3Qm91bmRzID0gbV9zdWdnZXN0aW9uc1BvcHVw
LT5ib3VuZHNSZWN0KCk7CisgICAgSW50UmVjdCBvbGRCb3VuZHMgPSBtX2F1dG9GaWxsUG9wdXAt
PmJvdW5kc1JlY3QoKTsKKyAgICBtX2F1dG9GaWxsUG9wdXAtPnJlZnJlc2goKTsKKyAgICBJbnRS
ZWN0IG5ld0JvdW5kcyA9IG1fYXV0b0ZpbGxQb3B1cC0+Ym91bmRzUmVjdCgpOwogICAgIC8vIExl
dCdzIHJlc2l6ZSB0aGUgYmFja2luZyB3aW5kb3cgaWYgbmVjZXNzYXJ5LgogICAgIGlmIChvbGRC
b3VuZHMgIT0gbmV3Qm91bmRzKSB7CiAgICAgICAgIFdlYlBvcHVwTWVudUltcGwqIHBvcHVwTWVu
dSA9Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxXZWJQb3B1cE1lbnVJbXBsKj4obV9zdWdnZXN0
aW9uc1BvcHVwLT5jbGllbnQoKSk7Ci0gICAgICAgIHBvcHVwTWVudS0+Y2xpZW50KCktPnNldFdp
bmRvd1JlY3QobmV3Qm91bmRzKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFdlYlBvcHVwTWVu
dUltcGwqPihtX2F1dG9GaWxsUG9wdXAtPmNsaWVudCgpKTsKKyAgICAgICAgaWYgKHBvcHVwTWVu
dSkKKyAgICAgICAgICAgIHBvcHVwTWVudS0+Y2xpZW50KCktPnNldFdpbmRvd1JlY3QobmV3Qm91
bmRzKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgJKHJldmlz
aW9uIDYyMTkwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC03MCw3ICs3MCw2IEBAIGNsYXNzIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVu
dDsKIGNsYXNzIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OwogY2xhc3MgQ29udGV4dE1lbnVDbGll
bnRJbXBsOwogY2xhc3MgRHJhZ1Njcm9sbFRpbWVyOwotY2xhc3MgU3VnZ2VzdGlvbnNQb3B1cE1l
bnVDbGllbnQ7CiBjbGFzcyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OwogY2xhc3MgV2ViRGV2VG9v
bHNBZ2VudENsaWVudDsKIGNsYXNzIFdlYkRldlRvb2xzQWdlbnRQcml2YXRlOwpAQCAtMTM3LDgg
KzEzNiw4IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAog
ICAgICAgICBXZWJEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIGRy
YWdTb3VyY2VNb3ZlZFRvKAotICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsIAot
ICAgICAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsIAorICAgICAgICBjb25zdCBXZWJQ
b2ludCYgY2xpZW50UG9pbnQsCisgICAgICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwK
ICAgICAgICAgV2ViRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24pOwogICAgIHZpcnR1YWwgdm9pZCBk
cmFnU291cmNlU3lzdGVtRHJhZ0VuZGVkKCk7CiAgICAgdmlydHVhbCBXZWJEcmFnT3BlcmF0aW9u
IGRyYWdUYXJnZXREcmFnRW50ZXIoCkBAIC0xNzAsNiArMTY5LDcgQEAgcHVibGljOgogICAgICAg
ICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbmFtZXMsCiAgICAgICAgIGNvbnN0IFdlYlZl
Y3RvcjxXZWJTdHJpbmc+JiBsYWJlbHMsCiAgICAgICAgIGludCBzZXBhcmF0b3JJbmRleCk7Cisg
ICAgLy8gREVQUkVDQVRFRDogcmVwbGFjaW5nIHdpdGggYXBwbHlBdXRvRmlsbFN1Z2dlc3Rpb25z
LgogICAgIHZpcnR1YWwgdm9pZCBhcHBseUF1dG9jb21wbGV0ZVN1Z2dlc3Rpb25zKAogICAgICAg
ICBjb25zdCBXZWJOb2RlJiwKICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHN1
Z2dlc3Rpb25zLApAQCAtMjg2LDkgKzI4Niw5IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgV2Vi
SW1hZ2UmIGRyYWdJbWFnZSwKICAgICAgICAgY29uc3QgV2ViUG9pbnQmIGRyYWdJbWFnZU9mZnNl
dCk7CiAKLSAgICB2b2lkIHN1Z2dlc3Rpb25zUG9wdXBEaWRIaWRlKCkKKyAgICB2b2lkIGF1dG9G
aWxsUG9wdXBEaWRIaWRlKCkKICAgICB7Ci0gICAgICAgIG1fc3VnZ2VzdGlvbnNQb3B1cFNob3dp
bmcgPSBmYWxzZTsKKyAgICAgICAgbV9hdXRvRmlsbFBvcHVwU2hvd2luZyA9IGZhbHNlOwogICAg
IH0KIAogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQpAQCAtMzA0LDcgKzMwNCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHBvcHVwT3BlbmVkKFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyKiBwb3B1cENv
bnRhaW5lcik7CiAgICAgdm9pZCBwb3B1cENsb3NlZChXZWJDb3JlOjpQb3B1cENvbnRhaW5lciog
cG9wdXBDb250YWluZXIpOwogCi0gICAgdm9pZCBoaWRlU3VnZ2VzdGlvbnNQb3B1cCgpOworICAg
IHZvaWQgaGlkZUF1dG9GaWxsUG9wdXAoKTsKIAogICAgIC8vIEhBQ0s6IGN1cnJlbnRJbnB1dEV2
ZW50KCkgaXMgZm9yIENocm9tZUNsaWVudEltcGw6OnNob3coKSwgdW50aWwgd2UgY2FuCiAgICAg
Ly8gZml4IFdlYktpdCB0byBwYXNzIGVub3VnaCBpbmZvcm1hdGlvbiB1cCBpbnRvIENocm9tZUNs
aWVudDo6c2hvdygpIHNvIHdlCkBAIC0zNDcsMTAgKzM0NywxMCBAQCBwcml2YXRlOgogICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgYXV0b2NvbXBsZSBoYXMgY29uc3VtZWQgdGhlIGV2ZW50Lgog
ICAgIGJvb2wgYXV0b2NvbXBsZXRlSGFuZGxlS2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVu
dCYpOwogCi0gICAgLy8gUmVwYWludHMgdGhlIHN1Z2dlc3Rpb25zIHBvcHVwLiBTaG91bGQgYmUg
Y2FsbGVkIHdoZW4gdGhlIHN1Z2dlc3Rpb25zCi0gICAgLy8gaGF2ZSBjaGFuZ2VkLiBOb3RlIHRo
YXQgdGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgc3VnZ2VzdGlvbnMKKyAgICAv
LyBSZXBhaW50cyB0aGUgQXV0b0ZpbGwgcG9wdXAuIFNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUg
c3VnZ2VzdGlvbnMKKyAgICAvLyBoYXZlIGNoYW5nZWQuIE5vdGUgdGhhdCB0aGlzIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBBdXRvRmlsbAogICAgIC8vIHBvcHVwIGlzIHNob3dpbmcu
Ci0gICAgdm9pZCByZWZyZXNoU3VnZ2VzdGlvbnNQb3B1cCgpOworICAgIHZvaWQgcmVmcmVzaEF1
dG9GaWxsUG9wdXAoKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmlldyB3YXMgc2Ny
b2xsZWQuCiAgICAgYm9vbCBzY3JvbGxWaWV3V2l0aEtleWJvYXJkKGludCBrZXlDb2RlLCBpbnQg
bW9kaWZpZXJzKTsKQEAgLTQ1OSwzMiArNDU5LDE4IEBAIHByaXZhdGU6CiAgICAgLy8gY3VycmVu
dCBkcm9wIHRhcmdldCBpbiB0aGlzIFdlYlZpZXcgKHRoZSBkcm9wIHRhcmdldCBjYW4gYWNjZXB0
IHRoZSBkcm9wKS4KICAgICBXZWJEcmFnT3BlcmF0aW9uIG1fZHJhZ09wZXJhdGlvbjsKIAotICAg
IC8vIFdoZXRoZXIgYSBzdWdnZXN0aW9ucyBwb3B1cCBpcyBjdXJyZW50bHkgc2hvd2luZy4KLSAg
ICBib29sIG1fc3VnZ2VzdGlvbnNQb3B1cFNob3dpbmc7Ci0KLSAgICAvLyBBIHBvaW50ZXIgdG8g
dGhlIGN1cnJlbnQgc3VnZ2VzdGlvbnMgcG9wdXAgbWVudSBjbGllbnQuIFRoaXMgY2FuIGJlCi0g
ICAgLy8gZWl0aGVyIGFuIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50IG9yIGFuIEF1dG9jb21wbGV0
ZVBvcHVwTWVudUNsaWVudC4gV2UKLSAgICAvLyBkbyBub3Qgb3duIHRoaXMgcG9pbnRlci4KLSAg
ICBTdWdnZXN0aW9uc1BvcHVwTWVudUNsaWVudCogbV9zdWdnZXN0aW9uc1BvcHVwQ2xpZW50Owor
ICAgIC8vIFdoZXRoZXIgYW4gQXV0b0ZpbGwgcG9wdXAgaXMgY3VycmVudGx5IHNob3dpbmcuCisg
ICAgYm9vbCBtX2F1dG9GaWxsUG9wdXBTaG93aW5nOwogCiAgICAgLy8gVGhlIEF1dG9GaWxsIHBv
cHVwIGNsaWVudC4KICAgICBPd25QdHI8QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ+IG1fYXV0b0Zp
bGxQb3B1cENsaWVudDsKIAotICAgIC8vIFRoZSBBdXRvY29tcGxldGUgcG9wdXAgY2xpZW50Lgot
ICAgIE93blB0cjxBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ+IG1fYXV0b2NvbXBsZXRlUG9w
dXBDbGllbnQ7Ci0KLSAgICAvLyBBIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgc3VnZ2VzdGlvbnMg
cG9wdXAuIFdlIGRvIG5vdCBvd24gdGhpcyBwb2ludGVyLgotICAgIFdlYkNvcmU6OlBvcHVwQ29u
dGFpbmVyKiBtX3N1Z2dlc3Rpb25zUG9wdXA7CisgICAgLy8gVGhlIEF1dG9GaWxsIHBvcHVwLgor
ICAgIFJlZlB0cjxXZWJDb3JlOjpQb3B1cENvbnRhaW5lcj4gbV9hdXRvRmlsbFBvcHVwOwogCiAg
ICAgLy8gVGhlIHBvcHVwIGFzc29jaWF0ZWQgd2l0aCBhIHNlbGVjdCBlbGVtZW50LgogICAgIFJl
ZlB0cjxXZWJDb3JlOjpQb3B1cENvbnRhaW5lcj4gbV9zZWxlY3RQb3B1cDsKIAotICAgIC8vIFRo
ZSBBdXRvRmlsbCBzdWdnZXN0aW9ucyBwb3B1cC4KLSAgICBSZWZQdHI8V2ViQ29yZTo6UG9wdXBD
b250YWluZXI+IG1fYXV0b0ZpbGxQb3B1cDsKLQotICAgIC8vIFRoZSBBdXRvQ29tcGxldGUgc3Vn
Z2VzdGlvbnMgcG9wdXAuCi0gICAgUmVmUHRyPFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyPiBtX2F1
dG9jb21wbGV0ZVBvcHVwOwotCiAgICAgT3duUHRyPFdlYkRldlRvb2xzQWdlbnRQcml2YXRlPiBt
X2RldlRvb2xzQWdlbnQ7CiAKICAgICAvLyBXaGV0aGVyIHRoZSB3ZWJ2aWV3IGlzIHJlbmRlcmlu
ZyB0cmFuc3BhcmVudGx5Lgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>