<?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>99251</bug_id>
          
          <creation_ts>2012-10-13 10:53:37 -0700</creation_ts>
          <short_desc>Make subclassing of WKView safer by namespacing methods and eliminating its use as an observer and delegate</short_desc>
          <delta_ts>2013-05-09 18:11:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>mitz</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>741494</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-13 10:53:37 -0700</bug_when>
    <thetext>Make subclassing of WKView safer by namespacing methods and eliminating its use as an observer and delegate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741497</commentid>
    <comment_count>1</comment_count>
      <attachid>168558</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-13 11:08:58 -0700</bug_when>
    <thetext>Created attachment 168558
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741502</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-13 11:31:44 -0700</bug_when>
    <thetext>One minus to this approach is that these prefixed method names won’t work well as getter/setter pairs for Objective-C properties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741512</commentid>
    <comment_count>3</comment_count>
      <attachid>168558</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2012-10-13 12:29:47 -0700</bug_when>
    <thetext>Comment on attachment 168558
Patch

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

&gt; Source/WebKit2/ChangeLog:9
&gt; +        we chose to use internally in WKView&apos;s own implementation. Thus, it&apos;s a good idea to add a &quot;wk_&quot; prefix

I am not sure that wk_ as the prefix best aligns the advice Apple gives to third-party developers, which is that Cocoa frameworks reserve methods starting with &quot;_&quot;. So Apple&apos;s advice is that application code should never use methods starting with &quot;_&quot; and should instead use a two-letter prefix on method names of the form &quot;XX_&quot;. By using &quot;wk_&quot; in WebKit2, a Cocoa framework, we&apos;re stepping on what our guidelines say is Application namespace:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html

On the other hand, in practice many apps use underscore-prefixed names freely, which is presumably the reason for your change. If we want to be extra kind to apps that use WebKit, then perhaps an _wk_ prefix would be a good choice (or _WK_). That way we would both be using what is supposed to be the system framework namespace for private methods (start with underscore) but also using a unique prefix to reduce risk of collision from app developers not following the advice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741643</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-14 17:42:34 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; If we want to be extra kind to apps that use WebKit

We do.

&gt; then perhaps an _wk_ prefix would be a good choice (or _WK_).

Sounds fine. Would be easy for me to change wk_ to _wk_.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742109</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-15 09:27:04 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Cocoa frameworks reserve methods starting with &quot;_&quot;

It’s kind of unfortunate that future additions to the public APIs for Cocoa frameworks effectively reserve methods with simple names that do not start with &quot;_&quot; and the internals of Cocoa frameworks reserve methods with names that do start with &quot;_&quot;. Guess that means app developers do need to use a prefix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742118</commentid>
    <comment_count>6</comment_count>
      <attachid>168730</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-15 09:44:11 -0700</bug_when>
    <thetext>Created attachment 168730
Patch, revised based on feedback from Anders and Maciej</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742549</commentid>
    <comment_count>7</comment_count>
      <attachid>168730</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-15 16:07:04 -0700</bug_when>
    <thetext>Comment on attachment 168730
Patch, revised based on feedback from Anders and Maciej

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

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1889
&gt; +    #define ADD_OBSERVER(selectorName, notificationName, notificationObject) \
&gt; +        [[NSNotificationCenter defaultCenter] addObserver:_data selector:@selector(selectorName:) \
&gt; +            name:notificationName object:notificationObject]

Anders asked me to not use the WKViewData as the observer, because he plans to eliminate that object entirely in the future, once we can take advantage of the more modern Objective-C feature where we can add data without touching the header file. So I’ll use the block form of observer instead.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:2538
&gt; +        _data-&gt;_lastToolTipTag = [self addToolTipRect:wideOpenRect owner:_data userData:NULL];

Similarly, Anders asked me not to use the WKViewData as the owner of the tooltip, so I’ll create a separate object just for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742759</commentid>
    <comment_count>8</comment_count>
      <attachid>168843</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-15 20:41:03 -0700</bug_when>
    <thetext>Created attachment 168843
Patch, revised based on additional feedback from Anders</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742760</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-15 20:42:06 -0700</bug_when>
    <thetext>Anders, I made the changes you requested. Would you consider reviewing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744888</commentid>
    <comment_count>10</comment_count>
      <attachid>168843</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-17 18:27:14 -0700</bug_when>
    <thetext>Comment on attachment 168843
Patch, revised based on additional feedback from Anders

Clearing flags on attachment: 168843

Committed r131686: &lt;http://trac.webkit.org/changeset/131686&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744889</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-17 18:27:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745050</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-18 00:49:48 -0700</bug_when>
    <thetext>This patch appears to have broken Lion builds:
http://build.webkit.org/builders/Apple%20Lion%20Debug%20%28Build%29/builds/6232</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745053</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-18 00:54:15 -0700</bug_when>
    <thetext>Reverted the part of the patch that was causing the build failure in http://trac.webkit.org/changeset/131711.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752828</commentid>
    <comment_count>14</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-10-27 13:31:36 -0700</bug_when>
    <thetext>I completely rolled this out in r132738 due to continued crashes.  Reopening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887180</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-05-09 18:11:27 -0700</bug_when>
    <thetext>I don’t think I want to do this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168558</attachid>
            <date>2012-10-13 11:08:58 -0700</date>
            <delta_ts>2012-10-15 09:44:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99251-20121013110752.patch</filename>
            <type>text/plain</type>
            <size>89665</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTI2MCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MSBAQAorMjAxMi0xMC0xMyAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBzdWJjbGFzc2luZyBvZiBX
S1ZpZXcgc2FmZXIgYnkgbmFtZXNwYWNpbmcgbWV0aG9kcyBhbmQgZWxpbWluYXRpbmcgaXRzIHVz
ZSBhcyBhbiBvYnNlcnZlciBhbmQgZGVsZWdhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MjUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQXBwcyB0aGF0IHN1YmNsYXNzIFdLVmlldyBzaG91bGQgYmUg
YWJsZSB0byBmcmVlbHkgY2hvb3NlIG1ldGhvZCBuYW1lcyB3aXRob3V0IGNvbmZsaWN0aW5nIHdp
dGggYSBuYW1lCisgICAgICAgIHdlIGNob3NlIHRvIHVzZSBpbnRlcm5hbGx5IGluIFdLVmlldydz
IG93biBpbXBsZW1lbnRhdGlvbi4gVGh1cywgaXQncyBhIGdvb2QgaWRlYSB0byBhZGQgYSAid2tf
IiBwcmVmaXgKKyAgICAgICAgdG8gYW55IG1ldGhvZCBuYW1lcyB0aGF0IGFyZSBzb2xlbHkgZm9y
IGludGVybmFsIFdlYktpdDIgdXNlLiBFeGNlcHRpb25zIHRvIHRoaXMgYXJlIG1ldGhvZCBuYW1l
cyB0aGF0CisgICAgICAgIGFyZSBwcmVkZXRlcm1pbmVkIGJ5IEFwcEtpdCwgb3IgbmFtZXMgdGhh
dCBhcmUgcGFydCBvZiBBUEkgb3IgU1BJLgorCisgICAgICAgIEFwcHMgdGhhdCBzdWJjbGFzcyBX
S1ZpZXcgc2hvdWxkIGJlIGFibGUgdG8gYWRkIG9ic2VydmVycyBvciB1c2UgdGhlIFdLVmlldyBh
cyBhIGRlbGVnYXRlIHdpdGhvdXQKKyAgICAgICAgY29uZmxpY3Rpbmcgd2l0aCBzaW1pbGFyIHVz
ZSBpbiB0aGUgV0tWaWV3IGltcGxlbWVudGF0aW9ucy4gVGh1cywgaXQncyBhIGdvb2QgaWRlYSB0
byB1c2UgYSBzZXBhcmF0ZQorICAgICAgICBvYmplY3QgYXMgdGhlIG9ic2VydmVyIG9yIGRlbGVn
YXRlLiBJIGNob3NlIHRvIHVzZSB0aGUgZXhpc3RpbmcgV0tWaWV3RGF0YSBvYmplY3QgZm9yIHRo
aXMuCisKKyAgICAgICAgVGhlIGNoYWxsZW5naW5nIGFzcGVjdCBvZiB0aGlzIHBhdGNoIHdhcyB0
byByZXNlYXJjaCB3aGljaCBtZXRob2QgbmFtZXMgd2VyZSBkZXRlcm1pbmVkIGJ5IEFwcEtpdC4K
KyAgICAgICAgVGhlcmUncyBub3RoaW5nIGluIHRoZSBXZWJLaXQyIHNvdXJjZSBjb2RlIHRoYXQg
bmVjZXNzYXJpbHkgc3RhdGVzIHRoaXMgZXhwbGljaXRseS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSk6IFVwZGF0ZWQgZm9yIG5ldyBtZXRob2QgbmFt
ZS4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNjcm9sbFZpZXcpOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmlzVmlld0ZvY3VzZWQpOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNvbG9yU3BhY2UpOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnByb2Nlc3NEaWRDcmFzaCk6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6cGFnZUNsb3NlZCk6IERpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlkUmVsYXVuY2hQcm9jZXNzKTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp0b29sVGlwQ2hhbmdlZCk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29yKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppbnRlcnByZXRLZXlFdmVudCk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0RHJhZ0ltYWdlKTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXRQcm9taXNlZERhdGEpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnVwZGF0ZVRleHRJbnB1dFN0YXRl
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpyZXNldFRleHRJbnB1
dFN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0
VG9EZXZpY2VTcGFjZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6
Y29udmVydFRvVXNlclNwYWNlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJ
bXBsOjpkb25lV2l0aEtleUV2ZW50KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRJbXBsOjpzZXRGaW5kSW5kaWNhdG9yKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VD
bGllbnRJbXBsOjphY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuUmVjZWl2ZWQpOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmV4aXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdl
Q2xpZW50SW1wbDo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0No
YW5nZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNldFBsdWdp
bkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xp
ZW50SW1wbDo6ZGlkQ2hhbmdlU2Nyb2xsYmFyc0Zvck1haW5GcmFtZSk6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZSk6IERp
dHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlkRmluaXNoTG9hZGluZ0Rh
dGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdl
Q2xpZW50SW1wbDo6Y3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKTogRGl0dG8uCisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21G
YWN0b3IpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmZpbmRTdHJp
bmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VD
bGllbnRJbXBsOjpjb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKTogRGl0
dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpleGVjdXRlU2F2ZWRDb21tYW5k
QnlTZWxlY3Rvcik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2hv
d0RpY3RhdGlvbkFsdGVybmF0aXZlVUkpOiBEaXR0by4KKworICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvbWFjL1dLVmlldy5tbTogU2ltcGxpZmllZCBpbXBvcnRzIGEgYml0LiBObyBuZWVkIGZvciBj
b25kaXRpb25hbCBpbXBvcnRzIG9mIGJhc2ljIGNsYXNzZXMKKyAgICAgICAgbGlrZSBOU1RleHRB
bHRlcm5hdGl2ZXMuaCBhbmQgTlNBdHRyaWJ1dGVkU3RyaW5nLmguIE5vIG5lZWQgdG8gcHV0IGlu
dGVybmFsIGhlYWRlcnMgaW4gYSBzZXBhcmF0ZSBwYXJhZ3JhcGguCisgICAgICAgIEFkZGVkIGEg
ZmllbGQgdG8gV0tWaWV3RGF0YSBzbyB3ZSBjYW4gZ2V0IGJhY2sgdG8gdGhlIG93bmluZyBXS1Zp
ZXcuIEFkZGVkIGNvZGUgdG8gZm9yd2FyZCB0aGUgbm90aWZpY2F0aW9ucworICAgICAgICBmcm9t
IHRoZSBkYXRhIG9iamVjdCB0byB0aGUgV0tWaWV3IGl0c2VsZi4KKyAgICAgICAgKC1bV0tWaWV3
RGF0YSB2aWV3OnN0cmluZ0ZvclRvb2xUaXA6cG9pbnQ6dXNlckRhdGE6XSk6IEFkZGVkLiBDb250
YWlucyBjb2RlIHRoYXQgdXNlZCB0byBiZSBpbiB0aGUgZGVsZWdhdGUKKyAgICAgICAgbWV0aG9k
IGluIFdLVmlldy4KKyAgICAgICAgKC1bV0tWaWV3IGJlY29tZUZpcnN0UmVzcG9uZGVyXSk6IFVw
ZGF0ZWQgZm9yIG5ldyBtZXRob2QgbmFtZS4KKyAgICAgICAgKC1bV0tWaWV3IHJlc2lnbkZpcnN0
UmVzcG9uZGVyXSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgc2V0RnJhbWVTaXplOl0pOiBE
aXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHdrX3VwZGF0ZVdpbmRvd0FuZFZpZXdGcmFtZXNdKTog
RGl0dG8uCisgICAgICAgICgtW1dLVmlldyByZW5ld0dTdGF0ZV0pOiBEaXR0by4KKyAgICAgICAg
KC1bV0tWaWV3IHdrX3NldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZTpdKTogRGl0dG8uCisg
ICAgICAgICh2YWxpZGF0ZUNvbW1hbmRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAoLVtXS1Zp
ZXcgZGlzcGxheUlmTmVlZGVkXSk6IEZpeGVkIGEgY29tbWVudCB0eXBvLgorICAgICAgICAoLVtX
S1ZpZXcgd2tfc2V0TW91c2VEb3duRXZlbnQ6XSk6IFVwZGF0ZWQgZm9yIG5ldyBtZXRob2QgbmFt
ZS4KKyAgICAgICAgKC1bV0tWaWV3IG1vdXNlRG93bjpdKTogRGl0dG8uCisgICAgICAgICgtW1dL
VmlldyBtb3VzZVVwOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IGFjY2VwdHNGaXJzdE1v
dXNlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHNob3VsZERlbGF5V2luZG93T3JkZXJp
bmdGb3JFdmVudDpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyB3a19oYW5kbGVTdHlsZUtl
eUVxdWl2YWxlbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgcGVyZm9ybUtleUVxdWl2
YWxlbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgd2tfZGlzYWJsZUNvbXBsZXhUZXh0
SW5wdXRJZk5lY2Vzc2FyeV0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHdrX2hhbmRsZVBs
dWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3
IHdrX3RyeUhhbmRsZVBsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duOl0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV0tWaWV3IGtleURvd246XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgd2tf
ZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc10pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3
IHdrX25vdGlmeUlucHV0Q29udGV4dEFib3V0RGlzY2FyZGVkQ29tcG9zaXRpb25dKTogRGl0dG8u
CisgICAgICAgICgtW1dLVmlldyBzZWxlY3RlZFJhbmdlXSk6IERpdHRvLgorICAgICAgICAoLVtX
S1ZpZXcgaGFzTWFya2VkVGV4dF0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHVubWFya1Rl
eHRdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBzZXRNYXJrZWRUZXh0OnNlbGVjdGVkUmFu
Z2U6cmVwbGFjZW1lbnRSYW5nZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBtYXJrZWRS
YW5nZV0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IGF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQ
cm9wb3NlZFJhbmdlOmFjdHVhbFJhbmdlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IGNo
YXJhY3RlckluZGV4Rm9yUG9pbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgZmlyc3RS
ZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6YWN0dWFsUmFuZ2U6XSk6IERpdHRvLgorICAgICAgICAoLVtX
S1ZpZXcgd2tfdXBkYXRlV2luZG93VmlzaWJpbGl0eV0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tW
aWV3IHdrX3VwZGF0ZVdpbmRvd09ic2VydmVyc0ZvcldpbmRvdzpdKTogUmVwbGFjZWQgdGhlIHR3
byBzZXBhcmF0ZSBtZXRob2RzCisgICAgICAgIGFkZFdpbmRvd09ic2VydmVyc0ZvcldpbmRvdyBh
bmQgcmVtb3ZlV2luZG93T2JzZXJ2ZXJzIHdpdGggdGhpcyBzaW5nbGUgbWV0aG9kLCBzaW5jZQor
ICAgICAgICB0aGUgdHdvIGFyZSBvbmx5IHVzZWQgaW4gdGFuZGVtLiBDaGFuZ2VkIGNvZGUgdG8g
dXNlIHRoZSBkYXRhIG9iamVjdCBhcyB0aGUgb2JzZXJ2ZXIsCisgICAgICAgIHdoaWNoIG1hZGUg
aXQgcG9zc2libGUgdG8gc2ltcGxpZnkgcmVtb3ZhbCwgc2luY2Ugd2UgY2FuIHNpbXBseSByZW1v
dmUgdGhlIGRhdGEgb2JqZWN0CisgICAgICAgIGFzIGFuIG9ic2VydmVyIGVudGlyZWx5LgorICAg
ICAgICAoLVtXS1ZpZXcgdmlld1dpbGxNb3ZlVG9XaW5kb3c6XSk6IFVwZGF0ZWQgdG8gdXNlIHdr
X3VwZGF0ZVdpbmRvd09ic2VydmVyc0ZvcldpbmRvdy4KKyAgICAgICAgKC1bV0tWaWV3IHZpZXdE
aWRNb3ZlVG9XaW5kb3ddKTogVXBkYXRlZCBmb3IgbmV3IG1ldGhvZCBuYW1lcy4KKyAgICAgICAg
KC1bV0tWaWV3IHdrX3dpbmRvd1NjcmVlbkRpZENoYW5nZV0pOiBEaXR0by4KKyAgICAgICAgKC1b
V0tWaWV3IHdrX3dpbmRvd0RpZEJlY29tZUtleTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmll
dyB3a193aW5kb3dEaWRDaGFuZ2VTY3JlZW46XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcg
d2tfd2luZG93RGlkUmVzaWduS2V5Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHdrX3dp
bmRvd0RpZE1pbmlhdHVyaXplOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHdrX3dpbmRv
d0RpZERlbWluaWF0dXJpemU6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgd2tfd2luZG93
RGlkTW92ZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyB3a193aW5kb3dEaWRSZXNpemU6
XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgd2tfd2luZG93RGlkT3JkZXJPZmZTY3JlZW46
XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgd2tfd2luZG93RGlkT3JkZXJPblNjcmVlbjpd
KTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyB3a193aW5kb3dEaWRDaGFuZ2VCYWNraW5nUHJv
cGVydGllczpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBkcmF3UmVjdDpdKTogRGl0dG8u
CisgICAgICAgICgtW1dLVmlldyB3a19hY2Nlc3NpYmlsaXR5UmVnaXN0ZXJVSVByb2Nlc3NUb2tl
bnNdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyB3a191cGRhdGVSZW1vdGVBY2Nlc3NpYmls
aXR5UmVnaXN0cmF0aW9uOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHdrX3Bvc3RGYWtl
TW91c2VNb3ZlZEV2ZW50Rm9yRmxhZ3NDaGFuZ2VkRXZlbnQ6XSk6IERpdHRvLgorICAgICAgICAo
LVtXS1ZpZXcgd2tfaW50cmluc2ljRGV2aWNlU2NhbGVGYWN0b3JdKTogRGl0dG8uCisgICAgICAg
ICgtW1dLVmlldyB3a19zZXREcmF3aW5nQXJlYVNpemU6XSk6IERpdHRvLgorICAgICAgICAoLVtX
S1ZpZXcgd2tfc2hvdWxkVXNlVGlsZWREcmF3aW5nQXJlYV0pOiBEaXR0by4KKyAgICAgICAgKC1b
V0tWaWV3IHdrX2NyZWF0ZURyYXdpbmdBcmVhUHJveHldKTogRGl0dG8uCisgICAgICAgICgtW1dL
VmlldyB3a19pc0ZvY3VzZWRdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyB3a19wcm9jZXNz
RGlkQ3Jhc2hdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyB3a19wYWdlQ2xvc2VkXSk6IERp
dHRvLgorICAgICAgICAoLVtXS1ZpZXcgd2tfZGlkUmVsYXVuY2hQcm9jZXNzXSk6IERpdHRvLgor
ICAgICAgICAoLVtXS1ZpZXcgd2tfc2V0Q3Vyc29yOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tW
aWV3IHdrX3NldFVzZXJJbnRlcmZhY2VJdGVtU3RhdGU6ZW5hYmxlZDpzdGF0ZTpdKTogRGl0dG8u
CisgICAgICAgICgtW1dLVmlldyB3a190cnlQb3N0UHJvY2Vzc1BsdWdpbkNvbXBsZXhUZXh0SW5w
dXRLZXlEb3duOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHdrX2RvbmVXaXRoS2V5RXZl
bnQ6ZXZlbnRXYXNIYW5kbGVkOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHdrX2ludGVy
cHJldEtleUV2ZW50OnNhdmluZ0NvbW1hbmRzVG86XSk6IERpdHRvLgorICAgICAgICAoLVtXS1Zp
ZXcgd2tfY29udmVydFRvRGV2aWNlU3BhY2U6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcg
d2tfY29udmVydFRvVXNlclNwYWNlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHdrX2Fk
ZFRyYWNraW5nUmVjdDpvd25lcjp1c2VyRGF0YTphc3N1bWVJbnNpZGU6dXNlVHJhY2tpbmdOdW06
XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgd2tfYWRkVHJhY2tpbmdSZWN0czpvd25lcjp1
c2VyRGF0YUxpc3Q6YXNzdW1lSW5zaWRlTGlzdDp0cmFja2luZ051bXM6Y291bnQ6XSk6IERpdHRv
LgorICAgICAgICAoLVtXS1ZpZXcgd2tfcmVtb3ZlVHJhY2tpbmdSZWN0czpjb3VudDpdKTogRGl0
dG8uCisgICAgICAgICgtW1dLVmlldyB3a19zZW5kVG9vbFRpcE1vdXNlRXhpdGVkXSk6IERpdHRv
LgorICAgICAgICAoLVtXS1ZpZXcgd2tfc2VuZFRvb2xUaXBNb3VzZUVudGVyZWRdKTogRGl0dG8u
CisgICAgICAgICgtW1dLVmlldyB3a190b29sVGlwQ2hhbmdlZEZyb206dG86XSk6IENoYW5nZWQg
dG8gdXNlIHRoZSBkYXRhIG9iamVjdCBhcyB0aGUgdG9vbCB0aXAgb3duZXIgc28KKyAgICAgICAg
dGhlIGRlbGVnYXRlIG1ldGhvZCBjYW4gYmUgdGhlcmUgcmF0aGVyIHRoYW4gb24gV0tWaWV3Lgor
ICAgICAgICAoLVtXS1ZpZXcgd2tfc2V0RmluZEluZGljYXRvcjpmYWRlT3V0OmFuaW1hdGU6XSk6
IFVwZGF0ZWQgZm9yIG5ldyBtZXRob2QgbmFtZXMuCisgICAgICAgICgtW1dLVmlldyB3a19lbnRl
ckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3
IHdrX2V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZV0pOiBEaXR0by4KKyAgICAgICAgKC1b
V0tWaWV3IHdrX3VwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlOl0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV0tWaWV3IHdrX3NldEFjY2Vzc2liaWxpdHlXZWJQcm9jZXNzVG9rZW46XSk6IERp
dHRvLgorICAgICAgICAoLVtXS1ZpZXcgd2tfcGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdl
ZDpwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcjpdKTogRGl0dG8uCisgICAgICAgICgt
W1dLVmlldyB3a19zZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGU6cGx1Z2luQ29tcGxleFRl
eHRJbnB1dElkZW50aWZpZXI6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgd2tfc2V0UGFn
ZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHdr
X2RpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb25XaXRoU3VnZ2VzdGVk
RmlsZW5hbWU6ZGF0YVJlZmVyZW5jZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyB3a19j
dXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3JdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmll
dyB3a19zZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3I6XSk6IERpdHRvLgorICAgICAg
ICAoLVtXS1ZpZXcgd2tfZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb246d2l0aEZpbmRP
cHRpb25zOm1heE1hdGNoQ291bnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgd2tfY291
bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbjp3aXRoRmluZE9wdGlvbnM6bWF4
TWF0Y2hDb3VudDpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyB3a19zZXREcmFnSW1hZ2U6
YXQ6bGlua0RyYWc6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgd2tfc2V0UHJvbWlzZWRE
YXRhOndpdGhGaWxlTmFtZTp3aXRoRXh0ZW5zaW9uOndpdGhUaXRsZTp3aXRoVVJMOndpdGhWaXNp
YmxlVVJMOndpdGhBcmNoaXZlOmZvclBhc3RlYm9hcmQ6XSk6IERpdHRvLgorICAgICAgICAoLVtX
S1ZpZXcgd2tfdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZV0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tW
aWV3IHdrX3VwZGF0ZVRleHRJbnB1dFN0YXRlSW5jbHVkaW5nU2VjdXJlSW5wdXRTdGF0ZTpdKTog
RGl0dG8uCisgICAgICAgICgtW1dLVmlldyB3a19yZXNldFRleHRJbnB1dFN0YXRlXSk6IERpdHRv
LgorICAgICAgICAoLVtXS1ZpZXcgd2tfZGlkQ2hhbmdlU2Nyb2xsYmFyc0Zvck1haW5GcmFtZV0p
OiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHdrX2hhc0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyXSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgd2tfZnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXJdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyB3a19jbG9zZUZ1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVyXSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgd2tfZXhlY3V0ZVNhdmVk
Q29tbWFuZEJ5U2VsZWN0b3I6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgd2tfY2FjaGVX
aW5kb3dCb3R0b21Db3JuZXJSZWN0XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgd2tfc3Bl
bGxDaGVja2VyRG9jdW1lbnRUYWddKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyB3a19oYW5k
bGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dDpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyB3
a19zZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tW
aWV3IHdrX3N1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXNdKTogRGl0dG8uCisgICAgICAgICgtW1dL
VmlldyB3a19yZWdpc3RlckRyYWdnZWRUeXBlc10pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3
IGluaXRXaXRoRnJhbWU6Y29udGV4dFJlZjpwYWdlR3JvdXBSZWY6cmVsYXRlZFRvUGFnZTpdKTog
RGl0dG8uCisgICAgICAgICgtW1dLVmlldyB3YW50c1VwZGF0ZUxheWVyXSk6IERpdHRvLgorICAg
ICAgICAoLVtXS1ZpZXcgZW5hYmxlRnJhbWVTaXplVXBkYXRlc10pOiBEaXR0by4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmg6IENoYW5nZWQgYWxsIGludGVy
bmFsIG1ldGhvZCBuYW1lcyB0byBoYXZlIGEgd2sgcHJlZml4LgorCisgICAgICAgICogVUlQcm9j
ZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwubW06CisgICAgICAgIChXZWJLaXQ6OkNvcnJlY3Rpb25Q
YW5lbDo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZSk6IFVwZGF0ZWQgZm9yIG5ldyBtZXRo
b2QgbmFtZXMuCisgICAgICAgIChXZWJLaXQ6OkNvcnJlY3Rpb25QYW5lbDo6aGFuZGxlQWNjZXB0
ZWRSZXBsYWNlbWVudCk6IERpdHRvLgorCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyLm1tOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyIGVudGVyRnVsbFNjcmVlbjpdKTogVXBkYXRlZCBmb3IgbmV3IG1ldGhvZCBuYW1l
cy4KKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBleGl0RnVsbFNjcmVl
bl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfc3Rh
cnRFbnRlckZ1bGxTY3JlZW5BbmltYXRpb25XaXRoRHVyYXRpb246XSk6IERpdHRvLgorICAgICAg
ICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9zdGFydEV4aXRGdWxsU2NyZWVuQW5p
bWF0aW9uV2l0aER1cmF0aW9uOl0pOiBEaXR0by4KKworICAgICAgICAqIFVJUHJvY2Vzcy9tYWMv
V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViRnVs
bFNjcmVlbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSk6IFVwZGF0ZWQgZm9yIG5ldyBtZXRob2Qg
bmFtZXMuCisgICAgICAgIChXZWJLaXQ6OldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmNsb3Nl
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6Omlz
RnVsbFNjcmVlbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJGdWxsU2NyZWVuTWFuYWdl
clByb3h5OjplbnRlckZ1bGxTY3JlZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViRnVs
bFNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxTY3JlZW4pOiBEaXR0by4KKyAgICAgICAgKFdl
YktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6YmVnYW5FbnRlckZ1bGxTY3JlZW4pOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6YmVnYW5F
eGl0RnVsbFNjcmVlbik6IERpdHRvLgorCiAyMDEyLTEwLTEyICBCcmFkeSBFaWRzb24gIDxiZWlk
c29uQGFwcGxlLmNvbT4KIAogICAgICAgICBTZXR1cCBiYXNpYyBOZXR3b3JrUHJvY2VzcyBtZXNz
YWdpbmcgYW5kIGluaXRpYWxpemF0aW9uLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHJldmlzaW9uIDEzMTI0OCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAgUGFnZUNsaWVudEltcGw6On5QYWdlQ2xpZW50
SW1wbCgpCiAKIFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gUGFnZUNsaWVudEltcGw6OmNy
ZWF0ZURyYXdpbmdBcmVhUHJveHkoKQogewotICAgIHJldHVybiBbbV93a1ZpZXcgX2NyZWF0ZURy
YXdpbmdBcmVhUHJveHldOworICAgIHJldHVybiBbbV93a1ZpZXcgd2tfY3JlYXRlRHJhd2luZ0Fy
ZWFQcm94eV07CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OnNldFZpZXdOZWVkc0Rpc3BsYXko
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIFBh
Z2VDbGllbnRJbXBsOjpzY3JvbGxWaWV3KGNvbnN0IEluCiB7CiAgICAgTlNSZWN0IGNsaXBwZWRT
Y3JvbGxSZWN0ID0gTlNJbnRlcnNlY3Rpb25SZWN0KHNjcm9sbFJlY3QsIE5TT2Zmc2V0UmVjdChz
Y3JvbGxSZWN0LCAtc2Nyb2xsT2Zmc2V0LndpZHRoKCksIC1zY3JvbGxPZmZzZXQuaGVpZ2h0KCkp
KTsKIAotICAgIFttX3drVmlldyBfY2FjaGVXaW5kb3dCb3R0b21Db3JuZXJSZWN0XTsKKyAgICBb
bV93a1ZpZXcgd2tfY2FjaGVXaW5kb3dCb3R0b21Db3JuZXJSZWN0XTsKIAogICAgIFttX3drVmll
dyB0cmFuc2xhdGVSZWN0c05lZWRpbmdEaXNwbGF5SW5SZWN0OmNsaXBwZWRTY3JvbGxSZWN0IGJ5
OnNjcm9sbE9mZnNldF07CiAgICAgW21fd2tWaWV3IHNjcm9sbFJlY3Q6Y2xpcHBlZFNjcm9sbFJl
Y3QgYnk6c2Nyb2xsT2Zmc2V0XTsKQEAgLTE3NCw3ICsxNzQsNyBAQCBib29sIFBhZ2VDbGllbnRJ
bXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUoCiAKIGJvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld0Zv
Y3VzZWQoKQogewotICAgIHJldHVybiBbbV93a1ZpZXcgX2lzRm9jdXNlZF07CisgICAgcmV0dXJu
IFttX3drVmlldyB3a19pc0ZvY3VzZWRdOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjptYWtl
Rmlyc3RSZXNwb25kZXIoKQpAQCAtMjIwLDE3ICsyMjAsMTcgQEAgTGF5ZXJIb3N0aW5nTW9kZSBQ
YWdlQ2xpZW50SW1wbDo6dmlld0xheQogCiBDb2xvclNwYWNlRGF0YSBQYWdlQ2xpZW50SW1wbDo6
Y29sb3JTcGFjZSgpCiB7Ci0gICAgcmV0dXJuIFttX3drVmlldyBfY29sb3JTcGFjZV07CisgICAg
cmV0dXJuIFttX3drVmlldyB3a19jb2xvclNwYWNlXTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1w
bDo6cHJvY2Vzc0RpZENyYXNoKCkKIHsKLSAgICBbbV93a1ZpZXcgX3Byb2Nlc3NEaWRDcmFzaF07
CisgICAgW21fd2tWaWV3IHdrX3Byb2Nlc3NEaWRDcmFzaF07CiB9CiAKIHZvaWQgUGFnZUNsaWVu
dEltcGw6OnBhZ2VDbG9zZWQoKQogewotICAgIFttX3drVmlldyBfcGFnZUNsb3NlZF07CisgICAg
W21fd2tWaWV3IHdrX3BhZ2VDbG9zZWRdOwogI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVT
KQogICAgIG1fYWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLT5jbGVhcigpOwogI2VuZGlmCkBA
IC0yMzgsMTggKzIzOCwxOCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpwYWdlQ2xvc2VkKCkKIAog
dm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVsYXVuY2hQcm9jZXNzKCkKIHsKLSAgICBbbV93a1Zp
ZXcgX2RpZFJlbGF1bmNoUHJvY2Vzc107CisgICAgW21fd2tWaWV3IHdrX2RpZFJlbGF1bmNoUHJv
Y2Vzc107CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OnRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0
cmluZyYgb2xkVG9vbFRpcCwgY29uc3QgU3RyaW5nJiBuZXdUb29sVGlwKQogewotICAgIFttX3dr
VmlldyBfdG9vbFRpcENoYW5nZWRGcm9tOm5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcob2xkVG9v
bFRpcCkgdG86bnNTdHJpbmdGcm9tV2ViQ29yZVN0cmluZyhuZXdUb29sVGlwKV07CisgICAgW21f
d2tWaWV3IHdrX3Rvb2xUaXBDaGFuZ2VkRnJvbTpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKG9s
ZFRvb2xUaXApIHRvOm5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcobmV3VG9vbFRpcCldOwogfQog
CiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBj
dXJzb3IpCiB7CiAgICAgaWYgKCFbTlNBcHAgX2N1cnNvclJlY3RDdXJzb3JdKQotICAgICAgICBb
bV93a1ZpZXcgX3NldEN1cnNvcjpjdXJzb3IucGxhdGZvcm1DdXJzb3IoKV07CisgICAgICAgIFtt
X3drVmlldyB3a19zZXRDdXJzb3I6Y3Vyc29yLnBsYXRmb3JtQ3Vyc29yKCldOwogfQogCiB2b2lk
IFBhZ2VDbGllbnRJbXBsOjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCBoaWRk
ZW5VbnRpbE1vdXNlTW92ZXMpCkBAIC0yOTEsNyArMjkxLDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1w
bDo6ZXhlY3V0ZVVuZG9SZWRvKFdlYgogCiBib29sIFBhZ2VDbGllbnRJbXBsOjppbnRlcnByZXRL
ZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCwgVmVjdG9yPFdlYkNv
cmU6OktleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRzKQogewotICAgIHJldHVybiBbbV93a1ZpZXcg
X2ludGVycHJldEtleUV2ZW50OmV2ZW50Lm5hdGl2ZUV2ZW50KCkgc2F2aW5nQ29tbWFuZHNUbzpj
b21tYW5kc107CisgICAgcmV0dXJuIFttX3drVmlldyB3a19pbnRlcnByZXRLZXlFdmVudDpldmVu
dC5uYXRpdmVFdmVudCgpIHNhdmluZ0NvbW1hbmRzVG86Y29tbWFuZHNdOwogfQogCiB2b2lkIFBh
Z2VDbGllbnRJbXBsOjpzZXREcmFnSW1hZ2UoY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9u
LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlLCBib29sIGlzTGlua0RyYWcp
CkBAIC0yOTksMzQgKzI5OSwzNCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXREcmFnSW1hZ2Uo
Y29uc3QgCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGRyYWdDR0ltYWdlID0gZHJhZ0ltYWdl
LT5tYWtlQ0dJbWFnZSgpOwogICAgIFJldGFpblB0cjxOU0ltYWdlPiBkcmFnTlNJbWFnZShBZG9w
dE5TLCBbW05TSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpkcmFnQ0dJbWFnZS5nZXQoKSBz
aXplOmRyYWdJbWFnZS0+c2l6ZSgpXSk7CiAKLSAgICBbbV93a1ZpZXcgX3NldERyYWdJbWFnZTpk
cmFnTlNJbWFnZS5nZXQoKSBhdDpjbGllbnRQb3NpdGlvbiBsaW5rRHJhZzppc0xpbmtEcmFnXTsK
KyAgICBbbV93a1ZpZXcgd2tfc2V0RHJhZ0ltYWdlOmRyYWdOU0ltYWdlLmdldCgpIGF0OmNsaWVu
dFBvc2l0aW9uIGxpbmtEcmFnOmlzTGlua0RyYWddOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBs
OjpzZXRQcm9taXNlZERhdGEoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IGltYWdlQnVmZmVyLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25z
dCBTdHJpbmcmIGV4dGVuc2lvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVybCwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGFy
Y2hpdmVCdWZmZXIpCiB7CiAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IEJpdG1hcEltYWdlOjpj
cmVhdGUoKTsKICAgICBpbWFnZS0+c2V0RGF0YShpbWFnZUJ1ZmZlci5nZXQoKSwgdHJ1ZSk7Ci0g
ICAgW21fd2tWaWV3IF9zZXRQcm9taXNlZERhdGE6aW1hZ2UuZ2V0KCkgd2l0aEZpbGVOYW1lOmZp
bGVuYW1lIHdpdGhFeHRlbnNpb246ZXh0ZW5zaW9uIHdpdGhUaXRsZTp0aXRsZSB3aXRoVVJMOnVy
bCB3aXRoVmlzaWJsZVVSTDp2aXNpYmxlVXJsIHdpdGhBcmNoaXZlOmFyY2hpdmVCdWZmZXIuZ2V0
KCkgZm9yUGFzdGVib2FyZDpwYXN0ZWJvYXJkTmFtZV07CisgICAgW21fd2tWaWV3IHdrX3NldFBy
b21pc2VkRGF0YTppbWFnZS5nZXQoKSB3aXRoRmlsZU5hbWU6ZmlsZW5hbWUgd2l0aEV4dGVuc2lv
bjpleHRlbnNpb24gd2l0aFRpdGxlOnRpdGxlIHdpdGhVUkw6dXJsIHdpdGhWaXNpYmxlVVJMOnZp
c2libGVVcmwgd2l0aEFyY2hpdmU6YXJjaGl2ZUJ1ZmZlci5nZXQoKSBmb3JQYXN0ZWJvYXJkOnBh
c3RlYm9hcmROYW1lXTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6dXBkYXRlVGV4dElucHV0
U3RhdGUoYm9vbCB1cGRhdGVTZWN1cmVJbnB1dFN0YXRlKQogewotICAgIFttX3drVmlldyBfdXBk
YXRlVGV4dElucHV0U3RhdGVJbmNsdWRpbmdTZWN1cmVJbnB1dFN0YXRlOnVwZGF0ZVNlY3VyZUlu
cHV0U3RhdGVdOworICAgIFttX3drVmlldyB3a191cGRhdGVUZXh0SW5wdXRTdGF0ZUluY2x1ZGlu
Z1NlY3VyZUlucHV0U3RhdGU6dXBkYXRlU2VjdXJlSW5wdXRTdGF0ZV07CiB9CiAKIHZvaWQgUGFn
ZUNsaWVudEltcGw6OnJlc2V0VGV4dElucHV0U3RhdGUoKQogewotICAgIFttX3drVmlldyBfcmVz
ZXRUZXh0SW5wdXRTdGF0ZV07CisgICAgW21fd2tWaWV3IHdrX3Jlc2V0VGV4dElucHV0U3RhdGVd
OwogfQogCiBGbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gW21fd2tWaWV3IF9jb252ZXJ0VG9E
ZXZpY2VTcGFjZTpyZWN0XTsKKyAgICByZXR1cm4gW21fd2tWaWV3IHdrX2NvbnZlcnRUb0Rldmlj
ZVNwYWNlOnJlY3RdOwogfQogCiBGbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb1Vz
ZXJTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIFttX3drVmlldyBf
Y29udmVydFRvVXNlclNwYWNlOnJlY3RdOworICAgIHJldHVybiBbbV93a1ZpZXcgd2tfY29udmVy
dFRvVXNlclNwYWNlOnJlY3RdOwogfQogICAgCiBJbnRQb2ludCBQYWdlQ2xpZW50SW1wbDo6c2Ny
ZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50KQpAQCAtMzUyLDcgKzM1Miw3IEBAIHZv
aWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoR2VzdHVyZUV2ZW4KIAogdm9pZCBQYWdlQ2xpZW50
SW1wbDo6ZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVu
dCwgYm9vbCBldmVudFdhc0hhbmRsZWQpCiB7Ci0gICAgW21fd2tWaWV3IF9kb25lV2l0aEtleUV2
ZW50OmV2ZW50Lm5hdGl2ZUV2ZW50KCkgZXZlbnRXYXNIYW5kbGVkOmV2ZW50V2FzSGFuZGxlZF07
CisgICAgW21fd2tWaWV3IHdrX2RvbmVXaXRoS2V5RXZlbnQ6ZXZlbnQubmF0aXZlRXZlbnQoKSBl
dmVudFdhc0hhbmRsZWQ6ZXZlbnRXYXNIYW5kbGVkXTsKIH0KIAogUGFzc1JlZlB0cjxXZWJQb3B1
cE1lbnVQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQ
cm94eSogcGFnZSkKQEAgLTM3NSw0MCArMzc1LDQwIEBAIFBhc3NSZWZQdHI8V2ViQ29sb3JDaG9v
c2VyUHJveHk+IFBhZ2VDbGkKIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0RmluZEluZGljYXRv
cihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+IGZpbmRJbmRpY2F0b3IsIGJvb2wgZmFkZU91dCwg
Ym9vbCBhbmltYXRlKQogewotICAgIFttX3drVmlldyBfc2V0RmluZEluZGljYXRvcjpmaW5kSW5k
aWNhdG9yIGZhZGVPdXQ6ZmFkZU91dCBhbmltYXRlOmFuaW1hdGVdOworICAgIFttX3drVmlldyB3
a19zZXRGaW5kSW5kaWNhdG9yOmZpbmRJbmRpY2F0b3IgZmFkZU91dDpmYWRlT3V0IGFuaW1hdGU6
YW5pbWF0ZV07CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmFjY2Vzc2liaWxpdHlXZWJQcm9j
ZXNzVG9rZW5SZWNlaXZlZChjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQogewot
ICAgIE5TRGF0YSogcmVtb3RlVG9rZW4gPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5kYXRh
KCkgbGVuZ3RoOmRhdGEuc2l6ZSgpXTsKLSAgICBbbV93a1ZpZXcgX3NldEFjY2Vzc2liaWxpdHlX
ZWJQcm9jZXNzVG9rZW46cmVtb3RlVG9rZW5dOworICAgIE5TRGF0YSAqcmVtb3RlVG9rZW4gPSBb
TlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5kYXRhKCkgbGVuZ3RoOmRhdGEuc2l6ZSgpXTsKKyAg
ICBbbV93a1ZpZXcgd2tfc2V0QWNjZXNzaWJpbGl0eVdlYlByb2Nlc3NUb2tlbjpyZW1vdGVUb2tl
bl07CiB9CiAgICAgCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogdm9pZCBQYWdl
Q2xpZW50SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRy
ZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KQogewotICAgIFttX3drVmlldyBfZW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZTpsYXllclRyZWVDb250ZXh0XTsKKyAgICBbbV93a1ZpZXcg
d2tfZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZTpsYXllclRyZWVDb250ZXh0XTsKIH0K
IAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkK
IHsKLSAgICBbbV93a1ZpZXcgX2V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZV07CisgICAg
W21fd2tWaWV3IHdrX2V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZV07CiB9CiAKIHZvaWQg
UGFnZUNsaWVudEltcGw6OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExh
eWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCiB7Ci0gICAgW21fd2tWaWV3IF91cGRh
dGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZTpsYXllclRyZWVDb250ZXh0XTsKKyAgICBbbV93
a1ZpZXcgd2tfdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGU6bGF5ZXJUcmVlQ29udGV4
dF07CiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiB2b2lkIFBh
Z2VDbGllbnRJbXBsOjpwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKHVpbnQ2NF90IHBs
dWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBib29sIHBsdWdpbkhhc0ZvY3VzQW5kV2lu
ZG93SGFzRm9jdXMpCiB7Ci0gICAgW21fd2tWaWV3IF9wbHVnaW5Gb2N1c09yV2luZG93Rm9jdXND
aGFuZ2VkOnBsdWdpbkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMgcGx1Z2luQ29tcGxleFRleHRJ
bnB1dElkZW50aWZpZXI6cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXJdOworICAgIFtt
X3drVmlldyB3a19wbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkOnBsdWdpbkhhc0ZvY3Vz
QW5kV2luZG93SGFzRm9jdXMgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXI6cGx1Z2lu
Q29tcGxleFRleHRJbnB1dElkZW50aWZpZXJdOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpz
ZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJ
bnB1dElkZW50aWZpZXIsIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSBwbHVnaW5Db21wbGV4
VGV4dElucHV0U3RhdGUpCiB7Ci0gICAgW21fd2tWaWV3IF9zZXRQbHVnaW5Db21wbGV4VGV4dElu
cHV0U3RhdGU6cGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlIHBsdWdpbkNvbXBsZXhUZXh0SW5w
dXRJZGVudGlmaWVyOnBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyXTsKKyAgICBbbV93
a1ZpZXcgd2tfc2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlOnBsdWdpbkNvbXBsZXhUZXh0
SW5wdXRTdGF0ZSBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcjpwbHVnaW5Db21wbGV4
VGV4dElucHV0SWRlbnRpZmllcl07CiB9CiAKIENHQ29udGV4dFJlZiBQYWdlQ2xpZW50SW1wbDo6
Y29udGFpbmluZ1dpbmRvd0dyYXBoaWNzQ29udGV4dCgpCkBAIC00MjQsMzcgKzQyNCwzNyBAQCBD
R0NvbnRleHRSZWYgUGFnZUNsaWVudEltcGw6OmNvbnRhaW5pbmdXCiAKIHZvaWQgUGFnZUNsaWVu
dEltcGw6OmRpZENoYW5nZVNjcm9sbGJhcnNGb3JNYWluRnJhbWUoKSBjb25zdAogewotICAgIFtt
X3drVmlldyBfZGlkQ2hhbmdlU2Nyb2xsYmFyc0Zvck1haW5GcmFtZV07CisgICAgW21fd2tWaWV3
IHdrX2RpZENoYW5nZVNjcm9sbGJhcnNGb3JNYWluRnJhbWVdOwogfQogCiB2b2lkIFBhZ2VDbGll
bnRJbXBsOjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNlQ3VzdG9tUmVwcmVzZW50
YXRpb24pCiB7Ci0gICAgW21fd2tWaWV3IF9zZXRQYWdlSGFzQ3VzdG9tUmVwcmVzZW50YXRpb246
dXNlQ3VzdG9tUmVwcmVzZW50YXRpb25dOworICAgIFttX3drVmlldyB3a19zZXRQYWdlSGFzQ3Vz
dG9tUmVwcmVzZW50YXRpb246dXNlQ3VzdG9tUmVwcmVzZW50YXRpb25dOwogfQogCiB2b2lkIFBh
Z2VDbGllbnRJbXBsOjpkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9u
KGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZl
cmVuY2UmIGRhdGFSZWZlcmVuY2UpCiB7Ci0gICAgW21fd2tWaWV3IF9kaWRGaW5pc2hMb2FkaW5n
RGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOnN1Z2dlc3Rl
ZEZpbGVuYW1lIGRhdGFSZWZlcmVuY2U6ZGF0YVJlZmVyZW5jZV07CisgICAgW21fd2tWaWV3IHdr
X2RpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb25XaXRoU3VnZ2VzdGVk
RmlsZW5hbWU6c3VnZ2VzdGVkRmlsZW5hbWUgZGF0YVJlZmVyZW5jZTpkYXRhUmVmZXJlbmNlXTsK
IH0KIAogZG91YmxlIFBhZ2VDbGllbnRJbXBsOjpjdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0
b3IoKQogewotICAgIHJldHVybiBbbV93a1ZpZXcgX2N1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZh
Y3Rvcl07CisgICAgcmV0dXJuIFttX3drVmlldyB3a19jdXN0b21SZXByZXNlbnRhdGlvblpvb21G
YWN0b3JdOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRDdXN0b21SZXByZXNlbnRhdGlv
blpvb21GYWN0b3IoZG91YmxlIHpvb21GYWN0b3IpCiB7Ci0gICAgW21fd2tWaWV3IF9zZXRDdXN0
b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3I6em9vbUZhY3Rvcl07CisgICAgW21fd2tWaWV3IHdr
X3NldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcjp6b29tRmFjdG9yXTsKIH0KIAogdm9p
ZCBQYWdlQ2xpZW50SW1wbDo6ZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291
bnQpCiB7Ci0gICAgW21fd2tWaWV3IF9maW5kU3RyaW5nSW5DdXN0b21SZXByZXNlbnRhdGlvbjpz
dHJpbmcgd2l0aEZpbmRPcHRpb25zOm9wdGlvbnMgbWF4TWF0Y2hDb3VudDptYXhNYXRjaENvdW50
XTsKKyAgICBbbV93a1ZpZXcgd2tfZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb246c3Ry
aW5nIHdpdGhGaW5kT3B0aW9uczpvcHRpb25zIG1heE1hdGNoQ291bnQ6bWF4TWF0Y2hDb3VudF07
CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVw
cmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBzdHJpbmcsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVu
c2lnbmVkIG1heE1hdGNoQ291bnQpCiB7Ci0gICAgW21fd2tWaWV3IF9jb3VudFN0cmluZ01hdGNo
ZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uOnN0cmluZyB3aXRoRmluZE9wdGlvbnM6b3B0aW9ucyBt
YXhNYXRjaENvdW50Om1heE1hdGNoQ291bnRdOworICAgIFttX3drVmlldyB3a19jb3VudFN0cmlu
Z01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uOnN0cmluZyB3aXRoRmluZE9wdGlvbnM6b3B0
aW9ucyBtYXhNYXRjaENvdW50Om1heE1hdGNoQ291bnRdOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpmbGFzaEJhY2tpbmdTdG9yZVVwZGF0ZXMoY29uc3QgVmVjdG9yPEludFJlY3Q+JikKQEAg
LTU1NSwxMCArNTU1LDExIEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnJlY29tbWVuZGVkU2Nyb2xs
YmEKIAogYm9vbCBQYWdlQ2xpZW50SW1wbDo6ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3Io
Y29uc3QgU3RyaW5nJiBzZWxlY3RvclN0cmluZykKIHsKLSAgICByZXR1cm4gW21fd2tWaWV3IF9l
eGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3RvcjpOU1NlbGVjdG9yRnJvbVN0cmluZyhzZWxlY3Rv
clN0cmluZyldOworICAgIHJldHVybiBbbV93a1ZpZXcgd2tfZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5
U2VsZWN0b3I6TlNTZWxlY3RvckZyb21TdHJpbmcoc2VsZWN0b3JTdHJpbmcpXTsKIH0KIAogI2lm
IFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorCiB1aW50NjRfdCBQYWdlQ2xpZW50SW1wbDo6
YWRkRGljdGF0aW9uQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2
ZXM+JiBhbHRlcm5hdGl2ZXMpCiB7CiAgICAgcmV0dXJuIG1fYWx0ZXJuYXRpdmVUZXh0VUlDb250
cm9sbGVyLT5hZGRBbHRlcm5hdGl2ZXMoYWx0ZXJuYXRpdmVzKTsKQEAgLTU3NCw3ICs1NzUsNyBA
QCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93RGljdGF0aW9uQWx0ZXJuCiAgICAgaWYgKCFpc1Zp
ZXdWaXNpYmxlKCkgfHwgIWlzVmlld0luV2luZG93KCkpCiAgICAgICAgIHJldHVybjsKICAgICBt
X2FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci0+c2hvd0FsdGVybmF0aXZlcyhtX3drVmlldywg
Ym91bmRpbmdCb3hPZkRpY3RhdGVkVGV4dCwgZGljdGF0aW9uQ29udGV4dCwgXihOU1N0cmluZyog
YWNjZXB0ZWRBbHRlcm5hdGl2ZSl7Ci0gICAgICAgIFttX3drVmlldyBoYW5kbGVBY2NlcHRlZEFs
dGVybmF0aXZlVGV4dDphY2NlcHRlZEFsdGVybmF0aXZlXTsKKyAgICAgICAgW21fd2tWaWV3IHdr
X2hhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmVUZXh0OmFjY2VwdGVkQWx0ZXJuYXRpdmVdOwogICAg
IH0pOwogfQogCkBAIC01ODcsNiArNTg4LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlz
c0RpY3RhdGlvbkFsdAogewogICAgIG1fYWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLT5kaXNt
aXNzQWx0ZXJuYXRpdmVzKCk7CiB9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlz
aW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEwLCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDYgQEAKICNpbXBvcnQgImNv
bmZpZy5oIgogI2ltcG9ydCAiV0tWaWV3LmgiCiAKLSNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFU
SVZFUykKLSNpbXBvcnQgPEFwcEtpdC9OU1RleHRBbHRlcm5hdGl2ZXMuaD4KLSNpbXBvcnQgPEFw
cEtpdC9OU0F0dHJpYnV0ZWRTdHJpbmcuaD4KLSNlbmRpZgotCiAjaW1wb3J0ICJBdHRyaWJ1dGVk
U3RyaW5nLmgiCiAjaW1wb3J0ICJDb2xvclNwYWNlRGF0YS5oIgogI2ltcG9ydCAiRGF0YVJlZmVy
ZW5jZS5oIgpAQCAtNTEsOCArNDYsMTEgQEAKICNpbXBvcnQgIlRleHRDaGVja2VyU3RhdGUuaCIK
ICNpbXBvcnQgIlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkuaCIKICNpbXBvcnQg
IldLQVBJQ2FzdC5oIgorI2ltcG9ydCAiV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJu
YWwuaCIKKyNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oIgogI2ltcG9y
dCAiV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oIgogI2ltcG9ydCAiV0tQcmludGluZ1Zp
ZXcuaCIKKyNpbXBvcnQgIldLUHJvY2Vzc0dyb3VwSW50ZXJuYWwuaCIKICNpbXBvcnQgIldLU3Ry
aW5nQ0YuaCIKICNpbXBvcnQgIldLVGV4dElucHV0V2luZG93Q29udHJvbGxlci5oIgogI2ltcG9y
dCAiV0tWaWV3SW50ZXJuYWwuaCIKQEAgLTY0LDExICs2MiwxNCBAQAogI2ltcG9ydCAiV2ViUGFn
ZVByb3h5LmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIldlYlN5c3Rl
bUludGVyZmFjZS5oIgorI2ltcG9ydCA8QXBwS2l0L05TQXR0cmlidXRlZFN0cmluZy5oPgorI2lt
cG9ydCA8QXBwS2l0L05TVGV4dEFsdGVybmF0aXZlcy5oPgogI2ltcG9ydCA8UXVhcnR6Q29yZS9R
dWFydHpDb3JlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0RyYWdDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RyYWdEYXRhLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0RyYWdTZXNzaW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZpbGVTeXN0ZW0u
aD4KICNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ltYWdl
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ludFJlY3QuaD4KQEAgLTgxLDE4ICs4MiwxMSBAQAogI2lt
cG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dEFsdGVy
bmF0aXZlV2l0aFJhbmdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVOU1N0cmluZ0V4dHJh
cy5oPgotI2ltcG9ydCA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0
ZW1JbnRlcmZhY2UuaD4KICNpbXBvcnQgPHN5cy9zdGF0Lmg+CiAjaW1wb3J0IDx3dGYvUmVmUHRy
Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKLS8qIEFQSSBpbnRlcm5hbHMuICovCi0j
aW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRlcm5hbC5oIgotI2ltcG9ydCAi
V0tCcm93c2luZ0NvbnRleHRHcm91cEludGVybmFsLmgiCi0jaW1wb3J0ICJXS1Byb2Nlc3NHcm91
cEludGVybmFsLmgiCi0KLQogQGludGVyZmFjZSBOU0FwcGxpY2F0aW9uIChXS05TQXBwbGljYXRp
b25EZXRhaWxzKQogLSAodm9pZClzcGVha1N0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7CiAtICh2
b2lkKV9zZXRDdXJyZW50RXZlbnQ6KE5TRXZlbnQgKilldmVudDsKQEAgLTEzNCwxNyArMTI4LDE5
IEBAIHN0cnVjdCBXS1ZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXIKIH07CiAKIEBpbnRl
cmZhY2UgV0tWaWV3ICgpCi0tICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmVnaXN0ZXJVSVByb2Nlc3NU
b2tlbnM7Ci0tICh2b2lkKV9kaXNhYmxlQ29tcGxleFRleHRJbnB1dElmTmVjZXNzYXJ5OwotLSAo
ZmxvYXQpX2ludHJpbnNpY0RldmljZVNjYWxlRmFjdG9yOwotLSAodm9pZClfcG9zdEZha2VNb3Vz
ZU1vdmVkRXZlbnRGb3JGbGFnc0NoYW5nZWRFdmVudDooTlNFdmVudCAqKWZsYWdzQ2hhbmdlZEV2
ZW50OwotLSAodm9pZClfc2V0RHJhd2luZ0FyZWFTaXplOihOU1NpemUpc2l6ZTsKLS0gKHZvaWQp
X3NldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZTooUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0
YXRlKXBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZTsKLS0gKEJPT0wpX3Nob3VsZFVzZVRpbGVk
RHJhd2luZ0FyZWE7CistICh2b2lkKXdrX2FjY2Vzc2liaWxpdHlSZWdpc3RlclVJUHJvY2Vzc1Rv
a2VuczsKKy0gKHZvaWQpd2tfZGlzYWJsZUNvbXBsZXhUZXh0SW5wdXRJZk5lY2Vzc2FyeTsKKy0g
KGZsb2F0KXdrX2ludHJpbnNpY0RldmljZVNjYWxlRmFjdG9yOworLSAodm9pZCl3a19wb3N0RmFr
ZU1vdXNlTW92ZWRFdmVudEZvckZsYWdzQ2hhbmdlZEV2ZW50OihOU0V2ZW50ICopZmxhZ3NDaGFu
Z2VkRXZlbnQ7CistICh2b2lkKXdrX3NldERyYXdpbmdBcmVhU2l6ZTooTlNTaXplKXNpemU7Cist
ICh2b2lkKXdrX3NldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZTooUGx1Z2luQ29tcGxleFRl
eHRJbnB1dFN0YXRlKXBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZTsKKy0gKEJPT0wpd2tfc2hv
dWxkVXNlVGlsZWREcmF3aW5nQXJlYTsKIEBlbmQKIAogQGludGVyZmFjZSBXS1ZpZXdEYXRhIDog
TlNPYmplY3QgewogQHB1YmxpYworICAgIFdLVmlldyAqX3ZpZXc7CisKICAgICBPd25QdHI8UGFn
ZUNsaWVudEltcGw+IF9wYWdlQ2xpZW50OwogICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IF9wYWdl
OwogICAgIApAQCAtMjE5LDggKzIxNSwzMiBAQCBAaW50ZXJmYWNlIFdLVmlld0RhdGEgOiBOU09i
amVjdCB7CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS1ZpZXdEYXRhCi1AZW5kCiAKKyNkZWZp
bmUgTk9USUZJQ0FUSU9OX0ZPUldBUkRFUihuYW1lKSBcCisgICAgLSAodm9pZCluYW1lOihOU05v
dGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbiBcCisgICAgeyBcCisgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCAoKikoaWQsIFNFTCwgTlNOb3RpZmljYXRpb24gKik+KG9iamNfbXNnU2VuZCko
X3ZpZXcsIF9jbWQsIG5vdGlmaWNhdGlvbik7IFwKKyAgICB9CisKK05PVElGSUNBVElPTl9GT1JX
QVJERVIod2tfd2luZG93RGlkQmVjb21lS2V5KQorTk9USUZJQ0FUSU9OX0ZPUldBUkRFUih3a193
aW5kb3dEaWRDaGFuZ2VCYWNraW5nUHJvcGVydGllcykKK05PVElGSUNBVElPTl9GT1JXQVJERVIo
d2tfd2luZG93RGlkQ2hhbmdlU2NyZWVuKQorTk9USUZJQ0FUSU9OX0ZPUldBUkRFUih3a193aW5k
b3dEaWREZW1pbmlhdHVyaXplKQorTk9USUZJQ0FUSU9OX0ZPUldBUkRFUih3a193aW5kb3dEaWRN
aW5pYXR1cml6ZSkKK05PVElGSUNBVElPTl9GT1JXQVJERVIod2tfd2luZG93RGlkTW92ZSkKK05P
VElGSUNBVElPTl9GT1JXQVJERVIod2tfd2luZG93RGlkT3JkZXJPZmZTY3JlZW4pCitOT1RJRklD
QVRJT05fRk9SV0FSREVSKHdrX3dpbmRvd0RpZE9yZGVyT25TY3JlZW4pCitOT1RJRklDQVRJT05f
Rk9SV0FSREVSKHdrX3dpbmRvd0RpZFJlc2lnbktleSkKK05PVElGSUNBVElPTl9GT1JXQVJERVIo
d2tfd2luZG93RGlkUmVzaXplKQorCisjdW5kZWYgTk9USUZJQ0FUSU9OX0ZPUldBUkRFUgorCist
IChOU1N0cmluZyAqKXZpZXc6KE5TVmlldyAqKXZpZXcgc3RyaW5nRm9yVG9vbFRpcDooTlNUb29s
VGlwVGFnKXRhZyBwb2ludDooTlNQb2ludClwb2ludCB1c2VyRGF0YToodm9pZCAqKWRhdGEKK3sK
KyAgICByZXR1cm4gbnNTdHJpbmdGcm9tV2ViQ29yZVN0cmluZyhfcGFnZS0+dG9vbFRpcCgpKTsK
K30KKworQGVuZAogCiBAaW50ZXJmYWNlIFdLUmVzcG9uZGVyQ2hhaW5TaW5rIDogTlNSZXNwb25k
ZXIgewogICAgIE5TUmVzcG9uZGVyICpfbGFzdFJlc3BvbmRlckluQ2hhaW47CkBAIC0zMDcsNyAr
MzI3LDcgQEAgLSAoQk9PTCliZWNvbWVGaXJzdFJlc3BvbmRlcgogCiAgICAgX2RhdGEtPl9pbkJl
Y29tZUZpcnN0UmVzcG9uZGVyID0gdHJ1ZTsKICAgICAKLSAgICBbc2VsZiBfdXBkYXRlU2VjdXJl
SW5wdXRTdGF0ZV07CisgICAgW3NlbGYgd2tfdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZV07CiAgICAg
X2RhdGEtPl9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNGb2N1
c2VkKTsKIAogICAgIF9kYXRhLT5faW5CZWNvbWVGaXJzdFJlc3BvbmRlciA9IGZhbHNlOwpAQCAt
MzI4LDcgKzM0OCw3IEBAIC0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKIAogICAgIGlmIChf
ZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaGFzQ29tcG9zaXRpb24gJiYgIV9kYXRhLT5fcGFn
ZS0+ZWRpdG9yU3RhdGUoKS5zaG91bGRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSkK
ICAgICAgICAgX2RhdGEtPl9wYWdlLT5jYW5jZWxDb21wb3NpdGlvbigpOwotICAgIFtzZWxmIF9y
ZXNldFRleHRJbnB1dFN0YXRlXTsKKyAgICBbc2VsZiB3a19yZXNldFRleHRJbnB1dFN0YXRlXTsK
ICAgICAKICAgICBpZiAoIV9kYXRhLT5fcGFnZS0+bWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb24o
KSkKICAgICAgICAgX2RhdGEtPl9wYWdlLT5jbGVhclNlbGVjdGlvbigpOwpAQCAtMzYzLDEwICsz
ODMsMTAgQEAgLSAodm9pZClzZXRGcmFtZVNpemU6KE5TU2l6ZSlzaXplCiAgICAgW3N1cGVyIHNl
dEZyYW1lU2l6ZTpzaXplXTsKICAgICAKICAgICBpZiAoIVtzZWxmIGZyYW1lU2l6ZVVwZGF0ZXNE
aXNhYmxlZF0pCi0gICAgICAgIFtzZWxmIF9zZXREcmF3aW5nQXJlYVNpemU6c2l6ZV07CisgICAg
ICAgIFtzZWxmIHdrX3NldERyYXdpbmdBcmVhU2l6ZTpzaXplXTsKIH0KIAotLSAodm9pZClfdXBk
YXRlV2luZG93QW5kVmlld0ZyYW1lcworLSAodm9pZCl3a191cGRhdGVXaW5kb3dBbmRWaWV3RnJh
bWVzCiB7CiAgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107CiAgICAgQVNTRVJU
KHdpbmRvdyk7CkBAIC0zODUsMTIgKzQwNSwxMiBAQCAtICh2b2lkKXJlbmV3R1N0YXRlCiAKICAg
ICAvLyBVcGRhdGUgdGhlIHZpZXcgZnJhbWUuCiAgICAgaWYgKFtzZWxmIHdpbmRvd10pCi0gICAg
ICAgIFtzZWxmIF91cGRhdGVXaW5kb3dBbmRWaWV3RnJhbWVzXTsKKyAgICAgICAgW3NlbGYgd2tf
dXBkYXRlV2luZG93QW5kVmlld0ZyYW1lc107CiAKICAgICBbc3VwZXIgcmVuZXdHU3RhdGVdOwog
fQogCi0tICh2b2lkKV9zZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGU6KFBsdWdpbkNvbXBs
ZXhUZXh0SW5wdXRTdGF0ZSlwbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUKKy0gKHZvaWQpd2tf
c2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlOihQbHVnaW5Db21wbGV4VGV4dElucHV0U3Rh
dGUpcGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlCiB7CiAgICAgX2RhdGEtPl9wbHVnaW5Db21w
bGV4VGV4dElucHV0U3RhdGUgPSBwbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGU7CiAgICAgCkBA
IC02NTMsNyArNjczLDcgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGVDb21tYW5kQ2FsbGJhY2soV0tT
dAogICAgIFdLVmlldyogd2tWaWV3ID0gc3RhdGljX2Nhc3Q8V0tWaWV3Kj4oY29udGV4dCk7CiAg
ICAgQVNTRVJUKHdrVmlldyk7CiAgICAgCi0gICAgW3drVmlldyBfc2V0VXNlckludGVyZmFjZUl0
ZW1TdGF0ZTpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKHRvSW1wbChjb21tYW5kTmFtZSktPnN0
cmluZygpKSBlbmFibGVkOmlzRW5hYmxlZCBzdGF0ZTpzdGF0ZV07CisgICAgW3drVmlldyB3a19z
ZXRVc2VySW50ZXJmYWNlSXRlbVN0YXRlOm5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcodG9JbXBs
KGNvbW1hbmROYW1lKS0+c3RyaW5nKCkpIGVuYWJsZWQ6aXNFbmFibGVkIHN0YXRlOnN0YXRlXTsK
IH0KIAogLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOihpZCA8TlNWYWxpZGF0ZWRV
c2VySW50ZXJmYWNlSXRlbT4paXRlbQpAQCAtOTY0LDcgKzk4NCw3IEBAIC0gKHZvaWQpZGlzcGxh
eUlmTmVlZGVkCiB7CiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDcw
CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZW1vdmUgdGhpcyBjb2RlIHdoZW4gPHJkYXI6Ly9w
cm9ibGVtLzkzNjIwODU+IGlzIHJlc29sdmVkLiBJbiB0aGUgbWVhbnRpbWUsCi0gICAgLy8gaXQg
aXMgbmVjZXNzYXJ5IHRvIGRpc2FibGUgc2NyZW4gdXBkYXRlcyBzbyB3ZSBnZXQgYSBjaGFuY2Ug
dG8gcmVkcmF3IHRoZSBjb3JuZXJzIGJlZm9yZSB0aGlzIAorICAgIC8vIGl0IGlzIG5lY2Vzc2Fy
eSB0byBkaXNhYmxlIHNjcmVlbiB1cGRhdGVzIHNvIHdlIGdldCBhIGNoYW5jZSB0byByZWRyYXcg
dGhlIGNvcm5lcnMgYmVmb3JlIHRoaXMKICAgICAvLyBkaXNwbGF5IGlzIHZpc2libGUuCiAgICAg
TlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107CiAgICAgQk9PTCBzaG91bGRNYXNrV2lu
ZG93ID0gd2luZG93ICYmICFOU0lzRW1wdHlSZWN0KF9kYXRhLT5fd2luZG93Qm90dG9tQ29ybmVy
SW50ZXJzZWN0aW9uUmVjdCk7CkBAIC05OTIsNyArMTAxMiw3IEBAIC0gKEJPT0wpX3dhbnRzS2V5
RG93bkZvckV2ZW50OihOU0V2ZW50ICoKICAgICByZXR1cm4gWUVTOwogfQogCi0tICh2b2lkKV9z
ZXRNb3VzZURvd25FdmVudDooTlNFdmVudCAqKWV2ZW50CistICh2b2lkKXdrX3NldE1vdXNlRG93
bkV2ZW50OihOU0V2ZW50ICopZXZlbnQKIHsKICAgICBBU1NFUlQoIWV2ZW50IHx8IFtldmVudCB0
eXBlXSA9PSBOU0xlZnRNb3VzZURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5TUmlnaHRNb3VzZURv
d24gfHwgW2V2ZW50IHR5cGVdID09IE5TT3RoZXJNb3VzZURvd24pOwogICAgIApAQCAtMTAxNiwx
MCArMTAzNiwxMCBAQCAtICh2b2lkKV9zZXRNb3VzZURvd25FdmVudDooTlNFdmVudCAqKWV2CiAK
IE5BVElWRV9NT1VTRV9FVkVOVF9IQU5ETEVSKG1vdXNlRW50ZXJlZCkKIE5BVElWRV9NT1VTRV9F
VkVOVF9IQU5ETEVSKG1vdXNlRXhpdGVkKQotTkFUSVZFX01PVVNFX0VWRU5UX0hBTkRMRVIobW91
c2VNb3ZlZEludGVybmFsKQotTkFUSVZFX01PVVNFX0VWRU5UX0hBTkRMRVIobW91c2VEb3duSW50
ZXJuYWwpCi1OQVRJVkVfTU9VU0VfRVZFTlRfSEFORExFUihtb3VzZVVwSW50ZXJuYWwpCi1OQVRJ
VkVfTU9VU0VfRVZFTlRfSEFORExFUihtb3VzZURyYWdnZWRJbnRlcm5hbCkKK05BVElWRV9NT1VT
RV9FVkVOVF9IQU5ETEVSKHdrX21vdXNlTW92ZWRJbnRlcm5hbCkKK05BVElWRV9NT1VTRV9FVkVO
VF9IQU5ETEVSKHdrX21vdXNlRG93bkludGVybmFsKQorTkFUSVZFX01PVVNFX0VWRU5UX0hBTkRM
RVIod2tfbW91c2VVcEludGVybmFsKQorTkFUSVZFX01PVVNFX0VWRU5UX0hBTkRMRVIod2tfbW91
c2VEcmFnZ2VkSW50ZXJuYWwpCiBOQVRJVkVfTU9VU0VfRVZFTlRfSEFORExFUihvdGhlck1vdXNl
RG93bikKIE5BVElWRV9NT1VTRV9FVkVOVF9IQU5ETEVSKG90aGVyTW91c2VEcmFnZ2VkKQogTkFU
SVZFX01PVVNFX0VWRU5UX0hBTkRMRVIob3RoZXJNb3VzZU1vdmVkKQpAQCAtMTA0NywyNyArMTA2
NywyNyBAQCAtICh2b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudAogICAgIGlmIChzZWxm
ID09IFtbc2VsZiB3aW5kb3ddIGZpcnN0UmVzcG9uZGVyXSAmJiAhTlNQb2ludEluUmVjdChbc2Vs
ZiBjb252ZXJ0UG9pbnQ6W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3Om5pbF0sIFtz
ZWxmIHZpc2libGVSZWN0XSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtzZWxmIG1vdXNlTW92
ZWRJbnRlcm5hbDpldmVudF07CisgICAgW3NlbGYgd2tfbW91c2VNb3ZlZEludGVybmFsOmV2ZW50
XTsKIH0KIAogLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKilldmVudAogewotICAgIFtzZWxm
IF9zZXRNb3VzZURvd25FdmVudDpldmVudF07CisgICAgW3NlbGYgd2tfc2V0TW91c2VEb3duRXZl
bnQ6ZXZlbnRdOwogICAgIF9kYXRhLT5faWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHMgPSBOTzsK
LSAgICBbc2VsZiBtb3VzZURvd25JbnRlcm5hbDpldmVudF07CisgICAgW3NlbGYgd2tfbW91c2VE
b3duSW50ZXJuYWw6ZXZlbnRdOwogfQogCiAtICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVu
dAogewotICAgIFtzZWxmIF9zZXRNb3VzZURvd25FdmVudDpuaWxdOwotICAgIFtzZWxmIG1vdXNl
VXBJbnRlcm5hbDpldmVudF07CisgICAgW3NlbGYgd2tfc2V0TW91c2VEb3duRXZlbnQ6bmlsXTsK
KyAgICBbc2VsZiB3a19tb3VzZVVwSW50ZXJuYWw6ZXZlbnRdOwogfQogCiAtICh2b2lkKW1vdXNl
RHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50CiB7CiAgICAgaWYgKF9kYXRhLT5faWdub3JpbmdNb3Vz
ZURyYWdnZWRFdmVudHMpCiAgICAgICAgIHJldHVybjsKLSAgICBbc2VsZiBtb3VzZURyYWdnZWRJ
bnRlcm5hbDpldmVudF07CisgICAgW3NlbGYgd2tfbW91c2VEcmFnZ2VkSW50ZXJuYWw6ZXZlbnRd
OwogfQogCiAtIChCT09MKWFjY2VwdHNGaXJzdE1vdXNlOihOU0V2ZW50ICopZXZlbnQKQEAgLTEw
ODAsOSArMTEwMCw5IEBAIC0gKEJPT0wpYWNjZXB0c0ZpcnN0TW91c2U6KE5TRXZlbnQgKilldmUK
ICAgICBpZiAoIVtzZWxmIGhpdFRlc3Q6W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddXSkKICAgICAg
ICAgcmV0dXJuIE5POwogICAgIAotICAgIFtzZWxmIF9zZXRNb3VzZURvd25FdmVudDpldmVudF07
CisgICAgW3NlbGYgd2tfc2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRdOwogICAgIGJvb2wgcmVzdWx0
ID0gX2RhdGEtPl9wYWdlLT5hY2NlcHRzRmlyc3RNb3VzZShbZXZlbnQgZXZlbnROdW1iZXJdLCBX
ZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoZXZlbnQsIHNlbGYpKTsKLSAgICBb
c2VsZiBfc2V0TW91c2VEb3duRXZlbnQ6bmlsXTsKKyAgICBbc2VsZiB3a19zZXRNb3VzZURvd25F
dmVudDpuaWxdOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTExMDEsOSArMTEyMSw5IEBA
IC0gKEJPT0wpc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW4KICAgICBpZiAoIVtzZWxm
IGhpdFRlc3Q6W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddXSkKICAgICAgICAgcmV0dXJuIE5POwog
ICAgIAotICAgIFtzZWxmIF9zZXRNb3VzZURvd25FdmVudDpldmVudF07CisgICAgW3NlbGYgd2tf
c2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRdOwogICAgIGJvb2wgcmVzdWx0ID0gX2RhdGEtPl9wYWdl
LT5zaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVh
dGVXZWJNb3VzZUV2ZW50KGV2ZW50LCBzZWxmKSk7Ci0gICAgW3NlbGYgX3NldE1vdXNlRG93bkV2
ZW50Om5pbF07CisgICAgW3NlbGYgd2tfc2V0TW91c2VEb3duRXZlbnQ6bmlsXTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCkBAIC0xMTQwLDYgKzExNjAsNyBAQCAtICh2b2lkKWJlZ2luR2VzdHVy
ZVdpdGhFdmVudDooTlNFdmVudCAqCiAgICAgICAgIH1dOwogICAgIH0KIH0KKwogI2VuZGlmCiAK
IC0gKHZvaWQpZG9Db21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCkBAIC0xMjI2LDcgKzEy
NDcsNyBAQCAtICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZyByZXBsYWNlbWVuCiAgICAgICAg
IHBhcmFtZXRlcnMtPmV2ZW50SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0cyB8PSBldmVudEhh
bmRsZWQ7CiB9CiAKLS0gKEJPT0wpX2hhbmRsZVN0eWxlS2V5RXF1aXZhbGVudDooTlNFdmVudCAq
KWV2ZW50CistIChCT09MKXdrX2hhbmRsZVN0eWxlS2V5RXF1aXZhbGVudDooTlNFdmVudCAqKWV2
ZW50CiB7CiAgICAgaWYgKCFfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRp
dGFibGUpCiAgICAgICAgIHJldHVybiBOTzsKQEAgLTEyNjIsNyArMTI4Myw3IEBAIC0gKEJPT0wp
cGVyZm9ybUtleUVxdWl2YWxlbnQ6KE5TRXZlbnQgKikKICAgICBCT09MIGV2ZW50V2FzU2VudFRv
V2ViQ29yZSA9IChfZGF0YS0+X2tleURvd25FdmVudEJlaW5nUmVzZW50ID09IGV2ZW50KTsKIAog
ICAgIGlmICghZXZlbnRXYXNTZW50VG9XZWJDb3JlKQotICAgICAgICBbc2VsZiBfZGlzYWJsZUNv
bXBsZXhUZXh0SW5wdXRJZk5lY2Vzc2FyeV07CisgICAgICAgIFtzZWxmIHdrX2Rpc2FibGVDb21w
bGV4VGV4dElucHV0SWZOZWNlc3NhcnldOwogCiAgICAgLy8gUGFzcyBrZXkgY29tYm9zIHRocm91
Z2ggV2ViQ29yZSBpZiB0aGVyZSBpcyBhIGtleSBiaW5kaW5nIGF2YWlsYWJsZSBmb3IKICAgICAv
LyB0aGlzIGV2ZW50LiBUaGlzIGxldHMgd2ViIHBhZ2VzIGhhdmUgYSBjcmFjayBhdCBpbnRlcmNl
cHRpbmcga2V5LW1vZGlmaWVkIGtleXByZXNzZXMuCkBAIC0xMjczLDcgKzEyOTQsNyBAQCAtIChC
T09MKXBlcmZvcm1LZXlFcXVpdmFsZW50OihOU0V2ZW50ICopCiAgICAgICAgIHJldHVybiBZRVM7
CiAgICAgfQogICAgIAotICAgIHJldHVybiBbc2VsZiBfaGFuZGxlU3R5bGVLZXlFcXVpdmFsZW50
OmV2ZW50XSB8fCBbc3VwZXIgcGVyZm9ybUtleUVxdWl2YWxlbnQ6ZXZlbnRdOworICAgIHJldHVy
biBbc2VsZiB3a19oYW5kbGVTdHlsZUtleUVxdWl2YWxlbnQ6ZXZlbnRdIHx8IFtzdXBlciBwZXJm
b3JtS2V5RXF1aXZhbGVudDpldmVudF07CiB9CiAKIC0gKHZvaWQpa2V5VXA6KE5TRXZlbnQgKil0
aGVFdmVudApAQCAtMTI4Miw3ICsxMzAzLDcgQEAgLSAodm9pZClrZXlVcDooTlNFdmVudCAqKXRo
ZUV2ZW50CiAgICAgX2RhdGEtPl9wYWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktl
eWJvYXJkRXZlbnQodGhlRXZlbnQsIHNlbGYpKTsKIH0KIAotLSAodm9pZClfZGlzYWJsZUNvbXBs
ZXhUZXh0SW5wdXRJZk5lY2Vzc2FyeQorLSAodm9pZCl3a19kaXNhYmxlQ29tcGxleFRleHRJbnB1
dElmTmVjZXNzYXJ5CiB7CiAgICAgaWYgKCFfZGF0YS0+X3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRJ
ZGVudGlmaWVyKQogICAgICAgICByZXR1cm47CkBAIC0xMjkyLDEwICsxMzEzLDEwIEBAIC0gKHZv
aWQpX2Rpc2FibGVDb21wbGV4VGV4dElucHV0SWZOZWNlc3MKIAogICAgIC8vIENoZWNrIGlmIHRo
ZSB0ZXh0IGlucHV0IHdpbmRvdyBoYXMgYmVlbiBkaXNtaXNzZWQuCiAgICAgaWYgKCFbW1dLVGV4
dElucHV0V2luZG93Q29udHJvbGxlciBzaGFyZWRUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyXSBo
YXNNYXJrZWRUZXh0XSkKLSAgICAgICAgW3NlbGYgX3NldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRT
dGF0ZTpQbHVnaW5Db21wbGV4VGV4dElucHV0RGlzYWJsZWRdOworICAgICAgICBbc2VsZiB3a19z
ZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGU6UGx1Z2luQ29tcGxleFRleHRJbnB1dERpc2Fi
bGVkXTsKIH0KIAotLSAoQk9PTClfaGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd246
KE5TRXZlbnQgKilldmVudAorLSAoQk9PTCl3a19oYW5kbGVQbHVnaW5Db21wbGV4VGV4dElucHV0
S2V5RG93bjooTlNFdmVudCAqKWV2ZW50CiB7CiAgICAgQVNTRVJUKF9kYXRhLT5fcGx1Z2luQ29t
cGxleFRleHRJbnB1dElkZW50aWZpZXIpOwogICAgIEFTU0VSVChfZGF0YS0+X3BsdWdpbkNvbXBs
ZXhUZXh0SW5wdXRTdGF0ZSAhPSBQbHVnaW5Db21wbGV4VGV4dElucHV0RGlzYWJsZWQpOwpAQCAt
MTMxNSwxOCArMTMzNiwxOCBAQCAtIChCT09MKV9oYW5kbGVQbHVnaW5Db21wbGV4VGV4dElucHV0
S2V5CiAgICAgcmV0dXJuIGRpZEhhbmRsZUV2ZW50OwogfQogCi0tIChCT09MKV90cnlIYW5kbGVQ
bHVnaW5Db21wbGV4VGV4dElucHV0S2V5RG93bjooTlNFdmVudCAqKWV2ZW50CistIChCT09MKXdr
X3RyeUhhbmRsZVBsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duOihOU0V2ZW50ICopZXZlbnQK
IHsKICAgICBpZiAoIV9kYXRhLT5fcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIgfHwg
X2RhdGEtPl9wbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgPT0gUGx1Z2luQ29tcGxleFRleHRJ
bnB1dERpc2FibGVkKQogICAgICAgICByZXR1cm4gTk87CiAKICAgICAvLyBDaGVjayBpZiB0aGUg
dGV4dCBpbnB1dCB3aW5kb3cgaGFzIGJlZW4gZGlzbWlzc2VkIGFuZCBsZXQgdGhlIHBsdWctaW4g
cHJvY2VzcyBrbm93LgogICAgIC8vIFRoaXMgaXMgb25seSB2YWxpZCB3aXRoIHRoZSB1cGRhdGVk
IENvY29hIHRleHQgaW5wdXQgc3BlYy4KLSAgICBbc2VsZiBfZGlzYWJsZUNvbXBsZXhUZXh0SW5w
dXRJZk5lY2Vzc2FyeV07CisgICAgW3NlbGYgd2tfZGlzYWJsZUNvbXBsZXhUZXh0SW5wdXRJZk5l
Y2Vzc2FyeV07CiAKICAgICAvLyBUcnkgZmVlZGluZyB0aGUga2V5Ym9hcmQgZXZlbnQgZGlyZWN0
bHkgdG8gdGhlIHBsdWctaW4uCiAgICAgaWYgKF9kYXRhLT5fcGx1Z2luQ29tcGxleFRleHRJbnB1
dFN0YXRlID09IFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRFbmFibGVkTGVnYWN5KQotICAgICAgICBy
ZXR1cm4gW3NlbGYgX2hhbmRsZVBsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duOmV2ZW50XTsK
KyAgICAgICAgcmV0dXJuIFtzZWxmIHdrX2hhbmRsZVBsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlE
b3duOmV2ZW50XTsKIAogICAgIHJldHVybiBOTzsKIH0KQEAgLTEzNDAsNyArMTM2MSw3IEBAIC0g
KHZvaWQpa2V5RG93bjooTlNFdmVudCAqKXRoZUV2ZW50CiAgICAgLy8gdGhlIGN1cnJlbnQgZXZl
bnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3Ig
QXBwS2l0IGNvZGUuCiAgICAgW1t0aGVFdmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKIAotICAg
IGlmIChbc2VsZiBfdHJ5SGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd246dGhlRXZl
bnRdKSB7CisgICAgaWYgKFtzZWxmIHdrX3RyeUhhbmRsZVBsdWdpbkNvbXBsZXhUZXh0SW5wdXRL
ZXlEb3duOnRoZUV2ZW50XSkgewogICAgICAgICBMT0coVGV4dElucHV0LCAiLi4uaGFuZGxlZCBi
eSBwbHVnLWluIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMzc0LDcgKzEzOTUsNyBA
QCAtICh2b2lkKWZsYWdzQ2hhbmdlZDooTlNFdmVudCAqKXRoZUV2ZW50CiAgICAgX2RhdGEtPl9w
YWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQodGhlRXZlbnQs
IHNlbGYpKTsKIH0KIAotLSAodm9pZClfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kcworLSAo
dm9pZCl3a19leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzCiB7CiAgICAgV0tWaWV3SW50ZXJw
cmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9kYXRhLT5faW50ZXJwcmV0S2V5
RXZlbnRzUGFyYW1ldGVyczsKICAgICBpZiAoIXBhcmFtZXRlcnMgfHwgcGFyYW1ldGVycy0+Y29t
bWFuZHMtPmlzRW1wdHkoKSkKQEAgLTEzOTUsNyArMTQxNiw3IEBAIC0gKHZvaWQpX2V4ZWN1dGVT
YXZlZEtleXByZXNzQ29tbWFuZHMKICAgICBMT0coVGV4dElucHV0LCAiLi4uZG9uZSBleGVjdXRp
bmcgc2F2ZWQga2V5cHJlc3MgY29tbWFuZHMuIik7CiB9CiAKLS0gKHZvaWQpX25vdGlmeUlucHV0
Q29udGV4dEFib3V0RGlzY2FyZGVkQ29tcG9zaXRpb24KKy0gKHZvaWQpd2tfbm90aWZ5SW5wdXRD
b250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbgogewogICAgIC8vIDxyZGFyOi8vcHJvYmxl
bS85MzU5MDU1PjogLWRpc2NhcmRNYXJrZWRUZXh0IGNhbiBvbmx5IGJlIGNhbGxlZCBmb3IgYWN0
aXZlIGNvbnRleHRzLgogICAgIC8vIEZJWE1FOiBXZSBmYWlsIHRvIGV2ZXIgbm90aWZ5IHRoZSBp
bnB1dCBjb250ZXh0IGlmIHNvbWV0aGluZyAoZS5nLiBhIG5hdmlnYXRpb24pIGhhcHBlbnMgd2hp
bGUgdGhlIHdpbmRvdyBpcyBub3Qga2V5LgpAQCAtMTQyMyw3ICsxNDQ0LDcgQEAgLSAoTlNUZXh0
SW5wdXRDb250ZXh0ICopaW5wdXRDb250ZXh0CiAKIC0gKE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZQog
ewotICAgIFtzZWxmIF9leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzXTsKKyAgICBbc2VsZiB3
a19leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzXTsKIAogICAgIHVpbnQ2NF90IHNlbGVjdGlv
blN0YXJ0OwogICAgIHVpbnQ2NF90IHNlbGVjdGlvbkxlbmd0aDsKQEAgLTE0NDcsNyArMTQ2OCw3
IEBAIC0gKEJPT0wpaGFzTWFya2VkVGV4dAogICAgICAgICByZXN1bHQgPSBfZGF0YS0+X3BhZ2Ut
PmVkaXRvclN0YXRlKCkuaGFzQ29tcG9zaXRpb247CiAgICAgICAgIGlmIChyZXN1bHQpIHsKICAg
ICAgICAgICAgIC8vIEEgc2F2ZWQgY29tbWFuZCBjYW4gY29uZmlybSBhIGNvbXBvc2l0aW9uLCBi
dXQgaXQgY2Fubm90IHN0YXJ0IGEgbmV3IG9uZS4KLSAgICAgICAgICAgIFtzZWxmIF9leGVjdXRl
U2F2ZWRLZXlwcmVzc0NvbW1hbmRzXTsKKyAgICAgICAgICAgIFtzZWxmIHdrX2V4ZWN1dGVTYXZl
ZEtleXByZXNzQ29tbWFuZHNdOwogICAgICAgICAgICAgcmVzdWx0ID0gX2RhdGEtPl9wYWdlLT5l
ZGl0b3JTdGF0ZSgpLmhhc0NvbXBvc2l0aW9uOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAg
LTE0NjMsNyArMTQ4NCw3IEBAIC0gKEJPT0wpaGFzTWFya2VkVGV4dAogCiAtICh2b2lkKXVubWFy
a1RleHQKIHsKLSAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CisgICAg
W3NlbGYgd2tfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CiAKICAgICBMT0coVGV4dElu
cHV0LCAidW5tYXJrVGV4dCIpOwogCkBAIC0xNTIyLDcgKzE1NDMsNyBAQCBzdGF0aWMgdm9pZCBl
eHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0CiAKIC0gKHZvaWQpc2V0TWFya2VkVGV4dDooaWQp
c3RyaW5nIHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpbmV3U2VsUmFuZ2UgcmVwbGFjZW1lbnRSYW5n
ZTooTlNSYW5nZSlyZXBsYWNlbWVudFJhbmdlCiB7Ci0gICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtl
eXByZXNzQ29tbWFuZHNdOworICAgIFtzZWxmIHdrX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFu
ZHNdOwogCiAgICAgQk9PTCBpc0F0dHJpYnV0ZWRTdHJpbmcgPSBbc3RyaW5nIGlzS2luZE9mQ2xh
c3M6W05TQXR0cmlidXRlZFN0cmluZyBjbGFzc11dOwogICAgIEFTU0VSVChpc0F0dHJpYnV0ZWRT
dHJpbmcgfHwgW3N0cmluZyBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKQEAgLTE1
NTEsNyArMTU3Miw3IEBAIC0gKHZvaWQpc2V0TWFya2VkVGV4dDooaWQpc3RyaW5nIHNlbGVjdGUK
ICAgICAgICAgLy8gSW4gcGFzc3dvcmQgZmllbGRzLCB3ZSBvbmx5IGFsbG93IEFTQ0lJIGRlYWQg
a2V5cywgYW5kIGRvbid0IGFsbG93IGlubGluZSBpbnB1dCwgbWF0Y2hpbmcgTlNTZWN1cmVUZXh0
SW5wdXRGaWVsZC4KICAgICAgICAgLy8gQWxsb3dpbmcgQVNDSUkgZGVhZCBrZXlzIGlzIG5lY2Vz
c2FyeSB0byBlbmFibGUgZnVsbCBSb21hbiBpbnB1dCB3aGVuIHVzaW5nIGEgVmlldG5hbWVzZSBr
ZXlib2FyZC4KICAgICAgICAgQVNTRVJUKCFfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaGFz
Q29tcG9zaXRpb24pOwotICAgICAgICBbc2VsZiBfbm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNj
YXJkZWRDb21wb3NpdGlvbl07CisgICAgICAgIFtzZWxmIHdrX25vdGlmeUlucHV0Q29udGV4dEFi
b3V0RGlzY2FyZGVkQ29tcG9zaXRpb25dOwogICAgICAgICBpZiAoW3RleHQgbGVuZ3RoXSA9PSAx
ICYmIFtbdGV4dCBkZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddIGNoYXJhY3Rl
ckF0SW5kZXg6MF0gPCAweDgwKSB7CiAgICAgICAgICAgICBfZGF0YS0+X3BhZ2UtPmluc2VydFRl
eHQodGV4dCwgcmVwbGFjZW1lbnRSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShyZXBsYWNlbWVu
dFJhbmdlKSk7CiAgICAgICAgIH0gZWxzZQpAQCAtMTU2NCw3ICsxNTg1LDcgQEAgLSAodm9pZClz
ZXRNYXJrZWRUZXh0OihpZClzdHJpbmcgc2VsZWN0ZQogCiAtIChOU1JhbmdlKW1hcmtlZFJhbmdl
CiB7Ci0gICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOworICAgIFtzZWxm
IHdrX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOwogCiAgICAgdWludDY0X3QgbG9jYXRp
b247CiAgICAgdWludDY0X3QgbGVuZ3RoOwpAQCAtMTU3Niw3ICsxNTk3LDcgQEAgLSAoTlNSYW5n
ZSltYXJrZWRSYW5nZQogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3Vic3Ry
aW5nRm9yUHJvcG9zZWRSYW5nZTooTlNSYW5nZSluc1JhbmdlIGFjdHVhbFJhbmdlOihOU1Jhbmdl
UG9pbnRlcilhY3R1YWxSYW5nZQogewotICAgIFtzZWxmIF9leGVjdXRlU2F2ZWRLZXlwcmVzc0Nv
bW1hbmRzXTsKKyAgICBbc2VsZiB3a19leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzXTsKIAog
ICAgIGlmICghX2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlKSB7
CiAgICAgICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOigl
dSwgJXUpIC0+IG5pbCIsIG5zUmFuZ2UubG9jYXRpb24sIG5zUmFuZ2UubGVuZ3RoKTsKQEAgLTE2
MDAsNyArMTYyMSw3IEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdWJzdHIK
IAogLSAoTlNVSW50ZWdlciljaGFyYWN0ZXJJbmRleEZvclBvaW50OihOU1BvaW50KXRoZVBvaW50
CiB7Ci0gICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOworICAgIFtzZWxm
IHdrX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOwogCiAgICAgTlNXaW5kb3cgKndpbmRv
dyA9IFtzZWxmIHdpbmRvd107CiAgICAgCkBAIC0xNjE1LDcgKzE2MzYsNyBAQCAtIChOU1VJbnRl
Z2VyKWNoYXJhY3RlckluZGV4Rm9yUG9pbnQ6KE5TCiAKIC0gKE5TUmVjdClmaXJzdFJlY3RGb3JD
aGFyYWN0ZXJSYW5nZTooTlNSYW5nZSl0aGVSYW5nZSBhY3R1YWxSYW5nZTooTlNSYW5nZVBvaW50
ZXIpYWN0dWFsUmFuZ2UKIHsgCi0gICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFu
ZHNdOworICAgIFtzZWxmIHdrX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOwogCiAgICAg
Ly8gSnVzdCB0byBtYXRjaCBOU1RleHRWaWV3J3MgYmVoYXZpb3IuIFJlZ3Jlc3Npb24gdGVzdHMg
Y2Fubm90IGRldGVjdCB0aGlzOwogICAgIC8vIHRvIHJlcHJvZHVjZSwgdXNlIGEgdGVzdCBhcHBs
aWNhdGlvbiBmcm9tIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2ODIK
QEAgLTE2NDAsNiArMTY2MSw3IEBAIC0gKE5TUmVjdClmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5n
ZTooTlMKIH0KIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCisKIC0gKHZvaWQpZHJhZ2dlZElt
YWdlOihOU0ltYWdlICopYW5JbWFnZSBlbmRlZEF0OihOU1BvaW50KWFQb2ludCBvcGVyYXRpb246
KE5TRHJhZ09wZXJhdGlvbilvcGVyYXRpb24KIHsKICAgICBOU1BvaW50IHdpbmRvd0ltYWdlTG9j
ID0gW1tzZWxmIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTphUG9pbnRdOwpAQCAtMTc4MSw2
ICsxODAzLDcgQEAgLSAoTlNWaWV3ICopX2hpdFRlc3Q6KE5TUG9pbnQgKilwb2ludCBkcgogICAg
ICAgICByZXR1cm4gc2VsZjsKICAgICByZXR1cm4gbmlsOwogfQorCiAjZW5kaWYgLy8gRU5BQkxF
KERSQUdfU1VQUE9SVCkKIAogLSAoQk9PTClfd2luZG93UmVzaXplTW91c2VMb2NhdGlvbklzSW5W
aXNpYmxlU2Nyb2xsZXJUaHVtYjooTlNQb2ludClsb2MKQEAgLTE3OTAsMTMgKzE4MTMsMTQgQEAg
LSAoQk9PTClfd2luZG93UmVzaXplTW91c2VMb2NhdGlvbklzSW5WaQogICAgIHJldHVybiBOU01v
dXNlSW5SZWN0KGxvY2FsUG9pbnQsIHZpc2libGVUaHVtYlJlY3QsIFtzZWxmIGlzRmxpcHBlZF0p
OwogfQogCi0tICh2b2lkKV91cGRhdGVXaW5kb3dWaXNpYmlsaXR5CistICh2b2lkKXdrX3VwZGF0
ZVdpbmRvd1Zpc2liaWxpdHkKIHsKICAgICBfZGF0YS0+X3BhZ2UtPnVwZGF0ZVdpbmRvd0lzVmlz
aWJsZShbW3NlbGYgd2luZG93XSBpc1Zpc2libGVdKTsKIH0KIAogCiAjaWYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA9PSAxMDYwCisKIC0gKEJPT0wpX293bnNXaW5kb3dHcm93Qm94
CiB7CiAgICAgTlNXaW5kb3cqIHdpbmRvdyA9IFtzZWxmIHdpbmRvd107CkBAIC0xODQ1LDU0ICsx
ODY5LDM4IEBAIC0gKEJPT0wpX3VwZGF0ZUdyb3dCb3hGb3JXaW5kb3dGcmFtZUNoYW4KIAogICAg
IHJldHVybiBvd25zR3Jvd0JveDsKIH0KKwogI2VuZGlmCiAKIC8vIEZJWE1FOiBVc2UgQXBwS2l0
IGNvbnN0YW50cyBmb3IgdGhlc2Ugd2hlbiB0aGV5IGFyZSBhdmFpbGFibGUuCitzdGF0aWMgTlNT
dHJpbmcgKiBjb25zdCB3aW5kb3dEaWRCZWNvbWVWaXNpYmxlTm90aWZpY2F0aW9uID0gQCJfTlNX
aW5kb3dEaWRCZWNvbWVWaXNpYmxlIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IHdpbmRvd0Rp
ZE9yZGVyT2ZmU2NyZWVuTm90aWZpY2F0aW9uID0gQCJOU1dpbmRvd0RpZE9yZGVyT2ZmU2NyZWVu
Tm90aWZpY2F0aW9uIjsKIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IHdpbmRvd0RpZENoYW5nZUJh
Y2tpbmdQcm9wZXJ0aWVzTm90aWZpY2F0aW9uID0gQCJOU1dpbmRvd0RpZENoYW5nZUJhY2tpbmdQ
cm9wZXJ0aWVzTm90aWZpY2F0aW9uIjsKIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IGJhY2tpbmdQ
cm9wZXJ0eU9sZFNjYWxlRmFjdG9yS2V5ID0gQCJOU0JhY2tpbmdQcm9wZXJ0eU9sZFNjYWxlRmFj
dG9yS2V5IjsKIAotLSAodm9pZClhZGRXaW5kb3dPYnNlcnZlcnNGb3JXaW5kb3c6KE5TV2luZG93
ICopd2luZG93CistICh2b2lkKXdrX3VwZGF0ZVdpbmRvd09ic2VydmVyc0ZvcldpbmRvdzooTlNX
aW5kb3cgKil3aW5kb3cKIHsKLSAgICBpZiAod2luZG93KSB7Ci0gICAgICAgIFtbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2Vs
ZWN0b3IoX3dpbmRvd0RpZEJlY29tZUtleTopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6TlNXaW5kb3dEaWRCZWNvbWVLZXlOb3RpZmlj
YXRpb24gb2JqZWN0Om5pbF07Ci0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVs
dENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3dpbmRvd0RpZFJl
c2lnbktleTopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWU6TlNXaW5kb3dEaWRSZXNpZ25LZXlOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07
Ci0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2
ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3dpbmRvd0RpZE1pbmlhdHVyaXplOikgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6TlNX
aW5kb3dEaWRNaW5pYXR1cml6ZU5vdGlmaWNhdGlvbiBvYmplY3Q6d2luZG93XTsKLSAgICAgICAg
W1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNl
bGVjdG9yOkBzZWxlY3Rvcihfd2luZG93RGlkRGVtaW5pYXR1cml6ZTopCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6TlNXaW5kb3dEaWRE
ZW1pbmlhdHVyaXplTm90aWZpY2F0aW9uIG9iamVjdDp3aW5kb3ddOwotICAgICAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6
QHNlbGVjdG9yKF93aW5kb3dEaWRNb3ZlOikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpOU1dpbmRvd0RpZE1vdmVOb3RpZmljYXRpb24g
b2JqZWN0OndpbmRvd107Ci0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3dpbmRvd0RpZFJlc2l6
ZTopIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuYW1lOk5TV2luZG93RGlkUmVzaXplTm90aWZpY2F0aW9uIG9iamVjdDp3aW5kb3ddOwotICAg
ICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNl
bGYgc2VsZWN0b3I6QHNlbGVjdG9yKF93aW5kb3dEaWRPcmRlck9mZlNjcmVlbjopIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOkAiTlNX
aW5kb3dEaWRPcmRlck9mZlNjcmVlbk5vdGlmaWNhdGlvbiIgb2JqZWN0OndpbmRvd107Ci0gICAg
ICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2Vs
ZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3dpbmRvd0RpZE9yZGVyT25TY3JlZW46KSAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpAIl9OU1dp
bmRvd0RpZEJlY29tZVZpc2libGUiIG9iamVjdDp3aW5kb3ddOwotICAgICAgICBbW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNl
bGVjdG9yKF93aW5kb3dEaWRDaGFuZ2VCYWNraW5nUHJvcGVydGllczopCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6d2luZG93RGlkQ2hh
bmdlQmFja2luZ1Byb3BlcnRpZXNOb3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107Ci0gICAgICAg
IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IoX3dpbmRvd0RpZENoYW5nZVNjcmVlbjopCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6TlNXaW5kb3dEaWRD
aGFuZ2VTY3JlZW5Ob3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107Ci0gICAgfQotfQorICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6X2RhdGFd
OwogCi0tICh2b2lkKXJlbW92ZVdpbmRvd09ic2VydmVycwotewotICAgIE5TV2luZG93ICp3aW5k
b3cgPSBbc2VsZiB3aW5kb3ddOwogICAgIGlmICghd2luZG93KQogICAgICAgICByZXR1cm47CiAK
LSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVy
OnNlbGYgbmFtZTpOU1dpbmRvd0RpZEJlY29tZUtleU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsK
LSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVy
OnNlbGYgbmFtZTpOU1dpbmRvd0RpZFJlc2lnbktleU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsK
LSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVy
OnNlbGYgbmFtZTpOU1dpbmRvd0RpZE1pbmlhdHVyaXplTm90aWZpY2F0aW9uIG9iamVjdDp3aW5k
b3ddOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2Jz
ZXJ2ZXI6c2VsZiBuYW1lOk5TV2luZG93RGlkRGVtaW5pYXR1cml6ZU5vdGlmaWNhdGlvbiBvYmpl
Y3Q6d2luZG93XTsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJl
bW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRvd0RpZE1vdmVOb3RpZmljYXRpb24gb2JqZWN0
OndpbmRvd107Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1v
dmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dEaWRSZXNpemVOb3RpZmljYXRpb24gb2JqZWN0
OndpbmRvd107Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1v
dmVPYnNlcnZlcjpzZWxmIG5hbWU6QCJOU1dpbmRvd0RpZE9yZGVyT2ZmU2NyZWVuTm90aWZpY2F0
aW9uIiBvYmplY3Q6d2luZG93XTsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpAIl9OU1dpbmRvd0RpZEJlY29tZVZpc2li
bGUiIG9iamVjdDp3aW5kb3ddOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOndpbmRvd0RpZENoYW5nZUJhY2tpbmdQcm9w
ZXJ0aWVzTm90aWZpY2F0aW9uIG9iamVjdDp3aW5kb3ddOwotICAgIFtbTlNOb3RpZmljYXRpb25D
ZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TV2luZG93RGlk
Q2hhbmdlU2NyZWVuTm90aWZpY2F0aW9uIG9iamVjdDp3aW5kb3ddOworICAgICNkZWZpbmUgQURE
X09CU0VSVkVSKHNlbGVjdG9yTmFtZSwgbm90aWZpY2F0aW9uTmFtZSwgbm90aWZpY2F0aW9uT2Jq
ZWN0KSBcCisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRk
T2JzZXJ2ZXI6X2RhdGEgc2VsZWN0b3I6QHNlbGVjdG9yKHNlbGVjdG9yTmFtZTopIFwKKyAgICAg
ICAgICAgIG5hbWU6bm90aWZpY2F0aW9uTmFtZSBvYmplY3Q6bm90aWZpY2F0aW9uT2JqZWN0XQor
CisgICAgQUREX09CU0VSVkVSKHdrX3dpbmRvd0RpZEJlY29tZUtleSwgTlNXaW5kb3dEaWRCZWNv
bWVLZXlOb3RpZmljYXRpb24sIG5pbCk7CisgICAgQUREX09CU0VSVkVSKHdrX3dpbmRvd0RpZENo
YW5nZUJhY2tpbmdQcm9wZXJ0aWVzLCB3aW5kb3dEaWRDaGFuZ2VCYWNraW5nUHJvcGVydGllc05v
dGlmaWNhdGlvbiwgd2luZG93KTsKKyAgICBBRERfT0JTRVJWRVIod2tfd2luZG93RGlkQ2hhbmdl
U2NyZWVuLCBOU1dpbmRvd0RpZENoYW5nZVNjcmVlbk5vdGlmaWNhdGlvbiwgd2luZG93KTsKKyAg
ICBBRERfT0JTRVJWRVIod2tfd2luZG93RGlkRGVtaW5pYXR1cml6ZSwgTlNXaW5kb3dEaWREZW1p
bmlhdHVyaXplTm90aWZpY2F0aW9uLCB3aW5kb3cpOworICAgIEFERF9PQlNFUlZFUih3a193aW5k
b3dEaWRNaW5pYXR1cml6ZSwgTlNXaW5kb3dEaWRNaW5pYXR1cml6ZU5vdGlmaWNhdGlvbiwgd2lu
ZG93KTsKKyAgICBBRERfT0JTRVJWRVIod2tfd2luZG93RGlkTW92ZSwgTlNXaW5kb3dEaWRNb3Zl
Tm90aWZpY2F0aW9uLCB3aW5kb3cpOworICAgIEFERF9PQlNFUlZFUih3a193aW5kb3dEaWRPcmRl
ck9mZlNjcmVlbiwgd2luZG93RGlkT3JkZXJPZmZTY3JlZW5Ob3RpZmljYXRpb24sIHdpbmRvdyk7
CisgICAgQUREX09CU0VSVkVSKHdrX3dpbmRvd0RpZE9yZGVyT25TY3JlZW4sIHdpbmRvd0RpZEJl
Y29tZVZpc2libGVOb3RpZmljYXRpb24sIHdpbmRvdyk7CisgICAgQUREX09CU0VSVkVSKHdrX3dp
bmRvd0RpZFJlc2lnbktleSwgTlNXaW5kb3dEaWRSZXNpZ25LZXlOb3RpZmljYXRpb24sIG5pbCk7
CisgICAgQUREX09CU0VSVkVSKHdrX3dpbmRvd0RpZFJlc2l6ZSwgTlNXaW5kb3dEaWRSZXNpemVO
b3RpZmljYXRpb24sIHdpbmRvdyk7CisKKyAgICAjdW5kZWYgQUREX09CU0VSVkVSCiB9CiAKIC0g
KHZvaWQpdmlld1dpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopd2luZG93CkBAIC0xOTEyLDgg
KzE5MjAsNyBAQCAtICh2b2lkKXZpZXdXaWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqCiAjZW5k
aWYKICAgICAgICAgX2RhdGEtPl9wYWdlQ2xpZW50LT52aWV3V2lsbE1vdmVUb0Fub3RoZXJXaW5k
b3coKTsKICAgICAKLSAgICBbc2VsZiByZW1vdmVXaW5kb3dPYnNlcnZlcnNdOwotICAgIFtzZWxm
IGFkZFdpbmRvd09ic2VydmVyc0ZvcldpbmRvdzp3aW5kb3ddOworICAgIFtzZWxmIHdrX3VwZGF0
ZVdpbmRvd09ic2VydmVyc0ZvcldpbmRvdzp3aW5kb3ddOwogCiAjaWYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA9PSAxMDYwCiAgICAgaWYgKFtjdXJyZW50V2luZG93IF9ncm93Qm94
T3duZXJdID09IHNlbGYpCkBAIC0xOTI4LDIxICsxOTM1LDIxIEBAIC0gKHZvaWQpdmlld0RpZE1v
dmVUb1dpbmRvdwogICAgIC8vIHVwZGF0ZSB0aGUgYWN0aXZlIHN0YXRlLgogICAgIGlmIChbc2Vs
ZiB3aW5kb3ddKSB7CiAgICAgICAgIF9kYXRhLT5fd2luZG93SGFzVmFsaWRCYWNraW5nU3RvcmUg
PSBOTzsKLSAgICAgICAgW3NlbGYgX3VwZGF0ZVdpbmRvd1Zpc2liaWxpdHldOworICAgICAgICBb
c2VsZiB3a191cGRhdGVXaW5kb3dWaXNpYmlsaXR5XTsKICAgICAgICAgX2RhdGEtPl9wYWdlLT52
aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOwogICAg
ICAgICBfZGF0YS0+X3BhZ2UtPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJ
c1Zpc2libGUgfCBXZWJQYWdlUHJveHk6OlZpZXdJc0luV2luZG93KTsKLSAgICAgICAgW3NlbGYg
X3VwZGF0ZVdpbmRvd0FuZFZpZXdGcmFtZXNdOworICAgICAgICBbc2VsZiB3a191cGRhdGVXaW5k
b3dBbmRWaWV3RnJhbWVzXTsKIAogICAgICAgICBpZiAoIV9kYXRhLT5fZmxhZ3NDaGFuZ2VkRXZl
bnRNb25pdG9yKSB7CiAgICAgICAgICAgICBfZGF0YS0+X2ZsYWdzQ2hhbmdlZEV2ZW50TW9uaXRv
ciA9IFtOU0V2ZW50IGFkZExvY2FsTW9uaXRvckZvckV2ZW50c01hdGNoaW5nTWFzazpOU0ZsYWdz
Q2hhbmdlZE1hc2sgaGFuZGxlcjpeKE5TRXZlbnQgKmZsYWdzQ2hhbmdlZEV2ZW50KSB7Ci0gICAg
ICAgICAgICAgICAgW3NlbGYgX3Bvc3RGYWtlTW91c2VNb3ZlZEV2ZW50Rm9yRmxhZ3NDaGFuZ2Vk
RXZlbnQ6ZmxhZ3NDaGFuZ2VkRXZlbnRdOworICAgICAgICAgICAgICAgIFtzZWxmIHdrX3Bvc3RG
YWtlTW91c2VNb3ZlZEV2ZW50Rm9yRmxhZ3NDaGFuZ2VkRXZlbnQ6ZmxhZ3NDaGFuZ2VkRXZlbnRd
OwogICAgICAgICAgICAgICAgIHJldHVybiBmbGFnc0NoYW5nZWRFdmVudDsKICAgICAgICAgICAg
IH1dOwogICAgICAgICB9CiAKLSAgICAgICAgW3NlbGYgX2FjY2Vzc2liaWxpdHlSZWdpc3RlclVJ
UHJvY2Vzc1Rva2Vuc107CisgICAgICAgIFtzZWxmIHdrX2FjY2Vzc2liaWxpdHlSZWdpc3RlclVJ
UHJvY2Vzc1Rva2Vuc107CiAgICAgfSBlbHNlIHsKLSAgICAgICAgW3NlbGYgX3VwZGF0ZVdpbmRv
d1Zpc2liaWxpdHldOworICAgICAgICBbc2VsZiB3a191cGRhdGVXaW5kb3dWaXNpYmlsaXR5XTsK
ICAgICAgICAgX2RhdGEtPl9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpW
aWV3SXNWaXNpYmxlKTsKICAgICAgICAgX2RhdGEtPl9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2Uo
V2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUgfCBXZWJQYWdlUHJveHk6OlZpZXdJc0lu
V2luZG93KTsKIApAQCAtMTk2MCw2NyArMTk2Nyw2NyBAQCAtICh2b2lkKXZpZXdEaWRNb3ZlVG9X
aW5kb3cKICNlbmRpZgogICAgIH0KIAotICAgIF9kYXRhLT5fcGFnZS0+c2V0SW50cmluc2ljRGV2
aWNlU2NhbGVGYWN0b3IoW3NlbGYgX2ludHJpbnNpY0RldmljZVNjYWxlRmFjdG9yXSk7CisgICAg
X2RhdGEtPl9wYWdlLT5zZXRJbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3Rvcihbc2VsZiB3a19pbnRy
aW5zaWNEZXZpY2VTY2FsZUZhY3Rvcl0pOwogfQogCi0tICh2b2lkKWRvV2luZG93RGlkQ2hhbmdl
U2NyZWVuCistICh2b2lkKXdrX3dpbmRvd1NjcmVlbkRpZENoYW5nZQogewogICAgIF9kYXRhLT5f
cGFnZS0+d2luZG93U2NyZWVuRGlkQ2hhbmdlKChQbGF0Zm9ybURpc3BsYXlJRClbW1tbW3NlbGYg
d2luZG93XSBzY3JlZW5dIGRldmljZURlc2NyaXB0aW9uXSBvYmplY3RGb3JLZXk6QCJOU1NjcmVl
bk51bWJlciJdIGludFZhbHVlXSk7CiB9CiAKLS0gKHZvaWQpX3dpbmRvd0RpZEJlY29tZUtleToo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KKy0gKHZvaWQpd2tfd2luZG93RGlkQmVjb21l
S2V5OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogewogICAgIE5TV2luZG93ICprZXlX
aW5kb3cgPSBbbm90aWZpY2F0aW9uIG9iamVjdF07CiAgICAgaWYgKGtleVdpbmRvdyA9PSBbc2Vs
ZiB3aW5kb3ddIHx8IGtleVdpbmRvdyA9PSBbW3NlbGYgd2luZG93XSBhdHRhY2hlZFNoZWV0XSkg
ewotICAgICAgICBbc2VsZiBfdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZV07CisgICAgICAgIFtzZWxm
IHdrX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGVdOwogICAgICAgICBfZGF0YS0+X3BhZ2UtPnZpZXdT
dGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7CiAgICAgfQog
CiAgICAgLy8gU2VuZCBhIGNoYW5nZSBzY3JlZW4gdG8gbWFrZSBzdXJlIHRoZSBpbml0aWFsIGRp
c3BsYXlJRCBpcyBzZXQKLSAgICBbc2VsZiBkb1dpbmRvd0RpZENoYW5nZVNjcmVlbl07CisgICAg
W3NlbGYgd2tfd2luZG93U2NyZWVuRGlkQ2hhbmdlXTsKIH0KIAotLSAodm9pZClfd2luZG93RGlk
Q2hhbmdlU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorLSAodm9pZCl3a193
aW5kb3dEaWRDaGFuZ2VTY3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7Ci0g
ICAgW3NlbGYgZG9XaW5kb3dEaWRDaGFuZ2VTY3JlZW5dOworICAgIFtzZWxmIHdrX3dpbmRvd1Nj
cmVlbkRpZENoYW5nZV07CiB9CiAKLS0gKHZvaWQpX3dpbmRvd0RpZFJlc2lnbktleTooTlNOb3Rp
ZmljYXRpb24gKilub3RpZmljYXRpb24KKy0gKHZvaWQpd2tfd2luZG93RGlkUmVzaWduS2V5OihO
U05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogewogICAgIE5TV2luZG93ICpmb3JtZXJLZXlX
aW5kb3cgPSBbbm90aWZpY2F0aW9uIG9iamVjdF07CiAgICAgaWYgKGZvcm1lcktleVdpbmRvdyA9
PSBbc2VsZiB3aW5kb3ddIHx8IGZvcm1lcktleVdpbmRvdyA9PSBbW3NlbGYgd2luZG93XSBhdHRh
Y2hlZFNoZWV0XSkgewotICAgICAgICBbc2VsZiBfdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZV07Cisg
ICAgICAgIFtzZWxmIHdrX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGVdOwogICAgICAgICBfZGF0YS0+
X3BhZ2UtPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2
ZSk7CiAgICAgfQogfQogCi0tICh2b2lkKV93aW5kb3dEaWRNaW5pYXR1cml6ZTooTlNOb3RpZmlj
YXRpb24gKilub3RpZmljYXRpb24KKy0gKHZvaWQpd2tfd2luZG93RGlkTWluaWF0dXJpemU6KE5T
Tm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7CiAgICAgX2RhdGEtPl93aW5kb3dIYXNWYWxp
ZEJhY2tpbmdTdG9yZSA9IE5POwogCi0gICAgW3NlbGYgX3VwZGF0ZVdpbmRvd1Zpc2liaWxpdHld
OworICAgIFtzZWxmIHdrX3VwZGF0ZVdpbmRvd1Zpc2liaWxpdHldOwogfQogCi0tICh2b2lkKV93
aW5kb3dEaWREZW1pbmlhdHVyaXplOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorLSAo
dm9pZCl3a193aW5kb3dEaWREZW1pbmlhdHVyaXplOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbgogewotICAgIFtzZWxmIF91cGRhdGVXaW5kb3dWaXNpYmlsaXR5XTsKKyAgICBbc2VsZiB3
a191cGRhdGVXaW5kb3dWaXNpYmlsaXR5XTsKIH0KIAotLSAodm9pZClfd2luZG93RGlkTW92ZToo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KKy0gKHZvaWQpd2tfd2luZG93RGlkTW92ZToo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKLSAgICBbc2VsZiBfdXBkYXRlV2luZG93
QW5kVmlld0ZyYW1lc107ICAgIAorICAgIFtzZWxmIHdrX3VwZGF0ZVdpbmRvd0FuZFZpZXdGcmFt
ZXNdOwogfQogCi0tICh2b2lkKV93aW5kb3dEaWRSZXNpemU6KE5TTm90aWZpY2F0aW9uICopbm90
aWZpY2F0aW9uCistICh2b2lkKXdrX3dpbmRvd0RpZFJlc2l6ZTooTlNOb3RpZmljYXRpb24gKilu
b3RpZmljYXRpb24KIHsKICAgICBfZGF0YS0+X3dpbmRvd0hhc1ZhbGlkQmFja2luZ1N0b3JlID0g
Tk87CiAKLSAgICBbc2VsZiBfdXBkYXRlV2luZG93QW5kVmlld0ZyYW1lc107CisgICAgW3NlbGYg
d2tfdXBkYXRlV2luZG93QW5kVmlld0ZyYW1lc107CiB9CiAKLS0gKHZvaWQpX3dpbmRvd0RpZE9y
ZGVyT2ZmU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorLSAodm9pZCl3a193
aW5kb3dEaWRPcmRlck9mZlNjcmVlbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsK
LSAgICBbc2VsZiBfdXBkYXRlV2luZG93VmlzaWJpbGl0eV07CisgICAgW3NlbGYgd2tfdXBkYXRl
V2luZG93VmlzaWJpbGl0eV07CiAKICAgICAvLyBXZSB3YW50IHRvIG1ha2Ugc3VyZSB0byB1cGRh
dGUgdGhlIGFjdGl2ZSBzdGF0ZSB3aGlsZSBoaWRkZW4sIHNvIHNpbmNlIHRoZSB2aWV3IGlzIGFi
b3V0IHRvIGJlIGhpZGRlbiwKICAgICAvLyB3ZSBoaWRlIGl0IGZpcnN0IGFuZCB0aGVuIHVwZGF0
ZSB0aGUgYWN0aXZlIHN0YXRlLgpAQCAtMjAyOCw5ICsyMDM1LDkgQEAgLSAodm9pZClfd2luZG93
RGlkT3JkZXJPZmZTY3JlZW46KE5TTm90aQogICAgIF9kYXRhLT5fcGFnZS0+dmlld1N0YXRlRGlk
Q2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKIH0KIAotLSAodm9pZClf
d2luZG93RGlkT3JkZXJPblNjcmVlbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KKy0g
KHZvaWQpd2tfd2luZG93RGlkT3JkZXJPblNjcmVlbjooTlNOb3RpZmljYXRpb24gKilub3RpZmlj
YXRpb24KIHsKLSAgICBbc2VsZiBfdXBkYXRlV2luZG93VmlzaWJpbGl0eV07CisgICAgW3NlbGYg
d2tfdXBkYXRlV2luZG93VmlzaWJpbGl0eV07CiAKICAgICAvLyBXZSB3YW50IHRvIG1ha2Ugc3Vy
ZSB0byB1cGRhdGUgdGhlIGFjdGl2ZSBzdGF0ZSB3aGlsZSBoaWRkZW4sIHNvIHNpbmNlIHRoZSB2
aWV3IGlzIGFib3V0IHRvIGJlY29tZSB2aXNpYmxlLAogICAgIC8vIHdlIHVwZGF0ZSB0aGUgYWN0
aXZlIHN0YXRlIGZpcnN0IGFuZCB0aGVuIG1ha2UgaXQgdmlzaWJsZS4KQEAgLTIwMzgsMTAgKzIw
NDUsMTAgQEAgLSAodm9pZClfd2luZG93RGlkT3JkZXJPblNjcmVlbjooTlNOb3RpZgogICAgIF9k
YXRhLT5fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzVmlzaWJs
ZSk7CiB9CiAKLS0gKHZvaWQpX3dpbmRvd0RpZENoYW5nZUJhY2tpbmdQcm9wZXJ0aWVzOihOU05v
dGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorLSAodm9pZCl3a193aW5kb3dEaWRDaGFuZ2VCYWNr
aW5nUHJvcGVydGllczooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKICAgICBDR0Zs
b2F0IG9sZEJhY2tpbmdTY2FsZUZhY3RvciA9IFtbbm90aWZpY2F0aW9uLnVzZXJJbmZvIG9iamVj
dEZvcktleTpiYWNraW5nUHJvcGVydHlPbGRTY2FsZUZhY3RvcktleV0gZG91YmxlVmFsdWVdOwot
ICAgIENHRmxvYXQgbmV3QmFja2luZ1NjYWxlRmFjdG9yID0gW3NlbGYgX2ludHJpbnNpY0Rldmlj
ZVNjYWxlRmFjdG9yXTsgCisgICAgQ0dGbG9hdCBuZXdCYWNraW5nU2NhbGVGYWN0b3IgPSBbc2Vs
ZiB3a19pbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3Rvcl07CiAgICAgaWYgKG9sZEJhY2tpbmdTY2Fs
ZUZhY3RvciA9PSBuZXdCYWNraW5nU2NhbGVGYWN0b3IpCiAgICAgICAgIHJldHVybjsgCiAKQEAg
LTIwNzQsNyArMjA4MSw3IEBAIC0gKHZvaWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0CiAgICAgTE9H
KFZpZXcsICJkcmF3UmVjdDogeDolZywgeTolZywgd2lkdGg6JWcsIGhlaWdodDolZyIsIHJlY3Qu
b3JpZ2luLngsIHJlY3Qub3JpZ2luLnksIHJlY3Quc2l6ZS53aWR0aCwgcmVjdC5zaXplLmhlaWdo
dCk7CiAgICAgX2RhdGEtPl9wYWdlLT5lbmRQcmludGluZygpOwogCi0gICAgaWYgKFtzZWxmIF9z
aG91bGRVc2VUaWxlZERyYXdpbmdBcmVhXSkgeworICAgIGlmIChbc2VsZiB3a19zaG91bGRVc2VU
aWxlZERyYXdpbmdBcmVhXSkgewogICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuCiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0yMTM4LDcgKzIxNDUsNyBAQCAtICh2b2lkKXZpZXdEaWRD
aGFuZ2VCYWNraW5nUHJvcGVydGllcwogICAgICAgICBkcmF3aW5nQXJlYS0+Y29sb3JTcGFjZURp
ZENoYW5nZSgpOwogfQogCi0tICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmVnaXN0ZXJVSVByb2Nlc3NU
b2tlbnMKKy0gKHZvaWQpd2tfYWNjZXNzaWJpbGl0eVJlZ2lzdGVyVUlQcm9jZXNzVG9rZW5zCiB7
CiAgICAgLy8gSW5pdGlhbGl6ZSByZW1vdGUgYWNjZXNzaWJpbGl0eSB3aGVuIHRoZSB3aW5kb3cg
Y29ubmVjdGlvbiBoYXMgYmVlbiBlc3RhYmxpc2hlZC4KICAgICBOU0RhdGEgKnJlbW90ZUVsZW1l
bnRUb2tlbiA9IFdLQVhSZW1vdGVUb2tlbkZvckVsZW1lbnQoc2VsZik7CkBAIC0yMTQ4LDcgKzIx
NTUsNyBAQCAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmVnaXN0ZXJVSVByb2Nlc3NUCiAgICAgX2Rh
dGEtPl9wYWdlLT5yZWdpc3RlclVJUHJvY2Vzc0FjY2Vzc2liaWxpdHlUb2tlbnMoZWxlbWVudFRv
a2VuLCB3aW5kb3dUb2tlbik7CiB9CiAKLS0gKHZvaWQpX3VwZGF0ZVJlbW90ZUFjY2Vzc2liaWxp
dHlSZWdpc3RyYXRpb246KEJPT0wpcmVnaXN0ZXJQcm9jZXNzCistICh2b2lkKXdrX3VwZGF0ZVJl
bW90ZUFjY2Vzc2liaWxpdHlSZWdpc3RyYXRpb246KEJPT0wpcmVnaXN0ZXJQcm9jZXNzCiB7CiAg
ICAgLy8gV2hlbiB0aGUgdHJlZSBpcyBjb25uZWN0ZWQvZGlzY29ubmVjdGVkLCB0aGUgcmVtb3Rl
IGFjY2Vzc2liaWxpdHkgcmVnaXN0cmF0aW9uCiAgICAgLy8gbmVlZHMgdG8gYmUgdXBkYXRlZCB3
aXRoIHRoZSBwaWQgb2YgdGhlIHJlbW90ZSBwcm9jZXNzLiBJZiB0aGUgcHJvY2VzcyBpcyBnb2lu
ZwpAQCAtMjIyMCw3ICsyMjI3LDcgQEAgLSAoTlNWaWV3ICopaGl0VGVzdDooTlNQb2ludClwb2lu
dAogICAgIHJldHVybiBoaXRWaWV3OwogfQogCi0tICh2b2lkKV9wb3N0RmFrZU1vdXNlTW92ZWRF
dmVudEZvckZsYWdzQ2hhbmdlZEV2ZW50OihOU0V2ZW50ICopZmxhZ3NDaGFuZ2VkRXZlbnQKKy0g
KHZvaWQpd2tfcG9zdEZha2VNb3VzZU1vdmVkRXZlbnRGb3JGbGFnc0NoYW5nZWRFdmVudDooTlNF
dmVudCAqKWZsYWdzQ2hhbmdlZEV2ZW50CiB7CiAgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05T
RXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTW91c2VNb3ZlZCBsb2NhdGlvbjpbW2ZsYWdzQ2hh
bmdlZEV2ZW50IHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpbTlNFdmVudCBtb3VzZUxvY2F0
aW9uXV0KICAgICAgICAgbW9kaWZpZXJGbGFnczpbZmxhZ3NDaGFuZ2VkRXZlbnQgbW9kaWZpZXJG
bGFnc10gdGltZXN0YW1wOltmbGFnc0NoYW5nZWRFdmVudCB0aW1lc3RhbXBdIHdpbmRvd051bWJl
cjpbZmxhZ3NDaGFuZ2VkRXZlbnQgd2luZG93TnVtYmVyXQpAQCAtMjIzNCw3ICsyMjQxLDcgQEAg
LSAoTlNJbnRlZ2VyKWNvbnZlcnNhdGlvbklkZW50aWZpZXIKICAgICByZXR1cm4gKE5TSW50ZWdl
cilzZWxmOwogfQogCi0tIChmbG9hdClfaW50cmluc2ljRGV2aWNlU2NhbGVGYWN0b3IKKy0gKGZs
b2F0KXdrX2ludHJpbnNpY0RldmljZVNjYWxlRmFjdG9yCiB7CiAgICAgTlNXaW5kb3cgKndpbmRv
dyA9IFtzZWxmIHdpbmRvd107CiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDcwCkBAIC0yMjQ4LDcgKzIyNTUsNyBAQCAtIChmbG9hdClfaW50cmluc2ljRGV2aWNlU2Nh
bGVGYWN0b3IKICNlbmRpZgogfQogCi0tICh2b2lkKV9zZXREcmF3aW5nQXJlYVNpemU6KE5TU2l6
ZSlzaXplCistICh2b2lkKXdrX3NldERyYXdpbmdBcmVhU2l6ZTooTlNTaXplKXNpemUKIHsKICAg
ICBpZiAoIV9kYXRhLT5fcGFnZS0+ZHJhd2luZ0FyZWEoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjI1Nyw3ICsyMjY0LDcgQEAgLSAodm9pZClfc2V0RHJhd2luZ0FyZWFTaXplOihOU1NpemUpc2l6
ZQogICAgIF9kYXRhLT5fcmVzaXplU2Nyb2xsT2Zmc2V0ID0gTlNaZXJvU2l6ZTsKIH0KIAotLSAo
Qk9PTClfc2hvdWxkVXNlVGlsZWREcmF3aW5nQXJlYQorLSAoQk9PTCl3a19zaG91bGRVc2VUaWxl
ZERyYXdpbmdBcmVhCiB7CiAgICAgcmV0dXJuIE5POwogfQpAQCAtMjI3NCwxNyArMjI4MSwxNyBA
QCAtICh2b2lkKXF1aWNrTG9va1dpdGhFdmVudDooTlNFdmVudCAqKWV2CiAKIEBpbXBsZW1lbnRh
dGlvbiBXS1ZpZXcgKEludGVybmFsKQogCi0tIChQYXNzT3duUHRyPFdlYktpdDo6RHJhd2luZ0Fy
ZWFQcm94eT4pX2NyZWF0ZURyYXdpbmdBcmVhUHJveHkKKy0gKFBhc3NPd25QdHI8V2ViS2l0OjpE
cmF3aW5nQXJlYVByb3h5Pil3a19jcmVhdGVEcmF3aW5nQXJlYVByb3h5CiB7CiAjaWYgRU5BQkxF
KFRIUkVBREVEX1NDUk9MTElORykKLSAgICBpZiAoW3NlbGYgX3Nob3VsZFVzZVRpbGVkRHJhd2lu
Z0FyZWFdKQorICAgIGlmIChbc2VsZiB3a19zaG91bGRVc2VUaWxlZERyYXdpbmdBcmVhXSkKICAg
ICAgICAgcmV0dXJuIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZShf
ZGF0YS0+X3BhZ2UuZ2V0KCkpOwogI2VuZGlmCiAKICAgICByZXR1cm4gRHJhd2luZ0FyZWFQcm94
eUltcGw6OmNyZWF0ZShfZGF0YS0+X3BhZ2UuZ2V0KCkpOwogfQogCi0tIChCT09MKV9pc0ZvY3Vz
ZWQKKy0gKEJPT0wpd2tfaXNGb2N1c2VkCiB7CiAgICAgaWYgKF9kYXRhLT5faW5CZWNvbWVGaXJz
dFJlc3BvbmRlcikKICAgICAgICAgcmV0dXJuIFlFUzsKQEAgLTIyOTMsNyArMjMwMCw3IEBAIC0g
KEJPT0wpX2lzRm9jdXNlZAogICAgIHJldHVybiBbW3NlbGYgd2luZG93XSBmaXJzdFJlc3BvbmRl
cl0gPT0gc2VsZjsKIH0KIAotLSAoV2ViS2l0OjpDb2xvclNwYWNlRGF0YSlfY29sb3JTcGFjZQor
LSAoV2ViS2l0OjpDb2xvclNwYWNlRGF0YSl3a19jb2xvclNwYWNlCiB7CiAgICAgaWYgKCFfZGF0
YS0+X2NvbG9yU3BhY2UpIHsKICAgICAgICAgaWYgKFtzZWxmIHdpbmRvd10pCkBAIC0yMzA4LDMy
ICsyMzE1LDMyIEBAIC0gKFdlYktpdDo6Q29sb3JTcGFjZURhdGEpX2NvbG9yU3BhY2UKICAgICBy
ZXR1cm4gY29sb3JTcGFjZURhdGE7ICAgIAogfQogCi0tICh2b2lkKV9wcm9jZXNzRGlkQ3Jhc2gK
Ky0gKHZvaWQpd2tfcHJvY2Vzc0RpZENyYXNoCiB7CiAgICAgaWYgKF9kYXRhLT5fbGF5ZXJIb3N0
aW5nVmlldykKLSAgICAgICAgW3NlbGYgX2V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZV07
CisgICAgICAgIFtzZWxmIHdrX2V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZV07CiAKLSAg
ICBbc2VsZiBfdXBkYXRlUmVtb3RlQWNjZXNzaWJpbGl0eVJlZ2lzdHJhdGlvbjpOT107CisgICAg
W3NlbGYgd2tfdXBkYXRlUmVtb3RlQWNjZXNzaWJpbGl0eVJlZ2lzdHJhdGlvbjpOT107CiB9CiAK
LS0gKHZvaWQpX3BhZ2VDbG9zZWQKKy0gKHZvaWQpd2tfcGFnZUNsb3NlZAogewotICAgIFtzZWxm
IF91cGRhdGVSZW1vdGVBY2Nlc3NpYmlsaXR5UmVnaXN0cmF0aW9uOk5PXTsKKyAgICBbc2VsZiB3
a191cGRhdGVSZW1vdGVBY2Nlc3NpYmlsaXR5UmVnaXN0cmF0aW9uOk5PXTsKIH0KIAotLSAodm9p
ZClfZGlkUmVsYXVuY2hQcm9jZXNzCistICh2b2lkKXdrX2RpZFJlbGF1bmNoUHJvY2Vzcwogewot
ICAgIFtzZWxmIF9hY2Nlc3NpYmlsaXR5UmVnaXN0ZXJVSVByb2Nlc3NUb2tlbnNdOworICAgIFtz
ZWxmIHdrX2FjY2Vzc2liaWxpdHlSZWdpc3RlclVJUHJvY2Vzc1Rva2Vuc107CiB9CiAKLS0gKHZv
aWQpX3NldEN1cnNvcjooTlNDdXJzb3IgKiljdXJzb3IKKy0gKHZvaWQpd2tfc2V0Q3Vyc29yOihO
U0N1cnNvciAqKWN1cnNvcgogewogICAgIGlmIChbTlNDdXJzb3IgY3VycmVudEN1cnNvcl0gPT0g
Y3Vyc29yKQogICAgICAgICByZXR1cm47CiAgICAgW2N1cnNvciBzZXRdOwogfQogCi0tICh2b2lk
KV9zZXRVc2VySW50ZXJmYWNlSXRlbVN0YXRlOihOU1N0cmluZyAqKWNvbW1hbmROYW1lIGVuYWJs
ZWQ6KEJPT0wpaXNFbmFibGVkIHN0YXRlOihpbnQpbmV3U3RhdGUKKy0gKHZvaWQpd2tfc2V0VXNl
ckludGVyZmFjZUl0ZW1TdGF0ZTooTlNTdHJpbmcgKiljb21tYW5kTmFtZSBlbmFibGVkOihCT09M
KWlzRW5hYmxlZCBzdGF0ZTooaW50KW5ld1N0YXRlCiB7CiAgICAgVmFsaWRhdGlvblZlY3RvciBp
dGVtcyA9IF9kYXRhLT5fdmFsaWRhdGlvbk1hcC50YWtlKGNvbW1hbmROYW1lKTsKICAgICBzaXpl
X3Qgc2l6ZSA9IGl0ZW1zLnNpemUoKTsKQEAgLTIzNDYsNyArMjM1Myw3IEBAIC0gKHZvaWQpX3Nl
dFVzZXJJbnRlcmZhY2VJdGVtU3RhdGU6KE5TU3QKICAgICB9CiB9CiAKLS0gKEJPT0wpX3RyeVBv
c3RQcm9jZXNzUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd246KE5TRXZlbnQgKilldmVudAor
LSAoQk9PTCl3a190cnlQb3N0UHJvY2Vzc1BsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duOihO
U0V2ZW50ICopZXZlbnQKIHsKICAgICBpZiAoIV9kYXRhLT5fcGx1Z2luQ29tcGxleFRleHRJbnB1
dElkZW50aWZpZXIgfHwgX2RhdGEtPl9wbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgPT0gUGx1
Z2luQ29tcGxleFRleHRJbnB1dERpc2FibGVkKQogICAgICAgICByZXR1cm4gTk87CkBAIC0yMzU1
LDE1ICsyMzYyLDE1IEBAIC0gKEJPT0wpX3RyeVBvc3RQcm9jZXNzUGx1Z2luQ29tcGxleFRleHQK
ICAgICBpZiAoX2RhdGEtPl9wbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgPT0gUGx1Z2luQ29t
cGxleFRleHRJbnB1dEVuYWJsZWRMZWdhY3kpCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIHJl
dHVybiBbc2VsZiBfaGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd246ZXZlbnRdOwor
ICAgIHJldHVybiBbc2VsZiB3a19oYW5kbGVQbHVnaW5Db21wbGV4VGV4dElucHV0S2V5RG93bjpl
dmVudF07CiB9CiAKLS0gKHZvaWQpX2RvbmVXaXRoS2V5RXZlbnQ6KE5TRXZlbnQgKilldmVudCBl
dmVudFdhc0hhbmRsZWQ6KEJPT0wpZXZlbnRXYXNIYW5kbGVkCistICh2b2lkKXdrX2RvbmVXaXRo
S2V5RXZlbnQ6KE5TRXZlbnQgKilldmVudCBldmVudFdhc0hhbmRsZWQ6KEJPT0wpZXZlbnRXYXNI
YW5kbGVkCiB7CiAgICAgaWYgKFtldmVudCB0eXBlXSAhPSBOU0tleURvd24pCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChbc2VsZiBfdHJ5UG9zdFByb2Nlc3NQbHVnaW5Db21wbGV4VGV4dElu
cHV0S2V5RG93bjpldmVudF0pCisgICAgaWYgKFtzZWxmIHdrX3RyeVBvc3RQcm9jZXNzUGx1Z2lu
Q29tcGxleFRleHRJbnB1dEtleURvd246ZXZlbnRdKQogICAgICAgICByZXR1cm47CiAgICAgCiAg
ICAgaWYgKGV2ZW50V2FzSGFuZGxlZCkgewpAQCAtMjM4Miw3ICsyMzg5LDcgQEAgLSAodm9pZClf
ZG9uZVdpdGhLZXlFdmVudDooTlNFdmVudCAqKWV2ZQogICAgIF9kYXRhLT5fa2V5RG93bkV2ZW50
QmVpbmdSZXNlbnQgPSBudWxscHRyOwogfQogCi0tIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDoo
TlNFdmVudCAqKWV2ZW50IHNhdmluZ0NvbW1hbmRzVG86KFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVz
c0NvbW1hbmQ+Jiljb21tYW5kcworLSAoQk9PTCl3a19pbnRlcnByZXRLZXlFdmVudDooTlNFdmVu
dCAqKWV2ZW50IHNhdmluZ0NvbW1hbmRzVG86KFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1h
bmQ+Jiljb21tYW5kcwogewogICAgIEFTU0VSVCghX2RhdGEtPl9pbnRlcnByZXRLZXlFdmVudHNQ
YXJhbWV0ZXJzKTsKICAgICBBU1NFUlQoY29tbWFuZHMuaXNFbXB0eSgpKTsKQEAgLTI0MTcsMTIg
KzI0MjQsMTIgQEAgLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KE5TRXZlbnQgKilldgogICAg
IHJldHVybiBwYXJhbWV0ZXJzLmV2ZW50SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0czsKIH0K
IAotLSAoTlNSZWN0KV9jb252ZXJ0VG9EZXZpY2VTcGFjZTooTlNSZWN0KXJlY3QKKy0gKE5TUmVj
dCl3a19jb252ZXJ0VG9EZXZpY2VTcGFjZTooTlNSZWN0KXJlY3QKIHsKICAgICByZXR1cm4gdG9E
ZXZpY2VTcGFjZShyZWN0LCBbc2VsZiB3aW5kb3ddKTsKIH0KIAotLSAoTlNSZWN0KV9jb252ZXJ0
VG9Vc2VyU3BhY2U6KE5TUmVjdClyZWN0CistIChOU1JlY3Qpd2tfY29udmVydFRvVXNlclNwYWNl
OihOU1JlY3QpcmVjdAogewogICAgIHJldHVybiB0b1VzZXJTcGFjZShyZWN0LCBbc2VsZiB3aW5k
b3ddKTsKIH0KQEAgLTI0MzgsNyArMjQ0NSw3IEBAIC0gKE5TVHJhY2tpbmdSZWN0VGFnKWFkZFRy
YWNraW5nUmVjdDooTlMKICAgICByZXR1cm4gVFJBQ0tJTkdfUkVDVF9UQUc7CiB9CiAKLS0gKE5T
VHJhY2tpbmdSZWN0VGFnKV9hZGRUcmFja2luZ1JlY3Q6KE5TUmVjdClyZWN0IG93bmVyOihpZClv
d25lciB1c2VyRGF0YToodm9pZCAqKWRhdGEgYXNzdW1lSW5zaWRlOihCT09MKWFzc3VtZUluc2lk
ZSB1c2VUcmFja2luZ051bTooaW50KXRhZworLSAoTlNUcmFja2luZ1JlY3RUYWcpd2tfYWRkVHJh
Y2tpbmdSZWN0OihOU1JlY3QpcmVjdCBvd25lcjooaWQpb3duZXIgdXNlckRhdGE6KHZvaWQgKilk
YXRhIGFzc3VtZUluc2lkZTooQk9PTClhc3N1bWVJbnNpZGUgdXNlVHJhY2tpbmdOdW06KGludCl0
YWcKIHsKICAgICBBU1NFUlQodGFnID09IDAgfHwgdGFnID09IFRSQUNLSU5HX1JFQ1RfVEFHKTsK
ICAgICBBU1NFUlQoX2RhdGEtPl90cmFja2luZ1JlY3RPd25lciA9PSBuaWwpOwpAQCAtMjQ0Nyw3
ICsyNDU0LDcgQEAgLSAoTlNUcmFja2luZ1JlY3RUYWcpX2FkZFRyYWNraW5nUmVjdDooTgogICAg
IHJldHVybiBUUkFDS0lOR19SRUNUX1RBRzsKIH0KIAotLSAodm9pZClfYWRkVHJhY2tpbmdSZWN0
czooTlNSZWN0ICopcmVjdHMgb3duZXI6KGlkKW93bmVyIHVzZXJEYXRhTGlzdDoodm9pZCAqKil1
c2VyRGF0YUxpc3QgYXNzdW1lSW5zaWRlTGlzdDooQk9PTCAqKWFzc3VtZUluc2lkZUxpc3QgdHJh
Y2tpbmdOdW1zOihOU1RyYWNraW5nUmVjdFRhZyAqKXRyYWNraW5nTnVtcyBjb3VudDooaW50KWNv
dW50CistICh2b2lkKXdrX2FkZFRyYWNraW5nUmVjdHM6KE5TUmVjdCAqKXJlY3RzIG93bmVyOihp
ZClvd25lciB1c2VyRGF0YUxpc3Q6KHZvaWQgKiopdXNlckRhdGFMaXN0IGFzc3VtZUluc2lkZUxp
c3Q6KEJPT0wgKilhc3N1bWVJbnNpZGVMaXN0IHRyYWNraW5nTnVtczooTlNUcmFja2luZ1JlY3RU
YWcgKil0cmFja2luZ051bXMgY291bnQ6KGludCljb3VudAogewogICAgIEFTU0VSVChjb3VudCA9
PSAxKTsKICAgICBBU1NFUlQodHJhY2tpbmdOdW1zWzBdID09IDAgfHwgdHJhY2tpbmdOdW1zWzBd
ID09IFRSQUNLSU5HX1JFQ1RfVEFHKTsKQEAgLTI0ODEsNyArMjQ4OCw3IEBAIC0gKHZvaWQpcmVt
b3ZlVHJhY2tpbmdSZWN0OihOU1RyYWNraW5nUmUKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAotLSAodm9pZClfcmVtb3ZlVHJhY2tpbmdSZWN0czooTlNUcmFja2luZ1JlY3RUYWcgKil0
YWdzIGNvdW50OihpbnQpY291bnQKKy0gKHZvaWQpd2tfcmVtb3ZlVHJhY2tpbmdSZWN0czooTlNU
cmFja2luZ1JlY3RUYWcgKil0YWdzIGNvdW50OihpbnQpY291bnQKIHsKICAgICBpbnQgaTsKICAg
ICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewpAQCAtMjQ5NSw3ICsyNTAyLDcgQEAgLSAo
dm9pZClfcmVtb3ZlVHJhY2tpbmdSZWN0czooTlNUcmFja2luZwogICAgIH0KIH0KIAotLSAodm9p
ZClfc2VuZFRvb2xUaXBNb3VzZUV4aXRlZAorLSAodm9pZCl3a19zZW5kVG9vbFRpcE1vdXNlRXhp
dGVkCiB7CiAgICAgLy8gTm90aGluZyBtYXR0ZXJzIGV4Y2VwdCB3aW5kb3csIHRyYWNraW5nTnVt
YmVyLCBhbmQgdXNlckRhdGEuCiAgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQgZW50
ZXJFeGl0RXZlbnRXaXRoVHlwZTpOU01vdXNlRXhpdGVkCkBAIC0yNTEwLDcgKzI1MTcsNyBAQCAt
ICh2b2lkKV9zZW5kVG9vbFRpcE1vdXNlRXhpdGVkCiAgICAgW19kYXRhLT5fdHJhY2tpbmdSZWN0
T3duZXIgbW91c2VFeGl0ZWQ6ZmFrZUV2ZW50XTsKIH0KIAotLSAodm9pZClfc2VuZFRvb2xUaXBN
b3VzZUVudGVyZWQKKy0gKHZvaWQpd2tfc2VuZFRvb2xUaXBNb3VzZUVudGVyZWQKIHsKICAgICAv
LyBOb3RoaW5nIG1hdHRlcnMgZXhjZXB0IHdpbmRvdywgdHJhY2tpbmdOdW1iZXIsIGFuZCB1c2Vy
RGF0YS4KICAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBlbnRlckV4aXRFdmVudFdp
dGhUeXBlOk5TTW91c2VFbnRlcmVkCkBAIC0yNTI1LDI2ICsyNTMyLDIxIEBAIC0gKHZvaWQpX3Nl
bmRUb29sVGlwTW91c2VFbnRlcmVkCiAgICAgW19kYXRhLT5fdHJhY2tpbmdSZWN0T3duZXIgbW91
c2VFbnRlcmVkOmZha2VFdmVudF07CiB9CiAKLS0gKE5TU3RyaW5nICopdmlldzooTlNWaWV3ICop
dmlldyBzdHJpbmdGb3JUb29sVGlwOihOU1Rvb2xUaXBUYWcpdGFnIHBvaW50OihOU1BvaW50KXBv
aW50IHVzZXJEYXRhOih2b2lkICopZGF0YQotewotICAgIHJldHVybiBuc1N0cmluZ0Zyb21XZWJD
b3JlU3RyaW5nKF9kYXRhLT5fcGFnZS0+dG9vbFRpcCgpKTsKLX0KLQotLSAodm9pZClfdG9vbFRp
cENoYW5nZWRGcm9tOihOU1N0cmluZyAqKW9sZFRvb2xUaXAgdG86KE5TU3RyaW5nICopbmV3VG9v
bFRpcAorLSAodm9pZCl3a190b29sVGlwQ2hhbmdlZEZyb206KE5TU3RyaW5nICopb2xkVG9vbFRp
cCB0bzooTlNTdHJpbmcgKiluZXdUb29sVGlwCiB7CiAgICAgaWYgKG9sZFRvb2xUaXApCi0gICAg
ICAgIFtzZWxmIF9zZW5kVG9vbFRpcE1vdXNlRXhpdGVkXTsKKyAgICAgICAgW3NlbGYgd2tfc2Vu
ZFRvb2xUaXBNb3VzZUV4aXRlZF07CiAKICAgICBpZiAobmV3VG9vbFRpcCAmJiBbbmV3VG9vbFRp
cCBsZW5ndGhdID4gMCkgewogICAgICAgICAvLyBTZWUgcmFkYXIgMzUwMDIxNyBmb3Igd2h5IHdl
IHJlbW92ZSBhbGwgdG9vbHRpcHMgcmF0aGVyIHRoYW4ganVzdCB0aGUgc2luZ2xlIG9uZSB3ZSBj
cmVhdGVkLgogICAgICAgICBbc2VsZiByZW1vdmVBbGxUb29sVGlwc107CiAgICAgICAgIE5TUmVj
dCB3aWRlT3BlblJlY3QgPSBOU01ha2VSZWN0KC0xMDAwMDAsIC0xMDAwMDAsIDIwMDAwMCwgMjAw
MDAwKTsKLSAgICAgICAgX2RhdGEtPl9sYXN0VG9vbFRpcFRhZyA9IFtzZWxmIGFkZFRvb2xUaXBS
ZWN0OndpZGVPcGVuUmVjdCBvd25lcjpzZWxmIHVzZXJEYXRhOk5VTExdOwotICAgICAgICBbc2Vs
ZiBfc2VuZFRvb2xUaXBNb3VzZUVudGVyZWRdOworICAgICAgICBfZGF0YS0+X2xhc3RUb29sVGlw
VGFnID0gW3NlbGYgYWRkVG9vbFRpcFJlY3Q6d2lkZU9wZW5SZWN0IG93bmVyOl9kYXRhIHVzZXJE
YXRhOk5VTExdOworICAgICAgICBbc2VsZiB3a19zZW5kVG9vbFRpcE1vdXNlRW50ZXJlZF07CiAg
ICAgfQogfQogCi0tICh2b2lkKV9zZXRGaW5kSW5kaWNhdG9yOihQYXNzUmVmUHRyPEZpbmRJbmRp
Y2F0b3I+KWZpbmRJbmRpY2F0b3IgZmFkZU91dDooQk9PTClmYWRlT3V0IGFuaW1hdGU6KEJPT0wp
YW5pbWF0ZQorLSAodm9pZCl3a19zZXRGaW5kSW5kaWNhdG9yOihQYXNzUmVmUHRyPEZpbmRJbmRp
Y2F0b3I+KWZpbmRJbmRpY2F0b3IgZmFkZU91dDooQk9PTClmYWRlT3V0IGFuaW1hdGU6KEJPT0wp
YW5pbWF0ZQogewogICAgIGlmICghZmluZEluZGljYXRvcikgewogICAgICAgICBfZGF0YS0+X2Zp
bmRJbmRpY2F0b3JXaW5kb3cgPSBudWxscHRyOwpAQCAtMjU1Nyw3ICsyNTU5LDcgQEAgLSAodm9p
ZClfc2V0RmluZEluZGljYXRvcjooUGFzc1JlZlB0cjxGaQogICAgIF9kYXRhLT5fZmluZEluZGlj
YXRvcldpbmRvdy0+c2V0RmluZEluZGljYXRvcihmaW5kSW5kaWNhdG9yLCBmYWRlT3V0LCBhbmlt
YXRlKTsKIH0KIAotLSAodm9pZClfZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZTooY29u
c3QgTGF5ZXJUcmVlQ29udGV4dCYpbGF5ZXJUcmVlQ29udGV4dAorLSAodm9pZCl3a19lbnRlckFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlOihjb25zdCBMYXllclRyZWVDb250ZXh0JilsYXllclRy
ZWVDb250ZXh0CiB7CiAgICAgQVNTRVJUKCFfZGF0YS0+X2xheWVySG9zdGluZ1ZpZXcpOwogICAg
IEFTU0VSVCghbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCkpOwpAQCAtMjU4Niw3ICsyNTg4LDcg
QEAgLSAodm9pZClfZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZQogICAgIFtDQVRyYW5z
YWN0aW9uIGNvbW1pdF07CiB9CiAKLS0gKHZvaWQpX2V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZQorLSAodm9pZCl3a19leGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUKIHsKICAgICBB
U1NFUlQoX2RhdGEtPl9sYXllckhvc3RpbmdWaWV3KTsKIApAQCAtMjU5Nyw3ICsyNTk5LDcgQEAg
LSAodm9pZClfZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlCiAgICAgX2RhdGEtPl9sYXll
ckhvc3RpbmdWaWV3ID0gbnVsbHB0cjsKIH0KIAotLSAodm9pZClfdXBkYXRlQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGU6KGNvbnN0IFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dCYpbGF5ZXJUcmVl
Q29udGV4dAorLSAodm9pZCl3a191cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZTooY29u
c3QgV2ViS2l0OjpMYXllclRyZWVDb250ZXh0JilsYXllclRyZWVDb250ZXh0CiB7CiAgICAgaWYg
KF9kYXRhLT5fbGF5ZXJIb3N0aW5nVmlldykgewogICAgICAgICAvLyBXcmFwIHRoZSBjYWxsIHRv
IHNldFN1YmxheWVyczogaW4gYSBDQVRyYW5zYWN0aW9uIHdpdGggYWN0aW9ucyBkaXNhYmxlZCB0
bwpAQCAtMjYxMCwxOCArMjYxMiwxOCBAQCAtICh2b2lkKV91cGRhdGVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kCiAKICAgICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBbc2VsZiBfZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlXTsKLSAgICAg
ICAgW3NlbGYgX2VudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGU6bGF5ZXJUcmVlQ29udGV4
dF07CisgICAgICAgIFtzZWxmIHdrX2V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZV07Cisg
ICAgICAgIFtzZWxmIHdrX2VudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGU6bGF5ZXJUcmVl
Q29udGV4dF07CiAgICAgfQogfQogCi0tICh2b2lkKV9zZXRBY2Nlc3NpYmlsaXR5V2ViUHJvY2Vz
c1Rva2VuOihOU0RhdGEgKilkYXRhCistICh2b2lkKXdrX3NldEFjY2Vzc2liaWxpdHlXZWJQcm9j
ZXNzVG9rZW46KE5TRGF0YSAqKWRhdGEKIHsKICAgICBfZGF0YS0+X3JlbW90ZUFjY2Vzc2liaWxp
dHlDaGlsZCA9IFdLQVhSZW1vdGVFbGVtZW50Rm9yVG9rZW4oZGF0YSk7Ci0gICAgW3NlbGYgX3Vw
ZGF0ZVJlbW90ZUFjY2Vzc2liaWxpdHlSZWdpc3RyYXRpb246WUVTXTsKKyAgICBbc2VsZiB3a191
cGRhdGVSZW1vdGVBY2Nlc3NpYmlsaXR5UmVnaXN0cmF0aW9uOllFU107CiB9CiAKLS0gKHZvaWQp
X3BsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQ6KEJPT0wpcGx1Z2luSGFzRm9jdXNBbmRX
aW5kb3dIYXNGb2N1cyBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcjoodWludDY0X3Qp
cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIKKy0gKHZvaWQpd2tfcGx1Z2luRm9jdXNP
cldpbmRvd0ZvY3VzQ2hhbmdlZDooQk9PTClwbHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3Vz
IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyOih1aW50NjRfdClwbHVnaW5Db21wbGV4
VGV4dElucHV0SWRlbnRpZmllcgogewogICAgIEJPT0wgaW5wdXRTb3VyY2VDaGFuZ2VkID0gX2Rh
dGEtPl9wbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcjsKIApAQCAtMjY0OSwxNyArMjY1
MSwxNyBAQCAtICh2b2lkKV9wbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkCiAgICAgW05T
QXBwIHVwZGF0ZVdpbmRvd3NdOwogfQogCi0tICh2b2lkKV9zZXRQbHVnaW5Db21wbGV4VGV4dElu
cHV0U3RhdGU6KFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSlwbHVnaW5Db21wbGV4VGV4dElu
cHV0U3RhdGUgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXI6KHVpbnQ2NF90KXBsdWdp
bkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyCistICh2b2lkKXdrX3NldFBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRTdGF0ZTooUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKXBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRTdGF0ZSBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcjoodWludDY0X3Qp
cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIKIHsKICAgICBpZiAocGx1Z2luQ29tcGxl
eFRleHRJbnB1dElkZW50aWZpZXIgIT0gX2RhdGEtPl9wbHVnaW5Db21wbGV4VGV4dElucHV0SWRl
bnRpZmllcikgewogICAgICAgICAvLyBXZSdyZSBhc2tlZCB0byB1cGRhdGUgdGhlIHN0YXRlIGZv
ciBhIHBsdWctaW4gdGhhdCBkb2Vzbid0IGhhdmUgZm9jdXMuCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBbc2VsZiBfc2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlOnBsdWdpbkNv
bXBsZXhUZXh0SW5wdXRTdGF0ZV07CisgICAgW3NlbGYgd2tfc2V0UGx1Z2luQ29tcGxleFRleHRJ
bnB1dFN0YXRlOnBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZV07CiB9CiAKLS0gKHZvaWQpX3Nl
dFBhZ2VIYXNDdXN0b21SZXByZXNlbnRhdGlvbjooQk9PTClwYWdlSGFzQ3VzdG9tUmVwcmVzZW50
YXRpb24KKy0gKHZvaWQpd2tfc2V0UGFnZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uOihCT09MKXBh
Z2VIYXNDdXN0b21SZXByZXNlbnRhdGlvbgogewogICAgIGJvb2wgaGFkUERGVmlldyA9IF9kYXRh
LT5fcGRmVmlld0NvbnRyb2xsZXI7CiAgICAgX2RhdGEtPl9wZGZWaWV3Q29udHJvbGxlciA9IG51
bGxwdHI7CkBAIC0yNjcxLDE0ICsyNjczLDE0IEBAIC0gKHZvaWQpX3NldFBhZ2VIYXNDdXN0b21S
ZXByZXNlbnRhdGlvbjoKICAgICAgICAgX2RhdGEtPl9wYWdlLT5kcmF3aW5nQXJlYSgpLT5wYWdl
Q3VzdG9tUmVwcmVzZW50YXRpb25DaGFuZ2VkKCk7CiB9CiAKLS0gKHZvaWQpX2RpZEZpbmlzaExv
YWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU6KGNv
bnN0IFN0cmluZyYpc3VnZ2VzdGVkRmlsZW5hbWUgZGF0YVJlZmVyZW5jZTooY29uc3QgQ29yZUlQ
Qzo6RGF0YVJlZmVyZW5jZSYpZGF0YVJlZmVyZW5jZQorLSAodm9pZCl3a19kaWRGaW5pc2hMb2Fk
aW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOihjb25z
dCBTdHJpbmcmKXN1Z2dlc3RlZEZpbGVuYW1lIGRhdGFSZWZlcmVuY2U6KGNvbnN0IENvcmVJUEM6
OkRhdGFSZWZlcmVuY2UmKWRhdGFSZWZlcmVuY2UKIHsKICAgICBBU1NFUlQoX2RhdGEtPl9wZGZW
aWV3Q29udHJvbGxlcik7CiAKICAgICBfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyLT5zZXRQREZE
b2N1bWVudERhdGEoX2RhdGEtPl9wYWdlLT5tYWluRnJhbWUoKS0+bWltZVR5cGUoKSwgc3VnZ2Vz
dGVkRmlsZW5hbWUsIGRhdGFSZWZlcmVuY2UpOwogfQogCi0tIChkb3VibGUpX2N1c3RvbVJlcHJl
c2VudGF0aW9uWm9vbUZhY3RvcgorLSAoZG91YmxlKXdrX2N1c3RvbVJlcHJlc2VudGF0aW9uWm9v
bUZhY3RvcgogewogICAgIGlmICghX2RhdGEtPl9wZGZWaWV3Q29udHJvbGxlcikKICAgICAgICAg
cmV0dXJuIDE7CkBAIC0yNjg2LDcgKzI2ODgsNyBAQCAtIChkb3VibGUpX2N1c3RvbVJlcHJlc2Vu
dGF0aW9uWm9vbUZhY3RvCiAgICAgcmV0dXJuIF9kYXRhLT5fcGRmVmlld0NvbnRyb2xsZXItPnpv
b21GYWN0b3IoKTsKIH0KIAotLSAodm9pZClfc2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFj
dG9yOihkb3VibGUpem9vbUZhY3RvcgorLSAodm9pZCl3a19zZXRDdXN0b21SZXByZXNlbnRhdGlv
blpvb21GYWN0b3I6KGRvdWJsZSl6b29tRmFjdG9yCiB7CiAgICAgaWYgKCFfZGF0YS0+X3BkZlZp
ZXdDb250cm9sbGVyKQogICAgICAgICByZXR1cm47CkBAIC0yNjk0LDcgKzI2OTYsNyBAQCAtICh2
b2lkKV9zZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0CiAgICAgX2RhdGEtPl9wZGZWaWV3
Q29udHJvbGxlci0+c2V0Wm9vbUZhY3Rvcih6b29tRmFjdG9yKTsKIH0KIAotLSAodm9pZClfZmlu
ZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb246KE5TU3RyaW5nICopc3RyaW5nIHdpdGhGaW5k
T3B0aW9uczooV2ViS2l0OjpGaW5kT3B0aW9ucylvcHRpb25zIG1heE1hdGNoQ291bnQ6KE5TVUlu
dGVnZXIpY291bnQKKy0gKHZvaWQpd2tfZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb246
KE5TU3RyaW5nICopc3RyaW5nIHdpdGhGaW5kT3B0aW9uczooV2ViS2l0OjpGaW5kT3B0aW9ucylv
cHRpb25zIG1heE1hdGNoQ291bnQ6KE5TVUludGVnZXIpY291bnQKIHsKICAgICBpZiAoIV9kYXRh
LT5fcGRmVmlld0NvbnRyb2xsZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MDIsNyArMjcwNCw3
IEBAIC0gKHZvaWQpX2ZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW8KICAgICBfZGF0YS0+
X3BkZlZpZXdDb250cm9sbGVyLT5maW5kU3RyaW5nKHN0cmluZywgb3B0aW9ucywgY291bnQpOwog
fQogCi0tICh2b2lkKV9jb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uOihO
U1N0cmluZyAqKXN0cmluZyB3aXRoRmluZE9wdGlvbnM6KFdlYktpdDo6RmluZE9wdGlvbnMpb3B0
aW9ucyBtYXhNYXRjaENvdW50OihOU1VJbnRlZ2VyKWNvdW50CistICh2b2lkKXdrX2NvdW50U3Ry
aW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb246KE5TU3RyaW5nICopc3RyaW5nIHdpdGhG
aW5kT3B0aW9uczooV2ViS2l0OjpGaW5kT3B0aW9ucylvcHRpb25zIG1heE1hdGNoQ291bnQ6KE5T
VUludGVnZXIpY291bnQKIHsKICAgICBpZiAoIV9kYXRhLT5fcGRmVmlld0NvbnRyb2xsZXIpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI3MTAsNyArMjcxMiw3IEBAIC0gKHZvaWQpX2NvdW50U3RyaW5n
TWF0Y2hlc0luQ3VzdG9tUmVwcmUKICAgICBfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyLT5jb3Vu
dFN0cmluZ01hdGNoZXMoc3RyaW5nLCBvcHRpb25zLCBjb3VudCk7CiB9CiAKLS0gKHZvaWQpX3Nl
dERyYWdJbWFnZTooTlNJbWFnZSAqKWltYWdlIGF0OihOU1BvaW50KWNsaWVudFBvaW50IGxpbmtE
cmFnOihCT09MKWxpbmtEcmFnCistICh2b2lkKXdrX3NldERyYWdJbWFnZTooTlNJbWFnZSAqKWlt
YWdlIGF0OihOU1BvaW50KWNsaWVudFBvaW50IGxpbmtEcmFnOihCT09MKWxpbmtEcmFnCiB7CiAg
ICAgSW50U2l6ZSBzaXplKFtpbWFnZSBzaXplXSk7CiAgICAgc2l6ZS5zY2FsZSgxLjAgLyBfZGF0
YS0+X3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOwpAQCAtMjczNSw3ICsyNzM3LDcgQEAgc3Rh
dGljIGJvb2wgbWF0Y2hlc0V4dGVuc2lvbk9yRXF1aXZhbGVudAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgaGFz
Q2FzZUluc2Vuc2l0aXZlU3VmZml4KGZpbGVuYW1lLCBAIi5qcGciKSk7CiB9CiAKLS0gKHZvaWQp
X3NldFByb21pc2VkRGF0YTooV2ViQ29yZTo6SW1hZ2UgKilpbWFnZSB3aXRoRmlsZU5hbWU6KE5T
U3RyaW5nICopZmlsZW5hbWUgd2l0aEV4dGVuc2lvbjooTlNTdHJpbmcgKilleHRlbnNpb24gd2l0
aFRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdpdGhVUkw6KE5TU3RyaW5nICopdXJsIHdpdGhWaXNp
YmxlVVJMOihOU1N0cmluZyAqKXZpc2libGVVcmwgd2l0aEFyY2hpdmU6KFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlciopIGFyY2hpdmVCdWZmZXIgZm9yUGFzdGVib2FyZDooTlNTdHJpbmcgKilwYXN0ZWJv
YXJkTmFtZQorLSAodm9pZCl3a19zZXRQcm9taXNlZERhdGE6KFdlYkNvcmU6OkltYWdlICopaW1h
Z2Ugd2l0aEZpbGVOYW1lOihOU1N0cmluZyAqKWZpbGVuYW1lIHdpdGhFeHRlbnNpb246KE5TU3Ry
aW5nICopZXh0ZW5zaW9uIHdpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSB3aXRoVVJMOihOU1N0
cmluZyAqKXVybCB3aXRoVmlzaWJsZVVSTDooTlNTdHJpbmcgKil2aXNpYmxlVXJsIHdpdGhBcmNo
aXZlOihXZWJDb3JlOjpTaGFyZWRCdWZmZXIqKSBhcmNoaXZlQnVmZmVyIGZvclBhc3RlYm9hcmQ6
KE5TU3RyaW5nICopcGFzdGVib2FyZE5hbWUKIAogewogICAgIE5TUGFzdGVib2FyZCAqcGFzdGVi
b2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOnBhc3RlYm9hcmROYW1lXTsK
QEAgLTI4NDMsOSArMjg0NSw5IEBAIC0gKE5TQXJyYXkgKiluYW1lc09mUHJvbWlzZWRGaWxlc0Ry
b3BwZWQKICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OltwYXRoIGxhc3RQYXRo
Q29tcG9uZW50XV07CiB9CiAKLS0gKHZvaWQpX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGUKKy0gKHZv
aWQpd2tfdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZQogewotICAgIGlmICghW1tzZWxmIHdpbmRvd10g
aXNLZXlXaW5kb3ddIHx8ICFbc2VsZiBfaXNGb2N1c2VkXSkgeworICAgIGlmICghW1tzZWxmIHdp
bmRvd10gaXNLZXlXaW5kb3ddIHx8ICFbc2VsZiB3a19pc0ZvY3VzZWRdKSB7CiAgICAgICAgIGlm
IChfZGF0YS0+X2luU2VjdXJlSW5wdXRTdGF0ZSkgewogICAgICAgICAgICAgRGlzYWJsZVNlY3Vy
ZUV2ZW50SW5wdXQoKTsKICAgICAgICAgICAgIF9kYXRhLT5faW5TZWN1cmVJbnB1dFN0YXRlID0g
Tk87CkBAIC0yODcxLDEzICsyODczLDEzIEBAIC0gKHZvaWQpX3VwZGF0ZVNlY3VyZUlucHV0U3Rh
dGUKICAgICBfZGF0YS0+X2luU2VjdXJlSW5wdXRTdGF0ZSA9IGlzSW5QYXNzd29yZEZpZWxkOwog
fQogCi0tICh2b2lkKV91cGRhdGVUZXh0SW5wdXRTdGF0ZUluY2x1ZGluZ1NlY3VyZUlucHV0U3Rh
dGU6KEJPT0wpdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZQorLSAodm9pZCl3a191cGRhdGVUZXh0SW5w
dXRTdGF0ZUluY2x1ZGluZ1NlY3VyZUlucHV0U3RhdGU6KEJPT0wpdXBkYXRlU2VjdXJlSW5wdXRT
dGF0ZQogewogICAgIGNvbnN0IEVkaXRvclN0YXRlJiBlZGl0b3JTdGF0ZSA9IF9kYXRhLT5fcGFn
ZS0+ZWRpdG9yU3RhdGUoKTsKICAgICBpZiAodXBkYXRlU2VjdXJlSW5wdXRTdGF0ZSkgewogICAg
ICAgICAvLyBUaGlzIGlzIGEgdGVtcG9yYXJ5IHN0YXRlIHdoZW4gZWRpdGluZy4gRmxpcHBpbmcg
c2VjdXJlIGlucHV0IHN0YXRlIHRvbyBxdWlja2x5IGNhbiBleHBvc2UgcmFjZSBjb25kaXRpb25z
LgogICAgICAgICBpZiAoIWVkaXRvclN0YXRlLnNlbGVjdGlvbklzTm9uZSkKLSAgICAgICAgICAg
IFtzZWxmIF91cGRhdGVTZWN1cmVJbnB1dFN0YXRlXTsKKyAgICAgICAgICAgIFtzZWxmIHdrX3Vw
ZGF0ZVNlY3VyZUlucHV0U3RhdGVdOwogICAgIH0KIAogICAgIGlmICghZWRpdG9yU3RhdGUuaGFz
Q29tcG9zaXRpb24gfHwgZWRpdG9yU3RhdGUuc2hvdWxkSWdub3JlQ29tcG9zaXRpb25TZWxlY3Rp
b25DaGFuZ2UpCkBAIC0yODg1LDEyICsyODg3LDEyIEBAIC0gKHZvaWQpX3VwZGF0ZVRleHRJbnB1
dFN0YXRlSW5jbHVkaW5nU2UKIAogICAgIF9kYXRhLT5fcGFnZS0+Y2FuY2VsQ29tcG9zaXRpb24o
KTsKIAotICAgIFtzZWxmIF9ub3RpZnlJbnB1dENvbnRleHRBYm91dERpc2NhcmRlZENvbXBvc2l0
aW9uXTsKKyAgICBbc2VsZiB3a19ub3RpZnlJbnB1dENvbnRleHRBYm91dERpc2NhcmRlZENvbXBv
c2l0aW9uXTsKIH0KIAotLSAodm9pZClfcmVzZXRUZXh0SW5wdXRTdGF0ZQorLSAodm9pZCl3a19y
ZXNldFRleHRJbnB1dFN0YXRlCiB7Ci0gICAgW3NlbGYgX25vdGlmeUlucHV0Q29udGV4dEFib3V0
RGlzY2FyZGVkQ29tcG9zaXRpb25dOworICAgIFtzZWxmIHdrX25vdGlmeUlucHV0Q29udGV4dEFi
b3V0RGlzY2FyZGVkQ29tcG9zaXRpb25dOwogCiAgICAgaWYgKF9kYXRhLT5faW5TZWN1cmVJbnB1
dFN0YXRlKSB7CiAgICAgICAgIERpc2FibGVTZWN1cmVFdmVudElucHV0KCk7CkBAIC0yODk4LDcg
KzI5MDAsNyBAQCAtICh2b2lkKV9yZXNldFRleHRJbnB1dFN0YXRlCiAgICAgfQogfQogCi0tICh2
b2lkKV9kaWRDaGFuZ2VTY3JvbGxiYXJzRm9yTWFpbkZyYW1lCistICh2b2lkKXdrX2RpZENoYW5n
ZVNjcm9sbGJhcnNGb3JNYWluRnJhbWUKIHsKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID09IDEwNjAKICAgICBbc2VsZiBfdXBkYXRlR3Jvd0JveEZvcldpbmRvd0ZyYW1lQ2hh
bmdlXTsKQEAgLTI5MDYsMTIgKzI5MDgsMTMgQEAgLSAodm9pZClfZGlkQ2hhbmdlU2Nyb2xsYmFy
c0Zvck1haW5GcmFtZQogfQogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotLSAoQk9PTClo
YXNGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcgorCistIChCT09MKXdrX2hhc0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyCiB7CiAgICAgcmV0dXJuIChib29sKV9kYXRhLT5fZnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXI7CiB9CiAKLS0gKFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIqKWZ1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyCistIChXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
Kil3a19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcgogewogICAgIGlmICghX2RhdGEtPl9mdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlcikgewogICAgICAgICBfZGF0YS0+X2Z1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVyLmFkb3B0TlMoW1tXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGFsbG9j
XSBpbml0XSk7CkBAIC0yOTIwLDE2ICsyOTIzLDE3IEBAIC0gKFdLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIqKWZ1bGxTY3IKICAgICByZXR1cm4gX2RhdGEtPl9mdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlci5nZXQoKTsKIH0KIAotLSAodm9pZCljbG9zZUZ1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyCistICh2b2lkKXdrX2Nsb3NlRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIKIHsKICAgICBp
ZiAoIV9kYXRhLT5fZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIpCiAgICAgICAgIHJldHVybjsK
ICAgICBbX2RhdGEtPl9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5nZXQoKSBjbG9zZV07CiAg
ICAgX2RhdGEtPl9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciA9IG51bGxwdHI7CiB9CisKICNl
bmRpZgogCi0tIChib29sKV9leGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVj
dG9yCistIChib29sKXdrX2V4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0
b3IKIHsKICAgICAvLyBUaGUgc2luayBkb2VzIHR3byB0aGluZ3M6IDEpIFRlbGxzIHVzIGlmIHRo
ZSByZXNwb25kZXIgd2VudCB1bmhhbmRsZWQsIGFuZAogICAgIC8vIDIpIHByZXZlbnRzIGFueSBO
U0JlZXA7IHdlIGRvbid0IGV2ZXIgd2FudCB0byBiZWVwIGhlcmUuCkBAIC0yOTM5LDcgKzI5NDMs
NyBAQCAtIChib29sKV9leGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3RvcjooCiAgICAgcmV0dXJu
ICFbc2luay5nZXQoKSBkaWRSZWNlaXZlVW5oYW5kbGVkQ29tbWFuZF07CiB9CiAKLS0gKHZvaWQp
X2NhY2hlV2luZG93Qm90dG9tQ29ybmVyUmVjdAorLSAodm9pZCl3a19jYWNoZVdpbmRvd0JvdHRv
bUNvcm5lclJlY3QKIHsKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
NzAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIGNvZGUgd2hlbiA8cmRhcjov
L3Byb2JsZW0vOTM2MjA4NT4gaXMgcmVzb2x2ZWQuIApAQCAtMjk1Myw3ICsyOTU3LDcgQEAgLSAo
dm9pZClfY2FjaGVXaW5kb3dCb3R0b21Db3JuZXJSZWN0CiAjZW5kaWYKIH0KIAotLSAoTlNJbnRl
Z2VyKXNwZWxsQ2hlY2tlckRvY3VtZW50VGFnCistIChOU0ludGVnZXIpd2tfc3BlbGxDaGVja2Vy
RG9jdW1lbnRUYWcKIHsKICAgICBpZiAoIV9kYXRhLT5faGFzU3BlbGxDaGVja2VyRG9jdW1lbnRU
YWcpIHsKICAgICAgICAgX2RhdGEtPl9zcGVsbENoZWNrZXJEb2N1bWVudFRhZyA9IFtOU1NwZWxs
Q2hlY2tlciB1bmlxdWVTcGVsbERvY3VtZW50VGFnXTsKQEAgLTI5NjIsMTcgKzI5NjYsMTcgQEAg
LSAoTlNJbnRlZ2VyKXNwZWxsQ2hlY2tlckRvY3VtZW50VGFnCiAgICAgcmV0dXJuIF9kYXRhLT5f
c3BlbGxDaGVja2VyRG9jdW1lbnRUYWc7CiB9CiAKLS0gKHZvaWQpaGFuZGxlQWNjZXB0ZWRBbHRl
cm5hdGl2ZVRleHQ6KE5TU3RyaW5nKil0ZXh0CistICh2b2lkKXdrX2hhbmRsZUFjY2VwdGVkQWx0
ZXJuYXRpdmVUZXh0OihOU1N0cmluZyopdGV4dAogewogICAgIF9kYXRhLT5fcGFnZS0+aGFuZGxl
QWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQodGV4dCk7CiB9CiAKLS0gKHZvaWQpX3NldFN1cHByZXNz
VmlzaWJpbGl0eVVwZGF0ZXM6KEJPT0wpc3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcworLSAodm9p
ZCl3a19zZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzOihCT09MKXN1cHByZXNzVmlzaWJpbGl0
eVVwZGF0ZXMKIHsKICAgICBfZGF0YS0+X3BhZ2UtPnNldFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0
ZXMoc3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyk7CiB9CiAKLS0gKEJPT0wpX3N1cHByZXNzVmlz
aWJpbGl0eVVwZGF0ZXMKKy0gKEJPT0wpd2tfc3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcwogewog
ICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPnN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMoKTsKIH0K
QEAgLTI5ODEsNyArMjk4NSw3IEBAIC0gKEJPT0wpX3N1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMK
IAogQGltcGxlbWVudGF0aW9uIFdLVmlldyAoUHJpdmF0ZSkKIAotLSAodm9pZClfcmVnaXN0ZXJE
cmFnZ2VkVHlwZXMKKy0gKHZvaWQpd2tfcmVnaXN0ZXJEcmFnZ2VkVHlwZXMKIHsKICAgICBOU011
dGFibGVTZXQgKnR5cGVzID0gW1tOU011dGFibGVTZXQgYWxsb2NdIGluaXRXaXRoQXJyYXk6UGFz
dGVib2FyZFR5cGVzOjpmb3JFZGl0aW5nKCldOwogICAgIFt0eXBlcyBhZGRPYmplY3RzRnJvbUFy
cmF5OlBhc3RlYm9hcmRUeXBlczo6Zm9yVVJMKCldOwpAQCAtMzAyNSw5ICszMDI5LDEwIEBAIC0g
KGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBjb250ZXgKIAogICAgIF9kYXRhID0gW1tX
S1ZpZXdEYXRhIGFsbG9jXSBpbml0XTsKIAorICAgIF9kYXRhLT5fdmlldyA9IHNlbGY7CiAgICAg
X2RhdGEtPl9wYWdlQ2xpZW50ID0gUGFnZUNsaWVudEltcGw6OmNyZWF0ZShzZWxmKTsKICAgICBf
ZGF0YS0+X3BhZ2UgPSB0b0ltcGwoY29udGV4dFJlZiktPmNyZWF0ZVdlYlBhZ2UoX2RhdGEtPl9w
YWdlQ2xpZW50LmdldCgpLCB0b0ltcGwocGFnZUdyb3VwUmVmKSwgdG9JbXBsKHJlbGF0ZWRQYWdl
KSk7Ci0gICAgX2RhdGEtPl9wYWdlLT5zZXRJbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3Rvcihbc2Vs
ZiBfaW50cmluc2ljRGV2aWNlU2NhbGVGYWN0b3JdKTsKKyAgICBfZGF0YS0+X3BhZ2UtPnNldElu
dHJpbnNpY0RldmljZVNjYWxlRmFjdG9yKFtzZWxmIHdrX2ludHJpbnNpY0RldmljZVNjYWxlRmFj
dG9yXSk7CiAgICAgX2RhdGEtPl9wYWdlLT5pbml0aWFsaXplV2ViUGFnZSgpOwogI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkKICAgICBfZGF0YS0+X3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCkt
PnNldFdlYlZpZXcoc2VsZik7CkBAIC0zMDM1LDkgKzMwNDAsOSBAQCAtIChpZClpbml0V2l0aEZy
YW1lOihOU1JlY3QpZnJhbWUgY29udGV4CiAgICAgX2RhdGEtPl9tb3VzZURvd25FdmVudCA9IG5p
bDsKICAgICBfZGF0YS0+X2lnbm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRzID0gTk87CiAKLSAgICBb
c2VsZiBfcmVnaXN0ZXJEcmFnZ2VkVHlwZXNdOworICAgIFtzZWxmIHdrX3JlZ2lzdGVyRHJhZ2dl
ZFR5cGVzXTsKIAotICAgIGlmIChbc2VsZiBfc2hvdWxkVXNlVGlsZWREcmF3aW5nQXJlYV0pIHsK
KyAgICBpZiAoW3NlbGYgd2tfc2hvdWxkVXNlVGlsZWREcmF3aW5nQXJlYV0pIHsKICAgICAgICAg
c2VsZi53YW50c0xheWVyID0gWUVTOwogCiAgICAgICAgIC8vIEV4cGxpY2l0bHkgc2V0IHRoZSBs
YXllciBjb250ZW50cyBwbGFjZW1lbnQgc28gQXBwS2l0IHdpbGwgbWFrZSBzdXJlIHRoYXQgb3Vy
IGxheWVyIGhhcyBtYXNrc1RvQm91bmRzIHNldCB0byBZRVMuCkBAIC0zMDUwLDkgKzMwNTUsMTAg
QEAgLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIGNvbnRleAogfQogCiAjaWYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCisKIC0gKEJPT0wpd2FudHNVcGRh
dGVMYXllcgogewotICAgIHJldHVybiBbc2VsZiBfc2hvdWxkVXNlVGlsZWREcmF3aW5nQXJlYV07
CisgICAgcmV0dXJuIFtzZWxmIHdrX3Nob3VsZFVzZVRpbGVkRHJhd2luZ0FyZWFdOwogfQogCiAt
ICh2b2lkKXVwZGF0ZUxheWVyCkBAIC0zMDYyLDYgKzMwNjgsNyBAQCAtICh2b2lkKXVwZGF0ZUxh
eWVyCiAgICAgaWYgKERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gX2RhdGEtPl9wYWdl
LT5kcmF3aW5nQXJlYSgpKQogICAgICAgICBkcmF3aW5nQXJlYS0+d2FpdEZvclBvc3NpYmxlR2Vv
bWV0cnlVcGRhdGUoKTsKIH0KKwogI2VuZGlmCiAKIC0gKFdLUGFnZVJlZilwYWdlUmVmCkBAIC0z
MTE2LDcgKzMxMjMsNyBAQCAtICh2b2lkKWVuYWJsZUZyYW1lU2l6ZVVwZGF0ZXMKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIGlmICghKC0tX2RhdGEtPl9mcmFtZVNpemVVcGRhdGVzRGlzYWJs
ZWRDb3VudCkpCi0gICAgICAgIFtzZWxmIF9zZXREcmF3aW5nQXJlYVNpemU6W3NlbGYgZnJhbWVd
LnNpemVdOworICAgICAgICBbc2VsZiB3a19zZXREcmF3aW5nQXJlYVNpemU6W3NlbGYgZnJhbWVd
LnNpemVdOwogfQogCiAtIChCT09MKWZyYW1lU2l6ZVVwZGF0ZXNEaXNhYmxlZApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCShy
ZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Zp
ZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw1OCArNTAsNTkgQEAgbmFtZXNw
YWNlIFdlYktpdCB7CiBAY2xhc3MgV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjsKIAogQGlu
dGVyZmFjZSBXS1ZpZXcgKEludGVybmFsKQotLSAoUGFzc093blB0cjxXZWJLaXQ6OkRyYXdpbmdB
cmVhUHJveHk+KV9jcmVhdGVEcmF3aW5nQXJlYVByb3h5OwotLSAoQk9PTClfaXNGb2N1c2VkOwot
LSAodm9pZClfcHJvY2Vzc0RpZENyYXNoOwotLSAodm9pZClfcGFnZUNsb3NlZDsKLS0gKHZvaWQp
X2RpZFJlbGF1bmNoUHJvY2VzczsKLS0gKHZvaWQpX3Rvb2xUaXBDaGFuZ2VkRnJvbTooTlNTdHJp
bmcgKilvbGRUb29sVGlwIHRvOihOU1N0cmluZyAqKW5ld1Rvb2xUaXA7Ci0tICh2b2lkKV9zZXRD
dXJzb3I6KE5TQ3Vyc29yICopY3Vyc29yOwotLSAodm9pZClfc2V0VXNlckludGVyZmFjZUl0ZW1T
dGF0ZTooTlNTdHJpbmcgKiljb21tYW5kTmFtZSBlbmFibGVkOihCT09MKWlzRW5hYmxlZCBzdGF0
ZTooaW50KW5ld1N0YXRlOwotLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KE5TRXZlbnQgKil0
aGVFdmVudCBzYXZpbmdDb21tYW5kc1RvOihWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5k
PiYpY29tbWFuZHM7Ci0tICh2b2lkKV9kb25lV2l0aEtleUV2ZW50OihOU0V2ZW50ICopZXZlbnQg
ZXZlbnRXYXNIYW5kbGVkOihCT09MKWV2ZW50V2FzSGFuZGxlZDsKLS0gKGJvb2wpX2V4ZWN1dGVT
YXZlZENvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3I7Ci0tIChOU1JlY3QpX2NvbnZlcnRU
b0RldmljZVNwYWNlOihOU1JlY3QpcmVjdDsKLS0gKE5TUmVjdClfY29udmVydFRvVXNlclNwYWNl
OihOU1JlY3QpcmVjdDsKLS0gKHZvaWQpX3NldEZpbmRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8V2Vi
S2l0OjpGaW5kSW5kaWNhdG9yPilmaW5kSW5kaWNhdG9yIGZhZGVPdXQ6KEJPT0wpZmFkZU91dCBh
bmltYXRlOihCT09MKWFuaW1hdGU7Ci0KLS0gKHZvaWQpX2VudGVyQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGU6KGNvbnN0IFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dCYpbGF5ZXJUcmVlQ29udGV4
dDsKLS0gKHZvaWQpX2V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZTsKLS0gKHZvaWQpX3Vw
ZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlOihjb25zdCBXZWJLaXQ6OkxheWVyVHJlZUNv
bnRleHQmKWxheWVyVHJlZUNvbnRleHQ7Ci0KLS0gKHZvaWQpX3NldEFjY2Vzc2liaWxpdHlXZWJQ
cm9jZXNzVG9rZW46KE5TRGF0YSAqKWRhdGE7Ci0KLS0gKHZvaWQpX3BsdWdpbkZvY3VzT3JXaW5k
b3dGb2N1c0NoYW5nZWQ6KEJPT0wpcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cyBwbHVn
aW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcjoodWludDY0X3QpcGx1Z2luQ29tcGxleFRleHRJ
bnB1dElkZW50aWZpZXI7Ci0tICh2b2lkKV9zZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGU6
KFdlYktpdDo6UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKXBsdWdpbkNvbXBsZXhUZXh0SW5w
dXRTdGF0ZSBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcjoodWludDY0X3QpcGx1Z2lu
Q29tcGxleFRleHRJbnB1dElkZW50aWZpZXI7Ci0KLS0gKHZvaWQpX3NldFBhZ2VIYXNDdXN0b21S
ZXByZXNlbnRhdGlvbjooQk9PTClwYWdlSGFzQ3VzdG9tUmVwcmVzZW50YXRpb247Ci0tICh2b2lk
KV9kaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uV2l0aFN1Z2dlc3Rl
ZEZpbGVuYW1lOihjb25zdCBTdHJpbmcmKXN1Z2dlc3RlZEZpbGVuYW1lIGRhdGFSZWZlcmVuY2U6
KGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKWRhdGFSZWZlcmVuY2U7Ci0tIChkb3VibGUp
X2N1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcjsKLS0gKHZvaWQpX3NldEN1c3RvbVJlcHJl
c2VudGF0aW9uWm9vbUZhY3RvcjooZG91YmxlKXpvb21GYWN0b3I7Ci0tICh2b2lkKV9maW5kU3Ry
aW5nSW5DdXN0b21SZXByZXNlbnRhdGlvbjooTlNTdHJpbmcgKilzdHJpbmcgd2l0aEZpbmRPcHRp
b25zOihXZWJLaXQ6OkZpbmRPcHRpb25zKW9wdGlvbnMgbWF4TWF0Y2hDb3VudDooTlNVSW50ZWdl
ciljb3VudDsKLS0gKHZvaWQpX2NvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRp
b246KE5TU3RyaW5nICopc3RyaW5nIHdpdGhGaW5kT3B0aW9uczooV2ViS2l0OjpGaW5kT3B0aW9u
cylvcHRpb25zIG1heE1hdGNoQ291bnQ6KE5TVUludGVnZXIpY291bnQ7Ci0tICh2b2lkKV9zZXRE
cmFnSW1hZ2U6KE5TSW1hZ2UgKilpbWFnZSBhdDooTlNQb2ludCljbGllbnRQb2ludCBsaW5rRHJh
ZzooQk9PTClsaW5rRHJhZzsKLS0gKHZvaWQpX3NldFByb21pc2VkRGF0YTooV2ViQ29yZTo6SW1h
Z2UgKilpbWFnZSB3aXRoRmlsZU5hbWU6KE5TU3RyaW5nICopZmlsZW5hbWUgd2l0aEV4dGVuc2lv
bjooTlNTdHJpbmcgKilleHRlbnNpb24gd2l0aFRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdpdGhV
Ukw6KE5TU3RyaW5nICopdXJsIHdpdGhWaXNpYmxlVVJMOihOU1N0cmluZyAqKXZpc2libGVVcmwg
d2l0aEFyY2hpdmU6KFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciopIGFyY2hpdmVCdWZmZXIgZm9yUGFz
dGVib2FyZDooTlNTdHJpbmcgKilwYXN0ZWJvYXJkTmFtZTsKLS0gKHZvaWQpX3VwZGF0ZVNlY3Vy
ZUlucHV0U3RhdGU7Ci0tICh2b2lkKV91cGRhdGVUZXh0SW5wdXRTdGF0ZUluY2x1ZGluZ1NlY3Vy
ZUlucHV0U3RhdGU6KEJPT0wpdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZTsKLS0gKHZvaWQpX3Jlc2V0
VGV4dElucHV0U3RhdGU7CiAKLS0gKHZvaWQpX2RpZENoYW5nZVNjcm9sbGJhcnNGb3JNYWluRnJh
bWU7CistIChQYXNzT3duUHRyPFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eT4pd2tfY3JlYXRlRHJh
d2luZ0FyZWFQcm94eTsKKy0gKEJPT0wpd2tfaXNGb2N1c2VkOworLSAodm9pZCl3a19wcm9jZXNz
RGlkQ3Jhc2g7CistICh2b2lkKXdrX3BhZ2VDbG9zZWQ7CistICh2b2lkKXdrX2RpZFJlbGF1bmNo
UHJvY2VzczsKKy0gKHZvaWQpd2tfdG9vbFRpcENoYW5nZWRGcm9tOihOU1N0cmluZyAqKW9sZFRv
b2xUaXAgdG86KE5TU3RyaW5nICopbmV3VG9vbFRpcDsKKy0gKHZvaWQpd2tfc2V0Q3Vyc29yOihO
U0N1cnNvciAqKWN1cnNvcjsKKy0gKHZvaWQpd2tfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZToo
TlNTdHJpbmcgKiljb21tYW5kTmFtZSBlbmFibGVkOihCT09MKWlzRW5hYmxlZCBzdGF0ZTooaW50
KW5ld1N0YXRlOworLSAoQk9PTCl3a19pbnRlcnByZXRLZXlFdmVudDooTlNFdmVudCAqKXRoZUV2
ZW50IHNhdmluZ0NvbW1hbmRzVG86KFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jilj
b21tYW5kczsKKy0gKHZvaWQpd2tfZG9uZVdpdGhLZXlFdmVudDooTlNFdmVudCAqKWV2ZW50IGV2
ZW50V2FzSGFuZGxlZDooQk9PTClldmVudFdhc0hhbmRsZWQ7CistIChib29sKXdrX2V4ZWN1dGVT
YXZlZENvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3I7CistIChOU1JlY3Qpd2tfY29udmVy
dFRvRGV2aWNlU3BhY2U6KE5TUmVjdClyZWN0OworLSAoTlNSZWN0KXdrX2NvbnZlcnRUb1VzZXJT
cGFjZTooTlNSZWN0KXJlY3Q7CistICh2b2lkKXdrX3NldEZpbmRJbmRpY2F0b3I6KFBhc3NSZWZQ
dHI8V2ViS2l0OjpGaW5kSW5kaWNhdG9yPilmaW5kSW5kaWNhdG9yIGZhZGVPdXQ6KEJPT0wpZmFk
ZU91dCBhbmltYXRlOihCT09MKWFuaW1hdGU7CisKKy0gKHZvaWQpd2tfZW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZTooY29uc3QgV2ViS2l0OjpMYXllclRyZWVDb250ZXh0JilsYXllclRy
ZWVDb250ZXh0OworLSAodm9pZCl3a19leGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGU7Cist
ICh2b2lkKXdrX3VwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlOihjb25zdCBXZWJLaXQ6
OkxheWVyVHJlZUNvbnRleHQmKWxheWVyVHJlZUNvbnRleHQ7CisKKy0gKHZvaWQpd2tfc2V0QWNj
ZXNzaWJpbGl0eVdlYlByb2Nlc3NUb2tlbjooTlNEYXRhICopZGF0YTsKKworLSAodm9pZCl3a19w
bHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkOihCT09MKXBsdWdpbkhhc0ZvY3VzQW5kV2lu
ZG93SGFzRm9jdXMgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXI6KHVpbnQ2NF90KXBs
dWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyOworLSAodm9pZCl3a19zZXRQbHVnaW5Db21w
bGV4VGV4dElucHV0U3RhdGU6KFdlYktpdDo6UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKXBs
dWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmll
cjoodWludDY0X3QpcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXI7CisKKy0gKHZvaWQp
d2tfc2V0UGFnZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uOihCT09MKXBhZ2VIYXNDdXN0b21SZXBy
ZXNlbnRhdGlvbjsKKy0gKHZvaWQpd2tfZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXBy
ZXNlbnRhdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZTooY29uc3QgU3RyaW5nJilzdWdnZXN0ZWRG
aWxlbmFtZSBkYXRhUmVmZXJlbmNlOihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJilkYXRh
UmVmZXJlbmNlOworLSAoZG91YmxlKXdrX2N1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcjsK
Ky0gKHZvaWQpd2tfc2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yOihkb3VibGUpem9v
bUZhY3RvcjsKKy0gKHZvaWQpd2tfZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb246KE5T
U3RyaW5nICopc3RyaW5nIHdpdGhGaW5kT3B0aW9uczooV2ViS2l0OjpGaW5kT3B0aW9ucylvcHRp
b25zIG1heE1hdGNoQ291bnQ6KE5TVUludGVnZXIpY291bnQ7CistICh2b2lkKXdrX2NvdW50U3Ry
aW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb246KE5TU3RyaW5nICopc3RyaW5nIHdpdGhG
aW5kT3B0aW9uczooV2ViS2l0OjpGaW5kT3B0aW9ucylvcHRpb25zIG1heE1hdGNoQ291bnQ6KE5T
VUludGVnZXIpY291bnQ7CistICh2b2lkKXdrX3NldERyYWdJbWFnZTooTlNJbWFnZSAqKWltYWdl
IGF0OihOU1BvaW50KWNsaWVudFBvaW50IGxpbmtEcmFnOihCT09MKWxpbmtEcmFnOworLSAodm9p
ZCl3a19zZXRQcm9taXNlZERhdGE6KFdlYkNvcmU6OkltYWdlICopaW1hZ2Ugd2l0aEZpbGVOYW1l
OihOU1N0cmluZyAqKWZpbGVuYW1lIHdpdGhFeHRlbnNpb246KE5TU3RyaW5nICopZXh0ZW5zaW9u
IHdpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSB3aXRoVVJMOihOU1N0cmluZyAqKXVybCB3aXRo
VmlzaWJsZVVSTDooTlNTdHJpbmcgKil2aXNpYmxlVXJsIHdpdGhBcmNoaXZlOihXZWJDb3JlOjpT
aGFyZWRCdWZmZXIqKSBhcmNoaXZlQnVmZmVyIGZvclBhc3RlYm9hcmQ6KE5TU3RyaW5nICopcGFz
dGVib2FyZE5hbWU7CistICh2b2lkKXdrX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGU7CistICh2b2lk
KXdrX3VwZGF0ZVRleHRJbnB1dFN0YXRlSW5jbHVkaW5nU2VjdXJlSW5wdXRTdGF0ZTooQk9PTCl1
cGRhdGVTZWN1cmVJbnB1dFN0YXRlOworLSAodm9pZCl3a19yZXNldFRleHRJbnB1dFN0YXRlOwog
Ci0tIChXZWJLaXQ6OkNvbG9yU3BhY2VEYXRhKV9jb2xvclNwYWNlOworLSAodm9pZCl3a19kaWRD
aGFuZ2VTY3JvbGxiYXJzRm9yTWFpbkZyYW1lOworCistIChXZWJLaXQ6OkNvbG9yU3BhY2VEYXRh
KXdrX2NvbG9yU3BhY2U7CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0tIChCT09MKWhh
c0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOwotLSAoV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlciopZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7Ci0tICh2b2lkKWNsb3NlRnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXI7CistIChCT09MKXdrX2hhc0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyOworLSAoV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciopd2tfZnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXI7CistICh2b2lkKXdrX2Nsb3NlRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7
CiAjZW5kaWYKIAotLSAodm9pZClfY2FjaGVXaW5kb3dCb3R0b21Db3JuZXJSZWN0OworLSAodm9p
ZCl3a19jYWNoZVdpbmRvd0JvdHRvbUNvcm5lclJlY3Q7CiAKLS0gKE5TSW50ZWdlcilzcGVsbENo
ZWNrZXJEb2N1bWVudFRhZzsKLS0gKHZvaWQpaGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZVRleHQ6
KE5TU3RyaW5nKil0ZXh0OworLSAoTlNJbnRlZ2VyKXdrX3NwZWxsQ2hlY2tlckRvY3VtZW50VGFn
OworLSAodm9pZCl3a19oYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dDooTlNTdHJpbmcqKXRl
eHQ7CiAKLS0gKHZvaWQpX3NldFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXM6KEJPT0wpc3VwcHJl
c3NWaXNpYmlsaXR5VXBkYXRlczsKLS0gKEJPT0wpX3N1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXM7
CistICh2b2lkKXdrX3NldFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXM6KEJPT0wpc3VwcHJlc3NW
aXNpYmlsaXR5VXBkYXRlczsKKy0gKEJPT0wpd2tfc3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlczsK
IAogQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFu
ZWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0
aW9uUGFuZWwubW0JKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvQ29ycmVjdGlvblBhbmVsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcg
QEAgU3RyaW5nIENvcnJlY3Rpb25QYW5lbDo6ZGlzbWlzc0ludGVybmFsKAogCiB2b2lkIENvcnJl
Y3Rpb25QYW5lbDo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShXS1ZpZXcqIHZpZXcsIE5T
Q29ycmVjdGlvblJlc3BvbnNlIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQogewotICAgIFtbTlNTcGVsbENoZWNr
ZXIgc2hhcmVkU3BlbGxDaGVja2VyXSByZWNvcmRSZXNwb25zZTpyZXNwb25zZSB0b0NvcnJlY3Rp
b246cmVwbGFjZW1lbnRTdHJpbmcgZm9yV29yZDpyZXBsYWNlZFN0cmluZyBsYW5ndWFnZTpuaWwg
aW5TcGVsbERvY3VtZW50V2l0aFRhZzpbdmlldyBzcGVsbENoZWNrZXJEb2N1bWVudFRhZ11dOwor
ICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSByZWNvcmRSZXNwb25zZTpy
ZXNwb25zZSB0b0NvcnJlY3Rpb246cmVwbGFjZW1lbnRTdHJpbmcgZm9yV29yZDpyZXBsYWNlZFN0
cmluZyBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpbdmlldyB3a19zcGVsbENo
ZWNrZXJEb2N1bWVudFRhZ11dOwogfQogCiB2b2lkIENvcnJlY3Rpb25QYW5lbDo6aGFuZGxlQWNj
ZXB0ZWRSZXBsYWNlbWVudChOU1N0cmluZyogYWNjZXB0ZWRSZXBsYWNlbWVudCwgTlNTdHJpbmcq
IHJlcGxhY2VkLCBOU1N0cmluZyogcHJvcG9zZWRSZXBsYWNlbWVudCwgIE5TQ29ycmVjdGlvbklu
ZGljYXRvclR5cGUgY29ycmVjdGlvbkluZGljYXRvclR5cGUpCkBAIC0xMTgsNyArMTE4LDcgQEAg
dm9pZCBDb3JyZWN0aW9uUGFuZWw6OmhhbmRsZUFjY2VwdGVkUmVwbAogICAgICAgICByZXR1cm47
CiAKICAgICBOU1NwZWxsQ2hlY2tlciogc3BlbGxDaGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNo
YXJlZFNwZWxsQ2hlY2tlcl07Ci0gICAgTlNJbnRlZ2VyIGRvY3VtZW50VGFnID0gW21fdmlldy5n
ZXQoKSBzcGVsbENoZWNrZXJEb2N1bWVudFRhZ107CisgICAgTlNJbnRlZ2VyIGRvY3VtZW50VGFn
ID0gW21fdmlldy5nZXQoKSB3a19zcGVsbENoZWNrZXJEb2N1bWVudFRhZ107CiAgICAgCiAgICAg
c3dpdGNoIChjb3JyZWN0aW9uSW5kaWNhdG9yVHlwZSkgewogICAgIGNhc2UgTlNDb3JyZWN0aW9u
SW5kaWNhdG9yVHlwZURlZmF1bHQ6CkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBDb3JyZWN0aW9u
UGFuZWw6OmhhbmRsZUFjY2VwdGVkUmVwbAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBb
bV92aWV3LmdldCgpIGhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmVUZXh0OmFjY2VwdGVkUmVwbGFj
ZW1lbnRdOworICAgIFttX3ZpZXcuZ2V0KCkgd2tfaGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZVRl
eHQ6YWNjZXB0ZWRSZXBsYWNlbWVudF07CiAgICAgbV92aWV3LmNsZWFyKCk7CiAgICAgaWYgKGFj
Y2VwdGVkUmVwbGFjZW1lbnQpCiAgICAgICAgIG1fcmVzdWx0Rm9yRGlzbWlzc2FsLmFkb3B0TlMo
W2FjY2VwdGVkUmVwbGFjZW1lbnQgY29weV0pOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5t
bQkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsNyArMjQy
LDcgQEAgLSAodm9pZCllbnRlckZ1bGxTY3JlZW46KE5TU2NyZWVuICopc2NyZQogICAgIC8vIHVu
bmVjZXNzYXJ5IGluIHRoZSBmdWxsLXNjcmVlbiBhbmltYXRpb24gY2FzZSwgYW5kIGNhbiBjYXVz
ZSBidWdzOyBzZWUKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODg5NDAgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODM3
NAogICAgIC8vIFdlIHdpbGwgcmVzdW1lIHRoZSBub3JtYWwgYmVoYXZpb3IgaW4gX3N0YXJ0RW50
ZXJGdWxsU2NyZWVuQW5pbWF0aW9uV2l0aER1cmF0aW9uOgotICAgIFtfd2ViVmlldyBfc2V0U3Vw
cHJlc3NWaXNpYmlsaXR5VXBkYXRlczpZRVNdOworICAgIFtfd2ViVmlldyB3a19zZXRTdXBwcmVz
c1Zpc2liaWxpdHlVcGRhdGVzOllFU107CiAKICAgICAvLyBTd2FwIHRoZSB3ZWJWaWV3IHBsYWNl
aG9sZGVyIGludG8gcGxhY2UuCiAgICAgaWYgKCFfd2ViVmlld1BsYWNlaG9sZGVyKSB7CkBAIC0z
MzQsNyArMzM0LDcgQEAgLSAodm9pZClleGl0RnVsbFNjcmVlbgogCiAgICAgLy8gU2VlIHRoZSBy
ZWxhdGVkIGNvbW1lbnQgaW4gZW50ZXJGdWxsU2NyZWVuOgogICAgIC8vIFdlIHdpbGwgcmVzdW1l
IHRoZSBub3JtYWwgYmVoYXZpb3IgaW4gX3N0YXJ0RXhpdEZ1bGxTY3JlZW5BbmltYXRpb25XaXRo
RHVyYXRpb246Ci0gICAgW193ZWJWaWV3IF9zZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzOllF
U107CisgICAgW193ZWJWaWV3IHdrX3NldFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXM6WUVTXTsK
IAogICAgIFtzZWxmIF9tYW5hZ2VyXS0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbih0cnVlKTsKICAg
ICBbc2VsZiBfbWFuYWdlcl0tPndpbGxFeGl0RnVsbFNjcmVlbigpOwpAQCAtNTgxLDcgKzU4MSw3
IEBAIC0gKHZvaWQpX3N0YXJ0RW50ZXJGdWxsU2NyZWVuQW5pbWF0aW9uV2kKIAogICAgIFtfYmFj
a2dyb3VuZFdpbmRvdy5nZXQoKSBvcmRlcldpbmRvdzpOU1dpbmRvd0JlbG93IHJlbGF0aXZlVG86
W1tzZWxmIHdpbmRvd10gd2luZG93TnVtYmVyXV07CiAKLSAgICBbX3dlYlZpZXcgX3NldFN1cHBy
ZXNzVmlzaWJpbGl0eVVwZGF0ZXM6Tk9dOworICAgIFtfd2ViVmlldyB3a19zZXRTdXBwcmVzc1Zp
c2liaWxpdHlVcGRhdGVzOk5PXTsKICAgICBbW3NlbGYgd2luZG93XSBzZXRBdXRvZGlzcGxheTpZ
RVNdOwogICAgIFtbc2VsZiB3aW5kb3ddIGRpc3BsYXlJZk5lZWRlZF07CiAgICAgTlNFbmFibGVT
Y3JlZW5VcGRhdGVzKCk7CkBAIC02MjYsNyArNjI2LDcgQEAgLSAodm9pZClfc3RhcnRFeGl0RnVs
bFNjcmVlbkFuaW1hdGlvbldpdAogICAgIGZpbmFsQm91bmRzLm9yaWdpbiA9IFtbc2VsZiB3aW5k
b3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6ZmluYWxCb3VuZHMub3JpZ2luXTsKICAgICBXS1dpbmRv
d1NldENsaXBSZWN0KFtzZWxmIHdpbmRvd10sIGZpbmFsQm91bmRzKTsKIAotICAgIFtfd2ViVmll
dyBfc2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlczpOT107CisgICAgW193ZWJWaWV3IHdrX3Nl
dFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXM6Tk9dOwogICAgIFtbc2VsZiB3aW5kb3ddIHNldEF1
dG9kaXNwbGF5OllFU107CiAgICAgW1tzZWxmIHdpbmRvd10gZGlzcGxheUlmTmVlZGVkXTsKICAg
ICBOU0VuYWJsZVNjcmVlblVwZGF0ZXMoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlNYWMubW0J
KHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViRnVs
bFNjcmVlbk1hbmFnZXJQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBA
QCB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhCiAgICAgaWYgKCFtX3dl
YlZpZXcpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBbbV93ZWJWaWV3IGNsb3NlRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXJdOworICAgIFttX3dlYlZpZXcgd2tfY2xvc2VGdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlcl07CiAgICAgbV93ZWJWaWV3ID0gMDsKIH0KIApAQCAtNTAsNDMgKzUw
LDQzIEBAIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6Y2xvc2UoKQogewogICAgIGlm
ICghbV93ZWJWaWV3KQogICAgICAgICByZXR1cm47Ci0gICAgW1ttX3dlYlZpZXcgZnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXJdIGNsb3NlXTsKKyAgICBbW21fd2ViVmlldyB3a19mdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlcl0gY2xvc2VdOwogfQogCiBib29sIFdlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHk6OmlzRnVsbFNjcmVlbigpCiB7CiAgICAgaWYgKCFtX3dlYlZpZXcpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoIVttX3dlYlZpZXcgaGFzRnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXJdKQorICAgIGlmICghW21fd2ViVmlldyB3a19oYXNGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlcl0pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBbW21fd2ViVmlldyBm
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlcl0gaXNGdWxsU2NyZWVuXTsKKyAgICByZXR1cm4gW1tt
X3dlYlZpZXcgd2tfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJdIGlzRnVsbFNjcmVlbl07CiB9
CiAKIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZW50ZXJGdWxsU2NyZWVuKCkKIHsK
ICAgICBpZiAoIW1fd2ViVmlldykKICAgICAgICAgcmV0dXJuOwotICAgIFtbbV93ZWJWaWV3IGZ1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyXSBlbnRlckZ1bGxTY3JlZW46bmlsXTsKKyAgICBbW21f
d2ViVmlldyB3a19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcl0gZW50ZXJGdWxsU2NyZWVuOm5p
bF07CiB9CiAKIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxTY3JlZW4o
KQogewogICAgIGlmICghbV93ZWJWaWV3KQogICAgICAgICByZXR1cm47Ci0gICAgW1ttX3dlYlZp
ZXcgZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJdIGV4aXRGdWxsU2NyZWVuXTsKKyAgICBbW21f
d2ViVmlldyB3a19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcl0gZXhpdEZ1bGxTY3JlZW5dOwog
fQogICAgIAogdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpiZWdhbkVudGVyRnVsbFNj
cmVlbihjb25zdCBJbnRSZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0IEludFJlY3QmIGZpbmFsRnJh
bWUpCiB7CiAgICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgW1ttX3dlYlZpZXcgZnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXJdIGJlZ2FuRW50ZXJGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTpp
bml0aWFsRnJhbWUgZmluYWxGcmFtZTpmaW5hbEZyYW1lXTsKKyAgICAgICAgW1ttX3dlYlZpZXcg
d2tfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJdIGJlZ2FuRW50ZXJGdWxsU2NyZWVuV2l0aElu
aXRpYWxGcmFtZTppbml0aWFsRnJhbWUgZmluYWxGcmFtZTpmaW5hbEZyYW1lXTsKIH0KIAogdm9p
ZCBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpiZWdhbkV4aXRGdWxsU2NyZWVuKGNvbnN0IElu
dFJlY3QmIGluaXRpYWxGcmFtZSwgY29uc3QgSW50UmVjdCYgZmluYWxGcmFtZSkKIHsKICAgICBp
ZiAobV93ZWJWaWV3KQotICAgICAgICBbW21fd2ViVmlldyBmdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlcl0gYmVnYW5FeGl0RnVsbFNjcmVlbldpdGhJbml0aWFsRnJhbWU6aW5pdGlhbEZyYW1lIGZp
bmFsRnJhbWU6ZmluYWxGcmFtZV07CisgICAgICAgIFtbbV93ZWJWaWV3IHdrX2Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyXSBiZWdhbkV4aXRGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTppbml0
aWFsRnJhbWUgZmluYWxGcmFtZTpmaW5hbEZyYW1lXTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168730</attachid>
            <date>2012-10-15 09:44:11 -0700</date>
            <delta_ts>2012-10-15 20:41:01 -0700</delta_ts>
            <desc>Patch, revised based on feedback from Anders and Maciej</desc>
            <filename>bug-99251-20121015094302.patch</filename>
            <type>text/plain</type>
            <size>90519</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTMwOCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MyBAQAorMjAxMi0xMC0xMyAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBzdWJjbGFzc2luZyBvZiBX
S1ZpZXcgc2FmZXIgYnkgbmFtZXNwYWNpbmcgbWV0aG9kcyBhbmQgZWxpbWluYXRpbmcgaXRzIHVz
ZSBhcyBhbiBvYnNlcnZlciBhbmQgZGVsZWdhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MjUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQXBwcyB0aGF0IHN1YmNsYXNzIFdLVmlldyBzaG91bGQgYmUg
YWJsZSB0byBmcmVlbHkgY2hvb3NlIG1ldGhvZCBuYW1lcyB3aXRob3V0IGNvbmZsaWN0aW5nIHdp
dGggYSBuYW1lCisgICAgICAgIHdlIGNob3NlIHRvIHVzZSBpbnRlcm5hbGx5IGluIFdLVmlldydz
IG93biBpbXBsZW1lbnRhdGlvbi4gVGh1cywgaXQncyBhIGdvb2QgaWRlYSB0byBhZGQgYSAiX3dr
XyIgcHJlZml4CisgICAgICAgIHRvIGFueSBtZXRob2QgbmFtZXMgdGhhdCBhcmUgc29sZWx5IGZv
ciBpbnRlcm5hbCBXZWJLaXQyIHVzZS4gRXhjZXB0aW9ucyB0byB0aGlzIGFyZSBtZXRob2QgbmFt
ZXMgdGhhdAorICAgICAgICBhcmUgcHJlZGV0ZXJtaW5lZCBieSBBcHBLaXQsIG9yIG5hbWVzIHRo
YXQgYXJlIHBhcnQgb2YgQVBJIG9yIFNQSS4KKworICAgICAgICBBcHBzIHRoYXQgc3ViY2xhc3Mg
V0tWaWV3IHNob3VsZCBiZSBhYmxlIHRvIGFkZCBvYnNlcnZlcnMgb3IgdXNlIHRoZSBXS1ZpZXcg
YXMgYSBkZWxlZ2F0ZSB3aXRob3V0CisgICAgICAgIGNvbmZsaWN0aW5nIHdpdGggc2ltaWxhciB1
c2UgaW4gdGhlIFdLVmlldyBpbXBsZW1lbnRhdGlvbnMuIFRodXMsIGl0J3MgYSBnb29kIGlkZWEg
dG8gdXNlIGEgc2VwYXJhdGUKKyAgICAgICAgb2JqZWN0IGFzIHRoZSBvYnNlcnZlciBvciBkZWxl
Z2F0ZS4gSSBjaG9zZSB0byB1c2UgdGhlIGV4aXN0aW5nIFdLVmlld0RhdGEgb2JqZWN0IGZvciB0
aGlzLgorCisgICAgICAgIFRoZSBjaGFsbGVuZ2luZyBhc3BlY3Qgb2YgdGhpcyBwYXRjaCB3YXMg
dG8gcmVzZWFyY2ggd2hpY2ggbWV0aG9kIG5hbWVzIHdlcmUgZGV0ZXJtaW5lZCBieSBBcHBLaXQu
CisgICAgICAgIFRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgV2ViS2l0MiBzb3VyY2UgY29kZSB0aGF0
IG5lY2Vzc2FyaWx5IHN0YXRlcyB0aGlzIGV4cGxpY2l0bHkuCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkpOiBVcGRhdGVkIGZvciBuZXcgbWV0aG9kIG5h
bWUuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzY3JvbGxWaWV3KTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1ZpZXdGb2N1c2VkKTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjb2xvclNwYWNlKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpwcm9jZXNzRGlkQ3Jhc2gpOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnBhZ2VDbG9zZWQpOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZFJlbGF1bmNoUHJvY2Vzcyk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6dG9vbFRpcENoYW5nZWQpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNldEN1cnNvcik6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aW50ZXJwcmV0S2V5RXZlbnQpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNldERyYWdJbWFnZSk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0UHJvbWlzZWREYXRhKTogRGl0
dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp1cGRhdGVUZXh0SW5wdXRTdGF0
ZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6cmVzZXRUZXh0SW5w
dXRTdGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y29udmVy
dFRvRGV2aWNlU3BhY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmNvbnZlcnRUb1VzZXJTcGFjZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6ZG9uZVdpdGhLZXlFdmVudCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xp
ZW50SW1wbDo6c2V0RmluZEluZGljYXRvcik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdl
Q2xpZW50SW1wbDo6YWNjZXNzaWJpbGl0eVdlYlByb2Nlc3NUb2tlblJlY2VpdmVkKTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpleGl0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UGFn
ZUNsaWVudEltcGw6OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXND
aGFuZ2VkKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXRQbHVn
aW5Db21wbGV4VGV4dElucHV0U3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNs
aWVudEltcGw6OmRpZENoYW5nZVNjcm9sbGJhcnNGb3JNYWluRnJhbWUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUpOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZEZpbmlzaExvYWRpbmdE
YXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UGFn
ZUNsaWVudEltcGw6OmN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcik6IERpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29t
RmFjdG9yKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpmaW5kU3Ry
aW5nSW5DdXN0b21SZXByZXNlbnRhdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdl
Q2xpZW50SW1wbDo6Y291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbik6IERp
dHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZXhlY3V0ZVNhdmVkQ29tbWFu
ZEJ5U2VsZWN0b3IpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNo
b3dEaWN0YXRpb25BbHRlcm5hdGl2ZVVJKTogRGl0dG8uCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL21hYy9XS1ZpZXcubW06IFNpbXBsaWZpZWQgaW1wb3J0cyBhIGJpdC4gTm8gbmVlZCBmb3Ig
Y29uZGl0aW9uYWwgaW1wb3J0cyBvZiBiYXNpYyBjbGFzc2VzCisgICAgICAgIGxpa2UgTlNUZXh0
QWx0ZXJuYXRpdmVzLmggYW5kIE5TQXR0cmlidXRlZFN0cmluZy5oLiBObyBuZWVkIHRvIHB1dCBp
bnRlcm5hbCBoZWFkZXJzIGluIGEgc2VwYXJhdGUgcGFyYWdyYXBoLgorICAgICAgICBBZGRlZCBh
IGZpZWxkIHRvIFdLVmlld0RhdGEgc28gd2UgY2FuIGdldCBiYWNrIHRvIHRoZSBvd25pbmcgV0tW
aWV3LiBBZGRlZCBjb2RlIHRvIGZvcndhcmQgdGhlIG5vdGlmaWNhdGlvbnMKKyAgICAgICAgZnJv
bSB0aGUgZGF0YSBvYmplY3QgdG8gdGhlIFdLVmlldyBpdHNlbGYuCisgICAgICAgICgtW1dLVmll
d0RhdGEgdmlldzpzdHJpbmdGb3JUb29sVGlwOnBvaW50OnVzZXJEYXRhOl0pOiBBZGRlZC4gQ29u
dGFpbnMgY29kZSB0aGF0IHVzZWQgdG8gYmUgaW4gdGhlIGRlbGVnYXRlCisgICAgICAgIG1ldGhv
ZCBpbiBXS1ZpZXcuCisgICAgICAgICgtW1dLVmlldyBiZWNvbWVGaXJzdFJlc3BvbmRlcl0pOiBV
cGRhdGVkIGZvciBuZXcgbWV0aG9kIG5hbWUuCisgICAgICAgICgtW1dLVmlldyByZXNpZ25GaXJz
dFJlc3BvbmRlcl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHNldEZyYW1lU2l6ZTpdKTog
RGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfdXBkYXRlV2luZG93QW5kVmlld0ZyYW1lc10p
OiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHJlbmV3R1N0YXRlXSk6IERpdHRvLgorICAgICAg
ICAoLVtXS1ZpZXcgX3drX3NldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZTpdKTogRGl0dG8u
CisgICAgICAgICh2YWxpZGF0ZUNvbW1hbmRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAoLVtX
S1ZpZXcgZGlzcGxheUlmTmVlZGVkXSk6IEZpeGVkIGEgY29tbWVudCB0eXBvLgorICAgICAgICAo
LVtXS1ZpZXcgX3drX3NldE1vdXNlRG93bkV2ZW50Ol0pOiBVcGRhdGVkIGZvciBuZXcgbWV0aG9k
IG5hbWUuCisgICAgICAgICgtW1dLVmlldyBtb3VzZURvd246XSk6IERpdHRvLgorICAgICAgICAo
LVtXS1ZpZXcgbW91c2VVcDpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBhY2NlcHRzRmly
c3RNb3VzZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBzaG91bGREZWxheVdpbmRvd09y
ZGVyaW5nRm9yRXZlbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX2hhbmRsZVN0
eWxlS2V5RXF1aXZhbGVudDpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBwZXJmb3JtS2V5
RXF1aXZhbGVudDpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfZGlzYWJsZUNvbXBs
ZXhUZXh0SW5wdXRJZk5lY2Vzc2FyeV0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19o
YW5kbGVQbHVnaW5Db21wbGV4VGV4dElucHV0S2V5RG93bjpdKTogRGl0dG8uCisgICAgICAgICgt
W1dLVmlldyBfd2tfdHJ5SGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd246XSk6IERp
dHRvLgorICAgICAgICAoLVtXS1ZpZXcga2V5RG93bjpdKTogRGl0dG8uCisgICAgICAgICgtW1dL
VmlldyBfd2tfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc10pOiBEaXR0by4KKyAgICAgICAg
KC1bV0tWaWV3IF93a19ub3RpZnlJbnB1dENvbnRleHRBYm91dERpc2NhcmRlZENvbXBvc2l0aW9u
XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgc2VsZWN0ZWRSYW5nZV0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV0tWaWV3IGhhc01hcmtlZFRleHRdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmll
dyB1bm1hcmtUZXh0XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgc2V0TWFya2VkVGV4dDpz
ZWxlY3RlZFJhbmdlOnJlcGxhY2VtZW50UmFuZ2U6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1Zp
ZXcgbWFya2VkUmFuZ2VdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBhdHRyaWJ1dGVkU3Vi
c3RyaW5nRm9yUHJvcG9zZWRSYW5nZTphY3R1YWxSYW5nZTpdKTogRGl0dG8uCisgICAgICAgICgt
W1dLVmlldyBjaGFyYWN0ZXJJbmRleEZvclBvaW50Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tW
aWV3IGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOmFjdHVhbFJhbmdlOl0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV0tWaWV3IF93a191cGRhdGVXaW5kb3dWaXNpYmlsaXR5XSk6IERpdHRvLgorICAg
ICAgICAoLVtXS1ZpZXcgX3drX3VwZGF0ZVdpbmRvd09ic2VydmVyc0ZvcldpbmRvdzpdKTogUmVw
bGFjZWQgdGhlIHR3byBzZXBhcmF0ZSBtZXRob2RzCisgICAgICAgIGFkZFdpbmRvd09ic2VydmVy
c0ZvcldpbmRvdyBhbmQgcmVtb3ZlV2luZG93T2JzZXJ2ZXJzIHdpdGggdGhpcyBzaW5nbGUgbWV0
aG9kLCBzaW5jZQorICAgICAgICB0aGUgdHdvIGFyZSBvbmx5IHVzZWQgaW4gdGFuZGVtLiBDaGFu
Z2VkIGNvZGUgdG8gdXNlIHRoZSBkYXRhIG9iamVjdCBhcyB0aGUgb2JzZXJ2ZXIsCisgICAgICAg
IHdoaWNoIG1hZGUgaXQgcG9zc2libGUgdG8gc2ltcGxpZnkgcmVtb3ZhbCwgc2luY2Ugd2UgY2Fu
IHNpbXBseSByZW1vdmUgdGhlIGRhdGEgb2JqZWN0CisgICAgICAgIGFzIGFuIG9ic2VydmVyIGVu
dGlyZWx5LgorICAgICAgICAoLVtXS1ZpZXcgdmlld1dpbGxNb3ZlVG9XaW5kb3c6XSk6IFVwZGF0
ZWQgdG8gdXNlIF93a191cGRhdGVXaW5kb3dPYnNlcnZlcnNGb3JXaW5kb3cuCisgICAgICAgICgt
W1dLVmlldyB2aWV3RGlkTW92ZVRvV2luZG93XSk6IFVwZGF0ZWQgZm9yIG5ldyBtZXRob2QgbmFt
ZXMuCisgICAgICAgICgtW1dLVmlldyBfd2tfd2luZG93U2NyZWVuRGlkQ2hhbmdlXSk6IERpdHRv
LgorICAgICAgICAoLVtXS1ZpZXcgX3drX3dpbmRvd0RpZEJlY29tZUtleTpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dLVmlldyBfd2tfd2luZG93RGlkQ2hhbmdlU2NyZWVuOl0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV0tWaWV3IF93a193aW5kb3dEaWRSZXNpZ25LZXk6XSk6IERpdHRvLgorICAgICAg
ICAoLVtXS1ZpZXcgX3drX3dpbmRvd0RpZE1pbmlhdHVyaXplOl0pOiBEaXR0by4KKyAgICAgICAg
KC1bV0tWaWV3IF93a193aW5kb3dEaWREZW1pbmlhdHVyaXplOl0pOiBEaXR0by4KKyAgICAgICAg
KC1bV0tWaWV3IF93a193aW5kb3dEaWRNb3ZlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3
IF93a193aW5kb3dEaWRSZXNpemU6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX3dp
bmRvd0RpZE9yZGVyT2ZmU2NyZWVuOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a193
aW5kb3dEaWRPcmRlck9uU2NyZWVuOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a193
aW5kb3dEaWRDaGFuZ2VCYWNraW5nUHJvcGVydGllczpdKTogRGl0dG8uCisgICAgICAgICgtW1dL
VmlldyBkcmF3UmVjdDpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfYWNjZXNzaWJp
bGl0eVJlZ2lzdGVyVUlQcm9jZXNzVG9rZW5zXSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcg
X3drX3VwZGF0ZVJlbW90ZUFjY2Vzc2liaWxpdHlSZWdpc3RyYXRpb246XSk6IERpdHRvLgorICAg
ICAgICAoLVtXS1ZpZXcgX3drX3Bvc3RGYWtlTW91c2VNb3ZlZEV2ZW50Rm9yRmxhZ3NDaGFuZ2Vk
RXZlbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX2ludHJpbnNpY0RldmljZVNj
YWxlRmFjdG9yXSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX3NldERyYXdpbmdBcmVh
U2l6ZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfc2hvdWxkVXNlVGlsZWREcmF3
aW5nQXJlYV0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19jcmVhdGVEcmF3aW5nQXJl
YVByb3h5XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX2lzRm9jdXNlZF0pOiBEaXR0
by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19wcm9jZXNzRGlkQ3Jhc2hdKTogRGl0dG8uCisgICAg
ICAgICgtW1dLVmlldyBfd2tfcGFnZUNsb3NlZF0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3
IF93a19kaWRSZWxhdW5jaFByb2Nlc3NdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tf
c2V0Q3Vyc29yOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19zZXRVc2VySW50ZXJm
YWNlSXRlbVN0YXRlOmVuYWJsZWQ6c3RhdGU6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcg
X3drX3RyeVBvc3RQcm9jZXNzUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd246XSk6IERpdHRv
LgorICAgICAgICAoLVtXS1ZpZXcgX3drX2RvbmVXaXRoS2V5RXZlbnQ6ZXZlbnRXYXNIYW5kbGVk
Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19pbnRlcnByZXRLZXlFdmVudDpzYXZp
bmdDb21tYW5kc1RvOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19jb252ZXJ0VG9E
ZXZpY2VTcGFjZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfY29udmVydFRvVXNl
clNwYWNlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19hZGRUcmFja2luZ1JlY3Q6
b3duZXI6dXNlckRhdGE6YXNzdW1lSW5zaWRlOnVzZVRyYWNraW5nTnVtOl0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV0tWaWV3IF93a19hZGRUcmFja2luZ1JlY3RzOm93bmVyOnVzZXJEYXRhTGlzdDph
c3N1bWVJbnNpZGVMaXN0OnRyYWNraW5nTnVtczpjb3VudDpdKTogRGl0dG8uCisgICAgICAgICgt
W1dLVmlldyBfd2tfcmVtb3ZlVHJhY2tpbmdSZWN0czpjb3VudDpdKTogRGl0dG8uCisgICAgICAg
ICgtW1dLVmlldyBfd2tfc2VuZFRvb2xUaXBNb3VzZUV4aXRlZF0pOiBEaXR0by4KKyAgICAgICAg
KC1bV0tWaWV3IF93a19zZW5kVG9vbFRpcE1vdXNlRW50ZXJlZF0pOiBEaXR0by4KKyAgICAgICAg
KC1bV0tWaWV3IF93a190b29sVGlwQ2hhbmdlZEZyb206dG86XSk6IENoYW5nZWQgdG8gdXNlIHRo
ZSBkYXRhIG9iamVjdCBhcyB0aGUgdG9vbCB0aXAgb3duZXIgc28KKyAgICAgICAgdGhlIGRlbGVn
YXRlIG1ldGhvZCBjYW4gYmUgdGhlcmUgcmF0aGVyIHRoYW4gb24gV0tWaWV3LgorICAgICAgICAo
LVtXS1ZpZXcgX3drX3NldEZpbmRJbmRpY2F0b3I6ZmFkZU91dDphbmltYXRlOl0pOiBVcGRhdGVk
IGZvciBuZXcgbWV0aG9kIG5hbWVzLgorICAgICAgICAoLVtXS1ZpZXcgX3drX2VudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGU6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX2V4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZV0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3
IF93a191cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZTpdKTogRGl0dG8uCisgICAgICAg
ICgtW1dLVmlldyBfd2tfc2V0QWNjZXNzaWJpbGl0eVdlYlByb2Nlc3NUb2tlbjpdKTogRGl0dG8u
CisgICAgICAgICgtW1dLVmlldyBfd2tfcGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZDpw
bHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcjpdKTogRGl0dG8uCisgICAgICAgICgtW1dL
VmlldyBfd2tfc2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlOnBsdWdpbkNvbXBsZXhUZXh0
SW5wdXRJZGVudGlmaWVyOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19zZXRQYWdl
SGFzQ3VzdG9tUmVwcmVzZW50YXRpb246XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3dr
X2RpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb25XaXRoU3VnZ2VzdGVk
RmlsZW5hbWU6ZGF0YVJlZmVyZW5jZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tf
Y3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yXSk6IERpdHRvLgorICAgICAgICAoLVtXS1Zp
ZXcgX3drX3NldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcjpdKTogRGl0dG8uCisgICAg
ICAgICgtW1dLVmlldyBfd2tfZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb246d2l0aEZp
bmRPcHRpb25zOm1heE1hdGNoQ291bnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3dr
X2NvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb246d2l0aEZpbmRPcHRpb25z
Om1heE1hdGNoQ291bnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX3NldERyYWdJ
bWFnZTphdDpsaW5rRHJhZzpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfc2V0UHJv
bWlzZWREYXRhOndpdGhGaWxlTmFtZTp3aXRoRXh0ZW5zaW9uOndpdGhUaXRsZTp3aXRoVVJMOndp
dGhWaXNpYmxlVVJMOndpdGhBcmNoaXZlOmZvclBhc3RlYm9hcmQ6XSk6IERpdHRvLgorICAgICAg
ICAoLVtXS1ZpZXcgX3drX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGVdKTogRGl0dG8uCisgICAgICAg
ICgtW1dLVmlldyBfd2tfdXBkYXRlVGV4dElucHV0U3RhdGVJbmNsdWRpbmdTZWN1cmVJbnB1dFN0
YXRlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19yZXNldFRleHRJbnB1dFN0YXRl
XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX2RpZENoYW5nZVNjcm9sbGJhcnNGb3JN
YWluRnJhbWVdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfaGFzRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXJdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfZnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXJdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfY2xvc2VG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlcl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93
a19leGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3RvcjpdKTogRGl0dG8uCisgICAgICAgICgtW1dL
VmlldyBfd2tfY2FjaGVXaW5kb3dCb3R0b21Db3JuZXJSZWN0XSk6IERpdHRvLgorICAgICAgICAo
LVtXS1ZpZXcgX3drX3NwZWxsQ2hlY2tlckRvY3VtZW50VGFnXSk6IERpdHRvLgorICAgICAgICAo
LVtXS1ZpZXcgX3drX2hhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmVUZXh0Ol0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV0tWaWV3IF93a19zZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzOl0pOiBEaXR0
by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19zdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzXSk6IERp
dHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX3JlZ2lzdGVyRHJhZ2dlZFR5cGVzXSk6IERpdHRv
LgorICAgICAgICAoLVtXS1ZpZXcgaW5pdFdpdGhGcmFtZTpjb250ZXh0UmVmOnBhZ2VHcm91cFJl
ZjpyZWxhdGVkVG9QYWdlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHdhbnRzVXBkYXRl
TGF5ZXJdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBlbmFibGVGcmFtZVNpemVVcGRhdGVz
XSk6IERpdHRvLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwu
aDogQ2hhbmdlZCBhbGwgaW50ZXJuYWwgbWV0aG9kIG5hbWVzIHRvIGhhdmUgYSB3ayBwcmVmaXgu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3UHJpdmF0ZS5oOiBFeHBvc2UgdGhl
IF9zaG91bGRVc2VUaWxlZERyYXdpbmdBcmVhIG1ldGhvZCBmb3JtYWxseSBhcyBTUEkKKyAgICAg
ICAgc2luY2UgU2FmYXJpIGlzIGN1cnJlbnRseSBvdmVycmlkaW5nIHRoaXMgbWV0aG9kLgorCisg
ICAgICAgICogVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwubW06CisgICAgICAgIChXZWJL
aXQ6OkNvcnJlY3Rpb25QYW5lbDo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZSk6IFVwZGF0
ZWQgZm9yIG5ldyBtZXRob2QgbmFtZXMuCisgICAgICAgIChXZWJLaXQ6OkNvcnJlY3Rpb25QYW5l
bDo6aGFuZGxlQWNjZXB0ZWRSZXBsYWNlbWVudCk6IERpdHRvLgorCisgICAgICAgICogVUlQcm9j
ZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tOgorICAgICAgICAoLVtXS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGVudGVyRnVsbFNjcmVlbjpdKTogVXBkYXRlZCBmb3Ig
bmV3IG1ldGhvZCBuYW1lcy4KKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
ciBleGl0RnVsbFNjcmVlbl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlciBfc3RhcnRFbnRlckZ1bGxTY3JlZW5BbmltYXRpb25XaXRoRHVyYXRpb246XSk6
IERpdHRvLgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9zdGFydEV4
aXRGdWxsU2NyZWVuQW5pbWF0aW9uV2l0aER1cmF0aW9uOl0pOiBEaXR0by4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9tYWMvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eU1hYy5tbToKKyAgICAgICAg
KFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSk6IFVwZGF0ZWQg
Zm9yIG5ldyBtZXRob2QgbmFtZXMuCisgICAgICAgIChXZWJLaXQ6OldlYkZ1bGxTY3JlZW5NYW5h
Z2VyUHJveHk6OmNsb3NlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkZ1bGxTY3JlZW5N
YW5hZ2VyUHJveHk6OmlzRnVsbFNjcmVlbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJG
dWxsU2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxTY3JlZW4pOiBEaXR0by4KKyAgICAgICAg
KFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxTY3JlZW4pOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6YmVnYW5FbnRl
ckZ1bGxTY3JlZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFn
ZXJQcm94eTo6YmVnYW5FeGl0RnVsbFNjcmVlbik6IERpdHRvLgorCiAyMDEyLTEwLTEzICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdIEFkZCBTaGFy
ZWRXb3JrZXJQcm9jZXNzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9Q
YWdlQ2xpZW50SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkocmV2aXNpb24gMTMxMzA4KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHdvcmtpbmcgY29weSkK
QEAgLTEzOSw3ICsxMzksNyBAQCBQYWdlQ2xpZW50SW1wbDo6flBhZ2VDbGllbnRJbXBsKCkKIAog
UGFzc093blB0cjxEcmF3aW5nQXJlYVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlRHJhd2lu
Z0FyZWFQcm94eSgpCiB7Ci0gICAgcmV0dXJuIFttX3drVmlldyBfY3JlYXRlRHJhd2luZ0FyZWFQ
cm94eV07CisgICAgcmV0dXJuIFttX3drVmlldyBfd2tfY3JlYXRlRHJhd2luZ0FyZWFQcm94eV07
CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OnNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgcmVjdCkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpzY3JvbGxWaWV3KGNvbnN0IEluCiB7CiAgICAgTlNSZWN0IGNsaXBwZWRTY3JvbGxSZWN0
ID0gTlNJbnRlcnNlY3Rpb25SZWN0KHNjcm9sbFJlY3QsIE5TT2Zmc2V0UmVjdChzY3JvbGxSZWN0
LCAtc2Nyb2xsT2Zmc2V0LndpZHRoKCksIC1zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpKTsKIAotICAg
IFttX3drVmlldyBfY2FjaGVXaW5kb3dCb3R0b21Db3JuZXJSZWN0XTsKKyAgICBbbV93a1ZpZXcg
X3drX2NhY2hlV2luZG93Qm90dG9tQ29ybmVyUmVjdF07CiAKICAgICBbbV93a1ZpZXcgdHJhbnNs
YXRlUmVjdHNOZWVkaW5nRGlzcGxheUluUmVjdDpjbGlwcGVkU2Nyb2xsUmVjdCBieTpzY3JvbGxP
ZmZzZXRdOwogICAgIFttX3drVmlldyBzY3JvbGxSZWN0OmNsaXBwZWRTY3JvbGxSZWN0IGJ5OnNj
cm9sbE9mZnNldF07CkBAIC0xNzQsNyArMTc0LDcgQEAgYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNW
aWV3V2luZG93QWN0aXZlKAogCiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdGb2N1c2VkKCkK
IHsKLSAgICByZXR1cm4gW21fd2tWaWV3IF9pc0ZvY3VzZWRdOworICAgIHJldHVybiBbbV93a1Zp
ZXcgX3drX2lzRm9jdXNlZF07CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6Om1ha2VGaXJzdFJl
c3BvbmRlcigpCkBAIC0yMjAsMTcgKzIyMCwxNyBAQCBMYXllckhvc3RpbmdNb2RlIFBhZ2VDbGll
bnRJbXBsOjp2aWV3TGF5CiAKIENvbG9yU3BhY2VEYXRhIFBhZ2VDbGllbnRJbXBsOjpjb2xvclNw
YWNlKCkKIHsKLSAgICByZXR1cm4gW21fd2tWaWV3IF9jb2xvclNwYWNlXTsKKyAgICByZXR1cm4g
W21fd2tWaWV3IF93a19jb2xvclNwYWNlXTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6cHJv
Y2Vzc0RpZENyYXNoKCkKIHsKLSAgICBbbV93a1ZpZXcgX3Byb2Nlc3NEaWRDcmFzaF07CisgICAg
W21fd2tWaWV3IF93a19wcm9jZXNzRGlkQ3Jhc2hdOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBs
OjpwYWdlQ2xvc2VkKCkKIHsKLSAgICBbbV93a1ZpZXcgX3BhZ2VDbG9zZWRdOworICAgIFttX3dr
VmlldyBfd2tfcGFnZUNsb3NlZF07CiAjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCiAg
ICAgbV9hbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXItPmNsZWFyKCk7CiAjZW5kaWYKQEAgLTIz
OCwxOCArMjM4LDE4IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnBhZ2VDbG9zZWQoKQogCiB2b2lk
IFBhZ2VDbGllbnRJbXBsOjpkaWRSZWxhdW5jaFByb2Nlc3MoKQogewotICAgIFttX3drVmlldyBf
ZGlkUmVsYXVuY2hQcm9jZXNzXTsKKyAgICBbbV93a1ZpZXcgX3drX2RpZFJlbGF1bmNoUHJvY2Vz
c107CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OnRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmlu
ZyYgb2xkVG9vbFRpcCwgY29uc3QgU3RyaW5nJiBuZXdUb29sVGlwKQogewotICAgIFttX3drVmll
dyBfdG9vbFRpcENoYW5nZWRGcm9tOm5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcob2xkVG9vbFRp
cCkgdG86bnNTdHJpbmdGcm9tV2ViQ29yZVN0cmluZyhuZXdUb29sVGlwKV07CisgICAgW21fd2tW
aWV3IF93a190b29sVGlwQ2hhbmdlZEZyb206bnNTdHJpbmdGcm9tV2ViQ29yZVN0cmluZyhvbGRU
b29sVGlwKSB0bzpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKG5ld1Rvb2xUaXApXTsKIH0KIAog
dm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYgY3Vy
c29yKQogewogICAgIGlmICghW05TQXBwIF9jdXJzb3JSZWN0Q3Vyc29yXSkKLSAgICAgICAgW21f
d2tWaWV3IF9zZXRDdXJzb3I6Y3Vyc29yLnBsYXRmb3JtQ3Vyc29yKCldOworICAgICAgICBbbV93
a1ZpZXcgX3drX3NldEN1cnNvcjpjdXJzb3IucGxhdGZvcm1DdXJzb3IoKV07CiB9CiAKIHZvaWQg
UGFnZUNsaWVudEltcGw6OnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sIGhpZGRl
blVudGlsTW91c2VNb3ZlcykKQEAgLTI5MSw3ICsyOTEsNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBs
OjpleGVjdXRlVW5kb1JlZG8oV2ViCiAKIGJvb2wgUGFnZUNsaWVudEltcGw6OmludGVycHJldEtl
eUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50LCBWZWN0b3I8V2ViQ29y
ZTo6S2V5cHJlc3NDb21tYW5kPiYgY29tbWFuZHMpCiB7Ci0gICAgcmV0dXJuIFttX3drVmlldyBf
aW50ZXJwcmV0S2V5RXZlbnQ6ZXZlbnQubmF0aXZlRXZlbnQoKSBzYXZpbmdDb21tYW5kc1RvOmNv
bW1hbmRzXTsKKyAgICByZXR1cm4gW21fd2tWaWV3IF93a19pbnRlcnByZXRLZXlFdmVudDpldmVu
dC5uYXRpdmVFdmVudCgpIHNhdmluZ0NvbW1hbmRzVG86Y29tbWFuZHNdOwogfQogCiB2b2lkIFBh
Z2VDbGllbnRJbXBsOjpzZXREcmFnSW1hZ2UoY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9u
LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlLCBib29sIGlzTGlua0RyYWcp
CkBAIC0yOTksMzQgKzI5OSwzNCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXREcmFnSW1hZ2Uo
Y29uc3QgCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGRyYWdDR0ltYWdlID0gZHJhZ0ltYWdl
LT5tYWtlQ0dJbWFnZSgpOwogICAgIFJldGFpblB0cjxOU0ltYWdlPiBkcmFnTlNJbWFnZShBZG9w
dE5TLCBbW05TSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpkcmFnQ0dJbWFnZS5nZXQoKSBz
aXplOmRyYWdJbWFnZS0+c2l6ZSgpXSk7CiAKLSAgICBbbV93a1ZpZXcgX3NldERyYWdJbWFnZTpk
cmFnTlNJbWFnZS5nZXQoKSBhdDpjbGllbnRQb3NpdGlvbiBsaW5rRHJhZzppc0xpbmtEcmFnXTsK
KyAgICBbbV93a1ZpZXcgX3drX3NldERyYWdJbWFnZTpkcmFnTlNJbWFnZS5nZXQoKSBhdDpjbGll
bnRQb3NpdGlvbiBsaW5rRHJhZzppc0xpbmtEcmFnXTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1w
bDo6c2V0UHJvbWlzZWREYXRhKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBpbWFnZUJ1ZmZlciwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29u
c3QgU3RyaW5nJiBleHRlbnNpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIHZpc2libGVVcmwsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBh
cmNoaXZlQnVmZmVyKQogewogICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFnZTo6
Y3JlYXRlKCk7CiAgICAgaW1hZ2UtPnNldERhdGEoaW1hZ2VCdWZmZXIuZ2V0KCksIHRydWUpOwot
ICAgIFttX3drVmlldyBfc2V0UHJvbWlzZWREYXRhOmltYWdlLmdldCgpIHdpdGhGaWxlTmFtZTpm
aWxlbmFtZSB3aXRoRXh0ZW5zaW9uOmV4dGVuc2lvbiB3aXRoVGl0bGU6dGl0bGUgd2l0aFVSTDp1
cmwgd2l0aFZpc2libGVVUkw6dmlzaWJsZVVybCB3aXRoQXJjaGl2ZTphcmNoaXZlQnVmZmVyLmdl
dCgpIGZvclBhc3RlYm9hcmQ6cGFzdGVib2FyZE5hbWVdOworICAgIFttX3drVmlldyBfd2tfc2V0
UHJvbWlzZWREYXRhOmltYWdlLmdldCgpIHdpdGhGaWxlTmFtZTpmaWxlbmFtZSB3aXRoRXh0ZW5z
aW9uOmV4dGVuc2lvbiB3aXRoVGl0bGU6dGl0bGUgd2l0aFVSTDp1cmwgd2l0aFZpc2libGVVUkw6
dmlzaWJsZVVybCB3aXRoQXJjaGl2ZTphcmNoaXZlQnVmZmVyLmdldCgpIGZvclBhc3RlYm9hcmQ6
cGFzdGVib2FyZE5hbWVdOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVUZXh0SW5w
dXRTdGF0ZShib29sIHVwZGF0ZVNlY3VyZUlucHV0U3RhdGUpCiB7Ci0gICAgW21fd2tWaWV3IF91
cGRhdGVUZXh0SW5wdXRTdGF0ZUluY2x1ZGluZ1NlY3VyZUlucHV0U3RhdGU6dXBkYXRlU2VjdXJl
SW5wdXRTdGF0ZV07CisgICAgW21fd2tWaWV3IF93a191cGRhdGVUZXh0SW5wdXRTdGF0ZUluY2x1
ZGluZ1NlY3VyZUlucHV0U3RhdGU6dXBkYXRlU2VjdXJlSW5wdXRTdGF0ZV07CiB9CiAKIHZvaWQg
UGFnZUNsaWVudEltcGw6OnJlc2V0VGV4dElucHV0U3RhdGUoKQogewotICAgIFttX3drVmlldyBf
cmVzZXRUZXh0SW5wdXRTdGF0ZV07CisgICAgW21fd2tWaWV3IF93a19yZXNldFRleHRJbnB1dFN0
YXRlXTsKIH0KIAogRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9EZXZpY2VTcGFj
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIFttX3drVmlldyBfY29udmVy
dFRvRGV2aWNlU3BhY2U6cmVjdF07CisgICAgcmV0dXJuIFttX3drVmlldyBfd2tfY29udmVydFRv
RGV2aWNlU3BhY2U6cmVjdF07CiB9CiAKIEZsb2F0UmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVy
dFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gW21fd2tW
aWV3IF9jb252ZXJ0VG9Vc2VyU3BhY2U6cmVjdF07CisgICAgcmV0dXJuIFttX3drVmlldyBfd2tf
Y29udmVydFRvVXNlclNwYWNlOnJlY3RdOwogfQogICAgCiBJbnRQb2ludCBQYWdlQ2xpZW50SW1w
bDo6c2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50KQpAQCAtMzUyLDcgKzM1Miw3
IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoR2VzdHVyZUV2ZW4KIAogdm9pZCBQYWdl
Q2xpZW50SW1wbDo6ZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50
JiBldmVudCwgYm9vbCBldmVudFdhc0hhbmRsZWQpCiB7Ci0gICAgW21fd2tWaWV3IF9kb25lV2l0
aEtleUV2ZW50OmV2ZW50Lm5hdGl2ZUV2ZW50KCkgZXZlbnRXYXNIYW5kbGVkOmV2ZW50V2FzSGFu
ZGxlZF07CisgICAgW21fd2tWaWV3IF93a19kb25lV2l0aEtleUV2ZW50OmV2ZW50Lm5hdGl2ZUV2
ZW50KCkgZXZlbnRXYXNIYW5kbGVkOmV2ZW50V2FzSGFuZGxlZF07CiB9CiAKIFBhc3NSZWZQdHI8
V2ViUG9wdXBNZW51UHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVQb3B1cE1lbnVQcm94eShX
ZWJQYWdlUHJveHkqIHBhZ2UpCkBAIC0zNzUsNDAgKzM3NSw0MCBAQCBQYXNzUmVmUHRyPFdlYkNv
bG9yQ2hvb3NlclByb3h5PiBQYWdlQ2xpCiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OnNldEZpbmRJ
bmRpY2F0b3IoUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiBmaW5kSW5kaWNhdG9yLCBib29sIGZh
ZGVPdXQsIGJvb2wgYW5pbWF0ZSkKIHsKLSAgICBbbV93a1ZpZXcgX3NldEZpbmRJbmRpY2F0b3I6
ZmluZEluZGljYXRvciBmYWRlT3V0OmZhZGVPdXQgYW5pbWF0ZTphbmltYXRlXTsKKyAgICBbbV93
a1ZpZXcgX3drX3NldEZpbmRJbmRpY2F0b3I6ZmluZEluZGljYXRvciBmYWRlT3V0OmZhZGVPdXQg
YW5pbWF0ZTphbmltYXRlXTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6YWNjZXNzaWJpbGl0
eVdlYlByb2Nlc3NUb2tlblJlY2VpdmVkKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmIGRh
dGEpCiB7Ci0gICAgTlNEYXRhKiByZW1vdGVUb2tlbiA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczpk
YXRhLmRhdGEoKSBsZW5ndGg6ZGF0YS5zaXplKCldOwotICAgIFttX3drVmlldyBfc2V0QWNjZXNz
aWJpbGl0eVdlYlByb2Nlc3NUb2tlbjpyZW1vdGVUb2tlbl07CisgICAgTlNEYXRhICpyZW1vdGVU
b2tlbiA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczpkYXRhLmRhdGEoKSBsZW5ndGg6ZGF0YS5zaXpl
KCldOworICAgIFttX3drVmlldyBfd2tfc2V0QWNjZXNzaWJpbGl0eVdlYlByb2Nlc3NUb2tlbjpy
ZW1vdGVUb2tlbl07CiB9CiAgICAgCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
dm9pZCBQYWdlQ2xpZW50SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25z
dCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KQogewotICAgIFttX3drVmlldyBf
ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZTpsYXllclRyZWVDb250ZXh0XTsKKyAgICBb
bV93a1ZpZXcgX3drX2VudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGU6bGF5ZXJUcmVlQ29u
dGV4dF07CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSgpCiB7Ci0gICAgW21fd2tWaWV3IF9leGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGVdOworICAgIFttX3drVmlldyBfd2tfZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlXTsK
IH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCkKIHsKLSAgICBbbV93
a1ZpZXcgX3VwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlOmxheWVyVHJlZUNvbnRleHRd
OworICAgIFttX3drVmlldyBfd2tfdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGU6bGF5
ZXJUcmVlQ29udGV4dF07CiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2Vk
KHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBib29sIHBsdWdpbkhh
c0ZvY3VzQW5kV2luZG93SGFzRm9jdXMpCiB7Ci0gICAgW21fd2tWaWV3IF9wbHVnaW5Gb2N1c09y
V2luZG93Rm9jdXNDaGFuZ2VkOnBsdWdpbkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMgcGx1Z2lu
Q29tcGxleFRleHRJbnB1dElkZW50aWZpZXI6cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZp
ZXJdOworICAgIFttX3drVmlldyBfd2tfcGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZDpw
bHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3VzIHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVu
dGlmaWVyOnBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyXTsKIH0KIAogdm9pZCBQYWdl
Q2xpZW50SW1wbDo6c2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKHVpbnQ2NF90IHBsdWdp
bkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUg
cGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKQogewotICAgIFttX3drVmlldyBfc2V0UGx1Z2lu
Q29tcGxleFRleHRJbnB1dFN0YXRlOnBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSBwbHVnaW5D
b21wbGV4VGV4dElucHV0SWRlbnRpZmllcjpwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmll
cl07CisgICAgW21fd2tWaWV3IF93a19zZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGU6cGx1
Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlIHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVy
OnBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyXTsKIH0KIAogQ0dDb250ZXh0UmVmIFBh
Z2VDbGllbnRJbXBsOjpjb250YWluaW5nV2luZG93R3JhcGhpY3NDb250ZXh0KCkKQEAgLTQyNCwz
NyArNDI0LDM3IEBAIENHQ29udGV4dFJlZiBQYWdlQ2xpZW50SW1wbDo6Y29udGFpbmluZ1cKIAog
dm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ2hhbmdlU2Nyb2xsYmFyc0Zvck1haW5GcmFtZSgpIGNv
bnN0CiB7Ci0gICAgW21fd2tWaWV3IF9kaWRDaGFuZ2VTY3JvbGxiYXJzRm9yTWFpbkZyYW1lXTsK
KyAgICBbbV93a1ZpZXcgX3drX2RpZENoYW5nZVNjcm9sbGJhcnNGb3JNYWluRnJhbWVdOwogfQog
CiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNl
Q3VzdG9tUmVwcmVzZW50YXRpb24pCiB7Ci0gICAgW21fd2tWaWV3IF9zZXRQYWdlSGFzQ3VzdG9t
UmVwcmVzZW50YXRpb246dXNlQ3VzdG9tUmVwcmVzZW50YXRpb25dOworICAgIFttX3drVmlldyBf
d2tfc2V0UGFnZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uOnVzZUN1c3RvbVJlcHJlc2VudGF0aW9u
XTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0
b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBD
b3JlSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhUmVmZXJlbmNlKQogewotICAgIFttX3drVmlldyBf
ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbldpdGhTdWdnZXN0ZWRG
aWxlbmFtZTpzdWdnZXN0ZWRGaWxlbmFtZSBkYXRhUmVmZXJlbmNlOmRhdGFSZWZlcmVuY2VdOwor
ICAgIFttX3drVmlldyBfd2tfZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRh
dGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZTpzdWdnZXN0ZWRGaWxlbmFtZSBkYXRhUmVmZXJlbmNl
OmRhdGFSZWZlcmVuY2VdOwogfQogCiBkb3VibGUgUGFnZUNsaWVudEltcGw6OmN1c3RvbVJlcHJl
c2VudGF0aW9uWm9vbUZhY3RvcigpCiB7Ci0gICAgcmV0dXJuIFttX3drVmlldyBfY3VzdG9tUmVw
cmVzZW50YXRpb25ab29tRmFjdG9yXTsKKyAgICByZXR1cm4gW21fd2tWaWV3IF93a19jdXN0b21S
ZXByZXNlbnRhdGlvblpvb21GYWN0b3JdOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRD
dXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoZG91YmxlIHpvb21GYWN0b3IpCiB7Ci0gICAg
W21fd2tWaWV3IF9zZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3I6em9vbUZhY3Rvcl07
CisgICAgW21fd2tWaWV3IF93a19zZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3I6em9v
bUZhY3Rvcl07CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmZpbmRTdHJpbmdJbkN1c3RvbVJl
cHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1
bnNpZ25lZCBtYXhNYXRjaENvdW50KQogewotICAgIFttX3drVmlldyBfZmluZFN0cmluZ0luQ3Vz
dG9tUmVwcmVzZW50YXRpb246c3RyaW5nIHdpdGhGaW5kT3B0aW9uczpvcHRpb25zIG1heE1hdGNo
Q291bnQ6bWF4TWF0Y2hDb3VudF07CisgICAgW21fd2tWaWV3IF93a19maW5kU3RyaW5nSW5DdXN0
b21SZXByZXNlbnRhdGlvbjpzdHJpbmcgd2l0aEZpbmRPcHRpb25zOm9wdGlvbnMgbWF4TWF0Y2hD
b3VudDptYXhNYXRjaENvdW50XTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6Y291bnRTdHJp
bmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHN0cmluZywgRmlu
ZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKIHsKLSAgICBbbV93a1Zp
ZXcgX2NvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb246c3RyaW5nIHdpdGhG
aW5kT3B0aW9uczpvcHRpb25zIG1heE1hdGNoQ291bnQ6bWF4TWF0Y2hDb3VudF07CisgICAgW21f
d2tWaWV3IF93a19jb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uOnN0cmlu
ZyB3aXRoRmluZE9wdGlvbnM6b3B0aW9ucyBtYXhNYXRjaENvdW50Om1heE1hdGNoQ291bnRdOwog
fQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpmbGFzaEJhY2tpbmdTdG9yZVVwZGF0ZXMoY29uc3Qg
VmVjdG9yPEludFJlY3Q+JikKQEAgLTU1NSwxMCArNTU1LDExIEBAIHZvaWQgUGFnZUNsaWVudElt
cGw6OnJlY29tbWVuZGVkU2Nyb2xsYmEKIAogYm9vbCBQYWdlQ2xpZW50SW1wbDo6ZXhlY3V0ZVNh
dmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvclN0cmluZykKIHsKLSAg
ICByZXR1cm4gW21fd2tWaWV3IF9leGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3RvcjpOU1NlbGVj
dG9yRnJvbVN0cmluZyhzZWxlY3RvclN0cmluZyldOworICAgIHJldHVybiBbbV93a1ZpZXcgX3dr
X2V4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yOk5TU2VsZWN0b3JGcm9tU3RyaW5nKHNlbGVj
dG9yU3RyaW5nKV07CiB9CiAKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKwogdWlu
dDY0X3QgUGFnZUNsaWVudEltcGw6OmFkZERpY3RhdGlvbkFsdGVybmF0aXZlcyhjb25zdCBSZXRh
aW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiYgYWx0ZXJuYXRpdmVzKQogewogICAgIHJldHVybiBt
X2FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci0+YWRkQWx0ZXJuYXRpdmVzKGFsdGVybmF0aXZl
cyk7CkBAIC01NzQsNyArNTc1LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd0RpY3RhdGlv
bkFsdGVybgogICAgIGlmICghaXNWaWV3VmlzaWJsZSgpIHx8ICFpc1ZpZXdJbldpbmRvdygpKQog
ICAgICAgICByZXR1cm47CiAgICAgbV9hbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXItPnNob3dB
bHRlcm5hdGl2ZXMobV93a1ZpZXcsIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIGRpY3RhdGlv
bkNvbnRleHQsIF4oTlNTdHJpbmcqIGFjY2VwdGVkQWx0ZXJuYXRpdmUpewotICAgICAgICBbbV93
a1ZpZXcgaGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZVRleHQ6YWNjZXB0ZWRBbHRlcm5hdGl2ZV07
CisgICAgICAgIFttX3drVmlldyBfd2tfaGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZVRleHQ6YWNj
ZXB0ZWRBbHRlcm5hdGl2ZV07CiAgICAgfSk7CiB9CiAKQEAgLTU4Nyw2ICs1ODgsNyBAQCB2b2lk
IFBhZ2VDbGllbnRJbXBsOjpkaXNtaXNzRGljdGF0aW9uQWx0CiB7CiAgICAgbV9hbHRlcm5hdGl2
ZVRleHRVSUNvbnRyb2xsZXItPmRpc21pc3NBbHRlcm5hdGl2ZXMoKTsKIH0KKwogI2VuZGlmCiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24gMTMxMzA4KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwx
MSArMjYsNiBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJXS1ZpZXcuaCIKIAotI2lm
IFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQotI2ltcG9ydCA8QXBwS2l0L05TVGV4dEFsdGVy
bmF0aXZlcy5oPgotI2ltcG9ydCA8QXBwS2l0L05TQXR0cmlidXRlZFN0cmluZy5oPgotI2VuZGlm
Ci0KICNpbXBvcnQgIkF0dHJpYnV0ZWRTdHJpbmcuaCIKICNpbXBvcnQgIkNvbG9yU3BhY2VEYXRh
LmgiCiAjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCkBAIC01MSw4ICs0NiwxMSBAQAogI2ltcG9y
dCAiVGV4dENoZWNrZXJTdGF0ZS5oIgogI2ltcG9ydCAiVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWFQcm94eS5oIgogI2ltcG9ydCAiV0tBUElDYXN0LmgiCisjaW1wb3J0ICJXS0Jyb3dzaW5n
Q29udGV4dENvbnRyb2xsZXJJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tCcm93c2luZ0NvbnRleHRH
cm91cEludGVybmFsLmgiCiAjaW1wb3J0ICJXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgi
CiAjaW1wb3J0ICJXS1ByaW50aW5nVmlldy5oIgorI2ltcG9ydCAiV0tQcm9jZXNzR3JvdXBJbnRl
cm5hbC5oIgogI2ltcG9ydCAiV0tTdHJpbmdDRi5oIgogI2ltcG9ydCAiV0tUZXh0SW5wdXRXaW5k
b3dDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgpAQCAtNjQsMTEgKzYy
LDE0IEBACiAjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQcm94
eS5oIgogI2ltcG9ydCAiV2ViU3lzdGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0IDxBcHBLaXQvTlNB
dHRyaWJ1dGVkU3RyaW5nLmg+CisjaW1wb3J0IDxBcHBLaXQvTlNUZXh0QWx0ZXJuYXRpdmVzLmg+
CiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29s
b3JNYWMuaD4KICNpbXBvcnQgPFdlYkNvcmUvRHJhZ0NvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRHJhZ0RhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUvRHJhZ1Nlc3Npb24uaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvSW1hZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvSW50UmVjdC5oPgpA
QCAtODEsMTggKzgyLDExIEBACiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2lt
cG9ydCA8V2ViQ29yZS9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNv
cmUvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZpbGVTeXN0ZW0u
aD4KICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2ltcG9ydCA8c3lzL3N0YXQu
aD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAot
LyogQVBJIGludGVybmFscy4gKi8KLSNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxl
ckludGVybmFsLmgiCi0jaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dEdyb3VwSW50ZXJuYWwuaCIK
LSNpbXBvcnQgIldLUHJvY2Vzc0dyb3VwSW50ZXJuYWwuaCIKLQotCiBAaW50ZXJmYWNlIE5TQXBw
bGljYXRpb24gKFdLTlNBcHBsaWNhdGlvbkRldGFpbHMpCiAtICh2b2lkKXNwZWFrU3RyaW5nOihO
U1N0cmluZyAqKXN0cmluZzsKIC0gKHZvaWQpX3NldEN1cnJlbnRFdmVudDooTlNFdmVudCAqKWV2
ZW50OwpAQCAtMTM0LDE3ICsxMjgsMTggQEAgc3RydWN0IFdLVmlld0ludGVycHJldEtleUV2ZW50
c1BhcmFtZXRlcgogfTsKIAogQGludGVyZmFjZSBXS1ZpZXcgKCkKLS0gKHZvaWQpX2FjY2Vzc2li
aWxpdHlSZWdpc3RlclVJUHJvY2Vzc1Rva2VuczsKLS0gKHZvaWQpX2Rpc2FibGVDb21wbGV4VGV4
dElucHV0SWZOZWNlc3Nhcnk7Ci0tIChmbG9hdClfaW50cmluc2ljRGV2aWNlU2NhbGVGYWN0b3I7
Ci0tICh2b2lkKV9wb3N0RmFrZU1vdXNlTW92ZWRFdmVudEZvckZsYWdzQ2hhbmdlZEV2ZW50OihO
U0V2ZW50ICopZmxhZ3NDaGFuZ2VkRXZlbnQ7Ci0tICh2b2lkKV9zZXREcmF3aW5nQXJlYVNpemU6
KE5TU2l6ZSlzaXplOwotLSAodm9pZClfc2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlOihQ
bHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpcGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlOwot
LSAoQk9PTClfc2hvdWxkVXNlVGlsZWREcmF3aW5nQXJlYTsKKy0gKHZvaWQpX3drX2FjY2Vzc2li
aWxpdHlSZWdpc3RlclVJUHJvY2Vzc1Rva2VuczsKKy0gKHZvaWQpX3drX2Rpc2FibGVDb21wbGV4
VGV4dElucHV0SWZOZWNlc3Nhcnk7CistIChmbG9hdClfd2tfaW50cmluc2ljRGV2aWNlU2NhbGVG
YWN0b3I7CistICh2b2lkKV93a19wb3N0RmFrZU1vdXNlTW92ZWRFdmVudEZvckZsYWdzQ2hhbmdl
ZEV2ZW50OihOU0V2ZW50ICopZmxhZ3NDaGFuZ2VkRXZlbnQ7CistICh2b2lkKV93a19zZXREcmF3
aW5nQXJlYVNpemU6KE5TU2l6ZSlzaXplOworLSAodm9pZClfd2tfc2V0UGx1Z2luQ29tcGxleFRl
eHRJbnB1dFN0YXRlOihQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpcGx1Z2luQ29tcGxleFRl
eHRJbnB1dFN0YXRlOwogQGVuZAogCiBAaW50ZXJmYWNlIFdLVmlld0RhdGEgOiBOU09iamVjdCB7
CiBAcHVibGljCisgICAgV0tWaWV3ICpfdmlldzsKKwogICAgIE93blB0cjxQYWdlQ2xpZW50SW1w
bD4gX3BhZ2VDbGllbnQ7CiAgICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gX3BhZ2U7CiAgICAgCkBA
IC0yMTksOCArMjE0LDMyIEBAIEBpbnRlcmZhY2UgV0tWaWV3RGF0YSA6IE5TT2JqZWN0IHsKIEBl
bmQKIAogQGltcGxlbWVudGF0aW9uIFdLVmlld0RhdGEKLUBlbmQKIAorI2RlZmluZSBOT1RJRklD
QVRJT05fRk9SV0FSREVSKG5hbWUpIFwKKyAgICAtICh2b2lkKW5hbWU6KE5TTm90aWZpY2F0aW9u
ICopbm90aWZpY2F0aW9uIFwKKyAgICB7IFwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lk
ICgqKShpZCwgU0VMLCBOU05vdGlmaWNhdGlvbiAqKT4ob2JqY19tc2dTZW5kKShfdmlldywgX2Nt
ZCwgbm90aWZpY2F0aW9uKTsgXAorICAgIH0KKworTk9USUZJQ0FUSU9OX0ZPUldBUkRFUihfd2tf
d2luZG93RGlkQmVjb21lS2V5KQorTk9USUZJQ0FUSU9OX0ZPUldBUkRFUihfd2tfd2luZG93RGlk
Q2hhbmdlQmFja2luZ1Byb3BlcnRpZXMpCitOT1RJRklDQVRJT05fRk9SV0FSREVSKF93a193aW5k
b3dEaWRDaGFuZ2VTY3JlZW4pCitOT1RJRklDQVRJT05fRk9SV0FSREVSKF93a193aW5kb3dEaWRE
ZW1pbmlhdHVyaXplKQorTk9USUZJQ0FUSU9OX0ZPUldBUkRFUihfd2tfd2luZG93RGlkTWluaWF0
dXJpemUpCitOT1RJRklDQVRJT05fRk9SV0FSREVSKF93a193aW5kb3dEaWRNb3ZlKQorTk9USUZJ
Q0FUSU9OX0ZPUldBUkRFUihfd2tfd2luZG93RGlkT3JkZXJPZmZTY3JlZW4pCitOT1RJRklDQVRJ
T05fRk9SV0FSREVSKF93a193aW5kb3dEaWRPcmRlck9uU2NyZWVuKQorTk9USUZJQ0FUSU9OX0ZP
UldBUkRFUihfd2tfd2luZG93RGlkUmVzaWduS2V5KQorTk9USUZJQ0FUSU9OX0ZPUldBUkRFUihf
d2tfd2luZG93RGlkUmVzaXplKQorCisjdW5kZWYgTk9USUZJQ0FUSU9OX0ZPUldBUkRFUgorCist
IChOU1N0cmluZyAqKXZpZXc6KE5TVmlldyAqKXZpZXcgc3RyaW5nRm9yVG9vbFRpcDooTlNUb29s
VGlwVGFnKXRhZyBwb2ludDooTlNQb2ludClwb2ludCB1c2VyRGF0YToodm9pZCAqKWRhdGEKK3sK
KyAgICByZXR1cm4gbnNTdHJpbmdGcm9tV2ViQ29yZVN0cmluZyhfcGFnZS0+dG9vbFRpcCgpKTsK
K30KKworQGVuZAogCiBAaW50ZXJmYWNlIFdLUmVzcG9uZGVyQ2hhaW5TaW5rIDogTlNSZXNwb25k
ZXIgewogICAgIE5TUmVzcG9uZGVyICpfbGFzdFJlc3BvbmRlckluQ2hhaW47CkBAIC0zMDcsNyAr
MzI2LDcgQEAgLSAoQk9PTCliZWNvbWVGaXJzdFJlc3BvbmRlcgogCiAgICAgX2RhdGEtPl9pbkJl
Y29tZUZpcnN0UmVzcG9uZGVyID0gdHJ1ZTsKICAgICAKLSAgICBbc2VsZiBfdXBkYXRlU2VjdXJl
SW5wdXRTdGF0ZV07CisgICAgW3NlbGYgX3drX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGVdOwogICAg
IF9kYXRhLT5fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9j
dXNlZCk7CiAKICAgICBfZGF0YS0+X2luQmVjb21lRmlyc3RSZXNwb25kZXIgPSBmYWxzZTsKQEAg
LTMyOCw3ICszNDcsNyBAQCAtIChCT09MKXJlc2lnbkZpcnN0UmVzcG9uZGVyCiAKICAgICBpZiAo
X2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmhhc0NvbXBvc2l0aW9uICYmICFfZGF0YS0+X3Bh
Z2UtPmVkaXRvclN0YXRlKCkuc2hvdWxkSWdub3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2Up
CiAgICAgICAgIF9kYXRhLT5fcGFnZS0+Y2FuY2VsQ29tcG9zaXRpb24oKTsKLSAgICBbc2VsZiBf
cmVzZXRUZXh0SW5wdXRTdGF0ZV07CisgICAgW3NlbGYgX3drX3Jlc2V0VGV4dElucHV0U3RhdGVd
OwogICAgIAogICAgIGlmICghX2RhdGEtPl9wYWdlLT5tYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlv
bigpKQogICAgICAgICBfZGF0YS0+X3BhZ2UtPmNsZWFyU2VsZWN0aW9uKCk7CkBAIC0zNjMsMTAg
KzM4MiwxMCBAQCAtICh2b2lkKXNldEZyYW1lU2l6ZTooTlNTaXplKXNpemUKICAgICBbc3VwZXIg
c2V0RnJhbWVTaXplOnNpemVdOwogICAgIAogICAgIGlmICghW3NlbGYgZnJhbWVTaXplVXBkYXRl
c0Rpc2FibGVkXSkKLSAgICAgICAgW3NlbGYgX3NldERyYXdpbmdBcmVhU2l6ZTpzaXplXTsKKyAg
ICAgICAgW3NlbGYgX3drX3NldERyYXdpbmdBcmVhU2l6ZTpzaXplXTsKIH0KIAotLSAodm9pZClf
dXBkYXRlV2luZG93QW5kVmlld0ZyYW1lcworLSAodm9pZClfd2tfdXBkYXRlV2luZG93QW5kVmll
d0ZyYW1lcwogewogICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOwogICAgIEFT
U0VSVCh3aW5kb3cpOwpAQCAtMzg1LDEyICs0MDQsMTIgQEAgLSAodm9pZClyZW5ld0dTdGF0ZQog
CiAgICAgLy8gVXBkYXRlIHRoZSB2aWV3IGZyYW1lLgogICAgIGlmIChbc2VsZiB3aW5kb3ddKQot
ICAgICAgICBbc2VsZiBfdXBkYXRlV2luZG93QW5kVmlld0ZyYW1lc107CisgICAgICAgIFtzZWxm
IF93a191cGRhdGVXaW5kb3dBbmRWaWV3RnJhbWVzXTsKIAogICAgIFtzdXBlciByZW5ld0dTdGF0
ZV07CiB9CiAKLS0gKHZvaWQpX3NldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZTooUGx1Z2lu
Q29tcGxleFRleHRJbnB1dFN0YXRlKXBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZQorLSAodm9p
ZClfd2tfc2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlOihQbHVnaW5Db21wbGV4VGV4dElu
cHV0U3RhdGUpcGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlCiB7CiAgICAgX2RhdGEtPl9wbHVn
aW5Db21wbGV4VGV4dElucHV0U3RhdGUgPSBwbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGU7CiAg
ICAgCkBAIC02NTMsNyArNjcyLDcgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGVDb21tYW5kQ2FsbGJh
Y2soV0tTdAogICAgIFdLVmlldyogd2tWaWV3ID0gc3RhdGljX2Nhc3Q8V0tWaWV3Kj4oY29udGV4
dCk7CiAgICAgQVNTRVJUKHdrVmlldyk7CiAgICAgCi0gICAgW3drVmlldyBfc2V0VXNlckludGVy
ZmFjZUl0ZW1TdGF0ZTpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKHRvSW1wbChjb21tYW5kTmFt
ZSktPnN0cmluZygpKSBlbmFibGVkOmlzRW5hYmxlZCBzdGF0ZTpzdGF0ZV07CisgICAgW3drVmll
dyBfd2tfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZTpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5n
KHRvSW1wbChjb21tYW5kTmFtZSktPnN0cmluZygpKSBlbmFibGVkOmlzRW5hYmxlZCBzdGF0ZTpz
dGF0ZV07CiB9CiAKIC0gKEJPT0wpdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTooaWQgPE5TVmFs
aWRhdGVkVXNlckludGVyZmFjZUl0ZW0+KWl0ZW0KQEAgLTk2NCw3ICs5ODMsNyBAQCAtICh2b2lk
KWRpc3BsYXlJZk5lZWRlZAogewogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTA3MAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgY29kZSB3aGVuIDxy
ZGFyOi8vcHJvYmxlbS85MzYyMDg1PiBpcyByZXNvbHZlZC4gSW4gdGhlIG1lYW50aW1lLAotICAg
IC8vIGl0IGlzIG5lY2Vzc2FyeSB0byBkaXNhYmxlIHNjcmVuIHVwZGF0ZXMgc28gd2UgZ2V0IGEg
Y2hhbmNlIHRvIHJlZHJhdyB0aGUgY29ybmVycyBiZWZvcmUgdGhpcyAKKyAgICAvLyBpdCBpcyBu
ZWNlc3NhcnkgdG8gZGlzYWJsZSBzY3JlZW4gdXBkYXRlcyBzbyB3ZSBnZXQgYSBjaGFuY2UgdG8g
cmVkcmF3IHRoZSBjb3JuZXJzIGJlZm9yZSB0aGlzCiAgICAgLy8gZGlzcGxheSBpcyB2aXNpYmxl
LgogICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOwogICAgIEJPT0wgc2hvdWxk
TWFza1dpbmRvdyA9IHdpbmRvdyAmJiAhTlNJc0VtcHR5UmVjdChfZGF0YS0+X3dpbmRvd0JvdHRv
bUNvcm5lckludGVyc2VjdGlvblJlY3QpOwpAQCAtOTkyLDcgKzEwMTEsNyBAQCAtIChCT09MKV93
YW50c0tleURvd25Gb3JFdmVudDooTlNFdmVudCAqCiAgICAgcmV0dXJuIFlFUzsKIH0KIAotLSAo
dm9pZClfc2V0TW91c2VEb3duRXZlbnQ6KE5TRXZlbnQgKilldmVudAorLSAodm9pZClfd2tfc2V0
TW91c2VEb3duRXZlbnQ6KE5TRXZlbnQgKilldmVudAogewogICAgIEFTU0VSVCghZXZlbnQgfHwg
W2V2ZW50IHR5cGVdID09IE5TTGVmdE1vdXNlRG93biB8fCBbZXZlbnQgdHlwZV0gPT0gTlNSaWdo
dE1vdXNlRG93biB8fCBbZXZlbnQgdHlwZV0gPT0gTlNPdGhlck1vdXNlRG93bik7CiAgICAgCkBA
IC0xMDE2LDEwICsxMDM1LDEwIEBAIC0gKHZvaWQpX3NldE1vdXNlRG93bkV2ZW50OihOU0V2ZW50
ICopZXYKIAogTkFUSVZFX01PVVNFX0VWRU5UX0hBTkRMRVIobW91c2VFbnRlcmVkKQogTkFUSVZF
X01PVVNFX0VWRU5UX0hBTkRMRVIobW91c2VFeGl0ZWQpCi1OQVRJVkVfTU9VU0VfRVZFTlRfSEFO
RExFUihtb3VzZU1vdmVkSW50ZXJuYWwpCi1OQVRJVkVfTU9VU0VfRVZFTlRfSEFORExFUihtb3Vz
ZURvd25JbnRlcm5hbCkKLU5BVElWRV9NT1VTRV9FVkVOVF9IQU5ETEVSKG1vdXNlVXBJbnRlcm5h
bCkKLU5BVElWRV9NT1VTRV9FVkVOVF9IQU5ETEVSKG1vdXNlRHJhZ2dlZEludGVybmFsKQorTkFU
SVZFX01PVVNFX0VWRU5UX0hBTkRMRVIoX3drX21vdXNlTW92ZWRJbnRlcm5hbCkKK05BVElWRV9N
T1VTRV9FVkVOVF9IQU5ETEVSKF93a19tb3VzZURvd25JbnRlcm5hbCkKK05BVElWRV9NT1VTRV9F
VkVOVF9IQU5ETEVSKF93a19tb3VzZVVwSW50ZXJuYWwpCitOQVRJVkVfTU9VU0VfRVZFTlRfSEFO
RExFUihfd2tfbW91c2VEcmFnZ2VkSW50ZXJuYWwpCiBOQVRJVkVfTU9VU0VfRVZFTlRfSEFORExF
UihvdGhlck1vdXNlRG93bikKIE5BVElWRV9NT1VTRV9FVkVOVF9IQU5ETEVSKG90aGVyTW91c2VE
cmFnZ2VkKQogTkFUSVZFX01PVVNFX0VWRU5UX0hBTkRMRVIob3RoZXJNb3VzZU1vdmVkKQpAQCAt
MTA0NywyNyArMTA2NiwyNyBAQCAtICh2b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudAog
ICAgIGlmIChzZWxmID09IFtbc2VsZiB3aW5kb3ddIGZpcnN0UmVzcG9uZGVyXSAmJiAhTlNQb2lu
dEluUmVjdChbc2VsZiBjb252ZXJ0UG9pbnQ6W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddIGZyb21W
aWV3Om5pbF0sIFtzZWxmIHZpc2libGVSZWN0XSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtz
ZWxmIG1vdXNlTW92ZWRJbnRlcm5hbDpldmVudF07CisgICAgW3NlbGYgX3drX21vdXNlTW92ZWRJ
bnRlcm5hbDpldmVudF07CiB9CiAKIC0gKHZvaWQpbW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQK
IHsKLSAgICBbc2VsZiBfc2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRdOworICAgIFtzZWxmIF93a19z
ZXRNb3VzZURvd25FdmVudDpldmVudF07CiAgICAgX2RhdGEtPl9pZ25vcmluZ01vdXNlRHJhZ2dl
ZEV2ZW50cyA9IE5POwotICAgIFtzZWxmIG1vdXNlRG93bkludGVybmFsOmV2ZW50XTsKKyAgICBb
c2VsZiBfd2tfbW91c2VEb3duSW50ZXJuYWw6ZXZlbnRdOwogfQogCiAtICh2b2lkKW1vdXNlVXA6
KE5TRXZlbnQgKilldmVudAogewotICAgIFtzZWxmIF9zZXRNb3VzZURvd25FdmVudDpuaWxdOwot
ICAgIFtzZWxmIG1vdXNlVXBJbnRlcm5hbDpldmVudF07CisgICAgW3NlbGYgX3drX3NldE1vdXNl
RG93bkV2ZW50Om5pbF07CisgICAgW3NlbGYgX3drX21vdXNlVXBJbnRlcm5hbDpldmVudF07CiB9
CiAKIC0gKHZvaWQpbW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZlbnQKIHsKICAgICBpZiAoX2Rh
dGEtPl9pZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50cykKICAgICAgICAgcmV0dXJuOwotICAgIFtz
ZWxmIG1vdXNlRHJhZ2dlZEludGVybmFsOmV2ZW50XTsKKyAgICBbc2VsZiBfd2tfbW91c2VEcmFn
Z2VkSW50ZXJuYWw6ZXZlbnRdOwogfQogCiAtIChCT09MKWFjY2VwdHNGaXJzdE1vdXNlOihOU0V2
ZW50ICopZXZlbnQKQEAgLTEwODAsOSArMTA5OSw5IEBAIC0gKEJPT0wpYWNjZXB0c0ZpcnN0TW91
c2U6KE5TRXZlbnQgKilldmUKICAgICBpZiAoIVtzZWxmIGhpdFRlc3Q6W2V2ZW50IGxvY2F0aW9u
SW5XaW5kb3ddXSkKICAgICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIFtzZWxmIF9zZXRNb3Vz
ZURvd25FdmVudDpldmVudF07CisgICAgW3NlbGYgX3drX3NldE1vdXNlRG93bkV2ZW50OmV2ZW50
XTsKICAgICBib29sIHJlc3VsdCA9IF9kYXRhLT5fcGFnZS0+YWNjZXB0c0ZpcnN0TW91c2UoW2V2
ZW50IGV2ZW50TnVtYmVyXSwgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KGV2
ZW50LCBzZWxmKSk7Ci0gICAgW3NlbGYgX3NldE1vdXNlRG93bkV2ZW50Om5pbF07CisgICAgW3Nl
bGYgX3drX3NldE1vdXNlRG93bkV2ZW50Om5pbF07CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtMTEwMSw5ICsxMTIwLDkgQEAgLSAoQk9PTClzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9y
RXZlbgogICAgIGlmICghW3NlbGYgaGl0VGVzdDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd11dKQog
ICAgICAgICByZXR1cm4gTk87CiAgICAgCi0gICAgW3NlbGYgX3NldE1vdXNlRG93bkV2ZW50OmV2
ZW50XTsKKyAgICBbc2VsZiBfd2tfc2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRdOwogICAgIGJvb2wg
cmVzdWx0ID0gX2RhdGEtPl9wYWdlLT5zaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbnQo
V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KGV2ZW50LCBzZWxmKSk7Ci0gICAg
W3NlbGYgX3NldE1vdXNlRG93bkV2ZW50Om5pbF07CisgICAgW3NlbGYgX3drX3NldE1vdXNlRG93
bkV2ZW50Om5pbF07CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTE0MCw2ICsxMTU5LDcg
QEAgLSAodm9pZCliZWdpbkdlc3R1cmVXaXRoRXZlbnQ6KE5TRXZlbnQgKgogICAgICAgICB9XTsK
ICAgICB9CiB9CisKICNlbmRpZgogCiAtICh2b2lkKWRvQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClz
ZWxlY3RvcgpAQCAtMTIyNiw3ICsxMjQ2LDcgQEAgLSAodm9pZClpbnNlcnRUZXh0OihpZClzdHJp
bmcgcmVwbGFjZW1lbgogICAgICAgICBwYXJhbWV0ZXJzLT5ldmVudEludGVycHJldGF0aW9uSGFk
U2lkZUVmZmVjdHMgfD0gZXZlbnRIYW5kbGVkOwogfQogCi0tIChCT09MKV9oYW5kbGVTdHlsZUtl
eUVxdWl2YWxlbnQ6KE5TRXZlbnQgKilldmVudAorLSAoQk9PTClfd2tfaGFuZGxlU3R5bGVLZXlF
cXVpdmFsZW50OihOU0V2ZW50ICopZXZlbnQKIHsKICAgICBpZiAoIV9kYXRhLT5fcGFnZS0+ZWRp
dG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSkKICAgICAgICAgcmV0dXJuIE5POwpAQCAtMTI2
Miw3ICsxMjgyLDcgQEAgLSAoQk9PTClwZXJmb3JtS2V5RXF1aXZhbGVudDooTlNFdmVudCAqKQog
ICAgIEJPT0wgZXZlbnRXYXNTZW50VG9XZWJDb3JlID0gKF9kYXRhLT5fa2V5RG93bkV2ZW50QmVp
bmdSZXNlbnQgPT0gZXZlbnQpOwogCiAgICAgaWYgKCFldmVudFdhc1NlbnRUb1dlYkNvcmUpCi0g
ICAgICAgIFtzZWxmIF9kaXNhYmxlQ29tcGxleFRleHRJbnB1dElmTmVjZXNzYXJ5XTsKKyAgICAg
ICAgW3NlbGYgX3drX2Rpc2FibGVDb21wbGV4VGV4dElucHV0SWZOZWNlc3NhcnldOwogCiAgICAg
Ly8gUGFzcyBrZXkgY29tYm9zIHRocm91Z2ggV2ViQ29yZSBpZiB0aGVyZSBpcyBhIGtleSBiaW5k
aW5nIGF2YWlsYWJsZSBmb3IKICAgICAvLyB0aGlzIGV2ZW50LiBUaGlzIGxldHMgd2ViIHBhZ2Vz
IGhhdmUgYSBjcmFjayBhdCBpbnRlcmNlcHRpbmcga2V5LW1vZGlmaWVkIGtleXByZXNzZXMuCkBA
IC0xMjczLDcgKzEyOTMsNyBAQCAtIChCT09MKXBlcmZvcm1LZXlFcXVpdmFsZW50OihOU0V2ZW50
ICopCiAgICAgICAgIHJldHVybiBZRVM7CiAgICAgfQogICAgIAotICAgIHJldHVybiBbc2VsZiBf
aGFuZGxlU3R5bGVLZXlFcXVpdmFsZW50OmV2ZW50XSB8fCBbc3VwZXIgcGVyZm9ybUtleUVxdWl2
YWxlbnQ6ZXZlbnRdOworICAgIHJldHVybiBbc2VsZiBfd2tfaGFuZGxlU3R5bGVLZXlFcXVpdmFs
ZW50OmV2ZW50XSB8fCBbc3VwZXIgcGVyZm9ybUtleUVxdWl2YWxlbnQ6ZXZlbnRdOwogfQogCiAt
ICh2b2lkKWtleVVwOihOU0V2ZW50ICopdGhlRXZlbnQKQEAgLTEyODIsNyArMTMwMiw3IEBAIC0g
KHZvaWQpa2V5VXA6KE5TRXZlbnQgKil0aGVFdmVudAogICAgIF9kYXRhLT5fcGFnZS0+aGFuZGxl
S2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHRoZUV2ZW50LCBzZWxmKSk7CiB9
CiAKLS0gKHZvaWQpX2Rpc2FibGVDb21wbGV4VGV4dElucHV0SWZOZWNlc3NhcnkKKy0gKHZvaWQp
X3drX2Rpc2FibGVDb21wbGV4VGV4dElucHV0SWZOZWNlc3NhcnkKIHsKICAgICBpZiAoIV9kYXRh
LT5fcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybjsKQEAg
LTEyOTIsMTAgKzEzMTIsMTAgQEAgLSAodm9pZClfZGlzYWJsZUNvbXBsZXhUZXh0SW5wdXRJZk5l
Y2VzcwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHRleHQgaW5wdXQgd2luZG93IGhhcyBiZWVuIGRp
c21pc3NlZC4KICAgICBpZiAoIVtbV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyIHNoYXJlZFRl
eHRJbnB1dFdpbmRvd0NvbnRyb2xsZXJdIGhhc01hcmtlZFRleHRdKQotICAgICAgICBbc2VsZiBf
c2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlOlBsdWdpbkNvbXBsZXhUZXh0SW5wdXREaXNh
YmxlZF07CisgICAgICAgIFtzZWxmIF93a19zZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGU6
UGx1Z2luQ29tcGxleFRleHRJbnB1dERpc2FibGVkXTsKIH0KIAotLSAoQk9PTClfaGFuZGxlUGx1
Z2luQ29tcGxleFRleHRJbnB1dEtleURvd246KE5TRXZlbnQgKilldmVudAorLSAoQk9PTClfd2tf
aGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd246KE5TRXZlbnQgKilldmVudAogewog
ICAgIEFTU0VSVChfZGF0YS0+X3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKTsKICAg
ICBBU1NFUlQoX2RhdGEtPl9wbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgIT0gUGx1Z2luQ29t
cGxleFRleHRJbnB1dERpc2FibGVkKTsKQEAgLTEzMTUsMTggKzEzMzUsMTggQEAgLSAoQk9PTClf
aGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleQogICAgIHJldHVybiBkaWRIYW5kbGVFdmVu
dDsKIH0KIAotLSAoQk9PTClfdHJ5SGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd246
KE5TRXZlbnQgKilldmVudAorLSAoQk9PTClfd2tfdHJ5SGFuZGxlUGx1Z2luQ29tcGxleFRleHRJ
bnB1dEtleURvd246KE5TRXZlbnQgKilldmVudAogewogICAgIGlmICghX2RhdGEtPl9wbHVnaW5D
b21wbGV4VGV4dElucHV0SWRlbnRpZmllciB8fCBfZGF0YS0+X3BsdWdpbkNvbXBsZXhUZXh0SW5w
dXRTdGF0ZSA9PSBQbHVnaW5Db21wbGV4VGV4dElucHV0RGlzYWJsZWQpCiAgICAgICAgIHJldHVy
biBOTzsKIAogICAgIC8vIENoZWNrIGlmIHRoZSB0ZXh0IGlucHV0IHdpbmRvdyBoYXMgYmVlbiBk
aXNtaXNzZWQgYW5kIGxldCB0aGUgcGx1Zy1pbiBwcm9jZXNzIGtub3cuCiAgICAgLy8gVGhpcyBp
cyBvbmx5IHZhbGlkIHdpdGggdGhlIHVwZGF0ZWQgQ29jb2EgdGV4dCBpbnB1dCBzcGVjLgotICAg
IFtzZWxmIF9kaXNhYmxlQ29tcGxleFRleHRJbnB1dElmTmVjZXNzYXJ5XTsKKyAgICBbc2VsZiBf
d2tfZGlzYWJsZUNvbXBsZXhUZXh0SW5wdXRJZk5lY2Vzc2FyeV07CiAKICAgICAvLyBUcnkgZmVl
ZGluZyB0aGUga2V5Ym9hcmQgZXZlbnQgZGlyZWN0bHkgdG8gdGhlIHBsdWctaW4uCiAgICAgaWYg
KF9kYXRhLT5fcGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlID09IFBsdWdpbkNvbXBsZXhUZXh0
SW5wdXRFbmFibGVkTGVnYWN5KQotICAgICAgICByZXR1cm4gW3NlbGYgX2hhbmRsZVBsdWdpbkNv
bXBsZXhUZXh0SW5wdXRLZXlEb3duOmV2ZW50XTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIF93a19o
YW5kbGVQbHVnaW5Db21wbGV4VGV4dElucHV0S2V5RG93bjpldmVudF07CiAKICAgICByZXR1cm4g
Tk87CiB9CkBAIC0xMzQwLDcgKzEzNjAsNyBAQCAtICh2b2lkKWtleURvd246KE5TRXZlbnQgKil0
aGVFdmVudAogICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVz
aW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgogICAgIFtbdGhlRXZl
bnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CiAKLSAgICBpZiAoW3NlbGYgX3RyeUhhbmRsZVBsdWdp
bkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duOnRoZUV2ZW50XSkgeworICAgIGlmIChbc2VsZiBfd2tf
dHJ5SGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd246dGhlRXZlbnRdKSB7CiAgICAg
ICAgIExPRyhUZXh0SW5wdXQsICIuLi5oYW5kbGVkIGJ5IHBsdWctaW4iKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTEzNzQsNyArMTM5NCw3IEBAIC0gKHZvaWQpZmxhZ3NDaGFuZ2VkOihO
U0V2ZW50ICopdGhlRXZlbnQKICAgICBfZGF0YS0+X3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQo
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCh0aGVFdmVudCwgc2VsZikpOwogfQogCi0tICh2b2lkKV9l
eGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzCistICh2b2lkKV93a19leGVjdXRlU2F2ZWRLZXlw
cmVzc0NvbW1hbmRzCiB7CiAgICAgV0tWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyog
cGFyYW1ldGVycyA9IF9kYXRhLT5faW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKICAgICBp
ZiAoIXBhcmFtZXRlcnMgfHwgcGFyYW1ldGVycy0+Y29tbWFuZHMtPmlzRW1wdHkoKSkKQEAgLTEz
OTUsNyArMTQxNSw3IEBAIC0gKHZvaWQpX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHMKICAg
ICBMT0coVGV4dElucHV0LCAiLi4uZG9uZSBleGVjdXRpbmcgc2F2ZWQga2V5cHJlc3MgY29tbWFu
ZHMuIik7CiB9CiAKLS0gKHZvaWQpX25vdGlmeUlucHV0Q29udGV4dEFib3V0RGlzY2FyZGVkQ29t
cG9zaXRpb24KKy0gKHZvaWQpX3drX25vdGlmeUlucHV0Q29udGV4dEFib3V0RGlzY2FyZGVkQ29t
cG9zaXRpb24KIHsKICAgICAvLyA8cmRhcjovL3Byb2JsZW0vOTM1OTA1NT46IC1kaXNjYXJkTWFy
a2VkVGV4dCBjYW4gb25seSBiZSBjYWxsZWQgZm9yIGFjdGl2ZSBjb250ZXh0cy4KICAgICAvLyBG
SVhNRTogV2UgZmFpbCB0byBldmVyIG5vdGlmeSB0aGUgaW5wdXQgY29udGV4dCBpZiBzb21ldGhp
bmcgKGUuZy4gYSBuYXZpZ2F0aW9uKSBoYXBwZW5zIHdoaWxlIHRoZSB3aW5kb3cgaXMgbm90IGtl
eS4KQEAgLTE0MjMsNyArMTQ0Myw3IEBAIC0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29u
dGV4dAogCiAtIChOU1JhbmdlKXNlbGVjdGVkUmFuZ2UKIHsKLSAgICBbc2VsZiBfZXhlY3V0ZVNh
dmVkS2V5cHJlc3NDb21tYW5kc107CisgICAgW3NlbGYgX3drX2V4ZWN1dGVTYXZlZEtleXByZXNz
Q29tbWFuZHNdOwogCiAgICAgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQ7CiAgICAgdWludDY0X3Qg
c2VsZWN0aW9uTGVuZ3RoOwpAQCAtMTQ0Nyw3ICsxNDY3LDcgQEAgLSAoQk9PTCloYXNNYXJrZWRU
ZXh0CiAgICAgICAgIHJlc3VsdCA9IF9kYXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21w
b3NpdGlvbjsKICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgLy8gQSBzYXZlZCBj
b21tYW5kIGNhbiBjb25maXJtIGEgY29tcG9zaXRpb24sIGJ1dCBpdCBjYW5ub3Qgc3RhcnQgYSBu
ZXcgb25lLgotICAgICAgICAgICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNd
OworICAgICAgICAgICAgW3NlbGYgX3drX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOwog
ICAgICAgICAgICAgcmVzdWx0ID0gX2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmhhc0NvbXBv
c2l0aW9uOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTE0NjMsNyArMTQ4Myw3IEBAIC0g
KEJPT0wpaGFzTWFya2VkVGV4dAogCiAtICh2b2lkKXVubWFya1RleHQKIHsKLSAgICBbc2VsZiBf
ZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CisgICAgW3NlbGYgX3drX2V4ZWN1dGVTYXZl
ZEtleXByZXNzQ29tbWFuZHNdOwogCiAgICAgTE9HKFRleHRJbnB1dCwgInVubWFya1RleHQiKTsK
IApAQCAtMTUyMiw3ICsxNTQyLDcgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFVuZGVybGluZXMoTlNB
dHRyaWJ1dAogCiAtICh2b2lkKXNldE1hcmtlZFRleHQ6KGlkKXN0cmluZyBzZWxlY3RlZFJhbmdl
OihOU1JhbmdlKW5ld1NlbFJhbmdlIHJlcGxhY2VtZW50UmFuZ2U6KE5TUmFuZ2UpcmVwbGFjZW1l
bnRSYW5nZQogewotICAgIFtzZWxmIF9leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzXTsKKyAg
ICBbc2VsZiBfd2tfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CiAKICAgICBCT09MIGlz
QXR0cmlidXRlZFN0cmluZyA9IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNBdHRyaWJ1dGVkU3Ry
aW5nIGNsYXNzXV07CiAgICAgQVNTRVJUKGlzQXR0cmlidXRlZFN0cmluZyB8fCBbc3RyaW5nIGlz
S2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOwpAQCAtMTU1MSw3ICsxNTcxLDcgQEAgLSAo
dm9pZClzZXRNYXJrZWRUZXh0OihpZClzdHJpbmcgc2VsZWN0ZQogICAgICAgICAvLyBJbiBwYXNz
d29yZCBmaWVsZHMsIHdlIG9ubHkgYWxsb3cgQVNDSUkgZGVhZCBrZXlzLCBhbmQgZG9uJ3QgYWxs
b3cgaW5saW5lIGlucHV0LCBtYXRjaGluZyBOU1NlY3VyZVRleHRJbnB1dEZpZWxkLgogICAgICAg
ICAvLyBBbGxvd2luZyBBU0NJSSBkZWFkIGtleXMgaXMgbmVjZXNzYXJ5IHRvIGVuYWJsZSBmdWxs
IFJvbWFuIGlucHV0IHdoZW4gdXNpbmcgYSBWaWV0bmFtZXNlIGtleWJvYXJkLgogICAgICAgICBB
U1NFUlQoIV9kYXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbik7Ci0gICAg
ICAgIFtzZWxmIF9ub3RpZnlJbnB1dENvbnRleHRBYm91dERpc2NhcmRlZENvbXBvc2l0aW9uXTsK
KyAgICAgICAgW3NlbGYgX3drX25vdGlmeUlucHV0Q29udGV4dEFib3V0RGlzY2FyZGVkQ29tcG9z
aXRpb25dOwogICAgICAgICBpZiAoW3RleHQgbGVuZ3RoXSA9PSAxICYmIFtbdGV4dCBkZWNvbXBv
c2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddIGNoYXJhY3RlckF0SW5kZXg6MF0gPCAweDgw
KSB7CiAgICAgICAgICAgICBfZGF0YS0+X3BhZ2UtPmluc2VydFRleHQodGV4dCwgcmVwbGFjZW1l
bnRSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShyZXBsYWNlbWVudFJhbmdlKSk7CiAgICAgICAg
IH0gZWxzZQpAQCAtMTU2NCw3ICsxNTg0LDcgQEAgLSAodm9pZClzZXRNYXJrZWRUZXh0OihpZClz
dHJpbmcgc2VsZWN0ZQogCiAtIChOU1JhbmdlKW1hcmtlZFJhbmdlCiB7Ci0gICAgW3NlbGYgX2V4
ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOworICAgIFtzZWxmIF93a19leGVjdXRlU2F2ZWRL
ZXlwcmVzc0NvbW1hbmRzXTsKIAogICAgIHVpbnQ2NF90IGxvY2F0aW9uOwogICAgIHVpbnQ2NF90
IGxlbmd0aDsKQEAgLTE1NzYsNyArMTU5Niw3IEBAIC0gKE5TUmFuZ2UpbWFya2VkUmFuZ2UKIAog
LSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN1YnN0cmluZ0ZvclByb3Bvc2VkUmFu
Z2U6KE5TUmFuZ2UpbnNSYW5nZSBhY3R1YWxSYW5nZTooTlNSYW5nZVBvaW50ZXIpYWN0dWFsUmFu
Z2UKIHsKLSAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CisgICAgW3Nl
bGYgX3drX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOwogCiAgICAgaWYgKCFfZGF0YS0+
X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUpIHsKICAgICAgICAgTE9HKFRl
eHRJbnB1dCwgImF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KCV1LCAldSkgLT4gbmlsIiwg
bnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5nZS5sZW5ndGgpOwpAQCAtMTYwMCw3ICsxNjIwLDcgQEAg
LSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN1YnN0cgogCiAtIChOU1VJbnRlZ2Vy
KWNoYXJhY3RlckluZGV4Rm9yUG9pbnQ6KE5TUG9pbnQpdGhlUG9pbnQKIHsKLSAgICBbc2VsZiBf
ZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CisgICAgW3NlbGYgX3drX2V4ZWN1dGVTYXZl
ZEtleXByZXNzQ29tbWFuZHNdOwogCiAgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRv
d107CiAgICAgCkBAIC0xNjE1LDcgKzE2MzUsNyBAQCAtIChOU1VJbnRlZ2VyKWNoYXJhY3Rlcklu
ZGV4Rm9yUG9pbnQ6KE5TCiAKIC0gKE5TUmVjdClmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZToo
TlNSYW5nZSl0aGVSYW5nZSBhY3R1YWxSYW5nZTooTlNSYW5nZVBvaW50ZXIpYWN0dWFsUmFuZ2UK
IHsgCi0gICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOworICAgIFtzZWxm
IF93a19leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzXTsKIAogICAgIC8vIEp1c3QgdG8gbWF0
Y2ggTlNUZXh0VmlldydzIGJlaGF2aW9yLiBSZWdyZXNzaW9uIHRlc3RzIGNhbm5vdCBkZXRlY3Qg
dGhpczsKICAgICAvLyB0byByZXByb2R1Y2UsIHVzZSBhIHRlc3QgYXBwbGljYXRpb24gZnJvbSBo
dHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjgyCkBAIC0xNjQwLDYgKzE2
NjAsNyBAQCAtIChOU1JlY3QpZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6KE5TCiB9CiAKICNp
ZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorCiAtICh2b2lkKWRyYWdnZWRJbWFnZTooTlNJbWFnZSAq
KWFuSW1hZ2UgZW5kZWRBdDooTlNQb2ludClhUG9pbnQgb3BlcmF0aW9uOihOU0RyYWdPcGVyYXRp
b24pb3BlcmF0aW9uCiB7CiAgICAgTlNQb2ludCB3aW5kb3dJbWFnZUxvYyA9IFtbc2VsZiB3aW5k
b3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6YVBvaW50XTsKQEAgLTE3ODEsNiArMTgwMiw3IEBAIC0g
KE5TVmlldyAqKV9oaXRUZXN0OihOU1BvaW50ICopcG9pbnQgZHIKICAgICAgICAgcmV0dXJuIHNl
bGY7CiAgICAgcmV0dXJuIG5pbDsKIH0KKwogI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQp
CiAKIC0gKEJPT0wpX3dpbmRvd1Jlc2l6ZU1vdXNlTG9jYXRpb25Jc0luVmlzaWJsZVNjcm9sbGVy
VGh1bWI6KE5TUG9pbnQpbG9jCkBAIC0xNzkwLDEzICsxODEyLDE0IEBAIC0gKEJPT0wpX3dpbmRv
d1Jlc2l6ZU1vdXNlTG9jYXRpb25Jc0luVmkKICAgICByZXR1cm4gTlNNb3VzZUluUmVjdChsb2Nh
bFBvaW50LCB2aXNpYmxlVGh1bWJSZWN0LCBbc2VsZiBpc0ZsaXBwZWRdKTsKIH0KIAotLSAodm9p
ZClfdXBkYXRlV2luZG93VmlzaWJpbGl0eQorLSAodm9pZClfd2tfdXBkYXRlV2luZG93VmlzaWJp
bGl0eQogewogICAgIF9kYXRhLT5fcGFnZS0+dXBkYXRlV2luZG93SXNWaXNpYmxlKFtbc2VsZiB3
aW5kb3ddIGlzVmlzaWJsZV0pOwogfQogCiAKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID09IDEwNjAKKwogLSAoQk9PTClfb3duc1dpbmRvd0dyb3dCb3gKIHsKICAgICBOU1dp
bmRvdyogd2luZG93ID0gW3NlbGYgd2luZG93XTsKQEAgLTE4NDUsNTQgKzE4NjgsMzggQEAgLSAo
Qk9PTClfdXBkYXRlR3Jvd0JveEZvcldpbmRvd0ZyYW1lQ2hhbgogCiAgICAgcmV0dXJuIG93bnNH
cm93Qm94OwogfQorCiAjZW5kaWYKIAogLy8gRklYTUU6IFVzZSBBcHBLaXQgY29uc3RhbnRzIGZv
ciB0aGVzZSB3aGVuIHRoZXkgYXJlIGF2YWlsYWJsZS4KK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0
IHdpbmRvd0RpZEJlY29tZVZpc2libGVOb3RpZmljYXRpb24gPSBAIl9OU1dpbmRvd0RpZEJlY29t
ZVZpc2libGUiOworc3RhdGljIE5TU3RyaW5nICogY29uc3Qgd2luZG93RGlkT3JkZXJPZmZTY3Jl
ZW5Ob3RpZmljYXRpb24gPSBAIk5TV2luZG93RGlkT3JkZXJPZmZTY3JlZW5Ob3RpZmljYXRpb24i
Owogc3RhdGljIE5TU3RyaW5nICogY29uc3Qgd2luZG93RGlkQ2hhbmdlQmFja2luZ1Byb3BlcnRp
ZXNOb3RpZmljYXRpb24gPSBAIk5TV2luZG93RGlkQ2hhbmdlQmFja2luZ1Byb3BlcnRpZXNOb3Rp
ZmljYXRpb24iOwogc3RhdGljIE5TU3RyaW5nICogY29uc3QgYmFja2luZ1Byb3BlcnR5T2xkU2Nh
bGVGYWN0b3JLZXkgPSBAIk5TQmFja2luZ1Byb3BlcnR5T2xkU2NhbGVGYWN0b3JLZXkiOwogCi0t
ICh2b2lkKWFkZFdpbmRvd09ic2VydmVyc0ZvcldpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cKKy0g
KHZvaWQpX3drX3VwZGF0ZVdpbmRvd09ic2VydmVyc0ZvcldpbmRvdzooTlNXaW5kb3cgKil3aW5k
b3cKIHsKLSAgICBpZiAod2luZG93KSB7Ci0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3dpbmRv
d0RpZEJlY29tZUtleTopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWU6TlNXaW5kb3dEaWRCZWNvbWVLZXlOb3RpZmljYXRpb24gb2JqZWN0
Om5pbF07Ci0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRk
T2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3dpbmRvd0RpZFJlc2lnbktleTopCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6
TlNXaW5kb3dEaWRSZXNpZ25LZXlOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAgICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxl
Y3RvcjpAc2VsZWN0b3IoX3dpbmRvd0RpZE1pbmlhdHVyaXplOikgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6TlNXaW5kb3dEaWRNaW5p
YXR1cml6ZU5vdGlmaWNhdGlvbiBvYmplY3Q6d2luZG93XTsKLSAgICAgICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxl
Y3Rvcihfd2luZG93RGlkRGVtaW5pYXR1cml6ZTopCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6TlNXaW5kb3dEaWREZW1pbmlhdHVyaXpl
Tm90aWZpY2F0aW9uIG9iamVjdDp3aW5kb3ddOwotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2Vu
dGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF93
aW5kb3dEaWRNb3ZlOikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZTpOU1dpbmRvd0RpZE1vdmVOb3RpZmljYXRpb24gb2JqZWN0OndpbmRv
d107Ci0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2Jz
ZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3dpbmRvd0RpZFJlc2l6ZTopIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOk5TV2lu
ZG93RGlkUmVzaXplTm90aWZpY2F0aW9uIG9iamVjdDp3aW5kb3ddOwotICAgICAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6
QHNlbGVjdG9yKF93aW5kb3dEaWRPcmRlck9mZlNjcmVlbjopIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOkAiTlNXaW5kb3dEaWRPcmRl
ck9mZlNjcmVlbk5vdGlmaWNhdGlvbiIgb2JqZWN0OndpbmRvd107Ci0gICAgICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpA
c2VsZWN0b3IoX3dpbmRvd0RpZE9yZGVyT25TY3JlZW46KSAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpAIl9OU1dpbmRvd0RpZEJlY29t
ZVZpc2libGUiIG9iamVjdDp3aW5kb3ddOwotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVy
IGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF93aW5k
b3dEaWRDaGFuZ2VCYWNraW5nUHJvcGVydGllczopCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6d2luZG93RGlkQ2hhbmdlQmFja2luZ1By
b3BlcnRpZXNOb3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107Ci0gICAgICAgIFtbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2Vs
ZWN0b3IoX3dpbmRvd0RpZENoYW5nZVNjcmVlbjopCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6TlNXaW5kb3dEaWRDaGFuZ2VTY3JlZW5O
b3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107Ci0gICAgfQotfQorICAgIFtbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6X2RhdGFdOwogCi0tICh2b2lk
KXJlbW92ZVdpbmRvd09ic2VydmVycwotewotICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3
aW5kb3ddOwogICAgIGlmICghd2luZG93KQogICAgICAgICByZXR1cm47CiAKLSAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpO
U1dpbmRvd0RpZEJlY29tZUtleU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpO
U1dpbmRvd0RpZFJlc2lnbktleU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpO
U1dpbmRvd0RpZE1pbmlhdHVyaXplTm90aWZpY2F0aW9uIG9iamVjdDp3aW5kb3ddOwotICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBu
YW1lOk5TV2luZG93RGlkRGVtaW5pYXR1cml6ZU5vdGlmaWNhdGlvbiBvYmplY3Q6d2luZG93XTsK
LSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVy
OnNlbGYgbmFtZTpOU1dpbmRvd0RpZE1vdmVOb3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107Ci0g
ICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpz
ZWxmIG5hbWU6TlNXaW5kb3dEaWRSZXNpemVOb3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107Ci0g
ICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpz
ZWxmIG5hbWU6QCJOU1dpbmRvd0RpZE9yZGVyT2ZmU2NyZWVuTm90aWZpY2F0aW9uIiBvYmplY3Q6
d2luZG93XTsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92
ZU9ic2VydmVyOnNlbGYgbmFtZTpAIl9OU1dpbmRvd0RpZEJlY29tZVZpc2libGUiIG9iamVjdDp3
aW5kb3ddOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3Zl
T2JzZXJ2ZXI6c2VsZiBuYW1lOndpbmRvd0RpZENoYW5nZUJhY2tpbmdQcm9wZXJ0aWVzTm90aWZp
Y2F0aW9uIG9iamVjdDp3aW5kb3ddOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVs
dENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TV2luZG93RGlkQ2hhbmdlU2NyZWVu
Tm90aWZpY2F0aW9uIG9iamVjdDp3aW5kb3ddOworICAgICNkZWZpbmUgQUREX09CU0VSVkVSKHNl
bGVjdG9yTmFtZSwgbm90aWZpY2F0aW9uTmFtZSwgbm90aWZpY2F0aW9uT2JqZWN0KSBcCisgICAg
ICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6X2Rh
dGEgc2VsZWN0b3I6QHNlbGVjdG9yKHNlbGVjdG9yTmFtZTopIFwKKyAgICAgICAgICAgIG5hbWU6
bm90aWZpY2F0aW9uTmFtZSBvYmplY3Q6bm90aWZpY2F0aW9uT2JqZWN0XQorCisgICAgQUREX09C
U0VSVkVSKF93a193aW5kb3dEaWRCZWNvbWVLZXksIE5TV2luZG93RGlkQmVjb21lS2V5Tm90aWZp
Y2F0aW9uLCBuaWwpOworICAgIEFERF9PQlNFUlZFUihfd2tfd2luZG93RGlkQ2hhbmdlQmFja2lu
Z1Byb3BlcnRpZXMsIHdpbmRvd0RpZENoYW5nZUJhY2tpbmdQcm9wZXJ0aWVzTm90aWZpY2F0aW9u
LCB3aW5kb3cpOworICAgIEFERF9PQlNFUlZFUihfd2tfd2luZG93RGlkQ2hhbmdlU2NyZWVuLCBO
U1dpbmRvd0RpZENoYW5nZVNjcmVlbk5vdGlmaWNhdGlvbiwgd2luZG93KTsKKyAgICBBRERfT0JT
RVJWRVIoX3drX3dpbmRvd0RpZERlbWluaWF0dXJpemUsIE5TV2luZG93RGlkRGVtaW5pYXR1cml6
ZU5vdGlmaWNhdGlvbiwgd2luZG93KTsKKyAgICBBRERfT0JTRVJWRVIoX3drX3dpbmRvd0RpZE1p
bmlhdHVyaXplLCBOU1dpbmRvd0RpZE1pbmlhdHVyaXplTm90aWZpY2F0aW9uLCB3aW5kb3cpOwor
ICAgIEFERF9PQlNFUlZFUihfd2tfd2luZG93RGlkTW92ZSwgTlNXaW5kb3dEaWRNb3ZlTm90aWZp
Y2F0aW9uLCB3aW5kb3cpOworICAgIEFERF9PQlNFUlZFUihfd2tfd2luZG93RGlkT3JkZXJPZmZT
Y3JlZW4sIHdpbmRvd0RpZE9yZGVyT2ZmU2NyZWVuTm90aWZpY2F0aW9uLCB3aW5kb3cpOworICAg
IEFERF9PQlNFUlZFUihfd2tfd2luZG93RGlkT3JkZXJPblNjcmVlbiwgd2luZG93RGlkQmVjb21l
VmlzaWJsZU5vdGlmaWNhdGlvbiwgd2luZG93KTsKKyAgICBBRERfT0JTRVJWRVIoX3drX3dpbmRv
d0RpZFJlc2lnbktleSwgTlNXaW5kb3dEaWRSZXNpZ25LZXlOb3RpZmljYXRpb24sIG5pbCk7Cisg
ICAgQUREX09CU0VSVkVSKF93a193aW5kb3dEaWRSZXNpemUsIE5TV2luZG93RGlkUmVzaXplTm90
aWZpY2F0aW9uLCB3aW5kb3cpOworCisgICAgI3VuZGVmIEFERF9PQlNFUlZFUgogfQogCiAtICh2
b2lkKXZpZXdXaWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdwpAQCAtMTkxMiw4ICsx
OTE5LDcgQEAgLSAodm9pZCl2aWV3V2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKgogI2VuZGlm
CiAgICAgICAgIF9kYXRhLT5fcGFnZUNsaWVudC0+dmlld1dpbGxNb3ZlVG9Bbm90aGVyV2luZG93
KCk7CiAgICAgCi0gICAgW3NlbGYgcmVtb3ZlV2luZG93T2JzZXJ2ZXJzXTsKLSAgICBbc2VsZiBh
ZGRXaW5kb3dPYnNlcnZlcnNGb3JXaW5kb3c6d2luZG93XTsKKyAgICBbc2VsZiBfd2tfdXBkYXRl
V2luZG93T2JzZXJ2ZXJzRm9yV2luZG93OndpbmRvd107CiAKICNpZiBfX01BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID09IDEwNjAKICAgICBpZiAoW2N1cnJlbnRXaW5kb3cgX2dyb3dCb3hP
d25lcl0gPT0gc2VsZikKQEAgLTE5MjgsMjEgKzE5MzQsMjEgQEAgLSAodm9pZCl2aWV3RGlkTW92
ZVRvV2luZG93CiAgICAgLy8gdXBkYXRlIHRoZSBhY3RpdmUgc3RhdGUuCiAgICAgaWYgKFtzZWxm
IHdpbmRvd10pIHsKICAgICAgICAgX2RhdGEtPl93aW5kb3dIYXNWYWxpZEJhY2tpbmdTdG9yZSA9
IE5POwotICAgICAgICBbc2VsZiBfdXBkYXRlV2luZG93VmlzaWJpbGl0eV07CisgICAgICAgIFtz
ZWxmIF93a191cGRhdGVXaW5kb3dWaXNpYmlsaXR5XTsKICAgICAgICAgX2RhdGEtPl9wYWdlLT52
aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOwogICAg
ICAgICBfZGF0YS0+X3BhZ2UtPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJ
c1Zpc2libGUgfCBXZWJQYWdlUHJveHk6OlZpZXdJc0luV2luZG93KTsKLSAgICAgICAgW3NlbGYg
X3VwZGF0ZVdpbmRvd0FuZFZpZXdGcmFtZXNdOworICAgICAgICBbc2VsZiBfd2tfdXBkYXRlV2lu
ZG93QW5kVmlld0ZyYW1lc107CiAKICAgICAgICAgaWYgKCFfZGF0YS0+X2ZsYWdzQ2hhbmdlZEV2
ZW50TW9uaXRvcikgewogICAgICAgICAgICAgX2RhdGEtPl9mbGFnc0NoYW5nZWRFdmVudE1vbml0
b3IgPSBbTlNFdmVudCBhZGRMb2NhbE1vbml0b3JGb3JFdmVudHNNYXRjaGluZ01hc2s6TlNGbGFn
c0NoYW5nZWRNYXNrIGhhbmRsZXI6XihOU0V2ZW50ICpmbGFnc0NoYW5nZWRFdmVudCkgewotICAg
ICAgICAgICAgICAgIFtzZWxmIF9wb3N0RmFrZU1vdXNlTW92ZWRFdmVudEZvckZsYWdzQ2hhbmdl
ZEV2ZW50OmZsYWdzQ2hhbmdlZEV2ZW50XTsKKyAgICAgICAgICAgICAgICBbc2VsZiBfd2tfcG9z
dEZha2VNb3VzZU1vdmVkRXZlbnRGb3JGbGFnc0NoYW5nZWRFdmVudDpmbGFnc0NoYW5nZWRFdmVu
dF07CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZsYWdzQ2hhbmdlZEV2ZW50OwogICAgICAgICAg
ICAgfV07CiAgICAgICAgIH0KIAotICAgICAgICBbc2VsZiBfYWNjZXNzaWJpbGl0eVJlZ2lzdGVy
VUlQcm9jZXNzVG9rZW5zXTsKKyAgICAgICAgW3NlbGYgX3drX2FjY2Vzc2liaWxpdHlSZWdpc3Rl
clVJUHJvY2Vzc1Rva2Vuc107CiAgICAgfSBlbHNlIHsKLSAgICAgICAgW3NlbGYgX3VwZGF0ZVdp
bmRvd1Zpc2liaWxpdHldOworICAgICAgICBbc2VsZiBfd2tfdXBkYXRlV2luZG93VmlzaWJpbGl0
eV07CiAgICAgICAgIF9kYXRhLT5fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94
eTo6Vmlld0lzVmlzaWJsZSk7CiAgICAgICAgIF9kYXRhLT5fcGFnZS0+dmlld1N0YXRlRGlkQ2hh
bmdlKFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlIHwgV2ViUGFnZVByb3h5OjpWaWV3
SXNJbldpbmRvdyk7CiAKQEAgLTE5NjAsNjcgKzE5NjYsNjcgQEAgLSAodm9pZCl2aWV3RGlkTW92
ZVRvV2luZG93CiAjZW5kaWYKICAgICB9CiAKLSAgICBfZGF0YS0+X3BhZ2UtPnNldEludHJpbnNp
Y0RldmljZVNjYWxlRmFjdG9yKFtzZWxmIF9pbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3Rvcl0pOwor
ICAgIF9kYXRhLT5fcGFnZS0+c2V0SW50cmluc2ljRGV2aWNlU2NhbGVGYWN0b3IoW3NlbGYgX3dr
X2ludHJpbnNpY0RldmljZVNjYWxlRmFjdG9yXSk7CiB9CiAKLS0gKHZvaWQpZG9XaW5kb3dEaWRD
aGFuZ2VTY3JlZW4KKy0gKHZvaWQpX3drX3dpbmRvd1NjcmVlbkRpZENoYW5nZQogewogICAgIF9k
YXRhLT5fcGFnZS0+d2luZG93U2NyZWVuRGlkQ2hhbmdlKChQbGF0Zm9ybURpc3BsYXlJRClbW1tb
W3NlbGYgd2luZG93XSBzY3JlZW5dIGRldmljZURlc2NyaXB0aW9uXSBvYmplY3RGb3JLZXk6QCJO
U1NjcmVlbk51bWJlciJdIGludFZhbHVlXSk7CiB9CiAKLS0gKHZvaWQpX3dpbmRvd0RpZEJlY29t
ZUtleTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KKy0gKHZvaWQpX3drX3dpbmRvd0Rp
ZEJlY29tZUtleTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKICAgICBOU1dpbmRv
dyAqa2V5V2luZG93ID0gW25vdGlmaWNhdGlvbiBvYmplY3RdOwogICAgIGlmIChrZXlXaW5kb3cg
PT0gW3NlbGYgd2luZG93XSB8fCBrZXlXaW5kb3cgPT0gW1tzZWxmIHdpbmRvd10gYXR0YWNoZWRT
aGVldF0pIHsKLSAgICAgICAgW3NlbGYgX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGVdOworICAgICAg
ICBbc2VsZiBfd2tfdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZV07CiAgICAgICAgIF9kYXRhLT5fcGFn
ZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsK
ICAgICB9CiAKICAgICAvLyBTZW5kIGEgY2hhbmdlIHNjcmVlbiB0byBtYWtlIHN1cmUgdGhlIGlu
aXRpYWwgZGlzcGxheUlEIGlzIHNldAotICAgIFtzZWxmIGRvV2luZG93RGlkQ2hhbmdlU2NyZWVu
XTsKKyAgICBbc2VsZiBfd2tfd2luZG93U2NyZWVuRGlkQ2hhbmdlXTsKIH0KIAotLSAodm9pZClf
d2luZG93RGlkQ2hhbmdlU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorLSAo
dm9pZClfd2tfd2luZG93RGlkQ2hhbmdlU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbgogewotICAgIFtzZWxmIGRvV2luZG93RGlkQ2hhbmdlU2NyZWVuXTsKKyAgICBbc2VsZiBf
d2tfd2luZG93U2NyZWVuRGlkQ2hhbmdlXTsKIH0KIAotLSAodm9pZClfd2luZG93RGlkUmVzaWdu
S2V5OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorLSAodm9pZClfd2tfd2luZG93RGlk
UmVzaWduS2V5OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogewogICAgIE5TV2luZG93
ICpmb3JtZXJLZXlXaW5kb3cgPSBbbm90aWZpY2F0aW9uIG9iamVjdF07CiAgICAgaWYgKGZvcm1l
cktleVdpbmRvdyA9PSBbc2VsZiB3aW5kb3ddIHx8IGZvcm1lcktleVdpbmRvdyA9PSBbW3NlbGYg
d2luZG93XSBhdHRhY2hlZFNoZWV0XSkgewotICAgICAgICBbc2VsZiBfdXBkYXRlU2VjdXJlSW5w
dXRTdGF0ZV07CisgICAgICAgIFtzZWxmIF93a191cGRhdGVTZWN1cmVJbnB1dFN0YXRlXTsKICAg
ICAgICAgX2RhdGEtPl9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3
V2luZG93SXNBY3RpdmUpOwogICAgIH0KIH0KIAotLSAodm9pZClfd2luZG93RGlkTWluaWF0dXJp
emU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCistICh2b2lkKV93a193aW5kb3dEaWRN
aW5pYXR1cml6ZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKICAgICBfZGF0YS0+
X3dpbmRvd0hhc1ZhbGlkQmFja2luZ1N0b3JlID0gTk87CiAKLSAgICBbc2VsZiBfdXBkYXRlV2lu
ZG93VmlzaWJpbGl0eV07CisgICAgW3NlbGYgX3drX3VwZGF0ZVdpbmRvd1Zpc2liaWxpdHldOwog
fQogCi0tICh2b2lkKV93aW5kb3dEaWREZW1pbmlhdHVyaXplOihOU05vdGlmaWNhdGlvbiAqKW5v
dGlmaWNhdGlvbgorLSAodm9pZClfd2tfd2luZG93RGlkRGVtaW5pYXR1cml6ZTooTlNOb3RpZmlj
YXRpb24gKilub3RpZmljYXRpb24KIHsKLSAgICBbc2VsZiBfdXBkYXRlV2luZG93VmlzaWJpbGl0
eV07CisgICAgW3NlbGYgX3drX3VwZGF0ZVdpbmRvd1Zpc2liaWxpdHldOwogfQogCi0tICh2b2lk
KV93aW5kb3dEaWRNb3ZlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorLSAodm9pZClf
d2tfd2luZG93RGlkTW92ZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKLSAgICBb
c2VsZiBfdXBkYXRlV2luZG93QW5kVmlld0ZyYW1lc107ICAgIAorICAgIFtzZWxmIF93a191cGRh
dGVXaW5kb3dBbmRWaWV3RnJhbWVzXTsKIH0KIAotLSAodm9pZClfd2luZG93RGlkUmVzaXplOihO
U05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorLSAodm9pZClfd2tfd2luZG93RGlkUmVzaXpl
OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogewogICAgIF9kYXRhLT5fd2luZG93SGFz
VmFsaWRCYWNraW5nU3RvcmUgPSBOTzsKIAotICAgIFtzZWxmIF91cGRhdGVXaW5kb3dBbmRWaWV3
RnJhbWVzXTsKKyAgICBbc2VsZiBfd2tfdXBkYXRlV2luZG93QW5kVmlld0ZyYW1lc107CiB9CiAK
LS0gKHZvaWQpX3dpbmRvd0RpZE9yZGVyT2ZmU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlm
aWNhdGlvbgorLSAodm9pZClfd2tfd2luZG93RGlkT3JkZXJPZmZTY3JlZW46KE5TTm90aWZpY2F0
aW9uICopbm90aWZpY2F0aW9uCiB7Ci0gICAgW3NlbGYgX3VwZGF0ZVdpbmRvd1Zpc2liaWxpdHld
OworICAgIFtzZWxmIF93a191cGRhdGVXaW5kb3dWaXNpYmlsaXR5XTsKIAogICAgIC8vIFdlIHdh
bnQgdG8gbWFrZSBzdXJlIHRvIHVwZGF0ZSB0aGUgYWN0aXZlIHN0YXRlIHdoaWxlIGhpZGRlbiwg
c28gc2luY2UgdGhlIHZpZXcgaXMgYWJvdXQgdG8gYmUgaGlkZGVuLAogICAgIC8vIHdlIGhpZGUg
aXQgZmlyc3QgYW5kIHRoZW4gdXBkYXRlIHRoZSBhY3RpdmUgc3RhdGUuCkBAIC0yMDI4LDkgKzIw
MzQsOSBAQCAtICh2b2lkKV93aW5kb3dEaWRPcmRlck9mZlNjcmVlbjooTlNOb3RpCiAgICAgX2Rh
dGEtPl9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNB
Y3RpdmUpOwogfQogCi0tICh2b2lkKV93aW5kb3dEaWRPcmRlck9uU2NyZWVuOihOU05vdGlmaWNh
dGlvbiAqKW5vdGlmaWNhdGlvbgorLSAodm9pZClfd2tfd2luZG93RGlkT3JkZXJPblNjcmVlbjoo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKLSAgICBbc2VsZiBfdXBkYXRlV2luZG93
VmlzaWJpbGl0eV07CisgICAgW3NlbGYgX3drX3VwZGF0ZVdpbmRvd1Zpc2liaWxpdHldOwogCiAg
ICAgLy8gV2Ugd2FudCB0byBtYWtlIHN1cmUgdG8gdXBkYXRlIHRoZSBhY3RpdmUgc3RhdGUgd2hp
bGUgaGlkZGVuLCBzbyBzaW5jZSB0aGUgdmlldyBpcyBhYm91dCB0byBiZWNvbWUgdmlzaWJsZSwK
ICAgICAvLyB3ZSB1cGRhdGUgdGhlIGFjdGl2ZSBzdGF0ZSBmaXJzdCBhbmQgdGhlbiBtYWtlIGl0
IHZpc2libGUuCkBAIC0yMDM4LDEwICsyMDQ0LDEwIEBAIC0gKHZvaWQpX3dpbmRvd0RpZE9yZGVy
T25TY3JlZW46KE5TTm90aWYKICAgICBfZGF0YS0+X3BhZ2UtPnZpZXdTdGF0ZURpZENoYW5nZShX
ZWJQYWdlUHJveHk6OlZpZXdJc1Zpc2libGUpOwogfQogCi0tICh2b2lkKV93aW5kb3dEaWRDaGFu
Z2VCYWNraW5nUHJvcGVydGllczooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KKy0gKHZv
aWQpX3drX3dpbmRvd0RpZENoYW5nZUJhY2tpbmdQcm9wZXJ0aWVzOihOU05vdGlmaWNhdGlvbiAq
KW5vdGlmaWNhdGlvbgogewogICAgIENHRmxvYXQgb2xkQmFja2luZ1NjYWxlRmFjdG9yID0gW1tu
b3RpZmljYXRpb24udXNlckluZm8gb2JqZWN0Rm9yS2V5OmJhY2tpbmdQcm9wZXJ0eU9sZFNjYWxl
RmFjdG9yS2V5XSBkb3VibGVWYWx1ZV07Ci0gICAgQ0dGbG9hdCBuZXdCYWNraW5nU2NhbGVGYWN0
b3IgPSBbc2VsZiBfaW50cmluc2ljRGV2aWNlU2NhbGVGYWN0b3JdOyAKKyAgICBDR0Zsb2F0IG5l
d0JhY2tpbmdTY2FsZUZhY3RvciA9IFtzZWxmIF93a19pbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3Rv
cl07CiAgICAgaWYgKG9sZEJhY2tpbmdTY2FsZUZhY3RvciA9PSBuZXdCYWNraW5nU2NhbGVGYWN0
b3IpCiAgICAgICAgIHJldHVybjsgCiAKQEAgLTIxMzgsNyArMjE0NCw3IEBAIC0gKHZvaWQpdmll
d0RpZENoYW5nZUJhY2tpbmdQcm9wZXJ0aWVzCiAgICAgICAgIGRyYXdpbmdBcmVhLT5jb2xvclNw
YWNlRGlkQ2hhbmdlKCk7CiB9CiAKLS0gKHZvaWQpX2FjY2Vzc2liaWxpdHlSZWdpc3RlclVJUHJv
Y2Vzc1Rva2VucworLSAodm9pZClfd2tfYWNjZXNzaWJpbGl0eVJlZ2lzdGVyVUlQcm9jZXNzVG9r
ZW5zCiB7CiAgICAgLy8gSW5pdGlhbGl6ZSByZW1vdGUgYWNjZXNzaWJpbGl0eSB3aGVuIHRoZSB3
aW5kb3cgY29ubmVjdGlvbiBoYXMgYmVlbiBlc3RhYmxpc2hlZC4KICAgICBOU0RhdGEgKnJlbW90
ZUVsZW1lbnRUb2tlbiA9IFdLQVhSZW1vdGVUb2tlbkZvckVsZW1lbnQoc2VsZik7CkBAIC0yMTQ4
LDcgKzIxNTQsNyBAQCAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmVnaXN0ZXJVSVByb2Nlc3NUCiAg
ICAgX2RhdGEtPl9wYWdlLT5yZWdpc3RlclVJUHJvY2Vzc0FjY2Vzc2liaWxpdHlUb2tlbnMoZWxl
bWVudFRva2VuLCB3aW5kb3dUb2tlbik7CiB9CiAKLS0gKHZvaWQpX3VwZGF0ZVJlbW90ZUFjY2Vz
c2liaWxpdHlSZWdpc3RyYXRpb246KEJPT0wpcmVnaXN0ZXJQcm9jZXNzCistICh2b2lkKV93a191
cGRhdGVSZW1vdGVBY2Nlc3NpYmlsaXR5UmVnaXN0cmF0aW9uOihCT09MKXJlZ2lzdGVyUHJvY2Vz
cwogewogICAgIC8vIFdoZW4gdGhlIHRyZWUgaXMgY29ubmVjdGVkL2Rpc2Nvbm5lY3RlZCwgdGhl
IHJlbW90ZSBhY2Nlc3NpYmlsaXR5IHJlZ2lzdHJhdGlvbgogICAgIC8vIG5lZWRzIHRvIGJlIHVw
ZGF0ZWQgd2l0aCB0aGUgcGlkIG9mIHRoZSByZW1vdGUgcHJvY2Vzcy4gSWYgdGhlIHByb2Nlc3Mg
aXMgZ29pbmcKQEAgLTIyMjAsNyArMjIyNiw3IEBAIC0gKE5TVmlldyAqKWhpdFRlc3Q6KE5TUG9p
bnQpcG9pbnQKICAgICByZXR1cm4gaGl0VmlldzsKIH0KIAotLSAodm9pZClfcG9zdEZha2VNb3Vz
ZU1vdmVkRXZlbnRGb3JGbGFnc0NoYW5nZWRFdmVudDooTlNFdmVudCAqKWZsYWdzQ2hhbmdlZEV2
ZW50CistICh2b2lkKV93a19wb3N0RmFrZU1vdXNlTW92ZWRFdmVudEZvckZsYWdzQ2hhbmdlZEV2
ZW50OihOU0V2ZW50ICopZmxhZ3NDaGFuZ2VkRXZlbnQKIHsKICAgICBOU0V2ZW50ICpmYWtlRXZl
bnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNNb3VzZU1vdmVkIGxvY2F0aW9uOltb
ZmxhZ3NDaGFuZ2VkRXZlbnQgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOltOU0V2ZW50IG1v
dXNlTG9jYXRpb25dXQogICAgICAgICBtb2RpZmllckZsYWdzOltmbGFnc0NoYW5nZWRFdmVudCBt
b2RpZmllckZsYWdzXSB0aW1lc3RhbXA6W2ZsYWdzQ2hhbmdlZEV2ZW50IHRpbWVzdGFtcF0gd2lu
ZG93TnVtYmVyOltmbGFnc0NoYW5nZWRFdmVudCB3aW5kb3dOdW1iZXJdCkBAIC0yMjM0LDcgKzIy
NDAsNyBAQCAtIChOU0ludGVnZXIpY29udmVyc2F0aW9uSWRlbnRpZmllcgogICAgIHJldHVybiAo
TlNJbnRlZ2VyKXNlbGY7CiB9CiAKLS0gKGZsb2F0KV9pbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3Rv
cgorLSAoZmxvYXQpX3drX2ludHJpbnNpY0RldmljZVNjYWxlRmFjdG9yCiB7CiAgICAgTlNXaW5k
b3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107CiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMDcwCkBAIC0yMjQ4LDcgKzIyNTQsNyBAQCAtIChmbG9hdClfaW50cmluc2lj
RGV2aWNlU2NhbGVGYWN0b3IKICNlbmRpZgogfQogCi0tICh2b2lkKV9zZXREcmF3aW5nQXJlYVNp
emU6KE5TU2l6ZSlzaXplCistICh2b2lkKV93a19zZXREcmF3aW5nQXJlYVNpemU6KE5TU2l6ZSlz
aXplCiB7CiAgICAgaWYgKCFfZGF0YS0+X3BhZ2UtPmRyYXdpbmdBcmVhKCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTIyNTcsMTEgKzIyNjMsNiBAQCAtICh2b2lkKV9zZXREcmF3aW5nQXJlYVNpemU6
KE5TU2l6ZSlzaXplCiAgICAgX2RhdGEtPl9yZXNpemVTY3JvbGxPZmZzZXQgPSBOU1plcm9TaXpl
OwogfQogCi0tIChCT09MKV9zaG91bGRVc2VUaWxlZERyYXdpbmdBcmVhCi17Ci0gICAgcmV0dXJu
IE5POwotfQotCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCiAt
ICh2b2lkKXF1aWNrTG9va1dpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50CiB7CkBAIC0yMjc0LDcg
KzIyNzUsNyBAQCAtICh2b2lkKXF1aWNrTG9va1dpdGhFdmVudDooTlNFdmVudCAqKWV2CiAKIEBp
bXBsZW1lbnRhdGlvbiBXS1ZpZXcgKEludGVybmFsKQogCi0tIChQYXNzT3duUHRyPFdlYktpdDo6
RHJhd2luZ0FyZWFQcm94eT4pX2NyZWF0ZURyYXdpbmdBcmVhUHJveHkKKy0gKFBhc3NPd25QdHI8
V2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Pilfd2tfY3JlYXRlRHJhd2luZ0FyZWFQcm94eQogewog
I2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiAgICAgaWYgKFtzZWxmIF9zaG91bGRVc2VU
aWxlZERyYXdpbmdBcmVhXSkKQEAgLTIyODQsNyArMjI4NSw3IEBAIC0gKFBhc3NPd25QdHI8V2Vi
S2l0OjpEcmF3aW5nQXJlYVByb3h5PikKICAgICByZXR1cm4gRHJhd2luZ0FyZWFQcm94eUltcGw6
OmNyZWF0ZShfZGF0YS0+X3BhZ2UuZ2V0KCkpOwogfQogCi0tIChCT09MKV9pc0ZvY3VzZWQKKy0g
KEJPT0wpX3drX2lzRm9jdXNlZAogewogICAgIGlmIChfZGF0YS0+X2luQmVjb21lRmlyc3RSZXNw
b25kZXIpCiAgICAgICAgIHJldHVybiBZRVM7CkBAIC0yMjkzLDcgKzIyOTQsNyBAQCAtIChCT09M
KV9pc0ZvY3VzZWQKICAgICByZXR1cm4gW1tzZWxmIHdpbmRvd10gZmlyc3RSZXNwb25kZXJdID09
IHNlbGY7CiB9CiAKLS0gKFdlYktpdDo6Q29sb3JTcGFjZURhdGEpX2NvbG9yU3BhY2UKKy0gKFdl
YktpdDo6Q29sb3JTcGFjZURhdGEpX3drX2NvbG9yU3BhY2UKIHsKICAgICBpZiAoIV9kYXRhLT5f
Y29sb3JTcGFjZSkgewogICAgICAgICBpZiAoW3NlbGYgd2luZG93XSkKQEAgLTIzMDgsMzIgKzIz
MDksMzIgQEAgLSAoV2ViS2l0OjpDb2xvclNwYWNlRGF0YSlfY29sb3JTcGFjZQogICAgIHJldHVy
biBjb2xvclNwYWNlRGF0YTsgICAgCiB9CiAKLS0gKHZvaWQpX3Byb2Nlc3NEaWRDcmFzaAorLSAo
dm9pZClfd2tfcHJvY2Vzc0RpZENyYXNoCiB7CiAgICAgaWYgKF9kYXRhLT5fbGF5ZXJIb3N0aW5n
VmlldykKLSAgICAgICAgW3NlbGYgX2V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZV07Cisg
ICAgICAgIFtzZWxmIF93a19leGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVdOwogCi0gICAg
W3NlbGYgX3VwZGF0ZVJlbW90ZUFjY2Vzc2liaWxpdHlSZWdpc3RyYXRpb246Tk9dOworICAgIFtz
ZWxmIF93a191cGRhdGVSZW1vdGVBY2Nlc3NpYmlsaXR5UmVnaXN0cmF0aW9uOk5PXTsKIH0KIAot
LSAodm9pZClfcGFnZUNsb3NlZAorLSAodm9pZClfd2tfcGFnZUNsb3NlZAogewotICAgIFtzZWxm
IF91cGRhdGVSZW1vdGVBY2Nlc3NpYmlsaXR5UmVnaXN0cmF0aW9uOk5PXTsKKyAgICBbc2VsZiBf
d2tfdXBkYXRlUmVtb3RlQWNjZXNzaWJpbGl0eVJlZ2lzdHJhdGlvbjpOT107CiB9CiAKLS0gKHZv
aWQpX2RpZFJlbGF1bmNoUHJvY2VzcworLSAodm9pZClfd2tfZGlkUmVsYXVuY2hQcm9jZXNzCiB7
Ci0gICAgW3NlbGYgX2FjY2Vzc2liaWxpdHlSZWdpc3RlclVJUHJvY2Vzc1Rva2Vuc107CisgICAg
W3NlbGYgX3drX2FjY2Vzc2liaWxpdHlSZWdpc3RlclVJUHJvY2Vzc1Rva2Vuc107CiB9CiAKLS0g
KHZvaWQpX3NldEN1cnNvcjooTlNDdXJzb3IgKiljdXJzb3IKKy0gKHZvaWQpX3drX3NldEN1cnNv
cjooTlNDdXJzb3IgKiljdXJzb3IKIHsKICAgICBpZiAoW05TQ3Vyc29yIGN1cnJlbnRDdXJzb3Jd
ID09IGN1cnNvcikKICAgICAgICAgcmV0dXJuOwogICAgIFtjdXJzb3Igc2V0XTsKIH0KIAotLSAo
dm9pZClfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZTooTlNTdHJpbmcgKiljb21tYW5kTmFtZSBl
bmFibGVkOihCT09MKWlzRW5hYmxlZCBzdGF0ZTooaW50KW5ld1N0YXRlCistICh2b2lkKV93a19z
ZXRVc2VySW50ZXJmYWNlSXRlbVN0YXRlOihOU1N0cmluZyAqKWNvbW1hbmROYW1lIGVuYWJsZWQ6
KEJPT0wpaXNFbmFibGVkIHN0YXRlOihpbnQpbmV3U3RhdGUKIHsKICAgICBWYWxpZGF0aW9uVmVj
dG9yIGl0ZW1zID0gX2RhdGEtPl92YWxpZGF0aW9uTWFwLnRha2UoY29tbWFuZE5hbWUpOwogICAg
IHNpemVfdCBzaXplID0gaXRlbXMuc2l6ZSgpOwpAQCAtMjM0Niw3ICsyMzQ3LDcgQEAgLSAodm9p
ZClfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZTooTlNTdAogICAgIH0KIH0KIAotLSAoQk9PTClf
dHJ5UG9zdFByb2Nlc3NQbHVnaW5Db21wbGV4VGV4dElucHV0S2V5RG93bjooTlNFdmVudCAqKWV2
ZW50CistIChCT09MKV93a190cnlQb3N0UHJvY2Vzc1BsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlE
b3duOihOU0V2ZW50ICopZXZlbnQKIHsKICAgICBpZiAoIV9kYXRhLT5fcGx1Z2luQ29tcGxleFRl
eHRJbnB1dElkZW50aWZpZXIgfHwgX2RhdGEtPl9wbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUg
PT0gUGx1Z2luQ29tcGxleFRleHRJbnB1dERpc2FibGVkKQogICAgICAgICByZXR1cm4gTk87CkBA
IC0yMzU1LDE1ICsyMzU2LDE1IEBAIC0gKEJPT0wpX3RyeVBvc3RQcm9jZXNzUGx1Z2luQ29tcGxl
eFRleHQKICAgICBpZiAoX2RhdGEtPl9wbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgPT0gUGx1
Z2luQ29tcGxleFRleHRJbnB1dEVuYWJsZWRMZWdhY3kpCiAgICAgICAgIHJldHVybiBOTzsKIAot
ICAgIHJldHVybiBbc2VsZiBfaGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd246ZXZl
bnRdOworICAgIHJldHVybiBbc2VsZiBfd2tfaGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtl
eURvd246ZXZlbnRdOwogfQogCi0tICh2b2lkKV9kb25lV2l0aEtleUV2ZW50OihOU0V2ZW50ICop
ZXZlbnQgZXZlbnRXYXNIYW5kbGVkOihCT09MKWV2ZW50V2FzSGFuZGxlZAorLSAodm9pZClfd2tf
ZG9uZVdpdGhLZXlFdmVudDooTlNFdmVudCAqKWV2ZW50IGV2ZW50V2FzSGFuZGxlZDooQk9PTCll
dmVudFdhc0hhbmRsZWQKIHsKICAgICBpZiAoW2V2ZW50IHR5cGVdICE9IE5TS2V5RG93bikKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFtzZWxmIF90cnlQb3N0UHJvY2Vzc1BsdWdpbkNvbXBs
ZXhUZXh0SW5wdXRLZXlEb3duOmV2ZW50XSkKKyAgICBpZiAoW3NlbGYgX3drX3RyeVBvc3RQcm9j
ZXNzUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd246ZXZlbnRdKQogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgaWYgKGV2ZW50V2FzSGFuZGxlZCkgewpAQCAtMjM4Miw3ICsyMzgzLDcgQEAg
LSAodm9pZClfZG9uZVdpdGhLZXlFdmVudDooTlNFdmVudCAqKWV2ZQogICAgIF9kYXRhLT5fa2V5
RG93bkV2ZW50QmVpbmdSZXNlbnQgPSBudWxscHRyOwogfQogCi0tIChCT09MKV9pbnRlcnByZXRL
ZXlFdmVudDooTlNFdmVudCAqKWV2ZW50IHNhdmluZ0NvbW1hbmRzVG86KFZlY3RvcjxXZWJDb3Jl
OjpLZXlwcmVzc0NvbW1hbmQ+Jiljb21tYW5kcworLSAoQk9PTClfd2tfaW50ZXJwcmV0S2V5RXZl
bnQ6KE5TRXZlbnQgKilldmVudCBzYXZpbmdDb21tYW5kc1RvOihWZWN0b3I8V2ViQ29yZTo6S2V5
cHJlc3NDb21tYW5kPiYpY29tbWFuZHMKIHsKICAgICBBU1NFUlQoIV9kYXRhLT5faW50ZXJwcmV0
S2V5RXZlbnRzUGFyYW1ldGVycyk7CiAgICAgQVNTRVJUKGNvbW1hbmRzLmlzRW1wdHkoKSk7CkBA
IC0yNDE3LDEyICsyNDE4LDEyIEBAIC0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihOU0V2ZW50
ICopZXYKICAgICByZXR1cm4gcGFyYW1ldGVycy5ldmVudEludGVycHJldGF0aW9uSGFkU2lkZUVm
ZmVjdHM7CiB9CiAKLS0gKE5TUmVjdClfY29udmVydFRvRGV2aWNlU3BhY2U6KE5TUmVjdClyZWN0
CistIChOU1JlY3QpX3drX2NvbnZlcnRUb0RldmljZVNwYWNlOihOU1JlY3QpcmVjdAogewogICAg
IHJldHVybiB0b0RldmljZVNwYWNlKHJlY3QsIFtzZWxmIHdpbmRvd10pOwogfQogCi0tIChOU1Jl
Y3QpX2NvbnZlcnRUb1VzZXJTcGFjZTooTlNSZWN0KXJlY3QKKy0gKE5TUmVjdClfd2tfY29udmVy
dFRvVXNlclNwYWNlOihOU1JlY3QpcmVjdAogewogICAgIHJldHVybiB0b1VzZXJTcGFjZShyZWN0
LCBbc2VsZiB3aW5kb3ddKTsKIH0KQEAgLTI0MzgsNyArMjQzOSw3IEBAIC0gKE5TVHJhY2tpbmdS
ZWN0VGFnKWFkZFRyYWNraW5nUmVjdDooTlMKICAgICByZXR1cm4gVFJBQ0tJTkdfUkVDVF9UQUc7
CiB9CiAKLS0gKE5TVHJhY2tpbmdSZWN0VGFnKV9hZGRUcmFja2luZ1JlY3Q6KE5TUmVjdClyZWN0
IG93bmVyOihpZClvd25lciB1c2VyRGF0YToodm9pZCAqKWRhdGEgYXNzdW1lSW5zaWRlOihCT09M
KWFzc3VtZUluc2lkZSB1c2VUcmFja2luZ051bTooaW50KXRhZworLSAoTlNUcmFja2luZ1JlY3RU
YWcpX3drX2FkZFRyYWNraW5nUmVjdDooTlNSZWN0KXJlY3Qgb3duZXI6KGlkKW93bmVyIHVzZXJE
YXRhOih2b2lkICopZGF0YSBhc3N1bWVJbnNpZGU6KEJPT0wpYXNzdW1lSW5zaWRlIHVzZVRyYWNr
aW5nTnVtOihpbnQpdGFnCiB7CiAgICAgQVNTRVJUKHRhZyA9PSAwIHx8IHRhZyA9PSBUUkFDS0lO
R19SRUNUX1RBRyk7CiAgICAgQVNTRVJUKF9kYXRhLT5fdHJhY2tpbmdSZWN0T3duZXIgPT0gbmls
KTsKQEAgLTI0NDcsNyArMjQ0OCw3IEBAIC0gKE5TVHJhY2tpbmdSZWN0VGFnKV9hZGRUcmFja2lu
Z1JlY3Q6KE4KICAgICByZXR1cm4gVFJBQ0tJTkdfUkVDVF9UQUc7CiB9CiAKLS0gKHZvaWQpX2Fk
ZFRyYWNraW5nUmVjdHM6KE5TUmVjdCAqKXJlY3RzIG93bmVyOihpZClvd25lciB1c2VyRGF0YUxp
c3Q6KHZvaWQgKiopdXNlckRhdGFMaXN0IGFzc3VtZUluc2lkZUxpc3Q6KEJPT0wgKilhc3N1bWVJ
bnNpZGVMaXN0IHRyYWNraW5nTnVtczooTlNUcmFja2luZ1JlY3RUYWcgKil0cmFja2luZ051bXMg
Y291bnQ6KGludCljb3VudAorLSAodm9pZClfd2tfYWRkVHJhY2tpbmdSZWN0czooTlNSZWN0ICop
cmVjdHMgb3duZXI6KGlkKW93bmVyIHVzZXJEYXRhTGlzdDoodm9pZCAqKil1c2VyRGF0YUxpc3Qg
YXNzdW1lSW5zaWRlTGlzdDooQk9PTCAqKWFzc3VtZUluc2lkZUxpc3QgdHJhY2tpbmdOdW1zOihO
U1RyYWNraW5nUmVjdFRhZyAqKXRyYWNraW5nTnVtcyBjb3VudDooaW50KWNvdW50CiB7CiAgICAg
QVNTRVJUKGNvdW50ID09IDEpOwogICAgIEFTU0VSVCh0cmFja2luZ051bXNbMF0gPT0gMCB8fCB0
cmFja2luZ051bXNbMF0gPT0gVFJBQ0tJTkdfUkVDVF9UQUcpOwpAQCAtMjQ4MSw3ICsyNDgyLDcg
QEAgLSAodm9pZClyZW1vdmVUcmFja2luZ1JlY3Q6KE5TVHJhY2tpbmdSZQogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCi0tICh2b2lkKV9yZW1vdmVUcmFja2luZ1JlY3RzOihOU1RyYWNr
aW5nUmVjdFRhZyAqKXRhZ3MgY291bnQ6KGludCljb3VudAorLSAodm9pZClfd2tfcmVtb3ZlVHJh
Y2tpbmdSZWN0czooTlNUcmFja2luZ1JlY3RUYWcgKil0YWdzIGNvdW50OihpbnQpY291bnQKIHsK
ICAgICBpbnQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewpAQCAtMjQ5NSw3
ICsyNDk2LDcgQEAgLSAodm9pZClfcmVtb3ZlVHJhY2tpbmdSZWN0czooTlNUcmFja2luZwogICAg
IH0KIH0KIAotLSAodm9pZClfc2VuZFRvb2xUaXBNb3VzZUV4aXRlZAorLSAodm9pZClfd2tfc2Vu
ZFRvb2xUaXBNb3VzZUV4aXRlZAogewogICAgIC8vIE5vdGhpbmcgbWF0dGVycyBleGNlcHQgd2lu
ZG93LCB0cmFja2luZ051bWJlciwgYW5kIHVzZXJEYXRhLgogICAgIE5TRXZlbnQgKmZha2VFdmVu
dCA9IFtOU0V2ZW50IGVudGVyRXhpdEV2ZW50V2l0aFR5cGU6TlNNb3VzZUV4aXRlZApAQCAtMjUx
MCw3ICsyNTExLDcgQEAgLSAodm9pZClfc2VuZFRvb2xUaXBNb3VzZUV4aXRlZAogICAgIFtfZGF0
YS0+X3RyYWNraW5nUmVjdE93bmVyIG1vdXNlRXhpdGVkOmZha2VFdmVudF07CiB9CiAKLS0gKHZv
aWQpX3NlbmRUb29sVGlwTW91c2VFbnRlcmVkCistICh2b2lkKV93a19zZW5kVG9vbFRpcE1vdXNl
RW50ZXJlZAogewogICAgIC8vIE5vdGhpbmcgbWF0dGVycyBleGNlcHQgd2luZG93LCB0cmFja2lu
Z051bWJlciwgYW5kIHVzZXJEYXRhLgogICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50
IGVudGVyRXhpdEV2ZW50V2l0aFR5cGU6TlNNb3VzZUVudGVyZWQKQEAgLTI1MjUsMjYgKzI1MjYs
MjEgQEAgLSAodm9pZClfc2VuZFRvb2xUaXBNb3VzZUVudGVyZWQKICAgICBbX2RhdGEtPl90cmFj
a2luZ1JlY3RPd25lciBtb3VzZUVudGVyZWQ6ZmFrZUV2ZW50XTsKIH0KIAotLSAoTlNTdHJpbmcg
Kil2aWV3OihOU1ZpZXcgKil2aWV3IHN0cmluZ0ZvclRvb2xUaXA6KE5TVG9vbFRpcFRhZyl0YWcg
cG9pbnQ6KE5TUG9pbnQpcG9pbnQgdXNlckRhdGE6KHZvaWQgKilkYXRhCi17Ci0gICAgcmV0dXJu
IG5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcoX2RhdGEtPl9wYWdlLT50b29sVGlwKCkpOwotfQot
Ci0tICh2b2lkKV90b29sVGlwQ2hhbmdlZEZyb206KE5TU3RyaW5nICopb2xkVG9vbFRpcCB0bzoo
TlNTdHJpbmcgKiluZXdUb29sVGlwCistICh2b2lkKV93a190b29sVGlwQ2hhbmdlZEZyb206KE5T
U3RyaW5nICopb2xkVG9vbFRpcCB0bzooTlNTdHJpbmcgKiluZXdUb29sVGlwCiB7CiAgICAgaWYg
KG9sZFRvb2xUaXApCi0gICAgICAgIFtzZWxmIF9zZW5kVG9vbFRpcE1vdXNlRXhpdGVkXTsKKyAg
ICAgICAgW3NlbGYgX3drX3NlbmRUb29sVGlwTW91c2VFeGl0ZWRdOwogCiAgICAgaWYgKG5ld1Rv
b2xUaXAgJiYgW25ld1Rvb2xUaXAgbGVuZ3RoXSA+IDApIHsKICAgICAgICAgLy8gU2VlIHJhZGFy
IDM1MDAyMTcgZm9yIHdoeSB3ZSByZW1vdmUgYWxsIHRvb2x0aXBzIHJhdGhlciB0aGFuIGp1c3Qg
dGhlIHNpbmdsZSBvbmUgd2UgY3JlYXRlZC4KICAgICAgICAgW3NlbGYgcmVtb3ZlQWxsVG9vbFRp
cHNdOwogICAgICAgICBOU1JlY3Qgd2lkZU9wZW5SZWN0ID0gTlNNYWtlUmVjdCgtMTAwMDAwLCAt
MTAwMDAwLCAyMDAwMDAsIDIwMDAwMCk7Ci0gICAgICAgIF9kYXRhLT5fbGFzdFRvb2xUaXBUYWcg
PSBbc2VsZiBhZGRUb29sVGlwUmVjdDp3aWRlT3BlblJlY3Qgb3duZXI6c2VsZiB1c2VyRGF0YTpO
VUxMXTsKLSAgICAgICAgW3NlbGYgX3NlbmRUb29sVGlwTW91c2VFbnRlcmVkXTsKKyAgICAgICAg
X2RhdGEtPl9sYXN0VG9vbFRpcFRhZyA9IFtzZWxmIGFkZFRvb2xUaXBSZWN0OndpZGVPcGVuUmVj
dCBvd25lcjpfZGF0YSB1c2VyRGF0YTpOVUxMXTsKKyAgICAgICAgW3NlbGYgX3drX3NlbmRUb29s
VGlwTW91c2VFbnRlcmVkXTsKICAgICB9CiB9CiAKLS0gKHZvaWQpX3NldEZpbmRJbmRpY2F0b3I6
KFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4pZmluZEluZGljYXRvciBmYWRlT3V0OihCT09MKWZh
ZGVPdXQgYW5pbWF0ZTooQk9PTClhbmltYXRlCistICh2b2lkKV93a19zZXRGaW5kSW5kaWNhdG9y
OihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+KWZpbmRJbmRpY2F0b3IgZmFkZU91dDooQk9PTClm
YWRlT3V0IGFuaW1hdGU6KEJPT0wpYW5pbWF0ZQogewogICAgIGlmICghZmluZEluZGljYXRvcikg
ewogICAgICAgICBfZGF0YS0+X2ZpbmRJbmRpY2F0b3JXaW5kb3cgPSBudWxscHRyOwpAQCAtMjU1
Nyw3ICsyNTUzLDcgQEAgLSAodm9pZClfc2V0RmluZEluZGljYXRvcjooUGFzc1JlZlB0cjxGaQog
ICAgIF9kYXRhLT5fZmluZEluZGljYXRvcldpbmRvdy0+c2V0RmluZEluZGljYXRvcihmaW5kSW5k
aWNhdG9yLCBmYWRlT3V0LCBhbmltYXRlKTsKIH0KIAotLSAodm9pZClfZW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZTooY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpbGF5ZXJUcmVlQ29udGV4
dAorLSAodm9pZClfd2tfZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZTooY29uc3QgTGF5
ZXJUcmVlQ29udGV4dCYpbGF5ZXJUcmVlQ29udGV4dAogewogICAgIEFTU0VSVCghX2RhdGEtPl9s
YXllckhvc3RpbmdWaWV3KTsKICAgICBBU1NFUlQoIWxheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgp
KTsKQEAgLTI1ODYsNyArMjU4Miw3IEBAIC0gKHZvaWQpX2VudGVyQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGUKICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwogfQogCi0tICh2b2lkKV9leGl0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUKKy0gKHZvaWQpX3drX2V4aXRBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZQogewogICAgIEFTU0VSVChfZGF0YS0+X2xheWVySG9zdGluZ1ZpZXcpOwog
CkBAIC0yNTk3LDcgKzI1OTMsNyBAQCAtICh2b2lkKV9leGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUKICAgICBfZGF0YS0+X2xheWVySG9zdGluZ1ZpZXcgPSBudWxscHRyOwogfQogCi0tICh2
b2lkKV91cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZTooY29uc3QgV2ViS2l0OjpMYXll
clRyZWVDb250ZXh0JilsYXllclRyZWVDb250ZXh0CistICh2b2lkKV93a191cGRhdGVBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZTooY29uc3QgV2ViS2l0OjpMYXllclRyZWVDb250ZXh0JilsYXll
clRyZWVDb250ZXh0CiB7CiAgICAgaWYgKF9kYXRhLT5fbGF5ZXJIb3N0aW5nVmlldykgewogICAg
ICAgICAvLyBXcmFwIHRoZSBjYWxsIHRvIHNldFN1YmxheWVyczogaW4gYSBDQVRyYW5zYWN0aW9u
IHdpdGggYWN0aW9ucyBkaXNhYmxlZCB0bwpAQCAtMjYxMCwxOCArMjYwNiwxOCBAQCAtICh2b2lk
KV91cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kCiAKICAgICAgICAgW0NBVHJhbnNhY3Rp
b24gY29tbWl0XTsKICAgICB9IGVsc2UgewotICAgICAgICBbc2VsZiBfZXhpdEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlXTsKLSAgICAgICAgW3NlbGYgX2VudGVyQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGU6bGF5ZXJUcmVlQ29udGV4dF07CisgICAgICAgIFtzZWxmIF93a19leGl0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGVdOworICAgICAgICBbc2VsZiBfd2tfZW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZTpsYXllclRyZWVDb250ZXh0XTsKICAgICB9CiB9CiAKLS0gKHZvaWQp
X3NldEFjY2Vzc2liaWxpdHlXZWJQcm9jZXNzVG9rZW46KE5TRGF0YSAqKWRhdGEKKy0gKHZvaWQp
X3drX3NldEFjY2Vzc2liaWxpdHlXZWJQcm9jZXNzVG9rZW46KE5TRGF0YSAqKWRhdGEKIHsKICAg
ICBfZGF0YS0+X3JlbW90ZUFjY2Vzc2liaWxpdHlDaGlsZCA9IFdLQVhSZW1vdGVFbGVtZW50Rm9y
VG9rZW4oZGF0YSk7Ci0gICAgW3NlbGYgX3VwZGF0ZVJlbW90ZUFjY2Vzc2liaWxpdHlSZWdpc3Ry
YXRpb246WUVTXTsKKyAgICBbc2VsZiBfd2tfdXBkYXRlUmVtb3RlQWNjZXNzaWJpbGl0eVJlZ2lz
dHJhdGlvbjpZRVNdOwogfQogCi0tICh2b2lkKV9wbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFu
Z2VkOihCT09MKXBsdWdpbkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMgcGx1Z2luQ29tcGxleFRl
eHRJbnB1dElkZW50aWZpZXI6KHVpbnQ2NF90KXBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlm
aWVyCistICh2b2lkKV93a19wbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkOihCT09MKXBs
dWdpbkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50
aWZpZXI6KHVpbnQ2NF90KXBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyCiB7CiAgICAg
Qk9PTCBpbnB1dFNvdXJjZUNoYW5nZWQgPSBfZGF0YS0+X3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRJ
ZGVudGlmaWVyOwogCkBAIC0yNjQ5LDE3ICsyNjQ1LDE3IEBAIC0gKHZvaWQpX3BsdWdpbkZvY3Vz
T3JXaW5kb3dGb2N1c0NoYW5nZWQKICAgICBbTlNBcHAgdXBkYXRlV2luZG93c107CiB9CiAKLS0g
KHZvaWQpX3NldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZTooUGx1Z2luQ29tcGxleFRleHRJ
bnB1dFN0YXRlKXBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSBwbHVnaW5Db21wbGV4VGV4dElu
cHV0SWRlbnRpZmllcjoodWludDY0X3QpcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIK
Ky0gKHZvaWQpX3drX3NldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZTooUGx1Z2luQ29tcGxl
eFRleHRJbnB1dFN0YXRlKXBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSBwbHVnaW5Db21wbGV4
VGV4dElucHV0SWRlbnRpZmllcjoodWludDY0X3QpcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50
aWZpZXIKIHsKICAgICBpZiAocGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIgIT0gX2Rh
dGEtPl9wbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcikgewogICAgICAgICAvLyBXZSdy
ZSBhc2tlZCB0byB1cGRhdGUgdGhlIHN0YXRlIGZvciBhIHBsdWctaW4gdGhhdCBkb2Vzbid0IGhh
dmUgZm9jdXMuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBbc2VsZiBfc2V0UGx1Z2lu
Q29tcGxleFRleHRJbnB1dFN0YXRlOnBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZV07CisgICAg
W3NlbGYgX3drX3NldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZTpwbHVnaW5Db21wbGV4VGV4
dElucHV0U3RhdGVdOwogfQogCi0tICh2b2lkKV9zZXRQYWdlSGFzQ3VzdG9tUmVwcmVzZW50YXRp
b246KEJPT0wpcGFnZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uCistICh2b2lkKV93a19zZXRQYWdl
SGFzQ3VzdG9tUmVwcmVzZW50YXRpb246KEJPT0wpcGFnZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9u
CiB7CiAgICAgYm9vbCBoYWRQREZWaWV3ID0gX2RhdGEtPl9wZGZWaWV3Q29udHJvbGxlcjsKICAg
ICBfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyID0gbnVsbHB0cjsKQEAgLTI2NzEsMTQgKzI2Njcs
MTQgQEAgLSAodm9pZClfc2V0UGFnZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uOgogICAgICAgICBf
ZGF0YS0+X3BhZ2UtPmRyYXdpbmdBcmVhKCktPnBhZ2VDdXN0b21SZXByZXNlbnRhdGlvbkNoYW5n
ZWQoKTsKIH0KIAotLSAodm9pZClfZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNl
bnRhdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZTooY29uc3QgU3RyaW5nJilzdWdnZXN0ZWRGaWxl
bmFtZSBkYXRhUmVmZXJlbmNlOihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJilkYXRhUmVm
ZXJlbmNlCistICh2b2lkKV93a19kaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2Vu
dGF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOihjb25zdCBTdHJpbmcmKXN1Z2dlc3RlZEZpbGVu
YW1lIGRhdGFSZWZlcmVuY2U6KGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKWRhdGFSZWZl
cmVuY2UKIHsKICAgICBBU1NFUlQoX2RhdGEtPl9wZGZWaWV3Q29udHJvbGxlcik7CiAKICAgICBf
ZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyLT5zZXRQREZEb2N1bWVudERhdGEoX2RhdGEtPl9wYWdl
LT5tYWluRnJhbWUoKS0+bWltZVR5cGUoKSwgc3VnZ2VzdGVkRmlsZW5hbWUsIGRhdGFSZWZlcmVu
Y2UpOwogfQogCi0tIChkb3VibGUpX2N1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcgorLSAo
ZG91YmxlKV93a19jdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IKIHsKICAgICBpZiAoIV9k
YXRhLT5fcGRmVmlld0NvbnRyb2xsZXIpCiAgICAgICAgIHJldHVybiAxOwpAQCAtMjY4Niw3ICsy
NjgyLDcgQEAgLSAoZG91YmxlKV9jdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0bwogICAgIHJl
dHVybiBfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyLT56b29tRmFjdG9yKCk7CiB9CiAKLS0gKHZv
aWQpX3NldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcjooZG91YmxlKXpvb21GYWN0b3IK
Ky0gKHZvaWQpX3drX3NldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcjooZG91YmxlKXpv
b21GYWN0b3IKIHsKICAgICBpZiAoIV9kYXRhLT5fcGRmVmlld0NvbnRyb2xsZXIpCiAgICAgICAg
IHJldHVybjsKQEAgLTI2OTQsNyArMjY5MCw3IEBAIC0gKHZvaWQpX3NldEN1c3RvbVJlcHJlc2Vu
dGF0aW9uWm9vbUZhY3QKICAgICBfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyLT5zZXRab29tRmFj
dG9yKHpvb21GYWN0b3IpOwogfQogCi0tICh2b2lkKV9maW5kU3RyaW5nSW5DdXN0b21SZXByZXNl
bnRhdGlvbjooTlNTdHJpbmcgKilzdHJpbmcgd2l0aEZpbmRPcHRpb25zOihXZWJLaXQ6OkZpbmRP
cHRpb25zKW9wdGlvbnMgbWF4TWF0Y2hDb3VudDooTlNVSW50ZWdlciljb3VudAorLSAodm9pZClf
d2tfZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb246KE5TU3RyaW5nICopc3RyaW5nIHdp
dGhGaW5kT3B0aW9uczooV2ViS2l0OjpGaW5kT3B0aW9ucylvcHRpb25zIG1heE1hdGNoQ291bnQ6
KE5TVUludGVnZXIpY291bnQKIHsKICAgICBpZiAoIV9kYXRhLT5fcGRmVmlld0NvbnRyb2xsZXIp
CiAgICAgICAgIHJldHVybjsKQEAgLTI3MDIsNyArMjY5OCw3IEBAIC0gKHZvaWQpX2ZpbmRTdHJp
bmdJbkN1c3RvbVJlcHJlc2VudGF0aW8KICAgICBfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyLT5m
aW5kU3RyaW5nKHN0cmluZywgb3B0aW9ucywgY291bnQpOwogfQogCi0tICh2b2lkKV9jb3VudFN0
cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uOihOU1N0cmluZyAqKXN0cmluZyB3aXRo
RmluZE9wdGlvbnM6KFdlYktpdDo6RmluZE9wdGlvbnMpb3B0aW9ucyBtYXhNYXRjaENvdW50OihO
U1VJbnRlZ2VyKWNvdW50CistICh2b2lkKV93a19jb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJl
cHJlc2VudGF0aW9uOihOU1N0cmluZyAqKXN0cmluZyB3aXRoRmluZE9wdGlvbnM6KFdlYktpdDo6
RmluZE9wdGlvbnMpb3B0aW9ucyBtYXhNYXRjaENvdW50OihOU1VJbnRlZ2VyKWNvdW50CiB7CiAg
ICAgaWYgKCFfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyKQogICAgICAgICByZXR1cm47CkBAIC0y
NzEwLDcgKzI3MDYsNyBAQCAtICh2b2lkKV9jb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJl
CiAgICAgX2RhdGEtPl9wZGZWaWV3Q29udHJvbGxlci0+Y291bnRTdHJpbmdNYXRjaGVzKHN0cmlu
Zywgb3B0aW9ucywgY291bnQpOwogfQogCi0tICh2b2lkKV9zZXREcmFnSW1hZ2U6KE5TSW1hZ2Ug
KilpbWFnZSBhdDooTlNQb2ludCljbGllbnRQb2ludCBsaW5rRHJhZzooQk9PTClsaW5rRHJhZwor
LSAodm9pZClfd2tfc2V0RHJhZ0ltYWdlOihOU0ltYWdlICopaW1hZ2UgYXQ6KE5TUG9pbnQpY2xp
ZW50UG9pbnQgbGlua0RyYWc6KEJPT0wpbGlua0RyYWcKIHsKICAgICBJbnRTaXplIHNpemUoW2lt
YWdlIHNpemVdKTsKICAgICBzaXplLnNjYWxlKDEuMCAvIF9kYXRhLT5fcGFnZS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7CkBAIC0yNzM1LDcgKzI3MzEsNyBAQCBzdGF0aWMgYm9vbCBtYXRjaGVzRXh0
ZW5zaW9uT3JFcXVpdmFsZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBoYXNDYXNlSW5zZW5zaXRpdmVTdWZm
aXgoZmlsZW5hbWUsIEAiLmpwZyIpKTsKIH0KIAotLSAodm9pZClfc2V0UHJvbWlzZWREYXRhOihX
ZWJDb3JlOjpJbWFnZSAqKWltYWdlIHdpdGhGaWxlTmFtZTooTlNTdHJpbmcgKilmaWxlbmFtZSB3
aXRoRXh0ZW5zaW9uOihOU1N0cmluZyAqKWV4dGVuc2lvbiB3aXRoVGl0bGU6KE5TU3RyaW5nICop
dGl0bGUgd2l0aFVSTDooTlNTdHJpbmcgKil1cmwgd2l0aFZpc2libGVVUkw6KE5TU3RyaW5nICop
dmlzaWJsZVVybCB3aXRoQXJjaGl2ZTooV2ViQ29yZTo6U2hhcmVkQnVmZmVyKikgYXJjaGl2ZUJ1
ZmZlciBmb3JQYXN0ZWJvYXJkOihOU1N0cmluZyAqKXBhc3RlYm9hcmROYW1lCistICh2b2lkKV93
a19zZXRQcm9taXNlZERhdGE6KFdlYkNvcmU6OkltYWdlICopaW1hZ2Ugd2l0aEZpbGVOYW1lOihO
U1N0cmluZyAqKWZpbGVuYW1lIHdpdGhFeHRlbnNpb246KE5TU3RyaW5nICopZXh0ZW5zaW9uIHdp
dGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSB3aXRoVVJMOihOU1N0cmluZyAqKXVybCB3aXRoVmlz
aWJsZVVSTDooTlNTdHJpbmcgKil2aXNpYmxlVXJsIHdpdGhBcmNoaXZlOihXZWJDb3JlOjpTaGFy
ZWRCdWZmZXIqKSBhcmNoaXZlQnVmZmVyIGZvclBhc3RlYm9hcmQ6KE5TU3RyaW5nICopcGFzdGVi
b2FyZE5hbWUKIAogewogICAgIE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9h
cmQgcGFzdGVib2FyZFdpdGhOYW1lOnBhc3RlYm9hcmROYW1lXTsKQEAgLTI4NDMsOSArMjgzOSw5
IEBAIC0gKE5TQXJyYXkgKiluYW1lc09mUHJvbWlzZWRGaWxlc0Ryb3BwZWQKICAgICByZXR1cm4g
W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OltwYXRoIGxhc3RQYXRoQ29tcG9uZW50XV07CiB9CiAK
LS0gKHZvaWQpX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGUKKy0gKHZvaWQpX3drX3VwZGF0ZVNlY3Vy
ZUlucHV0U3RhdGUKIHsKLSAgICBpZiAoIVtbc2VsZiB3aW5kb3ddIGlzS2V5V2luZG93XSB8fCAh
W3NlbGYgX2lzRm9jdXNlZF0pIHsKKyAgICBpZiAoIVtbc2VsZiB3aW5kb3ddIGlzS2V5V2luZG93
XSB8fCAhW3NlbGYgX3drX2lzRm9jdXNlZF0pIHsKICAgICAgICAgaWYgKF9kYXRhLT5faW5TZWN1
cmVJbnB1dFN0YXRlKSB7CiAgICAgICAgICAgICBEaXNhYmxlU2VjdXJlRXZlbnRJbnB1dCgpOwog
ICAgICAgICAgICAgX2RhdGEtPl9pblNlY3VyZUlucHV0U3RhdGUgPSBOTzsKQEAgLTI4NzEsMTMg
KzI4NjcsMTMgQEAgLSAodm9pZClfdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZQogICAgIF9kYXRhLT5f
aW5TZWN1cmVJbnB1dFN0YXRlID0gaXNJblBhc3N3b3JkRmllbGQ7CiB9CiAKLS0gKHZvaWQpX3Vw
ZGF0ZVRleHRJbnB1dFN0YXRlSW5jbHVkaW5nU2VjdXJlSW5wdXRTdGF0ZTooQk9PTCl1cGRhdGVT
ZWN1cmVJbnB1dFN0YXRlCistICh2b2lkKV93a191cGRhdGVUZXh0SW5wdXRTdGF0ZUluY2x1ZGlu
Z1NlY3VyZUlucHV0U3RhdGU6KEJPT0wpdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZQogewogICAgIGNv
bnN0IEVkaXRvclN0YXRlJiBlZGl0b3JTdGF0ZSA9IF9kYXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUo
KTsKICAgICBpZiAodXBkYXRlU2VjdXJlSW5wdXRTdGF0ZSkgewogICAgICAgICAvLyBUaGlzIGlz
IGEgdGVtcG9yYXJ5IHN0YXRlIHdoZW4gZWRpdGluZy4gRmxpcHBpbmcgc2VjdXJlIGlucHV0IHN0
YXRlIHRvbyBxdWlja2x5IGNhbiBleHBvc2UgcmFjZSBjb25kaXRpb25zLgogICAgICAgICBpZiAo
IWVkaXRvclN0YXRlLnNlbGVjdGlvbklzTm9uZSkKLSAgICAgICAgICAgIFtzZWxmIF91cGRhdGVT
ZWN1cmVJbnB1dFN0YXRlXTsKKyAgICAgICAgICAgIFtzZWxmIF93a191cGRhdGVTZWN1cmVJbnB1
dFN0YXRlXTsKICAgICB9CiAKICAgICBpZiAoIWVkaXRvclN0YXRlLmhhc0NvbXBvc2l0aW9uIHx8
IGVkaXRvclN0YXRlLnNob3VsZElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlKQpAQCAt
Mjg4NSwxMiArMjg4MSwxMiBAQCAtICh2b2lkKV91cGRhdGVUZXh0SW5wdXRTdGF0ZUluY2x1ZGlu
Z1NlCiAKICAgICBfZGF0YS0+X3BhZ2UtPmNhbmNlbENvbXBvc2l0aW9uKCk7CiAKLSAgICBbc2Vs
ZiBfbm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbl07CisgICAgW3Nl
bGYgX3drX25vdGlmeUlucHV0Q29udGV4dEFib3V0RGlzY2FyZGVkQ29tcG9zaXRpb25dOwogfQog
Ci0tICh2b2lkKV9yZXNldFRleHRJbnB1dFN0YXRlCistICh2b2lkKV93a19yZXNldFRleHRJbnB1
dFN0YXRlCiB7Ci0gICAgW3NlbGYgX25vdGlmeUlucHV0Q29udGV4dEFib3V0RGlzY2FyZGVkQ29t
cG9zaXRpb25dOworICAgIFtzZWxmIF93a19ub3RpZnlJbnB1dENvbnRleHRBYm91dERpc2NhcmRl
ZENvbXBvc2l0aW9uXTsKIAogICAgIGlmIChfZGF0YS0+X2luU2VjdXJlSW5wdXRTdGF0ZSkgewog
ICAgICAgICBEaXNhYmxlU2VjdXJlRXZlbnRJbnB1dCgpOwpAQCAtMjg5OCw3ICsyODk0LDcgQEAg
LSAodm9pZClfcmVzZXRUZXh0SW5wdXRTdGF0ZQogICAgIH0KIH0KIAotLSAodm9pZClfZGlkQ2hh
bmdlU2Nyb2xsYmFyc0Zvck1haW5GcmFtZQorLSAodm9pZClfd2tfZGlkQ2hhbmdlU2Nyb2xsYmFy
c0Zvck1haW5GcmFtZQogewogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPT0g
MTA2MAogICAgIFtzZWxmIF91cGRhdGVHcm93Qm94Rm9yV2luZG93RnJhbWVDaGFuZ2VdOwpAQCAt
MjkwNiwxMiArMjkwMiwxMyBAQCAtICh2b2lkKV9kaWRDaGFuZ2VTY3JvbGxiYXJzRm9yTWFpbkZy
YW1lCiB9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0tIChCT09MKWhhc0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyCisKKy0gKEJPT0wpX3drX2hhc0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyCiB7CiAgICAgcmV0dXJuIChib29sKV9kYXRhLT5fZnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXI7CiB9CiAKLS0gKFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIqKWZ1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyCistIChXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKilfd2tfZnVs
bFNjcmVlbldpbmRvd0NvbnRyb2xsZXIKIHsKICAgICBpZiAoIV9kYXRhLT5fZnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIpIHsKICAgICAgICAgX2RhdGEtPl9mdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlci5hZG9wdE5TKFtbV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBhbGxvY10gaW5pdF0p
OwpAQCAtMjkyMCwxNiArMjkxNywxNyBAQCAtIChXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
KilmdWxsU2NyCiAgICAgcmV0dXJuIF9kYXRhLT5fZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIu
Z2V0KCk7CiB9CiAKLS0gKHZvaWQpY2xvc2VGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcgorLSAo
dm9pZClfd2tfY2xvc2VGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcgogewogICAgIGlmICghX2Rh
dGEtPl9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcikKICAgICAgICAgcmV0dXJuOwogICAgIFtf
ZGF0YS0+X2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmdldCgpIGNsb3NlXTsKICAgICBfZGF0
YS0+X2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyID0gbnVsbHB0cjsKIH0KKwogI2VuZGlmCiAK
LS0gKGJvb2wpX2V4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKKy0g
KGJvb2wpX3drX2V4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKIHsK
ICAgICAvLyBUaGUgc2luayBkb2VzIHR3byB0aGluZ3M6IDEpIFRlbGxzIHVzIGlmIHRoZSByZXNw
b25kZXIgd2VudCB1bmhhbmRsZWQsIGFuZAogICAgIC8vIDIpIHByZXZlbnRzIGFueSBOU0JlZXA7
IHdlIGRvbid0IGV2ZXIgd2FudCB0byBiZWVwIGhlcmUuCkBAIC0yOTM5LDcgKzI5MzcsNyBAQCAt
IChib29sKV9leGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3RvcjooCiAgICAgcmV0dXJuICFbc2lu
ay5nZXQoKSBkaWRSZWNlaXZlVW5oYW5kbGVkQ29tbWFuZF07CiB9CiAKLS0gKHZvaWQpX2NhY2hl
V2luZG93Qm90dG9tQ29ybmVyUmVjdAorLSAodm9pZClfd2tfY2FjaGVXaW5kb3dCb3R0b21Db3Ju
ZXJSZWN0CiB7CiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDcwCiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCByZW1vdmUgdGhpcyBjb2RlIHdoZW4gPHJkYXI6Ly9wcm9i
bGVtLzkzNjIwODU+IGlzIHJlc29sdmVkLiAKQEAgLTI5NTMsNyArMjk1MSw3IEBAIC0gKHZvaWQp
X2NhY2hlV2luZG93Qm90dG9tQ29ybmVyUmVjdAogI2VuZGlmCiB9CiAKLS0gKE5TSW50ZWdlcilz
cGVsbENoZWNrZXJEb2N1bWVudFRhZworLSAoTlNJbnRlZ2VyKV93a19zcGVsbENoZWNrZXJEb2N1
bWVudFRhZwogewogICAgIGlmICghX2RhdGEtPl9oYXNTcGVsbENoZWNrZXJEb2N1bWVudFRhZykg
ewogICAgICAgICBfZGF0YS0+X3NwZWxsQ2hlY2tlckRvY3VtZW50VGFnID0gW05TU3BlbGxDaGVj
a2VyIHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWddOwpAQCAtMjk2MiwxNyArMjk2MCwxNyBAQCAtIChO
U0ludGVnZXIpc3BlbGxDaGVja2VyRG9jdW1lbnRUYWcKICAgICByZXR1cm4gX2RhdGEtPl9zcGVs
bENoZWNrZXJEb2N1bWVudFRhZzsKIH0KIAotLSAodm9pZCloYW5kbGVBY2NlcHRlZEFsdGVybmF0
aXZlVGV4dDooTlNTdHJpbmcqKXRleHQKKy0gKHZvaWQpX3drX2hhbmRsZUFjY2VwdGVkQWx0ZXJu
YXRpdmVUZXh0OihOU1N0cmluZyopdGV4dAogewogICAgIF9kYXRhLT5fcGFnZS0+aGFuZGxlQWx0
ZXJuYXRpdmVUZXh0VUlSZXN1bHQodGV4dCk7CiB9CiAKLS0gKHZvaWQpX3NldFN1cHByZXNzVmlz
aWJpbGl0eVVwZGF0ZXM6KEJPT0wpc3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcworLSAodm9pZClf
d2tfc2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlczooQk9PTClzdXBwcmVzc1Zpc2liaWxpdHlV
cGRhdGVzCiB7CiAgICAgX2RhdGEtPl9wYWdlLT5zZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVz
KHN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMpOwogfQogCi0tIChCT09MKV9zdXBwcmVzc1Zpc2li
aWxpdHlVcGRhdGVzCistIChCT09MKV93a19zdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzCiB7CiAg
ICAgcmV0dXJuIF9kYXRhLT5fcGFnZS0+c3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcygpOwogfQpA
QCAtMjk4MSw3ICsyOTc5LDcgQEAgLSAoQk9PTClfc3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcwog
CiBAaW1wbGVtZW50YXRpb24gV0tWaWV3IChQcml2YXRlKQogCi0tICh2b2lkKV9yZWdpc3RlckRy
YWdnZWRUeXBlcworLSAodm9pZClfd2tfcmVnaXN0ZXJEcmFnZ2VkVHlwZXMKIHsKICAgICBOU011
dGFibGVTZXQgKnR5cGVzID0gW1tOU011dGFibGVTZXQgYWxsb2NdIGluaXRXaXRoQXJyYXk6UGFz
dGVib2FyZFR5cGVzOjpmb3JFZGl0aW5nKCldOwogICAgIFt0eXBlcyBhZGRPYmplY3RzRnJvbUFy
cmF5OlBhc3RlYm9hcmRUeXBlczo6Zm9yVVJMKCldOwpAQCAtMzAyNSw5ICszMDIzLDEwIEBAIC0g
KGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBjb250ZXgKIAogICAgIF9kYXRhID0gW1tX
S1ZpZXdEYXRhIGFsbG9jXSBpbml0XTsKIAorICAgIF9kYXRhLT5fdmlldyA9IHNlbGY7CiAgICAg
X2RhdGEtPl9wYWdlQ2xpZW50ID0gUGFnZUNsaWVudEltcGw6OmNyZWF0ZShzZWxmKTsKICAgICBf
ZGF0YS0+X3BhZ2UgPSB0b0ltcGwoY29udGV4dFJlZiktPmNyZWF0ZVdlYlBhZ2UoX2RhdGEtPl9w
YWdlQ2xpZW50LmdldCgpLCB0b0ltcGwocGFnZUdyb3VwUmVmKSwgdG9JbXBsKHJlbGF0ZWRQYWdl
KSk7Ci0gICAgX2RhdGEtPl9wYWdlLT5zZXRJbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3Rvcihbc2Vs
ZiBfaW50cmluc2ljRGV2aWNlU2NhbGVGYWN0b3JdKTsKKyAgICBfZGF0YS0+X3BhZ2UtPnNldElu
dHJpbnNpY0RldmljZVNjYWxlRmFjdG9yKFtzZWxmIF93a19pbnRyaW5zaWNEZXZpY2VTY2FsZUZh
Y3Rvcl0pOwogICAgIF9kYXRhLT5fcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKICNpZiBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgX2RhdGEtPl9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigp
LT5zZXRXZWJWaWV3KHNlbGYpOwpAQCAtMzAzNSw3ICszMDM0LDcgQEAgLSAoaWQpaW5pdFdpdGhG
cmFtZTooTlNSZWN0KWZyYW1lIGNvbnRleAogICAgIF9kYXRhLT5fbW91c2VEb3duRXZlbnQgPSBu
aWw7CiAgICAgX2RhdGEtPl9pZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50cyA9IE5POwogCi0gICAg
W3NlbGYgX3JlZ2lzdGVyRHJhZ2dlZFR5cGVzXTsKKyAgICBbc2VsZiBfd2tfcmVnaXN0ZXJEcmFn
Z2VkVHlwZXNdOwogCiAgICAgaWYgKFtzZWxmIF9zaG91bGRVc2VUaWxlZERyYXdpbmdBcmVhXSkg
ewogICAgICAgICBzZWxmLndhbnRzTGF5ZXIgPSBZRVM7CkBAIC0zMDUwLDYgKzMwNDksNyBAQCAt
IChpZClpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUgY29udGV4CiB9CiAKICNpZiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAKKwogLSAoQk9PTCl3YW50c1VwZGF0ZUxh
eWVyCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9zaG91bGRVc2VUaWxlZERyYXdpbmdBcmVhXTsKQEAg
LTMwNjIsNiArMzA2Miw3IEBAIC0gKHZvaWQpdXBkYXRlTGF5ZXIKICAgICBpZiAoRHJhd2luZ0Fy
ZWFQcm94eSogZHJhd2luZ0FyZWEgPSBfZGF0YS0+X3BhZ2UtPmRyYXdpbmdBcmVhKCkpCiAgICAg
ICAgIGRyYXdpbmdBcmVhLT53YWl0Rm9yUG9zc2libGVHZW9tZXRyeVVwZGF0ZSgpOwogfQorCiAj
ZW5kaWYKIAogLSAoV0tQYWdlUmVmKXBhZ2VSZWYKQEAgLTMxMTYsNyArMzExNyw3IEBAIC0gKHZv
aWQpZW5hYmxlRnJhbWVTaXplVXBkYXRlcwogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYg
KCEoLS1fZGF0YS0+X2ZyYW1lU2l6ZVVwZGF0ZXNEaXNhYmxlZENvdW50KSkKLSAgICAgICAgW3Nl
bGYgX3NldERyYXdpbmdBcmVhU2l6ZTpbc2VsZiBmcmFtZV0uc2l6ZV07CisgICAgICAgIFtzZWxm
IF93a19zZXREcmF3aW5nQXJlYVNpemU6W3NlbGYgZnJhbWVdLnNpemVdOwogfQogCiAtIChCT09M
KWZyYW1lU2l6ZVVwZGF0ZXNEaXNhYmxlZApAQCAtMzE0MCw2ICszMTQxLDExIEBAICsgKHZvaWQp
aGlkZVdvcmREZWZpbml0aW9uV2luZG93CiAjZW5kaWYKIH0KIAorLSAoQk9PTClfc2hvdWxkVXNl
VGlsZWREcmF3aW5nQXJlYQoreworICAgIHJldHVybiBOTzsKK30KKwogQGVuZAogCiBAaW1wbGVt
ZW50YXRpb24gV0tSZXNwb25kZXJDaGFpblNpbmsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMTMxMzA4KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEx
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTAsNTggKzUwLDU5IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogQGNs
YXNzIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7CiAKIEBpbnRlcmZhY2UgV0tWaWV3IChJ
bnRlcm5hbCkKLS0gKFBhc3NPd25QdHI8V2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5PilfY3JlYXRl
RHJhd2luZ0FyZWFQcm94eTsKLS0gKEJPT0wpX2lzRm9jdXNlZDsKLS0gKHZvaWQpX3Byb2Nlc3NE
aWRDcmFzaDsKLS0gKHZvaWQpX3BhZ2VDbG9zZWQ7Ci0tICh2b2lkKV9kaWRSZWxhdW5jaFByb2Nl
c3M7Ci0tICh2b2lkKV90b29sVGlwQ2hhbmdlZEZyb206KE5TU3RyaW5nICopb2xkVG9vbFRpcCB0
bzooTlNTdHJpbmcgKiluZXdUb29sVGlwOwotLSAodm9pZClfc2V0Q3Vyc29yOihOU0N1cnNvciAq
KWN1cnNvcjsKLS0gKHZvaWQpX3NldFVzZXJJbnRlcmZhY2VJdGVtU3RhdGU6KE5TU3RyaW5nICop
Y29tbWFuZE5hbWUgZW5hYmxlZDooQk9PTClpc0VuYWJsZWQgc3RhdGU6KGludCluZXdTdGF0ZTsK
LS0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihOU0V2ZW50ICopdGhlRXZlbnQgc2F2aW5nQ29t
bWFuZHNUbzooVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mKWNvbW1hbmRzOwotLSAo
dm9pZClfZG9uZVdpdGhLZXlFdmVudDooTlNFdmVudCAqKWV2ZW50IGV2ZW50V2FzSGFuZGxlZDoo
Qk9PTClldmVudFdhc0hhbmRsZWQ7Ci0tIChib29sKV9leGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxl
Y3RvcjooU0VMKXNlbGVjdG9yOwotLSAoTlNSZWN0KV9jb252ZXJ0VG9EZXZpY2VTcGFjZTooTlNS
ZWN0KXJlY3Q7Ci0tIChOU1JlY3QpX2NvbnZlcnRUb1VzZXJTcGFjZTooTlNSZWN0KXJlY3Q7Ci0t
ICh2b2lkKV9zZXRGaW5kSW5kaWNhdG9yOihQYXNzUmVmUHRyPFdlYktpdDo6RmluZEluZGljYXRv
cj4pZmluZEluZGljYXRvciBmYWRlT3V0OihCT09MKWZhZGVPdXQgYW5pbWF0ZTooQk9PTClhbmlt
YXRlOwotCi0tICh2b2lkKV9lbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlOihjb25zdCBX
ZWJLaXQ6OkxheWVyVHJlZUNvbnRleHQmKWxheWVyVHJlZUNvbnRleHQ7Ci0tICh2b2lkKV9leGl0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGU7Ci0tICh2b2lkKV91cGRhdGVBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZTooY29uc3QgV2ViS2l0OjpMYXllclRyZWVDb250ZXh0JilsYXllclRyZWVD
b250ZXh0OwotCi0tICh2b2lkKV9zZXRBY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuOihOU0Rh
dGEgKilkYXRhOwotCi0tICh2b2lkKV9wbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkOihC
T09MKXBsdWdpbkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMgcGx1Z2luQ29tcGxleFRleHRJbnB1
dElkZW50aWZpZXI6KHVpbnQ2NF90KXBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyOwot
LSAodm9pZClfc2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlOihXZWJLaXQ6OlBsdWdpbkNv
bXBsZXhUZXh0SW5wdXRTdGF0ZSlwbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgcGx1Z2luQ29t
cGxleFRleHRJbnB1dElkZW50aWZpZXI6KHVpbnQ2NF90KXBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJ
ZGVudGlmaWVyOwotCi0tICh2b2lkKV9zZXRQYWdlSGFzQ3VzdG9tUmVwcmVzZW50YXRpb246KEJP
T0wpcGFnZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uOwotLSAodm9pZClfZGlkRmluaXNoTG9hZGlu
Z0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZTooY29uc3Qg
U3RyaW5nJilzdWdnZXN0ZWRGaWxlbmFtZSBkYXRhUmVmZXJlbmNlOihjb25zdCBDb3JlSVBDOjpE
YXRhUmVmZXJlbmNlJilkYXRhUmVmZXJlbmNlOwotLSAoZG91YmxlKV9jdXN0b21SZXByZXNlbnRh
dGlvblpvb21GYWN0b3I7Ci0tICh2b2lkKV9zZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0
b3I6KGRvdWJsZSl6b29tRmFjdG9yOwotLSAodm9pZClfZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVz
ZW50YXRpb246KE5TU3RyaW5nICopc3RyaW5nIHdpdGhGaW5kT3B0aW9uczooV2ViS2l0OjpGaW5k
T3B0aW9ucylvcHRpb25zIG1heE1hdGNoQ291bnQ6KE5TVUludGVnZXIpY291bnQ7Ci0tICh2b2lk
KV9jb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uOihOU1N0cmluZyAqKXN0
cmluZyB3aXRoRmluZE9wdGlvbnM6KFdlYktpdDo6RmluZE9wdGlvbnMpb3B0aW9ucyBtYXhNYXRj
aENvdW50OihOU1VJbnRlZ2VyKWNvdW50OwotLSAodm9pZClfc2V0RHJhZ0ltYWdlOihOU0ltYWdl
ICopaW1hZ2UgYXQ6KE5TUG9pbnQpY2xpZW50UG9pbnQgbGlua0RyYWc6KEJPT0wpbGlua0RyYWc7
Ci0tICh2b2lkKV9zZXRQcm9taXNlZERhdGE6KFdlYkNvcmU6OkltYWdlICopaW1hZ2Ugd2l0aEZp
bGVOYW1lOihOU1N0cmluZyAqKWZpbGVuYW1lIHdpdGhFeHRlbnNpb246KE5TU3RyaW5nICopZXh0
ZW5zaW9uIHdpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSB3aXRoVVJMOihOU1N0cmluZyAqKXVy
bCB3aXRoVmlzaWJsZVVSTDooTlNTdHJpbmcgKil2aXNpYmxlVXJsIHdpdGhBcmNoaXZlOihXZWJD
b3JlOjpTaGFyZWRCdWZmZXIqKSBhcmNoaXZlQnVmZmVyIGZvclBhc3RlYm9hcmQ6KE5TU3RyaW5n
ICopcGFzdGVib2FyZE5hbWU7Ci0tICh2b2lkKV91cGRhdGVTZWN1cmVJbnB1dFN0YXRlOwotLSAo
dm9pZClfdXBkYXRlVGV4dElucHV0U3RhdGVJbmNsdWRpbmdTZWN1cmVJbnB1dFN0YXRlOihCT09M
KXVwZGF0ZVNlY3VyZUlucHV0U3RhdGU7Ci0tICh2b2lkKV9yZXNldFRleHRJbnB1dFN0YXRlOwog
Ci0tICh2b2lkKV9kaWRDaGFuZ2VTY3JvbGxiYXJzRm9yTWFpbkZyYW1lOworLSAoUGFzc093blB0
cjxXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk+KV93a19jcmVhdGVEcmF3aW5nQXJlYVByb3h5Owor
LSAoQk9PTClfd2tfaXNGb2N1c2VkOworLSAodm9pZClfd2tfcHJvY2Vzc0RpZENyYXNoOworLSAo
dm9pZClfd2tfcGFnZUNsb3NlZDsKKy0gKHZvaWQpX3drX2RpZFJlbGF1bmNoUHJvY2VzczsKKy0g
KHZvaWQpX3drX3Rvb2xUaXBDaGFuZ2VkRnJvbTooTlNTdHJpbmcgKilvbGRUb29sVGlwIHRvOihO
U1N0cmluZyAqKW5ld1Rvb2xUaXA7CistICh2b2lkKV93a19zZXRDdXJzb3I6KE5TQ3Vyc29yICop
Y3Vyc29yOworLSAodm9pZClfd2tfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZTooTlNTdHJpbmcg
Kiljb21tYW5kTmFtZSBlbmFibGVkOihCT09MKWlzRW5hYmxlZCBzdGF0ZTooaW50KW5ld1N0YXRl
OworLSAoQk9PTClfd2tfaW50ZXJwcmV0S2V5RXZlbnQ6KE5TRXZlbnQgKil0aGVFdmVudCBzYXZp
bmdDb21tYW5kc1RvOihWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpY29tbWFuZHM7
CistICh2b2lkKV93a19kb25lV2l0aEtleUV2ZW50OihOU0V2ZW50ICopZXZlbnQgZXZlbnRXYXNI
YW5kbGVkOihCT09MKWV2ZW50V2FzSGFuZGxlZDsKKy0gKGJvb2wpX3drX2V4ZWN1dGVTYXZlZENv
bW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3I7CistIChOU1JlY3QpX3drX2NvbnZlcnRUb0Rl
dmljZVNwYWNlOihOU1JlY3QpcmVjdDsKKy0gKE5TUmVjdClfd2tfY29udmVydFRvVXNlclNwYWNl
OihOU1JlY3QpcmVjdDsKKy0gKHZvaWQpX3drX3NldEZpbmRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8
V2ViS2l0OjpGaW5kSW5kaWNhdG9yPilmaW5kSW5kaWNhdG9yIGZhZGVPdXQ6KEJPT0wpZmFkZU91
dCBhbmltYXRlOihCT09MKWFuaW1hdGU7CisKKy0gKHZvaWQpX3drX2VudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGU6KGNvbnN0IFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dCYpbGF5ZXJUcmVl
Q29udGV4dDsKKy0gKHZvaWQpX3drX2V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZTsKKy0g
KHZvaWQpX3drX3VwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlOihjb25zdCBXZWJLaXQ6
OkxheWVyVHJlZUNvbnRleHQmKWxheWVyVHJlZUNvbnRleHQ7CisKKy0gKHZvaWQpX3drX3NldEFj
Y2Vzc2liaWxpdHlXZWJQcm9jZXNzVG9rZW46KE5TRGF0YSAqKWRhdGE7CisKKy0gKHZvaWQpX3dr
X3BsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQ6KEJPT0wpcGx1Z2luSGFzRm9jdXNBbmRX
aW5kb3dIYXNGb2N1cyBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcjoodWludDY0X3Qp
cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXI7CistICh2b2lkKV93a19zZXRQbHVnaW5D
b21wbGV4VGV4dElucHV0U3RhdGU6KFdlYktpdDo6UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRl
KXBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRp
ZmllcjoodWludDY0X3QpcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXI7CisKKy0gKHZv
aWQpX3drX3NldFBhZ2VIYXNDdXN0b21SZXByZXNlbnRhdGlvbjooQk9PTClwYWdlSGFzQ3VzdG9t
UmVwcmVzZW50YXRpb247CistICh2b2lkKV93a19kaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3Rv
bVJlcHJlc2VudGF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOihjb25zdCBTdHJpbmcmKXN1Z2dl
c3RlZEZpbGVuYW1lIGRhdGFSZWZlcmVuY2U6KGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2Um
KWRhdGFSZWZlcmVuY2U7CistIChkb3VibGUpX3drX2N1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZh
Y3RvcjsKKy0gKHZvaWQpX3drX3NldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcjooZG91
YmxlKXpvb21GYWN0b3I7CistICh2b2lkKV93a19maW5kU3RyaW5nSW5DdXN0b21SZXByZXNlbnRh
dGlvbjooTlNTdHJpbmcgKilzdHJpbmcgd2l0aEZpbmRPcHRpb25zOihXZWJLaXQ6OkZpbmRPcHRp
b25zKW9wdGlvbnMgbWF4TWF0Y2hDb3VudDooTlNVSW50ZWdlciljb3VudDsKKy0gKHZvaWQpX3dr
X2NvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb246KE5TU3RyaW5nICopc3Ry
aW5nIHdpdGhGaW5kT3B0aW9uczooV2ViS2l0OjpGaW5kT3B0aW9ucylvcHRpb25zIG1heE1hdGNo
Q291bnQ6KE5TVUludGVnZXIpY291bnQ7CistICh2b2lkKV93a19zZXREcmFnSW1hZ2U6KE5TSW1h
Z2UgKilpbWFnZSBhdDooTlNQb2ludCljbGllbnRQb2ludCBsaW5rRHJhZzooQk9PTClsaW5rRHJh
ZzsKKy0gKHZvaWQpX3drX3NldFByb21pc2VkRGF0YTooV2ViQ29yZTo6SW1hZ2UgKilpbWFnZSB3
aXRoRmlsZU5hbWU6KE5TU3RyaW5nICopZmlsZW5hbWUgd2l0aEV4dGVuc2lvbjooTlNTdHJpbmcg
KilleHRlbnNpb24gd2l0aFRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdpdGhVUkw6KE5TU3RyaW5n
ICopdXJsIHdpdGhWaXNpYmxlVVJMOihOU1N0cmluZyAqKXZpc2libGVVcmwgd2l0aEFyY2hpdmU6
KFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciopIGFyY2hpdmVCdWZmZXIgZm9yUGFzdGVib2FyZDooTlNT
dHJpbmcgKilwYXN0ZWJvYXJkTmFtZTsKKy0gKHZvaWQpX3drX3VwZGF0ZVNlY3VyZUlucHV0U3Rh
dGU7CistICh2b2lkKV93a191cGRhdGVUZXh0SW5wdXRTdGF0ZUluY2x1ZGluZ1NlY3VyZUlucHV0
U3RhdGU6KEJPT0wpdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZTsKKy0gKHZvaWQpX3drX3Jlc2V0VGV4
dElucHV0U3RhdGU7CiAKLS0gKFdlYktpdDo6Q29sb3JTcGFjZURhdGEpX2NvbG9yU3BhY2U7Cist
ICh2b2lkKV93a19kaWRDaGFuZ2VTY3JvbGxiYXJzRm9yTWFpbkZyYW1lOworCistIChXZWJLaXQ6
OkNvbG9yU3BhY2VEYXRhKV93a19jb2xvclNwYWNlOwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQotLSAoQk9PTCloYXNGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjsKLS0gKFdLRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIqKWZ1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOwotLSAodm9p
ZCljbG9zZUZ1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOworLSAoQk9PTClfd2tfaGFzRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXI7CistIChXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKilf
d2tfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7CistICh2b2lkKV93a19jbG9zZUZ1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyOwogI2VuZGlmCiAKLS0gKHZvaWQpX2NhY2hlV2luZG93Qm90dG9t
Q29ybmVyUmVjdDsKKy0gKHZvaWQpX3drX2NhY2hlV2luZG93Qm90dG9tQ29ybmVyUmVjdDsKIAot
LSAoTlNJbnRlZ2VyKXNwZWxsQ2hlY2tlckRvY3VtZW50VGFnOwotLSAodm9pZCloYW5kbGVBY2Nl
cHRlZEFsdGVybmF0aXZlVGV4dDooTlNTdHJpbmcqKXRleHQ7CistIChOU0ludGVnZXIpX3drX3Nw
ZWxsQ2hlY2tlckRvY3VtZW50VGFnOworLSAodm9pZClfd2tfaGFuZGxlQWNjZXB0ZWRBbHRlcm5h
dGl2ZVRleHQ6KE5TU3RyaW5nKil0ZXh0OwogCi0tICh2b2lkKV9zZXRTdXBwcmVzc1Zpc2liaWxp
dHlVcGRhdGVzOihCT09MKXN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXM7Ci0tIChCT09MKV9zdXBw
cmVzc1Zpc2liaWxpdHlVcGRhdGVzOworLSAodm9pZClfd2tfc2V0U3VwcHJlc3NWaXNpYmlsaXR5
VXBkYXRlczooQk9PTClzdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzOworLSAoQk9PTClfd2tfc3Vw
cHJlc3NWaXNpYmlsaXR5VXBkYXRlczsKIAogQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld1ByaXZhdGUuaAkocmV2aXNpb24gMTMxMzA4KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3UHJpdmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MCw0ICs1MCw4IEBAIEBpbnRlcmZhY2UgV0tWaWV3IChQcml2YXRlKQogLSAo
dm9pZClwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0Q3VycmVudE1vdXNlTG9jYXRpb247CiArICh2
b2lkKWhpZGVXb3JkRGVmaW5pdGlvbldpbmRvdzsKIAorLy8gRklYTUU6IFRoaXMgbWV0aG9kIGN1
cnJlbnRseSBvdmVycmlkZGVuIGJ5IFNhZmFyaSB0byB0dXJuIHRpbGVkIGRyYXdpbmcgYXJlYSBv
bi4KKy8vIFdlIHNob3VsZCBjb21lIHVwIHdpdGggYSBjbGVhbmVyIFNQSSBvciBBUEkgZm9yIHRo
aXMuCistIChCT09MKV9zaG91bGRVc2VUaWxlZERyYXdpbmdBcmVhOworCiBAZW5kCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5tbQkocmV2
aXNpb24gMTMxMzA4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9u
UGFuZWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBTdHJpbmcgQ29ycmVj
dGlvblBhbmVsOjpkaXNtaXNzSW50ZXJuYWwoCiAKIHZvaWQgQ29ycmVjdGlvblBhbmVsOjpyZWNv
cmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKFdLVmlldyogdmlldywgTlNDb3JyZWN0aW9uUmVzcG9u
c2UgcmVzcG9uc2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnRTdHJpbmcpCiB7Ci0gICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENo
ZWNrZXJdIHJlY29yZFJlc3BvbnNlOnJlc3BvbnNlIHRvQ29ycmVjdGlvbjpyZXBsYWNlbWVudFN0
cmluZyBmb3JXb3JkOnJlcGxhY2VkU3RyaW5nIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRX
aXRoVGFnOlt2aWV3IHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnXV07CisgICAgW1tOU1NwZWxsQ2hl
Y2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHJlY29yZFJlc3BvbnNlOnJlc3BvbnNlIHRvQ29ycmVj
dGlvbjpyZXBsYWNlbWVudFN0cmluZyBmb3JXb3JkOnJlcGxhY2VkU3RyaW5nIGxhbmd1YWdlOm5p
bCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOlt2aWV3IF93a19zcGVsbENoZWNrZXJEb2N1bWVudFRh
Z11dOwogfQogCiB2b2lkIENvcnJlY3Rpb25QYW5lbDo6aGFuZGxlQWNjZXB0ZWRSZXBsYWNlbWVu
dChOU1N0cmluZyogYWNjZXB0ZWRSZXBsYWNlbWVudCwgTlNTdHJpbmcqIHJlcGxhY2VkLCBOU1N0
cmluZyogcHJvcG9zZWRSZXBsYWNlbWVudCwgIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGUgY29y
cmVjdGlvbkluZGljYXRvclR5cGUpCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBDb3JyZWN0aW9u
UGFuZWw6OmhhbmRsZUFjY2VwdGVkUmVwbAogICAgICAgICByZXR1cm47CiAKICAgICBOU1NwZWxs
Q2hlY2tlciogc3BlbGxDaGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tl
cl07Ci0gICAgTlNJbnRlZ2VyIGRvY3VtZW50VGFnID0gW21fdmlldy5nZXQoKSBzcGVsbENoZWNr
ZXJEb2N1bWVudFRhZ107CisgICAgTlNJbnRlZ2VyIGRvY3VtZW50VGFnID0gW21fdmlldy5nZXQo
KSBfd2tfc3BlbGxDaGVja2VyRG9jdW1lbnRUYWddOwogICAgIAogICAgIHN3aXRjaCAoY29ycmVj
dGlvbkluZGljYXRvclR5cGUpIHsKICAgICBjYXNlIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGVE
ZWZhdWx0OgpAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgQ29ycmVjdGlvblBhbmVsOjpoYW5kbGVB
Y2NlcHRlZFJlcGwKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgW21fdmlldy5nZXQoKSBo
YW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dDphY2NlcHRlZFJlcGxhY2VtZW50XTsKKyAgICBb
bV92aWV3LmdldCgpIF93a19oYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dDphY2NlcHRlZFJl
cGxhY2VtZW50XTsKICAgICBtX3ZpZXcuY2xlYXIoKTsKICAgICBpZiAoYWNjZXB0ZWRSZXBsYWNl
bWVudCkKICAgICAgICAgbV9yZXN1bHRGb3JEaXNtaXNzYWwuYWRvcHROUyhbYWNjZXB0ZWRSZXBs
YWNlbWVudCBjb3B5XSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLRnVs
bFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tCShyZXZpc2lvbiAx
MzEzMDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0Miw3ICsyNDIsNyBAQCAtICh2b2lk
KWVudGVyRnVsbFNjcmVlbjooTlNTY3JlZW4gKilzY3JlCiAgICAgLy8gdW5uZWNlc3NhcnkgaW4g
dGhlIGZ1bGwtc2NyZWVuIGFuaW1hdGlvbiBjYXNlLCBhbmQgY2FuIGNhdXNlIGJ1Z3M7IHNlZQog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODk0MCBhbmQg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4Mzc0CiAgICAgLy8gV2Ug
d2lsbCByZXN1bWUgdGhlIG5vcm1hbCBiZWhhdmlvciBpbiBfc3RhcnRFbnRlckZ1bGxTY3JlZW5B
bmltYXRpb25XaXRoRHVyYXRpb246Ci0gICAgW193ZWJWaWV3IF9zZXRTdXBwcmVzc1Zpc2liaWxp
dHlVcGRhdGVzOllFU107CisgICAgW193ZWJWaWV3IF93a19zZXRTdXBwcmVzc1Zpc2liaWxpdHlV
cGRhdGVzOllFU107CiAKICAgICAvLyBTd2FwIHRoZSB3ZWJWaWV3IHBsYWNlaG9sZGVyIGludG8g
cGxhY2UuCiAgICAgaWYgKCFfd2ViVmlld1BsYWNlaG9sZGVyKSB7CkBAIC0zMzQsNyArMzM0LDcg
QEAgLSAodm9pZClleGl0RnVsbFNjcmVlbgogCiAgICAgLy8gU2VlIHRoZSByZWxhdGVkIGNvbW1l
bnQgaW4gZW50ZXJGdWxsU2NyZWVuOgogICAgIC8vIFdlIHdpbGwgcmVzdW1lIHRoZSBub3JtYWwg
YmVoYXZpb3IgaW4gX3N0YXJ0RXhpdEZ1bGxTY3JlZW5BbmltYXRpb25XaXRoRHVyYXRpb246Ci0g
ICAgW193ZWJWaWV3IF9zZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzOllFU107CisgICAgW193
ZWJWaWV3IF93a19zZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzOllFU107CiAKICAgICBbc2Vs
ZiBfbWFuYWdlcl0tPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4odHJ1ZSk7CiAgICAgW3NlbGYgX21h
bmFnZXJdLT53aWxsRXhpdEZ1bGxTY3JlZW4oKTsKQEAgLTU4MSw3ICs1ODEsNyBAQCAtICh2b2lk
KV9zdGFydEVudGVyRnVsbFNjcmVlbkFuaW1hdGlvbldpCiAKICAgICBbX2JhY2tncm91bmRXaW5k
b3cuZ2V0KCkgb3JkZXJXaW5kb3c6TlNXaW5kb3dCZWxvdyByZWxhdGl2ZVRvOltbc2VsZiB3aW5k
b3ddIHdpbmRvd051bWJlcl1dOwogCi0gICAgW193ZWJWaWV3IF9zZXRTdXBwcmVzc1Zpc2liaWxp
dHlVcGRhdGVzOk5PXTsKKyAgICBbX3dlYlZpZXcgX3drX3NldFN1cHByZXNzVmlzaWJpbGl0eVVw
ZGF0ZXM6Tk9dOwogICAgIFtbc2VsZiB3aW5kb3ddIHNldEF1dG9kaXNwbGF5OllFU107CiAgICAg
W1tzZWxmIHdpbmRvd10gZGlzcGxheUlmTmVlZGVkXTsKICAgICBOU0VuYWJsZVNjcmVlblVwZGF0
ZXMoKTsKQEAgLTYyNiw3ICs2MjYsNyBAQCAtICh2b2lkKV9zdGFydEV4aXRGdWxsU2NyZWVuQW5p
bWF0aW9uV2l0CiAgICAgZmluYWxCb3VuZHMub3JpZ2luID0gW1tzZWxmIHdpbmRvd10gY29udmVy
dFNjcmVlblRvQmFzZTpmaW5hbEJvdW5kcy5vcmlnaW5dOwogICAgIFdLV2luZG93U2V0Q2xpcFJl
Y3QoW3NlbGYgd2luZG93XSwgZmluYWxCb3VuZHMpOwogCi0gICAgW193ZWJWaWV3IF9zZXRTdXBw
cmVzc1Zpc2liaWxpdHlVcGRhdGVzOk5PXTsKKyAgICBbX3dlYlZpZXcgX3drX3NldFN1cHByZXNz
VmlzaWJpbGl0eVVwZGF0ZXM6Tk9dOwogICAgIFtbc2VsZiB3aW5kb3ddIHNldEF1dG9kaXNwbGF5
OllFU107CiAgICAgW1tzZWxmIHdpbmRvd10gZGlzcGxheUlmTmVlZGVkXTsKICAgICBOU0VuYWJs
ZVNjcmVlblVwZGF0ZXMoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlNYWMubW0JKHJldmlzaW9u
IDEzMTMwOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViRnVsbFNjcmVlbk1h
bmFnZXJQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCB2b2lkIFdl
YkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhCiAgICAgaWYgKCFtX3dlYlZpZXcpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBbbV93ZWJWaWV3IGNsb3NlRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXJdOworICAgIFttX3dlYlZpZXcgX3drX2Nsb3NlRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXJdOwogICAgIG1fd2ViVmlldyA9IDA7CiB9CiAKQEAgLTUwLDQzICs1MCw0MyBAQCB2
b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmNsb3NlKCkKIHsKICAgICBpZiAoIW1fd2Vi
VmlldykKICAgICAgICAgcmV0dXJuOwotICAgIFtbbV93ZWJWaWV3IGZ1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyXSBjbG9zZV07CisgICAgW1ttX3dlYlZpZXcgX3drX2Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyXSBjbG9zZV07CiB9CiAKIGJvb2wgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6
aXNGdWxsU2NyZWVuKCkKIHsKICAgICBpZiAoIW1fd2ViVmlldykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmICghW21fd2ViVmlldyBoYXNGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcl0p
CisgICAgaWYgKCFbbV93ZWJWaWV3IF93a19oYXNGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcl0p
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBbW21fd2ViVmlldyBmdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlcl0gaXNGdWxsU2NyZWVuXTsKKyAgICByZXR1cm4gW1ttX3dlYlZp
ZXcgX3drX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyXSBpc0Z1bGxTY3JlZW5dOwogfQogCiB2
b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmVudGVyRnVsbFNjcmVlbigpCiB7CiAgICAg
aWYgKCFtX3dlYlZpZXcpCiAgICAgICAgIHJldHVybjsKLSAgICBbW21fd2ViVmlldyBmdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlcl0gZW50ZXJGdWxsU2NyZWVuOm5pbF07CisgICAgW1ttX3dlYlZp
ZXcgX3drX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyXSBlbnRlckZ1bGxTY3JlZW46bmlsXTsK
IH0KIAogdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbFNjcmVlbigpCiB7
CiAgICAgaWYgKCFtX3dlYlZpZXcpCiAgICAgICAgIHJldHVybjsKLSAgICBbW21fd2ViVmlldyBm
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlcl0gZXhpdEZ1bGxTY3JlZW5dOworICAgIFtbbV93ZWJW
aWV3IF93a19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcl0gZXhpdEZ1bGxTY3JlZW5dOwogfQog
ICAgIAogdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpiZWdhbkVudGVyRnVsbFNjcmVl
bihjb25zdCBJbnRSZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0IEludFJlY3QmIGZpbmFsRnJhbWUp
CiB7CiAgICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgW1ttX3dlYlZpZXcgZnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXJdIGJlZ2FuRW50ZXJGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTppbml0
aWFsRnJhbWUgZmluYWxGcmFtZTpmaW5hbEZyYW1lXTsKKyAgICAgICAgW1ttX3dlYlZpZXcgX3dr
X2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyXSBiZWdhbkVudGVyRnVsbFNjcmVlbldpdGhJbml0
aWFsRnJhbWU6aW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6ZmluYWxGcmFtZV07CiB9CiAKIHZvaWQg
V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6YmVnYW5FeGl0RnVsbFNjcmVlbihjb25zdCBJbnRS
ZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0IEludFJlY3QmIGZpbmFsRnJhbWUpCiB7CiAgICAgaWYg
KG1fd2ViVmlldykKLSAgICAgICAgW1ttX3dlYlZpZXcgZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXJdIGJlZ2FuRXhpdEZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOmluaXRpYWxGcmFtZSBmaW5h
bEZyYW1lOmZpbmFsRnJhbWVdOworICAgICAgICBbW21fd2ViVmlldyBfd2tfZnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXJdIGJlZ2FuRXhpdEZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOmluaXRp
YWxGcmFtZSBmaW5hbEZyYW1lOmZpbmFsRnJhbWVdOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168843</attachid>
            <date>2012-10-15 20:41:03 -0700</date>
            <delta_ts>2012-10-17 18:27:14 -0700</delta_ts>
            <desc>Patch, revised based on additional feedback from Anders</desc>
            <filename>bug-99251-20121015203953.patch</filename>
            <type>text/plain</type>
            <size>90637</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTQwMykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MiBAQAorMjAxMi0xMC0xNSAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBzdWJjbGFzc2luZyBvZiBX
S1ZpZXcgc2FmZXIgYnkgbmFtZXNwYWNpbmcgbWV0aG9kcyBhbmQgZWxpbWluYXRpbmcgaXRzIHVz
ZSBhcyBhbiBvYnNlcnZlciBhbmQgZGVsZWdhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MjUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQXBwcyB0aGF0IHN1YmNsYXNzIFdLVmlldyBzaG91bGQgYmUg
YWJsZSB0byBmcmVlbHkgY2hvb3NlIG1ldGhvZCBuYW1lcyB3aXRob3V0IGNvbmZsaWN0aW5nIHdp
dGggYSBuYW1lCisgICAgICAgIHdlIGNob3NlIHRvIHVzZSBpbnRlcm5hbGx5IGluIFdLVmlldydz
IG93biBpbXBsZW1lbnRhdGlvbi4gVGh1cywgaXQncyBhIGdvb2QgaWRlYSB0byBhZGQgYSAiX3dr
XyIgcHJlZml4CisgICAgICAgIHRvIGFueSBtZXRob2QgbmFtZXMgdGhhdCBhcmUgc29sZWx5IGZv
ciBpbnRlcm5hbCBXZWJLaXQyIHVzZS4gRXhjZXB0aW9ucyB0byB0aGlzIGFyZSBtZXRob2QgbmFt
ZXMgdGhhdAorICAgICAgICBhcmUgcHJlZGV0ZXJtaW5lZCBieSBBcHBLaXQsIG9yIG5hbWVzIHRo
YXQgYXJlIHBhcnQgb2YgQVBJIG9yIFNQSS4KKworICAgICAgICBBcHBzIHRoYXQgc3ViY2xhc3Mg
V0tWaWV3IHNob3VsZCBiZSBhYmxlIHRvIGFkZCBvYnNlcnZlcnMgb3IgdXNlIHRoZSBXS1ZpZXcg
YXMgYSBkZWxlZ2F0ZSB3aXRob3V0CisgICAgICAgIGNvbmZsaWN0aW5nIHdpdGggc2ltaWxhciB1
c2UgaW4gdGhlIFdLVmlldyBpbXBsZW1lbnRhdGlvbnMuIFRodXMsIGNoYW5nZWQgdG8gdXNlIHNl
cGFyYXRlIGJsb2NrLXN0eWxlCisgICAgICAgIG9ic2VydmVycyBmb3IgdGhlIHdpbmRvdyBub3Rp
ZmljYXRpb25zIGFuZCBhIHNlcGFyYXRlIGRlbGVnYXRlIGZvciB0aGUgdG9vbCB0aXAgaW1wbGVt
ZW50YXRpb24uCisKKyAgICAgICAgVGhlIGNoYWxsZW5naW5nIGFzcGVjdCBvZiB0aGlzIHBhdGNo
IHdhcyB0byByZXNlYXJjaCB3aGljaCBtZXRob2QgbmFtZXMgd2VyZSBkZXRlcm1pbmVkIGJ5IEFw
cEtpdC4KKyAgICAgICAgVGhlcmUncyBub3RoaW5nIGluIHRoZSBXZWJLaXQyIHNvdXJjZSBjb2Rl
IHRoYXQgbmVjZXNzYXJpbHkgc3RhdGVzIHRoaXMgZXhwbGljaXRseS4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdl
Q2xpZW50SW1wbDo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSk6IFVwZGF0ZWQgZm9yIG5ldyBtZXRo
b2QgbmFtZS4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNjcm9sbFZpZXcpOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmlzVmlld0ZvY3VzZWQpOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNvbG9yU3BhY2UpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnByb2Nlc3NEaWRDcmFzaCk6IERp
dHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6cGFnZUNsb3NlZCk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlkUmVsYXVuY2hQcm9jZXNzKTog
RGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp0b29sVGlwQ2hhbmdlZCk6
IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29yKTogRGl0
dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppbnRlcnByZXRLZXlFdmVudCk6
IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0RHJhZ0ltYWdlKTog
RGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXRQcm9taXNlZERhdGEp
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnVwZGF0ZVRleHRJbnB1
dFN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpyZXNldFRl
eHRJbnB1dFN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpj
b252ZXJ0VG9EZXZpY2VTcGFjZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6Y29udmVydFRvVXNlclNwYWNlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VD
bGllbnRJbXBsOjpkb25lV2l0aEtleUV2ZW50KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjpzZXRGaW5kSW5kaWNhdG9yKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnRJbXBsOjphY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuUmVjZWl2ZWQpOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnBsdWdpbkZvY3VzT3JXaW5kb3dG
b2N1c0NoYW5nZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNl
dFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQ
YWdlQ2xpZW50SW1wbDo6ZGlkQ2hhbmdlU2Nyb2xsYmFyc0Zvck1haW5GcmFtZSk6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlkQ29tbWl0TG9hZEZvck1haW5GcmFt
ZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlkRmluaXNoTG9h
ZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6Y3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXRDdXN0b21SZXByZXNlbnRhdGlv
blpvb21GYWN0b3IpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmZp
bmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnRJbXBsOjpjb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9u
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpleGVjdXRlU2F2ZWRD
b21tYW5kQnlTZWxlY3Rvcik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6c2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkpOiBEaXR0by4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvbWFjL1dLVmlldy5tbTogU2ltcGxpZmllZCBpbXBvcnRzIGEgYml0LiBObyBuZWVk
IGZvciBjb25kaXRpb25hbCBpbXBvcnRzIG9mIGJhc2ljIGNsYXNzZXMKKyAgICAgICAgbGlrZSBO
U1RleHRBbHRlcm5hdGl2ZXMuaCBhbmQgTlNBdHRyaWJ1dGVkU3RyaW5nLmguIE5vIG5lZWQgdG8g
cHV0IGludGVybmFsIGhlYWRlcnMgaW4gYSBzZXBhcmF0ZSBwYXJhZ3JhcGguCisgICAgICAgIEFk
ZGVkIFdLVG9vbFRpcERlbGVnYXRlIGNsYXNzIGFuZCBhZGRlZCBfdG9vbFRpcERlbGVnYXRlIGFu
ZCBfb2JzZXJ2ZXJzIGZpZWxkcyB0byBXS1ZpZXdEYXRhLgorICAgICAgICAoLVtXS1ZpZXcgYmVj
b21lRmlyc3RSZXNwb25kZXJdKTogVXBkYXRlZCBmb3IgbmV3IG1ldGhvZCBuYW1lLgorICAgICAg
ICAoLVtXS1ZpZXcgcmVzaWduRmlyc3RSZXNwb25kZXJdKTogRGl0dG8uCisgICAgICAgICgtW1dL
VmlldyBzZXRGcmFtZVNpemU6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX3VwZGF0
ZVdpbmRvd0FuZFZpZXdGcmFtZXNdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyByZW5ld0dT
dGF0ZV0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19zZXRQbHVnaW5Db21wbGV4VGV4
dElucHV0U3RhdGU6XSk6IERpdHRvLgorICAgICAgICAodmFsaWRhdGVDb21tYW5kQ2FsbGJhY2sp
OiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IGRpc3BsYXlJZk5lZWRlZF0pOiBGaXhlZCBhIGNv
bW1lbnQgdHlwby4KKyAgICAgICAgKC1bV0tWaWV3IF93a19zZXRNb3VzZURvd25FdmVudDpdKTog
VXBkYXRlZCBmb3IgbmV3IG1ldGhvZCBuYW1lLgorICAgICAgICAoLVtXS1ZpZXcgbW91c2VEb3du
Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IG1vdXNlVXA6XSk6IERpdHRvLgorICAgICAg
ICAoLVtXS1ZpZXcgYWNjZXB0c0ZpcnN0TW91c2U6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1Zp
ZXcgc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50Ol0pOiBEaXR0by4KKyAgICAgICAg
KC1bV0tWaWV3IF93a19oYW5kbGVTdHlsZUtleUVxdWl2YWxlbnQ6XSk6IERpdHRvLgorICAgICAg
ICAoLVtXS1ZpZXcgcGVyZm9ybUtleUVxdWl2YWxlbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtX
S1ZpZXcgX3drX2Rpc2FibGVDb21wbGV4VGV4dElucHV0SWZOZWNlc3NhcnldKTogRGl0dG8uCisg
ICAgICAgICgtW1dLVmlldyBfd2tfaGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd246
XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX3RyeUhhbmRsZVBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRLZXlEb3duOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IGtleURvd246XSk6
IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFu
ZHNdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfbm90aWZ5SW5wdXRDb250ZXh0QWJv
dXREaXNjYXJkZWRDb21wb3NpdGlvbl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IHNlbGVj
dGVkUmFuZ2VdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBoYXNNYXJrZWRUZXh0XSk6IERp
dHRvLgorICAgICAgICAoLVtXS1ZpZXcgdW5tYXJrVGV4dF0pOiBEaXR0by4KKyAgICAgICAgKC1b
V0tWaWV3IHNldE1hcmtlZFRleHQ6c2VsZWN0ZWRSYW5nZTpyZXBsYWNlbWVudFJhbmdlOl0pOiBE
aXR0by4KKyAgICAgICAgKC1bV0tWaWV3IG1hcmtlZFJhbmdlXSk6IERpdHRvLgorICAgICAgICAo
LVtXS1ZpZXcgYXR0cmlidXRlZFN1YnN0cmluZ0ZvclByb3Bvc2VkUmFuZ2U6YWN0dWFsUmFuZ2U6
XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgY2hhcmFjdGVySW5kZXhGb3JQb2ludDpdKTog
RGl0dG8uCisgICAgICAgICgtW1dLVmlldyBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTphY3R1
YWxSYW5nZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfdXBkYXRlV2luZG93Vmlz
aWJpbGl0eV0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a191cGRhdGVXaW5kb3dPYnNl
cnZlcnNGb3JXaW5kb3c6XSk6IFJlcGxhY2VkIHRoZSB0d28gc2VwYXJhdGUgbWV0aG9kcworICAg
ICAgICBhZGRXaW5kb3dPYnNlcnZlcnNGb3JXaW5kb3cgYW5kIHJlbW92ZVdpbmRvd09ic2VydmVy
cyB3aXRoIHRoaXMgc2luZ2xlIG1ldGhvZCwgc2luY2UKKyAgICAgICAgdGhlIHR3byBhcmUgb25s
eSB1c2VkIGluIHRhbmRlbS4gQ2hhbmdlZCBjb2RlIHRvIHVzZSBibG9ja3MgZm9yIHRoZSBvYnNl
cnZlcnMgYW5kIHRvCisgICAgICAgIGtlZXAgdGhlIG9ic2VydmVycyBpbiBhbiBhcnJheS4KKyAg
ICAgICAgKC1bV0tWaWV3IHZpZXdXaWxsTW92ZVRvV2luZG93Ol0pOiBVcGRhdGVkIHRvIHVzZSBf
d2tfdXBkYXRlV2luZG93T2JzZXJ2ZXJzRm9yV2luZG93LgorICAgICAgICAoLVtXS1ZpZXcgdmll
d0RpZE1vdmVUb1dpbmRvd10pOiBVcGRhdGVkIGZvciBuZXcgbWV0aG9kIG5hbWVzLgorICAgICAg
ICAoLVtXS1ZpZXcgX3drX3dpbmRvd1NjcmVlbkRpZENoYW5nZV0pOiBEaXR0by4KKyAgICAgICAg
KC1bV0tWaWV3IF93a193aW5kb3dEaWRCZWNvbWVLZXk6XSk6IERpdHRvLgorICAgICAgICAoLVtX
S1ZpZXcgX3drX3dpbmRvd0RpZENoYW5nZVNjcmVlbjpdKTogRGl0dG8uCisgICAgICAgICgtW1dL
VmlldyBfd2tfd2luZG93RGlkUmVzaWduS2V5Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3
IF93a193aW5kb3dEaWRNaW5pYXR1cml6ZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBf
d2tfd2luZG93RGlkRGVtaW5pYXR1cml6ZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBf
d2tfd2luZG93RGlkTW92ZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfd2luZG93
RGlkUmVzaXplOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a193aW5kb3dEaWRPcmRl
ck9mZlNjcmVlbjpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfd2luZG93RGlkT3Jk
ZXJPblNjcmVlbjpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfd2luZG93RGlkQ2hh
bmdlQmFja2luZ1Byb3BlcnRpZXM6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgZHJhd1Jl
Y3Q6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX2FjY2Vzc2liaWxpdHlSZWdpc3Rl
clVJUHJvY2Vzc1Rva2Vuc10pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a191cGRhdGVS
ZW1vdGVBY2Nlc3NpYmlsaXR5UmVnaXN0cmF0aW9uOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tW
aWV3IF93a19wb3N0RmFrZU1vdXNlTW92ZWRFdmVudEZvckZsYWdzQ2hhbmdlZEV2ZW50Ol0pOiBE
aXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19pbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3Rvcl0p
OiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19zZXREcmF3aW5nQXJlYVNpemU6XSk6IERp
dHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX3Nob3VsZFVzZVRpbGVkRHJhd2luZ0FyZWFdKTog
RGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfY3JlYXRlRHJhd2luZ0FyZWFQcm94eV0pOiBE
aXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19pc0ZvY3VzZWRdKTogRGl0dG8uCisgICAgICAg
ICgtW1dLVmlldyBfd2tfcHJvY2Vzc0RpZENyYXNoXSk6IERpdHRvLgorICAgICAgICAoLVtXS1Zp
ZXcgX3drX3BhZ2VDbG9zZWRdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfZGlkUmVs
YXVuY2hQcm9jZXNzXSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX3NldEN1cnNvcjpd
KTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0
ZTplbmFibGVkOnN0YXRlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a190cnlQb3N0
UHJvY2Vzc1BsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duOl0pOiBEaXR0by4KKyAgICAgICAg
KC1bV0tWaWV3IF93a19kb25lV2l0aEtleUV2ZW50OmV2ZW50V2FzSGFuZGxlZDpdKTogRGl0dG8u
CisgICAgICAgICgtW1dLVmlldyBfd2tfaW50ZXJwcmV0S2V5RXZlbnQ6c2F2aW5nQ29tbWFuZHNU
bzpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfY29udmVydFRvRGV2aWNlU3BhY2U6
XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX2NvbnZlcnRUb1VzZXJTcGFjZTpdKTog
RGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfYWRkVHJhY2tpbmdSZWN0Om93bmVyOnVzZXJE
YXRhOmFzc3VtZUluc2lkZTp1c2VUcmFja2luZ051bTpdKTogRGl0dG8uCisgICAgICAgICgtW1dL
VmlldyBfd2tfYWRkVHJhY2tpbmdSZWN0czpvd25lcjp1c2VyRGF0YUxpc3Q6YXNzdW1lSW5zaWRl
TGlzdDp0cmFja2luZ051bXM6Y291bnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3dr
X3JlbW92ZVRyYWNraW5nUmVjdHM6Y291bnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcg
X3drX3NlbmRUb29sVGlwTW91c2VFeGl0ZWRdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBf
d2tfc2VuZFRvb2xUaXBNb3VzZUVudGVyZWRdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBf
d2tfdG9vbFRpcENoYW5nZWRGcm9tOnRvOl0pOiBDaGFuZ2VkIHRvIHVzZSB0aGUgZGF0YSBvYmpl
Y3QgYXMgdGhlIHRvb2wgdGlwIG93bmVyIHNvCisgICAgICAgIHRoZSBkZWxlZ2F0ZSBtZXRob2Qg
Y2FuIGJlIHRoZXJlIHJhdGhlciB0aGFuIG9uIFdLVmlldy4KKyAgICAgICAgKC1bV0tWaWV3IF93
a19zZXRGaW5kSW5kaWNhdG9yOmZhZGVPdXQ6YW5pbWF0ZTpdKTogVXBkYXRlZCBmb3IgbmV3IG1l
dGhvZCBuYW1lcy4KKyAgICAgICAgKC1bV0tWaWV3IF93a19lbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19leGl0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGVdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfdXBkYXRl
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGU6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcg
X3drX3NldEFjY2Vzc2liaWxpdHlXZWJQcm9jZXNzVG9rZW46XSk6IERpdHRvLgorICAgICAgICAo
LVtXS1ZpZXcgX3drX3BsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQ6cGx1Z2luQ29tcGxl
eFRleHRJbnB1dElkZW50aWZpZXI6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX3Nl
dFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZTpwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRp
ZmllcjpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfc2V0UGFnZUhhc0N1c3RvbVJl
cHJlc2VudGF0aW9uOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19kaWRGaW5pc2hM
b2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOmRh
dGFSZWZlcmVuY2U6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX2N1c3RvbVJlcHJl
c2VudGF0aW9uWm9vbUZhY3Rvcl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19zZXRD
dXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3I6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1Zp
ZXcgX3drX2ZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uOndpdGhGaW5kT3B0aW9uczpt
YXhNYXRjaENvdW50Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19jb3VudFN0cmlu
Z01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uOndpdGhGaW5kT3B0aW9uczptYXhNYXRjaENv
dW50Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93a19zZXREcmFnSW1hZ2U6YXQ6bGlu
a0RyYWc6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX3NldFByb21pc2VkRGF0YTp3
aXRoRmlsZU5hbWU6d2l0aEV4dGVuc2lvbjp3aXRoVGl0bGU6d2l0aFVSTDp3aXRoVmlzaWJsZVVS
TDp3aXRoQXJjaGl2ZTpmb3JQYXN0ZWJvYXJkOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3
IF93a191cGRhdGVTZWN1cmVJbnB1dFN0YXRlXSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcg
X3drX3VwZGF0ZVRleHRJbnB1dFN0YXRlSW5jbHVkaW5nU2VjdXJlSW5wdXRTdGF0ZTpdKTogRGl0
dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfcmVzZXRUZXh0SW5wdXRTdGF0ZV0pOiBEaXR0by4K
KyAgICAgICAgKC1bV0tWaWV3IF93a19kaWRDaGFuZ2VTY3JvbGxiYXJzRm9yTWFpbkZyYW1lXSk6
IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX2hhc0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyXSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX2Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyXSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX2Nsb3NlRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXJdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyBfd2tfZXhlY3V0ZVNh
dmVkQ29tbWFuZEJ5U2VsZWN0b3I6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX3drX2Nh
Y2hlV2luZG93Qm90dG9tQ29ybmVyUmVjdF0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93
a19zcGVsbENoZWNrZXJEb2N1bWVudFRhZ10pOiBEaXR0by4KKyAgICAgICAgKC1bV0tWaWV3IF93
a19oYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dDpdKTogRGl0dG8uCisgICAgICAgICgtW1dL
VmlldyBfd2tfc2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlczpdKTogRGl0dG8uCisgICAgICAg
ICgtW1dLVmlldyBfd2tfc3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlc10pOiBEaXR0by4KKyAgICAg
ICAgKC1bV0tWaWV3IF93a19yZWdpc3RlckRyYWdnZWRUeXBlc10pOiBEaXR0by4KKyAgICAgICAg
KC1bV0tWaWV3IGluaXRXaXRoRnJhbWU6Y29udGV4dFJlZjpwYWdlR3JvdXBSZWY6cmVsYXRlZFRv
UGFnZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLVmlldyB3YW50c1VwZGF0ZUxheWVyXSk6IERp
dHRvLgorICAgICAgICAoLVtXS1ZpZXcgZW5hYmxlRnJhbWVTaXplVXBkYXRlc10pOiBEaXR0by4K
KyAgICAgICAgKC1bV0tUb29sVGlwRGVsZWdhdGUgaW5pdFdpdGhQYWdlOl0pOiBBZGRlZC4KKyAg
ICAgICAgKC1bV0tUb29sVGlwRGVsZWdhdGUgdmlldzpzdHJpbmdGb3JUb29sVGlwOnBvaW50OnVz
ZXJEYXRhOl0pOiBBZGRlZC4KKworCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3
SW50ZXJuYWwuaDogQ2hhbmdlZCBhbGwgaW50ZXJuYWwgbWV0aG9kIG5hbWVzIHRvIGhhdmUgYSBf
d2tfIHByZWZpeC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdQcml2YXRlLmg6
IEV4cG9zZSB0aGUgX3Nob3VsZFVzZVRpbGVkRHJhd2luZ0FyZWEgbWV0aG9kIGZvcm1hbGx5IGFz
IFNQSQorICAgICAgICBzaW5jZSBTYWZhcmkgaXMgY3VycmVudGx5IG92ZXJyaWRpbmcgdGhpcyBt
ZXRob2QuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5tbToKKyAg
ICAgICAgKFdlYktpdDo6Q29ycmVjdGlvblBhbmVsOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3Bv
bnNlKTogVXBkYXRlZCBmb3IgbmV3IG1ldGhvZCBuYW1lcy4KKyAgICAgICAgKFdlYktpdDo6Q29y
cmVjdGlvblBhbmVsOjpoYW5kbGVBY2NlcHRlZFJlcGxhY2VtZW50KTogRGl0dG8uCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW06CisgICAg
ICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuOl0pOiBV
cGRhdGVkIGZvciBuZXcgbWV0aG9kIG5hbWVzLgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuXSk6IERpdHRvLgorICAgICAgICAoLVtXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyIF9zdGFydEVudGVyRnVsbFNjcmVlbkFuaW1hdGlvbldpdGhE
dXJhdGlvbjpdKTogRGl0dG8uCisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIgX3N0YXJ0RXhpdEZ1bGxTY3JlZW5BbmltYXRpb25XaXRoRHVyYXRpb246XSk6IERpdHRvLgor
CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5TWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjppbnZhbGlkYXRl
KTogVXBkYXRlZCBmb3IgbmV3IG1ldGhvZCBuYW1lcy4KKyAgICAgICAgKFdlYktpdDo6V2ViRnVs
bFNjcmVlbk1hbmFnZXJQcm94eTo6Y2xvc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6aXNGdWxsU2NyZWVuKTogRGl0dG8uCisgICAgICAgIChX
ZWJLaXQ6OldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmVudGVyRnVsbFNjcmVlbik6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbFNj
cmVlbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5
OjpiZWdhbkVudGVyRnVsbFNjcmVlbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJGdWxs
U2NyZWVuTWFuYWdlclByb3h5OjpiZWdhbkV4aXRGdWxsU2NyZWVuKTogRGl0dG8uCisKIDIwMTIt
MTAtMTUgIEpvbmdzZW9rIFlhbmcgIDxqczQ1LnlhbmdAc2Ftc3VuZy5jb20+CiAKICAgICAgICAg
W0VGTF1bV0syXSBBZGQgQVBJcyBmb3IgY2FjaGUgbW9kZWwKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCShyZXZpc2lvbiAx
MzE0MDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1w
bC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw3IEBAIFBhZ2VDbGllbnRJbXBsOjp+
UGFnZUNsaWVudEltcGwoKQogCiBQYXNzT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IFBhZ2VDbGll
bnRJbXBsOjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCkKIHsKLSAgICByZXR1cm4gW21fd2tWaWV3
IF9jcmVhdGVEcmF3aW5nQXJlYVByb3h5XTsKKyAgICByZXR1cm4gW21fd2tWaWV3IF93a19jcmVh
dGVEcmF3aW5nQXJlYVByb3h5XTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Vmlld05l
ZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQpAQCAtMTU2LDcgKzE1Niw3
IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnNjcm9sbFZpZXcoY29uc3QgSW4KIHsKICAgICBOU1Jl
Y3QgY2xpcHBlZFNjcm9sbFJlY3QgPSBOU0ludGVyc2VjdGlvblJlY3Qoc2Nyb2xsUmVjdCwgTlNP
ZmZzZXRSZWN0KHNjcm9sbFJlY3QsIC1zY3JvbGxPZmZzZXQud2lkdGgoKSwgLXNjcm9sbE9mZnNl
dC5oZWlnaHQoKSkpOwogCi0gICAgW21fd2tWaWV3IF9jYWNoZVdpbmRvd0JvdHRvbUNvcm5lclJl
Y3RdOworICAgIFttX3drVmlldyBfd2tfY2FjaGVXaW5kb3dCb3R0b21Db3JuZXJSZWN0XTsKIAog
ICAgIFttX3drVmlldyB0cmFuc2xhdGVSZWN0c05lZWRpbmdEaXNwbGF5SW5SZWN0OmNsaXBwZWRT
Y3JvbGxSZWN0IGJ5OnNjcm9sbE9mZnNldF07CiAgICAgW21fd2tWaWV3IHNjcm9sbFJlY3Q6Y2xp
cHBlZFNjcm9sbFJlY3QgYnk6c2Nyb2xsT2Zmc2V0XTsKQEAgLTE3NCw3ICsxNzQsNyBAQCBib29s
IFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUoCiAKIGJvb2wgUGFnZUNsaWVudElt
cGw6OmlzVmlld0ZvY3VzZWQoKQogewotICAgIHJldHVybiBbbV93a1ZpZXcgX2lzRm9jdXNlZF07
CisgICAgcmV0dXJuIFttX3drVmlldyBfd2tfaXNGb2N1c2VkXTsKIH0KIAogdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6bWFrZUZpcnN0UmVzcG9uZGVyKCkKQEAgLTIyMCwxNyArMjIwLDE3IEBAIExheWVy
SG9zdGluZ01vZGUgUGFnZUNsaWVudEltcGw6OnZpZXdMYXkKIAogQ29sb3JTcGFjZURhdGEgUGFn
ZUNsaWVudEltcGw6OmNvbG9yU3BhY2UoKQogewotICAgIHJldHVybiBbbV93a1ZpZXcgX2NvbG9y
U3BhY2VdOworICAgIHJldHVybiBbbV93a1ZpZXcgX3drX2NvbG9yU3BhY2VdOwogfQogCiB2b2lk
IFBhZ2VDbGllbnRJbXBsOjpwcm9jZXNzRGlkQ3Jhc2goKQogewotICAgIFttX3drVmlldyBfcHJv
Y2Vzc0RpZENyYXNoXTsKKyAgICBbbV93a1ZpZXcgX3drX3Byb2Nlc3NEaWRDcmFzaF07CiB9CiAK
IHZvaWQgUGFnZUNsaWVudEltcGw6OnBhZ2VDbG9zZWQoKQogewotICAgIFttX3drVmlldyBfcGFn
ZUNsb3NlZF07CisgICAgW21fd2tWaWV3IF93a19wYWdlQ2xvc2VkXTsKICNpZiBVU0UoRElDVEFU
SU9OX0FMVEVSTkFUSVZFUykKICAgICBtX2FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci0+Y2xl
YXIoKTsKICNlbmRpZgpAQCAtMjM4LDE4ICsyMzgsMTggQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6
cGFnZUNsb3NlZCgpCiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFJlbGF1bmNoUHJvY2Vzcygp
CiB7Ci0gICAgW21fd2tWaWV3IF9kaWRSZWxhdW5jaFByb2Nlc3NdOworICAgIFttX3drVmlldyBf
d2tfZGlkUmVsYXVuY2hQcm9jZXNzXTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6dG9vbFRp
cENoYW5nZWQoY29uc3QgU3RyaW5nJiBvbGRUb29sVGlwLCBjb25zdCBTdHJpbmcmIG5ld1Rvb2xU
aXApCiB7Ci0gICAgW21fd2tWaWV3IF90b29sVGlwQ2hhbmdlZEZyb206bnNTdHJpbmdGcm9tV2Vi
Q29yZVN0cmluZyhvbGRUb29sVGlwKSB0bzpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKG5ld1Rv
b2xUaXApXTsKKyAgICBbbV93a1ZpZXcgX3drX3Rvb2xUaXBDaGFuZ2VkRnJvbTpuc1N0cmluZ0Zy
b21XZWJDb3JlU3RyaW5nKG9sZFRvb2xUaXApIHRvOm5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmco
bmV3VG9vbFRpcCldOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRDdXJzb3IoY29uc3Qg
V2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpCiB7CiAgICAgaWYgKCFbTlNBcHAgX2N1cnNvclJlY3RD
dXJzb3JdKQotICAgICAgICBbbV93a1ZpZXcgX3NldEN1cnNvcjpjdXJzb3IucGxhdGZvcm1DdXJz
b3IoKV07CisgICAgICAgIFttX3drVmlldyBfd2tfc2V0Q3Vyc29yOmN1cnNvci5wbGF0Zm9ybUN1
cnNvcigpXTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29ySGlkZGVuVW50aWxN
b3VzZU1vdmVzKGJvb2wgaGlkZGVuVW50aWxNb3VzZU1vdmVzKQpAQCAtMjkxLDcgKzI5MSw3IEBA
IHZvaWQgUGFnZUNsaWVudEltcGw6OmV4ZWN1dGVVbmRvUmVkbyhXZWIKIAogYm9vbCBQYWdlQ2xp
ZW50SW1wbDo6aW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYg
ZXZlbnQsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kcykKIHsKLSAg
ICByZXR1cm4gW21fd2tWaWV3IF9pbnRlcnByZXRLZXlFdmVudDpldmVudC5uYXRpdmVFdmVudCgp
IHNhdmluZ0NvbW1hbmRzVG86Y29tbWFuZHNdOworICAgIHJldHVybiBbbV93a1ZpZXcgX3drX2lu
dGVycHJldEtleUV2ZW50OmV2ZW50Lm5hdGl2ZUV2ZW50KCkgc2F2aW5nQ29tbWFuZHNUbzpjb21t
YW5kc107CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OnNldERyYWdJbWFnZShjb25zdCBJbnRQ
b2ludCYgY2xpZW50UG9zaXRpb24sIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1h
Z2UsIGJvb2wgaXNMaW5rRHJhZykKQEAgLTI5OSwzNCArMjk5LDM0IEBAIHZvaWQgUGFnZUNsaWVu
dEltcGw6OnNldERyYWdJbWFnZShjb25zdCAKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gZHJh
Z0NHSW1hZ2UgPSBkcmFnSW1hZ2UtPm1ha2VDR0ltYWdlKCk7CiAgICAgUmV0YWluUHRyPE5TSW1h
Z2U+IGRyYWdOU0ltYWdlKEFkb3B0TlMsIFtbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdl
OmRyYWdDR0ltYWdlLmdldCgpIHNpemU6ZHJhZ0ltYWdlLT5zaXplKCldKTsKIAotICAgIFttX3dr
VmlldyBfc2V0RHJhZ0ltYWdlOmRyYWdOU0ltYWdlLmdldCgpIGF0OmNsaWVudFBvc2l0aW9uIGxp
bmtEcmFnOmlzTGlua0RyYWddOworICAgIFttX3drVmlldyBfd2tfc2V0RHJhZ0ltYWdlOmRyYWdO
U0ltYWdlLmdldCgpIGF0OmNsaWVudFBvc2l0aW9uIGxpbmtEcmFnOmlzTGlua0RyYWddOwogfQog
CiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRQcm9taXNlZERhdGEoY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGltYWdlQnVmZmVyLCBjb25zdCBT
dHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29uc3QgU3RyaW5nJiB0
aXRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVybCwgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IGFyY2hpdmVCdWZmZXIpCiB7CiAgICAgUmVmUHRyPEltYWdlPiBp
bWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKICAgICBpbWFnZS0+c2V0RGF0YShpbWFnZUJ1
ZmZlci5nZXQoKSwgdHJ1ZSk7Ci0gICAgW21fd2tWaWV3IF9zZXRQcm9taXNlZERhdGE6aW1hZ2Uu
Z2V0KCkgd2l0aEZpbGVOYW1lOmZpbGVuYW1lIHdpdGhFeHRlbnNpb246ZXh0ZW5zaW9uIHdpdGhU
aXRsZTp0aXRsZSB3aXRoVVJMOnVybCB3aXRoVmlzaWJsZVVSTDp2aXNpYmxlVXJsIHdpdGhBcmNo
aXZlOmFyY2hpdmVCdWZmZXIuZ2V0KCkgZm9yUGFzdGVib2FyZDpwYXN0ZWJvYXJkTmFtZV07Cisg
ICAgW21fd2tWaWV3IF93a19zZXRQcm9taXNlZERhdGE6aW1hZ2UuZ2V0KCkgd2l0aEZpbGVOYW1l
OmZpbGVuYW1lIHdpdGhFeHRlbnNpb246ZXh0ZW5zaW9uIHdpdGhUaXRsZTp0aXRsZSB3aXRoVVJM
OnVybCB3aXRoVmlzaWJsZVVSTDp2aXNpYmxlVXJsIHdpdGhBcmNoaXZlOmFyY2hpdmVCdWZmZXIu
Z2V0KCkgZm9yUGFzdGVib2FyZDpwYXN0ZWJvYXJkTmFtZV07CiB9CiAKIHZvaWQgUGFnZUNsaWVu
dEltcGw6OnVwZGF0ZVRleHRJbnB1dFN0YXRlKGJvb2wgdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZSkK
IHsKLSAgICBbbV93a1ZpZXcgX3VwZGF0ZVRleHRJbnB1dFN0YXRlSW5jbHVkaW5nU2VjdXJlSW5w
dXRTdGF0ZTp1cGRhdGVTZWN1cmVJbnB1dFN0YXRlXTsKKyAgICBbbV93a1ZpZXcgX3drX3VwZGF0
ZVRleHRJbnB1dFN0YXRlSW5jbHVkaW5nU2VjdXJlSW5wdXRTdGF0ZTp1cGRhdGVTZWN1cmVJbnB1
dFN0YXRlXTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVzZXRUZXh0SW5wdXRTdGF0ZSgp
CiB7Ci0gICAgW21fd2tWaWV3IF9yZXNldFRleHRJbnB1dFN0YXRlXTsKKyAgICBbbV93a1ZpZXcg
X3drX3Jlc2V0VGV4dElucHV0U3RhdGVdOwogfQogCiBGbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6
OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1
cm4gW21fd2tWaWV3IF9jb252ZXJ0VG9EZXZpY2VTcGFjZTpyZWN0XTsKKyAgICByZXR1cm4gW21f
d2tWaWV3IF93a19jb252ZXJ0VG9EZXZpY2VTcGFjZTpyZWN0XTsKIH0KIAogRmxvYXRSZWN0IFBh
Z2VDbGllbnRJbXBsOjpjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ewotICAgIHJldHVybiBbbV93a1ZpZXcgX2NvbnZlcnRUb1VzZXJTcGFjZTpyZWN0XTsKKyAgICBy
ZXR1cm4gW21fd2tWaWV3IF93a19jb252ZXJ0VG9Vc2VyU3BhY2U6cmVjdF07CiB9CiAgICAKIElu
dFBvaW50IFBhZ2VDbGllbnRJbXBsOjpzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcG9p
bnQpCkBAIC0zNTIsNyArMzUyLDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhHZXN0
dXJlRXZlbgogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5h
dGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50LCBib29sIGV2ZW50V2FzSGFuZGxlZCkKIHsKLSAg
ICBbbV93a1ZpZXcgX2RvbmVXaXRoS2V5RXZlbnQ6ZXZlbnQubmF0aXZlRXZlbnQoKSBldmVudFdh
c0hhbmRsZWQ6ZXZlbnRXYXNIYW5kbGVkXTsKKyAgICBbbV93a1ZpZXcgX3drX2RvbmVXaXRoS2V5
RXZlbnQ6ZXZlbnQubmF0aXZlRXZlbnQoKSBldmVudFdhc0hhbmRsZWQ6ZXZlbnRXYXNIYW5kbGVk
XTsKIH0KIAogUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gUGFnZUNsaWVudEltcGw6OmNy
ZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSogcGFnZSkKQEAgLTM3NSw0MCArMzc1LDQw
IEBAIFBhc3NSZWZQdHI8V2ViQ29sb3JDaG9vc2VyUHJveHk+IFBhZ2VDbGkKIAogdm9pZCBQYWdl
Q2xpZW50SW1wbDo6c2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+IGZp
bmRJbmRpY2F0b3IsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKQogewotICAgIFttX3drVmll
dyBfc2V0RmluZEluZGljYXRvcjpmaW5kSW5kaWNhdG9yIGZhZGVPdXQ6ZmFkZU91dCBhbmltYXRl
OmFuaW1hdGVdOworICAgIFttX3drVmlldyBfd2tfc2V0RmluZEluZGljYXRvcjpmaW5kSW5kaWNh
dG9yIGZhZGVPdXQ6ZmFkZU91dCBhbmltYXRlOmFuaW1hdGVdOwogfQogCiB2b2lkIFBhZ2VDbGll
bnRJbXBsOjphY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuUmVjZWl2ZWQoY29uc3QgQ29yZUlQ
Qzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKIHsKLSAgICBOU0RhdGEqIHJlbW90ZVRva2VuID0gW05T
RGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGEuZGF0YSgpIGxlbmd0aDpkYXRhLnNpemUoKV07Ci0gICAg
W21fd2tWaWV3IF9zZXRBY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuOnJlbW90ZVRva2VuXTsK
KyAgICBOU0RhdGEgKnJlbW90ZVRva2VuID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGEuZGF0
YSgpIGxlbmd0aDpkYXRhLnNpemUoKV07CisgICAgW21fd2tWaWV3IF93a19zZXRBY2Nlc3NpYmls
aXR5V2ViUHJvY2Vzc1Rva2VuOnJlbW90ZVRva2VuXTsKIH0KICAgICAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjplbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQp
CiB7Ci0gICAgW21fd2tWaWV3IF9lbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlOmxheWVy
VHJlZUNvbnRleHRdOworICAgIFttX3drVmlldyBfd2tfZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZTpsYXllclRyZWVDb250ZXh0XTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhp
dEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKIHsKLSAgICBbbV93a1ZpZXcgX2V4aXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZV07CisgICAgW21fd2tWaWV3IF93a19leGl0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGVdOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVD
b250ZXh0KQogewotICAgIFttX3drVmlldyBfdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGU6bGF5ZXJUcmVlQ29udGV4dF07CisgICAgW21fd2tWaWV3IF93a191cGRhdGVBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZTpsYXllclRyZWVDb250ZXh0XTsKIH0KICNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OnBsdWdpbkZvY3Vz
T3JXaW5kb3dGb2N1c0NoYW5nZWQodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50
aWZpZXIsIGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cykKIHsKLSAgICBbbV93
a1ZpZXcgX3BsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQ6cGx1Z2luSGFzRm9jdXNBbmRX
aW5kb3dIYXNGb2N1cyBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcjpwbHVnaW5Db21w
bGV4VGV4dElucHV0SWRlbnRpZmllcl07CisgICAgW21fd2tWaWV3IF93a19wbHVnaW5Gb2N1c09y
V2luZG93Rm9jdXNDaGFuZ2VkOnBsdWdpbkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMgcGx1Z2lu
Q29tcGxleFRleHRJbnB1dElkZW50aWZpZXI6cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZp
ZXJdOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0
U3RhdGUodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIFBsdWdpbkNv
bXBsZXhUZXh0SW5wdXRTdGF0ZSBwbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpCiB7Ci0gICAg
W21fd2tWaWV3IF9zZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGU6cGx1Z2luQ29tcGxleFRl
eHRJbnB1dFN0YXRlIHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyOnBsdWdpbkNvbXBs
ZXhUZXh0SW5wdXRJZGVudGlmaWVyXTsKKyAgICBbbV93a1ZpZXcgX3drX3NldFBsdWdpbkNvbXBs
ZXhUZXh0SW5wdXRTdGF0ZTpwbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgcGx1Z2luQ29tcGxl
eFRleHRJbnB1dElkZW50aWZpZXI6cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXJdOwog
fQogCiBDR0NvbnRleHRSZWYgUGFnZUNsaWVudEltcGw6OmNvbnRhaW5pbmdXaW5kb3dHcmFwaGlj
c0NvbnRleHQoKQpAQCAtNDI0LDM3ICs0MjQsMzcgQEAgQ0dDb250ZXh0UmVmIFBhZ2VDbGllbnRJ
bXBsOjpjb250YWluaW5nVwogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRDaGFuZ2VTY3JvbGxi
YXJzRm9yTWFpbkZyYW1lKCkgY29uc3QKIHsKLSAgICBbbV93a1ZpZXcgX2RpZENoYW5nZVNjcm9s
bGJhcnNGb3JNYWluRnJhbWVdOworICAgIFttX3drVmlldyBfd2tfZGlkQ2hhbmdlU2Nyb2xsYmFy
c0Zvck1haW5GcmFtZV07CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENvbW1pdExvYWRG
b3JNYWluRnJhbWUoYm9vbCB1c2VDdXN0b21SZXByZXNlbnRhdGlvbikKIHsKLSAgICBbbV93a1Zp
ZXcgX3NldFBhZ2VIYXNDdXN0b21SZXByZXNlbnRhdGlvbjp1c2VDdXN0b21SZXByZXNlbnRhdGlv
bl07CisgICAgW21fd2tWaWV3IF93a19zZXRQYWdlSGFzQ3VzdG9tUmVwcmVzZW50YXRpb246dXNl
Q3VzdG9tUmVwcmVzZW50YXRpb25dOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRGaW5p
c2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2Vz
dGVkRmlsZW5hbWUsIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGFSZWZlcmVuY2Up
CiB7Ci0gICAgW21fd2tWaWV3IF9kaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2Vu
dGF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOnN1Z2dlc3RlZEZpbGVuYW1lIGRhdGFSZWZlcmVu
Y2U6ZGF0YVJlZmVyZW5jZV07CisgICAgW21fd2tWaWV3IF93a19kaWRGaW5pc2hMb2FkaW5nRGF0
YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOnN1Z2dlc3RlZEZp
bGVuYW1lIGRhdGFSZWZlcmVuY2U6ZGF0YVJlZmVyZW5jZV07CiB9CiAKIGRvdWJsZSBQYWdlQ2xp
ZW50SW1wbDo6Y3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKCkKIHsKLSAgICByZXR1cm4g
W21fd2tWaWV3IF9jdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3JdOworICAgIHJldHVybiBb
bV93a1ZpZXcgX3drX2N1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcl07CiB9CiAKIHZvaWQg
UGFnZUNsaWVudEltcGw6OnNldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcihkb3VibGUg
em9vbUZhY3RvcikKIHsKLSAgICBbbV93a1ZpZXcgX3NldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9v
bUZhY3Rvcjp6b29tRmFjdG9yXTsKKyAgICBbbV93a1ZpZXcgX3drX3NldEN1c3RvbVJlcHJlc2Vu
dGF0aW9uWm9vbUZhY3Rvcjp6b29tRmFjdG9yXTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6
ZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBzdHJpbmcsIEZp
bmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpCiB7Ci0gICAgW21fd2tW
aWV3IF9maW5kU3RyaW5nSW5DdXN0b21SZXByZXNlbnRhdGlvbjpzdHJpbmcgd2l0aEZpbmRPcHRp
b25zOm9wdGlvbnMgbWF4TWF0Y2hDb3VudDptYXhNYXRjaENvdW50XTsKKyAgICBbbV93a1ZpZXcg
X3drX2ZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uOnN0cmluZyB3aXRoRmluZE9wdGlv
bnM6b3B0aW9ucyBtYXhNYXRjaENvdW50Om1heE1hdGNoQ291bnRdOwogfQogCiB2b2lkIFBhZ2VD
bGllbnRJbXBsOjpjb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENv
dW50KQogewotICAgIFttX3drVmlldyBfY291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNl
bnRhdGlvbjpzdHJpbmcgd2l0aEZpbmRPcHRpb25zOm9wdGlvbnMgbWF4TWF0Y2hDb3VudDptYXhN
YXRjaENvdW50XTsKKyAgICBbbV93a1ZpZXcgX3drX2NvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9t
UmVwcmVzZW50YXRpb246c3RyaW5nIHdpdGhGaW5kT3B0aW9uczpvcHRpb25zIG1heE1hdGNoQ291
bnQ6bWF4TWF0Y2hDb3VudF07CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmZsYXNoQmFja2lu
Z1N0b3JlVXBkYXRlcyhjb25zdCBWZWN0b3I8SW50UmVjdD4mKQpAQCAtNTU1LDEwICs1NTUsMTEg
QEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVjb21tZW5kZWRTY3JvbGxiYQogCiBib29sIFBhZ2VD
bGllbnRJbXBsOjpleGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNl
bGVjdG9yU3RyaW5nKQogewotICAgIHJldHVybiBbbV93a1ZpZXcgX2V4ZWN1dGVTYXZlZENvbW1h
bmRCeVNlbGVjdG9yOk5TU2VsZWN0b3JGcm9tU3RyaW5nKHNlbGVjdG9yU3RyaW5nKV07CisgICAg
cmV0dXJuIFttX3drVmlldyBfd2tfZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3I6TlNTZWxl
Y3RvckZyb21TdHJpbmcoc2VsZWN0b3JTdHJpbmcpXTsKIH0KIAogI2lmIFVTRShESUNUQVRJT05f
QUxURVJOQVRJVkVTKQorCiB1aW50NjRfdCBQYWdlQ2xpZW50SW1wbDo6YWRkRGljdGF0aW9uQWx0
ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+JiBhbHRlcm5hdGl2
ZXMpCiB7CiAgICAgcmV0dXJuIG1fYWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLT5hZGRBbHRl
cm5hdGl2ZXMoYWx0ZXJuYXRpdmVzKTsKQEAgLTU3NCw3ICs1NzUsNyBAQCB2b2lkIFBhZ2VDbGll
bnRJbXBsOjpzaG93RGljdGF0aW9uQWx0ZXJuCiAgICAgaWYgKCFpc1ZpZXdWaXNpYmxlKCkgfHwg
IWlzVmlld0luV2luZG93KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2FsdGVybmF0aXZlVGV4
dFVJQ29udHJvbGxlci0+c2hvd0FsdGVybmF0aXZlcyhtX3drVmlldywgYm91bmRpbmdCb3hPZkRp
Y3RhdGVkVGV4dCwgZGljdGF0aW9uQ29udGV4dCwgXihOU1N0cmluZyogYWNjZXB0ZWRBbHRlcm5h
dGl2ZSl7Ci0gICAgICAgIFttX3drVmlldyBoYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dDph
Y2NlcHRlZEFsdGVybmF0aXZlXTsKKyAgICAgICAgW21fd2tWaWV3IF93a19oYW5kbGVBY2NlcHRl
ZEFsdGVybmF0aXZlVGV4dDphY2NlcHRlZEFsdGVybmF0aXZlXTsKICAgICB9KTsKIH0KIApAQCAt
NTg3LDYgKzU4OCw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpc21pc3NEaWN0YXRpb25BbHQK
IHsKICAgICBtX2FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci0+ZGlzbWlzc0FsdGVybmF0aXZl
cygpOwogfQorCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCShyZXZpc2lvbiAxMzE0MDMpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2LDExICsyNiw2IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBv
cnQgIldLVmlldy5oIgogCi0jaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCi0jaW1wb3J0
IDxBcHBLaXQvTlNUZXh0QWx0ZXJuYXRpdmVzLmg+Ci0jaW1wb3J0IDxBcHBLaXQvTlNBdHRyaWJ1
dGVkU3RyaW5nLmg+Ci0jZW5kaWYKLQogI2ltcG9ydCAiQXR0cmlidXRlZFN0cmluZy5oIgogI2lt
cG9ydCAiQ29sb3JTcGFjZURhdGEuaCIKICNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKQEAgLTUx
LDggKzQ2LDExIEBACiAjaW1wb3J0ICJUZXh0Q2hlY2tlclN0YXRlLmgiCiAjaW1wb3J0ICJUaWxl
ZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5LmgiCiAjaW1wb3J0ICJXS0FQSUNhc3QuaCIK
KyNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckludGVybmFsLmgiCisjaW1wb3J0
ICJXS0Jyb3dzaW5nQ29udGV4dEdyb3VwSW50ZXJuYWwuaCIKICNpbXBvcnQgIldLRnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIldLUHJpbnRpbmdWaWV3LmgiCisjaW1wb3J0
ICJXS1Byb2Nlc3NHcm91cEludGVybmFsLmgiCiAjaW1wb3J0ICJXS1N0cmluZ0NGLmgiCiAjaW1w
b3J0ICJXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIldLVmlld0ludGVy
bmFsLmgiCkBAIC02NCwxMSArNjIsMTQgQEAKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2lt
cG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW1wb3J0ICJXZWJTeXN0ZW1JbnRlcmZhY2UuaCIK
KyNpbXBvcnQgPEFwcEtpdC9OU0F0dHJpYnV0ZWRTdHJpbmcuaD4KKyNpbXBvcnQgPEFwcEtpdC9O
U1RleHRBbHRlcm5hdGl2ZXMuaD4KICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgogI2ltcG9ydCA8V2ViQ29yZS9EcmFnQ29udHJv
bGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9EcmFnRGF0YS5oPgogI2ltcG9ydCA8V2ViQ29yZS9E
cmFnU2Vzc2lvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbWFnZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9JbnRSZWN0Lmg+CkBAIC04MSwxOCArODIsMTEgQEAKICNpbXBvcnQgPFdlYkNvcmUv
U2hhcmVkQnVmZmVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5n
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlTlNTdHJpbmdFeHRyYXMuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+
CiAjaW1wb3J0IDxzeXMvc3RhdC5oPgogI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgogCi0vKiBBUEkgaW50ZXJuYWxzLiAqLwotI2ltcG9ydCAiV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaCIKLSNpbXBvcnQgIldLQnJvd3NpbmdDb250
ZXh0R3JvdXBJbnRlcm5hbC5oIgotI2ltcG9ydCAiV0tQcm9jZXNzR3JvdXBJbnRlcm5hbC5oIgot
Ci0KIEBpbnRlcmZhY2UgTlNBcHBsaWNhdGlvbiAoV0tOU0FwcGxpY2F0aW9uRGV0YWlscykKIC0g
KHZvaWQpc3BlYWtTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOwogLSAodm9pZClfc2V0Q3VycmVu
dEV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CkBAIC0xMzQsMTMgKzEyOCwxOCBAQCBzdHJ1Y3QgV0tW
aWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyCiB9OwogCiBAaW50ZXJmYWNlIFdLVmlldyAo
KQotLSAodm9pZClfYWNjZXNzaWJpbGl0eVJlZ2lzdGVyVUlQcm9jZXNzVG9rZW5zOwotLSAodm9p
ZClfZGlzYWJsZUNvbXBsZXhUZXh0SW5wdXRJZk5lY2Vzc2FyeTsKLS0gKGZsb2F0KV9pbnRyaW5z
aWNEZXZpY2VTY2FsZUZhY3RvcjsKLS0gKHZvaWQpX3Bvc3RGYWtlTW91c2VNb3ZlZEV2ZW50Rm9y
RmxhZ3NDaGFuZ2VkRXZlbnQ6KE5TRXZlbnQgKilmbGFnc0NoYW5nZWRFdmVudDsKLS0gKHZvaWQp
X3NldERyYXdpbmdBcmVhU2l6ZTooTlNTaXplKXNpemU7Ci0tICh2b2lkKV9zZXRQbHVnaW5Db21w
bGV4VGV4dElucHV0U3RhdGU6KFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSlwbHVnaW5Db21w
bGV4VGV4dElucHV0U3RhdGU7Ci0tIChCT09MKV9zaG91bGRVc2VUaWxlZERyYXdpbmdBcmVhOwor
LSAodm9pZClfd2tfYWNjZXNzaWJpbGl0eVJlZ2lzdGVyVUlQcm9jZXNzVG9rZW5zOworLSAodm9p
ZClfd2tfZGlzYWJsZUNvbXBsZXhUZXh0SW5wdXRJZk5lY2Vzc2FyeTsKKy0gKGZsb2F0KV93a19p
bnRyaW5zaWNEZXZpY2VTY2FsZUZhY3RvcjsKKy0gKHZvaWQpX3drX3Bvc3RGYWtlTW91c2VNb3Zl
ZEV2ZW50Rm9yRmxhZ3NDaGFuZ2VkRXZlbnQ6KE5TRXZlbnQgKilmbGFnc0NoYW5nZWRFdmVudDsK
Ky0gKHZvaWQpX3drX3NldERyYXdpbmdBcmVhU2l6ZTooTlNTaXplKXNpemU7CistICh2b2lkKV93
a19zZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGU6KFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRT
dGF0ZSlwbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGU7CitAZW5kCisKK0BpbnRlcmZhY2UgV0tU
b29sVGlwRGVsZWdhdGUgOiBOU09iamVjdCB7CisgICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gX3Bh
Z2U7Cit9CistIChpZClpbml0V2l0aFBhZ2U6KFdlYlBhZ2VQcm94eSAqKXBhZ2U7CiBAZW5kCiAK
IEBpbnRlcmZhY2UgV0tWaWV3RGF0YSA6IE5TT2JqZWN0IHsKQEAgLTIxNCw2ICsyMTMsOSBAQCBA
aW50ZXJmYWNlIFdLVmlld0RhdGEgOiBOU09iamVjdCB7CiAgICAgUmVmUHRyPFdlYkNvcmU6Oklt
YWdlPiBfcHJvbWlzZWRJbWFnZTsKICAgICBTdHJpbmcgX3Byb21pc2VkRmlsZW5hbWU7CiAgICAg
U3RyaW5nIF9wcm9taXNlZFVSTDsKKworICAgIFJldGFpblB0cjxXS1Rvb2xUaXBEZWxlZ2F0ZT4g
X3Rvb2xUaXBEZWxlZ2F0ZTsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IF9vYnNlcnZl
cnM7CiB9CiAKIEBlbmQKQEAgLTIyMSw3ICsyMjMsNiBAQCBAaW50ZXJmYWNlIFdLVmlld0RhdGEg
OiBOU09iamVjdCB7CiBAaW1wbGVtZW50YXRpb24gV0tWaWV3RGF0YQogQGVuZAogCi0KIEBpbnRl
cmZhY2UgV0tSZXNwb25kZXJDaGFpblNpbmsgOiBOU1Jlc3BvbmRlciB7CiAgICAgTlNSZXNwb25k
ZXIgKl9sYXN0UmVzcG9uZGVySW5DaGFpbjsKICAgICBib29sIF9kaWRSZWNlaXZlVW5oYW5kbGVk
Q29tbWFuZDsKQEAgLTMwNyw3ICszMDgsNyBAQCAtIChCT09MKWJlY29tZUZpcnN0UmVzcG9uZGVy
CiAKICAgICBfZGF0YS0+X2luQmVjb21lRmlyc3RSZXNwb25kZXIgPSB0cnVlOwogICAgIAotICAg
IFtzZWxmIF91cGRhdGVTZWN1cmVJbnB1dFN0YXRlXTsKKyAgICBbc2VsZiBfd2tfdXBkYXRlU2Vj
dXJlSW5wdXRTdGF0ZV07CiAgICAgX2RhdGEtPl9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2Vi
UGFnZVByb3h5OjpWaWV3SXNGb2N1c2VkKTsKIAogICAgIF9kYXRhLT5faW5CZWNvbWVGaXJzdFJl
c3BvbmRlciA9IGZhbHNlOwpAQCAtMzI4LDcgKzMyOSw3IEBAIC0gKEJPT0wpcmVzaWduRmlyc3RS
ZXNwb25kZXIKIAogICAgIGlmIChfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaGFzQ29tcG9z
aXRpb24gJiYgIV9kYXRhLT5fcGFnZS0+ZWRpdG9yU3RhdGUoKS5zaG91bGRJZ25vcmVDb21wb3Np
dGlvblNlbGVjdGlvbkNoYW5nZSkKICAgICAgICAgX2RhdGEtPl9wYWdlLT5jYW5jZWxDb21wb3Np
dGlvbigpOwotICAgIFtzZWxmIF9yZXNldFRleHRJbnB1dFN0YXRlXTsKKyAgICBbc2VsZiBfd2tf
cmVzZXRUZXh0SW5wdXRTdGF0ZV07CiAgICAgCiAgICAgaWYgKCFfZGF0YS0+X3BhZ2UtPm1haW50
YWluc0luYWN0aXZlU2VsZWN0aW9uKCkpCiAgICAgICAgIF9kYXRhLT5fcGFnZS0+Y2xlYXJTZWxl
Y3Rpb24oKTsKQEAgLTM2MywxMCArMzY0LDEwIEBAIC0gKHZvaWQpc2V0RnJhbWVTaXplOihOU1Np
emUpc2l6ZQogICAgIFtzdXBlciBzZXRGcmFtZVNpemU6c2l6ZV07CiAgICAgCiAgICAgaWYgKCFb
c2VsZiBmcmFtZVNpemVVcGRhdGVzRGlzYWJsZWRdKQotICAgICAgICBbc2VsZiBfc2V0RHJhd2lu
Z0FyZWFTaXplOnNpemVdOworICAgICAgICBbc2VsZiBfd2tfc2V0RHJhd2luZ0FyZWFTaXplOnNp
emVdOwogfQogCi0tICh2b2lkKV91cGRhdGVXaW5kb3dBbmRWaWV3RnJhbWVzCistICh2b2lkKV93
a191cGRhdGVXaW5kb3dBbmRWaWV3RnJhbWVzCiB7CiAgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtz
ZWxmIHdpbmRvd107CiAgICAgQVNTRVJUKHdpbmRvdyk7CkBAIC0zODUsMTIgKzM4NiwxMiBAQCAt
ICh2b2lkKXJlbmV3R1N0YXRlCiAKICAgICAvLyBVcGRhdGUgdGhlIHZpZXcgZnJhbWUuCiAgICAg
aWYgKFtzZWxmIHdpbmRvd10pCi0gICAgICAgIFtzZWxmIF91cGRhdGVXaW5kb3dBbmRWaWV3RnJh
bWVzXTsKKyAgICAgICAgW3NlbGYgX3drX3VwZGF0ZVdpbmRvd0FuZFZpZXdGcmFtZXNdOwogCiAg
ICAgW3N1cGVyIHJlbmV3R1N0YXRlXTsKIH0KIAotLSAodm9pZClfc2V0UGx1Z2luQ29tcGxleFRl
eHRJbnB1dFN0YXRlOihQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpcGx1Z2luQ29tcGxleFRl
eHRJbnB1dFN0YXRlCistICh2b2lkKV93a19zZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGU6
KFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSlwbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUK
IHsKICAgICBfZGF0YS0+X3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSA9IHBsdWdpbkNvbXBs
ZXhUZXh0SW5wdXRTdGF0ZTsKICAgICAKQEAgLTY1Myw3ICs2NTQsNyBAQCBzdGF0aWMgdm9pZCB2
YWxpZGF0ZUNvbW1hbmRDYWxsYmFjayhXS1N0CiAgICAgV0tWaWV3KiB3a1ZpZXcgPSBzdGF0aWNf
Y2FzdDxXS1ZpZXcqPihjb250ZXh0KTsKICAgICBBU1NFUlQod2tWaWV3KTsKICAgICAKLSAgICBb
d2tWaWV3IF9zZXRVc2VySW50ZXJmYWNlSXRlbVN0YXRlOm5zU3RyaW5nRnJvbVdlYkNvcmVTdHJp
bmcodG9JbXBsKGNvbW1hbmROYW1lKS0+c3RyaW5nKCkpIGVuYWJsZWQ6aXNFbmFibGVkIHN0YXRl
OnN0YXRlXTsKKyAgICBbd2tWaWV3IF93a19zZXRVc2VySW50ZXJmYWNlSXRlbVN0YXRlOm5zU3Ry
aW5nRnJvbVdlYkNvcmVTdHJpbmcodG9JbXBsKGNvbW1hbmROYW1lKS0+c3RyaW5nKCkpIGVuYWJs
ZWQ6aXNFbmFibGVkIHN0YXRlOnN0YXRlXTsKIH0KIAogLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRl
cmZhY2VJdGVtOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJmYWNlSXRlbT4paXRlbQpAQCAtOTY0
LDcgKzk2NSw3IEBAIC0gKHZvaWQpZGlzcGxheUlmTmVlZGVkCiB7CiAjaWYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDcwCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZW1v
dmUgdGhpcyBjb2RlIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzkzNjIwODU+IGlzIHJlc29sdmVkLiBJ
biB0aGUgbWVhbnRpbWUsCi0gICAgLy8gaXQgaXMgbmVjZXNzYXJ5IHRvIGRpc2FibGUgc2NyZW4g
dXBkYXRlcyBzbyB3ZSBnZXQgYSBjaGFuY2UgdG8gcmVkcmF3IHRoZSBjb3JuZXJzIGJlZm9yZSB0
aGlzIAorICAgIC8vIGl0IGlzIG5lY2Vzc2FyeSB0byBkaXNhYmxlIHNjcmVlbiB1cGRhdGVzIHNv
IHdlIGdldCBhIGNoYW5jZSB0byByZWRyYXcgdGhlIGNvcm5lcnMgYmVmb3JlIHRoaXMKICAgICAv
LyBkaXNwbGF5IGlzIHZpc2libGUuCiAgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRv
d107CiAgICAgQk9PTCBzaG91bGRNYXNrV2luZG93ID0gd2luZG93ICYmICFOU0lzRW1wdHlSZWN0
KF9kYXRhLT5fd2luZG93Qm90dG9tQ29ybmVySW50ZXJzZWN0aW9uUmVjdCk7CkBAIC05OTIsNyAr
OTkzLDcgQEAgLSAoQk9PTClfd2FudHNLZXlEb3duRm9yRXZlbnQ6KE5TRXZlbnQgKgogICAgIHJl
dHVybiBZRVM7CiB9CiAKLS0gKHZvaWQpX3NldE1vdXNlRG93bkV2ZW50OihOU0V2ZW50ICopZXZl
bnQKKy0gKHZvaWQpX3drX3NldE1vdXNlRG93bkV2ZW50OihOU0V2ZW50ICopZXZlbnQKIHsKICAg
ICBBU1NFUlQoIWV2ZW50IHx8IFtldmVudCB0eXBlXSA9PSBOU0xlZnRNb3VzZURvd24gfHwgW2V2
ZW50IHR5cGVdID09IE5TUmlnaHRNb3VzZURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5TT3RoZXJN
b3VzZURvd24pOwogICAgIApAQCAtMTAxNiwxMCArMTAxNywxMCBAQCAtICh2b2lkKV9zZXRNb3Vz
ZURvd25FdmVudDooTlNFdmVudCAqKWV2CiAKIE5BVElWRV9NT1VTRV9FVkVOVF9IQU5ETEVSKG1v
dXNlRW50ZXJlZCkKIE5BVElWRV9NT1VTRV9FVkVOVF9IQU5ETEVSKG1vdXNlRXhpdGVkKQotTkFU
SVZFX01PVVNFX0VWRU5UX0hBTkRMRVIobW91c2VNb3ZlZEludGVybmFsKQotTkFUSVZFX01PVVNF
X0VWRU5UX0hBTkRMRVIobW91c2VEb3duSW50ZXJuYWwpCi1OQVRJVkVfTU9VU0VfRVZFTlRfSEFO
RExFUihtb3VzZVVwSW50ZXJuYWwpCi1OQVRJVkVfTU9VU0VfRVZFTlRfSEFORExFUihtb3VzZURy
YWdnZWRJbnRlcm5hbCkKK05BVElWRV9NT1VTRV9FVkVOVF9IQU5ETEVSKF93a19tb3VzZU1vdmVk
SW50ZXJuYWwpCitOQVRJVkVfTU9VU0VfRVZFTlRfSEFORExFUihfd2tfbW91c2VEb3duSW50ZXJu
YWwpCitOQVRJVkVfTU9VU0VfRVZFTlRfSEFORExFUihfd2tfbW91c2VVcEludGVybmFsKQorTkFU
SVZFX01PVVNFX0VWRU5UX0hBTkRMRVIoX3drX21vdXNlRHJhZ2dlZEludGVybmFsKQogTkFUSVZF
X01PVVNFX0VWRU5UX0hBTkRMRVIob3RoZXJNb3VzZURvd24pCiBOQVRJVkVfTU9VU0VfRVZFTlRf
SEFORExFUihvdGhlck1vdXNlRHJhZ2dlZCkKIE5BVElWRV9NT1VTRV9FVkVOVF9IQU5ETEVSKG90
aGVyTW91c2VNb3ZlZCkKQEAgLTEwNDcsMjcgKzEwNDgsMjcgQEAgLSAodm9pZCltb3VzZU1vdmVk
OihOU0V2ZW50ICopZXZlbnQKICAgICBpZiAoc2VsZiA9PSBbW3NlbGYgd2luZG93XSBmaXJzdFJl
c3BvbmRlcl0gJiYgIU5TUG9pbnRJblJlY3QoW3NlbGYgY29udmVydFBvaW50OltldmVudCBsb2Nh
dGlvbkluV2luZG93XSBmcm9tVmlldzpuaWxdLCBbc2VsZiB2aXNpYmxlUmVjdF0pKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBbc2VsZiBtb3VzZU1vdmVkSW50ZXJuYWw6ZXZlbnRdOworICAgIFtz
ZWxmIF93a19tb3VzZU1vdmVkSW50ZXJuYWw6ZXZlbnRdOwogfQogCiAtICh2b2lkKW1vdXNlRG93
bjooTlNFdmVudCAqKWV2ZW50CiB7Ci0gICAgW3NlbGYgX3NldE1vdXNlRG93bkV2ZW50OmV2ZW50
XTsKKyAgICBbc2VsZiBfd2tfc2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRdOwogICAgIF9kYXRhLT5f
aWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHMgPSBOTzsKLSAgICBbc2VsZiBtb3VzZURvd25JbnRl
cm5hbDpldmVudF07CisgICAgW3NlbGYgX3drX21vdXNlRG93bkludGVybmFsOmV2ZW50XTsKIH0K
IAogLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKLSAgICBbc2VsZiBfc2V0TW91
c2VEb3duRXZlbnQ6bmlsXTsKLSAgICBbc2VsZiBtb3VzZVVwSW50ZXJuYWw6ZXZlbnRdOworICAg
IFtzZWxmIF93a19zZXRNb3VzZURvd25FdmVudDpuaWxdOworICAgIFtzZWxmIF93a19tb3VzZVVw
SW50ZXJuYWw6ZXZlbnRdOwogfQogCiAtICh2b2lkKW1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2
ZW50CiB7CiAgICAgaWYgKF9kYXRhLT5faWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHMpCiAgICAg
ICAgIHJldHVybjsKLSAgICBbc2VsZiBtb3VzZURyYWdnZWRJbnRlcm5hbDpldmVudF07CisgICAg
W3NlbGYgX3drX21vdXNlRHJhZ2dlZEludGVybmFsOmV2ZW50XTsKIH0KIAogLSAoQk9PTClhY2Nl
cHRzRmlyc3RNb3VzZTooTlNFdmVudCAqKWV2ZW50CkBAIC0xMDgwLDkgKzEwODEsOSBAQCAtIChC
T09MKWFjY2VwdHNGaXJzdE1vdXNlOihOU0V2ZW50ICopZXZlCiAgICAgaWYgKCFbc2VsZiBoaXRU
ZXN0OltldmVudCBsb2NhdGlvbkluV2luZG93XV0pCiAgICAgICAgIHJldHVybiBOTzsKICAgICAK
LSAgICBbc2VsZiBfc2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRdOworICAgIFtzZWxmIF93a19zZXRN
b3VzZURvd25FdmVudDpldmVudF07CiAgICAgYm9vbCByZXN1bHQgPSBfZGF0YS0+X3BhZ2UtPmFj
Y2VwdHNGaXJzdE1vdXNlKFtldmVudCBldmVudE51bWJlcl0sIFdlYkV2ZW50RmFjdG9yeTo6Y3Jl
YXRlV2ViTW91c2VFdmVudChldmVudCwgc2VsZikpOwotICAgIFtzZWxmIF9zZXRNb3VzZURvd25F
dmVudDpuaWxdOworICAgIFtzZWxmIF93a19zZXRNb3VzZURvd25FdmVudDpuaWxdOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTExMDEsOSArMTEwMiw5IEBAIC0gKEJPT0wpc2hvdWxkRGVs
YXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW4KICAgICBpZiAoIVtzZWxmIGhpdFRlc3Q6W2V2ZW50IGxv
Y2F0aW9uSW5XaW5kb3ddXSkKICAgICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIFtzZWxmIF9z
ZXRNb3VzZURvd25FdmVudDpldmVudF07CisgICAgW3NlbGYgX3drX3NldE1vdXNlRG93bkV2ZW50
OmV2ZW50XTsKICAgICBib29sIHJlc3VsdCA9IF9kYXRhLT5fcGFnZS0+c2hvdWxkRGVsYXlXaW5k
b3dPcmRlcmluZ0ZvckV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudChl
dmVudCwgc2VsZikpOwotICAgIFtzZWxmIF9zZXRNb3VzZURvd25FdmVudDpuaWxdOworICAgIFtz
ZWxmIF93a19zZXRNb3VzZURvd25FdmVudDpuaWxdOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
QEAgLTExNDAsNiArMTE0MSw3IEBAIC0gKHZvaWQpYmVnaW5HZXN0dXJlV2l0aEV2ZW50OihOU0V2
ZW50ICoKICAgICAgICAgfV07CiAgICAgfQogfQorCiAjZW5kaWYKIAogLSAodm9pZClkb0NvbW1h
bmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKQEAgLTEyMjYsNyArMTIyOCw3IEBAIC0gKHZvaWQp
aW5zZXJ0VGV4dDooaWQpc3RyaW5nIHJlcGxhY2VtZW4KICAgICAgICAgcGFyYW1ldGVycy0+ZXZl
bnRJbnRlcnByZXRhdGlvbkhhZFNpZGVFZmZlY3RzIHw9IGV2ZW50SGFuZGxlZDsKIH0KIAotLSAo
Qk9PTClfaGFuZGxlU3R5bGVLZXlFcXVpdmFsZW50OihOU0V2ZW50ICopZXZlbnQKKy0gKEJPT0wp
X3drX2hhbmRsZVN0eWxlS2V5RXF1aXZhbGVudDooTlNFdmVudCAqKWV2ZW50CiB7CiAgICAgaWYg
KCFfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUpCiAgICAgICAg
IHJldHVybiBOTzsKQEAgLTEyNjIsNyArMTI2NCw3IEBAIC0gKEJPT0wpcGVyZm9ybUtleUVxdWl2
YWxlbnQ6KE5TRXZlbnQgKikKICAgICBCT09MIGV2ZW50V2FzU2VudFRvV2ViQ29yZSA9IChfZGF0
YS0+X2tleURvd25FdmVudEJlaW5nUmVzZW50ID09IGV2ZW50KTsKIAogICAgIGlmICghZXZlbnRX
YXNTZW50VG9XZWJDb3JlKQotICAgICAgICBbc2VsZiBfZGlzYWJsZUNvbXBsZXhUZXh0SW5wdXRJ
Zk5lY2Vzc2FyeV07CisgICAgICAgIFtzZWxmIF93a19kaXNhYmxlQ29tcGxleFRleHRJbnB1dElm
TmVjZXNzYXJ5XTsKIAogICAgIC8vIFBhc3Mga2V5IGNvbWJvcyB0aHJvdWdoIFdlYkNvcmUgaWYg
dGhlcmUgaXMgYSBrZXkgYmluZGluZyBhdmFpbGFibGUgZm9yCiAgICAgLy8gdGhpcyBldmVudC4g
VGhpcyBsZXRzIHdlYiBwYWdlcyBoYXZlIGEgY3JhY2sgYXQgaW50ZXJjZXB0aW5nIGtleS1tb2Rp
ZmllZCBrZXlwcmVzc2VzLgpAQCAtMTI3Myw3ICsxMjc1LDcgQEAgLSAoQk9PTClwZXJmb3JtS2V5
RXF1aXZhbGVudDooTlNFdmVudCAqKQogICAgICAgICByZXR1cm4gWUVTOwogICAgIH0KICAgICAK
LSAgICByZXR1cm4gW3NlbGYgX2hhbmRsZVN0eWxlS2V5RXF1aXZhbGVudDpldmVudF0gfHwgW3N1
cGVyIHBlcmZvcm1LZXlFcXVpdmFsZW50OmV2ZW50XTsKKyAgICByZXR1cm4gW3NlbGYgX3drX2hh
bmRsZVN0eWxlS2V5RXF1aXZhbGVudDpldmVudF0gfHwgW3N1cGVyIHBlcmZvcm1LZXlFcXVpdmFs
ZW50OmV2ZW50XTsKIH0KIAogLSAodm9pZClrZXlVcDooTlNFdmVudCAqKXRoZUV2ZW50CkBAIC0x
MjgyLDcgKzEyODQsNyBAQCAtICh2b2lkKWtleVVwOihOU0V2ZW50ICopdGhlRXZlbnQKICAgICBf
ZGF0YS0+X3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCh0
aGVFdmVudCwgc2VsZikpOwogfQogCi0tICh2b2lkKV9kaXNhYmxlQ29tcGxleFRleHRJbnB1dElm
TmVjZXNzYXJ5CistICh2b2lkKV93a19kaXNhYmxlQ29tcGxleFRleHRJbnB1dElmTmVjZXNzYXJ5
CiB7CiAgICAgaWYgKCFfZGF0YS0+X3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKQog
ICAgICAgICByZXR1cm47CkBAIC0xMjkyLDEwICsxMjk0LDEwIEBAIC0gKHZvaWQpX2Rpc2FibGVD
b21wbGV4VGV4dElucHV0SWZOZWNlc3MKIAogICAgIC8vIENoZWNrIGlmIHRoZSB0ZXh0IGlucHV0
IHdpbmRvdyBoYXMgYmVlbiBkaXNtaXNzZWQuCiAgICAgaWYgKCFbW1dLVGV4dElucHV0V2luZG93
Q29udHJvbGxlciBzaGFyZWRUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyXSBoYXNNYXJrZWRUZXh0
XSkKLSAgICAgICAgW3NlbGYgX3NldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZTpQbHVnaW5D
b21wbGV4VGV4dElucHV0RGlzYWJsZWRdOworICAgICAgICBbc2VsZiBfd2tfc2V0UGx1Z2luQ29t
cGxleFRleHRJbnB1dFN0YXRlOlBsdWdpbkNvbXBsZXhUZXh0SW5wdXREaXNhYmxlZF07CiB9CiAK
LS0gKEJPT0wpX2hhbmRsZVBsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duOihOU0V2ZW50ICop
ZXZlbnQKKy0gKEJPT0wpX3drX2hhbmRsZVBsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duOihO
U0V2ZW50ICopZXZlbnQKIHsKICAgICBBU1NFUlQoX2RhdGEtPl9wbHVnaW5Db21wbGV4VGV4dElu
cHV0SWRlbnRpZmllcik7CiAgICAgQVNTRVJUKF9kYXRhLT5fcGx1Z2luQ29tcGxleFRleHRJbnB1
dFN0YXRlICE9IFBsdWdpbkNvbXBsZXhUZXh0SW5wdXREaXNhYmxlZCk7CkBAIC0xMzE1LDE4ICsx
MzE3LDE4IEBAIC0gKEJPT0wpX2hhbmRsZVBsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXkKICAgICBy
ZXR1cm4gZGlkSGFuZGxlRXZlbnQ7CiB9CiAKLS0gKEJPT0wpX3RyeUhhbmRsZVBsdWdpbkNvbXBs
ZXhUZXh0SW5wdXRLZXlEb3duOihOU0V2ZW50ICopZXZlbnQKKy0gKEJPT0wpX3drX3RyeUhhbmRs
ZVBsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duOihOU0V2ZW50ICopZXZlbnQKIHsKICAgICBp
ZiAoIV9kYXRhLT5fcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIgfHwgX2RhdGEtPl9w
bHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgPT0gUGx1Z2luQ29tcGxleFRleHRJbnB1dERpc2Fi
bGVkKQogICAgICAgICByZXR1cm4gTk87CiAKICAgICAvLyBDaGVjayBpZiB0aGUgdGV4dCBpbnB1
dCB3aW5kb3cgaGFzIGJlZW4gZGlzbWlzc2VkIGFuZCBsZXQgdGhlIHBsdWctaW4gcHJvY2VzcyBr
bm93LgogICAgIC8vIFRoaXMgaXMgb25seSB2YWxpZCB3aXRoIHRoZSB1cGRhdGVkIENvY29hIHRl
eHQgaW5wdXQgc3BlYy4KLSAgICBbc2VsZiBfZGlzYWJsZUNvbXBsZXhUZXh0SW5wdXRJZk5lY2Vz
c2FyeV07CisgICAgW3NlbGYgX3drX2Rpc2FibGVDb21wbGV4VGV4dElucHV0SWZOZWNlc3Nhcnld
OwogCiAgICAgLy8gVHJ5IGZlZWRpbmcgdGhlIGtleWJvYXJkIGV2ZW50IGRpcmVjdGx5IHRvIHRo
ZSBwbHVnLWluLgogICAgIGlmIChfZGF0YS0+X3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSA9
PSBQbHVnaW5Db21wbGV4VGV4dElucHV0RW5hYmxlZExlZ2FjeSkKLSAgICAgICAgcmV0dXJuIFtz
ZWxmIF9oYW5kbGVQbHVnaW5Db21wbGV4VGV4dElucHV0S2V5RG93bjpldmVudF07CisgICAgICAg
IHJldHVybiBbc2VsZiBfd2tfaGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd246ZXZl
bnRdOwogCiAgICAgcmV0dXJuIE5POwogfQpAQCAtMTM0MCw3ICsxMzQyLDcgQEAgLSAodm9pZClr
ZXlEb3duOihOU0V2ZW50ICopdGhlRXZlbnQKICAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2
ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQg
Y29kZS4KICAgICBbW3RoZUV2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOwogCi0gICAgaWYgKFtz
ZWxmIF90cnlIYW5kbGVQbHVnaW5Db21wbGV4VGV4dElucHV0S2V5RG93bjp0aGVFdmVudF0pIHsK
KyAgICBpZiAoW3NlbGYgX3drX3RyeUhhbmRsZVBsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3du
OnRoZUV2ZW50XSkgewogICAgICAgICBMT0coVGV4dElucHV0LCAiLi4uaGFuZGxlZCBieSBwbHVn
LWluIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMzc0LDcgKzEzNzYsNyBAQCAtICh2
b2lkKWZsYWdzQ2hhbmdlZDooTlNFdmVudCAqKXRoZUV2ZW50CiAgICAgX2RhdGEtPl9wYWdlLT5o
YW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQodGhlRXZlbnQsIHNlbGYp
KTsKIH0KIAotLSAodm9pZClfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kcworLSAodm9pZClf
d2tfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kcwogewogICAgIFdLVmlld0ludGVycHJldEtl
eUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBfZGF0YS0+X2ludGVycHJldEtleUV2ZW50
c1BhcmFtZXRlcnM7CiAgICAgaWYgKCFwYXJhbWV0ZXJzIHx8IHBhcmFtZXRlcnMtPmNvbW1hbmRz
LT5pc0VtcHR5KCkpCkBAIC0xMzk1LDcgKzEzOTcsNyBAQCAtICh2b2lkKV9leGVjdXRlU2F2ZWRL
ZXlwcmVzc0NvbW1hbmRzCiAgICAgTE9HKFRleHRJbnB1dCwgIi4uLmRvbmUgZXhlY3V0aW5nIHNh
dmVkIGtleXByZXNzIGNvbW1hbmRzLiIpOwogfQogCi0tICh2b2lkKV9ub3RpZnlJbnB1dENvbnRl
eHRBYm91dERpc2NhcmRlZENvbXBvc2l0aW9uCistICh2b2lkKV93a19ub3RpZnlJbnB1dENvbnRl
eHRBYm91dERpc2NhcmRlZENvbXBvc2l0aW9uCiB7CiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzkz
NTkwNTU+OiAtZGlzY2FyZE1hcmtlZFRleHQgY2FuIG9ubHkgYmUgY2FsbGVkIGZvciBhY3RpdmUg
Y29udGV4dHMuCiAgICAgLy8gRklYTUU6IFdlIGZhaWwgdG8gZXZlciBub3RpZnkgdGhlIGlucHV0
IGNvbnRleHQgaWYgc29tZXRoaW5nIChlLmcuIGEgbmF2aWdhdGlvbikgaGFwcGVucyB3aGlsZSB0
aGUgd2luZG93IGlzIG5vdCBrZXkuCkBAIC0xNDIzLDcgKzE0MjUsNyBAQCAtIChOU1RleHRJbnB1
dENvbnRleHQgKilpbnB1dENvbnRleHQKIAogLSAoTlNSYW5nZSlzZWxlY3RlZFJhbmdlCiB7Ci0g
ICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOworICAgIFtzZWxmIF93a19l
eGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzXTsKIAogICAgIHVpbnQ2NF90IHNlbGVjdGlvblN0
YXJ0OwogICAgIHVpbnQ2NF90IHNlbGVjdGlvbkxlbmd0aDsKQEAgLTE0NDcsNyArMTQ0OSw3IEBA
IC0gKEJPT0wpaGFzTWFya2VkVGV4dAogICAgICAgICByZXN1bHQgPSBfZGF0YS0+X3BhZ2UtPmVk
aXRvclN0YXRlKCkuaGFzQ29tcG9zaXRpb247CiAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAg
ICAgICAgIC8vIEEgc2F2ZWQgY29tbWFuZCBjYW4gY29uZmlybSBhIGNvbXBvc2l0aW9uLCBidXQg
aXQgY2Fubm90IHN0YXJ0IGEgbmV3IG9uZS4KLSAgICAgICAgICAgIFtzZWxmIF9leGVjdXRlU2F2
ZWRLZXlwcmVzc0NvbW1hbmRzXTsKKyAgICAgICAgICAgIFtzZWxmIF93a19leGVjdXRlU2F2ZWRL
ZXlwcmVzc0NvbW1hbmRzXTsKICAgICAgICAgICAgIHJlc3VsdCA9IF9kYXRhLT5fcGFnZS0+ZWRp
dG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbjsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC0x
NDYzLDcgKzE0NjUsNyBAQCAtIChCT09MKWhhc01hcmtlZFRleHQKIAogLSAodm9pZCl1bm1hcmtU
ZXh0CiB7Ci0gICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOworICAgIFtz
ZWxmIF93a19leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzXTsKIAogICAgIExPRyhUZXh0SW5w
dXQsICJ1bm1hcmtUZXh0Iik7CiAKQEAgLTE1MjIsNyArMTUyNCw3IEBAIHN0YXRpYyB2b2lkIGV4
dHJhY3RVbmRlcmxpbmVzKE5TQXR0cmlidXQKIAogLSAodm9pZClzZXRNYXJrZWRUZXh0OihpZClz
dHJpbmcgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSluZXdTZWxSYW5nZSByZXBsYWNlbWVudFJhbmdl
OihOU1JhbmdlKXJlcGxhY2VtZW50UmFuZ2UKIHsKLSAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkS2V5
cHJlc3NDb21tYW5kc107CisgICAgW3NlbGYgX3drX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFu
ZHNdOwogCiAgICAgQk9PTCBpc0F0dHJpYnV0ZWRTdHJpbmcgPSBbc3RyaW5nIGlzS2luZE9mQ2xh
c3M6W05TQXR0cmlidXRlZFN0cmluZyBjbGFzc11dOwogICAgIEFTU0VSVChpc0F0dHJpYnV0ZWRT
dHJpbmcgfHwgW3N0cmluZyBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKQEAgLTE1
NTEsNyArMTU1Myw3IEBAIC0gKHZvaWQpc2V0TWFya2VkVGV4dDooaWQpc3RyaW5nIHNlbGVjdGUK
ICAgICAgICAgLy8gSW4gcGFzc3dvcmQgZmllbGRzLCB3ZSBvbmx5IGFsbG93IEFTQ0lJIGRlYWQg
a2V5cywgYW5kIGRvbid0IGFsbG93IGlubGluZSBpbnB1dCwgbWF0Y2hpbmcgTlNTZWN1cmVUZXh0
SW5wdXRGaWVsZC4KICAgICAgICAgLy8gQWxsb3dpbmcgQVNDSUkgZGVhZCBrZXlzIGlzIG5lY2Vz
c2FyeSB0byBlbmFibGUgZnVsbCBSb21hbiBpbnB1dCB3aGVuIHVzaW5nIGEgVmlldG5hbWVzZSBr
ZXlib2FyZC4KICAgICAgICAgQVNTRVJUKCFfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaGFz
Q29tcG9zaXRpb24pOwotICAgICAgICBbc2VsZiBfbm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNj
YXJkZWRDb21wb3NpdGlvbl07CisgICAgICAgIFtzZWxmIF93a19ub3RpZnlJbnB1dENvbnRleHRB
Ym91dERpc2NhcmRlZENvbXBvc2l0aW9uXTsKICAgICAgICAgaWYgKFt0ZXh0IGxlbmd0aF0gPT0g
MSAmJiBbW3RleHQgZGVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSBjaGFyYWN0
ZXJBdEluZGV4OjBdIDwgMHg4MCkgewogICAgICAgICAgICAgX2RhdGEtPl9wYWdlLT5pbnNlcnRU
ZXh0KHRleHQsIHJlcGxhY2VtZW50UmFuZ2UubG9jYXRpb24sIE5TTWF4UmFuZ2UocmVwbGFjZW1l
bnRSYW5nZSkpOwogICAgICAgICB9IGVsc2UKQEAgLTE1NjQsNyArMTU2Niw3IEBAIC0gKHZvaWQp
c2V0TWFya2VkVGV4dDooaWQpc3RyaW5nIHNlbGVjdGUKIAogLSAoTlNSYW5nZSltYXJrZWRSYW5n
ZQogewotICAgIFtzZWxmIF9leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzXTsKKyAgICBbc2Vs
ZiBfd2tfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CiAKICAgICB1aW50NjRfdCBsb2Nh
dGlvbjsKICAgICB1aW50NjRfdCBsZW5ndGg7CkBAIC0xNTc2LDcgKzE1NzgsNyBAQCAtIChOU1Jh
bmdlKW1hcmtlZFJhbmdlCiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdWJz
dHJpbmdGb3JQcm9wb3NlZFJhbmdlOihOU1JhbmdlKW5zUmFuZ2UgYWN0dWFsUmFuZ2U6KE5TUmFu
Z2VQb2ludGVyKWFjdHVhbFJhbmdlCiB7Ci0gICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNz
Q29tbWFuZHNdOworICAgIFtzZWxmIF93a19leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzXTsK
IAogICAgIGlmICghX2RhdGEtPl9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxl
KSB7CiAgICAgICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdl
OigldSwgJXUpIC0+IG5pbCIsIG5zUmFuZ2UubG9jYXRpb24sIG5zUmFuZ2UubGVuZ3RoKTsKQEAg
LTE2MDAsNyArMTYwMiw3IEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdWJz
dHIKIAogLSAoTlNVSW50ZWdlciljaGFyYWN0ZXJJbmRleEZvclBvaW50OihOU1BvaW50KXRoZVBv
aW50CiB7Ci0gICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOworICAgIFtz
ZWxmIF93a19leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzXTsKIAogICAgIE5TV2luZG93ICp3
aW5kb3cgPSBbc2VsZiB3aW5kb3ddOwogICAgIApAQCAtMTYxNSw3ICsxNjE3LDcgQEAgLSAoTlNV
SW50ZWdlciljaGFyYWN0ZXJJbmRleEZvclBvaW50OihOUwogCiAtIChOU1JlY3QpZmlyc3RSZWN0
Rm9yQ2hhcmFjdGVyUmFuZ2U6KE5TUmFuZ2UpdGhlUmFuZ2UgYWN0dWFsUmFuZ2U6KE5TUmFuZ2VQ
b2ludGVyKWFjdHVhbFJhbmdlCiB7IAotICAgIFtzZWxmIF9leGVjdXRlU2F2ZWRLZXlwcmVzc0Nv
bW1hbmRzXTsKKyAgICBbc2VsZiBfd2tfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CiAK
ICAgICAvLyBKdXN0IHRvIG1hdGNoIE5TVGV4dFZpZXcncyBiZWhhdmlvci4gUmVncmVzc2lvbiB0
ZXN0cyBjYW5ub3QgZGV0ZWN0IHRoaXM7CiAgICAgLy8gdG8gcmVwcm9kdWNlLCB1c2UgYSB0ZXN0
IGFwcGxpY2F0aW9uIGZyb20gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDY4MgpAQCAtMTY0MCw2ICsxNjQyLDcgQEAgLSAoTlNSZWN0KWZpcnN0UmVjdEZvckNoYXJhY3Rl
clJhbmdlOihOUwogfQogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKwogLSAodm9pZClkcmFn
Z2VkSW1hZ2U6KE5TSW1hZ2UgKilhbkltYWdlIGVuZGVkQXQ6KE5TUG9pbnQpYVBvaW50IG9wZXJh
dGlvbjooTlNEcmFnT3BlcmF0aW9uKW9wZXJhdGlvbgogewogICAgIE5TUG9pbnQgd2luZG93SW1h
Z2VMb2MgPSBbW3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOmFQb2ludF07CkBAIC0x
NzgxLDYgKzE3ODQsNyBAQCAtIChOU1ZpZXcgKilfaGl0VGVzdDooTlNQb2ludCAqKXBvaW50IGRy
CiAgICAgICAgIHJldHVybiBzZWxmOwogICAgIHJldHVybiBuaWw7CiB9CisKICNlbmRpZiAvLyBF
TkFCTEUoRFJBR19TVVBQT1JUKQogCiAtIChCT09MKV93aW5kb3dSZXNpemVNb3VzZUxvY2F0aW9u
SXNJblZpc2libGVTY3JvbGxlclRodW1iOihOU1BvaW50KWxvYwpAQCAtMTc5MCwxMyArMTc5NCwx
NCBAQCAtIChCT09MKV93aW5kb3dSZXNpemVNb3VzZUxvY2F0aW9uSXNJblZpCiAgICAgcmV0dXJu
IE5TTW91c2VJblJlY3QobG9jYWxQb2ludCwgdmlzaWJsZVRodW1iUmVjdCwgW3NlbGYgaXNGbGlw
cGVkXSk7CiB9CiAKLS0gKHZvaWQpX3VwZGF0ZVdpbmRvd1Zpc2liaWxpdHkKKy0gKHZvaWQpX3dr
X3VwZGF0ZVdpbmRvd1Zpc2liaWxpdHkKIHsKICAgICBfZGF0YS0+X3BhZ2UtPnVwZGF0ZVdpbmRv
d0lzVmlzaWJsZShbW3NlbGYgd2luZG93XSBpc1Zpc2libGVdKTsKIH0KIAogCiAjaWYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA9PSAxMDYwCisKIC0gKEJPT0wpX293bnNXaW5kb3dH
cm93Qm94CiB7CiAgICAgTlNXaW5kb3cqIHdpbmRvdyA9IFtzZWxmIHdpbmRvd107CkBAIC0xODQ1
LDU0ICsxODUwLDQ1IEBAIC0gKEJPT0wpX3VwZGF0ZUdyb3dCb3hGb3JXaW5kb3dGcmFtZUNoYW4K
IAogICAgIHJldHVybiBvd25zR3Jvd0JveDsKIH0KKwogI2VuZGlmCiAKIC8vIEZJWE1FOiBVc2Ug
QXBwS2l0IGNvbnN0YW50cyBmb3IgdGhlc2Ugd2hlbiB0aGV5IGFyZSBhdmFpbGFibGUuCitzdGF0
aWMgTlNTdHJpbmcgKiBjb25zdCB3aW5kb3dEaWRCZWNvbWVWaXNpYmxlTm90aWZpY2F0aW9uID0g
QCJfTlNXaW5kb3dEaWRCZWNvbWVWaXNpYmxlIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IHdp
bmRvd0RpZE9yZGVyT2ZmU2NyZWVuTm90aWZpY2F0aW9uID0gQCJOU1dpbmRvd0RpZE9yZGVyT2Zm
U2NyZWVuTm90aWZpY2F0aW9uIjsKIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IHdpbmRvd0RpZENo
YW5nZUJhY2tpbmdQcm9wZXJ0aWVzTm90aWZpY2F0aW9uID0gQCJOU1dpbmRvd0RpZENoYW5nZUJh
Y2tpbmdQcm9wZXJ0aWVzTm90aWZpY2F0aW9uIjsKIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IGJh
Y2tpbmdQcm9wZXJ0eU9sZFNjYWxlRmFjdG9yS2V5ID0gQCJOU0JhY2tpbmdQcm9wZXJ0eU9sZFNj
YWxlRmFjdG9yS2V5IjsKIAotLSAodm9pZClhZGRXaW5kb3dPYnNlcnZlcnNGb3JXaW5kb3c6KE5T
V2luZG93ICopd2luZG93CistICh2b2lkKV93a191cGRhdGVXaW5kb3dPYnNlcnZlcnNGb3JXaW5k
b3c6KE5TV2luZG93ICopd2luZG93CiB7Ci0gICAgaWYgKHdpbmRvdykgewotICAgICAgICBbW05T
Tm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0
b3I6QHNlbGVjdG9yKF93aW5kb3dEaWRCZWNvbWVLZXk6KQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOk5TV2luZG93RGlkQmVjb21lS2V5
Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVy
IGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF93aW5k
b3dEaWRSZXNpZ25LZXk6KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuYW1lOk5TV2luZG93RGlkUmVzaWduS2V5Tm90aWZpY2F0aW9uIG9iamVj
dDpuaWxdOwotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFk
ZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF93aW5kb3dEaWRNaW5pYXR1cml6ZTop
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lOk5TV2luZG93RGlkTWluaWF0dXJpemVOb3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107Ci0g
ICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6
c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3dpbmRvd0RpZERlbWluaWF0dXJpemU6KQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOk5TV2lu
ZG93RGlkRGVtaW5pYXR1cml6ZU5vdGlmaWNhdGlvbiBvYmplY3Q6d2luZG93XTsKLSAgICAgICAg
W1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNl
bGVjdG9yOkBzZWxlY3Rvcihfd2luZG93RGlkTW92ZTopCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6TlNXaW5kb3dEaWRNb3ZlTm90aWZp
Y2F0aW9uIG9iamVjdDp3aW5kb3ddOwotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRl
ZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF93aW5kb3dE
aWRSZXNpemU6KSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZTpOU1dpbmRvd0RpZFJlc2l6ZU5vdGlmaWNhdGlvbiBvYmplY3Q6d2luZG93
XTsKLSAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNl
cnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihfd2luZG93RGlkT3JkZXJPZmZTY3JlZW46KSAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZTpAIk5TV2luZG93RGlkT3JkZXJPZmZTY3JlZW5Ob3RpZmljYXRpb24iIG9iamVjdDp3aW5kb3dd
OwotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2Vy
dmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF93aW5kb3dEaWRPcmRlck9uU2NyZWVuOikgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6
QCJfTlNXaW5kb3dEaWRCZWNvbWVWaXNpYmxlIiBvYmplY3Q6d2luZG93XTsKLSAgICAgICAgW1tO
U05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVj
dG9yOkBzZWxlY3Rvcihfd2luZG93RGlkQ2hhbmdlQmFja2luZ1Byb3BlcnRpZXM6KQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOndpbmRv
d0RpZENoYW5nZUJhY2tpbmdQcm9wZXJ0aWVzTm90aWZpY2F0aW9uIG9iamVjdDp3aW5kb3ddOwot
ICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVy
OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF93aW5kb3dEaWRDaGFuZ2VTY3JlZW46KQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOk5TV2lu
ZG93RGlkQ2hhbmdlU2NyZWVuTm90aWZpY2F0aW9uIG9iamVjdDp3aW5kb3ddOwotICAgIH0KLX0K
KyAgICBmb3IgKGlkIG9ic2VydmVyIGluIF9kYXRhLT5fb2JzZXJ2ZXJzLmdldCgpKQorICAgICAg
ICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm9i
c2VydmVyXTsKKyAgICBbX2RhdGEtPl9vYnNlcnZlcnMuZ2V0KCkgcmVtb3ZlQWxsT2JqZWN0c107
CiAKLS0gKHZvaWQpcmVtb3ZlV2luZG93T2JzZXJ2ZXJzCi17Ci0gICAgTlNXaW5kb3cgKndpbmRv
dyA9IFtzZWxmIHdpbmRvd107CiAgICAgaWYgKCF3aW5kb3cpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6
c2VsZiBuYW1lOk5TV2luZG93RGlkQmVjb21lS2V5Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwot
ICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6
c2VsZiBuYW1lOk5TV2luZG93RGlkUmVzaWduS2V5Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwot
ICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6
c2VsZiBuYW1lOk5TV2luZG93RGlkTWluaWF0dXJpemVOb3RpZmljYXRpb24gb2JqZWN0OndpbmRv
d107Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNl
cnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dEaWREZW1pbmlhdHVyaXplTm90aWZpY2F0aW9uIG9iamVj
dDp3aW5kb3ddOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVt
b3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TV2luZG93RGlkTW92ZU5vdGlmaWNhdGlvbiBvYmplY3Q6
d2luZG93XTsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92
ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRvd0RpZFJlc2l6ZU5vdGlmaWNhdGlvbiBvYmplY3Q6
d2luZG93XTsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92
ZU9ic2VydmVyOnNlbGYgbmFtZTpAIk5TV2luZG93RGlkT3JkZXJPZmZTY3JlZW5Ob3RpZmljYXRp
b24iIG9iamVjdDp3aW5kb3ddOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOkAiX05TV2luZG93RGlkQmVjb21lVmlzaWJs
ZSIgb2JqZWN0OndpbmRvd107Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2Vu
dGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6d2luZG93RGlkQ2hhbmdlQmFja2luZ1Byb3Bl
cnRpZXNOb3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dEaWRD
aGFuZ2VTY3JlZW5Ob3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107CisgICAgaWYgKCFfZGF0YS0+
X29ic2VydmVycykKKyAgICAgICAgX2RhdGEtPl9vYnNlcnZlcnMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKworICAgICNkZWZpbmUgQUREX09CU0VSVkVSKHNlbGVj
dG9yTmFtZSwgbm90aWZpY2F0aW9uTmFtZSwgbm90aWZpY2F0aW9uT2JqZWN0KSBcCisgICAgICAg
IFtfZGF0YS0+X29ic2VydmVycy5nZXQoKSBhZGRPYmplY3Q6W1tOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXSBcCisgICAgICAgICAgICBhZGRPYnNlcnZlckZvck5hbWU6bm90aWZp
Y2F0aW9uTmFtZSBvYmplY3Q6bm90aWZpY2F0aW9uT2JqZWN0IHF1ZXVlOltOU09wZXJhdGlvblF1
ZXVlIG1haW5RdWV1ZV0gXAorICAgICAgICAgICAgdXNpbmdCbG9jazpeKE5TTm90aWZpY2F0aW9u
ICpub3RpZmljYXRpb24peyBbc2VsZiBzZWxlY3Rvck5hbWU6bm90aWZpY2F0aW9uXTsgfV0gXAor
ICAgICAgICBdOworCisgICAgQUREX09CU0VSVkVSKF93a193aW5kb3dEaWRCZWNvbWVLZXksIE5T
V2luZG93RGlkQmVjb21lS2V5Tm90aWZpY2F0aW9uLCBuaWwpOworICAgIEFERF9PQlNFUlZFUihf
d2tfd2luZG93RGlkQ2hhbmdlQmFja2luZ1Byb3BlcnRpZXMsIHdpbmRvd0RpZENoYW5nZUJhY2tp
bmdQcm9wZXJ0aWVzTm90aWZpY2F0aW9uLCB3aW5kb3cpOworICAgIEFERF9PQlNFUlZFUihfd2tf
d2luZG93RGlkQ2hhbmdlU2NyZWVuLCBOU1dpbmRvd0RpZENoYW5nZVNjcmVlbk5vdGlmaWNhdGlv
biwgd2luZG93KTsKKyAgICBBRERfT0JTRVJWRVIoX3drX3dpbmRvd0RpZERlbWluaWF0dXJpemUs
IE5TV2luZG93RGlkRGVtaW5pYXR1cml6ZU5vdGlmaWNhdGlvbiwgd2luZG93KTsKKyAgICBBRERf
T0JTRVJWRVIoX3drX3dpbmRvd0RpZE1pbmlhdHVyaXplLCBOU1dpbmRvd0RpZE1pbmlhdHVyaXpl
Tm90aWZpY2F0aW9uLCB3aW5kb3cpOworICAgIEFERF9PQlNFUlZFUihfd2tfd2luZG93RGlkTW92
ZSwgTlNXaW5kb3dEaWRNb3ZlTm90aWZpY2F0aW9uLCB3aW5kb3cpOworICAgIEFERF9PQlNFUlZF
Uihfd2tfd2luZG93RGlkT3JkZXJPZmZTY3JlZW4sIHdpbmRvd0RpZE9yZGVyT2ZmU2NyZWVuTm90
aWZpY2F0aW9uLCB3aW5kb3cpOworICAgIEFERF9PQlNFUlZFUihfd2tfd2luZG93RGlkT3JkZXJP
blNjcmVlbiwgd2luZG93RGlkQmVjb21lVmlzaWJsZU5vdGlmaWNhdGlvbiwgd2luZG93KTsKKyAg
ICBBRERfT0JTRVJWRVIoX3drX3dpbmRvd0RpZFJlc2lnbktleSwgTlNXaW5kb3dEaWRSZXNpZ25L
ZXlOb3RpZmljYXRpb24sIG5pbCk7CisgICAgQUREX09CU0VSVkVSKF93a193aW5kb3dEaWRSZXNp
emUsIE5TV2luZG93RGlkUmVzaXplTm90aWZpY2F0aW9uLCB3aW5kb3cpOworCisgICAgI3VuZGVm
IEFERF9PQlNFUlZFUgogfQogCiAtICh2b2lkKXZpZXdXaWxsTW92ZVRvV2luZG93OihOU1dpbmRv
dyAqKXdpbmRvdwpAQCAtMTkxMiw4ICsxOTA4LDcgQEAgLSAodm9pZCl2aWV3V2lsbE1vdmVUb1dp
bmRvdzooTlNXaW5kb3cgKgogI2VuZGlmCiAgICAgICAgIF9kYXRhLT5fcGFnZUNsaWVudC0+dmll
d1dpbGxNb3ZlVG9Bbm90aGVyV2luZG93KCk7CiAgICAgCi0gICAgW3NlbGYgcmVtb3ZlV2luZG93
T2JzZXJ2ZXJzXTsKLSAgICBbc2VsZiBhZGRXaW5kb3dPYnNlcnZlcnNGb3JXaW5kb3c6d2luZG93
XTsKKyAgICBbc2VsZiBfd2tfdXBkYXRlV2luZG93T2JzZXJ2ZXJzRm9yV2luZG93OndpbmRvd107
CiAKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID09IDEwNjAKICAgICBpZiAo
W2N1cnJlbnRXaW5kb3cgX2dyb3dCb3hPd25lcl0gPT0gc2VsZikKQEAgLTE5MjgsMjEgKzE5MjMs
MjEgQEAgLSAodm9pZCl2aWV3RGlkTW92ZVRvV2luZG93CiAgICAgLy8gdXBkYXRlIHRoZSBhY3Rp
dmUgc3RhdGUuCiAgICAgaWYgKFtzZWxmIHdpbmRvd10pIHsKICAgICAgICAgX2RhdGEtPl93aW5k
b3dIYXNWYWxpZEJhY2tpbmdTdG9yZSA9IE5POwotICAgICAgICBbc2VsZiBfdXBkYXRlV2luZG93
VmlzaWJpbGl0eV07CisgICAgICAgIFtzZWxmIF93a191cGRhdGVXaW5kb3dWaXNpYmlsaXR5XTsK
ICAgICAgICAgX2RhdGEtPl9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpW
aWV3V2luZG93SXNBY3RpdmUpOwogICAgICAgICBfZGF0YS0+X3BhZ2UtPnZpZXdTdGF0ZURpZENo
YW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc1Zpc2libGUgfCBXZWJQYWdlUHJveHk6OlZpZXdJc0lu
V2luZG93KTsKLSAgICAgICAgW3NlbGYgX3VwZGF0ZVdpbmRvd0FuZFZpZXdGcmFtZXNdOworICAg
ICAgICBbc2VsZiBfd2tfdXBkYXRlV2luZG93QW5kVmlld0ZyYW1lc107CiAKICAgICAgICAgaWYg
KCFfZGF0YS0+X2ZsYWdzQ2hhbmdlZEV2ZW50TW9uaXRvcikgewogICAgICAgICAgICAgX2RhdGEt
Pl9mbGFnc0NoYW5nZWRFdmVudE1vbml0b3IgPSBbTlNFdmVudCBhZGRMb2NhbE1vbml0b3JGb3JF
dmVudHNNYXRjaGluZ01hc2s6TlNGbGFnc0NoYW5nZWRNYXNrIGhhbmRsZXI6XihOU0V2ZW50ICpm
bGFnc0NoYW5nZWRFdmVudCkgewotICAgICAgICAgICAgICAgIFtzZWxmIF9wb3N0RmFrZU1vdXNl
TW92ZWRFdmVudEZvckZsYWdzQ2hhbmdlZEV2ZW50OmZsYWdzQ2hhbmdlZEV2ZW50XTsKKyAgICAg
ICAgICAgICAgICBbc2VsZiBfd2tfcG9zdEZha2VNb3VzZU1vdmVkRXZlbnRGb3JGbGFnc0NoYW5n
ZWRFdmVudDpmbGFnc0NoYW5nZWRFdmVudF07CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZsYWdz
Q2hhbmdlZEV2ZW50OwogICAgICAgICAgICAgfV07CiAgICAgICAgIH0KIAotICAgICAgICBbc2Vs
ZiBfYWNjZXNzaWJpbGl0eVJlZ2lzdGVyVUlQcm9jZXNzVG9rZW5zXTsKKyAgICAgICAgW3NlbGYg
X3drX2FjY2Vzc2liaWxpdHlSZWdpc3RlclVJUHJvY2Vzc1Rva2Vuc107CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgW3NlbGYgX3VwZGF0ZVdpbmRvd1Zpc2liaWxpdHldOworICAgICAgICBbc2VsZiBf
d2tfdXBkYXRlV2luZG93VmlzaWJpbGl0eV07CiAgICAgICAgIF9kYXRhLT5fcGFnZS0+dmlld1N0
YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzVmlzaWJsZSk7CiAgICAgICAgIF9kYXRh
LT5fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0
aXZlIHwgV2ViUGFnZVByb3h5OjpWaWV3SXNJbldpbmRvdyk7CiAKQEAgLTE5NjAsNjcgKzE5NTUs
NjcgQEAgLSAodm9pZCl2aWV3RGlkTW92ZVRvV2luZG93CiAjZW5kaWYKICAgICB9CiAKLSAgICBf
ZGF0YS0+X3BhZ2UtPnNldEludHJpbnNpY0RldmljZVNjYWxlRmFjdG9yKFtzZWxmIF9pbnRyaW5z
aWNEZXZpY2VTY2FsZUZhY3Rvcl0pOworICAgIF9kYXRhLT5fcGFnZS0+c2V0SW50cmluc2ljRGV2
aWNlU2NhbGVGYWN0b3IoW3NlbGYgX3drX2ludHJpbnNpY0RldmljZVNjYWxlRmFjdG9yXSk7CiB9
CiAKLS0gKHZvaWQpZG9XaW5kb3dEaWRDaGFuZ2VTY3JlZW4KKy0gKHZvaWQpX3drX3dpbmRvd1Nj
cmVlbkRpZENoYW5nZQogewogICAgIF9kYXRhLT5fcGFnZS0+d2luZG93U2NyZWVuRGlkQ2hhbmdl
KChQbGF0Zm9ybURpc3BsYXlJRClbW1tbW3NlbGYgd2luZG93XSBzY3JlZW5dIGRldmljZURlc2Ny
aXB0aW9uXSBvYmplY3RGb3JLZXk6QCJOU1NjcmVlbk51bWJlciJdIGludFZhbHVlXSk7CiB9CiAK
LS0gKHZvaWQpX3dpbmRvd0RpZEJlY29tZUtleTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRp
b24KKy0gKHZvaWQpX3drX3dpbmRvd0RpZEJlY29tZUtleTooTlNOb3RpZmljYXRpb24gKilub3Rp
ZmljYXRpb24KIHsKICAgICBOU1dpbmRvdyAqa2V5V2luZG93ID0gW25vdGlmaWNhdGlvbiBvYmpl
Y3RdOwogICAgIGlmIChrZXlXaW5kb3cgPT0gW3NlbGYgd2luZG93XSB8fCBrZXlXaW5kb3cgPT0g
W1tzZWxmIHdpbmRvd10gYXR0YWNoZWRTaGVldF0pIHsKLSAgICAgICAgW3NlbGYgX3VwZGF0ZVNl
Y3VyZUlucHV0U3RhdGVdOworICAgICAgICBbc2VsZiBfd2tfdXBkYXRlU2VjdXJlSW5wdXRTdGF0
ZV07CiAgICAgICAgIF9kYXRhLT5fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94
eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKICAgICB9CiAKICAgICAvLyBTZW5kIGEgY2hhbmdlIHNj
cmVlbiB0byBtYWtlIHN1cmUgdGhlIGluaXRpYWwgZGlzcGxheUlEIGlzIHNldAotICAgIFtzZWxm
IGRvV2luZG93RGlkQ2hhbmdlU2NyZWVuXTsKKyAgICBbc2VsZiBfd2tfd2luZG93U2NyZWVuRGlk
Q2hhbmdlXTsKIH0KIAotLSAodm9pZClfd2luZG93RGlkQ2hhbmdlU2NyZWVuOihOU05vdGlmaWNh
dGlvbiAqKW5vdGlmaWNhdGlvbgorLSAodm9pZClfd2tfd2luZG93RGlkQ2hhbmdlU2NyZWVuOihO
U05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogewotICAgIFtzZWxmIGRvV2luZG93RGlkQ2hh
bmdlU2NyZWVuXTsKKyAgICBbc2VsZiBfd2tfd2luZG93U2NyZWVuRGlkQ2hhbmdlXTsKIH0KIAot
LSAodm9pZClfd2luZG93RGlkUmVzaWduS2V5OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgorLSAodm9pZClfd2tfd2luZG93RGlkUmVzaWduS2V5OihOU05vdGlmaWNhdGlvbiAqKW5vdGlm
aWNhdGlvbgogewogICAgIE5TV2luZG93ICpmb3JtZXJLZXlXaW5kb3cgPSBbbm90aWZpY2F0aW9u
IG9iamVjdF07CiAgICAgaWYgKGZvcm1lcktleVdpbmRvdyA9PSBbc2VsZiB3aW5kb3ddIHx8IGZv
cm1lcktleVdpbmRvdyA9PSBbW3NlbGYgd2luZG93XSBhdHRhY2hlZFNoZWV0XSkgewotICAgICAg
ICBbc2VsZiBfdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZV07CisgICAgICAgIFtzZWxmIF93a191cGRh
dGVTZWN1cmVJbnB1dFN0YXRlXTsKICAgICAgICAgX2RhdGEtPl9wYWdlLT52aWV3U3RhdGVEaWRD
aGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOwogICAgIH0KIH0KIAotLSAo
dm9pZClfd2luZG93RGlkTWluaWF0dXJpemU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9u
CistICh2b2lkKV93a193aW5kb3dEaWRNaW5pYXR1cml6ZTooTlNOb3RpZmljYXRpb24gKilub3Rp
ZmljYXRpb24KIHsKICAgICBfZGF0YS0+X3dpbmRvd0hhc1ZhbGlkQmFja2luZ1N0b3JlID0gTk87
CiAKLSAgICBbc2VsZiBfdXBkYXRlV2luZG93VmlzaWJpbGl0eV07CisgICAgW3NlbGYgX3drX3Vw
ZGF0ZVdpbmRvd1Zpc2liaWxpdHldOwogfQogCi0tICh2b2lkKV93aW5kb3dEaWREZW1pbmlhdHVy
aXplOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorLSAodm9pZClfd2tfd2luZG93RGlk
RGVtaW5pYXR1cml6ZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKLSAgICBbc2Vs
ZiBfdXBkYXRlV2luZG93VmlzaWJpbGl0eV07CisgICAgW3NlbGYgX3drX3VwZGF0ZVdpbmRvd1Zp
c2liaWxpdHldOwogfQogCi0tICh2b2lkKV93aW5kb3dEaWRNb3ZlOihOU05vdGlmaWNhdGlvbiAq
KW5vdGlmaWNhdGlvbgorLSAodm9pZClfd2tfd2luZG93RGlkTW92ZTooTlNOb3RpZmljYXRpb24g
Kilub3RpZmljYXRpb24KIHsKLSAgICBbc2VsZiBfdXBkYXRlV2luZG93QW5kVmlld0ZyYW1lc107
ICAgIAorICAgIFtzZWxmIF93a191cGRhdGVXaW5kb3dBbmRWaWV3RnJhbWVzXTsKIH0KIAotLSAo
dm9pZClfd2luZG93RGlkUmVzaXplOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorLSAo
dm9pZClfd2tfd2luZG93RGlkUmVzaXplOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgog
ewogICAgIF9kYXRhLT5fd2luZG93SGFzVmFsaWRCYWNraW5nU3RvcmUgPSBOTzsKIAotICAgIFtz
ZWxmIF91cGRhdGVXaW5kb3dBbmRWaWV3RnJhbWVzXTsKKyAgICBbc2VsZiBfd2tfdXBkYXRlV2lu
ZG93QW5kVmlld0ZyYW1lc107CiB9CiAKLS0gKHZvaWQpX3dpbmRvd0RpZE9yZGVyT2ZmU2NyZWVu
OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorLSAodm9pZClfd2tfd2luZG93RGlkT3Jk
ZXJPZmZTY3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7Ci0gICAgW3NlbGYg
X3VwZGF0ZVdpbmRvd1Zpc2liaWxpdHldOworICAgIFtzZWxmIF93a191cGRhdGVXaW5kb3dWaXNp
YmlsaXR5XTsKIAogICAgIC8vIFdlIHdhbnQgdG8gbWFrZSBzdXJlIHRvIHVwZGF0ZSB0aGUgYWN0
aXZlIHN0YXRlIHdoaWxlIGhpZGRlbiwgc28gc2luY2UgdGhlIHZpZXcgaXMgYWJvdXQgdG8gYmUg
aGlkZGVuLAogICAgIC8vIHdlIGhpZGUgaXQgZmlyc3QgYW5kIHRoZW4gdXBkYXRlIHRoZSBhY3Rp
dmUgc3RhdGUuCkBAIC0yMDI4LDkgKzIwMjMsOSBAQCAtICh2b2lkKV93aW5kb3dEaWRPcmRlck9m
ZlNjcmVlbjooTlNOb3RpCiAgICAgX2RhdGEtPl9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2Vi
UGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOwogfQogCi0tICh2b2lkKV93aW5kb3dEaWRP
cmRlck9uU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorLSAodm9pZClfd2tf
d2luZG93RGlkT3JkZXJPblNjcmVlbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsK
LSAgICBbc2VsZiBfdXBkYXRlV2luZG93VmlzaWJpbGl0eV07CisgICAgW3NlbGYgX3drX3VwZGF0
ZVdpbmRvd1Zpc2liaWxpdHldOwogCiAgICAgLy8gV2Ugd2FudCB0byBtYWtlIHN1cmUgdG8gdXBk
YXRlIHRoZSBhY3RpdmUgc3RhdGUgd2hpbGUgaGlkZGVuLCBzbyBzaW5jZSB0aGUgdmlldyBpcyBh
Ym91dCB0byBiZWNvbWUgdmlzaWJsZSwKICAgICAvLyB3ZSB1cGRhdGUgdGhlIGFjdGl2ZSBzdGF0
ZSBmaXJzdCBhbmQgdGhlbiBtYWtlIGl0IHZpc2libGUuCkBAIC0yMDM4LDEwICsyMDMzLDEwIEBA
IC0gKHZvaWQpX3dpbmRvd0RpZE9yZGVyT25TY3JlZW46KE5TTm90aWYKICAgICBfZGF0YS0+X3Bh
Z2UtPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc1Zpc2libGUpOwogfQog
Ci0tICh2b2lkKV93aW5kb3dEaWRDaGFuZ2VCYWNraW5nUHJvcGVydGllczooTlNOb3RpZmljYXRp
b24gKilub3RpZmljYXRpb24KKy0gKHZvaWQpX3drX3dpbmRvd0RpZENoYW5nZUJhY2tpbmdQcm9w
ZXJ0aWVzOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogewogICAgIENHRmxvYXQgb2xk
QmFja2luZ1NjYWxlRmFjdG9yID0gW1tub3RpZmljYXRpb24udXNlckluZm8gb2JqZWN0Rm9yS2V5
OmJhY2tpbmdQcm9wZXJ0eU9sZFNjYWxlRmFjdG9yS2V5XSBkb3VibGVWYWx1ZV07Ci0gICAgQ0dG
bG9hdCBuZXdCYWNraW5nU2NhbGVGYWN0b3IgPSBbc2VsZiBfaW50cmluc2ljRGV2aWNlU2NhbGVG
YWN0b3JdOyAKKyAgICBDR0Zsb2F0IG5ld0JhY2tpbmdTY2FsZUZhY3RvciA9IFtzZWxmIF93a19p
bnRyaW5zaWNEZXZpY2VTY2FsZUZhY3Rvcl07CiAgICAgaWYgKG9sZEJhY2tpbmdTY2FsZUZhY3Rv
ciA9PSBuZXdCYWNraW5nU2NhbGVGYWN0b3IpCiAgICAgICAgIHJldHVybjsgCiAKQEAgLTIxMzgs
NyArMjEzMyw3IEBAIC0gKHZvaWQpdmlld0RpZENoYW5nZUJhY2tpbmdQcm9wZXJ0aWVzCiAgICAg
ICAgIGRyYXdpbmdBcmVhLT5jb2xvclNwYWNlRGlkQ2hhbmdlKCk7CiB9CiAKLS0gKHZvaWQpX2Fj
Y2Vzc2liaWxpdHlSZWdpc3RlclVJUHJvY2Vzc1Rva2VucworLSAodm9pZClfd2tfYWNjZXNzaWJp
bGl0eVJlZ2lzdGVyVUlQcm9jZXNzVG9rZW5zCiB7CiAgICAgLy8gSW5pdGlhbGl6ZSByZW1vdGUg
YWNjZXNzaWJpbGl0eSB3aGVuIHRoZSB3aW5kb3cgY29ubmVjdGlvbiBoYXMgYmVlbiBlc3RhYmxp
c2hlZC4KICAgICBOU0RhdGEgKnJlbW90ZUVsZW1lbnRUb2tlbiA9IFdLQVhSZW1vdGVUb2tlbkZv
ckVsZW1lbnQoc2VsZik7CkBAIC0yMTQ4LDcgKzIxNDMsNyBAQCAtICh2b2lkKV9hY2Nlc3NpYmls
aXR5UmVnaXN0ZXJVSVByb2Nlc3NUCiAgICAgX2RhdGEtPl9wYWdlLT5yZWdpc3RlclVJUHJvY2Vz
c0FjY2Vzc2liaWxpdHlUb2tlbnMoZWxlbWVudFRva2VuLCB3aW5kb3dUb2tlbik7CiB9CiAKLS0g
KHZvaWQpX3VwZGF0ZVJlbW90ZUFjY2Vzc2liaWxpdHlSZWdpc3RyYXRpb246KEJPT0wpcmVnaXN0
ZXJQcm9jZXNzCistICh2b2lkKV93a191cGRhdGVSZW1vdGVBY2Nlc3NpYmlsaXR5UmVnaXN0cmF0
aW9uOihCT09MKXJlZ2lzdGVyUHJvY2VzcwogewogICAgIC8vIFdoZW4gdGhlIHRyZWUgaXMgY29u
bmVjdGVkL2Rpc2Nvbm5lY3RlZCwgdGhlIHJlbW90ZSBhY2Nlc3NpYmlsaXR5IHJlZ2lzdHJhdGlv
bgogICAgIC8vIG5lZWRzIHRvIGJlIHVwZGF0ZWQgd2l0aCB0aGUgcGlkIG9mIHRoZSByZW1vdGUg
cHJvY2Vzcy4gSWYgdGhlIHByb2Nlc3MgaXMgZ29pbmcKQEAgLTIyMjAsNyArMjIxNSw3IEBAIC0g
KE5TVmlldyAqKWhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQKICAgICByZXR1cm4gaGl0VmlldzsKIH0K
IAotLSAodm9pZClfcG9zdEZha2VNb3VzZU1vdmVkRXZlbnRGb3JGbGFnc0NoYW5nZWRFdmVudDoo
TlNFdmVudCAqKWZsYWdzQ2hhbmdlZEV2ZW50CistICh2b2lkKV93a19wb3N0RmFrZU1vdXNlTW92
ZWRFdmVudEZvckZsYWdzQ2hhbmdlZEV2ZW50OihOU0V2ZW50ICopZmxhZ3NDaGFuZ2VkRXZlbnQK
IHsKICAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6
TlNNb3VzZU1vdmVkIGxvY2F0aW9uOltbZmxhZ3NDaGFuZ2VkRXZlbnQgd2luZG93XSBjb252ZXJ0
U2NyZWVuVG9CYXNlOltOU0V2ZW50IG1vdXNlTG9jYXRpb25dXQogICAgICAgICBtb2RpZmllckZs
YWdzOltmbGFnc0NoYW5nZWRFdmVudCBtb2RpZmllckZsYWdzXSB0aW1lc3RhbXA6W2ZsYWdzQ2hh
bmdlZEV2ZW50IHRpbWVzdGFtcF0gd2luZG93TnVtYmVyOltmbGFnc0NoYW5nZWRFdmVudCB3aW5k
b3dOdW1iZXJdCkBAIC0yMjM0LDcgKzIyMjksNyBAQCAtIChOU0ludGVnZXIpY29udmVyc2F0aW9u
SWRlbnRpZmllcgogICAgIHJldHVybiAoTlNJbnRlZ2VyKXNlbGY7CiB9CiAKLS0gKGZsb2F0KV9p
bnRyaW5zaWNEZXZpY2VTY2FsZUZhY3RvcgorLSAoZmxvYXQpX3drX2ludHJpbnNpY0RldmljZVNj
YWxlRmFjdG9yCiB7CiAgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107CiAjaWYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDcwCkBAIC0yMjQ4LDcgKzIyNDMs
NyBAQCAtIChmbG9hdClfaW50cmluc2ljRGV2aWNlU2NhbGVGYWN0b3IKICNlbmRpZgogfQogCi0t
ICh2b2lkKV9zZXREcmF3aW5nQXJlYVNpemU6KE5TU2l6ZSlzaXplCistICh2b2lkKV93a19zZXRE
cmF3aW5nQXJlYVNpemU6KE5TU2l6ZSlzaXplCiB7CiAgICAgaWYgKCFfZGF0YS0+X3BhZ2UtPmRy
YXdpbmdBcmVhKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyNTcsMTEgKzIyNTIsNiBAQCAtICh2
b2lkKV9zZXREcmF3aW5nQXJlYVNpemU6KE5TU2l6ZSlzaXplCiAgICAgX2RhdGEtPl9yZXNpemVT
Y3JvbGxPZmZzZXQgPSBOU1plcm9TaXplOwogfQogCi0tIChCT09MKV9zaG91bGRVc2VUaWxlZERy
YXdpbmdBcmVhCi17Ci0gICAgcmV0dXJuIE5POwotfQotCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMDgwCiAtICh2b2lkKXF1aWNrTG9va1dpdGhFdmVudDooTlNFdmVu
dCAqKWV2ZW50CiB7CkBAIC0yMjc0LDcgKzIyNjQsNyBAQCAtICh2b2lkKXF1aWNrTG9va1dpdGhF
dmVudDooTlNFdmVudCAqKWV2CiAKIEBpbXBsZW1lbnRhdGlvbiBXS1ZpZXcgKEludGVybmFsKQog
Ci0tIChQYXNzT3duUHRyPFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eT4pX2NyZWF0ZURyYXdpbmdB
cmVhUHJveHkKKy0gKFBhc3NPd25QdHI8V2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Pilfd2tfY3Jl
YXRlRHJhd2luZ0FyZWFQcm94eQogewogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiAg
ICAgaWYgKFtzZWxmIF9zaG91bGRVc2VUaWxlZERyYXdpbmdBcmVhXSkKQEAgLTIyODQsNyArMjI3
NCw3IEBAIC0gKFBhc3NPd25QdHI8V2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5PikKICAgICByZXR1
cm4gRHJhd2luZ0FyZWFQcm94eUltcGw6OmNyZWF0ZShfZGF0YS0+X3BhZ2UuZ2V0KCkpOwogfQog
Ci0tIChCT09MKV9pc0ZvY3VzZWQKKy0gKEJPT0wpX3drX2lzRm9jdXNlZAogewogICAgIGlmIChf
ZGF0YS0+X2luQmVjb21lRmlyc3RSZXNwb25kZXIpCiAgICAgICAgIHJldHVybiBZRVM7CkBAIC0y
MjkzLDcgKzIyODMsNyBAQCAtIChCT09MKV9pc0ZvY3VzZWQKICAgICByZXR1cm4gW1tzZWxmIHdp
bmRvd10gZmlyc3RSZXNwb25kZXJdID09IHNlbGY7CiB9CiAKLS0gKFdlYktpdDo6Q29sb3JTcGFj
ZURhdGEpX2NvbG9yU3BhY2UKKy0gKFdlYktpdDo6Q29sb3JTcGFjZURhdGEpX3drX2NvbG9yU3Bh
Y2UKIHsKICAgICBpZiAoIV9kYXRhLT5fY29sb3JTcGFjZSkgewogICAgICAgICBpZiAoW3NlbGYg
d2luZG93XSkKQEAgLTIzMDgsMzIgKzIyOTgsMzIgQEAgLSAoV2ViS2l0OjpDb2xvclNwYWNlRGF0
YSlfY29sb3JTcGFjZQogICAgIHJldHVybiBjb2xvclNwYWNlRGF0YTsgICAgCiB9CiAKLS0gKHZv
aWQpX3Byb2Nlc3NEaWRDcmFzaAorLSAodm9pZClfd2tfcHJvY2Vzc0RpZENyYXNoCiB7CiAgICAg
aWYgKF9kYXRhLT5fbGF5ZXJIb3N0aW5nVmlldykKLSAgICAgICAgW3NlbGYgX2V4aXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZV07CisgICAgICAgIFtzZWxmIF93a19leGl0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGVdOwogCi0gICAgW3NlbGYgX3VwZGF0ZVJlbW90ZUFjY2Vzc2liaWxpdHlS
ZWdpc3RyYXRpb246Tk9dOworICAgIFtzZWxmIF93a191cGRhdGVSZW1vdGVBY2Nlc3NpYmlsaXR5
UmVnaXN0cmF0aW9uOk5PXTsKIH0KIAotLSAodm9pZClfcGFnZUNsb3NlZAorLSAodm9pZClfd2tf
cGFnZUNsb3NlZAogewotICAgIFtzZWxmIF91cGRhdGVSZW1vdGVBY2Nlc3NpYmlsaXR5UmVnaXN0
cmF0aW9uOk5PXTsKKyAgICBbc2VsZiBfd2tfdXBkYXRlUmVtb3RlQWNjZXNzaWJpbGl0eVJlZ2lz
dHJhdGlvbjpOT107CiB9CiAKLS0gKHZvaWQpX2RpZFJlbGF1bmNoUHJvY2VzcworLSAodm9pZClf
d2tfZGlkUmVsYXVuY2hQcm9jZXNzCiB7Ci0gICAgW3NlbGYgX2FjY2Vzc2liaWxpdHlSZWdpc3Rl
clVJUHJvY2Vzc1Rva2Vuc107CisgICAgW3NlbGYgX3drX2FjY2Vzc2liaWxpdHlSZWdpc3RlclVJ
UHJvY2Vzc1Rva2Vuc107CiB9CiAKLS0gKHZvaWQpX3NldEN1cnNvcjooTlNDdXJzb3IgKiljdXJz
b3IKKy0gKHZvaWQpX3drX3NldEN1cnNvcjooTlNDdXJzb3IgKiljdXJzb3IKIHsKICAgICBpZiAo
W05TQ3Vyc29yIGN1cnJlbnRDdXJzb3JdID09IGN1cnNvcikKICAgICAgICAgcmV0dXJuOwogICAg
IFtjdXJzb3Igc2V0XTsKIH0KIAotLSAodm9pZClfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZToo
TlNTdHJpbmcgKiljb21tYW5kTmFtZSBlbmFibGVkOihCT09MKWlzRW5hYmxlZCBzdGF0ZTooaW50
KW5ld1N0YXRlCistICh2b2lkKV93a19zZXRVc2VySW50ZXJmYWNlSXRlbVN0YXRlOihOU1N0cmlu
ZyAqKWNvbW1hbmROYW1lIGVuYWJsZWQ6KEJPT0wpaXNFbmFibGVkIHN0YXRlOihpbnQpbmV3U3Rh
dGUKIHsKICAgICBWYWxpZGF0aW9uVmVjdG9yIGl0ZW1zID0gX2RhdGEtPl92YWxpZGF0aW9uTWFw
LnRha2UoY29tbWFuZE5hbWUpOwogICAgIHNpemVfdCBzaXplID0gaXRlbXMuc2l6ZSgpOwpAQCAt
MjM0Niw3ICsyMzM2LDcgQEAgLSAodm9pZClfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZTooTlNT
dAogICAgIH0KIH0KIAotLSAoQk9PTClfdHJ5UG9zdFByb2Nlc3NQbHVnaW5Db21wbGV4VGV4dElu
cHV0S2V5RG93bjooTlNFdmVudCAqKWV2ZW50CistIChCT09MKV93a190cnlQb3N0UHJvY2Vzc1Bs
dWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duOihOU0V2ZW50ICopZXZlbnQKIHsKICAgICBpZiAo
IV9kYXRhLT5fcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIgfHwgX2RhdGEtPl9wbHVn
aW5Db21wbGV4VGV4dElucHV0U3RhdGUgPT0gUGx1Z2luQ29tcGxleFRleHRJbnB1dERpc2FibGVk
KQogICAgICAgICByZXR1cm4gTk87CkBAIC0yMzU1LDE1ICsyMzQ1LDE1IEBAIC0gKEJPT0wpX3Ry
eVBvc3RQcm9jZXNzUGx1Z2luQ29tcGxleFRleHQKICAgICBpZiAoX2RhdGEtPl9wbHVnaW5Db21w
bGV4VGV4dElucHV0U3RhdGUgPT0gUGx1Z2luQ29tcGxleFRleHRJbnB1dEVuYWJsZWRMZWdhY3kp
CiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIHJldHVybiBbc2VsZiBfaGFuZGxlUGx1Z2luQ29t
cGxleFRleHRJbnB1dEtleURvd246ZXZlbnRdOworICAgIHJldHVybiBbc2VsZiBfd2tfaGFuZGxl
UGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd246ZXZlbnRdOwogfQogCi0tICh2b2lkKV9kb25l
V2l0aEtleUV2ZW50OihOU0V2ZW50ICopZXZlbnQgZXZlbnRXYXNIYW5kbGVkOihCT09MKWV2ZW50
V2FzSGFuZGxlZAorLSAodm9pZClfd2tfZG9uZVdpdGhLZXlFdmVudDooTlNFdmVudCAqKWV2ZW50
IGV2ZW50V2FzSGFuZGxlZDooQk9PTClldmVudFdhc0hhbmRsZWQKIHsKICAgICBpZiAoW2V2ZW50
IHR5cGVdICE9IE5TS2V5RG93bikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFtzZWxmIF90
cnlQb3N0UHJvY2Vzc1BsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duOmV2ZW50XSkKKyAgICBp
ZiAoW3NlbGYgX3drX3RyeVBvc3RQcm9jZXNzUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd246
ZXZlbnRdKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKGV2ZW50V2FzSGFuZGxlZCkg
ewpAQCAtMjM4Miw3ICsyMzcyLDcgQEAgLSAodm9pZClfZG9uZVdpdGhLZXlFdmVudDooTlNFdmVu
dCAqKWV2ZQogICAgIF9kYXRhLT5fa2V5RG93bkV2ZW50QmVpbmdSZXNlbnQgPSBudWxscHRyOwog
fQogCi0tIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooTlNFdmVudCAqKWV2ZW50IHNhdmluZ0Nv
bW1hbmRzVG86KFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jiljb21tYW5kcworLSAo
Qk9PTClfd2tfaW50ZXJwcmV0S2V5RXZlbnQ6KE5TRXZlbnQgKilldmVudCBzYXZpbmdDb21tYW5k
c1RvOihWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpY29tbWFuZHMKIHsKICAgICBB
U1NFUlQoIV9kYXRhLT5faW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyk7CiAgICAgQVNTRVJU
KGNvbW1hbmRzLmlzRW1wdHkoKSk7CkBAIC0yNDE3LDEyICsyNDA3LDEyIEBAIC0gKEJPT0wpX2lu
dGVycHJldEtleUV2ZW50OihOU0V2ZW50ICopZXYKICAgICByZXR1cm4gcGFyYW1ldGVycy5ldmVu
dEludGVycHJldGF0aW9uSGFkU2lkZUVmZmVjdHM7CiB9CiAKLS0gKE5TUmVjdClfY29udmVydFRv
RGV2aWNlU3BhY2U6KE5TUmVjdClyZWN0CistIChOU1JlY3QpX3drX2NvbnZlcnRUb0RldmljZVNw
YWNlOihOU1JlY3QpcmVjdAogewogICAgIHJldHVybiB0b0RldmljZVNwYWNlKHJlY3QsIFtzZWxm
IHdpbmRvd10pOwogfQogCi0tIChOU1JlY3QpX2NvbnZlcnRUb1VzZXJTcGFjZTooTlNSZWN0KXJl
Y3QKKy0gKE5TUmVjdClfd2tfY29udmVydFRvVXNlclNwYWNlOihOU1JlY3QpcmVjdAogewogICAg
IHJldHVybiB0b1VzZXJTcGFjZShyZWN0LCBbc2VsZiB3aW5kb3ddKTsKIH0KQEAgLTI0MzgsNyAr
MjQyOCw3IEBAIC0gKE5TVHJhY2tpbmdSZWN0VGFnKWFkZFRyYWNraW5nUmVjdDooTlMKICAgICBy
ZXR1cm4gVFJBQ0tJTkdfUkVDVF9UQUc7CiB9CiAKLS0gKE5TVHJhY2tpbmdSZWN0VGFnKV9hZGRU
cmFja2luZ1JlY3Q6KE5TUmVjdClyZWN0IG93bmVyOihpZClvd25lciB1c2VyRGF0YToodm9pZCAq
KWRhdGEgYXNzdW1lSW5zaWRlOihCT09MKWFzc3VtZUluc2lkZSB1c2VUcmFja2luZ051bTooaW50
KXRhZworLSAoTlNUcmFja2luZ1JlY3RUYWcpX3drX2FkZFRyYWNraW5nUmVjdDooTlNSZWN0KXJl
Y3Qgb3duZXI6KGlkKW93bmVyIHVzZXJEYXRhOih2b2lkICopZGF0YSBhc3N1bWVJbnNpZGU6KEJP
T0wpYXNzdW1lSW5zaWRlIHVzZVRyYWNraW5nTnVtOihpbnQpdGFnCiB7CiAgICAgQVNTRVJUKHRh
ZyA9PSAwIHx8IHRhZyA9PSBUUkFDS0lOR19SRUNUX1RBRyk7CiAgICAgQVNTRVJUKF9kYXRhLT5f
dHJhY2tpbmdSZWN0T3duZXIgPT0gbmlsKTsKQEAgLTI0NDcsNyArMjQzNyw3IEBAIC0gKE5TVHJh
Y2tpbmdSZWN0VGFnKV9hZGRUcmFja2luZ1JlY3Q6KE4KICAgICByZXR1cm4gVFJBQ0tJTkdfUkVD
VF9UQUc7CiB9CiAKLS0gKHZvaWQpX2FkZFRyYWNraW5nUmVjdHM6KE5TUmVjdCAqKXJlY3RzIG93
bmVyOihpZClvd25lciB1c2VyRGF0YUxpc3Q6KHZvaWQgKiopdXNlckRhdGFMaXN0IGFzc3VtZUlu
c2lkZUxpc3Q6KEJPT0wgKilhc3N1bWVJbnNpZGVMaXN0IHRyYWNraW5nTnVtczooTlNUcmFja2lu
Z1JlY3RUYWcgKil0cmFja2luZ051bXMgY291bnQ6KGludCljb3VudAorLSAodm9pZClfd2tfYWRk
VHJhY2tpbmdSZWN0czooTlNSZWN0ICopcmVjdHMgb3duZXI6KGlkKW93bmVyIHVzZXJEYXRhTGlz
dDoodm9pZCAqKil1c2VyRGF0YUxpc3QgYXNzdW1lSW5zaWRlTGlzdDooQk9PTCAqKWFzc3VtZUlu
c2lkZUxpc3QgdHJhY2tpbmdOdW1zOihOU1RyYWNraW5nUmVjdFRhZyAqKXRyYWNraW5nTnVtcyBj
b3VudDooaW50KWNvdW50CiB7CiAgICAgQVNTRVJUKGNvdW50ID09IDEpOwogICAgIEFTU0VSVCh0
cmFja2luZ051bXNbMF0gPT0gMCB8fCB0cmFja2luZ051bXNbMF0gPT0gVFJBQ0tJTkdfUkVDVF9U
QUcpOwpAQCAtMjQ4MSw3ICsyNDcxLDcgQEAgLSAodm9pZClyZW1vdmVUcmFja2luZ1JlY3Q6KE5T
VHJhY2tpbmdSZQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi0tICh2b2lkKV9yZW1v
dmVUcmFja2luZ1JlY3RzOihOU1RyYWNraW5nUmVjdFRhZyAqKXRhZ3MgY291bnQ6KGludCljb3Vu
dAorLSAodm9pZClfd2tfcmVtb3ZlVHJhY2tpbmdSZWN0czooTlNUcmFja2luZ1JlY3RUYWcgKil0
YWdzIGNvdW50OihpbnQpY291bnQKIHsKICAgICBpbnQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkgewpAQCAtMjQ5NSw3ICsyNDg1LDcgQEAgLSAodm9pZClfcmVtb3ZlVHJhY2tp
bmdSZWN0czooTlNUcmFja2luZwogICAgIH0KIH0KIAotLSAodm9pZClfc2VuZFRvb2xUaXBNb3Vz
ZUV4aXRlZAorLSAodm9pZClfd2tfc2VuZFRvb2xUaXBNb3VzZUV4aXRlZAogewogICAgIC8vIE5v
dGhpbmcgbWF0dGVycyBleGNlcHQgd2luZG93LCB0cmFja2luZ051bWJlciwgYW5kIHVzZXJEYXRh
LgogICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IGVudGVyRXhpdEV2ZW50V2l0aFR5
cGU6TlNNb3VzZUV4aXRlZApAQCAtMjUxMCw3ICsyNTAwLDcgQEAgLSAodm9pZClfc2VuZFRvb2xU
aXBNb3VzZUV4aXRlZAogICAgIFtfZGF0YS0+X3RyYWNraW5nUmVjdE93bmVyIG1vdXNlRXhpdGVk
OmZha2VFdmVudF07CiB9CiAKLS0gKHZvaWQpX3NlbmRUb29sVGlwTW91c2VFbnRlcmVkCistICh2
b2lkKV93a19zZW5kVG9vbFRpcE1vdXNlRW50ZXJlZAogewogICAgIC8vIE5vdGhpbmcgbWF0dGVy
cyBleGNlcHQgd2luZG93LCB0cmFja2luZ051bWJlciwgYW5kIHVzZXJEYXRhLgogICAgIE5TRXZl
bnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IGVudGVyRXhpdEV2ZW50V2l0aFR5cGU6TlNNb3VzZUVu
dGVyZWQKQEAgLTI1MjUsMjYgKzI1MTUsMjMgQEAgLSAodm9pZClfc2VuZFRvb2xUaXBNb3VzZUVu
dGVyZWQKICAgICBbX2RhdGEtPl90cmFja2luZ1JlY3RPd25lciBtb3VzZUVudGVyZWQ6ZmFrZUV2
ZW50XTsKIH0KIAotLSAoTlNTdHJpbmcgKil2aWV3OihOU1ZpZXcgKil2aWV3IHN0cmluZ0ZvclRv
b2xUaXA6KE5TVG9vbFRpcFRhZyl0YWcgcG9pbnQ6KE5TUG9pbnQpcG9pbnQgdXNlckRhdGE6KHZv
aWQgKilkYXRhCi17Ci0gICAgcmV0dXJuIG5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcoX2RhdGEt
Pl9wYWdlLT50b29sVGlwKCkpOwotfQotCi0tICh2b2lkKV90b29sVGlwQ2hhbmdlZEZyb206KE5T
U3RyaW5nICopb2xkVG9vbFRpcCB0bzooTlNTdHJpbmcgKiluZXdUb29sVGlwCistICh2b2lkKV93
a190b29sVGlwQ2hhbmdlZEZyb206KE5TU3RyaW5nICopb2xkVG9vbFRpcCB0bzooTlNTdHJpbmcg
KiluZXdUb29sVGlwCiB7CiAgICAgaWYgKG9sZFRvb2xUaXApCi0gICAgICAgIFtzZWxmIF9zZW5k
VG9vbFRpcE1vdXNlRXhpdGVkXTsKKyAgICAgICAgW3NlbGYgX3drX3NlbmRUb29sVGlwTW91c2VF
eGl0ZWRdOwogCiAgICAgaWYgKG5ld1Rvb2xUaXAgJiYgW25ld1Rvb2xUaXAgbGVuZ3RoXSA+IDAp
IHsKICAgICAgICAgLy8gU2VlIHJhZGFyIDM1MDAyMTcgZm9yIHdoeSB3ZSByZW1vdmUgYWxsIHRv
b2x0aXBzIHJhdGhlciB0aGFuIGp1c3QgdGhlIHNpbmdsZSBvbmUgd2UgY3JlYXRlZC4KICAgICAg
ICAgW3NlbGYgcmVtb3ZlQWxsVG9vbFRpcHNdOwogICAgICAgICBOU1JlY3Qgd2lkZU9wZW5SZWN0
ID0gTlNNYWtlUmVjdCgtMTAwMDAwLCAtMTAwMDAwLCAyMDAwMDAsIDIwMDAwMCk7Ci0gICAgICAg
IF9kYXRhLT5fbGFzdFRvb2xUaXBUYWcgPSBbc2VsZiBhZGRUb29sVGlwUmVjdDp3aWRlT3BlblJl
Y3Qgb3duZXI6c2VsZiB1c2VyRGF0YTpOVUxMXTsKLSAgICAgICAgW3NlbGYgX3NlbmRUb29sVGlw
TW91c2VFbnRlcmVkXTsKKyAgICAgICAgaWYgKCFfZGF0YS0+X3Rvb2xUaXBEZWxlZ2F0ZSkKKyAg
ICAgICAgICAgIF9kYXRhLT5fdG9vbFRpcERlbGVnYXRlID0gYWRvcHROUyhbW1dLVG9vbFRpcERl
bGVnYXRlIGFsbG9jXSBpbml0V2l0aFBhZ2U6X2RhdGEtPl9wYWdlLmdldCgpXSk7CisgICAgICAg
IF9kYXRhLT5fbGFzdFRvb2xUaXBUYWcgPSBbc2VsZiBhZGRUb29sVGlwUmVjdDp3aWRlT3BlblJl
Y3Qgb3duZXI6X2RhdGEtPl90b29sVGlwRGVsZWdhdGUuZ2V0KCkgdXNlckRhdGE6TlVMTF07Cisg
ICAgICAgIFtzZWxmIF93a19zZW5kVG9vbFRpcE1vdXNlRW50ZXJlZF07CiAgICAgfQogfQogCi0t
ICh2b2lkKV9zZXRGaW5kSW5kaWNhdG9yOihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+KWZpbmRJ
bmRpY2F0b3IgZmFkZU91dDooQk9PTClmYWRlT3V0IGFuaW1hdGU6KEJPT0wpYW5pbWF0ZQorLSAo
dm9pZClfd2tfc2V0RmluZEluZGljYXRvcjooUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPilmaW5k
SW5kaWNhdG9yIGZhZGVPdXQ6KEJPT0wpZmFkZU91dCBhbmltYXRlOihCT09MKWFuaW1hdGUKIHsK
ICAgICBpZiAoIWZpbmRJbmRpY2F0b3IpIHsKICAgICAgICAgX2RhdGEtPl9maW5kSW5kaWNhdG9y
V2luZG93ID0gbnVsbHB0cjsKQEAgLTI1NTcsNyArMjU0NCw3IEBAIC0gKHZvaWQpX3NldEZpbmRJ
bmRpY2F0b3I6KFBhc3NSZWZQdHI8RmkKICAgICBfZGF0YS0+X2ZpbmRJbmRpY2F0b3JXaW5kb3ct
PnNldEZpbmRJbmRpY2F0b3IoZmluZEluZGljYXRvciwgZmFkZU91dCwgYW5pbWF0ZSk7CiB9CiAK
LS0gKHZvaWQpX2VudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGU6KGNvbnN0IExheWVyVHJl
ZUNvbnRleHQmKWxheWVyVHJlZUNvbnRleHQKKy0gKHZvaWQpX3drX2VudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGU6KGNvbnN0IExheWVyVHJlZUNvbnRleHQmKWxheWVyVHJlZUNvbnRleHQK
IHsKICAgICBBU1NFUlQoIV9kYXRhLT5fbGF5ZXJIb3N0aW5nVmlldyk7CiAgICAgQVNTRVJUKCFs
YXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSk7CkBAIC0yNTg2LDcgKzI1NzMsNyBAQCAtICh2b2lk
KV9lbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlCiAgICAgW0NBVHJhbnNhY3Rpb24gY29t
bWl0XTsKIH0KIAotLSAodm9pZClfZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlCistICh2
b2lkKV93a19leGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUKIHsKICAgICBBU1NFUlQoX2Rh
dGEtPl9sYXllckhvc3RpbmdWaWV3KTsKIApAQCAtMjU5Nyw3ICsyNTg0LDcgQEAgLSAodm9pZClf
ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlCiAgICAgX2RhdGEtPl9sYXllckhvc3RpbmdW
aWV3ID0gbnVsbHB0cjsKIH0KIAotLSAodm9pZClfdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGU6KGNvbnN0IFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dCYpbGF5ZXJUcmVlQ29udGV4dAor
LSAodm9pZClfd2tfdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGU6KGNvbnN0IFdlYktp
dDo6TGF5ZXJUcmVlQ29udGV4dCYpbGF5ZXJUcmVlQ29udGV4dAogewogICAgIGlmIChfZGF0YS0+
X2xheWVySG9zdGluZ1ZpZXcpIHsKICAgICAgICAgLy8gV3JhcCB0aGUgY2FsbCB0byBzZXRTdWJs
YXllcnM6IGluIGEgQ0FUcmFuc2FjdGlvbiB3aXRoIGFjdGlvbnMgZGlzYWJsZWQgdG8KQEAgLTI2
MTAsMTggKzI1OTcsMTggQEAgLSAodm9pZClfdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZAogCiAgICAgICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgW3NlbGYgX2V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZV07Ci0gICAgICAgIFtzZWxm
IF9lbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlOmxheWVyVHJlZUNvbnRleHRdOworICAg
ICAgICBbc2VsZiBfd2tfZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlXTsKKyAgICAgICAg
W3NlbGYgX3drX2VudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGU6bGF5ZXJUcmVlQ29udGV4
dF07CiAgICAgfQogfQogCi0tICh2b2lkKV9zZXRBY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2Vu
OihOU0RhdGEgKilkYXRhCistICh2b2lkKV93a19zZXRBY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rv
a2VuOihOU0RhdGEgKilkYXRhCiB7CiAgICAgX2RhdGEtPl9yZW1vdGVBY2Nlc3NpYmlsaXR5Q2hp
bGQgPSBXS0FYUmVtb3RlRWxlbWVudEZvclRva2VuKGRhdGEpOwotICAgIFtzZWxmIF91cGRhdGVS
ZW1vdGVBY2Nlc3NpYmlsaXR5UmVnaXN0cmF0aW9uOllFU107CisgICAgW3NlbGYgX3drX3VwZGF0
ZVJlbW90ZUFjY2Vzc2liaWxpdHlSZWdpc3RyYXRpb246WUVTXTsKIH0KIAotLSAodm9pZClfcGx1
Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZDooQk9PTClwbHVnaW5IYXNGb2N1c0FuZFdpbmRv
d0hhc0ZvY3VzIHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyOih1aW50NjRfdClwbHVn
aW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcgorLSAodm9pZClfd2tfcGx1Z2luRm9jdXNPcldp
bmRvd0ZvY3VzQ2hhbmdlZDooQk9PTClwbHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3VzIHBs
dWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyOih1aW50NjRfdClwbHVnaW5Db21wbGV4VGV4
dElucHV0SWRlbnRpZmllcgogewogICAgIEJPT0wgaW5wdXRTb3VyY2VDaGFuZ2VkID0gX2RhdGEt
Pl9wbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcjsKIApAQCAtMjY0OSwxNyArMjYzNiwx
NyBAQCAtICh2b2lkKV9wbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkCiAgICAgW05TQXBw
IHVwZGF0ZVdpbmRvd3NdOwogfQogCi0tICh2b2lkKV9zZXRQbHVnaW5Db21wbGV4VGV4dElucHV0
U3RhdGU6KFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSlwbHVnaW5Db21wbGV4VGV4dElucHV0
U3RhdGUgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXI6KHVpbnQ2NF90KXBsdWdpbkNv
bXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyCistICh2b2lkKV93a19zZXRQbHVnaW5Db21wbGV4VGV4
dElucHV0U3RhdGU6KFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSlwbHVnaW5Db21wbGV4VGV4
dElucHV0U3RhdGUgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXI6KHVpbnQ2NF90KXBs
dWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyCiB7CiAgICAgaWYgKHBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRJZGVudGlmaWVyICE9IF9kYXRhLT5fcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50
aWZpZXIpIHsKICAgICAgICAgLy8gV2UncmUgYXNrZWQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBmb3Ig
YSBwbHVnLWluIHRoYXQgZG9lc24ndCBoYXZlIGZvY3VzLgogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgW3NlbGYgX3NldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZTpwbHVnaW5Db21w
bGV4VGV4dElucHV0U3RhdGVdOworICAgIFtzZWxmIF93a19zZXRQbHVnaW5Db21wbGV4VGV4dElu
cHV0U3RhdGU6cGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlXTsKIH0KIAotLSAodm9pZClfc2V0
UGFnZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uOihCT09MKXBhZ2VIYXNDdXN0b21SZXByZXNlbnRh
dGlvbgorLSAodm9pZClfd2tfc2V0UGFnZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uOihCT09MKXBh
Z2VIYXNDdXN0b21SZXByZXNlbnRhdGlvbgogewogICAgIGJvb2wgaGFkUERGVmlldyA9IF9kYXRh
LT5fcGRmVmlld0NvbnRyb2xsZXI7CiAgICAgX2RhdGEtPl9wZGZWaWV3Q29udHJvbGxlciA9IG51
bGxwdHI7CkBAIC0yNjcxLDE0ICsyNjU4LDE0IEBAIC0gKHZvaWQpX3NldFBhZ2VIYXNDdXN0b21S
ZXByZXNlbnRhdGlvbjoKICAgICAgICAgX2RhdGEtPl9wYWdlLT5kcmF3aW5nQXJlYSgpLT5wYWdl
Q3VzdG9tUmVwcmVzZW50YXRpb25DaGFuZ2VkKCk7CiB9CiAKLS0gKHZvaWQpX2RpZEZpbmlzaExv
YWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU6KGNv
bnN0IFN0cmluZyYpc3VnZ2VzdGVkRmlsZW5hbWUgZGF0YVJlZmVyZW5jZTooY29uc3QgQ29yZUlQ
Qzo6RGF0YVJlZmVyZW5jZSYpZGF0YVJlZmVyZW5jZQorLSAodm9pZClfd2tfZGlkRmluaXNoTG9h
ZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZTooY29u
c3QgU3RyaW5nJilzdWdnZXN0ZWRGaWxlbmFtZSBkYXRhUmVmZXJlbmNlOihjb25zdCBDb3JlSVBD
OjpEYXRhUmVmZXJlbmNlJilkYXRhUmVmZXJlbmNlCiB7CiAgICAgQVNTRVJUKF9kYXRhLT5fcGRm
Vmlld0NvbnRyb2xsZXIpOwogCiAgICAgX2RhdGEtPl9wZGZWaWV3Q29udHJvbGxlci0+c2V0UERG
RG9jdW1lbnREYXRhKF9kYXRhLT5fcGFnZS0+bWFpbkZyYW1lKCktPm1pbWVUeXBlKCksIHN1Z2dl
c3RlZEZpbGVuYW1lLCBkYXRhUmVmZXJlbmNlKTsKIH0KIAotLSAoZG91YmxlKV9jdXN0b21SZXBy
ZXNlbnRhdGlvblpvb21GYWN0b3IKKy0gKGRvdWJsZSlfd2tfY3VzdG9tUmVwcmVzZW50YXRpb25a
b29tRmFjdG9yCiB7CiAgICAgaWYgKCFfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyKQogICAgICAg
ICByZXR1cm4gMTsKQEAgLTI2ODYsNyArMjY3Myw3IEBAIC0gKGRvdWJsZSlfY3VzdG9tUmVwcmVz
ZW50YXRpb25ab29tRmFjdG8KICAgICByZXR1cm4gX2RhdGEtPl9wZGZWaWV3Q29udHJvbGxlci0+
em9vbUZhY3RvcigpOwogfQogCi0tICh2b2lkKV9zZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21G
YWN0b3I6KGRvdWJsZSl6b29tRmFjdG9yCistICh2b2lkKV93a19zZXRDdXN0b21SZXByZXNlbnRh
dGlvblpvb21GYWN0b3I6KGRvdWJsZSl6b29tRmFjdG9yCiB7CiAgICAgaWYgKCFfZGF0YS0+X3Bk
ZlZpZXdDb250cm9sbGVyKQogICAgICAgICByZXR1cm47CkBAIC0yNjk0LDcgKzI2ODEsNyBAQCAt
ICh2b2lkKV9zZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0CiAgICAgX2RhdGEtPl9wZGZW
aWV3Q29udHJvbGxlci0+c2V0Wm9vbUZhY3Rvcih6b29tRmFjdG9yKTsKIH0KIAotLSAodm9pZClf
ZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb246KE5TU3RyaW5nICopc3RyaW5nIHdpdGhG
aW5kT3B0aW9uczooV2ViS2l0OjpGaW5kT3B0aW9ucylvcHRpb25zIG1heE1hdGNoQ291bnQ6KE5T
VUludGVnZXIpY291bnQKKy0gKHZvaWQpX3drX2ZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0
aW9uOihOU1N0cmluZyAqKXN0cmluZyB3aXRoRmluZE9wdGlvbnM6KFdlYktpdDo6RmluZE9wdGlv
bnMpb3B0aW9ucyBtYXhNYXRjaENvdW50OihOU1VJbnRlZ2VyKWNvdW50CiB7CiAgICAgaWYgKCFf
ZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyKQogICAgICAgICByZXR1cm47CkBAIC0yNzAyLDcgKzI2
ODksNyBAQCAtICh2b2lkKV9maW5kU3RyaW5nSW5DdXN0b21SZXByZXNlbnRhdGlvCiAgICAgX2Rh
dGEtPl9wZGZWaWV3Q29udHJvbGxlci0+ZmluZFN0cmluZyhzdHJpbmcsIG9wdGlvbnMsIGNvdW50
KTsKIH0KIAotLSAodm9pZClfY291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlv
bjooTlNTdHJpbmcgKilzdHJpbmcgd2l0aEZpbmRPcHRpb25zOihXZWJLaXQ6OkZpbmRPcHRpb25z
KW9wdGlvbnMgbWF4TWF0Y2hDb3VudDooTlNVSW50ZWdlciljb3VudAorLSAodm9pZClfd2tfY291
bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbjooTlNTdHJpbmcgKilzdHJpbmcg
d2l0aEZpbmRPcHRpb25zOihXZWJLaXQ6OkZpbmRPcHRpb25zKW9wdGlvbnMgbWF4TWF0Y2hDb3Vu
dDooTlNVSW50ZWdlciljb3VudAogewogICAgIGlmICghX2RhdGEtPl9wZGZWaWV3Q29udHJvbGxl
cikKICAgICAgICAgcmV0dXJuOwpAQCAtMjcxMCw3ICsyNjk3LDcgQEAgLSAodm9pZClfY291bnRT
dHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZQogICAgIF9kYXRhLT5fcGRmVmlld0NvbnRyb2xsZXIt
PmNvdW50U3RyaW5nTWF0Y2hlcyhzdHJpbmcsIG9wdGlvbnMsIGNvdW50KTsKIH0KIAotLSAodm9p
ZClfc2V0RHJhZ0ltYWdlOihOU0ltYWdlICopaW1hZ2UgYXQ6KE5TUG9pbnQpY2xpZW50UG9pbnQg
bGlua0RyYWc6KEJPT0wpbGlua0RyYWcKKy0gKHZvaWQpX3drX3NldERyYWdJbWFnZTooTlNJbWFn
ZSAqKWltYWdlIGF0OihOU1BvaW50KWNsaWVudFBvaW50IGxpbmtEcmFnOihCT09MKWxpbmtEcmFn
CiB7CiAgICAgSW50U2l6ZSBzaXplKFtpbWFnZSBzaXplXSk7CiAgICAgc2l6ZS5zY2FsZSgxLjAg
LyBfZGF0YS0+X3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOwpAQCAtMjczNSw3ICsyNzIyLDcg
QEAgc3RhdGljIGJvb2wgbWF0Y2hlc0V4dGVuc2lvbk9yRXF1aXZhbGVudAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgaGFzQ2FzZUluc2Vuc2l0aXZlU3VmZml4KGZpbGVuYW1lLCBAIi5qcGciKSk7CiB9CiAKLS0g
KHZvaWQpX3NldFByb21pc2VkRGF0YTooV2ViQ29yZTo6SW1hZ2UgKilpbWFnZSB3aXRoRmlsZU5h
bWU6KE5TU3RyaW5nICopZmlsZW5hbWUgd2l0aEV4dGVuc2lvbjooTlNTdHJpbmcgKilleHRlbnNp
b24gd2l0aFRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdpdGhVUkw6KE5TU3RyaW5nICopdXJsIHdp
dGhWaXNpYmxlVVJMOihOU1N0cmluZyAqKXZpc2libGVVcmwgd2l0aEFyY2hpdmU6KFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlciopIGFyY2hpdmVCdWZmZXIgZm9yUGFzdGVib2FyZDooTlNTdHJpbmcgKilw
YXN0ZWJvYXJkTmFtZQorLSAodm9pZClfd2tfc2V0UHJvbWlzZWREYXRhOihXZWJDb3JlOjpJbWFn
ZSAqKWltYWdlIHdpdGhGaWxlTmFtZTooTlNTdHJpbmcgKilmaWxlbmFtZSB3aXRoRXh0ZW5zaW9u
OihOU1N0cmluZyAqKWV4dGVuc2lvbiB3aXRoVGl0bGU6KE5TU3RyaW5nICopdGl0bGUgd2l0aFVS
TDooTlNTdHJpbmcgKil1cmwgd2l0aFZpc2libGVVUkw6KE5TU3RyaW5nICopdmlzaWJsZVVybCB3
aXRoQXJjaGl2ZTooV2ViQ29yZTo6U2hhcmVkQnVmZmVyKikgYXJjaGl2ZUJ1ZmZlciBmb3JQYXN0
ZWJvYXJkOihOU1N0cmluZyAqKXBhc3RlYm9hcmROYW1lCiAKIHsKICAgICBOU1Bhc3RlYm9hcmQg
KnBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpwYXN0ZWJvYXJk
TmFtZV07CkBAIC0yODQzLDkgKzI4MzAsOSBAQCAtIChOU0FycmF5ICopbmFtZXNPZlByb21pc2Vk
RmlsZXNEcm9wcGVkCiAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpbcGF0aCBs
YXN0UGF0aENvbXBvbmVudF1dOwogfQogCi0tICh2b2lkKV91cGRhdGVTZWN1cmVJbnB1dFN0YXRl
CistICh2b2lkKV93a191cGRhdGVTZWN1cmVJbnB1dFN0YXRlCiB7Ci0gICAgaWYgKCFbW3NlbGYg
d2luZG93XSBpc0tleVdpbmRvd10gfHwgIVtzZWxmIF9pc0ZvY3VzZWRdKSB7CisgICAgaWYgKCFb
W3NlbGYgd2luZG93XSBpc0tleVdpbmRvd10gfHwgIVtzZWxmIF93a19pc0ZvY3VzZWRdKSB7CiAg
ICAgICAgIGlmIChfZGF0YS0+X2luU2VjdXJlSW5wdXRTdGF0ZSkgewogICAgICAgICAgICAgRGlz
YWJsZVNlY3VyZUV2ZW50SW5wdXQoKTsKICAgICAgICAgICAgIF9kYXRhLT5faW5TZWN1cmVJbnB1
dFN0YXRlID0gTk87CkBAIC0yODcxLDEzICsyODU4LDEzIEBAIC0gKHZvaWQpX3VwZGF0ZVNlY3Vy
ZUlucHV0U3RhdGUKICAgICBfZGF0YS0+X2luU2VjdXJlSW5wdXRTdGF0ZSA9IGlzSW5QYXNzd29y
ZEZpZWxkOwogfQogCi0tICh2b2lkKV91cGRhdGVUZXh0SW5wdXRTdGF0ZUluY2x1ZGluZ1NlY3Vy
ZUlucHV0U3RhdGU6KEJPT0wpdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZQorLSAodm9pZClfd2tfdXBk
YXRlVGV4dElucHV0U3RhdGVJbmNsdWRpbmdTZWN1cmVJbnB1dFN0YXRlOihCT09MKXVwZGF0ZVNl
Y3VyZUlucHV0U3RhdGUKIHsKICAgICBjb25zdCBFZGl0b3JTdGF0ZSYgZWRpdG9yU3RhdGUgPSBf
ZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCk7CiAgICAgaWYgKHVwZGF0ZVNlY3VyZUlucHV0U3Rh
dGUpIHsKICAgICAgICAgLy8gVGhpcyBpcyBhIHRlbXBvcmFyeSBzdGF0ZSB3aGVuIGVkaXRpbmcu
IEZsaXBwaW5nIHNlY3VyZSBpbnB1dCBzdGF0ZSB0b28gcXVpY2tseSBjYW4gZXhwb3NlIHJhY2Ug
Y29uZGl0aW9ucy4KICAgICAgICAgaWYgKCFlZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc05vbmUpCi0g
ICAgICAgICAgICBbc2VsZiBfdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZV07CisgICAgICAgICAgICBb
c2VsZiBfd2tfdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZV07CiAgICAgfQogCiAgICAgaWYgKCFlZGl0
b3JTdGF0ZS5oYXNDb21wb3NpdGlvbiB8fCBlZGl0b3JTdGF0ZS5zaG91bGRJZ25vcmVDb21wb3Np
dGlvblNlbGVjdGlvbkNoYW5nZSkKQEAgLTI4ODUsMTIgKzI4NzIsMTIgQEAgLSAodm9pZClfdXBk
YXRlVGV4dElucHV0U3RhdGVJbmNsdWRpbmdTZQogCiAgICAgX2RhdGEtPl9wYWdlLT5jYW5jZWxD
b21wb3NpdGlvbigpOwogCi0gICAgW3NlbGYgX25vdGlmeUlucHV0Q29udGV4dEFib3V0RGlzY2Fy
ZGVkQ29tcG9zaXRpb25dOworICAgIFtzZWxmIF93a19ub3RpZnlJbnB1dENvbnRleHRBYm91dERp
c2NhcmRlZENvbXBvc2l0aW9uXTsKIH0KIAotLSAodm9pZClfcmVzZXRUZXh0SW5wdXRTdGF0ZQor
LSAodm9pZClfd2tfcmVzZXRUZXh0SW5wdXRTdGF0ZQogewotICAgIFtzZWxmIF9ub3RpZnlJbnB1
dENvbnRleHRBYm91dERpc2NhcmRlZENvbXBvc2l0aW9uXTsKKyAgICBbc2VsZiBfd2tfbm90aWZ5
SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbl07CiAKICAgICBpZiAoX2RhdGEt
Pl9pblNlY3VyZUlucHV0U3RhdGUpIHsKICAgICAgICAgRGlzYWJsZVNlY3VyZUV2ZW50SW5wdXQo
KTsKQEAgLTI4OTgsNyArMjg4NSw3IEBAIC0gKHZvaWQpX3Jlc2V0VGV4dElucHV0U3RhdGUKICAg
ICB9CiB9CiAKLS0gKHZvaWQpX2RpZENoYW5nZVNjcm9sbGJhcnNGb3JNYWluRnJhbWUKKy0gKHZv
aWQpX3drX2RpZENoYW5nZVNjcm9sbGJhcnNGb3JNYWluRnJhbWUKIHsKICNpZiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID09IDEwNjAKICAgICBbc2VsZiBfdXBkYXRlR3Jvd0JveEZv
cldpbmRvd0ZyYW1lQ2hhbmdlXTsKQEAgLTI5MDYsMTIgKzI4OTMsMTMgQEAgLSAodm9pZClfZGlk
Q2hhbmdlU2Nyb2xsYmFyc0Zvck1haW5GcmFtZQogfQogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQotLSAoQk9PTCloYXNGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcgorCistIChCT09MKV93
a19oYXNGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcgogewogICAgIHJldHVybiAoYm9vbClfZGF0
YS0+X2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOwogfQogCi0tIChXS0Z1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVyKilmdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcgorLSAoV0tGdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlciopX3drX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyCiB7CiAgICAg
aWYgKCFfZGF0YS0+X2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKSB7CiAgICAgICAgIF9kYXRh
LT5fZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuYWRvcHROUyhbW1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKQEAgLTI5MjAsMTYgKzI5MDgsMTcgQEAgLSAoV0tG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlciopZnVsbFNjcgogICAgIHJldHVybiBfZGF0YS0+X2Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmdldCgpOwogfQogCi0tICh2b2lkKWNsb3NlRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIKKy0gKHZvaWQpX3drX2Nsb3NlRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIKIHsKICAgICBpZiAoIV9kYXRhLT5fZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIp
CiAgICAgICAgIHJldHVybjsKICAgICBbX2RhdGEtPl9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
ci5nZXQoKSBjbG9zZV07CiAgICAgX2RhdGEtPl9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciA9
IG51bGxwdHI7CiB9CisKICNlbmRpZgogCi0tIChib29sKV9leGVjdXRlU2F2ZWRDb21tYW5kQnlT
ZWxlY3RvcjooU0VMKXNlbGVjdG9yCistIChib29sKV93a19leGVjdXRlU2F2ZWRDb21tYW5kQnlT
ZWxlY3RvcjooU0VMKXNlbGVjdG9yCiB7CiAgICAgLy8gVGhlIHNpbmsgZG9lcyB0d28gdGhpbmdz
OiAxKSBUZWxscyB1cyBpZiB0aGUgcmVzcG9uZGVyIHdlbnQgdW5oYW5kbGVkLCBhbmQKICAgICAv
LyAyKSBwcmV2ZW50cyBhbnkgTlNCZWVwOyB3ZSBkb24ndCBldmVyIHdhbnQgdG8gYmVlcCBoZXJl
LgpAQCAtMjkzOSw3ICsyOTI4LDcgQEAgLSAoYm9vbClfZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2Vs
ZWN0b3I6KAogICAgIHJldHVybiAhW3NpbmsuZ2V0KCkgZGlkUmVjZWl2ZVVuaGFuZGxlZENvbW1h
bmRdOwogfQogCi0tICh2b2lkKV9jYWNoZVdpbmRvd0JvdHRvbUNvcm5lclJlY3QKKy0gKHZvaWQp
X3drX2NhY2hlV2luZG93Qm90dG9tQ29ybmVyUmVjdAogewogI2lmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTA3MAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVtb3ZlIHRo
aXMgY29kZSB3aGVuIDxyZGFyOi8vcHJvYmxlbS85MzYyMDg1PiBpcyByZXNvbHZlZC4gCkBAIC0y
OTUzLDcgKzI5NDIsNyBAQCAtICh2b2lkKV9jYWNoZVdpbmRvd0JvdHRvbUNvcm5lclJlY3QKICNl
bmRpZgogfQogCi0tIChOU0ludGVnZXIpc3BlbGxDaGVja2VyRG9jdW1lbnRUYWcKKy0gKE5TSW50
ZWdlcilfd2tfc3BlbGxDaGVja2VyRG9jdW1lbnRUYWcKIHsKICAgICBpZiAoIV9kYXRhLT5faGFz
U3BlbGxDaGVja2VyRG9jdW1lbnRUYWcpIHsKICAgICAgICAgX2RhdGEtPl9zcGVsbENoZWNrZXJE
b2N1bWVudFRhZyA9IFtOU1NwZWxsQ2hlY2tlciB1bmlxdWVTcGVsbERvY3VtZW50VGFnXTsKQEAg
LTI5NjIsMTcgKzI5NTEsMTcgQEAgLSAoTlNJbnRlZ2VyKXNwZWxsQ2hlY2tlckRvY3VtZW50VGFn
CiAgICAgcmV0dXJuIF9kYXRhLT5fc3BlbGxDaGVja2VyRG9jdW1lbnRUYWc7CiB9CiAKLS0gKHZv
aWQpaGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZVRleHQ6KE5TU3RyaW5nKil0ZXh0CistICh2b2lk
KV93a19oYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dDooTlNTdHJpbmcqKXRleHQKIHsKICAg
ICBfZGF0YS0+X3BhZ2UtPmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KHRleHQpOwogfQog
Ci0tICh2b2lkKV9zZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzOihCT09MKXN1cHByZXNzVmlz
aWJpbGl0eVVwZGF0ZXMKKy0gKHZvaWQpX3drX3NldFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXM6
KEJPT0wpc3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcwogewogICAgIF9kYXRhLT5fcGFnZS0+c2V0
U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyhzdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzKTsKIH0K
IAotLSAoQk9PTClfc3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcworLSAoQk9PTClfd2tfc3VwcHJl
c3NWaXNpYmlsaXR5VXBkYXRlcwogewogICAgIHJldHVybiBfZGF0YS0+X3BhZ2UtPnN1cHByZXNz
VmlzaWJpbGl0eVVwZGF0ZXMoKTsKIH0KQEAgLTI5ODEsNyArMjk3MCw3IEBAIC0gKEJPT0wpX3N1
cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMKIAogQGltcGxlbWVudGF0aW9uIFdLVmlldyAoUHJpdmF0
ZSkKIAotLSAodm9pZClfcmVnaXN0ZXJEcmFnZ2VkVHlwZXMKKy0gKHZvaWQpX3drX3JlZ2lzdGVy
RHJhZ2dlZFR5cGVzCiB7CiAgICAgTlNNdXRhYmxlU2V0ICp0eXBlcyA9IFtbTlNNdXRhYmxlU2V0
IGFsbG9jXSBpbml0V2l0aEFycmF5OlBhc3RlYm9hcmRUeXBlczo6Zm9yRWRpdGluZygpXTsKICAg
ICBbdHlwZXMgYWRkT2JqZWN0c0Zyb21BcnJheTpQYXN0ZWJvYXJkVHlwZXM6OmZvclVSTCgpXTsK
QEAgLTMwMjcsNyArMzAxNiw3IEBAIC0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBj
b250ZXgKIAogICAgIF9kYXRhLT5fcGFnZUNsaWVudCA9IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGUo
c2VsZik7CiAgICAgX2RhdGEtPl9wYWdlID0gdG9JbXBsKGNvbnRleHRSZWYpLT5jcmVhdGVXZWJQ
YWdlKF9kYXRhLT5fcGFnZUNsaWVudC5nZXQoKSwgdG9JbXBsKHBhZ2VHcm91cFJlZiksIHRvSW1w
bChyZWxhdGVkUGFnZSkpOwotICAgIF9kYXRhLT5fcGFnZS0+c2V0SW50cmluc2ljRGV2aWNlU2Nh
bGVGYWN0b3IoW3NlbGYgX2ludHJpbnNpY0RldmljZVNjYWxlRmFjdG9yXSk7CisgICAgX2RhdGEt
Pl9wYWdlLT5zZXRJbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3Rvcihbc2VsZiBfd2tfaW50cmluc2lj
RGV2aWNlU2NhbGVGYWN0b3JdKTsKICAgICBfZGF0YS0+X3BhZ2UtPmluaXRpYWxpemVXZWJQYWdl
KCk7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIF9kYXRhLT5fcGFnZS0+ZnVsbFNj
cmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhzZWxmKTsKQEAgLTMwMzUsNyArMzAyNCw3IEBAIC0g
KGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBjb250ZXgKICAgICBfZGF0YS0+X21vdXNl
RG93bkV2ZW50ID0gbmlsOwogICAgIF9kYXRhLT5faWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHMg
PSBOTzsKIAotICAgIFtzZWxmIF9yZWdpc3RlckRyYWdnZWRUeXBlc107CisgICAgW3NlbGYgX3dr
X3JlZ2lzdGVyRHJhZ2dlZFR5cGVzXTsKIAogICAgIGlmIChbc2VsZiBfc2hvdWxkVXNlVGlsZWRE
cmF3aW5nQXJlYV0pIHsKICAgICAgICAgc2VsZi53YW50c0xheWVyID0gWUVTOwpAQCAtMzA1MCw2
ICszMDM5LDcgQEAgLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIGNvbnRleAogfQog
CiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCisKIC0gKEJPT0wp
d2FudHNVcGRhdGVMYXllcgogewogICAgIHJldHVybiBbc2VsZiBfc2hvdWxkVXNlVGlsZWREcmF3
aW5nQXJlYV07CkBAIC0zMDYyLDYgKzMwNTIsNyBAQCAtICh2b2lkKXVwZGF0ZUxheWVyCiAgICAg
aWYgKERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gX2RhdGEtPl9wYWdlLT5kcmF3aW5n
QXJlYSgpKQogICAgICAgICBkcmF3aW5nQXJlYS0+d2FpdEZvclBvc3NpYmxlR2VvbWV0cnlVcGRh
dGUoKTsKIH0KKwogI2VuZGlmCiAKIC0gKFdLUGFnZVJlZilwYWdlUmVmCkBAIC0zMTE2LDcgKzMx
MDcsNyBAQCAtICh2b2lkKWVuYWJsZUZyYW1lU2l6ZVVwZGF0ZXMKICAgICAgICAgcmV0dXJuOwog
ICAgIAogICAgIGlmICghKC0tX2RhdGEtPl9mcmFtZVNpemVVcGRhdGVzRGlzYWJsZWRDb3VudCkp
Ci0gICAgICAgIFtzZWxmIF9zZXREcmF3aW5nQXJlYVNpemU6W3NlbGYgZnJhbWVdLnNpemVdOwor
ICAgICAgICBbc2VsZiBfd2tfc2V0RHJhd2luZ0FyZWFTaXplOltzZWxmIGZyYW1lXS5zaXplXTsK
IH0KIAogLSAoQk9PTClmcmFtZVNpemVVcGRhdGVzRGlzYWJsZWQKQEAgLTMxNDAsNiArMzEzMSwx
MSBAQCArICh2b2lkKWhpZGVXb3JkRGVmaW5pdGlvbldpbmRvdwogI2VuZGlmCiB9CiAKKy0gKEJP
T0wpX3Nob3VsZFVzZVRpbGVkRHJhd2luZ0FyZWEKK3sKKyAgICByZXR1cm4gTk87Cit9CisKIEBl
bmQKIAogQGltcGxlbWVudGF0aW9uIFdLUmVzcG9uZGVyQ2hhaW5TaW5rCkBAIC0zMTk3LDMgKzMx
OTMsMjEgQEAgLSAoQk9PTCl0cnlUb1BlcmZvcm06KFNFTClhY3Rpb24gd2l0aDooaQogfQogCiBA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1Rvb2xUaXBEZWxlZ2F0ZQorCistIChpZClpbml0V2l0
aFBhZ2U6KFdlYlBhZ2VQcm94eSAqKXBhZ2UKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOwor
ICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfcGFnZSA9IHBhZ2U7Cisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKE5TU3RyaW5nICopdmlldzooTlNWaWV3ICopdmlldyBz
dHJpbmdGb3JUb29sVGlwOihOU1Rvb2xUaXBUYWcpdGFnIHBvaW50OihOU1BvaW50KXBvaW50IHVz
ZXJEYXRhOih2b2lkICopZGF0YQoreworICAgIHJldHVybiBuc1N0cmluZ0Zyb21XZWJDb3JlU3Ry
aW5nKF9wYWdlLT50b29sVGlwKCkpOworfQorCitAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDEzMTQw
MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwg
MjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDU4ICs1MCw1OSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IEBjbGFzcyBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOwogCiBAaW50ZXJmYWNlIFdLVmll
dyAoSW50ZXJuYWwpCi0tIChQYXNzT3duUHRyPFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eT4pX2Ny
ZWF0ZURyYXdpbmdBcmVhUHJveHk7Ci0tIChCT09MKV9pc0ZvY3VzZWQ7Ci0tICh2b2lkKV9wcm9j
ZXNzRGlkQ3Jhc2g7Ci0tICh2b2lkKV9wYWdlQ2xvc2VkOwotLSAodm9pZClfZGlkUmVsYXVuY2hQ
cm9jZXNzOwotLSAodm9pZClfdG9vbFRpcENoYW5nZWRGcm9tOihOU1N0cmluZyAqKW9sZFRvb2xU
aXAgdG86KE5TU3RyaW5nICopbmV3VG9vbFRpcDsKLS0gKHZvaWQpX3NldEN1cnNvcjooTlNDdXJz
b3IgKiljdXJzb3I7Ci0tICh2b2lkKV9zZXRVc2VySW50ZXJmYWNlSXRlbVN0YXRlOihOU1N0cmlu
ZyAqKWNvbW1hbmROYW1lIGVuYWJsZWQ6KEJPT0wpaXNFbmFibGVkIHN0YXRlOihpbnQpbmV3U3Rh
dGU7Ci0tIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooTlNFdmVudCAqKXRoZUV2ZW50IHNhdmlu
Z0NvbW1hbmRzVG86KFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jiljb21tYW5kczsK
LS0gKHZvaWQpX2RvbmVXaXRoS2V5RXZlbnQ6KE5TRXZlbnQgKilldmVudCBldmVudFdhc0hhbmRs
ZWQ6KEJPT0wpZXZlbnRXYXNIYW5kbGVkOwotLSAoYm9vbClfZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5
U2VsZWN0b3I6KFNFTClzZWxlY3RvcjsKLS0gKE5TUmVjdClfY29udmVydFRvRGV2aWNlU3BhY2U6
KE5TUmVjdClyZWN0OwotLSAoTlNSZWN0KV9jb252ZXJ0VG9Vc2VyU3BhY2U6KE5TUmVjdClyZWN0
OwotLSAodm9pZClfc2V0RmluZEluZGljYXRvcjooUGFzc1JlZlB0cjxXZWJLaXQ6OkZpbmRJbmRp
Y2F0b3I+KWZpbmRJbmRpY2F0b3IgZmFkZU91dDooQk9PTClmYWRlT3V0IGFuaW1hdGU6KEJPT0wp
YW5pbWF0ZTsKLQotLSAodm9pZClfZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZTooY29u
c3QgV2ViS2l0OjpMYXllclRyZWVDb250ZXh0JilsYXllclRyZWVDb250ZXh0OwotLSAodm9pZClf
ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlOwotLSAodm9pZClfdXBkYXRlQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGU6KGNvbnN0IFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dCYpbGF5ZXJU
cmVlQ29udGV4dDsKLQotLSAodm9pZClfc2V0QWNjZXNzaWJpbGl0eVdlYlByb2Nlc3NUb2tlbjoo
TlNEYXRhICopZGF0YTsKLQotLSAodm9pZClfcGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdl
ZDooQk9PTClwbHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3VzIHBsdWdpbkNvbXBsZXhUZXh0
SW5wdXRJZGVudGlmaWVyOih1aW50NjRfdClwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmll
cjsKLS0gKHZvaWQpX3NldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZTooV2ViS2l0OjpQbHVn
aW5Db21wbGV4VGV4dElucHV0U3RhdGUpcGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlIHBsdWdp
bkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyOih1aW50NjRfdClwbHVnaW5Db21wbGV4VGV4dElu
cHV0SWRlbnRpZmllcjsKLQotLSAodm9pZClfc2V0UGFnZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9u
OihCT09MKXBhZ2VIYXNDdXN0b21SZXByZXNlbnRhdGlvbjsKLS0gKHZvaWQpX2RpZEZpbmlzaExv
YWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU6KGNv
bnN0IFN0cmluZyYpc3VnZ2VzdGVkRmlsZW5hbWUgZGF0YVJlZmVyZW5jZTooY29uc3QgQ29yZUlQ
Qzo6RGF0YVJlZmVyZW5jZSYpZGF0YVJlZmVyZW5jZTsKLS0gKGRvdWJsZSlfY3VzdG9tUmVwcmVz
ZW50YXRpb25ab29tRmFjdG9yOwotLSAodm9pZClfc2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29t
RmFjdG9yOihkb3VibGUpem9vbUZhY3RvcjsKLS0gKHZvaWQpX2ZpbmRTdHJpbmdJbkN1c3RvbVJl
cHJlc2VudGF0aW9uOihOU1N0cmluZyAqKXN0cmluZyB3aXRoRmluZE9wdGlvbnM6KFdlYktpdDo6
RmluZE9wdGlvbnMpb3B0aW9ucyBtYXhNYXRjaENvdW50OihOU1VJbnRlZ2VyKWNvdW50OwotLSAo
dm9pZClfY291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbjooTlNTdHJpbmcg
KilzdHJpbmcgd2l0aEZpbmRPcHRpb25zOihXZWJLaXQ6OkZpbmRPcHRpb25zKW9wdGlvbnMgbWF4
TWF0Y2hDb3VudDooTlNVSW50ZWdlciljb3VudDsKLS0gKHZvaWQpX3NldERyYWdJbWFnZTooTlNJ
bWFnZSAqKWltYWdlIGF0OihOU1BvaW50KWNsaWVudFBvaW50IGxpbmtEcmFnOihCT09MKWxpbmtE
cmFnOwotLSAodm9pZClfc2V0UHJvbWlzZWREYXRhOihXZWJDb3JlOjpJbWFnZSAqKWltYWdlIHdp
dGhGaWxlTmFtZTooTlNTdHJpbmcgKilmaWxlbmFtZSB3aXRoRXh0ZW5zaW9uOihOU1N0cmluZyAq
KWV4dGVuc2lvbiB3aXRoVGl0bGU6KE5TU3RyaW5nICopdGl0bGUgd2l0aFVSTDooTlNTdHJpbmcg
Kil1cmwgd2l0aFZpc2libGVVUkw6KE5TU3RyaW5nICopdmlzaWJsZVVybCB3aXRoQXJjaGl2ZToo
V2ViQ29yZTo6U2hhcmVkQnVmZmVyKikgYXJjaGl2ZUJ1ZmZlciBmb3JQYXN0ZWJvYXJkOihOU1N0
cmluZyAqKXBhc3RlYm9hcmROYW1lOwotLSAodm9pZClfdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZTsK
LS0gKHZvaWQpX3VwZGF0ZVRleHRJbnB1dFN0YXRlSW5jbHVkaW5nU2VjdXJlSW5wdXRTdGF0ZToo
Qk9PTCl1cGRhdGVTZWN1cmVJbnB1dFN0YXRlOwotLSAodm9pZClfcmVzZXRUZXh0SW5wdXRTdGF0
ZTsKIAotLSAodm9pZClfZGlkQ2hhbmdlU2Nyb2xsYmFyc0Zvck1haW5GcmFtZTsKKy0gKFBhc3NP
d25QdHI8V2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Pilfd2tfY3JlYXRlRHJhd2luZ0FyZWFQcm94
eTsKKy0gKEJPT0wpX3drX2lzRm9jdXNlZDsKKy0gKHZvaWQpX3drX3Byb2Nlc3NEaWRDcmFzaDsK
Ky0gKHZvaWQpX3drX3BhZ2VDbG9zZWQ7CistICh2b2lkKV93a19kaWRSZWxhdW5jaFByb2Nlc3M7
CistICh2b2lkKV93a190b29sVGlwQ2hhbmdlZEZyb206KE5TU3RyaW5nICopb2xkVG9vbFRpcCB0
bzooTlNTdHJpbmcgKiluZXdUb29sVGlwOworLSAodm9pZClfd2tfc2V0Q3Vyc29yOihOU0N1cnNv
ciAqKWN1cnNvcjsKKy0gKHZvaWQpX3drX3NldFVzZXJJbnRlcmZhY2VJdGVtU3RhdGU6KE5TU3Ry
aW5nICopY29tbWFuZE5hbWUgZW5hYmxlZDooQk9PTClpc0VuYWJsZWQgc3RhdGU6KGludCluZXdT
dGF0ZTsKKy0gKEJPT0wpX3drX2ludGVycHJldEtleUV2ZW50OihOU0V2ZW50ICopdGhlRXZlbnQg
c2F2aW5nQ29tbWFuZHNUbzooVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mKWNvbW1h
bmRzOworLSAodm9pZClfd2tfZG9uZVdpdGhLZXlFdmVudDooTlNFdmVudCAqKWV2ZW50IGV2ZW50
V2FzSGFuZGxlZDooQk9PTClldmVudFdhc0hhbmRsZWQ7CistIChib29sKV93a19leGVjdXRlU2F2
ZWRDb21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yOworLSAoTlNSZWN0KV93a19jb252ZXJ0
VG9EZXZpY2VTcGFjZTooTlNSZWN0KXJlY3Q7CistIChOU1JlY3QpX3drX2NvbnZlcnRUb1VzZXJT
cGFjZTooTlNSZWN0KXJlY3Q7CistICh2b2lkKV93a19zZXRGaW5kSW5kaWNhdG9yOihQYXNzUmVm
UHRyPFdlYktpdDo6RmluZEluZGljYXRvcj4pZmluZEluZGljYXRvciBmYWRlT3V0OihCT09MKWZh
ZGVPdXQgYW5pbWF0ZTooQk9PTClhbmltYXRlOworCistICh2b2lkKV93a19lbnRlckFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlOihjb25zdCBXZWJLaXQ6OkxheWVyVHJlZUNvbnRleHQmKWxheWVy
VHJlZUNvbnRleHQ7CistICh2b2lkKV93a19leGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGU7
CistICh2b2lkKV93a191cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZTooY29uc3QgV2Vi
S2l0OjpMYXllclRyZWVDb250ZXh0JilsYXllclRyZWVDb250ZXh0OworCistICh2b2lkKV93a19z
ZXRBY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuOihOU0RhdGEgKilkYXRhOworCistICh2b2lk
KV93a19wbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkOihCT09MKXBsdWdpbkhhc0ZvY3Vz
QW5kV2luZG93SGFzRm9jdXMgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXI6KHVpbnQ2
NF90KXBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyOworLSAodm9pZClfd2tfc2V0UGx1
Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlOihXZWJLaXQ6OlBsdWdpbkNvbXBsZXhUZXh0SW5wdXRT
dGF0ZSlwbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgcGx1Z2luQ29tcGxleFRleHRJbnB1dElk
ZW50aWZpZXI6KHVpbnQ2NF90KXBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyOworCist
ICh2b2lkKV93a19zZXRQYWdlSGFzQ3VzdG9tUmVwcmVzZW50YXRpb246KEJPT0wpcGFnZUhhc0N1
c3RvbVJlcHJlc2VudGF0aW9uOworLSAodm9pZClfd2tfZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JD
dXN0b21SZXByZXNlbnRhdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZTooY29uc3QgU3RyaW5nJilz
dWdnZXN0ZWRGaWxlbmFtZSBkYXRhUmVmZXJlbmNlOihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJl
bmNlJilkYXRhUmVmZXJlbmNlOworLSAoZG91YmxlKV93a19jdXN0b21SZXByZXNlbnRhdGlvblpv
b21GYWN0b3I7CistICh2b2lkKV93a19zZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3I6
KGRvdWJsZSl6b29tRmFjdG9yOworLSAodm9pZClfd2tfZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVz
ZW50YXRpb246KE5TU3RyaW5nICopc3RyaW5nIHdpdGhGaW5kT3B0aW9uczooV2ViS2l0OjpGaW5k
T3B0aW9ucylvcHRpb25zIG1heE1hdGNoQ291bnQ6KE5TVUludGVnZXIpY291bnQ7CistICh2b2lk
KV93a19jb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uOihOU1N0cmluZyAq
KXN0cmluZyB3aXRoRmluZE9wdGlvbnM6KFdlYktpdDo6RmluZE9wdGlvbnMpb3B0aW9ucyBtYXhN
YXRjaENvdW50OihOU1VJbnRlZ2VyKWNvdW50OworLSAodm9pZClfd2tfc2V0RHJhZ0ltYWdlOihO
U0ltYWdlICopaW1hZ2UgYXQ6KE5TUG9pbnQpY2xpZW50UG9pbnQgbGlua0RyYWc6KEJPT0wpbGlu
a0RyYWc7CistICh2b2lkKV93a19zZXRQcm9taXNlZERhdGE6KFdlYkNvcmU6OkltYWdlICopaW1h
Z2Ugd2l0aEZpbGVOYW1lOihOU1N0cmluZyAqKWZpbGVuYW1lIHdpdGhFeHRlbnNpb246KE5TU3Ry
aW5nICopZXh0ZW5zaW9uIHdpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSB3aXRoVVJMOihOU1N0
cmluZyAqKXVybCB3aXRoVmlzaWJsZVVSTDooTlNTdHJpbmcgKil2aXNpYmxlVXJsIHdpdGhBcmNo
aXZlOihXZWJDb3JlOjpTaGFyZWRCdWZmZXIqKSBhcmNoaXZlQnVmZmVyIGZvclBhc3RlYm9hcmQ6
KE5TU3RyaW5nICopcGFzdGVib2FyZE5hbWU7CistICh2b2lkKV93a191cGRhdGVTZWN1cmVJbnB1
dFN0YXRlOworLSAodm9pZClfd2tfdXBkYXRlVGV4dElucHV0U3RhdGVJbmNsdWRpbmdTZWN1cmVJ
bnB1dFN0YXRlOihCT09MKXVwZGF0ZVNlY3VyZUlucHV0U3RhdGU7CistICh2b2lkKV93a19yZXNl
dFRleHRJbnB1dFN0YXRlOwogCi0tIChXZWJLaXQ6OkNvbG9yU3BhY2VEYXRhKV9jb2xvclNwYWNl
OworLSAodm9pZClfd2tfZGlkQ2hhbmdlU2Nyb2xsYmFyc0Zvck1haW5GcmFtZTsKKworLSAoV2Vi
S2l0OjpDb2xvclNwYWNlRGF0YSlfd2tfY29sb3JTcGFjZTsKIAogI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKLS0gKEJPT0wpaGFzRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7Ci0tIChXS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKilmdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjsKLS0g
KHZvaWQpY2xvc2VGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjsKKy0gKEJPT0wpX3drX2hhc0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOworLSAoV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
ciopX3drX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOworLSAodm9pZClfd2tfY2xvc2VGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlcjsKICNlbmRpZgogCi0tICh2b2lkKV9jYWNoZVdpbmRvd0Jv
dHRvbUNvcm5lclJlY3Q7CistICh2b2lkKV93a19jYWNoZVdpbmRvd0JvdHRvbUNvcm5lclJlY3Q7
CiAKLS0gKE5TSW50ZWdlcilzcGVsbENoZWNrZXJEb2N1bWVudFRhZzsKLS0gKHZvaWQpaGFuZGxl
QWNjZXB0ZWRBbHRlcm5hdGl2ZVRleHQ6KE5TU3RyaW5nKil0ZXh0OworLSAoTlNJbnRlZ2VyKV93
a19zcGVsbENoZWNrZXJEb2N1bWVudFRhZzsKKy0gKHZvaWQpX3drX2hhbmRsZUFjY2VwdGVkQWx0
ZXJuYXRpdmVUZXh0OihOU1N0cmluZyopdGV4dDsKIAotLSAodm9pZClfc2V0U3VwcHJlc3NWaXNp
YmlsaXR5VXBkYXRlczooQk9PTClzdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzOwotLSAoQk9PTClf
c3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlczsKKy0gKHZvaWQpX3drX3NldFN1cHByZXNzVmlzaWJp
bGl0eVVwZGF0ZXM6KEJPT0wpc3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlczsKKy0gKEJPT0wpX3dr
X3N1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXM7CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDEzMTQw
MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld1ByaXZhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTAsNCArNTAsOCBAQCBAaW50ZXJmYWNlIFdLVmlldyAoUHJpdmF0ZSkK
IC0gKHZvaWQpcGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdEN1cnJlbnRNb3VzZUxvY2F0aW9uOwog
KyAodm9pZCloaWRlV29yZERlZmluaXRpb25XaW5kb3c7CiAKKy8vIEZJWE1FOiBUaGlzIG1ldGhv
ZCBjdXJyZW50bHkgb3ZlcnJpZGRlbiBieSBTYWZhcmkgdG8gdHVybiB0aWxlZCBkcmF3aW5nIGFy
ZWEgb24uCisvLyBXZSBzaG91bGQgY29tZSB1cCB3aXRoIGEgY2xlYW5lciBTUEkgb3IgQVBJIGZv
ciB0aGlzLgorLSAoQk9PTClfc2hvdWxkVXNlVGlsZWREcmF3aW5nQXJlYTsKKwogQGVuZApJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwubW0J
KHJldmlzaW9uIDEzMTQwMykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVj
dGlvblBhbmVsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgU3RyaW5nIENv
cnJlY3Rpb25QYW5lbDo6ZGlzbWlzc0ludGVybmFsKAogCiB2b2lkIENvcnJlY3Rpb25QYW5lbDo6
cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShXS1ZpZXcqIHZpZXcsIE5TQ29ycmVjdGlvblJl
c3BvbnNlIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHJlcGxhY2VtZW50U3RyaW5nKQogewotICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3Bl
bGxDaGVja2VyXSByZWNvcmRSZXNwb25zZTpyZXNwb25zZSB0b0NvcnJlY3Rpb246cmVwbGFjZW1l
bnRTdHJpbmcgZm9yV29yZDpyZXBsYWNlZFN0cmluZyBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3Vt
ZW50V2l0aFRhZzpbdmlldyBzcGVsbENoZWNrZXJEb2N1bWVudFRhZ11dOworICAgIFtbTlNTcGVs
bENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSByZWNvcmRSZXNwb25zZTpyZXNwb25zZSB0b0Nv
cnJlY3Rpb246cmVwbGFjZW1lbnRTdHJpbmcgZm9yV29yZDpyZXBsYWNlZFN0cmluZyBsYW5ndWFn
ZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpbdmlldyBfd2tfc3BlbGxDaGVja2VyRG9jdW1l
bnRUYWddXTsKIH0KIAogdm9pZCBDb3JyZWN0aW9uUGFuZWw6OmhhbmRsZUFjY2VwdGVkUmVwbGFj
ZW1lbnQoTlNTdHJpbmcqIGFjY2VwdGVkUmVwbGFjZW1lbnQsIE5TU3RyaW5nKiByZXBsYWNlZCwg
TlNTdHJpbmcqIHByb3Bvc2VkUmVwbGFjZW1lbnQsICBOU0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBl
IGNvcnJlY3Rpb25JbmRpY2F0b3JUeXBlKQpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgQ29ycmVj
dGlvblBhbmVsOjpoYW5kbGVBY2NlcHRlZFJlcGwKICAgICAgICAgcmV0dXJuOwogCiAgICAgTlNT
cGVsbENoZWNrZXIqIHNwZWxsQ2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENo
ZWNrZXJdOwotICAgIE5TSW50ZWdlciBkb2N1bWVudFRhZyA9IFttX3ZpZXcuZ2V0KCkgc3BlbGxD
aGVja2VyRG9jdW1lbnRUYWddOworICAgIE5TSW50ZWdlciBkb2N1bWVudFRhZyA9IFttX3ZpZXcu
Z2V0KCkgX3drX3NwZWxsQ2hlY2tlckRvY3VtZW50VGFnXTsKICAgICAKICAgICBzd2l0Y2ggKGNv
cnJlY3Rpb25JbmRpY2F0b3JUeXBlKSB7CiAgICAgY2FzZSBOU0NvcnJlY3Rpb25JbmRpY2F0b3JU
eXBlRGVmYXVsdDoKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIENvcnJlY3Rpb25QYW5lbDo6aGFu
ZGxlQWNjZXB0ZWRSZXBsCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIFttX3ZpZXcuZ2V0
KCkgaGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZVRleHQ6YWNjZXB0ZWRSZXBsYWNlbWVudF07Cisg
ICAgW21fdmlldy5nZXQoKSBfd2tfaGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZVRleHQ6YWNjZXB0
ZWRSZXBsYWNlbWVudF07CiAgICAgbV92aWV3LmNsZWFyKCk7CiAgICAgaWYgKGFjY2VwdGVkUmVw
bGFjZW1lbnQpCiAgICAgICAgIG1fcmVzdWx0Rm9yRGlzbWlzc2FsLmFkb3B0TlMoW2FjY2VwdGVk
UmVwbGFjZW1lbnQgY29weV0pOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9X
S0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbQkocmV2aXNp
b24gMTMxNDAzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsNyArMjQyLDcgQEAgLSAo
dm9pZCllbnRlckZ1bGxTY3JlZW46KE5TU2NyZWVuICopc2NyZQogICAgIC8vIHVubmVjZXNzYXJ5
IGluIHRoZSBmdWxsLXNjcmVlbiBhbmltYXRpb24gY2FzZSwgYW5kIGNhbiBjYXVzZSBidWdzOyBz
ZWUKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg5NDAg
YW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODM3NAogICAgIC8v
IFdlIHdpbGwgcmVzdW1lIHRoZSBub3JtYWwgYmVoYXZpb3IgaW4gX3N0YXJ0RW50ZXJGdWxsU2Ny
ZWVuQW5pbWF0aW9uV2l0aER1cmF0aW9uOgotICAgIFtfd2ViVmlldyBfc2V0U3VwcHJlc3NWaXNp
YmlsaXR5VXBkYXRlczpZRVNdOworICAgIFtfd2ViVmlldyBfd2tfc2V0U3VwcHJlc3NWaXNpYmls
aXR5VXBkYXRlczpZRVNdOwogCiAgICAgLy8gU3dhcCB0aGUgd2ViVmlldyBwbGFjZWhvbGRlciBp
bnRvIHBsYWNlLgogICAgIGlmICghX3dlYlZpZXdQbGFjZWhvbGRlcikgewpAQCAtMzM0LDcgKzMz
NCw3IEBAIC0gKHZvaWQpZXhpdEZ1bGxTY3JlZW4KIAogICAgIC8vIFNlZSB0aGUgcmVsYXRlZCBj
b21tZW50IGluIGVudGVyRnVsbFNjcmVlbjoKICAgICAvLyBXZSB3aWxsIHJlc3VtZSB0aGUgbm9y
bWFsIGJlaGF2aW9yIGluIF9zdGFydEV4aXRGdWxsU2NyZWVuQW5pbWF0aW9uV2l0aER1cmF0aW9u
OgotICAgIFtfd2ViVmlldyBfc2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlczpZRVNdOworICAg
IFtfd2ViVmlldyBfd2tfc2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlczpZRVNdOwogCiAgICAg
W3NlbGYgX21hbmFnZXJdLT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKHRydWUpOwogICAgIFtzZWxm
IF9tYW5hZ2VyXS0+d2lsbEV4aXRGdWxsU2NyZWVuKCk7CkBAIC01ODEsNyArNTgxLDcgQEAgLSAo
dm9pZClfc3RhcnRFbnRlckZ1bGxTY3JlZW5BbmltYXRpb25XaQogCiAgICAgW19iYWNrZ3JvdW5k
V2luZG93LmdldCgpIG9yZGVyV2luZG93Ok5TV2luZG93QmVsb3cgcmVsYXRpdmVUbzpbW3NlbGYg
d2luZG93XSB3aW5kb3dOdW1iZXJdXTsKIAotICAgIFtfd2ViVmlldyBfc2V0U3VwcHJlc3NWaXNp
YmlsaXR5VXBkYXRlczpOT107CisgICAgW193ZWJWaWV3IF93a19zZXRTdXBwcmVzc1Zpc2liaWxp
dHlVcGRhdGVzOk5PXTsKICAgICBbW3NlbGYgd2luZG93XSBzZXRBdXRvZGlzcGxheTpZRVNdOwog
ICAgIFtbc2VsZiB3aW5kb3ddIGRpc3BsYXlJZk5lZWRlZF07CiAgICAgTlNFbmFibGVTY3JlZW5V
cGRhdGVzKCk7CkBAIC02MjYsNyArNjI2LDcgQEAgLSAodm9pZClfc3RhcnRFeGl0RnVsbFNjcmVl
bkFuaW1hdGlvbldpdAogICAgIGZpbmFsQm91bmRzLm9yaWdpbiA9IFtbc2VsZiB3aW5kb3ddIGNv
bnZlcnRTY3JlZW5Ub0Jhc2U6ZmluYWxCb3VuZHMub3JpZ2luXTsKICAgICBXS1dpbmRvd1NldENs
aXBSZWN0KFtzZWxmIHdpbmRvd10sIGZpbmFsQm91bmRzKTsKIAotICAgIFtfd2ViVmlldyBfc2V0
U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlczpOT107CisgICAgW193ZWJWaWV3IF93a19zZXRTdXBw
cmVzc1Zpc2liaWxpdHlVcGRhdGVzOk5PXTsKICAgICBbW3NlbGYgd2luZG93XSBzZXRBdXRvZGlz
cGxheTpZRVNdOwogICAgIFtbc2VsZiB3aW5kb3ddIGRpc3BsYXlJZk5lZWRlZF07CiAgICAgTlNF
bmFibGVTY3JlZW5VcGRhdGVzKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL21hYy9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5TWFjLm1tCShyZXZp
c2lvbiAxMzE0MDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgdm9p
ZCBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjppbnZhbGlkYQogICAgIGlmICghbV93ZWJWaWV3
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgW21fd2ViVmlldyBjbG9zZUZ1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyXTsKKyAgICBbbV93ZWJWaWV3IF93a19jbG9zZUZ1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVyXTsKICAgICBtX3dlYlZpZXcgPSAwOwogfQogCkBAIC01MCw0MyArNTAsNDMg
QEAgdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpjbG9zZSgpCiB7CiAgICAgaWYgKCFt
X3dlYlZpZXcpCiAgICAgICAgIHJldHVybjsKLSAgICBbW21fd2ViVmlldyBmdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlcl0gY2xvc2VdOworICAgIFtbbV93ZWJWaWV3IF93a19mdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlcl0gY2xvc2VdOwogfQogCiBib29sIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJv
eHk6OmlzRnVsbFNjcmVlbigpCiB7CiAgICAgaWYgKCFtX3dlYlZpZXcpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIVttX3dlYlZpZXcgaGFzRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXJdKQorICAgIGlmICghW21fd2ViVmlldyBfd2tfaGFzRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXJdKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gW1ttX3dlYlZpZXcgZnVs
bFNjcmVlbldpbmRvd0NvbnRyb2xsZXJdIGlzRnVsbFNjcmVlbl07CisgICAgcmV0dXJuIFtbbV93
ZWJWaWV3IF93a19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcl0gaXNGdWxsU2NyZWVuXTsKIH0K
IAogdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxTY3JlZW4oKQogewog
ICAgIGlmICghbV93ZWJWaWV3KQogICAgICAgICByZXR1cm47Ci0gICAgW1ttX3dlYlZpZXcgZnVs
bFNjcmVlbldpbmRvd0NvbnRyb2xsZXJdIGVudGVyRnVsbFNjcmVlbjpuaWxdOworICAgIFtbbV93
ZWJWaWV3IF93a19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcl0gZW50ZXJGdWxsU2NyZWVuOm5p
bF07CiB9CiAKIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxTY3JlZW4o
KQogewogICAgIGlmICghbV93ZWJWaWV3KQogICAgICAgICByZXR1cm47Ci0gICAgW1ttX3dlYlZp
ZXcgZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJdIGV4aXRGdWxsU2NyZWVuXTsKKyAgICBbW21f
d2ViVmlldyBfd2tfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJdIGV4aXRGdWxsU2NyZWVuXTsK
IH0KICAgICAKIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6YmVnYW5FbnRlckZ1bGxT
Y3JlZW4oY29uc3QgSW50UmVjdCYgaW5pdGlhbEZyYW1lLCBjb25zdCBJbnRSZWN0JiBmaW5hbEZy
YW1lKQogewogICAgIGlmIChtX3dlYlZpZXcpCi0gICAgICAgIFtbbV93ZWJWaWV3IGZ1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyXSBiZWdhbkVudGVyRnVsbFNjcmVlbldpdGhJbml0aWFsRnJhbWU6
aW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6ZmluYWxGcmFtZV07CisgICAgICAgIFtbbV93ZWJWaWV3
IF93a19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcl0gYmVnYW5FbnRlckZ1bGxTY3JlZW5XaXRo
SW5pdGlhbEZyYW1lOmluaXRpYWxGcmFtZSBmaW5hbEZyYW1lOmZpbmFsRnJhbWVdOwogfQogCiB2
b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2FuRXhpdEZ1bGxTY3JlZW4oY29uc3Qg
SW50UmVjdCYgaW5pdGlhbEZyYW1lLCBjb25zdCBJbnRSZWN0JiBmaW5hbEZyYW1lKQogewogICAg
IGlmIChtX3dlYlZpZXcpCi0gICAgICAgIFtbbV93ZWJWaWV3IGZ1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyXSBiZWdhbkV4aXRGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTppbml0aWFsRnJhbWUg
ZmluYWxGcmFtZTpmaW5hbEZyYW1lXTsKKyAgICAgICAgW1ttX3dlYlZpZXcgX3drX2Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyXSBiZWdhbkV4aXRGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTpp
bml0aWFsRnJhbWUgZmluYWxGcmFtZTpmaW5hbEZyYW1lXTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>