<?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>212298</bug_id>
          
          <creation_ts>2020-05-23 02:15:11 -0700</creation_ts>
          <short_desc>[GTK][WTR] EventSender: stop using GdkEvent API in preparation for GTK4</short_desc>
          <delta_ts>2020-05-27 00:50:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk, InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>210100</blocked>
    
    <blocked>212329</blocked>
    
    <blocked>212314</blocked>
    
    <blocked>212328</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aperez</cc>
    
    <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1655592</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-23 02:15:11 -0700</bug_when>
    <thetext>Add internal API to WebKitWebViewBase to synthesize events instead, because with GTK4 it&apos;s not possible to create events. In the case of layout tests, the web view is always the target of the events, so we don&apos;t really need to send the events to GTK to process them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655593</commentid>
    <comment_count>1</comment_count>
      <attachid>400115</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-23 02:31:46 -0700</bug_when>
    <thetext>Created attachment 400115
Patch

There&apos;s only one regression, pointer-lock/mouse-event-delivery.html I&apos;ll rework pointer lock ot ot use GdkEvents in a follow up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655594</commentid>
    <comment_count>2</comment_count>
      <attachid>400116</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-23 02:35:17 -0700</bug_when>
    <thetext>Created attachment 400116
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655595</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-05-23 02:36:19 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655658</commentid>
    <comment_count>4</comment_count>
      <attachid>400116</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-05-23 16:31:01 -0700</bug_when>
    <thetext>Comment on attachment 400116
Patch

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

&gt; Source/WebKit/Shared/gtk/NativeWebKeyboardEventGtk.cpp:43
&gt; +    : WebKeyboardEvent(type, text, key, code, keyIdentifier, windowsVirtualKeyCode, nativeVirtualKeyCode, false, WTF::nullopt, WTF::nullopt, WTFMove(commands), isKeypad, modifiers, WallTime::now())

Shouldn&apos;t events rather use “MonotonicTime” instead? Using “WallTime” can
result in odd situations where an event created later in time has an older
timestamp if the system clock gets adjusted in between, which would break
their sequencing.

(System clock adjustments can happen at any time if there is a NTP client
running: if it detects that it cannot correct drift with small incremental
adjustments it may decide to to a bigger time bump and go back in time.
Another case is the user changing timezones e.g. while traveling.)

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:2356
&gt; +    gdk_window_get_root_coords(gtk_widget_get_window(GTK_WIDGET(webViewBase)), x, y, &amp;xRoot, &amp;yRoot);

See next comment below in line 2469.

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:2469
&gt; +    gdk_window_get_root_coords(gtk_widget_get_window(GTK_WIDGET(webViewBase)), x, y, &amp;xRoot, &amp;yRoot);

This same #if is repeated. I would put a “void gtkGetWidgetRootCoords()”
helper function in “GtkUtilities.h” with versions for both GTK3 and GTK4,
then use it here and also above in line 2356.

&gt; Source/WebKit/UIProcess/gtk/WebContextMenuProxyGtk.cpp:103
&gt; +        g_object_ref(window);

Ah, it took me a while (and a detour through GTK code) to figure out
that “gdk_event_destroy()” results in calling “g_object_unref(window)”.
Could you please add a comment here mentioning that?

(Nice catch, by the way!)

&gt; Tools/WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:124
&gt; +        if (WKStringIsEqualToUTF8CString(keyRef, &quot;rightArrow&quot;))

Wow, out of curiosity I did a “git blame” here and it turns out that
this has gone unnoticed since 2012, and we have the same typo in
“EventSenderProxyWPE.cpp” because parts of the code were very likely
copied 😱️

&gt; Tools/WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:232
&gt; +    return (WebKitWebViewBase*)view;

I think a “reinterpret_cast” should work as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655685</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-24 01:45:54 -0700</bug_when>
    <thetext>(In reply to Adrian Perez from comment #4)
&gt; Comment on attachment 400116 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=400116&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/Shared/gtk/NativeWebKeyboardEventGtk.cpp:43
&gt; &gt; +    : WebKeyboardEvent(type, text, key, code, keyIdentifier, windowsVirtualKeyCode, nativeVirtualKeyCode, false, WTF::nullopt, WTF::nullopt, WTFMove(commands), isKeypad, modifiers, WallTime::now())
&gt; 
&gt; Shouldn&apos;t events rather use “MonotonicTime” instead? Using “WallTime” can
&gt; result in odd situations where an event created later in time has an older
&gt; timestamp if the system clock gets adjusted in between, which would break
&gt; their sequencing.
&gt; 
&gt; (System clock adjustments can happen at any time if there is a NTP client
&gt; running: if it detects that it cannot correct drift with small incremental
&gt; adjustments it may decide to to a bigger time bump and go back in time.
&gt; Another case is the user changing timezones e.g. while traveling.)

It makes sense, but we already use WallTime for events, so if we want to change that it must happen in a separate patch to fix all other places where we already use WallTime.

&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:2356
&gt; &gt; +    gdk_window_get_root_coords(gtk_widget_get_window(GTK_WIDGET(webViewBase)), x, y, &amp;xRoot, &amp;yRoot);
&gt; 
&gt; See next comment below in line 2469.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:2469
&gt; &gt; +    gdk_window_get_root_coords(gtk_widget_get_window(GTK_WIDGET(webViewBase)), x, y, &amp;xRoot, &amp;yRoot);
&gt; 
&gt; This same #if is repeated. I would put a “void gtkGetWidgetRootCoords()”
&gt; helper function in “GtkUtilities.h” with versions for both GTK3 and GTK4,
&gt; then use it here and also above in line 2356.

Sure!

&gt; &gt; Source/WebKit/UIProcess/gtk/WebContextMenuProxyGtk.cpp:103
&gt; &gt; +        g_object_ref(window);
&gt; 
&gt; Ah, it took me a while (and a detour through GTK code) to figure out
&gt; that “gdk_event_destroy()” results in calling “g_object_unref(window)”.

You could have read the ChangeLog :-)

&gt; Could you please add a comment here mentioning that?

Sure!

&gt; (Nice catch, by the way!)
&gt; 
&gt; &gt; Tools/WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:124
&gt; &gt; +        if (WKStringIsEqualToUTF8CString(keyRef, &quot;rightArrow&quot;))
&gt; 
&gt; Wow, out of curiosity I did a “git blame” here and it turns out that
&gt; this has gone unnoticed since 2012, and we have the same typo in
&gt; “EventSenderProxyWPE.cpp” because parts of the code were very likely
&gt; copied 😱️
&gt; 
&gt; &gt; Tools/WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:232
&gt; &gt; +    return (WebKitWebViewBase*)view;
&gt; 
&gt; I think a “reinterpret_cast” should work as well.

It didn&apos;t work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655686</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-24 02:09:47 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #5)
&gt; (In reply to Adrian Perez from comment #4)
&gt; &gt; Comment on attachment 400116 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=400116&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/Shared/gtk/NativeWebKeyboardEventGtk.cpp:43
&gt; &gt; &gt; +    : WebKeyboardEvent(type, text, key, code, keyIdentifier, windowsVirtualKeyCode, nativeVirtualKeyCode, false, WTF::nullopt, WTF::nullopt, WTFMove(commands), isKeypad, modifiers, WallTime::now())
&gt; &gt; 
&gt; &gt; Shouldn&apos;t events rather use “MonotonicTime” instead? Using “WallTime” can
&gt; &gt; result in odd situations where an event created later in time has an older
&gt; &gt; timestamp if the system clock gets adjusted in between, which would break
&gt; &gt; their sequencing.
&gt; &gt; 
&gt; &gt; (System clock adjustments can happen at any time if there is a NTP client
&gt; &gt; running: if it detects that it cannot correct drift with small incremental
&gt; &gt; adjustments it may decide to to a bigger time bump and go back in time.
&gt; &gt; Another case is the user changing timezones e.g. while traveling.)
&gt; 
&gt; It makes sense, but we already use WallTime for events, so if we want to
&gt; change that it must happen in a separate patch to fix all other places where
&gt; we already use WallTime.
&gt; 
&gt; &gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:2356
&gt; &gt; &gt; +    gdk_window_get_root_coords(gtk_widget_get_window(GTK_WIDGET(webViewBase)), x, y, &amp;xRoot, &amp;yRoot);
&gt; &gt; 
&gt; &gt; See next comment below in line 2469.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:2469
&gt; &gt; &gt; +    gdk_window_get_root_coords(gtk_widget_get_window(GTK_WIDGET(webViewBase)), x, y, &amp;xRoot, &amp;yRoot);
&gt; &gt; 
&gt; &gt; This same #if is repeated. I would put a “void gtkGetWidgetRootCoords()”
&gt; &gt; helper function in “GtkUtilities.h” with versions for both GTK3 and GTK4,
&gt; &gt; then use it here and also above in line 2356.
&gt; 
&gt; Sure!
&gt; 
&gt; &gt; &gt; Source/WebKit/UIProcess/gtk/WebContextMenuProxyGtk.cpp:103
&gt; &gt; &gt; +        g_object_ref(window);
&gt; &gt; 
&gt; &gt; Ah, it took me a while (and a detour through GTK code) to figure out
&gt; &gt; that “gdk_event_destroy()” results in calling “g_object_unref(window)”.
&gt; 
&gt; You could have read the ChangeLog :-)
&gt; 
&gt; &gt; Could you please add a comment here mentioning that?
&gt; 
&gt; Sure!
&gt; 
&gt; &gt; (Nice catch, by the way!)
&gt; &gt; 
&gt; &gt; &gt; Tools/WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:124
&gt; &gt; &gt; +        if (WKStringIsEqualToUTF8CString(keyRef, &quot;rightArrow&quot;))
&gt; &gt; 
&gt; &gt; Wow, out of curiosity I did a “git blame” here and it turns out that
&gt; &gt; this has gone unnoticed since 2012, and we have the same typo in
&gt; &gt; “EventSenderProxyWPE.cpp” because parts of the code were very likely
&gt; &gt; copied 😱️
&gt; &gt; 
&gt; &gt; &gt; Tools/WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:232
&gt; &gt; &gt; +    return (WebKitWebViewBase*)view;
&gt; &gt; 
&gt; &gt; I think a “reinterpret_cast” should work as well.
&gt; 
&gt; It didn&apos;t work.

Ok, it was because of the const, it just needs an additional const_cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655687</commentid>
    <comment_count>7</comment_count>
      <attachid>400152</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-24 02:15:01 -0700</bug_when>
    <thetext>Created attachment 400152
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655719</commentid>
    <comment_count>8</comment_count>
      <attachid>400157</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-24 06:25:32 -0700</bug_when>
    <thetext>Created attachment 400157
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656308</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-27 00:50:00 -0700</bug_when>
    <thetext>Committed r262184: &lt;https://trac.webkit.org/changeset/262184&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656309</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-27 00:50:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/63664943&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400115</attachid>
            <date>2020-05-23 02:31:46 -0700</date>
            <delta_ts>2020-05-23 02:35:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wkgtk-event-sender-no-gdkevent.diff</filename>
            <type>text/plain</type>
            <size>62063</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0Y2NlNGQxOWY0OTYuLmY4NGI4MWIxMjkwOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBA
CisyMDIwLTA1LTIzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
KworICAgICAgICBbV1RSXSBFdmVudFNlbmRlcjogc3RvcCB1c2luZyBHZGtFdmVudCBBUEkgaW4g
cHJlcGFyYXRpb24gZm9yIEdUSzQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxMjI5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVwZGF0ZSBleHBlY3RhdGlvbnMgZm9yIHRlc3RzIHRoYXQgYXJlIHBhc3Np
bmcgbm93LgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAg
ICAgICogcGxhdGZvcm0vZ3RrL2VkaXRpbmcvc2VsZWN0aW9uLzUxOTUxNjYtMS1leHBlY3RlZC50
eHQ6IFJlbW92ZWQuCisKIDIwMjAtMDUtMjAgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtHU3RyZWFtZXJdIDxpbWc+IHRhZyBuZWVkcyB0byBzdXBw
b3J0IHZpZGVvIGZvcm1hdHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9U
ZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlv
bnMKaW5kZXggNDFmNzJlYWI5NTUyLi5iMzcwZWFhMDEyZTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCkBAIC0xNDkxLDggKzE0OTEsNiBAQCB3ZWJraXQub3Jn
L2IvMjEwOTI2IGZhc3QvbWVkaWFzdHJlYW0vZ2V0RGlzcGxheU1lZGlhLW1heC1jb25zdHJhaW50
czMuaHRtbCBbIFNraQogCiB3ZWJraXQub3JnL2IvMTk5MjI0IGVkaXRpbmcvcGFzdGVib2FyZC9j
b3B5LXBhc3RlLWFjcm9zcy1zaGFkb3ctYm91bmRhcmllcy13aXRoLXN0eWxlLTIuaHRtbCBbIENy
YXNoIF0KIAotd2Via2l0Lm9yZy9iLzIxMjAxOCBmYXN0L2V2ZW50cy9jb250ZXh0LWFjdGl2YXRl
ZC1ieS1rZXktZXZlbnQuaHRtbCBbIENyYXNoIF0KLQogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KICMgRW5kIG9mIENyYXNoaW5nIHRlc3RzCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwpAQCAtMzM5NSw3ICszMzkzLDYgQEAgd2Via2l0Lm9yZy9iLzE1NzE3OSBmYXN0
L2V2ZW50cy9kcmFnLWFuZC1kcm9wLWF1dG9zY3JvbGwtaW5uZXItZnJhbWUuaHRtbCBbIFRpbWUK
IAogIyBXZWJLaXQyIHRlc3RSdW5uZXIuc2V0RWRpdGluZ0JlaGF2aW91ciBhcHBlYXJzIGJyb2tl
biBzb21ldGltZXMuCiB3ZWJraXQub3JnL2IvMTQ0NzY0IFsgUmVsZWFzZSBdIGVkaXRpbmcvc2Vs
ZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1tYWMuaHRtbCBbIEZhaWx1cmUgXQotQnVnKEdU
SykgZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWFmdGVyLW1vdXNlLXNlbGVjdGlvbi5odG1sIFsg
RmFpbHVyZSBdCiAKICMgV2ViS2l0MiBuZWVkcyB0ZXh0SW5wdXRDb250cm9sbGVyLnNlbGVjdGVk
UmFuZ2UKIEJ1ZyhHVEspIGVkaXRpbmcvc2VsZWN0aW9uL21peGVkLWVkaXRhYmlsaXR5LTEwLmh0
bWwgWyBGYWlsdXJlIF0KQEAgLTM0MzYsNyArMzQzMyw2IEBAIEJ1ZyhHVEspIHBsYXRmb3JtL2d0
ay9mYXN0L2V2ZW50cy9ldmVudC1zZW5kZXItbWV0YWtleS5odG1sIFsgRmFpbHVyZSBdCiAKICMg
VW5leHBsYWluZWQgZmFpbHVyZXMKIEJ1ZyhHVEspIGZhc3QvY3NzL2Rpc2FibGVkLWF1dGhvci1z
dHlsZXMuaHRtbCBbIEZhaWx1cmUgXQotQnVnKEdUSykgZmFzdC9ldmVudHMva2V5ZG93bi1udW1w
YWQta2V5cy5odG1sIFsgRmFpbHVyZSBdCiBCdWcoR1RLKSBmYXN0L2V2ZW50cy9yZW1vdmUtdGFy
Z2V0LXdpdGgtc2hhZG93LWluLWRyYWcuaHRtbCBbIEZhaWx1cmUgXQogQnVnKEdUSykgZmFzdC9m
b3Jtcy9saXN0Ym94LXR5cGVhaGVhZC1jeXJpbGxpYy5odG1sIFsgRmFpbHVyZSBdCiBCdWcoR1RL
KSBmYXN0L2Zvcm1zL2xpc3Rib3gtdHlwZWFoZWFkLWdyZWVrLmh0bWwgWyBGYWlsdXJlIF0KQEAg
LTM2MDAsNyArMzU5Niw2IEBAIHdlYmtpdC5vcmcvYi83NDI4MiBlZGl0aW5nL3Bhc3RlYm9hcmQv
ZW1hY3MtY3RybC1rLXdpdGgtbW92ZS5odG1sIFsgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi84
NDY3OSBjc3MzL3pvb20tY29vcmRzLnhodG1sIFsgRmFpbHVyZSBdCiAKLXdlYmtpdC5vcmcvYi84
NDY5NCBmYXN0L2V2ZW50cy9zZWxlY3RzdGFydC1ieS1kb3VibGUtdHJpcGxlLWNsaWNrcy5odG1s
IFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvODQ2OTIgZmFzdC9ldmVudHMvYXR0ZW1wdC1zY3Jv
bGwtd2l0aC1uby1zY3JvbGxiYXJzLmh0bWwgWyBGYWlsdXJlIF0KIAogIyBJbnRlcmZlcmVzIHdp
dGggdGhlIHJBRiB0ZXN0cyB0aGF0IGFyZSBlbmFibGVkCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvZWRpdGluZy9zZWxlY3Rpb24vNTE5NTE2Ni0xLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9lZGl0aW5nL3NlbGVjdGlvbi81MTk1MTY2LTEtZXhw
ZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzIyMTExZWJiY2YuLjAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZWRpdGluZy9zZWxlY3Rp
b24vNTE5NTE2Ni0xLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAot
VGhpcyB0ZXN0cyBmb3IgYSBidWcgd2hlcmUgZXh0ZW5kaW5nIGEgc2VsZWN0aW9uIGNyZWF0ZWQg
d2l0aCB0aGUgbW91c2Ugd291bGQgYmxvdyBpdCBhd2F5IGJlZm9yZSBleHRlbmRpbmcgaXQuCi0K
LVRoZXJlIHNob3VsZCBiZSBzaXggY2hhcmFjdGVycyBzZWxlY3RlZCBpbiB0aGlzIHNlbnRlbmNl
IG9uIE1hYyBhbmQgZm91ciBjaGFyYWN0ZXJzIHNlbGVjdGVkIG9uIFdpbi9MaW51eC4KLVN1Y2Nl
c3MKLUZhaWx1cmU6IFNlbGVjdGVkIHRleHQgd2FzICJoZXJlIHNob3VsZCBiZSBzaXggY2hhcmFj
dGVycyBzZWxlY3RlZCBpbiB0aGlzIHNlbnRlbmNlIG9uIE1hYyBhbmQgZm91ciBjaGFyYWN0ZXJz
IHNlbGVjdGVkIG9uIFdpbi9MaW51eC4iIGFuZCBzaG91bGQgYmUgImhvdWxkIGJlICIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
aW5kZXggMDQxNzAyYjgxZTQwLi5mMDcwZWE5MTJjYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMg
QEAKKzIwMjAtMDUtMjMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtXVFJdIEV2ZW50U2VuZGVyOiBzdG9wIHVzaW5nIEdka0V2ZW50IEFQSSBp
biBwcmVwYXJhdGlvbiBmb3IgR1RLNAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjEyMjk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIGludGVybmFsIEFQSSB0byBXZWJLaXRXZWJWaWV3QmFzZSB0byBz
eW50aGVzaXplIGV2ZW50cywgYmVjYXVzZSB3aXRoIEdUSzQgaXQncyBub3QgcG9zc2libGUgdG8K
KyAgICAgICAgY3JlYXRlIGV2ZW50cy4gSW4gdGhlIGNhc2Ugb2YgbGF5b3V0IHRlc3RzLCB0aGUg
d2ViIHZpZXcgaXMgYWx3YXlzIHRoZSB0YXJnZXQgb2YgdGhlIGV2ZW50cywgc28gd2UgZG9uJ3Qg
cmVhbGx5CisgICAgICAgIG5lZWQgdG8gc2VuZCB0aGUgZXZlbnRzIHRvIEdUSyB0byBwcm9jZXNz
IHRoZW0uCisKKyAgICAgICAgKiBTaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oOiBBZGQg
bmV3IGNvbnN0cnVjdG9yIHRoYXQgZG9lc24ndCByZWNlaXZlIGEgR2RrRXZlbnQuCisgICAgICAg
ICogU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaDogRGl0dG8uCisgICAgICAgICogU2hhcmVk
L05hdGl2ZVdlYldoZWVsRXZlbnQuaDogRGl0dG8uCisgICAgICAgICogU2hhcmVkL2d0ay9OYXRp
dmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmF0aXZlV2ViS2V5
Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCk6IENyZWF0ZSB3aXRob3V0IGEgR2Rr
RXZlbnQuCisgICAgICAgICogU2hhcmVkL2d0ay9OYXRpdmVXZWJNb3VzZUV2ZW50R3RrLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmF0aXZlV2ViTW91c2VFdmVudDo6TmF0aXZlV2ViTW91c2VFdmVu
dCk6IERpdHRvLgorICAgICAgICAqIFNoYXJlZC9ndGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVs
RXZlbnQpOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aEtleUV2ZW50
KTogUmV0dXJuIGVhcmx5IGlmIGV2ZW50IGRvZXNuJ3QgaGF2ZSBhIEdka0V2ZW50LgorICAgICAg
ICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3VjaEV2ZW50KTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aGVlbEV2ZW50V2FzTm90SGFuZGxlZEJ5
V2ViQ29yZSk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdCYXNlLmNwcDoKKyAgICAgICAgKHRvV2ViS2l0TW9kaWZpZXJzKToKKyAgICAgICAgKHdlYmtp
dFdlYlZpZXdCYXNlU3ludGhlc2l6ZU1vdXNlRXZlbnQpOgorICAgICAgICAod2Via2l0V2ViVmll
d0Jhc2VTeW50aGVzaXplS2V5RXZlbnQpOgorICAgICAgICAodG9XZWJLaXRXaGVlbEV2ZW50UGhh
c2UpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplV2hlZWxFdmVudCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VJbnRlcm5hbC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6YWN0aXZlUG9wdXBNZW51IGNvbnN0KTogUmV0dXJuIHRoZSBhY3Rp
dmUgcG9wdXAgbWVudSBwcm94eS4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdU
cmFuc2xhdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6aGFuZGxlS2V5QmluZGluZ3NGb3JNYXAp
OiBNYWtlIGl0IGdlbmVyaWMgYnkgcmVjZWl2aW5nIHRoZSBtYXAgYXMgcGFyYW1ldGVyLgorICAg
ICAgICAoV2ViS2l0OjpoYW5kbGVDdXN0b21LZXlCaW5kaW5ncyk6IENhbGwgaGFuZGxlS2V5Qmlu
ZGluZ3NGb3JNYXAoKSBwYXNzaW5nIHRoZSBjdXN0b20ga2V5IGJpbmRpbmdzIG1hcC4KKyAgICAg
ICAgKFdlYktpdDo6S2V5QmluZGluZ1RyYW5zbGF0b3I6OmNvbW1hbmRzRm9yS2V5dmFsKTogR2V0
IGNvbW1hbmRzIGZvciB0aGUgcHJlZGVmaW5lZCBrZXkgYmluZGluZ3MuIFRoaXMgaXMgdXNlZAor
ICAgICAgICBvbmx5IHdoZW4gc3ludGhlc2l6aW5nIGtleSBldmVudHMgc2luY2Ugd2UgZG9uJ3Qg
aGF2ZSBhIEdka0VWZW50IHRvIGZvcndhcmQgdG8gdGhlIEd0a1RleHRWaWV3LgorICAgICAgICAq
IFVJUHJvY2Vzcy9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0Ojpwb3B1
cE1lbnVXaWRnZXQpOiBUYWtlIGEgcmVmIG9mIHRoZSBHZGtXaW5kb3cgd2hlbiBjcmVhdGluZyB0
aGUgR2RrRXZlbnQsIHNpbmNlIHRoZSBldmVudCB3aWxsIHVucmVmIGl0CisgICAgICAgIG9uIGRl
c3Ryb3kuCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5R3RrOjpoYW5kbGVLZXlQcmVzcyk6
IEhhbmRsZSBhIGtleSBwcmVzcyBldmVudCBmcm9tIGl0cyBrZXl2YWwgYW5kIHRpbWVzdGFtcC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlHdGs6OmFjdGl2YXRlU2VsZWN0ZWRJ
dGVtKTogQWN0aXZhdGUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0azo6a2V5UHJlc3NFdmVudENhbGxiYWNrKTogQ2FsbCBo
YW5kbGVLZXlQcmVzcygpLgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0azo6
dHlwZUFoZWFkRmluZEluZGV4KTogUmVjZWl2ZSBhIGtleXZhbCBhbmQgdGltZXN0YW1wIGluc3Rl
YWQgb2YgYSBHZGtFdmVudC4KKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlHdGs6
OnR5cGVBaGVhZEZpbmQpOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBvcHVw
TWVudVByb3h5R3RrLmg6CisKIDIwMjAtMDUtMjAgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtNYWNdIFVJIHByb2Nlc3NlcyBzcGluIHdoZW4gY3JlYXRpbmcgdGhl
ICJTaGFyZSIgY29udGV4dCBtZW51IGl0ZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2
ZVdlYktleWJvYXJkRXZlbnQuaAppbmRleCAyNGQ1NGU4YzIxZjcuLmUxYjJhYjQzZTE0MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaApAQCAtNzUs
NiArNzUsNyBAQCBwdWJsaWM6CiAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBOYXRp
dmVXZWJLZXlib2FyZEV2ZW50Jik7CiAgICAgZW51bSBjbGFzcyBIYW5kbGVkQnlJbnB1dE1ldGhv
ZCA6IGJvb2wgeyBObywgWWVzIH07CiAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVu
dCosIGNvbnN0IFN0cmluZyYsIEhhbmRsZWRCeUlucHV0TWV0aG9kLCBPcHRpb25hbDxWZWN0b3I8
V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+PiYmLCBPcHRpb25hbDxFZGl0aW5nUmFuZ2U+
JiYsIFZlY3RvcjxTdHJpbmc+JiYgY29tbWFuZHMpOworICAgIE5hdGl2ZVdlYktleWJvYXJkRXZl
bnQoVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3Ry
aW5nJiBjb2RlLCBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIsIGludCB3aW5kb3dzVmlydHVh
bEtleUNvZGUsIGludCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSwgVmVjdG9yPFN0cmluZz4mJiBjb21t
YW5kcywgYm9vbCBpc0tleXBhZCwgT3B0aW9uU2V0PE1vZGlmaWVyPik7CiAjZWxpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogICAgIGVudW0gY2xhc3MgSGFuZGxlZEJ5SW5wdXRNZXRob2QgOiBib29s
IHsgTm8sIFllcyB9OwogICAgIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoOjpXZWJFdmVudCAqLCBI
YW5kbGVkQnlJbnB1dE1ldGhvZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9O
YXRpdmVXZWJNb3VzZUV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJNb3Vz
ZUV2ZW50LmgKaW5kZXggMzVmZGZiYjMwOTdhLi5jNmE1OTVhMjVlOTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmgKQEAgLTY2LDYgKzY2LDcgQEAgcHVibGlj
OgogICAgIE5hdGl2ZVdlYk1vdXNlRXZlbnQoY29uc3QgTmF0aXZlV2ViTW91c2VFdmVudCYpOwog
ICAgIE5hdGl2ZVdlYk1vdXNlRXZlbnQoR2RrRXZlbnQqLCBpbnQsIE9wdGlvbmFsPFdlYkNvcmU6
OkludFBvaW50Pik7CiAgICAgTmF0aXZlV2ViTW91c2VFdmVudChHZGtFdmVudCosIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiwgaW50LCBPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4pOworICAg
IE5hdGl2ZVdlYk1vdXNlRXZlbnQoVHlwZSwgQnV0dG9uLCB1bnNpZ25lZCBzaG9ydCBidXR0b25z
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBnbG9iYWxQb3NpdGlvbiwgaW50IGNsaWNrQ291bnQsIE9wdGlvblNldDxNb2RpZmllcj4g
bW9kaWZpZXJzKTsKICAgICBleHBsaWNpdCBOYXRpdmVXZWJNb3VzZUV2ZW50KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50Jik7CiAjZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIE5hdGl2ZVdl
Yk1vdXNlRXZlbnQoOjpXZWJFdmVudCAqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdl
YldoZWVsRXZlbnQuaAppbmRleCBhNWRiOGI3NDYxNzcuLmVhYzc2NjlkMDgwYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaApAQCAtNjEsNiArNjEsNyBAQCBw
dWJsaWM6CiAgICAgTmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCopOwogICAgIE5hdGl2ZVdl
YldoZWVsRXZlbnQoR2RrRXZlbnQqLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSwgV2ViV2hlZWxFdmVu
dDo6UGhhc2UgbW9tZW50dW1QaGFzZSk7CiAgICAgTmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVu
dCosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgTmF0aXZlV2ViV2hlZWxFdmVudChj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBkZWx0YSwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tzLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSwgV2Vi
V2hlZWxFdmVudDo6UGhhc2UgbW9tZW50dW1QaGFzZSk7CiAjZWxpZiBVU0UoTElCV1BFKQogICAg
IE5hdGl2ZVdlYldoZWVsRXZlbnQoc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiwgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IsIFdlYldoZWVsRXZlbnQ6OlBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQ
aGFzZSBtb21lbnR1bVBoYXNlKTsKICNlbGlmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcAppbmRl
eCA4YzBkZjQyODJmZDUuLmM2ZGVhOTk5ODdkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcApAQCAtMzksOSArMzks
MTQgQEAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtF
dmVudCogZXZlbnQsIGNvbnN0IFN0cmluZyYgdGUKIHsKIH0KIAorTmF0aXZlV2ViS2V5Ym9hcmRF
dmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4
dCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBr
ZXlJZGVudGlmaWVyLCBpbnQgd2luZG93c1ZpcnR1YWxLZXlDb2RlLCBpbnQgbmF0aXZlVmlydHVh
bEtleUNvZGUsIFZlY3RvcjxTdHJpbmc+JiYgY29tbWFuZHMsIGJvb2wgaXNLZXlwYWQsIE9wdGlv
blNldDxNb2RpZmllcj4gbW9kaWZpZXJzKQorICAgIDogV2ViS2V5Ym9hcmRFdmVudCh0eXBlLCB0
ZXh0LCBrZXksIGNvZGUsIGtleUlkZW50aWZpZXIsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgbmF0
aXZlVmlydHVhbEtleUNvZGUsIGZhbHNlLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgV1RG
TW92ZShjb21tYW5kcyksIGlzS2V5cGFkLCBtb2RpZmllcnMsIFdhbGxUaW1lOjpub3coKSkKK3sK
K30KKwogTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChjb25z
dCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKLSAgICA6IFdlYktleWJvYXJkRXZlbnQo
V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KGV2ZW50Lm5hdGl2ZUV2ZW50
KCksIGV2ZW50LnRleHQoKSwgZXZlbnQuaGFuZGxlZEJ5SW5wdXRNZXRob2QoKSwgT3B0aW9uYWw8
VmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPj4oZXZlbnQucHJlZWRpdFVuZGVy
bGluZXMoKSksIE9wdGlvbmFsPEVkaXRpbmdSYW5nZT4oZXZlbnQucHJlZWRpdFNlbGVjdGlvblJh
bmdlKCkpLCBWZWN0b3I8U3RyaW5nPihldmVudC5jb21tYW5kcygpKSkpCi0gICAgLCBtX25hdGl2
ZUV2ZW50KGdka19ldmVudF9jb3B5KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpKQorICAgIDogV2ViS2V5
Ym9hcmRFdmVudChldmVudC50eXBlKCksIGV2ZW50LnRleHQoKSwgZXZlbnQua2V5KCksIGV2ZW50
LmNvZGUoKSwgZXZlbnQua2V5SWRlbnRpZmllcigpLCBldmVudC53aW5kb3dzVmlydHVhbEtleUNv
ZGUoKSwgZXZlbnQubmF0aXZlVmlydHVhbEtleUNvZGUoKSwgZXZlbnQuaGFuZGxlZEJ5SW5wdXRN
ZXRob2QoKSwgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPj4o
ZXZlbnQucHJlZWRpdFVuZGVybGluZXMoKSksIE9wdGlvbmFsPEVkaXRpbmdSYW5nZT4oZXZlbnQu
cHJlZWRpdFNlbGVjdGlvblJhbmdlKCkpLCBWZWN0b3I8U3RyaW5nPihldmVudC5jb21tYW5kcygp
KSwgZXZlbnQuaXNLZXlwYWQoKSwgZXZlbnQubW9kaWZpZXJzKCksIGV2ZW50LnRpbWVzdGFtcCgp
KQorICAgICwgbV9uYXRpdmVFdmVudChldmVudC5uYXRpdmVFdmVudCgpID8gZ2RrX2V2ZW50X2Nv
cHkoZXZlbnQubmF0aXZlRXZlbnQoKSkgOiBudWxscHRyKQogewogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsvTmF0aXZlV2ViTW91c2VFdmVudEd0ay5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9ndGsvTmF0aXZlV2ViTW91c2VFdmVudEd0ay5jcHAKaW5kZXggN2Fj
ZDk0YmVjNjAxLi43ZjgyNDk4NGEwNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L2d0ay9OYXRpdmVXZWJNb3VzZUV2ZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9ndGsvTmF0aXZlV2ViTW91c2VFdmVudEd0ay5jcHAKQEAgLTQ4LDggKzQ4LDEzIEBAIE5hdGl2
ZVdlYk1vdXNlRXZlbnQ6Ok5hdGl2ZVdlYk1vdXNlRXZlbnQoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIHBvc2l0aW9uKQogewogfQogCitOYXRpdmVXZWJNb3VzZUV2ZW50OjpOYXRpdmVXZWJNb3Vz
ZUV2ZW50KFR5cGUgdHlwZSwgQnV0dG9uIGJ1dHRvbiwgdW5zaWduZWQgc2hvcnQgYnV0dG9ucywg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgZ2xvYmFsUG9zaXRpb24sIGludCBjbGlja0NvdW50LCBPcHRpb25TZXQ8TW9kaWZpZXI+IG1v
ZGlmaWVycykKKyAgICA6IFdlYk1vdXNlRXZlbnQodHlwZSwgYnV0dG9uLCBidXR0b25zLCBwb3Np
dGlvbiwgZ2xvYmFsUG9zaXRpb24sIDAsIDAsIDAsIGNsaWNrQ291bnQsIG1vZGlmaWVycywgV2Fs
bFRpbWU6Om5vdygpKQoreworfQorCiBOYXRpdmVXZWJNb3VzZUV2ZW50OjpOYXRpdmVXZWJNb3Vz
ZUV2ZW50KGNvbnN0IE5hdGl2ZVdlYk1vdXNlRXZlbnQmIGV2ZW50KQotICAgIDogV2ViTW91c2VF
dmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoZXZlbnQubmF0aXZlRXZl
bnQoKSwgZXZlbnQucG9zaXRpb24oKSwgZXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgZXZlbnQuY2xp
Y2tDb3VudCgpLCBXZWJDb3JlOjpJbnRQb2ludChldmVudC5kZWx0YVgoKSwgZXZlbnQuZGVsdGFZ
KCkpKSkKKyAgICA6IFdlYk1vdXNlRXZlbnQoZXZlbnQudHlwZSgpLCBldmVudC5idXR0b24oKSwg
ZXZlbnQuYnV0dG9ucygpLCBldmVudC5wb3NpdGlvbigpLCBldmVudC5nbG9iYWxQb3NpdGlvbigp
LCBldmVudC5kZWx0YVgoKSwgZXZlbnQuZGVsdGFZKCksIGV2ZW50LmRlbHRhWigpLCBldmVudC5j
bGlja0NvdW50KCksIGV2ZW50Lm1vZGlmaWVycygpLCBldmVudC50aW1lc3RhbXAoKSkKICAgICAs
IG1fbmF0aXZlRXZlbnQoZXZlbnQubmF0aXZlRXZlbnQoKSA/IGdka19ldmVudF9jb3B5KGNvbnN0
X2Nhc3Q8R2RrRXZlbnQqPihldmVudC5uYXRpdmVFdmVudCgpKSkgOiBudWxscHRyKQogewogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRH
dGsuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsu
Y3BwCmluZGV4IGIyZjcwMTAwNmFkMC4uM2I2MDU5NmQ1NWE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9ndGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0ay5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwCkBAIC00OSw5ICs0
OSwxNCBAQCBOYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50
KiBldmVudCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbgogewogfQogCitOYXRpdmVXZWJXaGVlbEV2
ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlv
biwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHdoZWVsVGlja3Ms
IFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1
bVBoYXNlKQorICAgIDogV2ViV2hlZWxFdmVudChXZWJFdmVudDo6V2hlZWwsIHBvc2l0aW9uLCBn
bG9iYWxQb3NpdGlvbiwgZGVsdGEsIHdoZWVsVGlja3MsIHBoYXNlLCBtb21lbnR1bVBoYXNlLCBX
ZWJXaGVlbEV2ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwgeyB9LCBXYWxsVGltZTo6bm93
KCkpCit7Cit9CisKIE5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQoY29u
c3QgTmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCi0gICAgOiBXZWJXaGVlbEV2ZW50KFdlYkV2
ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChldmVudC5uYXRpdmVFdmVudCgpLCBldmVu
dC5wb3NpdGlvbigpLCBldmVudC5nbG9iYWxQb3NpdGlvbigpLCBldmVudC5waGFzZSgpLCBldmVu
dC5tb21lbnR1bVBoYXNlKCkpKQotICAgICwgbV9uYXRpdmVFdmVudChnZGtfZXZlbnRfY29weShl
dmVudC5uYXRpdmVFdmVudCgpKSkKKyAgICA6IFdlYldoZWVsRXZlbnQoZXZlbnQudHlwZSgpLCBl
dmVudC5wb3NpdGlvbigpLCBldmVudC5nbG9iYWxQb3NpdGlvbigpLCBldmVudC5kZWx0YSgpLCBl
dmVudC53aGVlbFRpY2tzKCksIGV2ZW50LnBoYXNlKCksIGV2ZW50Lm1vbWVudHVtUGhhc2UoKSwg
ZXZlbnQuZ3JhbnVsYXJpdHkoKSwgZXZlbnQubW9kaWZpZXJzKCksIGV2ZW50LnRpbWVzdGFtcCgp
KQorICAgICwgbV9uYXRpdmVFdmVudChldmVudC5uYXRpdmVFdmVudCgpID8gZ2RrX2V2ZW50X2Nv
cHkoZXZlbnQubmF0aXZlRXZlbnQoKSkgOiBudWxscHRyKQogewogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IDNiOTNj
MjM4MTU3ZC4uYmRmNTU1Y2U2Y2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMjM5LDcgKzIzOSw3IEBAIFdlYkNvcmU6
OkludFJlY3QgUGFnZUNsaWVudEltcGw6OnJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNv
bnN0IFdlYkNvcmU6OkluCiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoS2V5RXZlbnQo
Y29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQsIGJvb2wgd2FzRXZlbnRIYW5kbGVk
KQogewotICAgIGlmICh3YXNFdmVudEhhbmRsZWQgfHwgZXZlbnQudHlwZSgpICE9IFdlYkV2ZW50
OjpUeXBlOjpLZXlEb3duKQorICAgIGlmICh3YXNFdmVudEhhbmRsZWQgfHwgZXZlbnQudHlwZSgp
ICE9IFdlYkV2ZW50OjpUeXBlOjpLZXlEb3duIHx8ICFldmVudC5uYXRpdmVFdmVudCgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2Ug
PSBXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3ZpZXdXaWRnZXQpOwpAQCAtNDExLDYgKzQxMSw4IEBA
IHZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJU
b3VjaEV2ZW50JiBldmVudCwgYm9vbCB3CiB7CiAjaWYgIVVTRShHVEs0KQogICAgIGNvbnN0IEdk
a0V2ZW50KiB0b3VjaEV2ZW50ID0gZXZlbnQubmF0aXZlRXZlbnQoKTsKKyAgICBpZiAoIXRvdWNo
RXZlbnQpCisgICAgICAgIHJldHVybjsKIAogICAgIEdlc3R1cmVDb250cm9sbGVyJiBnZXN0dXJl
Q29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIoV0VCS0lUX1dF
Ql9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KSk7CiAgICAgaWYgKHdhc0V2ZW50SGFuZGxlZCkgewpA
QCAtNDcxLDYgKzQ3Myw5IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoVG91Y2hFdmVu
dChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiBldmVudCwgYm9vbCB3CiAKIHZvaWQgUGFnZUNs
aWVudEltcGw6OndoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdl
YldoZWVsRXZlbnQmIGV2ZW50KQogeworICAgIGlmICghZXZlbnQubmF0aXZlRXZlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAjaWYgIVVTRShHVEs0KQogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxl
ciogY29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKFdF
QktJVF9XRUJfVklFV19CQVNFKG1fdmlld1dpZGdldCkpOwogICAgIGlmIChjb250cm9sbGVyICYm
IGNvbnRyb2xsZXItPmlzU3dpcGVHZXN0dXJlRW5hYmxlZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IGZk
N2VlOTY5NGU4ZC4uNTAxMTVjNTJjOTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtNDgsOSArNDgsMTEgQEAK
ICNpbmNsdWRlICJXZWJLaXRFbW9qaUNob29zZXIuaCIKICNpbmNsdWRlICJXZWJLaXRJbnB1dE1l
dGhvZENvbnRleHRJbXBsR3RrLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0FjY2Vzc2libGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZUludGVybmFsLmgiCiAjaW5jbHVkZSAiV2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlHdGsuaCIK
ICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgi
CiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaCIKQEAgLTYxLDYgKzYz
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybURpc3BsYXku
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lvbi5oPgogI2lu
Y2x1ZGUgPGdkay9nZGsuaD4KQEAgLTIyNzUsMyArMjI3OCwyMDAgQEAgdm9pZCB3ZWJraXRXZWJW
aWV3QmFzZVN5bnRoZXNpemVDb21wb3NpdGlvbktleVByZXNzKFdlYktpdFdlYlZpZXdCYXNlKiB3
ZWJWaWV3QmEKICAgICBwcml2LT5wYWdlUHJveHktPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudChldmVudCwgdGV4dCwgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6SGFu
ZGxlZEJ5SW5wdXRNZXRob2Q6OlllcywgV1RGTW92ZSh1bmRlcmxpbmVzKSwgV1RGTW92ZShzZWxl
Y3Rpb25SYW5nZSksIHsgfSkpOwogI2VuZGlmCiB9CisKK3N0YXRpYyBpbmxpbmUgT3B0aW9uU2V0
PFdlYkV2ZW50OjpNb2RpZmllcj4gdG9XZWJLaXRNb2RpZmllcnModW5zaWduZWQgbW9kaWZpZXJz
KQoreworICAgIE9wdGlvblNldDxXZWJFdmVudDo6TW9kaWZpZXI+IHdlYkV2ZW50TW9kaWZpZXJz
OworICAgIGlmIChtb2RpZmllcnMgJiBHREtfQ09OVFJPTF9NQVNLKQorICAgICAgICB3ZWJFdmVu
dE1vZGlmaWVycy5hZGQoV2ViRXZlbnQ6Ok1vZGlmaWVyOjpDb250cm9sS2V5KTsKKyAgICBpZiAo
bW9kaWZpZXJzICYgR0RLX1NISUZUX01BU0spCisgICAgICAgIHdlYkV2ZW50TW9kaWZpZXJzLmFk
ZChXZWJFdmVudDo6TW9kaWZpZXI6OlNoaWZ0S2V5KTsKKyAgICBpZiAobW9kaWZpZXJzICYgR0RL
X01PRDFfTUFTSykKKyAgICAgICAgd2ViRXZlbnRNb2RpZmllcnMuYWRkKFdlYkV2ZW50OjpNb2Rp
Zmllcjo6QWx0S2V5KTsKKyAgICBpZiAobW9kaWZpZXJzICYgR0RLX01FVEFfTUFTSykKKyAgICAg
ICAgd2ViRXZlbnRNb2RpZmllcnMuYWRkKFdlYkV2ZW50OjpNb2RpZmllcjo6TWV0YUtleSk7Cisg
ICAgaWYgKFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6bW9kaWZpZXJzQ29udGFpbkNhcHNMb2NrKG1v
ZGlmaWVycykpCisgICAgICAgIHdlYkV2ZW50TW9kaWZpZXJzLmFkZChXZWJFdmVudDo6TW9kaWZp
ZXI6OkNhcHNMb2NrS2V5KTsKKyAgICByZXR1cm4gd2ViRXZlbnRNb2RpZmllcnM7Cit9CisKK3Zv
aWQgd2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplTW91c2VFdmVudChXZWJLaXRXZWJWaWV3QmFz
ZSogd2ViVmlld0Jhc2UsIE1vdXNlRXZlbnRUeXBlIHR5cGUsIHVuc2lnbmVkIGJ1dHRvbiwgdW5z
aWduZWQgc2hvcnQgYnV0dG9ucywgaW50IHgsIGludCB5LCB1bnNpZ25lZCBtb2RpZmllcnMsIGlu
dCBjbGlja0NvdW50KQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdl
YlZpZXdCYXNlLT5wcml2OworICAgIGlmIChwcml2LT5kaWFsb2cpCisgICAgICAgIHJldHVybjsK
KworICAgIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiB3ZWJFdmVudEJ1dHRvbiA9IFdlYk1vdXNlRXZl
bnQ6Ok5vQnV0dG9uOworICAgIHN3aXRjaCAoYnV0dG9uKSB7CisgICAgY2FzZSAwOgorICAgICAg
ICB3ZWJFdmVudEJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIDE6CisgICAgICAgIHdlYkV2ZW50QnV0dG9uID0gV2ViTW91c2VFdmVudDo6
TGVmdEJ1dHRvbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICB3ZWJFdmVu
dEJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSAzOgorICAgICAgICB3ZWJFdmVudEJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OlJpZ2h0
QnV0dG9uOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBXZWJFdmVudDo6VHlwZSB3ZWJF
dmVudFR5cGU7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBNb3VzZUV2ZW50VHlwZTo6
UHJlc3M6CisgICAgICAgIHdlYkV2ZW50VHlwZSA9IFdlYkV2ZW50OjpNb3VzZURvd247CisgICAg
ICAgIHByaXYtPmlucHV0TWV0aG9kRmlsdGVyLmNhbmNlbENvbXBvc2l0aW9uKCk7CisgICAgICAg
IGd0a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTW91c2VFdmVudFR5cGU6OlJlbGVhc2U6CisgICAgICAgIHdlYkV2
ZW50VHlwZSA9IFdlYkV2ZW50OjpNb3VzZVVwOworICAgICAgICBndGtfd2lkZ2V0X2dyYWJfZm9j
dXMoR1RLX1dJREdFVCh3ZWJWaWV3QmFzZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1v
dXNlRXZlbnRUeXBlOjpNb3Rpb246CisgICAgICAgIC8vIEZJWE1FOiBhZGQgbW92ZW1lbnQgZGVs
dGEgZm9yIHBvaW50ZXIgbG9jay4KKyAgICAgICAgd2ViRXZlbnRUeXBlID0gV2ViRXZlbnQ6Ok1v
dXNlTW92ZTsKKyAgICAgICAgaWYgKGJ1dHRvbnMgJiBHREtfQlVUVE9OMV9NQVNLKQorICAgICAg
ICAgICAgd2ViRXZlbnRCdXR0b24gPSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOworICAgICAg
ICBlbHNlIGlmIChidXR0b25zICYgR0RLX0JVVFRPTjJfTUFTSykKKyAgICAgICAgICAgIHdlYkV2
ZW50QnV0dG9uID0gV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOworICAgICAgICBlbHNlIGlm
IChidXR0b25zICYgR0RLX0JVVFRPTjNfTUFTSykKKyAgICAgICAgICAgIHdlYkV2ZW50QnV0dG9u
ID0gV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHVuc2lnbmVkIHNob3J0IHdlYkV2ZW50QnV0dG9ucyA9IDA7CisgICAgaWYgKGJ1dHRvbnMg
JiBHREtfQlVUVE9OMV9NQVNLKQorICAgICAgICB3ZWJFdmVudEJ1dHRvbnMgfD0gMTsKKyAgICBp
ZiAoYnV0dG9ucyAmIEdES19CVVRUT04yX01BU0spCisgICAgICAgIHdlYkV2ZW50QnV0dG9ucyB8
PSA0OworICAgIGlmIChidXR0b25zICYgR0RLX0JVVFRPTjNfTUFTSykKKyAgICAgICAgd2ViRXZl
bnRCdXR0b25zIHw9IDI7CisKKyAgICBpbnQgeFJvb3QsIHlSb290OworI2lmIFVTRShHVEs0KQor
ICAgIHhSb290ID0geDsKKyAgICB5Um9vdCA9IHk7CisjZWxzZQorICAgIGdka193aW5kb3dfZ2V0
X3Jvb3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKHdlYlZpZXdCYXNl
KSksIHgsIHksICZ4Um9vdCwgJnlSb290KTsKKyNlbmRpZgorCisgICAgcHJpdi0+cGFnZVByb3h5
LT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQod2ViRXZlbnRUeXBlLCB3ZWJF
dmVudEJ1dHRvbiwgd2ViRXZlbnRCdXR0b25zLCB7IHgsIHkgfSwgeyB4Um9vdCwgeVJvb3QgfSwg
Y2xpY2tDb3VudCwgdG9XZWJLaXRNb2RpZmllcnMobW9kaWZpZXJzKSkpOworfQorCit2b2lkIHdl
YmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZUtleUV2ZW50KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJW
aWV3QmFzZSwgdW5zaWduZWQga2V5dmFsLCB1bnNpZ25lZCBtb2RpZmllcnMpCit7CisgICAgV2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisgICAgaWYg
KHByaXYtPmRpYWxvZykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIHBvcHVwTWVu
dSA9IHByaXYtPnBhZ2VQcm94eS0+YWN0aXZlUG9wdXBNZW51KCkpIHsKKyAgICAgICAgYXV0byog
Z3RrUG9wdXBNZW51ID0gc3RhdGljX2Nhc3Q8V2ViUG9wdXBNZW51UHJveHlHdGsqPihwb3B1cE1l
bnUpOworICAgICAgICBpZiAoZ3RrUG9wdXBNZW51LT5oYW5kbGVLZXlQcmVzcyhrZXl2YWwsIEdE
S19DVVJSRU5UX1RJTUUpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChrZXl2
YWwgPT0gR0RLX0tFWV9SZXR1cm4pIHsKKyAgICAgICAgICAgIGd0a1BvcHVwTWVudS0+YWN0aXZh
dGVTZWxlY3RlZEl0ZW0oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K
KworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBpZiAocHJpdi0+ZnVsbFNjcmVlbk1v
ZGVBY3RpdmUpIHsKKyAgICAgICAgc3dpdGNoIChrZXl2YWwpIHsKKyAgICAgICAgY2FzZSBHREtf
S0VZX0VzY2FwZToKKyAgICAgICAgY2FzZSBHREtfS0VZX2Y6CisgICAgICAgIGNhc2UgR0RLX0tF
WV9GOgorICAgICAgICAgICAgcHJpdi0+cGFnZVByb3h5LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5y
ZXF1ZXN0RXhpdEZ1bGxTY3JlZW4oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAg
ICBpZiAoa2V5dmFsID09IEdES19LRVlfTWVudSkgeworICAgICAgICB3ZWJraXRXZWJWaWV3QmFz
ZVBvcHVwTWVudShHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBrZXljb2RlID0gMDsKKyAgICBHVW5pcXVlT3V0UHRyPEdka0tl
eW1hcEtleT4ga2V5czsKKyAgICBpbnQga2V5c0NvdW50OworICAgIGF1dG8qIGRpc3BsYXkgPSBn
dGtfd2lkZ2V0X2dldF9kaXNwbGF5KEdUS19XSURHRVQod2ViVmlld0Jhc2UpKTsKKyNpZiBVU0Uo
R1RLNCkKKyAgICBpZiAoZ2RrX2Rpc3BsYXlfbWFwX2tleXZhbChkaXNwbGF5LCBrZXl2YWwsICZr
ZXlzLm91dFB0cigpLCAma2V5c0NvdW50KSAmJiBrZXlzQ291bnQpCisgICAgICAgIGtleWNvZGUg
PSBrZXlzLmdldCgpWzBdLmtleWNvZGU7CisjZWxzZQorICAgIEdka0tleW1hcCoga2V5bWFwID0g
Z2RrX2tleW1hcF9nZXRfZm9yX2Rpc3BsYXkoZGlzcGxheSk7CisgICAgaWYgKGdka19rZXltYXBf
Z2V0X2VudHJpZXNfZm9yX2tleXZhbChrZXltYXAsIGtleXZhbCwgJmtleXMub3V0UHRyKCksICZr
ZXlzQ291bnQpICYmIGtleXNDb3VudCkKKyAgICAgICAga2V5Y29kZSA9IGtleXMuZ2V0KClbMF0u
a2V5Y29kZTsKKyNlbmRpZgorCisgICAgYXV0byB3ZWJFdmVudE1vZGlmaWVycyA9IHRvV2ViS2l0
TW9kaWZpZXJzKG1vZGlmaWVycyk7CisKKyAgICBwcml2LT5wYWdlUHJveHktPmhhbmRsZUtleWJv
YXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCgKKyAgICAgICAgV2ViRXZlbnQ6OktleURv
d24sCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6c2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KGtleXZhbCksCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5VmFsdWVGb3JHZGtL
ZXlDb2RlKGtleXZhbCksCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5Q29kZUZv
ckhhcmR3YXJlS2V5Q29kZShrZXljb2RlKSwKKyAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50
OjprZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShrZXl2YWwpLAorICAgICAgICBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OndpbmRvd3NLZXlDb2RlRm9yR2RrS2V5Q29kZShrZXl2YWwpLAorICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQ+KGtleXZhbCksCisgICAgICAgIHByaXYtPmtleUJpbmRpbmdUcmFu
c2xhdG9yLmNvbW1hbmRzRm9yS2V5dmFsKGtleXZhbCwgbW9kaWZpZXJzKSwKKyAgICAgICAga2V5
dmFsID49IEdES19LRVlfS1BfU3BhY2UgJiYga2V5dmFsIDw9IEdES19LRVlfS1BfOSwKKyAgICAg
ICAgd2ViRXZlbnRNb2RpZmllcnMpKTsKKworICAgIHByaXYtPnBhZ2VQcm94eS0+aGFuZGxlS2V5
Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KAorICAgICAgICBXZWJFdmVudDo6S2V5
VXAsCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6c2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KGtleXZhbCksCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5VmFsdWVGb3JHZGtL
ZXlDb2RlKGtleXZhbCksCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5Q29kZUZv
ckhhcmR3YXJlS2V5Q29kZShrZXljb2RlKSwKKyAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50
OjprZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShrZXl2YWwpLAorICAgICAgICBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OndpbmRvd3NLZXlDb2RlRm9yR2RrS2V5Q29kZShrZXl2YWwpLAorICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQ+KGtleXZhbCksCisgICAgICAgIHsgfSwKKyAgICAgICAga2V5dmFs
ID49IEdES19LRVlfS1BfU3BhY2UgJiYga2V5dmFsIDw9IEdES19LRVlfS1BfOSwKKyAgICAgICAg
d2ViRXZlbnRNb2RpZmllcnMpKTsKK30KKworc3RhdGljIGlubGluZSBXZWJXaGVlbEV2ZW50OjpQ
aGFzZSB0b1dlYktpdFdoZWVsRXZlbnRQaGFzZShXaGVlbEV2ZW50UGhhc2UgcGhhc2UpCit7Cisg
ICAgc3dpdGNoIChwaGFzZSkgeworICAgIGNhc2UgV2hlZWxFdmVudFBoYXNlOjpOb1BoYXNlOgor
ICAgICAgICByZXR1cm4gV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZTsKKyAgICBjYXNl
IFdoZWVsRXZlbnRQaGFzZTo6QmVnYW46CisgICAgICAgIHJldHVybiBXZWJXaGVlbEV2ZW50OjpQ
aGFzZTo6UGhhc2VCZWdhbjsKKyAgICBjYXNlIFdoZWVsRXZlbnRQaGFzZTo6Q2hhbmdlZDoKKyAg
ICAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQ7CisgICAgY2Fz
ZSBXaGVlbEV2ZW50UGhhc2U6OkVuZGVkOgorICAgICAgICByZXR1cm4gV2ViV2hlZWxFdmVudDo6
UGhhc2U6OlBoYXNlRW5kZWQ7CisgICAgY2FzZSBXaGVlbEV2ZW50UGhhc2U6OkNhbmNlbGxlZDoK
KyAgICAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNhbmNlbGxlZDsKKyAg
ICBjYXNlIFdoZWVsRXZlbnRQaGFzZTo6TWF5QmVnaW46CisgICAgICAgIHJldHVybiBXZWJXaGVl
bEV2ZW50OjpQaGFzZTo6UGhhc2VNYXlCZWdpbjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZVdo
ZWVsRXZlbnQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBkb3VibGUgZGVsdGFYLCBk
b3VibGUgZGVsdGFZLCBpbnQgeCwgaW50IHksIFdoZWVsRXZlbnRQaGFzZSBwaGFzZSwgV2hlZWxF
dmVudFBoYXNlIG1vbWVudHVtUGhhc2UpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRl
KiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisgICAgaWYgKHByaXYtPmRpYWxvZykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW50IHhSb290LCB5Um9vdDsKKyNpZiBVU0UoR1RLNCkKKyAgICB4
Um9vdCA9IHg7CisgICAgeVJvb3QgPSB5OworI2Vsc2UKKyAgICBnZGtfd2luZG93X2dldF9yb290
X2Nvb3JkcyhndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVCh3ZWJWaWV3QmFzZSkpLCB4
LCB5LCAmeFJvb3QsICZ5Um9vdCk7CisjZW5kaWYKKworICAgIEZsb2F0U2l6ZSB3aGVlbFRpY2tz
KGRlbHRhWCwgZGVsdGFZKTsKKyAgICBGbG9hdFNpemUgZGVsdGEod2hlZWxUaWNrcyk7CisgICAg
ZGVsdGEuc2NhbGUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0
ZXAoKSkpOworCisgICAgcHJpdi0+cGFnZVByb3h5LT5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdl
YldoZWVsRXZlbnQoeyB4LCB5IH0sIHsgeFJvb3QsIHlSb290IH0sIGRlbHRhLCB3aGVlbFRpY2tz
LCB0b1dlYktpdFdoZWVsRXZlbnRQaGFzZShwaGFzZSksIHRvV2ViS2l0V2hlZWxFdmVudFBoYXNl
KG1vbWVudHVtUGhhc2UpKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlSW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZmFlZWE0YTc1OWNkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZUludGVy
bmFsLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdl
YlZpZXdCYXNlIFdlYktpdFdlYlZpZXdCYXNlOworCitlbnVtIGNsYXNzIE1vdXNlRXZlbnRUeXBl
IHsgUHJlc3MsIFJlbGVhc2UsIE1vdGlvbiB9Owordm9pZCB3ZWJraXRXZWJWaWV3QmFzZVN5bnRo
ZXNpemVNb3VzZUV2ZW50KFdlYktpdFdlYlZpZXdCYXNlKiwgTW91c2VFdmVudFR5cGUgdHlwZSwg
dW5zaWduZWQgYnV0dG9uLCB1bnNpZ25lZCBzaG9ydCBidXR0b25zLCBpbnQgeCwgaW50IHksIHVu
c2lnbmVkIG1vZGlmaWVycywgaW50IGNsaWNrQ291bnQpOworCit2b2lkIHdlYmtpdFdlYlZpZXdC
YXNlU3ludGhlc2l6ZUtleUV2ZW50KFdlYktpdFdlYlZpZXdCYXNlKiwgdW5zaWduZWQga2V5VmFs
LCB1bnNpZ25lZCBtb2RpZmllcnMpOworCitlbnVtIGNsYXNzIFdoZWVsRXZlbnRQaGFzZSB7IE5v
UGhhc2UsIEJlZ2FuLCBDaGFuZ2VkLCBFbmRlZCwgQ2FuY2VsbGVkLCBNYXlCZWdpbiB9Owordm9p
ZCB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVXaGVlbEV2ZW50KFdlYktpdFdlYlZpZXdCYXNl
KiwgZG91YmxlIGRlbHRhWCwgZG91YmxlIGRlbHRhWSwgaW50IHgsIGludCB5LCBXaGVlbEV2ZW50
UGhhc2UsIFdoZWVsRXZlbnRQaGFzZSBtb21lbnR1bVBoYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKaW5kZXggMjI5NTRlMzQ5Y2QzLi42ZTFiODhkYjI5ODkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0xNzY2LDcgKzE3NjYsOSBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogICAgIHZvaWQgc2V0SGFzRXhlY3V0ZWRBcHBCb3VuZEJlaGF2aW9y
QmVmb3JlTmF2aWdhdGlvbigpIHsgbV9oYXNFeGVjdXRlZEFwcEJvdW5kQmVoYXZpb3JCZWZvcmVO
YXZpZ2F0aW9uID0gdHJ1ZTsgfQotICAgICAgICAKKworICAgIFdlYlBvcHVwTWVudVByb3h5KiBh
Y3RpdmVQb3B1cE1lbnUoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZVBvcHVwTWVudS5nZXQoKTsg
fQorCiBwcml2YXRlOgogICAgIFdlYlBhZ2VQcm94eShQYWdlQ2xpZW50JiwgV2ViUHJvY2Vzc1By
b3h5JiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogICAgIHZvaWQgcGxhdGZvcm1J
bml0aWFsaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvS2V5
QmluZGluZ1RyYW5zbGF0b3IuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0tleUJp
bmRpbmdUcmFuc2xhdG9yLmNwcAppbmRleCA2YmUyMzJlNDJlZWIuLjZkYjI0YjcxMzU5YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvS2V5QmluZGluZ1RyYW5zbGF0
b3IuY3BwCkBAIC0yMTcsMjEgKzIxNywyNiBAQCBzdGF0aWMgY29uc3QgS2V5Q29tYmluYXRpb25F
bnRyeSBjdXN0b21LZXlCaW5kaW5nc1tdID0gewogICAgIHsgR0RLX0tFWV9WLCAgICAgICAgIEdE
S19DT05UUk9MX01BU0sgfCBHREtfU0hJRlRfTUFTSywgIlBhc3RlQXNQbGFpblRleHQiIH0sCiB9
OwogCi1zdGF0aWMgVmVjdG9yPFN0cmluZz4gaGFuZGxlQ3VzdG9tS2V5QmluZGluZ3ModW5zaWdu
ZWQga2V5dmFsLCBHZGtNb2RpZmllclR5cGUgc3RhdGUpCitzdGF0aWMgVmVjdG9yPFN0cmluZz4g
aGFuZGxlS2V5QmluZGluZ3NGb3JNYXAoY29uc3QgS2V5Q29tYmluYXRpb25FbnRyeSogbWFwLCB1
bnNpZ25lZCBtYXBTaXplLCB1bnNpZ25lZCBrZXl2YWwsIEdka01vZGlmaWVyVHlwZSBzdGF0ZSkK
IHsKICAgICAvLyBGb3Iga2V5cHJlc3MgZXZlbnRzLCB3ZSB3YW50IGNoYXJDb2RlKCksIGJ1dCBr
ZXlDb2RlKCkgZG9lcyB0aGF0LgogICAgIHVuc2lnbmVkIG1hcEtleSA9IChzdGF0ZSAmIChHREtf
U0hJRlRfTUFTSyB8IEdES19DT05UUk9MX01BU0sgfCBHREtfTU9EMV9NQVNLKSkgPDwgMTYgfCBr
ZXl2YWw7CiAgICAgaWYgKCFtYXBLZXkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKGN1c3RvbUtleUJpbmRpbmdzKTsgKytp
KSB7Ci0gICAgICAgIGlmIChtYXBLZXkgPT0gKGN1c3RvbUtleUJpbmRpbmdzW2ldLnN0YXRlIDw8
IDE2IHwgY3VzdG9tS2V5QmluZGluZ3NbaV0uZ2RrS2V5Q29kZSkpCi0gICAgICAgICAgICByZXR1
cm4geyBjdXN0b21LZXlCaW5kaW5nc1tpXS5uYW1lIH07CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1hcFNpemU7ICsraSkgeworICAgICAgICBpZiAobWFwS2V5ID09IChtYXBbaV0uc3Rh
dGUgPDwgMTYgfCBtYXBbaV0uZ2RrS2V5Q29kZSkpCisgICAgICAgICAgICByZXR1cm4geyBtYXBb
aV0ubmFtZSB9OwogICAgIH0KIAogICAgIHJldHVybiB7IH07CiB9CiAKK3N0YXRpYyBWZWN0b3I8
U3RyaW5nPiBoYW5kbGVDdXN0b21LZXlCaW5kaW5ncyh1bnNpZ25lZCBrZXl2YWwsIEdka01vZGlm
aWVyVHlwZSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gaGFuZGxlS2V5QmluZGluZ3NGb3JNYXAoY3Vz
dG9tS2V5QmluZGluZ3MsIEdfTl9FTEVNRU5UUyhjdXN0b21LZXlCaW5kaW5ncyksIGtleXZhbCwg
c3RhdGUpOworfQorCiAjaWYgVVNFKEdUSzQpCiBWZWN0b3I8U3RyaW5nPiBLZXlCaW5kaW5nVHJh
bnNsYXRvcjo6Y29tbWFuZHNGb3JLZXlFdmVudChHdGtFdmVudENvbnRyb2xsZXJLZXkqIGNvbnRy
b2xsZXIpCiB7CkBAIC0yNjEsNCArMjY2LDcwIEBAIFZlY3RvcjxTdHJpbmc+IEtleUJpbmRpbmdU
cmFuc2xhdG9yOjpjb21tYW5kc0ZvcktleUV2ZW50KEdka0V2ZW50S2V5KiBldmVudCkKIH0KICNl
bmRpZgogCitzdGF0aWMgY29uc3QgS2V5Q29tYmluYXRpb25FbnRyeSBwcmVkZWZpbmVkS2V5Qmlu
ZGluZ3NbXSA9IHsKKyAgICB7IEdES19LRVlfTGVmdCwgICAgICAgICAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJNb3ZlTGVmdCIgfSwKKyAgICB7IEdES19LRVlfS1BfTGVmdCwg
ICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlTGVmdCIgfSwKKyAg
ICB7IEdES19LRVlfTGVmdCwgICAgICAgICBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAgICAg
ICAgICJNb3ZlQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZX0tQ
X0xlZnQsICAgICAgR0RLX1NISUZUX01BU0ssICAgICAgICAgICAgICAgICAgICAiTW92ZUJhY2t3
YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9MZWZ0LCAgICAgICAgIEdE
S19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgICAgIk1vdmVXb3JkQmFja3dhcmQiIH0sCisg
ICAgeyBHREtfS0VZX0tQX0xlZnQsICAgICAgR0RLX0NPTlRST0xfTUFTSywgICAgICAgICAgICAg
ICAgICAiTW92ZVdvcmRCYWNrd2FyZCIgfSwKKyAgICB7IEdES19LRVlfTGVmdCwgICAgICAgICBH
REtfQ09OVFJPTF9NQVNLIHwgR0RLX1NISUZUX01BU0ssICJNb3ZlV29yZEJhY2t3YXJkQW5kTW9k
aWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9LUF9MZWZ0LCAgICAgIEdES19DT05UUk9M
X01BU0sgfCBHREtfU0hJRlRfTUFTSywgIk1vdmVXb3JkQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rp
byIgfSwKKyAgICB7IEdES19LRVlfUmlnaHQsICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJNb3ZlUmlnaHQiIH0sCisgICAgeyBHREtfS0VZX0tQX1JpZ2h0LCAgICAg
MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVJpZ2h0IiB9LAorICAgIHsg
R0RLX0tFWV9SaWdodCwgICAgICAgIEdES19TSElGVF9NQVNLLCAgICAgICAgICAgICAgICAgICAg
Ik1vdmVGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9LUF9SaWdo
dCwgICAgIEdES19TSElGVF9NQVNLLCAgICAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkQW5k
TW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9SaWdodCwgICAgICAgIEdES19DT05U
Uk9MX01BU0ssICAgICAgICAgICAgICAgICAgIk1vdmVXb3JkRm9yd2FyZCIgfSwKKyAgICB7IEdE
S19LRVlfS1BfUmlnaHQsICAgICBHREtfQ09OVFJPTF9NQVNLLCAgICAgICAgICAgICAgICAgICJN
b3ZlV29yZEZvcndhcmQiIH0sCisgICAgeyBHREtfS0VZX1JpZ2h0LCAgICAgICAgR0RLX0NPTlRS
T0xfTUFTSyB8IEdES19TSElGVF9NQVNLLCAiTW92ZVdvcmRGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0
aW9uIiB9LAorICAgIHsgR0RLX0tFWV9LUF9SaWdodCwgICAgIEdES19DT05UUk9MX01BU0sgfCBH
REtfU0hJRlRfTUFTSywgIk1vdmVXb3JkRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIgfSwKKyAg
ICB7IEdES19LRVlfVXAsICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJNb3ZlVXAiIH0sCisgICAgeyBHREtfS0VZX0tQX1VwLCAgICAgICAgMCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVVwIiB9LAorICAgIHsgR0RLX0tFWV9VcCwgICAg
ICAgICAgIEdES19TSElGVF9NQVNLLCAgICAgICAgICAgICAgICAgICAgIk1vdmVVcEFuZE1vZGlm
eVNlbGVjdGlvbiIgfSwKKyAgICB7IEdES19LRVlfS1BfVXAsICAgICAgICBHREtfU0hJRlRfTUFT
SywgICAgICAgICAgICAgICAgICAgICJNb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAg
eyBHREtfS0VZX0Rvd24sICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiTW92ZURvd24iIH0sCisgICAgeyBHREtfS0VZX0tQX0Rvd24sICAgICAgMCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiTW92ZURvd24iIH0sCisgICAgeyBHREtfS0VZX0Rvd24s
ICAgICAgICAgR0RLX1NISUZUX01BU0ssICAgICAgICAgICAgICAgICAgICAiTW92ZURvd25BbmRN
b2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZX0tQX0Rvd24sICAgICAgR0RLX1NISUZU
X01BU0ssICAgICAgICAgICAgICAgICAgICAiTW92ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iIH0s
CisgICAgeyBHREtfS0VZX0hvbWUsICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lIiB9LAorICAgIHsgR0RLX0tFWV9LUF9Ib21l
LCAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVUb0JlZ2lubmlu
Z09mTGluZSIgfSwKKyAgICB7IEdES19LRVlfSG9tZSwgICAgICAgICBHREtfU0hJRlRfTUFTSywg
ICAgICAgICAgICAgICAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rp
b24iIH0sCisgICAgeyBHREtfS0VZX0tQX0hvbWUsICAgICAgR0RLX1NISUZUX01BU0ssICAgICAg
ICAgICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiB9
LAorICAgIHsgR0RLX0tFWV9Ib21lLCAgICAgICAgIEdES19DT05UUk9MX01BU0ssICAgICAgICAg
ICAgICAgICAgIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQiIH0sCisgICAgeyBHREtfS0VZX0tQ
X0hvbWUsICAgICAgR0RLX0NPTlRST0xfTUFTSywgICAgICAgICAgICAgICAgICAiTW92ZVRvQmVn
aW5uaW5nT2ZEb2N1bWVudCIgfSwKKyAgICB7IEdES19LRVlfSG9tZSwgICAgICAgICBHREtfQ09O
VFJPTF9NQVNLIHwgR0RLX1NISUZUX01BU0ssICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50QW5k
TW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9LUF9Ib21lLCAgICAgIEdES19DT05U
Uk9MX01BU0sgfCBHREtfU0hJRlRfTUFTSywgIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnRBbmRN
b2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZX0VuZCwgICAgICAgICAgMCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZMaW5lIiB9LAorICAgIHsgR0RL
X0tFWV9LUF9FbmQsICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1v
dmVUb0VuZE9mTGluZSIgfSwKKyAgICB7IEdES19LRVlfRW5kLCAgICAgICAgICBHREtfU0hJRlRf
TUFTSywgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rp
b24iIH0sCisgICAgeyBHREtfS0VZX0tQX0VuZCwgICAgICAgR0RLX1NISUZUX01BU0ssICAgICAg
ICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAg
IHsgR0RLX0tFWV9FbmQsICAgICAgICAgIEdES19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAg
ICAgIk1vdmVUb0VuZE9mRG9jdW1lbnQiIH0sCisgICAgeyBHREtfS0VZX0tQX0VuZCwgICAgICAg
R0RLX0NPTlRST0xfTUFTSywgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZEb2N1bWVudCIg
fSwKKyAgICB7IEdES19LRVlfRW5kLCAgICAgICAgICBHREtfQ09OVFJPTF9NQVNLIHwgR0RLX1NI
SUZUX01BU0ssICJNb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAg
IHsgR0RLX0tFWV9LUF9FbmQsICAgICAgIEdES19DT05UUk9MX01BU0sgfCBHREtfU0hJRlRfTUFT
SywgIk1vdmVUb0VuZE9mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtf
S0VZX1BhZ2VfVXAsICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92
ZVBhZ2VVcCIgfSwKKyAgICB7IEdES19LRVlfS1BfUGFnZV9VcCwgICAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZVVwIiB9LAorICAgIHsgR0RLX0tFWV9QYWdlX1Vw
LCAgICAgIEdES19TSElGVF9NQVNLLCAgICAgICAgICAgICAgICAgICAgIk1vdmVQYWdlVXBBbmRN
b2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZX0tQX1BhZ2VfVXAsICAgR0RLX1NISUZU
X01BU0ssICAgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbiIg
fSwKKyAgICB7IEdES19LRVlfUGFnZV9Eb3duLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJNb3ZlUGFnZURvd24iIH0sCisgICAgeyBHREtfS0VZX0tQX1BhZ2VfRG93biwg
MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VEb3duIiB9LAorICAg
IHsgR0RLX0tFWV9QYWdlX0Rvd24sICAgIEdES19TSElGVF9NQVNLLCAgICAgICAgICAgICAgICAg
ICAgIk1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgfSwKKyAgICB7IEdES19LRVlfS1Bf
UGFnZV9Eb3duLCBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZURv
d25BbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZX0RlbGV0ZSwgICAgICAgMCwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVsZXRlRm9yd2FyZCIgfSwKKyAgICB7
IEdES19LRVlfS1BfRGVsZXRlLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJEZWxldGVGb3J3YXJkIiB9LAorICAgIHsgR0RLX0tFWV9EZWxldGUsICAgICAgIEdES19DT05U
Uk9MX01BU0ssICAgICAgICAgICAgICAgICAgIkRlbGV0ZVdvcmRGb3J3YXJkIiB9LAorICAgIHsg
R0RLX0tFWV9LUF9EZWxldGUsICAgIEdES19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgICAg
IkRlbGV0ZVdvcmRGb3J3YXJkIiB9LAorICAgIHsgR0RLX0tFWV9CYWNrU3BhY2UsICAgIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlbGV0ZUJhY2t3YXJkIiB9LAorICAgIHsg
R0RLX0tFWV9CYWNrU3BhY2UsICAgIEdES19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgICAg
IkRlbGV0ZVdvcmRCYWNrd2FyZCIgfQorfTsKKworVmVjdG9yPFN0cmluZz4gS2V5QmluZGluZ1Ry
YW5zbGF0b3I6OmNvbW1hbmRzRm9yS2V5dmFsKHVuc2lnbmVkIGtleXZhbCwgdW5zaWduZWQgbW9k
aWZpZXJzKQoreworICAgIGF1dG8gY29tbWFuZHMgPSBoYW5kbGVLZXlCaW5kaW5nc0Zvck1hcChw
cmVkZWZpbmVkS2V5QmluZGluZ3MsIEdfTl9FTEVNRU5UUyhwcmVkZWZpbmVkS2V5QmluZGluZ3Mp
LCBrZXl2YWwsIHN0YXRpY19jYXN0PEdka01vZGlmaWVyVHlwZT4obW9kaWZpZXJzKSk7CisgICAg
aWYgKCFjb21tYW5kcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBjb21tYW5kczsKKworICAg
IHJldHVybiBoYW5kbGVDdXN0b21LZXlCaW5kaW5ncyhrZXl2YWwsIHN0YXRpY19jYXN0PEdka01v
ZGlmaWVyVHlwZT4obW9kaWZpZXJzKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9y
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuaApp
bmRleCA0YzQzYWM3MzI3NmMuLmZlMDRjMWZmNDQxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmgKQEAgLTQ0LDYgKzQ0LDggQEAg
cHVibGljOgogI2Vsc2UKICAgICBWZWN0b3I8U3RyaW5nPiBjb21tYW5kc0ZvcktleUV2ZW50KEdk
a0V2ZW50S2V5Kik7CiAjZW5kaWYKKyAgICBWZWN0b3I8U3RyaW5nPiBjb21tYW5kc0ZvcktleXZh
bCh1bnNpZ25lZCBrZXl2YWwsIHVuc2lnbmVkIG1vZGlmaWVycyk7CisKICAgICB2b2lkIGFkZFBl
bmRpbmdFZGl0b3JDb21tYW5kKGNvbnN0IGNoYXIqIGNvbW1hbmQpIHsgbV9wZW5kaW5nRWRpdG9y
Q29tbWFuZHMuYXBwZW5kKGNvbW1hbmQpOyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKaW5kZXgg
NDlmYTY4NWMzN2JkLi5mZDY2OWI0YzVhNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKQEAgLTEwMCw2ICsxMDAs
NyBAQCBzdGF0aWMgdm9pZCBwb3B1cE1lbnVXaWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQsIGNvbnN0
IEdka0V2ZW50KiB0cmlnZ2VyRXZlbnQsIGNvbgogICAgICAgICBnZGtfZXZlbnRfc2V0X2Rldmlj
ZShrZXlFdmVudC5nZXQoKSwgZ2RrX3NlYXRfZ2V0X2tleWJvYXJkKGdka19kaXNwbGF5X2dldF9k
ZWZhdWx0X3NlYXQoZ2RrX3dpbmRvd19nZXRfZGlzcGxheSh3aW5kb3cpKSkpOwogICAgICAgICBh
dXRvKiBldmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnRLZXkqPihrZXlFdmVudC5nZXQo
KSk7CiAgICAgICAgIGV2ZW50LT53aW5kb3cgPSB3aW5kb3c7CisgICAgICAgIGdfb2JqZWN0X3Jl
Zih3aW5kb3cpOwogICAgICAgICBldmVudC0+dGltZSA9IEdES19DVVJSRU5UX1RJTUU7CiAgICAg
ICAgIGV2ZW50LT5rZXl2YWwgPSBHREtfS0VZX01lbnU7CiAgICAgICAgIHRyaWdnZXJFdmVudCA9
IGtleUV2ZW50LmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3Rr
L1dlYlBvcHVwTWVudVByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9X
ZWJQb3B1cE1lbnVQcm94eUd0ay5jcHAKaW5kZXggNDY0ZGU2Y2NiOWM2Li45MTU1MmU4ZjY3Yzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94
eUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVBy
b3h5R3RrLmNwcApAQCAtOTAsNiArOTAsMjcgQEAgYm9vbCBXZWJQb3B1cE1lbnVQcm94eUd0azo6
YWN0aXZhdGVJdGVtQXRQYXRoKEd0a1RyZWVQYXRoKiBwYXRoKQogICAgIHJldHVybiB0cnVlOwog
fQogCitib29sIFdlYlBvcHVwTWVudVByb3h5R3RrOjpoYW5kbGVLZXlQcmVzcyh1bnNpZ25lZCBr
ZXl2YWwsIHVpbnQzMl90IHRpbWVzdGFtcCkKK3sKKyAgICBpZiAoa2V5dmFsID09IEdES19LRVlf
RXNjYXBlKSB7CisgICAgICAgIGhpZGVQb3B1cE1lbnUoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVBaGVhZEZpbmQoa2V5dmFsLCB0aW1lc3RhbXApOwor
fQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5R3RrOjphY3RpdmF0ZVNlbGVjdGVkSXRlbSgpCit7
CisgICAgR3RrVHJlZU1vZGVsKiBtb2RlbDsKKyAgICBHdGtUcmVlSXRlciBpdGVyOworICAgIGlm
ICghZ3RrX3RyZWVfc2VsZWN0aW9uX2dldF9zZWxlY3RlZChndGtfdHJlZV92aWV3X2dldF9zZWxl
Y3Rpb24oR1RLX1RSRUVfVklFVyhtX3RyZWVWaWV3KSksICZtb2RlbCwgJml0ZXIpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBHVW5pcXVlUHRyPEd0a1RyZWVQYXRoPiBwYXRoKGd0a190cmVlX21v
ZGVsX2dldF9wYXRoKG1vZGVsLCAmaXRlcikpOworICAgIGFjdGl2YXRlSXRlbUF0UGF0aChwYXRo
LmdldCgpKTsKK30KKwogdm9pZCBXZWJQb3B1cE1lbnVQcm94eUd0azo6dHJlZVZpZXdSb3dBY3Rp
dmF0ZWRDYWxsYmFjayhHdGtUcmVlVmlldyosIEd0a1RyZWVQYXRoKiBwYXRoLCBHdGtUcmVlVmll
d0NvbHVtbiosIFdlYlBvcHVwTWVudVByb3h5R3RrKiBwb3B1cE1lbnUpCiB7CiAgICAgcG9wdXBN
ZW51LT5hY3RpdmF0ZUl0ZW1BdFBhdGgocGF0aCk7CkBAIC0xMjAsMjMgKzE0MSwxOCBAQCBnYm9v
bGVhbiBXZWJQb3B1cE1lbnVQcm94eUd0azo6YnV0dG9uUHJlc3NFdmVudENhbGxiYWNrKEd0a1dp
ZGdldCogd2lkZ2V0LCBHZGtFdgogICAgIHJldHVybiBUUlVFOwogfQogCi1nYm9vbGVhbiBXZWJQ
b3B1cE1lbnVQcm94eUd0azo6a2V5UHJlc3NFdmVudENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0
LCBHZGtFdmVudEtleSogZXZlbnQsIFdlYlBvcHVwTWVudVByb3h5R3RrKiBwb3B1cE1lbnUpCitn
Ym9vbGVhbiBXZWJQb3B1cE1lbnVQcm94eUd0azo6a2V5UHJlc3NFdmVudENhbGxiYWNrKEd0a1dp
ZGdldCogd2lkZ2V0LCBHZGtFdmVudCogZXZlbnQsIFdlYlBvcHVwTWVudVByb3h5R3RrKiBwb3B1
cE1lbnUpCiB7CiAgICAgaWYgKCFwb3B1cE1lbnUtPm1fZGV2aWNlKQogICAgICAgICByZXR1cm4g
RkFMU0U7CiAKICAgICBndWludCBrZXl2YWw7Ci0gICAgZ2RrX2V2ZW50X2dldF9rZXl2YWwocmVp
bnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgJmtleXZhbCk7Ci0gICAgaWYgKGtleXZh
bCA9PSBHREtfS0VZX0VzY2FwZSkgewotICAgICAgICBwb3B1cE1lbnUtPmhpZGVQb3B1cE1lbnUo
KTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0gICAgaWYgKHBvcHVwTWVudS0+dHlw
ZUFoZWFkRmluZChldmVudCkpCisgICAgZ2RrX2V2ZW50X2dldF9rZXl2YWwoZXZlbnQsICZrZXl2
YWwpOworICAgIGlmIChwb3B1cE1lbnUtPmhhbmRsZUtleVByZXNzKGtleXZhbCwgZ2RrX2V2ZW50
X2dldF90aW1lKGV2ZW50KSkpCiAgICAgICAgIHJldHVybiBUUlVFOwogCiAgICAgLy8gRm9yd2Fy
ZCB0aGUgZXZlbnQgdG8gdGhlIHRyZWUgdmlldy4KLSAgICBndGtfd2lkZ2V0X2V2ZW50KHBvcHVw
TWVudS0+bV90cmVlVmlldywgcmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSk7Cisg
ICAgZ3RrX3dpZGdldF9ldmVudChwb3B1cE1lbnUtPm1fdHJlZVZpZXcsIGV2ZW50KTsKICAgICBy
ZXR1cm4gVFJVRTsKIH0KIApAQCAtMzU3LDE1ICszNzMsMTIgQEAgdm9pZCBXZWJQb3B1cE1lbnVQ
cm94eUd0azo6Y2FuY2VsVHJhY2tpbmcoKQogICAgIGhpZGVQb3B1cE1lbnUoKTsKIH0KIAotT3B0
aW9uYWw8dW5zaWduZWQ+IFdlYlBvcHVwTWVudVByb3h5R3RrOjp0eXBlQWhlYWRGaW5kSW5kZXgo
R2RrRXZlbnRLZXkqIGV2ZW50KQorT3B0aW9uYWw8dW5zaWduZWQ+IFdlYlBvcHVwTWVudVByb3h5
R3RrOjp0eXBlQWhlYWRGaW5kSW5kZXgodW5zaWduZWQga2V5dmFsLCB1aW50MzJfdCB0aW1lKQog
ewotICAgIGd1aW50IGtleXZhbDsKLSAgICBnZGtfZXZlbnRfZ2V0X2tleXZhbChyZWludGVycHJl
dF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAma2V5dmFsKTsKICAgICBndW5pY2hhciBrZXljaGFy
ID0gZ2RrX2tleXZhbF90b191bmljb2RlKGtleXZhbCk7CiAgICAgaWYgKCFnX3VuaWNoYXJfaXNw
cmludChrZXljaGFyKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHVpbnQz
Ml90IHRpbWUgPSBnZGtfZXZlbnRfZ2V0X3RpbWUocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+
KGV2ZW50KSk7CiAgICAgaWYgKHRpbWUgPCBtX3ByZXZpb3VzS2V5RXZlbnRUaW1lKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCkBAIC00MjcsOSArNDQwLDkgQEAgT3B0aW9uYWw8dW5z
aWduZWQ+IFdlYlBvcHVwTWVudVByb3h5R3RrOjp0eXBlQWhlYWRGaW5kSW5kZXgoR2RrRXZlbnRL
ZXkqIGV2ZW50KQogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLWJvb2wgV2ViUG9wdXBN
ZW51UHJveHlHdGs6OnR5cGVBaGVhZEZpbmQoR2RrRXZlbnRLZXkqIGV2ZW50KQorYm9vbCBXZWJQ
b3B1cE1lbnVQcm94eUd0azo6dHlwZUFoZWFkRmluZCh1bnNpZ25lZCBrZXl2YWwsIHVpbnQzMl90
IHRpbWVzdGFtcCkKIHsKLSAgICBhdXRvIHNlYXJjaEluZGV4ID0gdHlwZUFoZWFkRmluZEluZGV4
KGV2ZW50KTsKKyAgICBhdXRvIHNlYXJjaEluZGV4ID0gdHlwZUFoZWFkRmluZEluZGV4KGtleXZh
bCwgdGltZXN0YW1wKTsKICAgICBpZiAoIXNlYXJjaEluZGV4KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1l
bnVQcm94eUd0ay5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVBy
b3h5R3RrLmgKaW5kZXggNTU3NWM3ODgzYjhiLi42Y2I3NGJlY2I3MjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5oCkBAIC0yOSwx
MCArMjksMTAgQEAKIHR5cGVkZWYgc3RydWN0IF9HTWFpbkxvb3AgR01haW5Mb29wOwogdHlwZWRl
ZiBzdHJ1Y3QgX0dka0RldmljZSBHZGtEZXZpY2U7CiB0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRC
dXR0b24gR2RrRXZlbnRCdXR0b247Ci10eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRLZXkgR2RrRXZl
bnRLZXk7CiB0eXBlZGVmIHN0cnVjdCBfR3RrVHJlZVBhdGggR3RrVHJlZVBhdGg7CiB0eXBlZGVm
IHN0cnVjdCBfR3RrVHJlZVZpZXcgR3RrVHJlZVZpZXc7CiB0eXBlZGVmIHN0cnVjdCBfR3RrVHJl
ZVZpZXdDb2x1bW4gR3RrVHJlZVZpZXdDb2x1bW47Cit0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBH
ZGtFdmVudDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50UmVjdDsKQEAgLTU3LDYg
KzU3LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RJdGVtKHVuc2lnbmVkIGl0
ZW1JbmRleCk7CiAgICAgdmlydHVhbCB2b2lkIGFjdGl2YXRlSXRlbShPcHRpb25hbDx1bnNpZ25l
ZD4gaXRlbUluZGV4KTsKIAorICAgIGJvb2wgaGFuZGxlS2V5UHJlc3ModW5zaWduZWQga2V5dmFs
LCB1aW50MzJfdCB0aW1lc3RhbXApOworICAgIHZvaWQgYWN0aXZhdGVTZWxlY3RlZEl0ZW0oKTsK
KwogcHJvdGVjdGVkOgogICAgIFdlYlBvcHVwTWVudVByb3h5R3RrKEd0a1dpZGdldCosIFdlYlBv
cHVwTWVudVByb3h5OjpDbGllbnQmKTsKIApAQCAtNjYsMTEgKzY5LDExIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjcmVhdGVQb3B1cE1lbnUoY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mLCBpbnQz
Ml90IHNlbGVjdGVkSW5kZXgpOwogICAgIHZvaWQgc2hvdygpOwogICAgIGJvb2wgYWN0aXZhdGVJ
dGVtQXRQYXRoKEd0a1RyZWVQYXRoKik7Ci0gICAgT3B0aW9uYWw8dW5zaWduZWQ+IHR5cGVBaGVh
ZEZpbmRJbmRleChHZGtFdmVudEtleSopOwotICAgIGJvb2wgdHlwZUFoZWFkRmluZChHZGtFdmVu
dEtleSopOworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiB0eXBlQWhlYWRGaW5kSW5kZXgodW5zaWdu
ZWQga2V5dmFsLCB1aW50MzJfdCB0aW1lc3RhbXApOworICAgIGJvb2wgdHlwZUFoZWFkRmluZCh1
bnNpZ25lZCBrZXl2YWwsIHVpbnQzMl90IHRpbWVzdGFtcCk7CiAKICAgICBzdGF0aWMgZ2Jvb2xl
YW4gYnV0dG9uUHJlc3NFdmVudENhbGxiYWNrKEd0a1dpZGdldCosIEdka0V2ZW50QnV0dG9uKiwg
V2ViUG9wdXBNZW51UHJveHlHdGsqKTsKLSAgICBzdGF0aWMgZ2Jvb2xlYW4ga2V5UHJlc3NFdmVu
dENhbGxiYWNrKEd0a1dpZGdldCosIEdka0V2ZW50S2V5KiwgV2ViUG9wdXBNZW51UHJveHlHdGsq
KTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4ga2V5UHJlc3NFdmVudENhbGxiYWNrKEd0a1dpZGdldCos
IEdka0V2ZW50KiwgV2ViUG9wdXBNZW51UHJveHlHdGsqKTsKICAgICBzdGF0aWMgdm9pZCB0cmVl
Vmlld1Jvd0FjdGl2YXRlZENhbGxiYWNrKEd0a1RyZWVWaWV3KiwgR3RrVHJlZVBhdGgqLCBHdGtU
cmVlVmlld0NvbHVtbiosIFdlYlBvcHVwTWVudVByb3h5R3RrKik7CiAgICAgc3RhdGljIGdib29s
ZWFuIHRyZWVWaWV3QnV0dG9uUmVsZWFzZUV2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiwgR2RrRXZl
bnRCdXR0b24qLCBXZWJQb3B1cE1lbnVQcm94eUd0ayopOwogCmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzM1YjUxOGY4Y2M5Li5kMzRiYmY2MDRj
MTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzNyBAQAorMjAyMC0wNS0yMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW1dUUl0gRXZlbnRTZW5kZXI6IHN0b3AgdXNpbmcgR2Rr
RXZlbnQgQVBJIGluIHByZXBhcmF0aW9uIGZvciBHVEs0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIyOTgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgV2ViS2l0V2ViVmlld0Jhc2UgaW50ZXJuYWwg
QVBJIHRvIHN5bnRoZXNpemUgZXZlbnRzIGluc3RlYWQgb2YgR2RrRXZlbnRzLiBUaGUgdG91Y2gg
ZXZlbnRzIHN1cHBvcnQgaGFzIGJlZW4KKyAgICAgICAgcmVtb3ZlZCBiZWNhdXNlIHdlIGFyZSBu
byBsb25nZXIgdGVzdGluZyB0b3VjaCBldmVudHMsIHNpbmNlIHRoZXkgbmVlZCBhbiBhY3R1YWwg
dG91Y2hzY3JlZW4uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJv
eHkuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2d0ay9FdmVudFNlbmRlclByb3h5R3Rr
LmNwcDoKKyAgICAgICAgKFdUUjo6Z2V0R0RLS2V5U3ltRm9yS2V5UmVmKToKKyAgICAgICAgKFdU
Ujo6dG9XZWJLaXRHTGliQVBJKToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6a2V5
RG93bik6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRG93bik6CisgICAg
ICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6Om1vdXNlVXApOgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRlclByb3h5Ojptb3VzZU1vdmVUbyk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJv
eHk6Om1vdXNlU2Nyb2xsQnkpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojpjb250
aW51b3VzTW91c2VTY3JvbGxCeSk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6Om1v
dXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyk6CisgICAgICAgIChXVFI6OkV2
ZW50U2VuZGVyUHJveHk6OmxlYXBGb3J3YXJkKToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQ
cm94eTo6YWRkVG91Y2hQb2ludCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnVw
ZGF0ZVRvdWNoUG9pbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojp0b3VjaFN0
YXJ0KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hNb3ZlKToKKyAgICAg
ICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hFbmQpOgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRlclByb3h5Ojp0b3VjaENhbmNlbCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJv
eHk6OmNsZWFyVG91Y2hQb2ludHMpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojpy
ZWxlYXNlVG91Y2hQb2ludCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OmNhbmNl
bFRvdWNoUG9pbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaFBv
aW50UmFkaXVzKToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2Rp
Zmllcik6CisKIDIwMjAtMDUtMjAgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtGbGF0UGFrIFNES10gTWlzc2luZyBydWJ5IGdlbXMganNvbiBhbmQg
aGlnaGxpbmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQ
cm94eS5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5LmgKaW5kZXgg
MTEzOTliMzkwZmU5Li5kOGEyNzIzYzIyMzcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZl
bnRTZW5kZXJQcm94eS5oCkBAIC0zMiwxMSArMzIsNiBAQAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBQTEFURk9STShHVEspCi0jaW5j
bHVkZSA8V2ViQ29yZS9HVW5pcXVlUHRyR3RrLmg+Ci0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2Vu
ZGlmCi0KICNpZiBQTEFURk9STShXUEUpCiAjaW5jbHVkZSA8d3BlL3dwZS5oPgogI2VuZGlmCkBA
IC00OSwxMCArNDQsNiBAQCBuYW1lc3BhY2UgV1RSIHsKIAogY2xhc3MgVGVzdENvbnRyb2xsZXI7
CiAKLSNpZiBQTEFURk9STShHVEspCi1zdHJ1Y3QgV1RSRXZlbnRRdWV1ZUl0ZW07Ci0jZW5kaWYK
LQogY2xhc3MgRXZlbnRTZW5kZXJQcm94eSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CkBAIC0xMDIsMTAgKzkzLDYgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgY3VycmVu
dEV2ZW50VGltZSgpIHsgcmV0dXJuIG1fdGltZTsgfQogICAgIHZvaWQgdXBkYXRlQ2xpY2tDb3Vu
dEZvckJ1dHRvbihpbnQgYnV0dG9uKTsKIAotI2lmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHJl
cGxheVNhdmVkRXZlbnRzKCk7Ci0jZW5kaWYKLQogICAgIHZvaWQgc2VuZE1vdXNlRG93blRvU3Rh
cnRQcmVzc3VyZUV2ZW50cygpOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGVudW0gY2xhc3Mg
UHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb24geyBJbmNyZWFzaW5nLCBEZWNyZWFzaW5nIH07CkBAIC0x
MTQsMTQgKzEwMSw2IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPE5TRXZlbnQ+IHByZXNzdXJl
Q2hhbmdlRXZlbnQoaW50IHN0YWdlLCBmbG9hdCBwcmVzc3VyZSwgUHJlc3N1cmVDaGFuZ2VEaXJl
Y3Rpb24pOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShHVEspCi0gICAgdm9pZCBzZW5kT3JRdWV1
ZUV2ZW50KEdka0V2ZW50Kik7Ci0gICAgdm9pZCBkaXNwYXRjaEV2ZW50KEdka0V2ZW50Kik7Ci0g
ICAgR2RrRXZlbnQqIGNyZWF0ZU1vdXNlQnV0dG9uRXZlbnQoR2RrRXZlbnRUeXBlLCB1bnNpZ25l
ZCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMpOwotICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGNy
ZWF0ZVRvdWNoRXZlbnQoR2RrRXZlbnRUeXBlLCBpbnQgaWQpOwotICAgIHZvaWQgc2VuZFVwZGF0
ZWRUb3VjaEV2ZW50cygpOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShXUEUpCiAgICAgVmVjdG9y
PHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfcmF3PiBnZXRVcGRhdGVkVG91Y2hFdmVudHMo
KTsKICAgICB2b2lkIHJlbW92ZVVwZGF0ZWRUb3VjaEV2ZW50cygpOwpAQCAtMTQwLDE3ICsxMTks
MTEgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgbV9jbGlja1RpbWU7CiAgICAgV0tQb2ludCBtX2Ns
aWNrUG9zaXRpb247CiAgICAgV0tFdmVudE1vdXNlQnV0dG9uIG1fY2xpY2tCdXR0b247CisgICAg
dW5zaWduZWQgbV9tb3VzZUJ1dHRvbnNDdXJyZW50bHlEb3duIHsgMCB9OwogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIGludCBldmVudE51bWJlcjsKLSAgICB1bnNpZ25lZCBtX21vdXNlQnV0dG9u
c0N1cnJlbnRseURvd24geyAwIH07Ci0jZWxpZiBQTEFURk9STShHVEspCi0gICAgRGVxdWU8V1RS
RXZlbnRRdWV1ZUl0ZW0+IG1fZXZlbnRRdWV1ZTsKLSAgICB1bnNpZ25lZCBtX21vdXNlQnV0dG9u
c0N1cnJlbnRseURvd24geyAwIH07Ci0gICAgVmVjdG9yPEdVbmlxdWVQdHI8R2RrRXZlbnQ+PiBt
X3RvdWNoRXZlbnRzOwotICAgIEhhc2hTZXQ8aW50PiBtX3VwZGF0ZWRUb3VjaEV2ZW50czsKICNl
bGlmIFBMQVRGT1JNKFdQRSkKICAgICB1aW50MzJfdCBtX2J1dHRvblN0YXRlOwotICAgIHVpbnQz
Ml90IG1fbW91c2VCdXR0b25zQ3VycmVudGx5RG93biB7IDAgfTsKICAgICBWZWN0b3I8c3RydWN0
IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXc+IG1fdG91Y2hFdmVudHM7CiAgICAgSGFzaFNldDx1
bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV91cGRhdGVkVG91Y2hFdmVudHM7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL0V2ZW50U2VuZGVyUHJveHlH
dGsuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvRXZlbnRTZW5kZXJQcm94eUd0ay5j
cHAKaW5kZXggODQ4MWYxZDdhNWUyLi5iODVlZjRlNzFkN2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvZ3RrL0V2ZW50U2VuZGVyUHJveHlHdGsuY3BwCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvZ3RrL0V2ZW50U2VuZGVyUHJveHlHdGsuY3BwCkBAIC0zNSwxMSArMzUs
MTAgQEAKIAogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgogI2luY2x1ZGUgIlRlc3RDb250
cm9sbGVyLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VJbnRlcm5hbC5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvR3RrVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtWZXJzaW9u
aW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPGdk
ay9nZGsuaD4KICNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgotI2luY2x1ZGUgPGd0ay9ndGsu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZUFy
cmF5Lmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgpAQCAtNTksMjIgKzU4LDYg
QEAgZW51bSBLZXlMb2NhdGlvbkNvZGUgewogfTsKIAogCi1zdHJ1Y3QgV1RSRXZlbnRRdWV1ZUl0
ZW0gewotICAgIEdka0V2ZW50KiBldmVudDsKLSAgICBndWxvbmcgZGVsYXk7Ci0KLSAgICBXVFJF
dmVudFF1ZXVlSXRlbSgpCi0gICAgICAgIDogZXZlbnQoMCkKLSAgICAgICAgLCBkZWxheSgwKQot
ICAgIHsKLSAgICB9Ci0gICAgV1RSRXZlbnRRdWV1ZUl0ZW0oR2RrRXZlbnQqIGV2ZW50LCBndWxv
bmcgZGVsYXkpCi0gICAgICAgIDogZXZlbnQoZXZlbnQpCi0gICAgICAgICwgZGVsYXkoZGVsYXkp
Ci0gICAgewotICAgIH0KLX07Ci0KIEV2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2VuZGVyUHJveHko
VGVzdENvbnRyb2xsZXIqIHRlc3RDb250cm9sbGVyKQogICAgIDogbV90ZXN0Q29udHJvbGxlcih0
ZXN0Q29udHJvbGxlcikKICAgICAsIG1fdGltZSgwKQpAQCAtMTE5LDI4ICsxMDIsNiBAQCBzdGF0
aWMgZ3VpbnQgd2Via2l0TW9kaWZpZXJzVG9HREtNb2RpZmllcnMoV0tFdmVudE1vZGlmaWVycyB3
a01vZGlmaWVycykKICAgICByZXR1cm4gbW9kaWZpZXJzOwogfQogCi1HZGtFdmVudCogRXZlbnRT
ZW5kZXJQcm94eTo6Y3JlYXRlTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUgZXZlbnRUeXBl
LCB1bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzKQotewotICAgIEdk
a0V2ZW50KiBtb3VzZUV2ZW50ID0gZ2RrX2V2ZW50X25ldyhldmVudFR5cGUpOwotCi0gICAgbW91
c2VFdmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKLSAgICBtb3VzZUV2ZW50LT5idXR0b24u
eCA9IG1fcG9zaXRpb24ueDsKLSAgICBtb3VzZUV2ZW50LT5idXR0b24ueSA9IG1fcG9zaXRpb24u
eTsKLSAgICBtb3VzZUV2ZW50LT5idXR0b24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93
KEdUS19XSURHRVQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3
KCkpKTsKLSAgICBnX29iamVjdF9yZWYobW91c2VFdmVudC0+YnV0dG9uLndpbmRvdyk7Ci0gICAg
Z2RrX2V2ZW50X3NldF9kZXZpY2UobW91c2VFdmVudCwgZ2RrX3NlYXRfZ2V0X3BvaW50ZXIoZ2Rr
X2Rpc3BsYXlfZ2V0X2RlZmF1bHRfc2VhdChnZGtfd2luZG93X2dldF9kaXNwbGF5KG1vdXNlRXZl
bnQtPmJ1dHRvbi53aW5kb3cpKSkpOwotICAgIG1vdXNlRXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IHdl
YmtpdE1vZGlmaWVyc1RvR0RLTW9kaWZpZXJzKG1vZGlmaWVycykgfCBtX21vdXNlQnV0dG9uc0N1
cnJlbnRseURvd247Ci0gICAgbW91c2VFdmVudC0+YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9U
SU1FOwotICAgIG1vdXNlRXZlbnQtPmJ1dHRvbi5heGVzID0gMDsKLQotICAgIGludCB4Um9vdCwg
eVJvb3Q7Ci0gICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMobW91c2VFdmVudC0+YnV0dG9u
LndpbmRvdywgbV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnksICZ4Um9vdCwgJnlSb290KTsKLSAg
ICBtb3VzZUV2ZW50LT5idXR0b24ueF9yb290ID0geFJvb3Q7Ci0gICAgbW91c2VFdmVudC0+YnV0
dG9uLnlfcm9vdCA9IHlSb290OwotCi0gICAgcmV0dXJuIG1vdXNlRXZlbnQ7Ci19Ci0KIHZvaWQg
RXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQgYnV0dG9uKQog
ewogICAgIGlmIChtX3RpbWUgLSBtX2NsaWNrVGltZSA8IDEgJiYgbV9wb3NpdGlvbiA9PSBtX2Ns
aWNrUG9zaXRpb24gJiYgYnV0dG9uID09IG1fY2xpY2tCdXR0b24pIHsKQEAgLTE1NSw0MSArMTE2
LDEyIEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihp
bnQgYnV0dG9uKQogICAgIG1fY2xpY2tCdXR0b24gPSBidXR0b247CiB9CiAKLXZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6ZGlzcGF0Y2hFdmVudChHZGtFdmVudCogZXZlbnQpCi17Ci0gICAgQVNTRVJU
KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCkpOwotICAgIGd0a19tYWluX2RvX2V2ZW50
KGV2ZW50KTsKLSAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6cmVwbGF5U2F2ZWRFdmVudHMoKQotewotICAgIHdoaWxlICghbV9ldmVudFF1ZXVl
LmlzRW1wdHkoKSkgewotICAgICAgICBXVFJFdmVudFF1ZXVlSXRlbSBpdGVtID0gbV9ldmVudFF1
ZXVlLnRha2VGaXJzdCgpOwotICAgICAgICBpZiAoaXRlbS5kZWxheSkKLSAgICAgICAgICAgIGdf
dXNsZWVwKGl0ZW0uZGVsYXkgKiAxMDAwKTsKLQotICAgICAgICBkaXNwYXRjaEV2ZW50KGl0ZW0u
ZXZlbnQpOwotICAgIH0KLX0KLQotdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kT3JRdWV1ZUV2
ZW50KEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBpZiAobV9ldmVudFF1ZXVlLmlzRW1wdHkoKSB8
fCAhbV9ldmVudFF1ZXVlLmxhc3QoKS5kZWxheSkgewotICAgICAgICBkaXNwYXRjaEV2ZW50KGV2
ZW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fZXZlbnRRdWV1ZS5sYXN0KCku
ZXZlbnQgPSBldmVudDsKLSAgICByZXBsYXlTYXZlZEV2ZW50cygpOwotfQotCi1pbnQgZ2V0R0RL
S2V5U3ltRm9yS2V5UmVmKFdLU3RyaW5nUmVmIGtleVJlZiwgdW5zaWduZWQgbG9jYXRpb24sIGd1
aW50KiBtb2RpZmllcnMpCitzdGF0aWMgaW50IGdldEdES0tleVN5bUZvcktleVJlZihXS1N0cmlu
Z1JlZiBrZXlSZWYsIHVuc2lnbmVkIGxvY2F0aW9uLCBndWludCogbW9kaWZpZXJzKQogewogICAg
IGlmIChsb2NhdGlvbiA9PSBET01LZXlMb2NhdGlvbk51bXBhZCkgewogICAgICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJsZWZ0QXJyb3ciKSkKICAgICAgICAg
ICAgIHJldHVybiBHREtfS0VZX0tQX0xlZnQ7Ci0gICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKGtleVJlZiwgInJpZ2h0QXJyb3IiKSkKKyAgICAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicmlnaHRBcnJvdyIpKQogICAgICAgICAgICAg
cmV0dXJuIEdES19LRVlfS1BfUmlnaHQ7CiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKGtleVJlZiwgInVwQXJyb3ciKSkKICAgICAgICAgICAgIHJldHVybiBHREtfS0VZ
X0tQX1VwOwpAQCAtMjk0LDI4ICsyMjYsMTcgQEAgaW50IGdldEdES0tleVN5bUZvcktleVJlZihX
S1N0cmluZ1JlZiBrZXlSZWYsIHVuc2lnbmVkIGxvY2F0aW9uLCBndWludCogbW9kaWZpZXIKICAg
ICByZXR1cm4gZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKHN0YXRpY19jYXN0PGd1aW50MzI+KGJ1ZmZl
ci5nZXQoKVswXSkpOwogfQogCitzdGF0aWMgaW5saW5lIFdlYktpdFdlYlZpZXdCYXNlKiB0b1dl
YktpdEdMaWJBUEkoUGxhdGZvcm1XS1ZpZXcgdmlldykKK3sKKyAgICAvLyBXZSB1c2UgYSBDIGNh
c3QgaGVyZSwgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgV2ViS2l0V2ViVmlld0Jh
c2UuaC4KKyAgICByZXR1cm4gKFdlYktpdFdlYlZpZXdCYXNlKil2aWV3OworfQorCiB2b2lkIEV2
ZW50U2VuZGVyUHJveHk6OmtleURvd24oV0tTdHJpbmdSZWYga2V5UmVmLCBXS0V2ZW50TW9kaWZp
ZXJzIHdrTW9kaWZpZXJzLCB1bnNpZ25lZCBsb2NhdGlvbikKIHsKICAgICBndWludCBtb2RpZmll
cnMgPSB3ZWJraXRNb2RpZmllcnNUb0dES01vZGlmaWVycyh3a01vZGlmaWVycyk7CiAgICAgaW50
IGdka0tleVN5bSA9IGdldEdES0tleVN5bUZvcktleVJlZihrZXlSZWYsIGxvY2F0aW9uLCAmbW9k
aWZpZXJzKTsKLQotICAgIEdka0V2ZW50KiBwcmVzc0V2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtf
S0VZX1BSRVNTKTsKLSAgICBwcmVzc0V2ZW50LT5rZXkua2V5dmFsID0gZ2RrS2V5U3ltOwotICAg
IHByZXNzRXZlbnQtPmtleS5zdGF0ZSA9IG1vZGlmaWVyczsKLSAgICBwcmVzc0V2ZW50LT5rZXku
d2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQobV90ZXN0Q29udHJvbGxl
ci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSkpOwotICAgIGdfb2JqZWN0X3JlZihw
cmVzc0V2ZW50LT5rZXkud2luZG93KTsKLSAgICBHZGtEaXNwbGF5KiBkaXNwbGF5ID0gZ2RrX3dp
bmRvd19nZXRfZGlzcGxheShwcmVzc0V2ZW50LT5rZXkud2luZG93KTsKLSAgICBnZGtfZXZlbnRf
c2V0X2RldmljZShwcmVzc0V2ZW50LCBnZGtfc2VhdF9nZXRfcG9pbnRlcihnZGtfZGlzcGxheV9n
ZXRfZGVmYXVsdF9zZWF0KGRpc3BsYXkpKSk7Ci0KLSAgICBHVW5pcXVlT3V0UHRyPEdka0tleW1h
cEtleT4ga2V5czsKLSAgICBnaW50IG5LZXlzOwotICAgIGlmIChnZGtfa2V5bWFwX2dldF9lbnRy
aWVzX2Zvcl9rZXl2YWwoZ2RrX2tleW1hcF9nZXRfZm9yX2Rpc3BsYXkoZGlzcGxheSksIGdka0tl
eVN5bSwgJmtleXMub3V0UHRyKCksICZuS2V5cykgJiYgbktleXMpCi0gICAgICAgIHByZXNzRXZl
bnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0ga2V5cy5nZXQoKVswXS5rZXljb2RlOwotCi0gICAg
R2RrRXZlbnQqIHJlbGVhc2VFdmVudCA9IGdka19ldmVudF9jb3B5KHByZXNzRXZlbnQpOwotICAg
IGRpc3BhdGNoRXZlbnQocHJlc3NFdmVudCk7Ci0gICAgcmVsZWFzZUV2ZW50LT5rZXkudHlwZSA9
IEdES19LRVlfUkVMRUFTRTsKLSAgICBkaXNwYXRjaEV2ZW50KHJlbGVhc2VFdmVudCk7CisgICAg
d2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplS2V5RXZlbnQodG9XZWJLaXRHTGliQVBJKG1fdGVz
dENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSwgZ2RrS2V5U3ltLCBt
b2RpZmllcnMpOwogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRG93bih1bnNpZ25l
ZCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMpCkBAIC0zMjgsNDAgKzI0OSwy
MyBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRG93bih1bnNpZ25lZCBidXR0b24sIFdL
RXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMpCiAgICAgaWYgKG1fbW91c2VCdXR0b25zQ3VycmVu
dGx5RG93biAmIG1vZGlmaWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBOb3JtYWxseSBH
REsgd2lsbCBzZW5kIGJvdGggR0RLX0JVVFRPTl9QUkVTUyBhbmQgR0RLXzJCVVRUT05fUFJFU1Mg
Zm9yCi0gICAgLy8gdGhlIHNlY29uZCBidXR0b24gcHJlc3MgZHVyaW5nIGRvdWJsZS1jbGlja3Mu
IFdlYktpdCBHVEsrIHNlbGVjdGl2ZWx5Ci0gICAgLy8gaWdub3JlcyB0aGUgZmlyc3QgR0RLX0JV
VFRPTl9QUkVTUyBvZiB0aGF0IHBhaXIgdXNpbmcgZ2RrX2V2ZW50X3BlZWsuCi0gICAgLy8gU2lu
Y2Ugb3VyIGV2ZW50cyBhcmVuJ3QgZXZlciBnb2luZyBvbnRvIHRoZSBHREsgZXZlbnQgcXVldWUs
IFdlYktpdCB3b24ndAotICAgIC8vIGJlIGFibGUgdG8gZmlsdGVyIG91dCB0aGUgZmlyc3QgR0RL
X0JVVFRPTl9QUkVTUywgc28gd2UganVzdCBkb24ndCBzZW5kCi0gICAgLy8gaXQgaGVyZS4gRXZl
bnR1YWxseSB0aGlzIGNvZGUgc2hvdWxkIHByb2JhYmx5IGZpZ3VyZSBvdXQgYSB3YXkgdG8gZ2V0
IGFsbAotICAgIC8vIGFwcHJvcHJpYXRlIGV2ZW50cyBvbnRvIHRoZSBldmVudCBxdWV1ZSBhbmQg
dGhpcyB3b3JrLWFyb3VuZCBzaG91bGQgYmUKLSAgICAvLyByZW1vdmVkLgogICAgIHVwZGF0ZUNs
aWNrQ291bnRGb3JCdXR0b24oYnV0dG9uKTsKLQotICAgIEdka0V2ZW50VHlwZSBldmVudFR5cGU7
Ci0gICAgaWYgKG1fY2xpY2tDb3VudCA9PSAyKQotICAgICAgICBldmVudFR5cGUgPSBHREtfMkJV
VFRPTl9QUkVTUzsKLSAgICBlbHNlIGlmIChtX2NsaWNrQ291bnQgPT0gMykKLSAgICAgICAgZXZl
bnRUeXBlID0gR0RLXzNCVVRUT05fUFJFU1M7Ci0gICAgZWxzZQotICAgICAgICBldmVudFR5cGUg
PSBHREtfQlVUVE9OX1BSRVNTOwotCi0gICAgR2RrRXZlbnQqIGV2ZW50ID0gY3JlYXRlTW91c2VC
dXR0b25FdmVudChldmVudFR5cGUsIGdka0J1dHRvbiwgd2tNb2RpZmllcnMpOwogICAgIG1fbW91
c2VCdXR0b25zQ3VycmVudGx5RG93biB8PSBtb2RpZmllcjsKLSAgICBzZW5kT3JRdWV1ZUV2ZW50
KGV2ZW50KTsKKworICAgIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZU1vdXNlRXZlbnQodG9X
ZWJLaXRHTGliQVBJKG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmll
dygpKSwKKyAgICAgICAgTW91c2VFdmVudFR5cGU6OlByZXNzLCBnZGtCdXR0b24sIG1fbW91c2VC
dXR0b25zQ3VycmVudGx5RG93biwgbV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnksIHdlYmtpdE1v
ZGlmaWVyc1RvR0RLTW9kaWZpZXJzKHdrTW9kaWZpZXJzKSwgbV9jbGlja0NvdW50KTsKIH0KIAog
dm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVVwKHVuc2lnbmVkIGJ1dHRvbiwgV0tFdmVudE1v
ZGlmaWVycyB3a01vZGlmaWVycykKIHsKLSAgICBtX2NsaWNrQnV0dG9uID0ga1dLRXZlbnRNb3Vz
ZUJ1dHRvbk5vQnV0dG9uOwogICAgIHVuc2lnbmVkIGdka0J1dHRvbiA9IGV2ZW50U2VuZGVyQnV0
dG9uVG9HREtCdXR0b24oYnV0dG9uKTsKLSAgICBHZGtFdmVudCogZXZlbnQgPSBjcmVhdGVNb3Vz
ZUJ1dHRvbkV2ZW50KEdES19CVVRUT05fUkVMRUFTRSwgZ2RrQnV0dG9uLCB3a01vZGlmaWVycyk7
CiAgICAgYXV0byBtb2RpZmllciA9IFdlYkNvcmU6OnN0YXRlTW9kaWZpZXJGb3JHZGtCdXR0b24o
Z2RrQnV0dG9uKTsKICAgICBtX21vdXNlQnV0dG9uc0N1cnJlbnRseURvd24gJj0gfm1vZGlmaWVy
OwotICAgIHNlbmRPclF1ZXVlRXZlbnQoZXZlbnQpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlU3lu
dGhlc2l6ZU1vdXNlRXZlbnQodG9XZWJLaXRHTGliQVBJKG1fdGVzdENvbnRyb2xsZXItPm1haW5X
ZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSwKKyAgICAgICAgTW91c2VFdmVudFR5cGU6OlJlbGVh
c2UsIGdka0J1dHRvbiwgbV9tb3VzZUJ1dHRvbnNDdXJyZW50bHlEb3duLCBtX3Bvc2l0aW9uLngs
IG1fcG9zaXRpb24ueSwgd2Via2l0TW9kaWZpZXJzVG9HREtNb2RpZmllcnMod2tNb2RpZmllcnMp
LCAwKTsKIAogICAgIG1fY2xpY2tQb3NpdGlvbiA9IG1fcG9zaXRpb247Ci0gICAgbV9jbGlja1Rp
bWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIG1fY2xpY2tUaW1lID0gbV90aW1lOwogfQogCiB2
b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlTW92ZVRvKGRvdWJsZSB4LCBkb3VibGUgeSkKQEAg
LTM2OSwyMyArMjczLDggQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZU1vdmVUbyhkb3Vi
bGUgeCwgZG91YmxlIHkpCiAgICAgbV9wb3NpdGlvbi54ID0geDsKICAgICBtX3Bvc2l0aW9uLnkg
PSB5OwogCi0gICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfTU9USU9OX05P
VElGWSk7Ci0gICAgZXZlbnQtPm1vdGlvbi54ID0gbV9wb3NpdGlvbi54OwotICAgIGV2ZW50LT5t
b3Rpb24ueSA9IG1fcG9zaXRpb24ueTsKLQotICAgIGV2ZW50LT5tb3Rpb24udGltZSA9IEdES19D
VVJSRU5UX1RJTUU7Ci0gICAgZXZlbnQtPm1vdGlvbi53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93
aW5kb3coR1RLX1dJREdFVChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9y
bVZpZXcoKSkpOwotICAgIGdfb2JqZWN0X3JlZihldmVudC0+bW90aW9uLndpbmRvdyk7Ci0gICAg
Z2RrX2V2ZW50X3NldF9kZXZpY2UoZXZlbnQsIGdka19zZWF0X2dldF9wb2ludGVyKGdka19kaXNw
bGF5X2dldF9kZWZhdWx0X3NlYXQoZ2RrX3dpbmRvd19nZXRfZGlzcGxheShldmVudC0+bW90aW9u
LndpbmRvdykpKSk7Ci0gICAgZXZlbnQtPm1vdGlvbi5zdGF0ZSA9IG1fbW91c2VCdXR0b25zQ3Vy
cmVudGx5RG93bjsKLSAgICBldmVudC0+bW90aW9uLmF4ZXMgPSAwOwotCi0gICAgaW50IHhSb290
LCB5Um9vdDsKLSAgICBnZGtfd2luZG93X2dldF9yb290X2Nvb3JkcyhndGtfd2lkZ2V0X2dldF93
aW5kb3coR1RLX1dJREdFVChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9y
bVZpZXcoKSkpLCBtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSAsICZ4Um9vdCwgJnlSb290KTsK
LSAgICBldmVudC0+bW90aW9uLnhfcm9vdCA9IHhSb290OwotICAgIGV2ZW50LT5tb3Rpb24ueV9y
b290ID0geVJvb3Q7Ci0KLSAgICBzZW5kT3JRdWV1ZUV2ZW50KGV2ZW50KTsKKyAgICB3ZWJraXRX
ZWJWaWV3QmFzZVN5bnRoZXNpemVNb3VzZUV2ZW50KHRvV2ViS2l0R0xpYkFQSShtX3Rlc3RDb250
cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSksCisgICAgICAgIE1vdXNlRXZl
bnRUeXBlOjpNb3Rpb24sIDAsIG1fbW91c2VCdXR0b25zQ3VycmVudGx5RG93biwgbV9wb3NpdGlv
bi54LCBtX3Bvc2l0aW9uLnksIDAsIDApOwogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1v
dXNlU2Nyb2xsQnkoaW50IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCkKQEAgLTM5NCwzNiArMjgz
LDggQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5KGludCBob3Jpem9udGFs
LCBpbnQgdmVydGljYWwpCiAgICAgaWYgKCFob3Jpem9udGFsICYmICF2ZXJ0aWNhbCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfU0NS
T0xMKTsKLSAgICBldmVudC0+c2Nyb2xsLnggPSBtX3Bvc2l0aW9uLng7Ci0gICAgZXZlbnQtPnNj
cm9sbC55ID0gbV9wb3NpdGlvbi55OwotICAgIGV2ZW50LT5zY3JvbGwudGltZSA9IEdES19DVVJS
RU5UX1RJTUU7Ci0gICAgZXZlbnQtPnNjcm9sbC53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5k
b3coR1RLX1dJREdFVChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZp
ZXcoKSkpOwotICAgIGdfb2JqZWN0X3JlZihldmVudC0+c2Nyb2xsLndpbmRvdyk7Ci0gICAgZ2Rr
X2V2ZW50X3NldF9kZXZpY2UoZXZlbnQsIGdka19zZWF0X2dldF9wb2ludGVyKGdka19kaXNwbGF5
X2dldF9kZWZhdWx0X3NlYXQoZ2RrX3dpbmRvd19nZXRfZGlzcGxheShldmVudC0+c2Nyb2xsLndp
bmRvdykpKSk7Ci0KLSAgICAvLyBGb3IgbW9yZSB0aGFuIG9uZSB0aWNrIGluIGEgc2Nyb2xsLCB3
ZSBuZWVkIHNtb290aCBzY3JvbGwgZXZlbnQKLSAgICBpZiAoKGhvcml6b250YWwgJiYgdmVydGlj
YWwpIHx8IGhvcml6b250YWwgPiAxIHx8IGhvcml6b250YWwgPCAtMSB8fCB2ZXJ0aWNhbCA+IDEg
fHwgdmVydGljYWwgPCAtMSkgewotICAgICAgICBldmVudC0+c2Nyb2xsLmRpcmVjdGlvbiA9IEdE
S19TQ1JPTExfU01PT1RIOwotICAgICAgICBldmVudC0+c2Nyb2xsLmRlbHRhX3ggPSAtaG9yaXpv
bnRhbDsKLSAgICAgICAgZXZlbnQtPnNjcm9sbC5kZWx0YV95ID0gLXZlcnRpY2FsOwotCi0gICAg
ICAgIHNlbmRPclF1ZXVlRXZlbnQoZXZlbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKGhvcml6b250YWwgPCAwKQotICAgICAgICBldmVudC0+c2Nyb2xsLmRpcmVjdGlvbiA9
IEdES19TQ1JPTExfUklHSFQ7Ci0gICAgZWxzZSBpZiAoaG9yaXpvbnRhbCA+IDApCi0gICAgICAg
IGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1NDUk9MTF9MRUZUOwotICAgIGVsc2UgaWYg
KHZlcnRpY2FsIDwgMCkKLSAgICAgICAgZXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPSBHREtfU0NS
T0xMX0RPV047Ci0gICAgZWxzZSBpZiAodmVydGljYWwgPiAwKQotICAgICAgICBldmVudC0+c2Ny
b2xsLmRpcmVjdGlvbiA9IEdES19TQ1JPTExfVVA7Ci0gICAgZWxzZQotICAgICAgICBnX2Fzc2Vy
dF9ub3RfcmVhY2hlZCgpOwotCi0gICAgc2VuZE9yUXVldWVFdmVudChldmVudCk7CisgICAgd2Vi
a2l0V2ViVmlld0Jhc2VTeW50aGVzaXplV2hlZWxFdmVudCh0b1dlYktpdEdMaWJBUEkobV90ZXN0
Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpLAorICAgICAgICBob3Jp
em9udGFsLCB2ZXJ0aWNhbCwgbV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnksIFdoZWVsRXZlbnRQ
aGFzZTo6Tm9QaGFzZSwgV2hlZWxFdmVudFBoYXNlOjpOb1BoYXNlKTsKIH0KIAogdm9pZCBFdmVu
dFNlbmRlclByb3h5Ojpjb250aW51b3VzTW91c2VTY3JvbGxCeShpbnQgaG9yaXpvbnRhbCwgaW50
IHZlcnRpY2FsLCBib29sIHBhZ2VkKQpAQCAtNDM0LDE1MSArMjk1LDEwMiBAQCB2b2lkIEV2ZW50
U2VuZGVyUHJveHk6OmNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5KGludCBob3Jpem9udGFsLCBpbnQg
dmVydGljYWwsIGJvbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR2RrRXZlbnQqIGV2
ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfU0NST0xMKTsKLSAgICBldmVudC0+c2Nyb2xsLnggPSBt
X3Bvc2l0aW9uLng7Ci0gICAgZXZlbnQtPnNjcm9sbC55ID0gbV9wb3NpdGlvbi55OwotICAgIGV2
ZW50LT5zY3JvbGwudGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgZXZlbnQtPnNjcm9sbC53
aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVChtX3Rlc3RDb250cm9sbGVy
LT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSkpOwotICAgIGdfb2JqZWN0X3JlZihldmVu
dC0+c2Nyb2xsLndpbmRvdyk7Ci0gICAgZ2RrX2V2ZW50X3NldF9kZXZpY2UoZXZlbnQsIGdka19z
ZWF0X2dldF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3NlYXQoZ2RrX3dpbmRvd19n
ZXRfZGlzcGxheShldmVudC0+c2Nyb2xsLndpbmRvdykpKSk7Ci0KLSAgICBldmVudC0+c2Nyb2xs
LmRpcmVjdGlvbiA9IEdES19TQ1JPTExfU01PT1RIOwotICAgIGV2ZW50LT5zY3JvbGwuZGVsdGFf
eCA9IC1ob3Jpem9udGFsIC8gcGl4ZWxzUGVyU2Nyb2xsVGljazsKLSAgICBldmVudC0+c2Nyb2xs
LmRlbHRhX3kgPSAtdmVydGljYWwgLyBwaXhlbHNQZXJTY3JvbGxUaWNrOworICAgIHdlYmtpdFdl
YlZpZXdCYXNlU3ludGhlc2l6ZVdoZWVsRXZlbnQodG9XZWJLaXRHTGliQVBJKG1fdGVzdENvbnRy
b2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSwKKyAgICAgICAgaG9yaXpvbnRh
bCAvIHBpeGVsc1BlclNjcm9sbFRpY2ssIHZlcnRpY2FsIC8gcGl4ZWxzUGVyU2Nyb2xsVGljaywg
bV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnksIFdoZWVsRXZlbnRQaGFzZTo6Tm9QaGFzZSwgV2hl
ZWxFdmVudFBoYXNlOjpOb1BoYXNlKTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3Vz
ZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoaW50IGhvcml6b250YWwsIGludCB2
ZXJ0aWNhbCwgaW50IHBoYXNlLCBpbnQgbW9tZW50dW0pCit7CisgICAgV2hlZWxFdmVudFBoYXNl
IGV2ZW50UGhhc2UgPSBXaGVlbEV2ZW50UGhhc2U6Ok5vUGhhc2U7CisgICAgc3dpdGNoIChwaGFz
ZSkgeworICAgIGNhc2UgMDoKKyAgICAgICAgZXZlbnRQaGFzZSA9IFdoZWVsRXZlbnRQaGFzZTo6
Tm9QaGFzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgICBldmVudFBoYXNl
ID0gV2hlZWxFdmVudFBoYXNlOjpCZWdhbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgor
ICAgICAgICBldmVudFBoYXNlID0gV2hlZWxFdmVudFBoYXNlOjpDaGFuZ2VkOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIGV2ZW50UGhhc2UgPSBXaGVlbEV2ZW50UGhhc2U6
OkVuZGVkOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDg6CisgICAgICAgIGV2ZW50UGhhc2Ug
PSBXaGVlbEV2ZW50UGhhc2U6OkNhbmNlbGxlZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAx
Mjg6CisgICAgICAgIGV2ZW50UGhhc2UgPSBXaGVlbEV2ZW50UGhhc2U6Ok1heUJlZ2luOworICAg
ICAgICBicmVhazsKKyAgICB9CiAKLSAgICBzZW5kT3JRdWV1ZUV2ZW50KGV2ZW50KTsKLX0KKyAg
ICBXaGVlbEV2ZW50UGhhc2UgZXZlbnRNb21lbnR1bVBoYXNlID0gV2hlZWxFdmVudFBoYXNlOjpO
b1BoYXNlOworICAgIHN3aXRjaCAobW9tZW50dW0pIHsKKyAgICBjYXNlIDA6CisgICAgICAgIGV2
ZW50UGhhc2UgPSBXaGVlbEV2ZW50UGhhc2U6Ok5vUGhhc2U7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgMToKKyAgICAgICAgZXZlbnRQaGFzZSA9IFdoZWVsRXZlbnRQaGFzZTo6QmVnYW47Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgZXZlbnRQaGFzZSA9IFdoZWVsRXZl
bnRQaGFzZTo6Q2hhbmdlZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgICBl
dmVudFBoYXNlID0gV2hlZWxFdmVudFBoYXNlOjpFbmRlZDsKKyAgICAgICAgYnJlYWs7CisgICAg
fQogCi12b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21l
bnR1bVBoYXNlcyhpbnQgeCwgaW50IHksIGludCAvKnBoYXNlKi8sIGludCAvKm1vbWVudHVtKi8p
Ci17Ci0gICAgLy8gR3RrKyBkb2VzIG5vdCBoYXZlIHRoZSBjb25jZXB0IG9mIHdoZWVsIGdlc3R1
cmUgcGhhc2VzIG9yIG1vbWVudHVtLiBKdXN0IHJlbGF5IHRvCi0gICAgLy8gdGhlIG1vdXNlIHdo
ZWVsIGhhbmRsZXIuCi0gICAgbW91c2VTY3JvbGxCeSh4LCB5KTsKKyAgICB3ZWJraXRXZWJWaWV3
QmFzZVN5bnRoZXNpemVXaGVlbEV2ZW50KHRvV2ViS2l0R0xpYkFQSShtX3Rlc3RDb250cm9sbGVy
LT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSksCisgICAgICAgIGhvcml6b250YWwsIHZl
cnRpY2FsLCBtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSwgZXZlbnRQaGFzZSwgZXZlbnRNb21l
bnR1bVBoYXNlKTsKIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpsZWFwRm9yd2FyZChpbnQg
bWlsbGlzZWNvbmRzKQogewotICAgIGlmIChtX2V2ZW50UXVldWUuaXNFbXB0eSgpKQotICAgICAg
ICBtX2V2ZW50UXVldWUuYXBwZW5kKFdUUkV2ZW50UXVldWVJdGVtKCkpOwotCi0gICAgbV9ldmVu
dFF1ZXVlLmxhc3QoKS5kZWxheSA9IG1pbGxpc2Vjb25kczsKICAgICBtX3RpbWUgKz0gbWlsbGlz
ZWNvbmRzIC8gMTAwMC4wOwogfQogCi12b2lkIHVwZGF0ZUV2ZW50Q29vcmRpbmF0ZXMoR2RrRXZl
bnQqIHRvdWNoRXZlbnQsIGludCB4LCBpbnQgeSkKLXsKLSAgICB0b3VjaEV2ZW50LT50b3VjaC54
ID0geDsKLSAgICB0b3VjaEV2ZW50LT50b3VjaC55ID0geTsKLQotICAgIGludCB4Um9vdCwgeVJv
b3Q7Ci0gICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHModG91Y2hFdmVudC0+dG91Y2gud2lu
ZG93LCB4LCB5LCAmeFJvb3QsICZ5Um9vdCk7Ci0gICAgdG91Y2hFdmVudC0+dG91Y2gueF9yb290
ID0geFJvb3Q7Ci0gICAgdG91Y2hFdmVudC0+dG91Y2gueV9yb290ID0geVJvb3Q7Ci19Ci0KLUdV
bmlxdWVQdHI8R2RrRXZlbnQ+IEV2ZW50U2VuZGVyUHJveHk6OmNyZWF0ZVRvdWNoRXZlbnQoR2Rr
RXZlbnRUeXBlIGV2ZW50VHlwZSwgaW50IGlkKQotewotICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+
IHRvdWNoRXZlbnQoZ2RrX2V2ZW50X25ldyhldmVudFR5cGUpKTsKLQotICAgIHRvdWNoRXZlbnQt
PnRvdWNoLnNlcXVlbmNlID0gc3RhdGljX2Nhc3Q8R2RrRXZlbnRTZXF1ZW5jZSo+KEdJTlRfVE9f
UE9JTlRFUihpZCkpOwotICAgIHRvdWNoRXZlbnQtPnRvdWNoLndpbmRvdyA9IGd0a193aWRnZXRf
Z2V0X3dpbmRvdyhHVEtfV0lER0VUKG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBs
YXRmb3JtVmlldygpKSk7Ci0gICAgZ19vYmplY3RfcmVmKHRvdWNoRXZlbnQtPnRvdWNoLndpbmRv
dyk7Ci0gICAgZ2RrX2V2ZW50X3NldF9kZXZpY2UodG91Y2hFdmVudC5nZXQoKSwgZ2RrX3NlYXRf
Z2V0X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHRfc2VhdChnZGtfd2luZG93X2dldF9k
aXNwbGF5KHRvdWNoRXZlbnQtPmJ1dHRvbi53aW5kb3cpKSkpOwotICAgIHRvdWNoRXZlbnQtPnRv
dWNoLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOwotCi0gICAgcmV0dXJuIHRvdWNoRXZlbnQ7Ci19
Ci0KICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotdm9pZCBFdmVudFNlbmRlclByb3h5OjphZGRU
b3VjaFBvaW50KGludCB4LCBpbnQgeSkKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6YWRkVG91Y2hQ
b2ludChpbnQsIGludCkKIHsKLSAgICAvLyBUb3VjaCBJRCBpcyBhcnJheSBpbmRleCBwbHVzIG9u
ZSwgc28gMCBpcyBza2lwcGVkLgotICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGV2ZW50ID0gY3Jl
YXRlVG91Y2hFdmVudChzdGF0aWNfY2FzdDxHZGtFdmVudFR5cGU+KEdES19UT1VDSF9CRUdJTiks
IG1fdG91Y2hFdmVudHMuc2l6ZSgpICsgMSk7Ci0gICAgdXBkYXRlRXZlbnRDb29yZGluYXRlcyhl
dmVudC5nZXQoKSwgeCwgeSk7Ci0gICAgbV91cGRhdGVkVG91Y2hFdmVudHMuYWRkKEdQT0lOVEVS
X1RPX0lOVChldmVudC0+dG91Y2guc2VxdWVuY2UpKTsKLSAgICBtX3RvdWNoRXZlbnRzLmFwcGVu
ZChzdGQ6Om1vdmUoZXZlbnQpKTsKIH0KIAotdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVU
b3VjaFBvaW50KGludCBpbmRleCwgaW50IHgsIGludCB5KQordm9pZCBFdmVudFNlbmRlclByb3h5
Ojp1cGRhdGVUb3VjaFBvaW50KGludCwgaW50LCBpbnQpCiB7Ci0gICAgQVNTRVJUKGluZGV4ID49
IDAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPCBtX3RvdWNoRXZlbnRzLnNpemUoKSk7
Ci0KLSAgICBjb25zdCBhdXRvJiBldmVudCA9IG1fdG91Y2hFdmVudHNbaW5kZXhdOwotICAgIEFT
U0VSVChldmVudCk7Ci0KLSAgICBldmVudC0+dHlwZSA9IEdES19UT1VDSF9VUERBVEU7Ci0gICAg
dXBkYXRlRXZlbnRDb29yZGluYXRlcyhldmVudC5nZXQoKSwgeCwgeSk7Ci0gICAgbV91cGRhdGVk
VG91Y2hFdmVudHMuYWRkKEdQT0lOVEVSX1RPX0lOVChldmVudC0+dG91Y2guc2VxdWVuY2UpKTsK
LX0KLQotdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kVXBkYXRlZFRvdWNoRXZlbnRzKCkKLXsK
LSAgICBmb3IgKGF1dG8gaWQgOiBtX3VwZGF0ZWRUb3VjaEV2ZW50cykKLSAgICAgICAgc2VuZE9y
UXVldWVFdmVudChnZGtfZXZlbnRfY29weShtX3RvdWNoRXZlbnRzW2lkIC0gMV0uZ2V0KCkpKTsK
LQotICAgIG1fdXBkYXRlZFRvdWNoRXZlbnRzLmNsZWFyKCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6dG91Y2hTdGFydCgpCiB7Ci0gICAgc2VuZFVwZGF0ZWRUb3VjaEV2ZW50cygpOwog
fQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoTW92ZSgpCiB7Ci0gICAgc2VuZFVwZGF0
ZWRUb3VjaEV2ZW50cygpOwogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoRW5kKCkK
IHsKLSAgICBzZW5kVXBkYXRlZFRvdWNoRXZlbnRzKCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6dG91Y2hDYW5jZWwoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZvaWQg
RXZlbnRTZW5kZXJQcm94eTo6Y2xlYXJUb3VjaFBvaW50cygpCiB7Ci0gICAgbV91cGRhdGVkVG91
Y2hFdmVudHMuY2xlYXIoKTsKLSAgICBtX3RvdWNoRXZlbnRzLmNsZWFyKCk7CiB9CiAKLXZvaWQg
RXZlbnRTZW5kZXJQcm94eTo6cmVsZWFzZVRvdWNoUG9pbnQoaW50IGluZGV4KQordm9pZCBFdmVu
dFNlbmRlclByb3h5OjpyZWxlYXNlVG91Y2hQb2ludChpbnQpCiB7Ci0gICAgQVNTRVJUKGluZGV4
ID49IDAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPCBtX3RvdWNoRXZlbnRzLnNpemUo
KSk7Ci0KLSAgICBjb25zdCBhdXRvJiBldmVudCA9IG1fdG91Y2hFdmVudHNbaW5kZXhdOwotICAg
IGV2ZW50LT50eXBlID0gR0RLX1RPVUNIX0VORDsKLSAgICBtX3VwZGF0ZWRUb3VjaEV2ZW50cy5h
ZGQoR1BPSU5URVJfVE9fSU5UKGV2ZW50LT50b3VjaC5zZXF1ZW5jZSkpOwogfQogCi12b2lkIEV2
ZW50U2VuZGVyUHJveHk6OmNhbmNlbFRvdWNoUG9pbnQoaW50IGluZGV4KQordm9pZCBFdmVudFNl
bmRlclByb3h5OjpjYW5jZWxUb3VjaFBvaW50KGludCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCi12b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoUG9pbnRSYWRpdXMoaW50IHJh
ZGl1c1gsIGludCByYWRpdXNZKQordm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaFBvaW50
UmFkaXVzKGludCwgaW50KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRXZl
bnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2RpZmllcihXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVy
LCBib29sIGVuYWJsZSkKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2RpZmllcihX
S0V2ZW50TW9kaWZpZXJzLCBib29sKQogewotICAgIGd1aW50IHN0YXRlID0gd2Via2l0TW9kaWZp
ZXJzVG9HREtNb2RpZmllcnMobW9kaWZpZXIpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBldmVu
dCA6IG1fdG91Y2hFdmVudHMpIHsKLSAgICAgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19UT1VD
SF9FTkQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoZW5hYmxlKQotICAg
ICAgICAgICAgZXZlbnQtPnRvdWNoLnN0YXRlIHw9IHN0YXRlOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBldmVudC0+dG91Y2guc3RhdGUgJj0gfihzdGF0ZSk7Ci0KLSAgICAgICAgbV91cGRh
dGVkVG91Y2hFdmVudHMuYWRkKEdQT0lOVEVSX1RPX0lOVChldmVudC0+dG91Y2guc2VxdWVuY2Up
KTsKLSAgICB9CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFRPVUNIX0VWRU5UUykKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400116</attachid>
            <date>2020-05-23 02:35:17 -0700</date>
            <delta_ts>2020-05-24 02:15:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wkgtk-event-sender-no-gdkevent.diff</filename>
            <type>text/plain</type>
            <size>62087</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjYzA0MDU0NzBhMDguLjE0YTdjZWNkYTg1MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBA
CisyMDIwLTA1LTIzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
KworICAgICAgICBbV1RSXSBFdmVudFNlbmRlcjogc3RvcCB1c2luZyBHZGtFdmVudCBBUEkgaW4g
cHJlcGFyYXRpb24gZm9yIEdUSzQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxMjI5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVwZGF0ZSBleHBlY3RhdGlvbnMgZm9yIHRlc3RzIHRoYXQgYXJlIHBhc3Np
bmcgbm93LgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAg
ICAgICogcGxhdGZvcm0vZ3RrL2VkaXRpbmcvc2VsZWN0aW9uLzUxOTUxNjYtMS1leHBlY3RlZC50
eHQ6IFJlbW92ZWQuCisKIDIwMjAtMDUtMjIgIEphY2sgTGVlICA8c2hpaGNoaWVoX2xlZUBhcHBs
ZS5jb20+CiAKICAgICAgICAgQVNTRVJUSU9OIEZBSUxFRDogKCFzX2N1cnJlbnQgfHwgJm1fdmll
dyAhPSAmc19jdXJyZW50LT5tX3ZpZXcpIGluIFJlbmRlclRyZWVCdWlsZGVyOjpSZW5kZXJUcmVl
QnVpbGRlcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3Rh
dGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBj
M2EyM2I3YmJiOTkuLjBmNDAzMjc5ZWU2MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rl
c3RFeHBlY3RhdGlvbnMKQEAgLTE0ODUsOCArMTQ4NSw2IEBAIHdlYmtpdC5vcmcvYi8yMTA5MjYg
ZmFzdC9tZWRpYXN0cmVhbS9nZXREaXNwbGF5TWVkaWEtbWF4LWNvbnN0cmFpbnRzMy5odG1sIFsg
U2tpCiAKIHdlYmtpdC5vcmcvYi8xOTkyMjQgZWRpdGluZy9wYXN0ZWJvYXJkL2NvcHktcGFzdGUt
YWNyb3NzLXNoYWRvdy1ib3VuZGFyaWVzLXdpdGgtc3R5bGUtMi5odG1sIFsgQ3Jhc2ggXQogCi13
ZWJraXQub3JnL2IvMjEyMDE4IGZhc3QvZXZlbnRzL2NvbnRleHQtYWN0aXZhdGVkLWJ5LWtleS1l
dmVudC5odG1sIFsgQ3Jhc2ggXQotCiB3ZWJraXQub3JnL2IvMjEyMjMyIGVkaXRpbmcvYXN5bmMt
Y2xpcGJvYXJkL2NsaXBib2FyZC1yZWFkLXdoaWxlLXBhc3RpbmcuaHRtbCBbIENyYXNoIF0KIAog
Iy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTMzODYsNyArMzM4NCw2IEBAIHdl
YmtpdC5vcmcvYi8xNTcxNzkgZmFzdC9ldmVudHMvZHJhZy1hbmQtZHJvcC1hdXRvc2Nyb2xsLWlu
bmVyLWZyYW1lLmh0bWwgWyBUaW1lCiAKICMgV2ViS2l0MiB0ZXN0UnVubmVyLnNldEVkaXRpbmdC
ZWhhdmlvdXIgYXBwZWFycyBicm9rZW4gc29tZXRpbWVzLgogd2Via2l0Lm9yZy9iLzE0NDc2NCBb
IFJlbGVhc2UgXSBlZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktbWFjLmh0
bWwgWyBGYWlsdXJlIF0KLUJ1ZyhHVEspIGVkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1hZnRlci1t
b3VzZS1zZWxlY3Rpb24uaHRtbCBbIEZhaWx1cmUgXQogCiAjIFdlYktpdDIgbmVlZHMgdGV4dElu
cHV0Q29udHJvbGxlci5zZWxlY3RlZFJhbmdlCiBCdWcoR1RLKSBlZGl0aW5nL3NlbGVjdGlvbi9t
aXhlZC1lZGl0YWJpbGl0eS0xMC5odG1sIFsgRmFpbHVyZSBdCkBAIC0zNDI3LDcgKzM0MjQsNiBA
QCBCdWcoR1RLKSBwbGF0Zm9ybS9ndGsvZmFzdC9ldmVudHMvZXZlbnQtc2VuZGVyLW1ldGFrZXku
aHRtbCBbIEZhaWx1cmUgXQogCiAjIFVuZXhwbGFpbmVkIGZhaWx1cmVzCiBCdWcoR1RLKSBmYXN0
L2Nzcy9kaXNhYmxlZC1hdXRob3Itc3R5bGVzLmh0bWwgWyBGYWlsdXJlIF0KLUJ1ZyhHVEspIGZh
c3QvZXZlbnRzL2tleWRvd24tbnVtcGFkLWtleXMuaHRtbCBbIEZhaWx1cmUgXQogQnVnKEdUSykg
ZmFzdC9ldmVudHMvcmVtb3ZlLXRhcmdldC13aXRoLXNoYWRvdy1pbi1kcmFnLmh0bWwgWyBGYWls
dXJlIF0KIEJ1ZyhHVEspIGZhc3QvZm9ybXMvbGlzdGJveC10eXBlYWhlYWQtY3lyaWxsaWMuaHRt
bCBbIEZhaWx1cmUgXQogQnVnKEdUSykgZmFzdC9mb3Jtcy9saXN0Ym94LXR5cGVhaGVhZC1ncmVl
ay5odG1sIFsgRmFpbHVyZSBdCkBAIC0zNTkxLDcgKzM1ODcsNiBAQCB3ZWJraXQub3JnL2IvNzQy
ODIgZWRpdGluZy9wYXN0ZWJvYXJkL2VtYWNzLWN0cmwtay13aXRoLW1vdmUuaHRtbCBbIEZhaWx1
cmUgXQogCiB3ZWJraXQub3JnL2IvODQ2NzkgY3NzMy96b29tLWNvb3Jkcy54aHRtbCBbIEZhaWx1
cmUgXQogCi13ZWJraXQub3JnL2IvODQ2OTQgZmFzdC9ldmVudHMvc2VsZWN0c3RhcnQtYnktZG91
YmxlLXRyaXBsZS1jbGlja3MuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzg0NjkyIGZh
c3QvZXZlbnRzL2F0dGVtcHQtc2Nyb2xsLXdpdGgtbm8tc2Nyb2xsYmFycy5odG1sIFsgRmFpbHVy
ZSBdCiAKICMgSW50ZXJmZXJlcyB3aXRoIHRoZSByQUYgdGVzdHMgdGhhdCBhcmUgZW5hYmxlZApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2VkaXRpbmcvc2VsZWN0aW9uLzUx
OTUxNjYtMS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZWRpdGluZy9z
ZWxlY3Rpb24vNTE5NTE2Ni0xLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYzMyMjExMWViYmNmLi4wMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL2VkaXRpbmcvc2VsZWN0aW9uLzUxOTUxNjYtMS1leHBlY3RlZC50eHQKKysrIC9kZXYv
bnVsbApAQCAtMSw1ICswLDAgQEAKLVRoaXMgdGVzdHMgZm9yIGEgYnVnIHdoZXJlIGV4dGVuZGlu
ZyBhIHNlbGVjdGlvbiBjcmVhdGVkIHdpdGggdGhlIG1vdXNlIHdvdWxkIGJsb3cgaXQgYXdheSBi
ZWZvcmUgZXh0ZW5kaW5nIGl0LgotCi1UaGVyZSBzaG91bGQgYmUgc2l4IGNoYXJhY3RlcnMgc2Vs
ZWN0ZWQgaW4gdGhpcyBzZW50ZW5jZSBvbiBNYWMgYW5kIGZvdXIgY2hhcmFjdGVycyBzZWxlY3Rl
ZCBvbiBXaW4vTGludXguCi1TdWNjZXNzCi1GYWlsdXJlOiBTZWxlY3RlZCB0ZXh0IHdhcyAiaGVy
ZSBzaG91bGQgYmUgc2l4IGNoYXJhY3RlcnMgc2VsZWN0ZWQgaW4gdGhpcyBzZW50ZW5jZSBvbiBN
YWMgYW5kIGZvdXIgY2hhcmFjdGVycyBzZWxlY3RlZCBvbiBXaW4vTGludXguIiBhbmQgc2hvdWxk
IGJlICJob3VsZCBiZSAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU2MDU2YmZjYzg0NC4uNzM0NzJkODc1NzgyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDIwLTA1LTIzICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbV1RSXSBFdmVudFNlbmRlcjogc3Rv
cCB1c2luZyBHZGtFdmVudCBBUEkgaW4gcHJlcGFyYXRpb24gZm9yIEdUSzQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjI5OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBpbnRlcm5hbCBBUEkgdG8g
V2ViS2l0V2ViVmlld0Jhc2UgdG8gc3ludGhlc2l6ZSBldmVudHMsIGJlY2F1c2Ugd2l0aCBHVEs0
IGl0J3Mgbm90IHBvc3NpYmxlIHRvCisgICAgICAgIGNyZWF0ZSBldmVudHMuIEluIHRoZSBjYXNl
IG9mIGxheW91dCB0ZXN0cywgdGhlIHdlYiB2aWV3IGlzIGFsd2F5cyB0aGUgdGFyZ2V0IG9mIHRo
ZSBldmVudHMsIHNvIHdlIGRvbid0IHJlYWxseQorICAgICAgICBuZWVkIHRvIHNlbmQgdGhlIGV2
ZW50cyB0byBHVEsgdG8gcHJvY2VzcyB0aGVtLgorCisgICAgICAgICogU2hhcmVkL05hdGl2ZVdl
YktleWJvYXJkRXZlbnQuaDogQWRkIG5ldyBjb25zdHJ1Y3RvciB0aGF0IGRvZXNuJ3QgcmVjZWl2
ZSBhIEdka0V2ZW50LgorICAgICAgICAqIFNoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50Lmg6IERp
dHRvLgorICAgICAgICAqIFNoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50Lmg6IERpdHRvLgorICAg
ICAgICAqIFNoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQp
OiBDcmVhdGUgd2l0aG91dCBhIEdka0V2ZW50LgorICAgICAgICAqIFNoYXJlZC9ndGsvTmF0aXZl
V2ViTW91c2VFdmVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5hdGl2ZVdlYk1vdXNlRXZl
bnQ6Ok5hdGl2ZVdlYk1vdXNlRXZlbnQpOiBEaXR0by4KKyAgICAgICAgKiBTaGFyZWQvZ3RrL05h
dGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJXaGVl
bEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6ZG9uZVdpdGhLZXlFdmVudCk6IFJldHVybiBlYXJseSBpZiBldmVudCBkb2Vzbid0IGhh
dmUgYSBHZGtFdmVudC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRvbmVXaXRo
VG91Y2hFdmVudCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6d2hl
ZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUpOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAgICh0b1dlYktpdE1vZGlm
aWVycyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVNb3VzZUV2ZW50KToK
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZUtleUV2ZW50KToKKyAgICAgICAg
KHRvV2ViS2l0V2hlZWxFdmVudFBoYXNlKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlU3lu
dGhlc2l6ZVdoZWVsRXZlbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlSW50ZXJuYWwuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmFjdGl2ZVBvcHVwTWVudSBj
b25zdCk6IFJldHVybiB0aGUgYWN0aXZlIHBvcHVwIG1lbnUgcHJveHkuCisgICAgICAgICogVUlQ
cm9jZXNzL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6Omhh
bmRsZUtleUJpbmRpbmdzRm9yTWFwKTogTWFrZSBpdCBnZW5lcmljIGJ5IHJlY2VpdmluZyB0aGUg
bWFwIGFzIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYktpdDo6aGFuZGxlQ3VzdG9tS2V5QmluZGlu
Z3MpOiBDYWxsIGhhbmRsZUtleUJpbmRpbmdzRm9yTWFwKCkgcGFzc2luZyB0aGUgY3VzdG9tIGtl
eSBiaW5kaW5ncyBtYXAuCisgICAgICAgIChXZWJLaXQ6OktleUJpbmRpbmdUcmFuc2xhdG9yOjpj
b21tYW5kc0ZvcktleXZhbCk6IEdldCBjb21tYW5kcyBmb3IgdGhlIHByZWRlZmluZWQga2V5IGJp
bmRpbmdzLiBUaGlzIGlzIHVzZWQKKyAgICAgICAgb25seSB3aGVuIHN5bnRoZXNpemluZyBrZXkg
ZXZlbnRzIHNpbmNlIHdlIGRvbid0IGhhdmUgYSBHZGtFVmVudCB0byBmb3J3YXJkIHRvIHRoZSBH
dGtUZXh0Vmlldy4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9y
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6cG9wdXBNZW51V2lkZ2V0KTogVGFrZSBhIHJlZiBvZiB0aGUgR2Rr
V2luZG93IHdoZW4gY3JlYXRpbmcgdGhlIEdka0V2ZW50LCBzaW5jZSB0aGUgZXZlbnQgd2lsbCB1
bnJlZiBpdAorICAgICAgICBvbiBkZXN0cm95LgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2Vi
UG9wdXBNZW51UHJveHlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94
eUd0azo6aGFuZGxlS2V5UHJlc3MpOiBIYW5kbGUgYSBrZXkgcHJlc3MgZXZlbnQgZnJvbSBpdHMg
a2V5dmFsIGFuZCB0aW1lc3RhbXAuCisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5
R3RrOjphY3RpdmF0ZVNlbGVjdGVkSXRlbSk6IEFjdGl2YXRlIHRoZSBjdXJyZW50bHkgc2VsZWN0
ZWQgaXRlbS4KKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlHdGs6OmtleVByZXNz
RXZlbnRDYWxsYmFjayk6IENhbGwgaGFuZGxlS2V5UHJlc3MoKS4KKyAgICAgICAgKFdlYktpdDo6
V2ViUG9wdXBNZW51UHJveHlHdGs6OnR5cGVBaGVhZEZpbmRJbmRleCk6IFJlY2VpdmUgYSBrZXl2
YWwgYW5kIHRpbWVzdGFtcCBpbnN0ZWFkIG9mIGEgR2RrRXZlbnQuCisgICAgICAgIChXZWJLaXQ6
OldlYlBvcHVwTWVudVByb3h5R3RrOjp0eXBlQWhlYWRGaW5kKTogRGl0dG8uCisgICAgICAgICog
VUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5oOgorCiAyMDIwLTA1LTIyICBKYW1l
cyBTYXZhZ2UgIDxqYW1lcy5zYXZhZ2VAYXBwbGUuY29tPgogCiAgICAgICAgIENyZWF0ZSBTd2lm
dCBvdmVybGF5IGZvciBXZWJLaXQgZnJhbWV3b3JrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9O
YXRpdmVXZWJLZXlib2FyZEV2ZW50LmgKaW5kZXggMjRkNTRlOGMyMWY3Li5lMWIyYWI0M2UxNDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgKQEAg
LTc1LDYgKzc1LDcgQEAgcHVibGljOgogICAgIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoY29uc3Qg
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYpOwogICAgIGVudW0gY2xhc3MgSGFuZGxlZEJ5SW5wdXRN
ZXRob2QgOiBib29sIHsgTm8sIFllcyB9OwogICAgIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoR2Rr
RXZlbnQqLCBjb25zdCBTdHJpbmcmLCBIYW5kbGVkQnlJbnB1dE1ldGhvZCwgT3B0aW9uYWw8VmVj
dG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPj4mJiwgT3B0aW9uYWw8RWRpdGluZ1Jh
bmdlPiYmLCBWZWN0b3I8U3RyaW5nPiYmIGNvbW1hbmRzKTsKKyAgICBOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50KFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyLCBpbnQgd2luZG93c1Zp
cnR1YWxLZXlDb2RlLCBpbnQgbmF0aXZlVmlydHVhbEtleUNvZGUsIFZlY3RvcjxTdHJpbmc+JiYg
Y29tbWFuZHMsIGJvb2wgaXNLZXlwYWQsIE9wdGlvblNldDxNb2RpZmllcj4pOwogI2VsaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICAgICBlbnVtIGNsYXNzIEhhbmRsZWRCeUlucHV0TWV0aG9kIDog
Ym9vbCB7IE5vLCBZZXMgfTsKICAgICBOYXRpdmVXZWJLZXlib2FyZEV2ZW50KDo6V2ViRXZlbnQg
KiwgSGFuZGxlZEJ5SW5wdXRNZXRob2QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvTmF0aXZlV2ViTW91c2VFdmVudC5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2Vi
TW91c2VFdmVudC5oCmluZGV4IDM1ZmRmYmIzMDk3YS4uYzZhNTk1YTI1ZTkwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmgKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViTW91c2VFdmVudC5oCkBAIC02Niw2ICs2Niw3IEBAIHB1
YmxpYzoKICAgICBOYXRpdmVXZWJNb3VzZUV2ZW50KGNvbnN0IE5hdGl2ZVdlYk1vdXNlRXZlbnQm
KTsKICAgICBOYXRpdmVXZWJNb3VzZUV2ZW50KEdka0V2ZW50KiwgaW50LCBPcHRpb25hbDxXZWJD
b3JlOjpJbnRQb2ludD4pOwogICAgIE5hdGl2ZVdlYk1vdXNlRXZlbnQoR2RrRXZlbnQqLCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYsIGludCwgT3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+KTsK
KyAgICBOYXRpdmVXZWJNb3VzZUV2ZW50KFR5cGUsIEJ1dHRvbiwgdW5zaWduZWQgc2hvcnQgYnV0
dG9ucywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGludCBjbGlja0NvdW50LCBPcHRpb25TZXQ8TW9kaWZp
ZXI+IG1vZGlmaWVycyk7CiAgICAgZXhwbGljaXQgTmF0aXZlV2ViTW91c2VFdmVudChjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYpOwogI2VsaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBOYXRp
dmVXZWJNb3VzZUV2ZW50KDo6V2ViRXZlbnQgKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRp
dmVXZWJXaGVlbEV2ZW50LmgKaW5kZXggYTVkYjhiNzQ2MTc3Li5lYWM3NjY5ZDA4MGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50LmgKQEAgLTYxLDYgKzYxLDcg
QEAgcHVibGljOgogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoR2RrRXZlbnQqKTsKICAgICBOYXRp
dmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiwgV2ViV2hlZWxFdmVudDo6UGhhc2UsIFdlYldoZWVs
RXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpOwogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoR2Rr
RXZlbnQqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIE5hdGl2ZVdlYldoZWVsRXZl
bnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgZGVsdGEsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgV2ViV2hlZWxFdmVudDo6UGhhc2Us
IFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpOwogI2VsaWYgVVNFKExJQldQRSkK
ICAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCosIGZs
b2F0IGRldmljZVNjYWxlRmFjdG9yLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSwgV2ViV2hlZWxFdmVu
dDo6UGhhc2UgbW9tZW50dW1QaGFzZSk7CiAjZWxpZiBQTEFURk9STShXSU4pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHAK
aW5kZXggOGMwZGY0MjgyZmQ1Li5jNmRlYTk5OTg3ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHAKQEAgLTM5LDkg
KzM5LDE0IEBAIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQo
R2RrRXZlbnQqIGV2ZW50LCBjb25zdCBTdHJpbmcmIHRlCiB7CiB9CiAKK05hdGl2ZVdlYktleWJv
YXJkRXZlbnQ6Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmlu
ZyYga2V5SWRlbnRpZmllciwgaW50IHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgaW50IG5hdGl2ZVZp
cnR1YWxLZXlDb2RlLCBWZWN0b3I8U3RyaW5nPiYmIGNvbW1hbmRzLCBib29sIGlzS2V5cGFkLCBP
cHRpb25TZXQ8TW9kaWZpZXI+IG1vZGlmaWVycykKKyAgICA6IFdlYktleWJvYXJkRXZlbnQodHlw
ZSwgdGV4dCwga2V5LCBjb2RlLCBrZXlJZGVudGlmaWVyLCB3aW5kb3dzVmlydHVhbEtleUNvZGUs
IG5hdGl2ZVZpcnR1YWxLZXlDb2RlLCBmYWxzZSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQs
IFdURk1vdmUoY29tbWFuZHMpLCBpc0tleXBhZCwgbW9kaWZpZXJzLCBXYWxsVGltZTo6bm93KCkp
Cit7Cit9CisKIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQo
Y29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQpCi0gICAgOiBXZWJLZXlib2FyZEV2
ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChldmVudC5uYXRpdmVF
dmVudCgpLCBldmVudC50ZXh0KCksIGV2ZW50LmhhbmRsZWRCeUlucHV0TWV0aG9kKCksIE9wdGlv
bmFsPFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4+KGV2ZW50LnByZWVkaXRV
bmRlcmxpbmVzKCkpLCBPcHRpb25hbDxFZGl0aW5nUmFuZ2U+KGV2ZW50LnByZWVkaXRTZWxlY3Rp
b25SYW5nZSgpKSwgVmVjdG9yPFN0cmluZz4oZXZlbnQuY29tbWFuZHMoKSkpKQotICAgICwgbV9u
YXRpdmVFdmVudChnZGtfZXZlbnRfY29weShldmVudC5uYXRpdmVFdmVudCgpKSkKKyAgICA6IFdl
YktleWJvYXJkRXZlbnQoZXZlbnQudHlwZSgpLCBldmVudC50ZXh0KCksIGV2ZW50LmtleSgpLCBl
dmVudC5jb2RlKCksIGV2ZW50LmtleUlkZW50aWZpZXIoKSwgZXZlbnQud2luZG93c1ZpcnR1YWxL
ZXlDb2RlKCksIGV2ZW50Lm5hdGl2ZVZpcnR1YWxLZXlDb2RlKCksIGV2ZW50LmhhbmRsZWRCeUlu
cHV0TWV0aG9kKCksIE9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGlu
ZT4+KGV2ZW50LnByZWVkaXRVbmRlcmxpbmVzKCkpLCBPcHRpb25hbDxFZGl0aW5nUmFuZ2U+KGV2
ZW50LnByZWVkaXRTZWxlY3Rpb25SYW5nZSgpKSwgVmVjdG9yPFN0cmluZz4oZXZlbnQuY29tbWFu
ZHMoKSksIGV2ZW50LmlzS2V5cGFkKCksIGV2ZW50Lm1vZGlmaWVycygpLCBldmVudC50aW1lc3Rh
bXAoKSkKKyAgICAsIG1fbmF0aXZlRXZlbnQoZXZlbnQubmF0aXZlRXZlbnQoKSA/IGdka19ldmVu
dF9jb3B5KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpIDogbnVsbHB0cikKIHsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL05hdGl2ZVdlYk1vdXNlRXZlbnRHdGsuY3BwIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL05hdGl2ZVdlYk1vdXNlRXZlbnRHdGsuY3BwCmluZGV4
IDdhY2Q5NGJlYzYwMS4uN2Y4MjQ5ODRhMDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9ndGsvTmF0aXZlV2ViTW91c2VFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvZ3RrL05hdGl2ZVdlYk1vdXNlRXZlbnRHdGsuY3BwCkBAIC00OCw4ICs0OCwxMyBAQCBO
YXRpdmVXZWJNb3VzZUV2ZW50OjpOYXRpdmVXZWJNb3VzZUV2ZW50KGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBwb3NpdGlvbikKIHsKIH0KIAorTmF0aXZlV2ViTW91c2VFdmVudDo6TmF0aXZlV2Vi
TW91c2VFdmVudChUeXBlIHR5cGUsIEJ1dHRvbiBidXR0b24sIHVuc2lnbmVkIHNob3J0IGJ1dHRv
bnMsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBpbnQgY2xpY2tDb3VudCwgT3B0aW9uU2V0PE1vZGlmaWVy
PiBtb2RpZmllcnMpCisgICAgOiBXZWJNb3VzZUV2ZW50KHR5cGUsIGJ1dHRvbiwgYnV0dG9ucywg
cG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCAwLCAwLCAwLCBjbGlja0NvdW50LCBtb2RpZmllcnMs
IFdhbGxUaW1lOjpub3coKSkKK3sKK30KKwogTmF0aXZlV2ViTW91c2VFdmVudDo6TmF0aXZlV2Vi
TW91c2VFdmVudChjb25zdCBOYXRpdmVXZWJNb3VzZUV2ZW50JiBldmVudCkKLSAgICA6IFdlYk1v
dXNlRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KGV2ZW50Lm5hdGl2
ZUV2ZW50KCksIGV2ZW50LnBvc2l0aW9uKCksIGV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIGV2ZW50
LmNsaWNrQ291bnQoKSwgV2ViQ29yZTo6SW50UG9pbnQoZXZlbnQuZGVsdGFYKCksIGV2ZW50LmRl
bHRhWSgpKSkpCisgICAgOiBXZWJNb3VzZUV2ZW50KGV2ZW50LnR5cGUoKSwgZXZlbnQuYnV0dG9u
KCksIGV2ZW50LmJ1dHRvbnMoKSwgZXZlbnQucG9zaXRpb24oKSwgZXZlbnQuZ2xvYmFsUG9zaXRp
b24oKSwgZXZlbnQuZGVsdGFYKCksIGV2ZW50LmRlbHRhWSgpLCBldmVudC5kZWx0YVooKSwgZXZl
bnQuY2xpY2tDb3VudCgpLCBldmVudC5tb2RpZmllcnMoKSwgZXZlbnQudGltZXN0YW1wKCkpCiAg
ICAgLCBtX25hdGl2ZUV2ZW50KGV2ZW50Lm5hdGl2ZUV2ZW50KCkgPyBnZGtfZXZlbnRfY29weShj
b25zdF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQubmF0aXZlRXZlbnQoKSkpIDogbnVsbHB0cikKIHsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVlbEV2
ZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVlbEV2ZW50
R3RrLmNwcAppbmRleCBiMmY3MDEwMDZhZDAuLjNiNjA1OTZkNTVhOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcApAQCAtNDks
OSArNDksMTQgQEAgTmF0aXZlV2ViV2hlZWxFdmVudDo6TmF0aXZlV2ViV2hlZWxFdmVudChHZGtF
dmVudCogZXZlbnQsIGNvbnN0IFdlYkNvcmU6OkludFBvaW4KIHsKIH0KIAorTmF0aXZlV2ViV2hl
ZWxFdmVudDo6TmF0aXZlV2ViV2hlZWxFdmVudChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9z
aXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRp
Y2tzLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBwaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhhc2UgbW9t
ZW50dW1QaGFzZSkKKyAgICA6IFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBwb3NpdGlv
biwgZ2xvYmFsUG9zaXRpb24sIGRlbHRhLCB3aGVlbFRpY2tzLCBwaGFzZSwgbW9tZW50dW1QaGFz
ZSwgV2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsIHsgfSwgV2FsbFRpbWU6
Om5vdygpKQoreworfQorCiBOYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50
KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmIGV2ZW50KQotICAgIDogV2ViV2hlZWxFdmVudChX
ZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQubmF0aXZlRXZlbnQoKSwg
ZXZlbnQucG9zaXRpb24oKSwgZXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgZXZlbnQucGhhc2UoKSwg
ZXZlbnQubW9tZW50dW1QaGFzZSgpKSkKLSAgICAsIG1fbmF0aXZlRXZlbnQoZ2RrX2V2ZW50X2Nv
cHkoZXZlbnQubmF0aXZlRXZlbnQoKSkpCisgICAgOiBXZWJXaGVlbEV2ZW50KGV2ZW50LnR5cGUo
KSwgZXZlbnQucG9zaXRpb24oKSwgZXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgZXZlbnQuZGVsdGEo
KSwgZXZlbnQud2hlZWxUaWNrcygpLCBldmVudC5waGFzZSgpLCBldmVudC5tb21lbnR1bVBoYXNl
KCksIGV2ZW50LmdyYW51bGFyaXR5KCksIGV2ZW50Lm1vZGlmaWVycygpLCBldmVudC50aW1lc3Rh
bXAoKSkKKyAgICAsIG1fbmF0aXZlRXZlbnQoZXZlbnQubmF0aXZlRXZlbnQoKSA/IGdka19ldmVu
dF9jb3B5KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpIDogbnVsbHB0cikKIHsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCAz
YjkzYzIzODE1N2QuLmJkZjU1NWNlNmNjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTIzOSw3ICsyMzksNyBAQCBXZWJD
b3JlOjpJbnRSZWN0IFBhZ2VDbGllbnRJbXBsOjpyb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVl
bihjb25zdCBXZWJDb3JlOjpJbgogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aEtleUV2
ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50LCBib29sIHdhc0V2ZW50SGFu
ZGxlZCkKIHsKLSAgICBpZiAod2FzRXZlbnRIYW5kbGVkIHx8IGV2ZW50LnR5cGUoKSAhPSBXZWJF
dmVudDo6VHlwZTo6S2V5RG93bikKKyAgICBpZiAod2FzRXZlbnRIYW5kbGVkIHx8IGV2ZW50LnR5
cGUoKSAhPSBXZWJFdmVudDo6VHlwZTo6S2V5RG93biB8fCAhZXZlbnQubmF0aXZlRXZlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdC
YXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KTsKQEAgLTQxMSw2ICs0MTEs
OCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZl
V2ViVG91Y2hFdmVudCYgZXZlbnQsIGJvb2wgdwogewogI2lmICFVU0UoR1RLNCkKICAgICBjb25z
dCBHZGtFdmVudCogdG91Y2hFdmVudCA9IGV2ZW50Lm5hdGl2ZUV2ZW50KCk7CisgICAgaWYgKCF0
b3VjaEV2ZW50KQorICAgICAgICByZXR1cm47CiAKICAgICBHZXN0dXJlQ29udHJvbGxlciYgZ2Vz
dHVyZUNvbnRyb2xsZXIgPSB3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVDb250cm9sbGVyKFdFQktJ
VF9XRUJfVklFV19CQVNFKG1fdmlld1dpZGdldCkpOwogICAgIGlmICh3YXNFdmVudEhhbmRsZWQp
IHsKQEAgLTQ3MSw2ICs0NzMsOSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aFRvdWNo
RXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYgZXZlbnQsIGJvb2wgdwogCiB2b2lkIFBh
Z2VDbGllbnRJbXBsOjp3aGVlbEV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZShjb25zdCBOYXRp
dmVXZWJXaGVlbEV2ZW50JiBldmVudCkKIHsKKyAgICBpZiAoIWV2ZW50Lm5hdGl2ZUV2ZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogI2lmICFVU0UoR1RLNCkKICAgICBWaWV3R2VzdHVyZUNvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSB3ZWJraXRXZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxl
cihXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3ZpZXdXaWRnZXQpKTsKICAgICBpZiAoY29udHJvbGxl
ciAmJiBjb250cm9sbGVyLT5pc1N3aXBlR2VzdHVyZUVuYWJsZWQoKSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAppbmRl
eCBmZDdlZTk2OTRlOGQuLjUwMTE1YzUyYzk4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTQ4LDkgKzQ4LDEx
IEBACiAjaW5jbHVkZSAiV2ViS2l0RW1vamlDaG9vc2VyLmgiCiAjaW5jbHVkZSAiV2ViS2l0SW5w
dXRNZXRob2RDb250ZXh0SW1wbEd0ay5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdBY2Nlc3Np
YmxlLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VJbnRlcm5hbC5oIgogI2luY2x1ZGUg
IldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgog
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5R3Rr
LmgiCiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9v
bC5oIgogI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgiCkBAIC02MSw2
ICs2Myw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9HdGtWZXJzaW9uaW5nLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1EaXNw
bGF5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1JlZlB0ckNhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpb24uaD4K
ICNpbmNsdWRlIDxnZGsvZ2RrLmg+CkBAIC0yMjc1LDMgKzIyNzgsMjAwIEBAIHZvaWQgd2Via2l0
V2ViVmlld0Jhc2VTeW50aGVzaXplQ29tcG9zaXRpb25LZXlQcmVzcyhXZWJLaXRXZWJWaWV3QmFz
ZSogd2ViVmlld0JhCiAgICAgcHJpdi0+cGFnZVByb3h5LT5oYW5kbGVLZXlib2FyZEV2ZW50KE5h
dGl2ZVdlYktleWJvYXJkRXZlbnQoZXZlbnQsIHRleHQsIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6
OkhhbmRsZWRCeUlucHV0TWV0aG9kOjpZZXMsIFdURk1vdmUodW5kZXJsaW5lcyksIFdURk1vdmUo
c2VsZWN0aW9uUmFuZ2UpLCB7IH0pKTsKICNlbmRpZgogfQorCitzdGF0aWMgaW5saW5lIE9wdGlv
blNldDxXZWJFdmVudDo6TW9kaWZpZXI+IHRvV2ViS2l0TW9kaWZpZXJzKHVuc2lnbmVkIG1vZGlm
aWVycykKK3sKKyAgICBPcHRpb25TZXQ8V2ViRXZlbnQ6Ok1vZGlmaWVyPiB3ZWJFdmVudE1vZGlm
aWVyczsKKyAgICBpZiAobW9kaWZpZXJzICYgR0RLX0NPTlRST0xfTUFTSykKKyAgICAgICAgd2Vi
RXZlbnRNb2RpZmllcnMuYWRkKFdlYkV2ZW50OjpNb2RpZmllcjo6Q29udHJvbEtleSk7CisgICAg
aWYgKG1vZGlmaWVycyAmIEdES19TSElGVF9NQVNLKQorICAgICAgICB3ZWJFdmVudE1vZGlmaWVy
cy5hZGQoV2ViRXZlbnQ6Ok1vZGlmaWVyOjpTaGlmdEtleSk7CisgICAgaWYgKG1vZGlmaWVycyAm
IEdES19NT0QxX01BU0spCisgICAgICAgIHdlYkV2ZW50TW9kaWZpZXJzLmFkZChXZWJFdmVudDo6
TW9kaWZpZXI6OkFsdEtleSk7CisgICAgaWYgKG1vZGlmaWVycyAmIEdES19NRVRBX01BU0spCisg
ICAgICAgIHdlYkV2ZW50TW9kaWZpZXJzLmFkZChXZWJFdmVudDo6TW9kaWZpZXI6Ok1ldGFLZXkp
OworICAgIGlmIChQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6Om1vZGlmaWVyc0NvbnRhaW5DYXBzTG9j
ayhtb2RpZmllcnMpKQorICAgICAgICB3ZWJFdmVudE1vZGlmaWVycy5hZGQoV2ViRXZlbnQ6Ok1v
ZGlmaWVyOjpDYXBzTG9ja0tleSk7CisgICAgcmV0dXJuIHdlYkV2ZW50TW9kaWZpZXJzOworfQor
Cit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZU1vdXNlRXZlbnQoV2ViS2l0V2ViVmll
d0Jhc2UqIHdlYlZpZXdCYXNlLCBNb3VzZUV2ZW50VHlwZSB0eXBlLCB1bnNpZ25lZCBidXR0b24s
IHVuc2lnbmVkIHNob3J0IGJ1dHRvbnMsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgbW9kaWZpZXJz
LCBpbnQgY2xpY2tDb3VudCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYg
PSB3ZWJWaWV3QmFzZS0+cHJpdjsKKyAgICBpZiAocHJpdi0+ZGlhbG9nKQorICAgICAgICByZXR1
cm47CisKKyAgICBXZWJNb3VzZUV2ZW50OjpCdXR0b24gd2ViRXZlbnRCdXR0b24gPSBXZWJNb3Vz
ZUV2ZW50OjpOb0J1dHRvbjsKKyAgICBzd2l0Y2ggKGJ1dHRvbikgeworICAgIGNhc2UgMDoKKyAg
ICAgICAgd2ViRXZlbnRCdXR0b24gPSBXZWJNb3VzZUV2ZW50OjpOb0J1dHRvbjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgICB3ZWJFdmVudEJ1dHRvbiA9IFdlYk1vdXNlRXZl
bnQ6OkxlZnRCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgd2Vi
RXZlbnRCdXR0b24gPSBXZWJNb3VzZUV2ZW50OjpNaWRkbGVCdXR0b247CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgMzoKKyAgICAgICAgd2ViRXZlbnRCdXR0b24gPSBXZWJNb3VzZUV2ZW50OjpS
aWdodEJ1dHRvbjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgV2ViRXZlbnQ6OlR5cGUg
d2ViRXZlbnRUeXBlOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTW91c2VFdmVudFR5
cGU6OlByZXNzOgorICAgICAgICB3ZWJFdmVudFR5cGUgPSBXZWJFdmVudDo6TW91c2VEb3duOwor
ICAgICAgICBwcml2LT5pbnB1dE1ldGhvZEZpbHRlci5jYW5jZWxDb21wb3NpdGlvbigpOworICAg
ICAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVCh3ZWJWaWV3QmFzZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIE1vdXNlRXZlbnRUeXBlOjpSZWxlYXNlOgorICAgICAgICB3
ZWJFdmVudFR5cGUgPSBXZWJFdmVudDo6TW91c2VVcDsKKyAgICAgICAgZ3RrX3dpZGdldF9ncmFi
X2ZvY3VzKEdUS19XSURHRVQod2ViVmlld0Jhc2UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBNb3VzZUV2ZW50VHlwZTo6TW90aW9uOgorICAgICAgICAvLyBGSVhNRTogYWRkIG1vdmVtZW50
IGRlbHRhIGZvciBwb2ludGVyIGxvY2suCisgICAgICAgIHdlYkV2ZW50VHlwZSA9IFdlYkV2ZW50
OjpNb3VzZU1vdmU7CisgICAgICAgIGlmIChidXR0b25zICYgR0RLX0JVVFRPTjFfTUFTSykKKyAg
ICAgICAgICAgIHdlYkV2ZW50QnV0dG9uID0gV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjsKKyAg
ICAgICAgZWxzZSBpZiAoYnV0dG9ucyAmIEdES19CVVRUT04yX01BU0spCisgICAgICAgICAgICB3
ZWJFdmVudEJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjsKKyAgICAgICAgZWxz
ZSBpZiAoYnV0dG9ucyAmIEdES19CVVRUT04zX01BU0spCisgICAgICAgICAgICB3ZWJFdmVudEJ1
dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBzaG9ydCB3ZWJFdmVudEJ1dHRvbnMgPSAwOworICAgIGlmIChidXR0
b25zICYgR0RLX0JVVFRPTjFfTUFTSykKKyAgICAgICAgd2ViRXZlbnRCdXR0b25zIHw9IDE7Cisg
ICAgaWYgKGJ1dHRvbnMgJiBHREtfQlVUVE9OMl9NQVNLKQorICAgICAgICB3ZWJFdmVudEJ1dHRv
bnMgfD0gNDsKKyAgICBpZiAoYnV0dG9ucyAmIEdES19CVVRUT04zX01BU0spCisgICAgICAgIHdl
YkV2ZW50QnV0dG9ucyB8PSAyOworCisgICAgaW50IHhSb290LCB5Um9vdDsKKyNpZiBVU0UoR1RL
NCkKKyAgICB4Um9vdCA9IHg7CisgICAgeVJvb3QgPSB5OworI2Vsc2UKKyAgICBnZGtfd2luZG93
X2dldF9yb290X2Nvb3JkcyhndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVCh3ZWJWaWV3
QmFzZSkpLCB4LCB5LCAmeFJvb3QsICZ5Um9vdCk7CisjZW5kaWYKKworICAgIHByaXYtPnBhZ2VQ
cm94eS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2ZW50KHdlYkV2ZW50VHlwZSwg
d2ViRXZlbnRCdXR0b24sIHdlYkV2ZW50QnV0dG9ucywgeyB4LCB5IH0sIHsgeFJvb3QsIHlSb290
IH0sIGNsaWNrQ291bnQsIHRvV2ViS2l0TW9kaWZpZXJzKG1vZGlmaWVycykpKTsKK30KKwordm9p
ZCB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVLZXlFdmVudChXZWJLaXRXZWJWaWV3QmFzZSog
d2ViVmlld0Jhc2UsIHVuc2lnbmVkIGtleXZhbCwgdW5zaWduZWQgbW9kaWZpZXJzKQoreworICAg
IFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworICAg
IGlmIChwcml2LT5kaWFsb2cpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhdXRvKiBwb3B1
cE1lbnUgPSBwcml2LT5wYWdlUHJveHktPmFjdGl2ZVBvcHVwTWVudSgpKSB7CisgICAgICAgIGF1
dG8qIGd0a1BvcHVwTWVudSA9IHN0YXRpY19jYXN0PFdlYlBvcHVwTWVudVByb3h5R3RrKj4ocG9w
dXBNZW51KTsKKyAgICAgICAgaWYgKGd0a1BvcHVwTWVudS0+aGFuZGxlS2V5UHJlc3Moa2V5dmFs
LCBHREtfQ1VSUkVOVF9USU1FKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAo
a2V5dmFsID09IEdES19LRVlfUmV0dXJuKSB7CisgICAgICAgICAgICBndGtQb3B1cE1lbnUtPmFj
dGl2YXRlU2VsZWN0ZWRJdGVtKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgaWYgKHByaXYtPmZ1bGxTY3Jl
ZW5Nb2RlQWN0aXZlKSB7CisgICAgICAgIHN3aXRjaCAoa2V5dmFsKSB7CisgICAgICAgIGNhc2Ug
R0RLX0tFWV9Fc2NhcGU6CisgICAgICAgIGNhc2UgR0RLX0tFWV9mOgorICAgICAgICBjYXNlIEdE
S19LRVlfRjoKKyAgICAgICAgICAgIHByaXYtPnBhZ2VQcm94eS0+ZnVsbFNjcmVlbk1hbmFnZXIo
KS0+cmVxdWVzdEV4aXRGdWxsU2NyZWVuKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgor
CisgICAgaWYgKGtleXZhbCA9PSBHREtfS0VZX01lbnUpIHsKKyAgICAgICAgd2Via2l0V2ViVmll
d0Jhc2VQb3B1cE1lbnUoR1RLX1dJREdFVCh3ZWJWaWV3QmFzZSkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgdW5zaWduZWQga2V5Y29kZSA9IDA7CisgICAgR1VuaXF1ZU91dFB0cjxH
ZGtLZXltYXBLZXk+IGtleXM7CisgICAgaW50IGtleXNDb3VudDsKKyAgICBhdXRvKiBkaXNwbGF5
ID0gZ3RrX3dpZGdldF9nZXRfZGlzcGxheShHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7CisjaWYg
VVNFKEdUSzQpCisgICAgaWYgKGdka19kaXNwbGF5X21hcF9rZXl2YWwoZGlzcGxheSwga2V5dmFs
LCAma2V5cy5vdXRQdHIoKSwgJmtleXNDb3VudCkgJiYga2V5c0NvdW50KQorICAgICAgICBrZXlj
b2RlID0ga2V5cy5nZXQoKVswXS5rZXljb2RlOworI2Vsc2UKKyAgICBHZGtLZXltYXAqIGtleW1h
cCA9IGdka19rZXltYXBfZ2V0X2Zvcl9kaXNwbGF5KGRpc3BsYXkpOworICAgIGlmIChnZGtfa2V5
bWFwX2dldF9lbnRyaWVzX2Zvcl9rZXl2YWwoa2V5bWFwLCBrZXl2YWwsICZrZXlzLm91dFB0cigp
LCAma2V5c0NvdW50KSAmJiBrZXlzQ291bnQpCisgICAgICAgIGtleWNvZGUgPSBrZXlzLmdldCgp
WzBdLmtleWNvZGU7CisjZW5kaWYKKworICAgIGF1dG8gd2ViRXZlbnRNb2RpZmllcnMgPSB0b1dl
YktpdE1vZGlmaWVycyhtb2RpZmllcnMpOworCisgICAgcHJpdi0+cGFnZVByb3h5LT5oYW5kbGVL
ZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoCisgICAgICAgIFdlYkV2ZW50OjpL
ZXlEb3duLAorICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0
cmluZyhrZXl2YWwpLAorICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmtleVZhbHVlRm9y
R2RrS2V5Q29kZShrZXl2YWwpLAorICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmtleUNv
ZGVGb3JIYXJkd2FyZUtleUNvZGUoa2V5Y29kZSksCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudDo6a2V5SWRlbnRpZmllckZvckdka0tleUNvZGUoa2V5dmFsKSwKKyAgICAgICAgUGxhdGZv
cm1LZXlib2FyZEV2ZW50Ojp3aW5kb3dzS2V5Q29kZUZvckdka0tleUNvZGUoa2V5dmFsKSwKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50PihrZXl2YWwpLAorICAgICAgICBwcml2LT5rZXlCaW5kaW5n
VHJhbnNsYXRvci5jb21tYW5kc0ZvcktleXZhbChrZXl2YWwsIG1vZGlmaWVycyksCisgICAgICAg
IGtleXZhbCA+PSBHREtfS0VZX0tQX1NwYWNlICYmIGtleXZhbCA8PSBHREtfS0VZX0tQXzksCisg
ICAgICAgIHdlYkV2ZW50TW9kaWZpZXJzKSk7CisKKyAgICBwcml2LT5wYWdlUHJveHktPmhhbmRs
ZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCgKKyAgICAgICAgV2ViRXZlbnQ6
OktleVVwLAorICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0
cmluZyhrZXl2YWwpLAorICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmtleVZhbHVlRm9y
R2RrS2V5Q29kZShrZXl2YWwpLAorICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmtleUNv
ZGVGb3JIYXJkd2FyZUtleUNvZGUoa2V5Y29kZSksCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudDo6a2V5SWRlbnRpZmllckZvckdka0tleUNvZGUoa2V5dmFsKSwKKyAgICAgICAgUGxhdGZv
cm1LZXlib2FyZEV2ZW50Ojp3aW5kb3dzS2V5Q29kZUZvckdka0tleUNvZGUoa2V5dmFsKSwKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50PihrZXl2YWwpLAorICAgICAgICB7IH0sCisgICAgICAgIGtl
eXZhbCA+PSBHREtfS0VZX0tQX1NwYWNlICYmIGtleXZhbCA8PSBHREtfS0VZX0tQXzksCisgICAg
ICAgIHdlYkV2ZW50TW9kaWZpZXJzKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgV2ViV2hlZWxFdmVu
dDo6UGhhc2UgdG9XZWJLaXRXaGVlbEV2ZW50UGhhc2UoV2hlZWxFdmVudFBoYXNlIHBoYXNlKQor
eworICAgIHN3aXRjaCAocGhhc2UpIHsKKyAgICBjYXNlIFdoZWVsRXZlbnRQaGFzZTo6Tm9QaGFz
ZToKKyAgICAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZU5vbmU7CisgICAg
Y2FzZSBXaGVlbEV2ZW50UGhhc2U6OkJlZ2FuOgorICAgICAgICByZXR1cm4gV2ViV2hlZWxFdmVu
dDo6UGhhc2U6OlBoYXNlQmVnYW47CisgICAgY2FzZSBXaGVlbEV2ZW50UGhhc2U6OkNoYW5nZWQ6
CisgICAgICAgIHJldHVybiBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkOworICAg
IGNhc2UgV2hlZWxFdmVudFBoYXNlOjpFbmRlZDoKKyAgICAgICAgcmV0dXJuIFdlYldoZWVsRXZl
bnQ6OlBoYXNlOjpQaGFzZUVuZGVkOworICAgIGNhc2UgV2hlZWxFdmVudFBoYXNlOjpDYW5jZWxs
ZWQ6CisgICAgICAgIHJldHVybiBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDYW5jZWxsZWQ7
CisgICAgY2FzZSBXaGVlbEV2ZW50UGhhc2U6Ok1heUJlZ2luOgorICAgICAgICByZXR1cm4gV2Vi
V2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTWF5QmVnaW47CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNp
emVXaGVlbEV2ZW50KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgZG91YmxlIGRlbHRh
WCwgZG91YmxlIGRlbHRhWSwgaW50IHgsIGludCB5LCBXaGVlbEV2ZW50UGhhc2UgcGhhc2UsIFdo
ZWVsRXZlbnRQaGFzZSBtb21lbnR1bVBoYXNlKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJp
dmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworICAgIGlmIChwcml2LT5kaWFsb2cpCisg
ICAgICAgIHJldHVybjsKKworICAgIGludCB4Um9vdCwgeVJvb3Q7CisjaWYgVVNFKEdUSzQpCisg
ICAgeFJvb3QgPSB4OworICAgIHlSb290ID0geTsKKyNlbHNlCisgICAgZ2RrX3dpbmRvd19nZXRf
cm9vdF9jb29yZHMoZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQod2ViVmlld0Jhc2Up
KSwgeCwgeSwgJnhSb290LCAmeVJvb3QpOworI2VuZGlmCisKKyAgICBGbG9hdFNpemUgd2hlZWxU
aWNrcyhkZWx0YVgsIGRlbHRhWSk7CisgICAgRmxvYXRTaXplIGRlbHRhKHdoZWVsVGlja3MpOwor
ICAgIGRlbHRhLnNjYWxlKHN0YXRpY19jYXN0PGZsb2F0PihTY3JvbGxiYXI6OnBpeGVsc1Blckxp
bmVTdGVwKCkpKTsKKworICAgIHByaXYtPnBhZ2VQcm94eS0+aGFuZGxlV2hlZWxFdmVudChOYXRp
dmVXZWJXaGVlbEV2ZW50KHsgeCwgeSB9LCB7IHhSb290LCB5Um9vdCB9LCBkZWx0YSwgd2hlZWxU
aWNrcywgdG9XZWJLaXRXaGVlbEV2ZW50UGhhc2UocGhhc2UpLCB0b1dlYktpdFdoZWVsRXZlbnRQ
aGFzZShtb21lbnR1bVBoYXNlKSkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZUludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlSW50ZXJuYWwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmZhZWVhNGE3NTljZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VJ
bnRlcm5hbC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdh
bGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRXZWJWaWV3QmFzZSBXZWJLaXRXZWJWaWV3QmFzZTsKKworZW51bSBjbGFzcyBNb3VzZUV2ZW50
VHlwZSB7IFByZXNzLCBSZWxlYXNlLCBNb3Rpb24gfTsKK3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VT
eW50aGVzaXplTW91c2VFdmVudChXZWJLaXRXZWJWaWV3QmFzZSosIE1vdXNlRXZlbnRUeXBlIHR5
cGUsIHVuc2lnbmVkIGJ1dHRvbiwgdW5zaWduZWQgc2hvcnQgYnV0dG9ucywgaW50IHgsIGludCB5
LCB1bnNpZ25lZCBtb2RpZmllcnMsIGludCBjbGlja0NvdW50KTsKKwordm9pZCB3ZWJraXRXZWJW
aWV3QmFzZVN5bnRoZXNpemVLZXlFdmVudChXZWJLaXRXZWJWaWV3QmFzZSosIHVuc2lnbmVkIGtl
eVZhbCwgdW5zaWduZWQgbW9kaWZpZXJzKTsKKworZW51bSBjbGFzcyBXaGVlbEV2ZW50UGhhc2Ug
eyBOb1BoYXNlLCBCZWdhbiwgQ2hhbmdlZCwgRW5kZWQsIENhbmNlbGxlZCwgTWF5QmVnaW4gfTsK
K3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplV2hlZWxFdmVudChXZWJLaXRXZWJWaWV3
QmFzZSosIGRvdWJsZSBkZWx0YVgsIGRvdWJsZSBkZWx0YVksIGludCB4LCBpbnQgeSwgV2hlZWxF
dmVudFBoYXNlLCBXaGVlbEV2ZW50UGhhc2UgbW9tZW50dW1QaGFzZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDkwNTNlY2RjNDQzNi4uODhkZGMxM2VlNTY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMTc2OSw3ICsxNzY5LDkg
QEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2b2lkIHNldEhhc0V4ZWN1dGVkQXBwQm91bmRCZWhh
dmlvckJlZm9yZU5hdmlnYXRpb24oKSB7IG1faGFzRXhlY3V0ZWRBcHBCb3VuZEJlaGF2aW9yQmVm
b3JlTmF2aWdhdGlvbiA9IHRydWU7IH0KLSAgICAgICAgCisKKyAgICBXZWJQb3B1cE1lbnVQcm94
eSogYWN0aXZlUG9wdXBNZW51KCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVQb3B1cE1lbnUuZ2V0
KCk7IH0KKwogcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHkoUGFnZUNsaWVudCYsIFdlYlByb2Nl
c3NQcm94eSYsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsKICAgICB2b2lkIHBsYXRm
b3JtSW5pdGlhbGl6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3Rr
L0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9L
ZXlCaW5kaW5nVHJhbnNsYXRvci5jcHAKaW5kZXggNmJlMjMyZTQyZWViLi42ZGIyNGI3MTM1OWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9LZXlCaW5kaW5nVHJhbnNs
YXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFu
c2xhdG9yLmNwcApAQCAtMjE3LDIxICsyMTcsMjYgQEAgc3RhdGljIGNvbnN0IEtleUNvbWJpbmF0
aW9uRW50cnkgY3VzdG9tS2V5QmluZGluZ3NbXSA9IHsKICAgICB7IEdES19LRVlfViwgICAgICAg
ICBHREtfQ09OVFJPTF9NQVNLIHwgR0RLX1NISUZUX01BU0ssICJQYXN0ZUFzUGxhaW5UZXh0IiB9
LAogfTsKIAotc3RhdGljIFZlY3RvcjxTdHJpbmc+IGhhbmRsZUN1c3RvbUtleUJpbmRpbmdzKHVu
c2lnbmVkIGtleXZhbCwgR2RrTW9kaWZpZXJUeXBlIHN0YXRlKQorc3RhdGljIFZlY3RvcjxTdHJp
bmc+IGhhbmRsZUtleUJpbmRpbmdzRm9yTWFwKGNvbnN0IEtleUNvbWJpbmF0aW9uRW50cnkqIG1h
cCwgdW5zaWduZWQgbWFwU2l6ZSwgdW5zaWduZWQga2V5dmFsLCBHZGtNb2RpZmllclR5cGUgc3Rh
dGUpCiB7CiAgICAgLy8gRm9yIGtleXByZXNzIGV2ZW50cywgd2Ugd2FudCBjaGFyQ29kZSgpLCBi
dXQga2V5Q29kZSgpIGRvZXMgdGhhdC4KICAgICB1bnNpZ25lZCBtYXBLZXkgPSAoc3RhdGUgJiAo
R0RLX1NISUZUX01BU0sgfCBHREtfQ09OVFJPTF9NQVNLIHwgR0RLX01PRDFfTUFTSykpIDw8IDE2
IHwga2V5dmFsOwogICAgIGlmICghbWFwS2V5KQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhjdXN0b21LZXlCaW5kaW5ncyk7
ICsraSkgewotICAgICAgICBpZiAobWFwS2V5ID09IChjdXN0b21LZXlCaW5kaW5nc1tpXS5zdGF0
ZSA8PCAxNiB8IGN1c3RvbUtleUJpbmRpbmdzW2ldLmdka0tleUNvZGUpKQotICAgICAgICAgICAg
cmV0dXJuIHsgY3VzdG9tS2V5QmluZGluZ3NbaV0ubmFtZSB9OworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtYXBTaXplOyArK2kpIHsKKyAgICAgICAgaWYgKG1hcEtleSA9PSAobWFwW2ld
LnN0YXRlIDw8IDE2IHwgbWFwW2ldLmdka0tleUNvZGUpKQorICAgICAgICAgICAgcmV0dXJuIHsg
bWFwW2ldLm5hbWUgfTsKICAgICB9CiAKICAgICByZXR1cm4geyB9OwogfQogCitzdGF0aWMgVmVj
dG9yPFN0cmluZz4gaGFuZGxlQ3VzdG9tS2V5QmluZGluZ3ModW5zaWduZWQga2V5dmFsLCBHZGtN
b2RpZmllclR5cGUgc3RhdGUpCit7CisgICAgcmV0dXJuIGhhbmRsZUtleUJpbmRpbmdzRm9yTWFw
KGN1c3RvbUtleUJpbmRpbmdzLCBHX05fRUxFTUVOVFMoY3VzdG9tS2V5QmluZGluZ3MpLCBrZXl2
YWwsIHN0YXRlKTsKK30KKwogI2lmIFVTRShHVEs0KQogVmVjdG9yPFN0cmluZz4gS2V5QmluZGlu
Z1RyYW5zbGF0b3I6OmNvbW1hbmRzRm9yS2V5RXZlbnQoR3RrRXZlbnRDb250cm9sbGVyS2V5KiBj
b250cm9sbGVyKQogewpAQCAtMjYxLDQgKzI2Niw3MCBAQCBWZWN0b3I8U3RyaW5nPiBLZXlCaW5k
aW5nVHJhbnNsYXRvcjo6Y29tbWFuZHNGb3JLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQpCiB9
CiAjZW5kaWYKIAorc3RhdGljIGNvbnN0IEtleUNvbWJpbmF0aW9uRW50cnkgcHJlZGVmaW5lZEtl
eUJpbmRpbmdzW10gPSB7CisgICAgeyBHREtfS0VZX0xlZnQsICAgICAgICAgMCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiTW92ZUxlZnQiIH0sCisgICAgeyBHREtfS0VZX0tQX0xl
ZnQsICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZUxlZnQiIH0s
CisgICAgeyBHREtfS0VZX0xlZnQsICAgICAgICAgR0RLX1NISUZUX01BU0ssICAgICAgICAgICAg
ICAgICAgICAiTW92ZUJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tF
WV9LUF9MZWZ0LCAgICAgIEdES19TSElGVF9NQVNLLCAgICAgICAgICAgICAgICAgICAgIk1vdmVC
YWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIgfSwKKyAgICB7IEdES19LRVlfTGVmdCwgICAgICAg
ICBHREtfQ09OVFJPTF9NQVNLLCAgICAgICAgICAgICAgICAgICJNb3ZlV29yZEJhY2t3YXJkIiB9
LAorICAgIHsgR0RLX0tFWV9LUF9MZWZ0LCAgICAgIEdES19DT05UUk9MX01BU0ssICAgICAgICAg
ICAgICAgICAgIk1vdmVXb3JkQmFja3dhcmQiIH0sCisgICAgeyBHREtfS0VZX0xlZnQsICAgICAg
ICAgR0RLX0NPTlRST0xfTUFTSyB8IEdES19TSElGVF9NQVNLLCAiTW92ZVdvcmRCYWNrd2FyZEFu
ZE1vZGlmeVNlbGVjdGlvbiIgfSwKKyAgICB7IEdES19LRVlfS1BfTGVmdCwgICAgICBHREtfQ09O
VFJPTF9NQVNLIHwgR0RLX1NISUZUX01BU0ssICJNb3ZlV29yZEJhY2t3YXJkQW5kTW9kaWZ5U2Vs
ZWN0aW8iIH0sCisgICAgeyBHREtfS0VZX1JpZ2h0LCAgICAgICAgMCwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiTW92ZVJpZ2h0IiB9LAorICAgIHsgR0RLX0tFWV9LUF9SaWdodCwg
ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVSaWdodCIgfSwKKyAg
ICB7IEdES19LRVlfUmlnaHQsICAgICAgICBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAgICAg
ICAgICJNb3ZlRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIgfSwKKyAgICB7IEdES19LRVlfS1Bf
UmlnaHQsICAgICBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAgICAgICAgICJNb3ZlRm9yd2Fy
ZEFuZE1vZGlmeVNlbGVjdGlvbiIgfSwKKyAgICB7IEdES19LRVlfUmlnaHQsICAgICAgICBHREtf
Q09OVFJPTF9NQVNLLCAgICAgICAgICAgICAgICAgICJNb3ZlV29yZEZvcndhcmQiIH0sCisgICAg
eyBHREtfS0VZX0tQX1JpZ2h0LCAgICAgR0RLX0NPTlRST0xfTUFTSywgICAgICAgICAgICAgICAg
ICAiTW92ZVdvcmRGb3J3YXJkIiB9LAorICAgIHsgR0RLX0tFWV9SaWdodCwgICAgICAgIEdES19D
T05UUk9MX01BU0sgfCBHREtfU0hJRlRfTUFTSywgIk1vdmVXb3JkRm9yd2FyZEFuZE1vZGlmeVNl
bGVjdGlvbiIgfSwKKyAgICB7IEdES19LRVlfS1BfUmlnaHQsICAgICBHREtfQ09OVFJPTF9NQVNL
IHwgR0RLX1NISUZUX01BU0ssICJNb3ZlV29yZEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24iIH0s
CisgICAgeyBHREtfS0VZX1VwLCAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiTW92ZVVwIiB9LAorICAgIHsgR0RLX0tFWV9LUF9VcCwgICAgICAgIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVVcCIgfSwKKyAgICB7IEdES19LRVlfVXAs
ICAgICAgICAgICBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAgICAgICAgICJNb3ZlVXBBbmRN
b2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZX0tQX1VwLCAgICAgICAgR0RLX1NISUZU
X01BU0ssICAgICAgICAgICAgICAgICAgICAiTW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAor
ICAgIHsgR0RLX0tFWV9Eb3duLCAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIk1vdmVEb3duIiB9LAorICAgIHsgR0RLX0tFWV9LUF9Eb3duLCAgICAgIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVEb3duIiB9LAorICAgIHsgR0RLX0tFWV9E
b3duLCAgICAgICAgIEdES19TSElGVF9NQVNLLCAgICAgICAgICAgICAgICAgICAgIk1vdmVEb3du
QW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9LUF9Eb3duLCAgICAgIEdES19T
SElGVF9NQVNLLCAgICAgICAgICAgICAgICAgICAgIk1vdmVEb3duQW5kTW9kaWZ5U2VsZWN0aW9u
IiB9LAorICAgIHsgR0RLX0tFWV9Ib21lLCAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIk1vdmVUb0JlZ2lubmluZ09mTGluZSIgfSwKKyAgICB7IEdES19LRVlfS1Bf
SG9tZSwgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9CZWdp
bm5pbmdPZkxpbmUiIH0sCisgICAgeyBHREtfS0VZX0hvbWUsICAgICAgICAgR0RLX1NISUZUX01B
U0ssICAgICAgICAgICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2Vs
ZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9LUF9Ib21lLCAgICAgIEdES19TSElGVF9NQVNLLCAg
ICAgICAgICAgICAgICAgICAgIk1vdmVUb0JlZ2lubmluZ09mTGluZUFuZE1vZGlmeVNlbGVjdGlv
biIgfSwKKyAgICB7IEdES19LRVlfSG9tZSwgICAgICAgICBHREtfQ09OVFJPTF9NQVNLLCAgICAg
ICAgICAgICAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50IiB9LAorICAgIHsgR0RLX0tF
WV9LUF9Ib21lLCAgICAgIEdES19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgICAgIk1vdmVU
b0JlZ2lubmluZ09mRG9jdW1lbnQiIH0sCisgICAgeyBHREtfS0VZX0hvbWUsICAgICAgICAgR0RL
X0NPTlRST0xfTUFTSyB8IEdES19TSElGVF9NQVNLLCAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVu
dEFuZE1vZGlmeVNlbGVjdGlvbiIgfSwKKyAgICB7IEdES19LRVlfS1BfSG9tZSwgICAgICBHREtf
Q09OVFJPTF9NQVNLIHwgR0RLX1NISUZUX01BU0ssICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50
QW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9FbmQsICAgICAgICAgIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVUb0VuZE9mTGluZSIgfSwKKyAgICB7
IEdES19LRVlfS1BfRW5kLCAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJNb3ZlVG9FbmRPZkxpbmUiIH0sCisgICAgeyBHREtfS0VZX0VuZCwgICAgICAgICAgR0RLX1NI
SUZUX01BU0ssICAgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5U2Vs
ZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9LUF9FbmQsICAgICAgIEdES19TSElGVF9NQVNLLCAg
ICAgICAgICAgICAgICAgICAgIk1vdmVUb0VuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbiIgfSwK
KyAgICB7IEdES19LRVlfRW5kLCAgICAgICAgICBHREtfQ09OVFJPTF9NQVNLLCAgICAgICAgICAg
ICAgICAgICJNb3ZlVG9FbmRPZkRvY3VtZW50IiB9LAorICAgIHsgR0RLX0tFWV9LUF9FbmQsICAg
ICAgIEdES19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgICAgIk1vdmVUb0VuZE9mRG9jdW1l
bnQiIH0sCisgICAgeyBHREtfS0VZX0VuZCwgICAgICAgICAgR0RLX0NPTlRST0xfTUFTSyB8IEdE
S19TSElGVF9NQVNLLCAiTW92ZVRvRW5kT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbiIgfSwK
KyAgICB7IEdES19LRVlfS1BfRW5kLCAgICAgICBHREtfQ09OVFJPTF9NQVNLIHwgR0RLX1NISUZU
X01BU0ssICJNb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsg
R0RLX0tFWV9QYWdlX1VwLCAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ik1vdmVQYWdlVXAiIH0sCisgICAgeyBHREtfS0VZX0tQX1BhZ2VfVXAsICAgMCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VVcCIgfSwKKyAgICB7IEdES19LRVlfUGFn
ZV9VcCwgICAgICBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZVVw
QW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9LUF9QYWdlX1VwLCAgIEdES19T
SElGVF9NQVNLLCAgICAgICAgICAgICAgICAgICAgIk1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rp
b24iIH0sCisgICAgeyBHREtfS0VZX1BhZ2VfRG93biwgICAgMCwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiTW92ZVBhZ2VEb3duIiB9LAorICAgIHsgR0RLX0tFWV9LUF9QYWdlX0Rv
d24sIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVQYWdlRG93biIgfSwK
KyAgICB7IEdES19LRVlfUGFnZV9Eb3duLCAgICBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAg
ICAgICAgICJNb3ZlUGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZ
X0tQX1BhZ2VfRG93biwgR0RLX1NISUZUX01BU0ssICAgICAgICAgICAgICAgICAgICAiTW92ZVBh
Z2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9EZWxldGUsICAgICAg
IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlbGV0ZUZvcndhcmQiIH0sCisg
ICAgeyBHREtfS0VZX0tQX0RlbGV0ZSwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiRGVsZXRlRm9yd2FyZCIgfSwKKyAgICB7IEdES19LRVlfRGVsZXRlLCAgICAgICBHREtf
Q09OVFJPTF9NQVNLLCAgICAgICAgICAgICAgICAgICJEZWxldGVXb3JkRm9yd2FyZCIgfSwKKyAg
ICB7IEdES19LRVlfS1BfRGVsZXRlLCAgICBHREtfQ09OVFJPTF9NQVNLLCAgICAgICAgICAgICAg
ICAgICJEZWxldGVXb3JkRm9yd2FyZCIgfSwKKyAgICB7IEdES19LRVlfQmFja1NwYWNlLCAgICAw
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZWxldGVCYWNrd2FyZCIgfSwKKyAg
ICB7IEdES19LRVlfQmFja1NwYWNlLCAgICBHREtfQ09OVFJPTF9NQVNLLCAgICAgICAgICAgICAg
ICAgICJEZWxldGVXb3JkQmFja3dhcmQiIH0KK307CisKK1ZlY3RvcjxTdHJpbmc+IEtleUJpbmRp
bmdUcmFuc2xhdG9yOjpjb21tYW5kc0ZvcktleXZhbCh1bnNpZ25lZCBrZXl2YWwsIHVuc2lnbmVk
IG1vZGlmaWVycykKK3sKKyAgICBhdXRvIGNvbW1hbmRzID0gaGFuZGxlS2V5QmluZGluZ3NGb3JN
YXAocHJlZGVmaW5lZEtleUJpbmRpbmdzLCBHX05fRUxFTUVOVFMocHJlZGVmaW5lZEtleUJpbmRp
bmdzKSwga2V5dmFsLCBzdGF0aWNfY2FzdDxHZGtNb2RpZmllclR5cGU+KG1vZGlmaWVycykpOwor
ICAgIGlmICghY29tbWFuZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gY29tbWFuZHM7CisK
KyAgICByZXR1cm4gaGFuZGxlQ3VzdG9tS2V5QmluZGluZ3Moa2V5dmFsLCBzdGF0aWNfY2FzdDxH
ZGtNb2RpZmllclR5cGU+KG1vZGlmaWVycykpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9LZXlCaW5kaW5nVHJhbnNs
YXRvci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9y
LmgKaW5kZXggNGM0M2FjNzMyNzZjLi5mZTA0YzFmZjQ0MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5oCkBAIC00NCw2ICs0NCw4
IEBAIHB1YmxpYzoKICNlbHNlCiAgICAgVmVjdG9yPFN0cmluZz4gY29tbWFuZHNGb3JLZXlFdmVu
dChHZGtFdmVudEtleSopOwogI2VuZGlmCisgICAgVmVjdG9yPFN0cmluZz4gY29tbWFuZHNGb3JL
ZXl2YWwodW5zaWduZWQga2V5dmFsLCB1bnNpZ25lZCBtb2RpZmllcnMpOworCiAgICAgdm9pZCBh
ZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kKSB7IG1fcGVuZGluZ0Vk
aXRvckNvbW1hbmRzLmFwcGVuZChjb21tYW5kKTsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwCmlu
ZGV4IDQ5ZmE2ODVjMzdiZC4uZmQ2NjliNGM1YTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwCkBAIC0xMDAsNiAr
MTAwLDcgQEAgc3RhdGljIHZvaWQgcG9wdXBNZW51V2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0LCBj
b25zdCBHZGtFdmVudCogdHJpZ2dlckV2ZW50LCBjb24KICAgICAgICAgZ2RrX2V2ZW50X3NldF9k
ZXZpY2Uoa2V5RXZlbnQuZ2V0KCksIGdka19zZWF0X2dldF9rZXlib2FyZChnZGtfZGlzcGxheV9n
ZXRfZGVmYXVsdF9zZWF0KGdka193aW5kb3dfZ2V0X2Rpc3BsYXkod2luZG93KSkpKTsKICAgICAg
ICAgYXV0byogZXZlbnQgPSByZWludGVycHJldF9jYXN0PEdka0V2ZW50S2V5Kj4oa2V5RXZlbnQu
Z2V0KCkpOwogICAgICAgICBldmVudC0+d2luZG93ID0gd2luZG93OworICAgICAgICBnX29iamVj
dF9yZWYod2luZG93KTsKICAgICAgICAgZXZlbnQtPnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOwog
ICAgICAgICBldmVudC0+a2V5dmFsID0gR0RLX0tFWV9NZW51OwogICAgICAgICB0cmlnZ2VyRXZl
bnQgPSBrZXlFdmVudC5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9n
dGsvV2ViUG9wdXBNZW51UHJveHlHdGsuY3BwCmluZGV4IDQ2NGRlNmNjYjljNi4uOTE1NTJlOGY2
N2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51
UHJveHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1l
bnVQcm94eUd0ay5jcHAKQEAgLTkwLDYgKzkwLDI3IEBAIGJvb2wgV2ViUG9wdXBNZW51UHJveHlH
dGs6OmFjdGl2YXRlSXRlbUF0UGF0aChHdGtUcmVlUGF0aCogcGF0aCkKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAorYm9vbCBXZWJQb3B1cE1lbnVQcm94eUd0azo6aGFuZGxlS2V5UHJlc3ModW5zaWdu
ZWQga2V5dmFsLCB1aW50MzJfdCB0aW1lc3RhbXApCit7CisgICAgaWYgKGtleXZhbCA9PSBHREtf
S0VZX0VzY2FwZSkgeworICAgICAgICBoaWRlUG9wdXBNZW51KCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHJldHVybiB0eXBlQWhlYWRGaW5kKGtleXZhbCwgdGltZXN0YW1w
KTsKK30KKwordm9pZCBXZWJQb3B1cE1lbnVQcm94eUd0azo6YWN0aXZhdGVTZWxlY3RlZEl0ZW0o
KQoreworICAgIEd0a1RyZWVNb2RlbCogbW9kZWw7CisgICAgR3RrVHJlZUl0ZXIgaXRlcjsKKyAg
ICBpZiAoIWd0a190cmVlX3NlbGVjdGlvbl9nZXRfc2VsZWN0ZWQoZ3RrX3RyZWVfdmlld19nZXRf
c2VsZWN0aW9uKEdUS19UUkVFX1ZJRVcobV90cmVlVmlldykpLCAmbW9kZWwsICZpdGVyKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR1VuaXF1ZVB0cjxHdGtUcmVlUGF0aD4gcGF0aChndGtfdHJl
ZV9tb2RlbF9nZXRfcGF0aChtb2RlbCwgJml0ZXIpKTsKKyAgICBhY3RpdmF0ZUl0ZW1BdFBhdGgo
cGF0aC5nZXQoKSk7Cit9CisKIHZvaWQgV2ViUG9wdXBNZW51UHJveHlHdGs6OnRyZWVWaWV3Um93
QWN0aXZhdGVkQ2FsbGJhY2soR3RrVHJlZVZpZXcqLCBHdGtUcmVlUGF0aCogcGF0aCwgR3RrVHJl
ZVZpZXdDb2x1bW4qLCBXZWJQb3B1cE1lbnVQcm94eUd0ayogcG9wdXBNZW51KQogewogICAgIHBv
cHVwTWVudS0+YWN0aXZhdGVJdGVtQXRQYXRoKHBhdGgpOwpAQCAtMTIwLDIzICsxNDEsMTggQEAg
Z2Jvb2xlYW4gV2ViUG9wdXBNZW51UHJveHlHdGs6OmJ1dHRvblByZXNzRXZlbnRDYWxsYmFjayhH
dGtXaWRnZXQqIHdpZGdldCwgR2RrRXYKICAgICByZXR1cm4gVFJVRTsKIH0KIAotZ2Jvb2xlYW4g
V2ViUG9wdXBNZW51UHJveHlHdGs6OmtleVByZXNzRXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqIHdp
ZGdldCwgR2RrRXZlbnRLZXkqIGV2ZW50LCBXZWJQb3B1cE1lbnVQcm94eUd0ayogcG9wdXBNZW51
KQorZ2Jvb2xlYW4gV2ViUG9wdXBNZW51UHJveHlHdGs6OmtleVByZXNzRXZlbnRDYWxsYmFjayhH
dGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnQqIGV2ZW50LCBXZWJQb3B1cE1lbnVQcm94eUd0ayog
cG9wdXBNZW51KQogewogICAgIGlmICghcG9wdXBNZW51LT5tX2RldmljZSkKICAgICAgICAgcmV0
dXJuIEZBTFNFOwogCiAgICAgZ3VpbnQga2V5dmFsOwotICAgIGdka19ldmVudF9nZXRfa2V5dmFs
KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksICZrZXl2YWwpOwotICAgIGlmIChr
ZXl2YWwgPT0gR0RLX0tFWV9Fc2NhcGUpIHsKLSAgICAgICAgcG9wdXBNZW51LT5oaWRlUG9wdXBN
ZW51KCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIGlmIChwb3B1cE1lbnUt
PnR5cGVBaGVhZEZpbmQoZXZlbnQpKQorICAgIGdka19ldmVudF9nZXRfa2V5dmFsKGV2ZW50LCAm
a2V5dmFsKTsKKyAgICBpZiAocG9wdXBNZW51LT5oYW5kbGVLZXlQcmVzcyhrZXl2YWwsIGdka19l
dmVudF9nZXRfdGltZShldmVudCkpKQogICAgICAgICByZXR1cm4gVFJVRTsKIAogICAgIC8vIEZv
cndhcmQgdGhlIGV2ZW50IHRvIHRoZSB0cmVlIHZpZXcuCi0gICAgZ3RrX3dpZGdldF9ldmVudChw
b3B1cE1lbnUtPm1fdHJlZVZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCkp
OworICAgIGd0a193aWRnZXRfZXZlbnQocG9wdXBNZW51LT5tX3RyZWVWaWV3LCBldmVudCk7CiAg
ICAgcmV0dXJuIFRSVUU7CiB9CiAKQEAgLTM1NywxNSArMzczLDEyIEBAIHZvaWQgV2ViUG9wdXBN
ZW51UHJveHlHdGs6OmNhbmNlbFRyYWNraW5nKCkKICAgICBoaWRlUG9wdXBNZW51KCk7CiB9CiAK
LU9wdGlvbmFsPHVuc2lnbmVkPiBXZWJQb3B1cE1lbnVQcm94eUd0azo6dHlwZUFoZWFkRmluZElu
ZGV4KEdka0V2ZW50S2V5KiBldmVudCkKK09wdGlvbmFsPHVuc2lnbmVkPiBXZWJQb3B1cE1lbnVQ
cm94eUd0azo6dHlwZUFoZWFkRmluZEluZGV4KHVuc2lnbmVkIGtleXZhbCwgdWludDMyX3QgdGlt
ZSkKIHsKLSAgICBndWludCBrZXl2YWw7Ci0gICAgZ2RrX2V2ZW50X2dldF9rZXl2YWwocmVpbnRl
cnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgJmtleXZhbCk7CiAgICAgZ3VuaWNoYXIga2V5
Y2hhciA9IGdka19rZXl2YWxfdG9fdW5pY29kZShrZXl2YWwpOwogICAgIGlmICghZ191bmljaGFy
X2lzcHJpbnQoa2V5Y2hhcikpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICB1
aW50MzJfdCB0aW1lID0gZ2RrX2V2ZW50X2dldF90aW1lKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZl
bnQqPihldmVudCkpOwogICAgIGlmICh0aW1lIDwgbV9wcmV2aW91c0tleUV2ZW50VGltZSkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApAQCAtNDI3LDkgKzQ0MCw5IEBAIE9wdGlvbmFs
PHVuc2lnbmVkPiBXZWJQb3B1cE1lbnVQcm94eUd0azo6dHlwZUFoZWFkRmluZEluZGV4KEdka0V2
ZW50S2V5KiBldmVudCkKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1ib29sIFdlYlBv
cHVwTWVudVByb3h5R3RrOjp0eXBlQWhlYWRGaW5kKEdka0V2ZW50S2V5KiBldmVudCkKK2Jvb2wg
V2ViUG9wdXBNZW51UHJveHlHdGs6OnR5cGVBaGVhZEZpbmQodW5zaWduZWQga2V5dmFsLCB1aW50
MzJfdCB0aW1lc3RhbXApCiB7Ci0gICAgYXV0byBzZWFyY2hJbmRleCA9IHR5cGVBaGVhZEZpbmRJ
bmRleChldmVudCk7CisgICAgYXV0byBzZWFyY2hJbmRleCA9IHR5cGVBaGVhZEZpbmRJbmRleChr
ZXl2YWwsIHRpbWVzdGFtcCk7CiAgICAgaWYgKCFzZWFyY2hJbmRleCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUG9w
dXBNZW51UHJveHlHdGsuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1l
bnVQcm94eUd0ay5oCmluZGV4IDU1NzVjNzg4M2I4Yi4uNmNiNzRiZWNiNzIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuaApAQCAt
MjksMTAgKzI5LDEwIEBACiB0eXBlZGVmIHN0cnVjdCBfR01haW5Mb29wIEdNYWluTG9vcDsKIHR5
cGVkZWYgc3RydWN0IF9HZGtEZXZpY2UgR2RrRGV2aWNlOwogdHlwZWRlZiBzdHJ1Y3QgX0dka0V2
ZW50QnV0dG9uIEdka0V2ZW50QnV0dG9uOwotdHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50S2V5IEdk
a0V2ZW50S2V5OwogdHlwZWRlZiBzdHJ1Y3QgX0d0a1RyZWVQYXRoIEd0a1RyZWVQYXRoOwogdHlw
ZWRlZiBzdHJ1Y3QgX0d0a1RyZWVWaWV3IEd0a1RyZWVWaWV3OwogdHlwZWRlZiBzdHJ1Y3QgX0d0
a1RyZWVWaWV3Q29sdW1uIEd0a1RyZWVWaWV3Q29sdW1uOwordHlwZWRlZiB1bmlvbiBfR2RrRXZl
bnQgR2RrRXZlbnQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEludFJlY3Q7CkBAIC01
Nyw2ICs1Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0SXRlbSh1bnNpZ25l
ZCBpdGVtSW5kZXgpOwogICAgIHZpcnR1YWwgdm9pZCBhY3RpdmF0ZUl0ZW0oT3B0aW9uYWw8dW5z
aWduZWQ+IGl0ZW1JbmRleCk7CiAKKyAgICBib29sIGhhbmRsZUtleVByZXNzKHVuc2lnbmVkIGtl
eXZhbCwgdWludDMyX3QgdGltZXN0YW1wKTsKKyAgICB2b2lkIGFjdGl2YXRlU2VsZWN0ZWRJdGVt
KCk7CisKIHByb3RlY3RlZDoKICAgICBXZWJQb3B1cE1lbnVQcm94eUd0ayhHdGtXaWRnZXQqLCBX
ZWJQb3B1cE1lbnVQcm94eTo6Q2xpZW50Jik7CiAKQEAgLTY2LDExICs2OSwxMSBAQCBwcml2YXRl
OgogICAgIHZvaWQgY3JlYXRlUG9wdXBNZW51KGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+Jiwg
aW50MzJfdCBzZWxlY3RlZEluZGV4KTsKICAgICB2b2lkIHNob3coKTsKICAgICBib29sIGFjdGl2
YXRlSXRlbUF0UGF0aChHdGtUcmVlUGF0aCopOwotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiB0eXBl
QWhlYWRGaW5kSW5kZXgoR2RrRXZlbnRLZXkqKTsKLSAgICBib29sIHR5cGVBaGVhZEZpbmQoR2Rr
RXZlbnRLZXkqKTsKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gdHlwZUFoZWFkRmluZEluZGV4KHVu
c2lnbmVkIGtleXZhbCwgdWludDMyX3QgdGltZXN0YW1wKTsKKyAgICBib29sIHR5cGVBaGVhZEZp
bmQodW5zaWduZWQga2V5dmFsLCB1aW50MzJfdCB0aW1lc3RhbXApOwogCiAgICAgc3RhdGljIGdi
b29sZWFuIGJ1dHRvblByZXNzRXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqLCBHZGtFdmVudEJ1dHRv
biosIFdlYlBvcHVwTWVudVByb3h5R3RrKik7Ci0gICAgc3RhdGljIGdib29sZWFuIGtleVByZXNz
RXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqLCBHZGtFdmVudEtleSosIFdlYlBvcHVwTWVudVByb3h5
R3RrKik7CisgICAgc3RhdGljIGdib29sZWFuIGtleVByZXNzRXZlbnRDYWxsYmFjayhHdGtXaWRn
ZXQqLCBHZGtFdmVudCosIFdlYlBvcHVwTWVudVByb3h5R3RrKik7CiAgICAgc3RhdGljIHZvaWQg
dHJlZVZpZXdSb3dBY3RpdmF0ZWRDYWxsYmFjayhHdGtUcmVlVmlldyosIEd0a1RyZWVQYXRoKiwg
R3RrVHJlZVZpZXdDb2x1bW4qLCBXZWJQb3B1cE1lbnVQcm94eUd0ayopOwogICAgIHN0YXRpYyBn
Ym9vbGVhbiB0cmVlVmlld0J1dHRvblJlbGVhc2VFdmVudENhbGxiYWNrKEd0a1dpZGdldCosIEdk
a0V2ZW50QnV0dG9uKiwgV2ViUG9wdXBNZW51UHJveHlHdGsqKTsKIApkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDkyYmQ0ZWY1NzhiZC4uZjBkNTA1
MTZmZjhmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzcgQEAKKzIwMjAtMDUtMjMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXVFJdIEV2ZW50U2VuZGVyOiBzdG9wIHVzaW5n
IEdka0V2ZW50IEFQSSBpbiBwcmVwYXJhdGlvbiBmb3IgR1RLNAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMjk4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIFdlYktpdFdlYlZpZXdCYXNlIGludGVy
bmFsIEFQSSB0byBzeW50aGVzaXplIGV2ZW50cyBpbnN0ZWFkIG9mIEdka0V2ZW50cy4gVGhlIHRv
dWNoIGV2ZW50cyBzdXBwb3J0IGhhcyBiZWVuCisgICAgICAgIHJlbW92ZWQgYmVjYXVzZSB3ZSBh
cmUgbm8gbG9uZ2VyIHRlc3RpbmcgdG91Y2ggZXZlbnRzLCBzaW5jZSB0aGV5IG5lZWQgYW4gYWN0
dWFsIHRvdWNoc2NyZWVuLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRl
clByb3h5Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9ndGsvRXZlbnRTZW5kZXJQcm94
eUd0ay5jcHA6CisgICAgICAgIChXVFI6OmdldEdES0tleVN5bUZvcktleVJlZik6CisgICAgICAg
IChXVFI6OnRvV2ViS2l0R0xpYkFQSSk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6
OmtleURvd24pOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZURvd24pOgor
ICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZVVwKToKKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kZXJQcm94eTo6bW91c2VNb3ZlVG8pOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRl
clByb3h5Ojptb3VzZVNjcm9sbEJ5KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6
Y29udGludW91c01vdXNlU2Nyb2xsQnkpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5
Ojptb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMpOgorICAgICAgICAoV1RS
OjpFdmVudFNlbmRlclByb3h5OjpsZWFwRm9yd2FyZCk6CisgICAgICAgIChXVFI6OkV2ZW50U2Vu
ZGVyUHJveHk6OmFkZFRvdWNoUG9pbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5
Ojp1cGRhdGVUb3VjaFBvaW50KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6dG91
Y2hTdGFydCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnRvdWNoTW92ZSk6Cisg
ICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnRvdWNoRW5kKToKKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hDYW5jZWwpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRl
clByb3h5OjpjbGVhclRvdWNoUG9pbnRzKToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94
eTo6cmVsZWFzZVRvdWNoUG9pbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojpj
YW5jZWxUb3VjaFBvaW50KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6c2V0VG91
Y2hQb2ludFJhZGl1cyk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNo
TW9kaWZpZXIpOgorCiAyMDIwLTA1LTIyICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBkb3dubG9hZCByZXN1bWUgd29ya2Fyb3VuZCBm
b3JnaXZpbmcgb2YgY2hhbmdlcyBpbiBDRk5ldHdvcmsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9F
dmVudFNlbmRlclByb3h5LmgKaW5kZXggMTEzOTliMzkwZmU5Li5kOGEyNzIzYzIyMzcgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oCkBAIC0zMiwxMSArMzIsNiBA
QAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
LSNpZiBQTEFURk9STShHVEspCi0jaW5jbHVkZSA8V2ViQ29yZS9HVW5pcXVlUHRyR3RrLmg+Ci0j
aW5jbHVkZSA8Z2RrL2dkay5oPgotI2VuZGlmCi0KICNpZiBQTEFURk9STShXUEUpCiAjaW5jbHVk
ZSA8d3BlL3dwZS5oPgogI2VuZGlmCkBAIC00OSwxMCArNDQsNiBAQCBuYW1lc3BhY2UgV1RSIHsK
IAogY2xhc3MgVGVzdENvbnRyb2xsZXI7CiAKLSNpZiBQTEFURk9STShHVEspCi1zdHJ1Y3QgV1RS
RXZlbnRRdWV1ZUl0ZW07Ci0jZW5kaWYKLQogY2xhc3MgRXZlbnRTZW5kZXJQcm94eSB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0xMDIsMTAgKzkzLDYgQEAgcHJp
dmF0ZToKICAgICBkb3VibGUgY3VycmVudEV2ZW50VGltZSgpIHsgcmV0dXJuIG1fdGltZTsgfQog
ICAgIHZvaWQgdXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQgYnV0dG9uKTsKIAotI2lmIFBM
QVRGT1JNKEdUSykKLSAgICB2b2lkIHJlcGxheVNhdmVkRXZlbnRzKCk7Ci0jZW5kaWYKLQogICAg
IHZvaWQgc2VuZE1vdXNlRG93blRvU3RhcnRQcmVzc3VyZUV2ZW50cygpOwogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIGVudW0gY2xhc3MgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb24geyBJbmNyZWFz
aW5nLCBEZWNyZWFzaW5nIH07CkBAIC0xMTQsMTQgKzEwMSw2IEBAIHByaXZhdGU6CiAgICAgUmV0
YWluUHRyPE5TRXZlbnQ+IHByZXNzdXJlQ2hhbmdlRXZlbnQoaW50IHN0YWdlLCBmbG9hdCBwcmVz
c3VyZSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb24pOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShH
VEspCi0gICAgdm9pZCBzZW5kT3JRdWV1ZUV2ZW50KEdka0V2ZW50Kik7Ci0gICAgdm9pZCBkaXNw
YXRjaEV2ZW50KEdka0V2ZW50Kik7Ci0gICAgR2RrRXZlbnQqIGNyZWF0ZU1vdXNlQnV0dG9uRXZl
bnQoR2RrRXZlbnRUeXBlLCB1bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMpOwotICAg
IEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGNyZWF0ZVRvdWNoRXZlbnQoR2RrRXZlbnRUeXBlLCBpbnQg
aWQpOwotICAgIHZvaWQgc2VuZFVwZGF0ZWRUb3VjaEV2ZW50cygpOwotI2VuZGlmCi0KICNpZiBQ
TEFURk9STShXUEUpCiAgICAgVmVjdG9yPHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfcmF3
PiBnZXRVcGRhdGVkVG91Y2hFdmVudHMoKTsKICAgICB2b2lkIHJlbW92ZVVwZGF0ZWRUb3VjaEV2
ZW50cygpOwpAQCAtMTQwLDE3ICsxMTksMTEgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgbV9jbGlj
a1RpbWU7CiAgICAgV0tQb2ludCBtX2NsaWNrUG9zaXRpb247CiAgICAgV0tFdmVudE1vdXNlQnV0
dG9uIG1fY2xpY2tCdXR0b247CisgICAgdW5zaWduZWQgbV9tb3VzZUJ1dHRvbnNDdXJyZW50bHlE
b3duIHsgMCB9OwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGludCBldmVudE51bWJlcjsKLSAg
ICB1bnNpZ25lZCBtX21vdXNlQnV0dG9uc0N1cnJlbnRseURvd24geyAwIH07Ci0jZWxpZiBQTEFU
Rk9STShHVEspCi0gICAgRGVxdWU8V1RSRXZlbnRRdWV1ZUl0ZW0+IG1fZXZlbnRRdWV1ZTsKLSAg
ICB1bnNpZ25lZCBtX21vdXNlQnV0dG9uc0N1cnJlbnRseURvd24geyAwIH07Ci0gICAgVmVjdG9y
PEdVbmlxdWVQdHI8R2RrRXZlbnQ+PiBtX3RvdWNoRXZlbnRzOwotICAgIEhhc2hTZXQ8aW50PiBt
X3VwZGF0ZWRUb3VjaEV2ZW50czsKICNlbGlmIFBMQVRGT1JNKFdQRSkKICAgICB1aW50MzJfdCBt
X2J1dHRvblN0YXRlOwotICAgIHVpbnQzMl90IG1fbW91c2VCdXR0b25zQ3VycmVudGx5RG93biB7
IDAgfTsKICAgICBWZWN0b3I8c3RydWN0IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXc+IG1fdG91
Y2hFdmVudHM7CiAgICAgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpI
YXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV91cGRh
dGVkVG91Y2hFdmVudHM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvZ3RrL0V2ZW50U2VuZGVyUHJveHlHdGsuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9n
dGsvRXZlbnRTZW5kZXJQcm94eUd0ay5jcHAKaW5kZXggODQ4MWYxZDdhNWUyLi5iODVlZjRlNzFk
N2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL0V2ZW50U2VuZGVyUHJv
eHlHdGsuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL0V2ZW50U2VuZGVyUHJv
eHlHdGsuY3BwCkBAIC0zNSwxMSArMzUsMTAgQEAKIAogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmll
dy5oIgogI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmll
d0Jhc2VJbnRlcm5hbC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3RrVXRpbGl0aWVzLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9HdGtWZXJzaW9uaW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBs
ZW1lbnRlZC5oPgorI2luY2x1ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDxnZGsvZ2Rra2V5c3lt
cy5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1
ZVB0ci5oPgpAQCAtNTksMjIgKzU4LDYgQEAgZW51bSBLZXlMb2NhdGlvbkNvZGUgewogfTsKIAog
Ci1zdHJ1Y3QgV1RSRXZlbnRRdWV1ZUl0ZW0gewotICAgIEdka0V2ZW50KiBldmVudDsKLSAgICBn
dWxvbmcgZGVsYXk7Ci0KLSAgICBXVFJFdmVudFF1ZXVlSXRlbSgpCi0gICAgICAgIDogZXZlbnQo
MCkKLSAgICAgICAgLCBkZWxheSgwKQotICAgIHsKLSAgICB9Ci0gICAgV1RSRXZlbnRRdWV1ZUl0
ZW0oR2RrRXZlbnQqIGV2ZW50LCBndWxvbmcgZGVsYXkpCi0gICAgICAgIDogZXZlbnQoZXZlbnQp
Ci0gICAgICAgICwgZGVsYXkoZGVsYXkpCi0gICAgewotICAgIH0KLX07Ci0KIEV2ZW50U2VuZGVy
UHJveHk6OkV2ZW50U2VuZGVyUHJveHkoVGVzdENvbnRyb2xsZXIqIHRlc3RDb250cm9sbGVyKQog
ICAgIDogbV90ZXN0Q29udHJvbGxlcih0ZXN0Q29udHJvbGxlcikKICAgICAsIG1fdGltZSgwKQpA
QCAtMTE5LDI4ICsxMDIsNiBAQCBzdGF0aWMgZ3VpbnQgd2Via2l0TW9kaWZpZXJzVG9HREtNb2Rp
ZmllcnMoV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVycykKICAgICByZXR1cm4gbW9kaWZpZXJz
OwogfQogCi1HZGtFdmVudCogRXZlbnRTZW5kZXJQcm94eTo6Y3JlYXRlTW91c2VCdXR0b25FdmVu
dChHZGtFdmVudFR5cGUgZXZlbnRUeXBlLCB1bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2RpZmll
cnMgbW9kaWZpZXJzKQotewotICAgIEdka0V2ZW50KiBtb3VzZUV2ZW50ID0gZ2RrX2V2ZW50X25l
dyhldmVudFR5cGUpOwotCi0gICAgbW91c2VFdmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsK
LSAgICBtb3VzZUV2ZW50LT5idXR0b24ueCA9IG1fcG9zaXRpb24ueDsKLSAgICBtb3VzZUV2ZW50
LT5idXR0b24ueSA9IG1fcG9zaXRpb24ueTsKLSAgICBtb3VzZUV2ZW50LT5idXR0b24ud2luZG93
ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQobV90ZXN0Q29udHJvbGxlci0+bWFp
bldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpKTsKLSAgICBnX29iamVjdF9yZWYobW91c2VFdmVu
dC0+YnV0dG9uLndpbmRvdyk7Ci0gICAgZ2RrX2V2ZW50X3NldF9kZXZpY2UobW91c2VFdmVudCwg
Z2RrX3NlYXRfZ2V0X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHRfc2VhdChnZGtfd2lu
ZG93X2dldF9kaXNwbGF5KG1vdXNlRXZlbnQtPmJ1dHRvbi53aW5kb3cpKSkpOwotICAgIG1vdXNl
RXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IHdlYmtpdE1vZGlmaWVyc1RvR0RLTW9kaWZpZXJzKG1vZGlm
aWVycykgfCBtX21vdXNlQnV0dG9uc0N1cnJlbnRseURvd247Ci0gICAgbW91c2VFdmVudC0+YnV0
dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOwotICAgIG1vdXNlRXZlbnQtPmJ1dHRvbi5heGVz
ID0gMDsKLQotICAgIGludCB4Um9vdCwgeVJvb3Q7Ci0gICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9j
b29yZHMobW91c2VFdmVudC0+YnV0dG9uLndpbmRvdywgbV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9u
LnksICZ4Um9vdCwgJnlSb290KTsKLSAgICBtb3VzZUV2ZW50LT5idXR0b24ueF9yb290ID0geFJv
b3Q7Ci0gICAgbW91c2VFdmVudC0+YnV0dG9uLnlfcm9vdCA9IHlSb290OwotCi0gICAgcmV0dXJu
IG1vdXNlRXZlbnQ7Ci19Ci0KIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlQ2xpY2tDb3Vu
dEZvckJ1dHRvbihpbnQgYnV0dG9uKQogewogICAgIGlmIChtX3RpbWUgLSBtX2NsaWNrVGltZSA8
IDEgJiYgbV9wb3NpdGlvbiA9PSBtX2NsaWNrUG9zaXRpb24gJiYgYnV0dG9uID09IG1fY2xpY2tC
dXR0b24pIHsKQEAgLTE1NSw0MSArMTE2LDEyIEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBk
YXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQgYnV0dG9uKQogICAgIG1fY2xpY2tCdXR0b24gPSBi
dXR0b247CiB9CiAKLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6ZGlzcGF0Y2hFdmVudChHZGtFdmVu
dCogZXZlbnQpCi17Ci0gICAgQVNTRVJUKG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCkp
OwotICAgIGd0a19tYWluX2RvX2V2ZW50KGV2ZW50KTsKLSAgICBnZGtfZXZlbnRfZnJlZShldmVu
dCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6cmVwbGF5U2F2ZWRFdmVudHMoKQotewot
ICAgIHdoaWxlICghbV9ldmVudFF1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBXVFJFdmVudFF1
ZXVlSXRlbSBpdGVtID0gbV9ldmVudFF1ZXVlLnRha2VGaXJzdCgpOwotICAgICAgICBpZiAoaXRl
bS5kZWxheSkKLSAgICAgICAgICAgIGdfdXNsZWVwKGl0ZW0uZGVsYXkgKiAxMDAwKTsKLQotICAg
ICAgICBkaXNwYXRjaEV2ZW50KGl0ZW0uZXZlbnQpOwotICAgIH0KLX0KLQotdm9pZCBFdmVudFNl
bmRlclByb3h5OjpzZW5kT3JRdWV1ZUV2ZW50KEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBpZiAo
bV9ldmVudFF1ZXVlLmlzRW1wdHkoKSB8fCAhbV9ldmVudFF1ZXVlLmxhc3QoKS5kZWxheSkgewot
ICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fZXZlbnRRdWV1ZS5sYXN0KCkuZXZlbnQgPSBldmVudDsKLSAgICByZXBsYXlTYXZlZEV2
ZW50cygpOwotfQotCi1pbnQgZ2V0R0RLS2V5U3ltRm9yS2V5UmVmKFdLU3RyaW5nUmVmIGtleVJl
ZiwgdW5zaWduZWQgbG9jYXRpb24sIGd1aW50KiBtb2RpZmllcnMpCitzdGF0aWMgaW50IGdldEdE
S0tleVN5bUZvcktleVJlZihXS1N0cmluZ1JlZiBrZXlSZWYsIHVuc2lnbmVkIGxvY2F0aW9uLCBn
dWludCogbW9kaWZpZXJzKQogewogICAgIGlmIChsb2NhdGlvbiA9PSBET01LZXlMb2NhdGlvbk51
bXBhZCkgewogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYs
ICJsZWZ0QXJyb3ciKSkKICAgICAgICAgICAgIHJldHVybiBHREtfS0VZX0tQX0xlZnQ7Ci0gICAg
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInJpZ2h0QXJyb3Ii
KSkKKyAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicmln
aHRBcnJvdyIpKQogICAgICAgICAgICAgcmV0dXJuIEdES19LRVlfS1BfUmlnaHQ7CiAgICAgICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInVwQXJyb3ciKSkKICAg
ICAgICAgICAgIHJldHVybiBHREtfS0VZX0tQX1VwOwpAQCAtMjk0LDI4ICsyMjYsMTcgQEAgaW50
IGdldEdES0tleVN5bUZvcktleVJlZihXS1N0cmluZ1JlZiBrZXlSZWYsIHVuc2lnbmVkIGxvY2F0
aW9uLCBndWludCogbW9kaWZpZXIKICAgICByZXR1cm4gZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKHN0
YXRpY19jYXN0PGd1aW50MzI+KGJ1ZmZlci5nZXQoKVswXSkpOwogfQogCitzdGF0aWMgaW5saW5l
IFdlYktpdFdlYlZpZXdCYXNlKiB0b1dlYktpdEdMaWJBUEkoUGxhdGZvcm1XS1ZpZXcgdmlldykK
K3sKKyAgICAvLyBXZSB1c2UgYSBDIGNhc3QgaGVyZSwgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRv
IGluY2x1ZGUgV2ViS2l0V2ViVmlld0Jhc2UuaC4KKyAgICByZXR1cm4gKFdlYktpdFdlYlZpZXdC
YXNlKil2aWV3OworfQorCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmtleURvd24oV0tTdHJpbmdS
ZWYga2V5UmVmLCBXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzLCB1bnNpZ25lZCBsb2NhdGlv
bikKIHsKICAgICBndWludCBtb2RpZmllcnMgPSB3ZWJraXRNb2RpZmllcnNUb0dES01vZGlmaWVy
cyh3a01vZGlmaWVycyk7CiAgICAgaW50IGdka0tleVN5bSA9IGdldEdES0tleVN5bUZvcktleVJl
ZihrZXlSZWYsIGxvY2F0aW9uLCAmbW9kaWZpZXJzKTsKLQotICAgIEdka0V2ZW50KiBwcmVzc0V2
ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfS0VZX1BSRVNTKTsKLSAgICBwcmVzc0V2ZW50LT5rZXku
a2V5dmFsID0gZ2RrS2V5U3ltOwotICAgIHByZXNzRXZlbnQtPmtleS5zdGF0ZSA9IG1vZGlmaWVy
czsKLSAgICBwcmVzc0V2ZW50LT5rZXkud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KEdU
S19XSURHRVQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3co
KSkpOwotICAgIGdfb2JqZWN0X3JlZihwcmVzc0V2ZW50LT5rZXkud2luZG93KTsKLSAgICBHZGtE
aXNwbGF5KiBkaXNwbGF5ID0gZ2RrX3dpbmRvd19nZXRfZGlzcGxheShwcmVzc0V2ZW50LT5rZXku
d2luZG93KTsKLSAgICBnZGtfZXZlbnRfc2V0X2RldmljZShwcmVzc0V2ZW50LCBnZGtfc2VhdF9n
ZXRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGVmYXVsdF9zZWF0KGRpc3BsYXkpKSk7Ci0KLSAg
ICBHVW5pcXVlT3V0UHRyPEdka0tleW1hcEtleT4ga2V5czsKLSAgICBnaW50IG5LZXlzOwotICAg
IGlmIChnZGtfa2V5bWFwX2dldF9lbnRyaWVzX2Zvcl9rZXl2YWwoZ2RrX2tleW1hcF9nZXRfZm9y
X2Rpc3BsYXkoZGlzcGxheSksIGdka0tleVN5bSwgJmtleXMub3V0UHRyKCksICZuS2V5cykgJiYg
bktleXMpCi0gICAgICAgIHByZXNzRXZlbnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0ga2V5cy5n
ZXQoKVswXS5rZXljb2RlOwotCi0gICAgR2RrRXZlbnQqIHJlbGVhc2VFdmVudCA9IGdka19ldmVu
dF9jb3B5KHByZXNzRXZlbnQpOwotICAgIGRpc3BhdGNoRXZlbnQocHJlc3NFdmVudCk7Ci0gICAg
cmVsZWFzZUV2ZW50LT5rZXkudHlwZSA9IEdES19LRVlfUkVMRUFTRTsKLSAgICBkaXNwYXRjaEV2
ZW50KHJlbGVhc2VFdmVudCk7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplS2V5RXZl
bnQodG9XZWJLaXRHTGliQVBJKG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRm
b3JtVmlldygpKSwgZ2RrS2V5U3ltLCBtb2RpZmllcnMpOwogfQogCiB2b2lkIEV2ZW50U2VuZGVy
UHJveHk6Om1vdXNlRG93bih1bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMgd2tNb2Rp
ZmllcnMpCkBAIC0zMjgsNDAgKzI0OSwyMyBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNl
RG93bih1bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMpCiAgICAg
aWYgKG1fbW91c2VCdXR0b25zQ3VycmVudGx5RG93biAmIG1vZGlmaWVyKQogICAgICAgICByZXR1
cm47CiAKLSAgICAvLyBOb3JtYWxseSBHREsgd2lsbCBzZW5kIGJvdGggR0RLX0JVVFRPTl9QUkVT
UyBhbmQgR0RLXzJCVVRUT05fUFJFU1MgZm9yCi0gICAgLy8gdGhlIHNlY29uZCBidXR0b24gcHJl
c3MgZHVyaW5nIGRvdWJsZS1jbGlja3MuIFdlYktpdCBHVEsrIHNlbGVjdGl2ZWx5Ci0gICAgLy8g
aWdub3JlcyB0aGUgZmlyc3QgR0RLX0JVVFRPTl9QUkVTUyBvZiB0aGF0IHBhaXIgdXNpbmcgZ2Rr
X2V2ZW50X3BlZWsuCi0gICAgLy8gU2luY2Ugb3VyIGV2ZW50cyBhcmVuJ3QgZXZlciBnb2luZyBv
bnRvIHRoZSBHREsgZXZlbnQgcXVldWUsIFdlYktpdCB3b24ndAotICAgIC8vIGJlIGFibGUgdG8g
ZmlsdGVyIG91dCB0aGUgZmlyc3QgR0RLX0JVVFRPTl9QUkVTUywgc28gd2UganVzdCBkb24ndCBz
ZW5kCi0gICAgLy8gaXQgaGVyZS4gRXZlbnR1YWxseSB0aGlzIGNvZGUgc2hvdWxkIHByb2JhYmx5
IGZpZ3VyZSBvdXQgYSB3YXkgdG8gZ2V0IGFsbAotICAgIC8vIGFwcHJvcHJpYXRlIGV2ZW50cyBv
bnRvIHRoZSBldmVudCBxdWV1ZSBhbmQgdGhpcyB3b3JrLWFyb3VuZCBzaG91bGQgYmUKLSAgICAv
LyByZW1vdmVkLgogICAgIHVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oYnV0dG9uKTsKLQotICAg
IEdka0V2ZW50VHlwZSBldmVudFR5cGU7Ci0gICAgaWYgKG1fY2xpY2tDb3VudCA9PSAyKQotICAg
ICAgICBldmVudFR5cGUgPSBHREtfMkJVVFRPTl9QUkVTUzsKLSAgICBlbHNlIGlmIChtX2NsaWNr
Q291bnQgPT0gMykKLSAgICAgICAgZXZlbnRUeXBlID0gR0RLXzNCVVRUT05fUFJFU1M7Ci0gICAg
ZWxzZQotICAgICAgICBldmVudFR5cGUgPSBHREtfQlVUVE9OX1BSRVNTOwotCi0gICAgR2RrRXZl
bnQqIGV2ZW50ID0gY3JlYXRlTW91c2VCdXR0b25FdmVudChldmVudFR5cGUsIGdka0J1dHRvbiwg
d2tNb2RpZmllcnMpOwogICAgIG1fbW91c2VCdXR0b25zQ3VycmVudGx5RG93biB8PSBtb2RpZmll
cjsKLSAgICBzZW5kT3JRdWV1ZUV2ZW50KGV2ZW50KTsKKworICAgIHdlYmtpdFdlYlZpZXdCYXNl
U3ludGhlc2l6ZU1vdXNlRXZlbnQodG9XZWJLaXRHTGliQVBJKG1fdGVzdENvbnRyb2xsZXItPm1h
aW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSwKKyAgICAgICAgTW91c2VFdmVudFR5cGU6OlBy
ZXNzLCBnZGtCdXR0b24sIG1fbW91c2VCdXR0b25zQ3VycmVudGx5RG93biwgbV9wb3NpdGlvbi54
LCBtX3Bvc2l0aW9uLnksIHdlYmtpdE1vZGlmaWVyc1RvR0RLTW9kaWZpZXJzKHdrTW9kaWZpZXJz
KSwgbV9jbGlja0NvdW50KTsKIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVVwKHVu
c2lnbmVkIGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVycykKIHsKLSAgICBtX2Ns
aWNrQnV0dG9uID0ga1dLRXZlbnRNb3VzZUJ1dHRvbk5vQnV0dG9uOwogICAgIHVuc2lnbmVkIGdk
a0J1dHRvbiA9IGV2ZW50U2VuZGVyQnV0dG9uVG9HREtCdXR0b24oYnV0dG9uKTsKLSAgICBHZGtF
dmVudCogZXZlbnQgPSBjcmVhdGVNb3VzZUJ1dHRvbkV2ZW50KEdES19CVVRUT05fUkVMRUFTRSwg
Z2RrQnV0dG9uLCB3a01vZGlmaWVycyk7CiAgICAgYXV0byBtb2RpZmllciA9IFdlYkNvcmU6OnN0
YXRlTW9kaWZpZXJGb3JHZGtCdXR0b24oZ2RrQnV0dG9uKTsKICAgICBtX21vdXNlQnV0dG9uc0N1
cnJlbnRseURvd24gJj0gfm1vZGlmaWVyOwotICAgIHNlbmRPclF1ZXVlRXZlbnQoZXZlbnQpOwor
ICAgIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZU1vdXNlRXZlbnQodG9XZWJLaXRHTGliQVBJ
KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSwKKyAgICAg
ICAgTW91c2VFdmVudFR5cGU6OlJlbGVhc2UsIGdka0J1dHRvbiwgbV9tb3VzZUJ1dHRvbnNDdXJy
ZW50bHlEb3duLCBtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSwgd2Via2l0TW9kaWZpZXJzVG9H
REtNb2RpZmllcnMod2tNb2RpZmllcnMpLCAwKTsKIAogICAgIG1fY2xpY2tQb3NpdGlvbiA9IG1f
cG9zaXRpb247Ci0gICAgbV9jbGlja1RpbWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIG1fY2xp
Y2tUaW1lID0gbV90aW1lOwogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlTW92ZVRv
KGRvdWJsZSB4LCBkb3VibGUgeSkKQEAgLTM2OSwyMyArMjczLDggQEAgdm9pZCBFdmVudFNlbmRl
clByb3h5Ojptb3VzZU1vdmVUbyhkb3VibGUgeCwgZG91YmxlIHkpCiAgICAgbV9wb3NpdGlvbi54
ID0geDsKICAgICBtX3Bvc2l0aW9uLnkgPSB5OwogCi0gICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2Rr
X2V2ZW50X25ldyhHREtfTU9USU9OX05PVElGWSk7Ci0gICAgZXZlbnQtPm1vdGlvbi54ID0gbV9w
b3NpdGlvbi54OwotICAgIGV2ZW50LT5tb3Rpb24ueSA9IG1fcG9zaXRpb24ueTsKLQotICAgIGV2
ZW50LT5tb3Rpb24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgZXZlbnQtPm1vdGlvbi53
aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVChtX3Rlc3RDb250cm9sbGVy
LT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSkpOwotICAgIGdfb2JqZWN0X3JlZihldmVu
dC0+bW90aW9uLndpbmRvdyk7Ci0gICAgZ2RrX2V2ZW50X3NldF9kZXZpY2UoZXZlbnQsIGdka19z
ZWF0X2dldF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3NlYXQoZ2RrX3dpbmRvd19n
ZXRfZGlzcGxheShldmVudC0+bW90aW9uLndpbmRvdykpKSk7Ci0gICAgZXZlbnQtPm1vdGlvbi5z
dGF0ZSA9IG1fbW91c2VCdXR0b25zQ3VycmVudGx5RG93bjsKLSAgICBldmVudC0+bW90aW9uLmF4
ZXMgPSAwOwotCi0gICAgaW50IHhSb290LCB5Um9vdDsKLSAgICBnZGtfd2luZG93X2dldF9yb290
X2Nvb3JkcyhndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVChtX3Rlc3RDb250cm9sbGVy
LT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSkpLCBtX3Bvc2l0aW9uLngsIG1fcG9zaXRp
b24ueSAsICZ4Um9vdCwgJnlSb290KTsKLSAgICBldmVudC0+bW90aW9uLnhfcm9vdCA9IHhSb290
OwotICAgIGV2ZW50LT5tb3Rpb24ueV9yb290ID0geVJvb3Q7Ci0KLSAgICBzZW5kT3JRdWV1ZUV2
ZW50KGV2ZW50KTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVNb3VzZUV2ZW50KHRv
V2ViS2l0R0xpYkFQSShtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZp
ZXcoKSksCisgICAgICAgIE1vdXNlRXZlbnRUeXBlOjpNb3Rpb24sIDAsIG1fbW91c2VCdXR0b25z
Q3VycmVudGx5RG93biwgbV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnksIDAsIDApOwogfQogCiB2
b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnkoaW50IGhvcml6b250YWwsIGludCB2
ZXJ0aWNhbCkKQEAgLTM5NCwzNiArMjgzLDggQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3Vz
ZVNjcm9sbEJ5KGludCBob3Jpem9udGFsLCBpbnQgdmVydGljYWwpCiAgICAgaWYgKCFob3Jpem9u
dGFsICYmICF2ZXJ0aWNhbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR2RrRXZlbnQqIGV2ZW50
ID0gZ2RrX2V2ZW50X25ldyhHREtfU0NST0xMKTsKLSAgICBldmVudC0+c2Nyb2xsLnggPSBtX3Bv
c2l0aW9uLng7Ci0gICAgZXZlbnQtPnNjcm9sbC55ID0gbV9wb3NpdGlvbi55OwotICAgIGV2ZW50
LT5zY3JvbGwudGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgZXZlbnQtPnNjcm9sbC53aW5k
b3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVChtX3Rlc3RDb250cm9sbGVyLT5t
YWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSkpOwotICAgIGdfb2JqZWN0X3JlZihldmVudC0+
c2Nyb2xsLndpbmRvdyk7Ci0gICAgZ2RrX2V2ZW50X3NldF9kZXZpY2UoZXZlbnQsIGdka19zZWF0
X2dldF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3NlYXQoZ2RrX3dpbmRvd19nZXRf
ZGlzcGxheShldmVudC0+c2Nyb2xsLndpbmRvdykpKSk7Ci0KLSAgICAvLyBGb3IgbW9yZSB0aGFu
IG9uZSB0aWNrIGluIGEgc2Nyb2xsLCB3ZSBuZWVkIHNtb290aCBzY3JvbGwgZXZlbnQKLSAgICBp
ZiAoKGhvcml6b250YWwgJiYgdmVydGljYWwpIHx8IGhvcml6b250YWwgPiAxIHx8IGhvcml6b250
YWwgPCAtMSB8fCB2ZXJ0aWNhbCA+IDEgfHwgdmVydGljYWwgPCAtMSkgewotICAgICAgICBldmVu
dC0+c2Nyb2xsLmRpcmVjdGlvbiA9IEdES19TQ1JPTExfU01PT1RIOwotICAgICAgICBldmVudC0+
c2Nyb2xsLmRlbHRhX3ggPSAtaG9yaXpvbnRhbDsKLSAgICAgICAgZXZlbnQtPnNjcm9sbC5kZWx0
YV95ID0gLXZlcnRpY2FsOwotCi0gICAgICAgIHNlbmRPclF1ZXVlRXZlbnQoZXZlbnQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGhvcml6b250YWwgPCAwKQotICAgICAgICBl
dmVudC0+c2Nyb2xsLmRpcmVjdGlvbiA9IEdES19TQ1JPTExfUklHSFQ7Ci0gICAgZWxzZSBpZiAo
aG9yaXpvbnRhbCA+IDApCi0gICAgICAgIGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1ND
Uk9MTF9MRUZUOwotICAgIGVsc2UgaWYgKHZlcnRpY2FsIDwgMCkKLSAgICAgICAgZXZlbnQtPnNj
cm9sbC5kaXJlY3Rpb24gPSBHREtfU0NST0xMX0RPV047Ci0gICAgZWxzZSBpZiAodmVydGljYWwg
PiAwKQotICAgICAgICBldmVudC0+c2Nyb2xsLmRpcmVjdGlvbiA9IEdES19TQ1JPTExfVVA7Ci0g
ICAgZWxzZQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotCi0gICAgc2VuZE9yUXVl
dWVFdmVudChldmVudCk7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplV2hlZWxFdmVu
dCh0b1dlYktpdEdMaWJBUEkobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZv
cm1WaWV3KCkpLAorICAgICAgICBob3Jpem9udGFsLCB2ZXJ0aWNhbCwgbV9wb3NpdGlvbi54LCBt
X3Bvc2l0aW9uLnksIFdoZWVsRXZlbnRQaGFzZTo6Tm9QaGFzZSwgV2hlZWxFdmVudFBoYXNlOjpO
b1BoYXNlKTsKIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojpjb250aW51b3VzTW91c2VTY3Jv
bGxCeShpbnQgaG9yaXpvbnRhbCwgaW50IHZlcnRpY2FsLCBib29sIHBhZ2VkKQpAQCAtNDM0LDE1
MSArMjk1LDEwMiBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNvbnRpbnVvdXNNb3VzZVNjcm9s
bEJ5KGludCBob3Jpem9udGFsLCBpbnQgdmVydGljYWwsIGJvbwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfU0NST0xMKTsK
LSAgICBldmVudC0+c2Nyb2xsLnggPSBtX3Bvc2l0aW9uLng7Ci0gICAgZXZlbnQtPnNjcm9sbC55
ID0gbV9wb3NpdGlvbi55OwotICAgIGV2ZW50LT5zY3JvbGwudGltZSA9IEdES19DVVJSRU5UX1RJ
TUU7Ci0gICAgZXZlbnQtPnNjcm9sbC53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3coR1RL
X1dJREdFVChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSkp
OwotICAgIGdfb2JqZWN0X3JlZihldmVudC0+c2Nyb2xsLndpbmRvdyk7Ci0gICAgZ2RrX2V2ZW50
X3NldF9kZXZpY2UoZXZlbnQsIGdka19zZWF0X2dldF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9k
ZWZhdWx0X3NlYXQoZ2RrX3dpbmRvd19nZXRfZGlzcGxheShldmVudC0+c2Nyb2xsLndpbmRvdykp
KSk7Ci0KLSAgICBldmVudC0+c2Nyb2xsLmRpcmVjdGlvbiA9IEdES19TQ1JPTExfU01PT1RIOwot
ICAgIGV2ZW50LT5zY3JvbGwuZGVsdGFfeCA9IC1ob3Jpem9udGFsIC8gcGl4ZWxzUGVyU2Nyb2xs
VGljazsKLSAgICBldmVudC0+c2Nyb2xsLmRlbHRhX3kgPSAtdmVydGljYWwgLyBwaXhlbHNQZXJT
Y3JvbGxUaWNrOworICAgIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZVdoZWVsRXZlbnQodG9X
ZWJLaXRHTGliQVBJKG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmll
dygpKSwKKyAgICAgICAgaG9yaXpvbnRhbCAvIHBpeGVsc1BlclNjcm9sbFRpY2ssIHZlcnRpY2Fs
IC8gcGl4ZWxzUGVyU2Nyb2xsVGljaywgbV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnksIFdoZWVs
RXZlbnRQaGFzZTo6Tm9QaGFzZSwgV2hlZWxFdmVudFBoYXNlOjpOb1BoYXNlKTsKK30KKwordm9p
ZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFz
ZXMoaW50IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCwgaW50IHBoYXNlLCBpbnQgbW9tZW50dW0p
Cit7CisgICAgV2hlZWxFdmVudFBoYXNlIGV2ZW50UGhhc2UgPSBXaGVlbEV2ZW50UGhhc2U6Ok5v
UGhhc2U7CisgICAgc3dpdGNoIChwaGFzZSkgeworICAgIGNhc2UgMDoKKyAgICAgICAgZXZlbnRQ
aGFzZSA9IFdoZWVsRXZlbnRQaGFzZTo6Tm9QaGFzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSAxOgorICAgICAgICBldmVudFBoYXNlID0gV2hlZWxFdmVudFBoYXNlOjpCZWdhbjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICBldmVudFBoYXNlID0gV2hlZWxFdmVudFBo
YXNlOjpDaGFuZ2VkOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIGV2ZW50
UGhhc2UgPSBXaGVlbEV2ZW50UGhhc2U6OkVuZGVkOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IDg6CisgICAgICAgIGV2ZW50UGhhc2UgPSBXaGVlbEV2ZW50UGhhc2U6OkNhbmNlbGxlZDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSAxMjg6CisgICAgICAgIGV2ZW50UGhhc2UgPSBXaGVlbEV2
ZW50UGhhc2U6Ok1heUJlZ2luOworICAgICAgICBicmVhazsKKyAgICB9CiAKLSAgICBzZW5kT3JR
dWV1ZUV2ZW50KGV2ZW50KTsKLX0KKyAgICBXaGVlbEV2ZW50UGhhc2UgZXZlbnRNb21lbnR1bVBo
YXNlID0gV2hlZWxFdmVudFBoYXNlOjpOb1BoYXNlOworICAgIHN3aXRjaCAobW9tZW50dW0pIHsK
KyAgICBjYXNlIDA6CisgICAgICAgIGV2ZW50UGhhc2UgPSBXaGVlbEV2ZW50UGhhc2U6Ok5vUGhh
c2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAgZXZlbnRQaGFzZSA9IFdo
ZWVsRXZlbnRQaGFzZTo6QmVnYW47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAg
ICAgZXZlbnRQaGFzZSA9IFdoZWVsRXZlbnRQaGFzZTo6Q2hhbmdlZDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSAzOgorICAgICAgICBldmVudFBoYXNlID0gV2hlZWxFdmVudFBoYXNlOjpFbmRl
ZDsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCi12b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNl
U2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyhpbnQgeCwgaW50IHksIGludCAvKnBo
YXNlKi8sIGludCAvKm1vbWVudHVtKi8pCi17Ci0gICAgLy8gR3RrKyBkb2VzIG5vdCBoYXZlIHRo
ZSBjb25jZXB0IG9mIHdoZWVsIGdlc3R1cmUgcGhhc2VzIG9yIG1vbWVudHVtLiBKdXN0IHJlbGF5
IHRvCi0gICAgLy8gdGhlIG1vdXNlIHdoZWVsIGhhbmRsZXIuCi0gICAgbW91c2VTY3JvbGxCeSh4
LCB5KTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVXaGVlbEV2ZW50KHRvV2ViS2l0
R0xpYkFQSShtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSks
CisgICAgICAgIGhvcml6b250YWwsIHZlcnRpY2FsLCBtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24u
eSwgZXZlbnRQaGFzZSwgZXZlbnRNb21lbnR1bVBoYXNlKTsKIH0KIAogdm9pZCBFdmVudFNlbmRl
clByb3h5OjpsZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRzKQogewotICAgIGlmIChtX2V2ZW50
UXVldWUuaXNFbXB0eSgpKQotICAgICAgICBtX2V2ZW50UXVldWUuYXBwZW5kKFdUUkV2ZW50UXVl
dWVJdGVtKCkpOwotCi0gICAgbV9ldmVudFF1ZXVlLmxhc3QoKS5kZWxheSA9IG1pbGxpc2Vjb25k
czsKICAgICBtX3RpbWUgKz0gbWlsbGlzZWNvbmRzIC8gMTAwMC4wOwogfQogCi12b2lkIHVwZGF0
ZUV2ZW50Q29vcmRpbmF0ZXMoR2RrRXZlbnQqIHRvdWNoRXZlbnQsIGludCB4LCBpbnQgeSkKLXsK
LSAgICB0b3VjaEV2ZW50LT50b3VjaC54ID0geDsKLSAgICB0b3VjaEV2ZW50LT50b3VjaC55ID0g
eTsKLQotICAgIGludCB4Um9vdCwgeVJvb3Q7Ci0gICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29y
ZHModG91Y2hFdmVudC0+dG91Y2gud2luZG93LCB4LCB5LCAmeFJvb3QsICZ5Um9vdCk7Ci0gICAg
dG91Y2hFdmVudC0+dG91Y2gueF9yb290ID0geFJvb3Q7Ci0gICAgdG91Y2hFdmVudC0+dG91Y2gu
eV9yb290ID0geVJvb3Q7Ci19Ci0KLUdVbmlxdWVQdHI8R2RrRXZlbnQ+IEV2ZW50U2VuZGVyUHJv
eHk6OmNyZWF0ZVRvdWNoRXZlbnQoR2RrRXZlbnRUeXBlIGV2ZW50VHlwZSwgaW50IGlkKQotewot
ICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IHRvdWNoRXZlbnQoZ2RrX2V2ZW50X25ldyhldmVudFR5
cGUpKTsKLQotICAgIHRvdWNoRXZlbnQtPnRvdWNoLnNlcXVlbmNlID0gc3RhdGljX2Nhc3Q8R2Rr
RXZlbnRTZXF1ZW5jZSo+KEdJTlRfVE9fUE9JTlRFUihpZCkpOwotICAgIHRvdWNoRXZlbnQtPnRv
dWNoLndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKG1fdGVzdENvbnRy
b2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSk7Ci0gICAgZ19vYmplY3RfcmVm
KHRvdWNoRXZlbnQtPnRvdWNoLndpbmRvdyk7Ci0gICAgZ2RrX2V2ZW50X3NldF9kZXZpY2UodG91
Y2hFdmVudC5nZXQoKSwgZ2RrX3NlYXRfZ2V0X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1
bHRfc2VhdChnZGtfd2luZG93X2dldF9kaXNwbGF5KHRvdWNoRXZlbnQtPmJ1dHRvbi53aW5kb3cp
KSkpOwotICAgIHRvdWNoRXZlbnQtPnRvdWNoLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOwotCi0g
ICAgcmV0dXJuIHRvdWNoRXZlbnQ7Ci19Ci0KICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotdm9p
ZCBFdmVudFNlbmRlclByb3h5OjphZGRUb3VjaFBvaW50KGludCB4LCBpbnQgeSkKK3ZvaWQgRXZl
bnRTZW5kZXJQcm94eTo6YWRkVG91Y2hQb2ludChpbnQsIGludCkKIHsKLSAgICAvLyBUb3VjaCBJ
RCBpcyBhcnJheSBpbmRleCBwbHVzIG9uZSwgc28gMCBpcyBza2lwcGVkLgotICAgIEdVbmlxdWVQ
dHI8R2RrRXZlbnQ+IGV2ZW50ID0gY3JlYXRlVG91Y2hFdmVudChzdGF0aWNfY2FzdDxHZGtFdmVu
dFR5cGU+KEdES19UT1VDSF9CRUdJTiksIG1fdG91Y2hFdmVudHMuc2l6ZSgpICsgMSk7Ci0gICAg
dXBkYXRlRXZlbnRDb29yZGluYXRlcyhldmVudC5nZXQoKSwgeCwgeSk7Ci0gICAgbV91cGRhdGVk
VG91Y2hFdmVudHMuYWRkKEdQT0lOVEVSX1RPX0lOVChldmVudC0+dG91Y2guc2VxdWVuY2UpKTsK
LSAgICBtX3RvdWNoRXZlbnRzLmFwcGVuZChzdGQ6Om1vdmUoZXZlbnQpKTsKIH0KIAotdm9pZCBF
dmVudFNlbmRlclByb3h5Ojp1cGRhdGVUb3VjaFBvaW50KGludCBpbmRleCwgaW50IHgsIGludCB5
KQordm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVUb3VjaFBvaW50KGludCwgaW50LCBpbnQp
CiB7Ci0gICAgQVNTRVJUKGluZGV4ID49IDAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkg
PCBtX3RvdWNoRXZlbnRzLnNpemUoKSk7Ci0KLSAgICBjb25zdCBhdXRvJiBldmVudCA9IG1fdG91
Y2hFdmVudHNbaW5kZXhdOwotICAgIEFTU0VSVChldmVudCk7Ci0KLSAgICBldmVudC0+dHlwZSA9
IEdES19UT1VDSF9VUERBVEU7Ci0gICAgdXBkYXRlRXZlbnRDb29yZGluYXRlcyhldmVudC5nZXQo
KSwgeCwgeSk7Ci0gICAgbV91cGRhdGVkVG91Y2hFdmVudHMuYWRkKEdQT0lOVEVSX1RPX0lOVChl
dmVudC0+dG91Y2guc2VxdWVuY2UpKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5k
VXBkYXRlZFRvdWNoRXZlbnRzKCkKLXsKLSAgICBmb3IgKGF1dG8gaWQgOiBtX3VwZGF0ZWRUb3Vj
aEV2ZW50cykKLSAgICAgICAgc2VuZE9yUXVldWVFdmVudChnZGtfZXZlbnRfY29weShtX3RvdWNo
RXZlbnRzW2lkIC0gMV0uZ2V0KCkpKTsKLQotICAgIG1fdXBkYXRlZFRvdWNoRXZlbnRzLmNsZWFy
KCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dG91Y2hTdGFydCgpCiB7Ci0gICAgc2Vu
ZFVwZGF0ZWRUb3VjaEV2ZW50cygpOwogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNo
TW92ZSgpCiB7Ci0gICAgc2VuZFVwZGF0ZWRUb3VjaEV2ZW50cygpOwogfQogCiB2b2lkIEV2ZW50
U2VuZGVyUHJveHk6OnRvdWNoRW5kKCkKIHsKLSAgICBzZW5kVXBkYXRlZFRvdWNoRXZlbnRzKCk7
CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dG91Y2hDYW5jZWwoKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6Y2xlYXJUb3VjaFBvaW50
cygpCiB7Ci0gICAgbV91cGRhdGVkVG91Y2hFdmVudHMuY2xlYXIoKTsKLSAgICBtX3RvdWNoRXZl
bnRzLmNsZWFyKCk7CiB9CiAKLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6cmVsZWFzZVRvdWNoUG9p
bnQoaW50IGluZGV4KQordm9pZCBFdmVudFNlbmRlclByb3h5OjpyZWxlYXNlVG91Y2hQb2ludChp
bnQpCiB7Ci0gICAgQVNTRVJUKGluZGV4ID49IDAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRl
eCkgPCBtX3RvdWNoRXZlbnRzLnNpemUoKSk7Ci0KLSAgICBjb25zdCBhdXRvJiBldmVudCA9IG1f
dG91Y2hFdmVudHNbaW5kZXhdOwotICAgIGV2ZW50LT50eXBlID0gR0RLX1RPVUNIX0VORDsKLSAg
ICBtX3VwZGF0ZWRUb3VjaEV2ZW50cy5hZGQoR1BPSU5URVJfVE9fSU5UKGV2ZW50LT50b3VjaC5z
ZXF1ZW5jZSkpOwogfQogCi12b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNhbmNlbFRvdWNoUG9pbnQo
aW50IGluZGV4KQordm9pZCBFdmVudFNlbmRlclByb3h5OjpjYW5jZWxUb3VjaFBvaW50KGludCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNl
dFRvdWNoUG9pbnRSYWRpdXMoaW50IHJhZGl1c1gsIGludCByYWRpdXNZKQordm9pZCBFdmVudFNl
bmRlclByb3h5OjpzZXRUb3VjaFBvaW50UmFkaXVzKGludCwgaW50KQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2RpZmllcihX
S0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVyLCBib29sIGVuYWJsZSkKK3ZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6c2V0VG91Y2hNb2RpZmllcihXS0V2ZW50TW9kaWZpZXJzLCBib29sKQogewotICAgIGd1
aW50IHN0YXRlID0gd2Via2l0TW9kaWZpZXJzVG9HREtNb2RpZmllcnMobW9kaWZpZXIpOwotCi0g
ICAgZm9yIChjb25zdCBhdXRvJiBldmVudCA6IG1fdG91Y2hFdmVudHMpIHsKLSAgICAgICAgaWYg
KGV2ZW50LT50eXBlID09IEdES19UT1VDSF9FTkQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBpZiAoZW5hYmxlKQotICAgICAgICAgICAgZXZlbnQtPnRvdWNoLnN0YXRlIHw9IHN0
YXRlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBldmVudC0+dG91Y2guc3RhdGUgJj0gfihz
dGF0ZSk7Ci0KLSAgICAgICAgbV91cGRhdGVkVG91Y2hFdmVudHMuYWRkKEdQT0lOVEVSX1RPX0lO
VChldmVudC0+dG91Y2guc2VxdWVuY2UpKTsKLSAgICB9CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFRP
VUNIX0VWRU5UUykKIAo=
</data>
<flag name="review"
          id="415543"
          type_id="1"
          status="-"
          setter="aperez"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400152</attachid>
            <date>2020-05-24 02:15:01 -0700</date>
            <delta_ts>2020-05-24 06:25:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wtr-no-gdk-events.diff</filename>
            <type>text/plain</type>
            <size>64141</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjYzA0MDU0NzBhMDguLmMzYjI3MjM0ZGNmMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBA
CisyMDIwLTA1LTI0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXVtXVFJdIEV2ZW50U2VuZGVyOiBzdG9wIHVzaW5nIEdka0V2ZW50IEFQ
SSBpbiBwcmVwYXJhdGlvbiBmb3IgR1RLNAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMjk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXBkYXRlIGV4cGVjdGF0aW9ucyBmb3IgdGVzdHMgdGhhdCBhcmUg
cGFzc2luZyBub3cuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9uczoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvZWRpdGluZy9zZWxlY3Rpb24vNTE5NTE2Ni0xLWV4cGVj
dGVkLnR4dDogUmVtb3ZlZC4KKwogMjAyMC0wNS0yMiAgSmFjayBMZWUgIDxzaGloY2hpZWhfbGVl
QGFwcGxlLmNvbT4KIAogICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiAoIXNfY3VycmVudCB8fCAm
bV92aWV3ICE9ICZzX2N1cnJlbnQtPm1fdmlldykgaW4gUmVuZGVyVHJlZUJ1aWxkZXI6OlJlbmRl
clRyZWVCdWlsZGVyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4
cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCmlu
ZGV4IGMzYTIzYjdiYmI5OS4uMGY0MDMyNzllZTYwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTQ4NSw4ICsxNDg1LDYgQEAgd2Via2l0Lm9yZy9iLzIx
MDkyNiBmYXN0L21lZGlhc3RyZWFtL2dldERpc3BsYXlNZWRpYS1tYXgtY29uc3RyYWludHMzLmh0
bWwgWyBTa2kKIAogd2Via2l0Lm9yZy9iLzE5OTIyNCBlZGl0aW5nL3Bhc3RlYm9hcmQvY29weS1w
YXN0ZS1hY3Jvc3Mtc2hhZG93LWJvdW5kYXJpZXMtd2l0aC1zdHlsZS0yLmh0bWwgWyBDcmFzaCBd
CiAKLXdlYmtpdC5vcmcvYi8yMTIwMTggZmFzdC9ldmVudHMvY29udGV4dC1hY3RpdmF0ZWQtYnkt
a2V5LWV2ZW50Lmh0bWwgWyBDcmFzaCBdCi0KIHdlYmtpdC5vcmcvYi8yMTIyMzIgZWRpdGluZy9h
c3luYy1jbGlwYm9hcmQvY2xpcGJvYXJkLXJlYWQtd2hpbGUtcGFzdGluZy5odG1sIFsgQ3Jhc2gg
XQogCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMzM4Niw3ICszMzg0LDYg
QEAgd2Via2l0Lm9yZy9iLzE1NzE3OSBmYXN0L2V2ZW50cy9kcmFnLWFuZC1kcm9wLWF1dG9zY3Jv
bGwtaW5uZXItZnJhbWUuaHRtbCBbIFRpbWUKIAogIyBXZWJLaXQyIHRlc3RSdW5uZXIuc2V0RWRp
dGluZ0JlaGF2aW91ciBhcHBlYXJzIGJyb2tlbiBzb21ldGltZXMuCiB3ZWJraXQub3JnL2IvMTQ0
NzY0IFsgUmVsZWFzZSBdIGVkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1t
YWMuaHRtbCBbIEZhaWx1cmUgXQotQnVnKEdUSykgZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWFm
dGVyLW1vdXNlLXNlbGVjdGlvbi5odG1sIFsgRmFpbHVyZSBdCiAKICMgV2ViS2l0MiBuZWVkcyB0
ZXh0SW5wdXRDb250cm9sbGVyLnNlbGVjdGVkUmFuZ2UKIEJ1ZyhHVEspIGVkaXRpbmcvc2VsZWN0
aW9uL21peGVkLWVkaXRhYmlsaXR5LTEwLmh0bWwgWyBGYWlsdXJlIF0KQEAgLTM0MjcsNyArMzQy
NCw2IEBAIEJ1ZyhHVEspIHBsYXRmb3JtL2d0ay9mYXN0L2V2ZW50cy9ldmVudC1zZW5kZXItbWV0
YWtleS5odG1sIFsgRmFpbHVyZSBdCiAKICMgVW5leHBsYWluZWQgZmFpbHVyZXMKIEJ1ZyhHVEsp
IGZhc3QvY3NzL2Rpc2FibGVkLWF1dGhvci1zdHlsZXMuaHRtbCBbIEZhaWx1cmUgXQotQnVnKEdU
SykgZmFzdC9ldmVudHMva2V5ZG93bi1udW1wYWQta2V5cy5odG1sIFsgRmFpbHVyZSBdCiBCdWco
R1RLKSBmYXN0L2V2ZW50cy9yZW1vdmUtdGFyZ2V0LXdpdGgtc2hhZG93LWluLWRyYWcuaHRtbCBb
IEZhaWx1cmUgXQogQnVnKEdUSykgZmFzdC9mb3Jtcy9saXN0Ym94LXR5cGVhaGVhZC1jeXJpbGxp
Yy5odG1sIFsgRmFpbHVyZSBdCiBCdWcoR1RLKSBmYXN0L2Zvcm1zL2xpc3Rib3gtdHlwZWFoZWFk
LWdyZWVrLmh0bWwgWyBGYWlsdXJlIF0KQEAgLTM1OTEsNyArMzU4Nyw2IEBAIHdlYmtpdC5vcmcv
Yi83NDI4MiBlZGl0aW5nL3Bhc3RlYm9hcmQvZW1hY3MtY3RybC1rLXdpdGgtbW92ZS5odG1sIFsg
RmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi84NDY3OSBjc3MzL3pvb20tY29vcmRzLnhodG1sIFsg
RmFpbHVyZSBdCiAKLXdlYmtpdC5vcmcvYi84NDY5NCBmYXN0L2V2ZW50cy9zZWxlY3RzdGFydC1i
eS1kb3VibGUtdHJpcGxlLWNsaWNrcy5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvODQ2
OTIgZmFzdC9ldmVudHMvYXR0ZW1wdC1zY3JvbGwtd2l0aC1uby1zY3JvbGxiYXJzLmh0bWwgWyBG
YWlsdXJlIF0KIAogIyBJbnRlcmZlcmVzIHdpdGggdGhlIHJBRiB0ZXN0cyB0aGF0IGFyZSBlbmFi
bGVkCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZWRpdGluZy9zZWxlY3Rp
b24vNTE5NTE2Ni0xLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9lZGl0
aW5nL3NlbGVjdGlvbi81MTk1MTY2LTEtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjMzIyMTExZWJiY2YuLjAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvZWRpdGluZy9zZWxlY3Rpb24vNTE5NTE2Ni0xLWV4cGVjdGVkLnR4dAorKysg
L2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotVGhpcyB0ZXN0cyBmb3IgYSBidWcgd2hlcmUgZXh0
ZW5kaW5nIGEgc2VsZWN0aW9uIGNyZWF0ZWQgd2l0aCB0aGUgbW91c2Ugd291bGQgYmxvdyBpdCBh
d2F5IGJlZm9yZSBleHRlbmRpbmcgaXQuCi0KLVRoZXJlIHNob3VsZCBiZSBzaXggY2hhcmFjdGVy
cyBzZWxlY3RlZCBpbiB0aGlzIHNlbnRlbmNlIG9uIE1hYyBhbmQgZm91ciBjaGFyYWN0ZXJzIHNl
bGVjdGVkIG9uIFdpbi9MaW51eC4KLVN1Y2Nlc3MKLUZhaWx1cmU6IFNlbGVjdGVkIHRleHQgd2Fz
ICJoZXJlIHNob3VsZCBiZSBzaXggY2hhcmFjdGVycyBzZWxlY3RlZCBpbiB0aGlzIHNlbnRlbmNl
IG9uIE1hYyBhbmQgZm91ciBjaGFyYWN0ZXJzIHNlbGVjdGVkIG9uIFdpbi9MaW51eC4iIGFuZCBz
aG91bGQgYmUgImhvdWxkIGJlICIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYWEwM2VjNjQxMWMuLmM2ZTI1YWRl
MDBjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA1LTI0ICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXVFJdIEV2
ZW50U2VuZGVyOiBzdG9wIHVzaW5nIEdka0V2ZW50IEFQSSBpbiBwcmVwYXJhdGlvbiBmb3IgR1RL
NAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMjk4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGhl
bHBlcnMgdG8gR3RrVXRpbGl0aWVzIHRvIGF2b2lkICNpZmRlZnMgZHVlIHRvIEdUSyB2ZXJzaW9u
IGRpZmZlcmVuY2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp3aWRnZXRSb290Q29vcmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OndpZGdldEtleXZhbFRvS2V5Y29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a1V0aWxp
dGllcy5oOgorCiAyMDIwLTA1LTIyICBKYWNrIExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29t
PgogCiAgICAgICAgIEFTU0VSVElPTiBGQUlMRUQ6ICghc19jdXJyZW50IHx8ICZtX3ZpZXcgIT0g
JnNfY3VycmVudC0+bV92aWV3KSBpbiBSZW5kZXJUcmVlQnVpbGRlcjo6UmVuZGVyVHJlZUJ1aWxk
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAKaW5kZXgg
YjQzNTFlZDVhZWNjLi5mYzE2MDE4ZWVlZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtVdGlsaXRpZXMuY3BwCkBAIC03Myw2ICs3MywzNiBAQCBib29sIHdpZGdldElzT25z
Y3JlZW5Ub3BsZXZlbFdpbmRvdyhHdGtXaWRnZXQqIHdpZGdldCkKICNlbmRpZiAvLyBVU0UoR1RL
NCkKIH0KIAorSW50UG9pbnQgd2lkZ2V0Um9vdENvb3JkcyhHdGtXaWRnZXQqIHdpZGdldCwgaW50
IHgsIGludCB5KQoreworI2lmIFVTRShHVEs0KQorICAgIHJldHVybiB7IHgsIHkgfTsKKyNlbHNl
CisgICAgaW50IHhSb290LCB5Um9vdDsKKyAgICBnZGtfd2luZG93X2dldF9yb290X2Nvb3Jkcyhn
dGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3QpOworICAg
IHJldHVybiB7IHhSb290LCB5Um9vdCB9OworI2VuZGlmCit9CisKK3Vuc2lnbmVkIHdpZGdldEtl
eXZhbFRvS2V5Y29kZShHdGtXaWRnZXQqIHdpZGdldCwgdW5zaWduZWQga2V5dmFsKQoreworICAg
IHVuc2lnbmVkIGtleWNvZGUgPSAwOworICAgIEdVbmlxdWVPdXRQdHI8R2RrS2V5bWFwS2V5PiBr
ZXlzOworICAgIGludCBrZXlzQ291bnQ7CisgICAgYXV0byogZGlzcGxheSA9IGd0a193aWRnZXRf
Z2V0X2Rpc3BsYXkod2lkZ2V0KTsKKworI2lmIFVTRShHVEs0KQorICAgIGlmIChnZGtfZGlzcGxh
eV9tYXBfa2V5dmFsKGRpc3BsYXksIGtleXZhbCwgJmtleXMub3V0UHRyKCksICZrZXlzQ291bnQp
ICYmIGtleXNDb3VudCkKKyAgICAgICAga2V5Y29kZSA9IGtleXMuZ2V0KClbMF0ua2V5Y29kZTsK
KyNlbHNlCisgICAgR2RrS2V5bWFwKiBrZXltYXAgPSBnZGtfa2V5bWFwX2dldF9mb3JfZGlzcGxh
eShkaXNwbGF5KTsKKyAgICBpZiAoZ2RrX2tleW1hcF9nZXRfZW50cmllc19mb3Jfa2V5dmFsKGtl
eW1hcCwga2V5dmFsLCAma2V5cy5vdXRQdHIoKSwgJmtleXNDb3VudCkgJiYga2V5c0NvdW50KQor
ICAgICAgICBrZXljb2RlID0ga2V5cy5nZXQoKVswXS5rZXljb2RlOworI2VuZGlmCisKKyAgICBy
ZXR1cm4ga2V5Y29kZTsKK30KKwogdGVtcGxhdGU8PgogV2FsbFRpbWUgd2FsbFRpbWVGb3JFdmVu
dChjb25zdCBHZGtFdmVudCogZXZlbnQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrVXRpbGl0aWVzLmgKaW5kZXggNWY1YTVmYjcxNTIxLi41NzQ1MGYzZDI5ZTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmgKQEAgLTMxLDYgKzMxLDggQEAg
Y2xhc3MgSW50UG9pbnQ7CiAKIEludFBvaW50IGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9p
bnQoR3RrV2lkZ2V0KiwgY29uc3QgSW50UG9pbnQmKTsKIGJvb2wgd2lkZ2V0SXNPbnNjcmVlblRv
cGxldmVsV2luZG93KEd0a1dpZGdldCopOworSW50UG9pbnQgd2lkZ2V0Um9vdENvb3JkcyhHdGtX
aWRnZXQqLCBpbnQsIGludCk7Cit1bnNpZ25lZCB3aWRnZXRLZXl2YWxUb0tleWNvZGUoR3RrV2lk
Z2V0KiwgdW5zaWduZWQpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBHZGtFdmVudFR5cGU+CiBXYWxs
VGltZSB3YWxsVGltZUZvckV2ZW50KGNvbnN0IEdka0V2ZW50VHlwZSogZXZlbnQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGU2MDU2YmZjYzg0NC4uMjJiY2M3YzhkYmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBA
CisyMDIwLTA1LTI0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXVtXVFJdIEV2ZW50U2VuZGVyOiBzdG9wIHVzaW5nIEdka0V2ZW50IEFQ
SSBpbiBwcmVwYXJhdGlvbiBmb3IgR1RLNAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMjk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGludGVybmFsIEFQSSB0byBXZWJLaXRXZWJWaWV3QmFzZSB0
byBzeW50aGVzaXplIGV2ZW50cywgYmVjYXVzZSB3aXRoIEdUSzQgaXQncyBub3QgcG9zc2libGUg
dG8KKyAgICAgICAgY3JlYXRlIGV2ZW50cy4gSW4gdGhlIGNhc2Ugb2YgbGF5b3V0IHRlc3RzLCB0
aGUgd2ViIHZpZXcgaXMgYWx3YXlzIHRoZSB0YXJnZXQgb2YgdGhlIGV2ZW50cywgc28gd2UgZG9u
J3QgcmVhbGx5CisgICAgICAgIG5lZWQgdG8gc2VuZCB0aGUgZXZlbnRzIHRvIEdUSyB0byBwcm9j
ZXNzIHRoZW0uCisKKyAgICAgICAgKiBTaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oOiBB
ZGQgbmV3IGNvbnN0cnVjdG9yIHRoYXQgZG9lc24ndCByZWNlaXZlIGEgR2RrRXZlbnQuCisgICAg
ICAgICogU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaDogRGl0dG8uCisgICAgICAgICogU2hh
cmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaDogRGl0dG8uCisgICAgICAgICogU2hhcmVkL2d0ay9O
YXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCk6IENyZWF0ZSB3aXRob3V0IGEg
R2RrRXZlbnQuCisgICAgICAgICogU2hhcmVkL2d0ay9OYXRpdmVXZWJNb3VzZUV2ZW50R3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TmF0aXZlV2ViTW91c2VFdmVudDo6TmF0aXZlV2ViTW91c2VF
dmVudCk6IERpdHRvLgorICAgICAgICAqIFNoYXJlZC9ndGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0
ay5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldo
ZWVsRXZlbnQpOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aEtleUV2
ZW50KTogUmV0dXJuIGVhcmx5IGlmIGV2ZW50IGRvZXNuJ3QgaGF2ZSBhIEdka0V2ZW50LgorICAg
ICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3VjaEV2ZW50KTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aGVlbEV2ZW50V2FzTm90SGFuZGxl
ZEJ5V2ViQ29yZSk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHRvV2ViS2l0TW9kaWZpZXJzKToKKyAgICAgICAgKHdl
YmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZU1vdXNlRXZlbnQpOgorICAgICAgICAod2Via2l0V2Vi
Vmlld0Jhc2VTeW50aGVzaXplS2V5RXZlbnQpOgorICAgICAgICAodG9XZWJLaXRXaGVlbEV2ZW50
UGhhc2UpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplV2hlZWxFdmVudCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VJbnRlcm5hbC5o
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6YWN0aXZlUG9wdXBNZW51IGNvbnN0KTogUmV0dXJuIHRoZSBh
Y3RpdmUgcG9wdXAgbWVudSBwcm94eS4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0tleUJpbmRp
bmdUcmFuc2xhdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6aGFuZGxlS2V5QmluZGluZ3NGb3JN
YXApOiBNYWtlIGl0IGdlbmVyaWMgYnkgcmVjZWl2aW5nIHRoZSBtYXAgYXMgcGFyYW1ldGVyLgor
ICAgICAgICAoV2ViS2l0OjpoYW5kbGVDdXN0b21LZXlCaW5kaW5ncyk6IENhbGwgaGFuZGxlS2V5
QmluZGluZ3NGb3JNYXAoKSBwYXNzaW5nIHRoZSBjdXN0b20ga2V5IGJpbmRpbmdzIG1hcC4KKyAg
ICAgICAgKFdlYktpdDo6S2V5QmluZGluZ1RyYW5zbGF0b3I6OmNvbW1hbmRzRm9yS2V5dmFsKTog
R2V0IGNvbW1hbmRzIGZvciB0aGUgcHJlZGVmaW5lZCBrZXkgYmluZGluZ3MuIFRoaXMgaXMgdXNl
ZAorICAgICAgICBvbmx5IHdoZW4gc3ludGhlc2l6aW5nIGtleSBldmVudHMgc2luY2Ugd2UgZG9u
J3QgaGF2ZSBhIEdka0VWZW50IHRvIGZvcndhcmQgdG8gdGhlIEd0a1RleHRWaWV3LgorICAgICAg
ICAqIFVJUHJvY2Vzcy9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0Ojpw
b3B1cE1lbnVXaWRnZXQpOiBUYWtlIGEgcmVmIG9mIHRoZSBHZGtXaW5kb3cgd2hlbiBjcmVhdGlu
ZyB0aGUgR2RrRXZlbnQsIHNpbmNlIHRoZSBldmVudCB3aWxsIHVucmVmIGl0CisgICAgICAgIG9u
IGRlc3Ryb3kuCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5R3RrOjpoYW5kbGVLZXlQcmVz
cyk6IEhhbmRsZSBhIGtleSBwcmVzcyBldmVudCBmcm9tIGl0cyBrZXl2YWwgYW5kIHRpbWVzdGFt
cC4KKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlHdGs6OmFjdGl2YXRlU2VsZWN0
ZWRJdGVtKTogQWN0aXZhdGUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtLgorICAgICAgICAo
V2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0azo6a2V5UHJlc3NFdmVudENhbGxiYWNrKTogQ2Fs
bCBoYW5kbGVLZXlQcmVzcygpLgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0
azo6dHlwZUFoZWFkRmluZEluZGV4KTogUmVjZWl2ZSBhIGtleXZhbCBhbmQgdGltZXN0YW1wIGlu
c3RlYWQgb2YgYSBHZGtFdmVudC4KKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlH
dGs6OnR5cGVBaGVhZEZpbmQpOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBv
cHVwTWVudVByb3h5R3RrLmg6CisKIDIwMjAtMDUtMjIgIEphbWVzIFNhdmFnZSAgPGphbWVzLnNh
dmFnZUBhcHBsZS5jb20+CiAKICAgICAgICAgQ3JlYXRlIFN3aWZ0IG92ZXJsYXkgZm9yIFdlYktp
dCBmcmFtZXdvcmsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYktl
eWJvYXJkRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZl
bnQuaAppbmRleCAyNGQ1NGU4YzIxZjcuLmUxYjJhYjQzZTE0MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaApAQCAtNzUsNiArNzUsNyBAQCBwdWJs
aWM6CiAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50Jik7CiAgICAgZW51bSBjbGFzcyBIYW5kbGVkQnlJbnB1dE1ldGhvZCA6IGJvb2wgeyBObywg
WWVzIH07CiAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudCosIGNvbnN0IFN0cmlu
ZyYsIEhhbmRsZWRCeUlucHV0TWV0aG9kLCBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6Q29tcG9z
aXRpb25VbmRlcmxpbmU+PiYmLCBPcHRpb25hbDxFZGl0aW5nUmFuZ2U+JiYsIFZlY3RvcjxTdHJp
bmc+JiYgY29tbWFuZHMpOworICAgIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoVHlwZSwgY29uc3Qg
U3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25z
dCBTdHJpbmcmIGtleUlkZW50aWZpZXIsIGludCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIGludCBu
YXRpdmVWaXJ0dWFsS2V5Q29kZSwgVmVjdG9yPFN0cmluZz4mJiBjb21tYW5kcywgYm9vbCBpc0tl
eXBhZCwgT3B0aW9uU2V0PE1vZGlmaWVyPik7CiAjZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKQog
ICAgIGVudW0gY2xhc3MgSGFuZGxlZEJ5SW5wdXRNZXRob2QgOiBib29sIHsgTm8sIFllcyB9Owog
ICAgIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoOjpXZWJFdmVudCAqLCBIYW5kbGVkQnlJbnB1dE1l
dGhvZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2
ZW50LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmgKaW5kZXgg
MzVmZGZiYjMwOTdhLi5jNmE1OTVhMjVlOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRp
dmVXZWJNb3VzZUV2ZW50LmgKQEAgLTY2LDYgKzY2LDcgQEAgcHVibGljOgogICAgIE5hdGl2ZVdl
Yk1vdXNlRXZlbnQoY29uc3QgTmF0aXZlV2ViTW91c2VFdmVudCYpOwogICAgIE5hdGl2ZVdlYk1v
dXNlRXZlbnQoR2RrRXZlbnQqLCBpbnQsIE9wdGlvbmFsPFdlYkNvcmU6OkludFBvaW50Pik7CiAg
ICAgTmF0aXZlV2ViTW91c2VFdmVudChHZGtFdmVudCosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiwgaW50LCBPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4pOworICAgIE5hdGl2ZVdlYk1vdXNl
RXZlbnQoVHlwZSwgQnV0dG9uLCB1bnNpZ25lZCBzaG9ydCBidXR0b25zLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3Np
dGlvbiwgaW50IGNsaWNrQ291bnQsIE9wdGlvblNldDxNb2RpZmllcj4gbW9kaWZpZXJzKTsKICAg
ICBleHBsaWNpdCBOYXRpdmVXZWJNb3VzZUV2ZW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7
CiAjZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIE5hdGl2ZVdlYk1vdXNlRXZlbnQoOjpX
ZWJFdmVudCAqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYldo
ZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaApp
bmRleCBhNWRiOGI3NDYxNzcuLmVhYzc2NjlkMDgwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L05hdGl2ZVdlYldoZWVsRXZlbnQuaApAQCAtNjEsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgTmF0
aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCopOwogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoR2Rr
RXZlbnQqLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhhc2UgbW9tZW50
dW1QaGFzZSk7CiAgICAgTmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCosIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50Jik7CisgICAgTmF0aXZlV2ViV2hlZWxFdmVudChjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlv
biwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiB3aGVlbFRpY2tzLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhh
c2UgbW9tZW50dW1QaGFzZSk7CiAjZWxpZiBVU0UoTElCV1BFKQogICAgIE5hdGl2ZVdlYldoZWVs
RXZlbnQoc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IsIFdlYldoZWVsRXZlbnQ6OlBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBo
YXNlKTsKICNlbGlmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcAppbmRleCA4YzBkZjQyODJmZDUu
LmM2ZGVhOTk5ODdkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL05hdGl2
ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9O
YXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcApAQCAtMzksOSArMzksMTQgQEAgTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudCogZXZlbnQsIGNv
bnN0IFN0cmluZyYgdGUKIHsKIH0KIAorTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudChUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyLCBp
bnQgd2luZG93c1ZpcnR1YWxLZXlDb2RlLCBpbnQgbmF0aXZlVmlydHVhbEtleUNvZGUsIFZlY3Rv
cjxTdHJpbmc+JiYgY29tbWFuZHMsIGJvb2wgaXNLZXlwYWQsIE9wdGlvblNldDxNb2RpZmllcj4g
bW9kaWZpZXJzKQorICAgIDogV2ViS2V5Ym9hcmRFdmVudCh0eXBlLCB0ZXh0LCBrZXksIGNvZGUs
IGtleUlkZW50aWZpZXIsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgbmF0aXZlVmlydHVhbEtleUNv
ZGUsIGZhbHNlLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgV1RGTW92ZShjb21tYW5kcyks
IGlzS2V5cGFkLCBtb2RpZmllcnMsIFdhbGxUaW1lOjpub3coKSkKK3sKK30KKwogTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBOYXRpdmVXZWJLZXli
b2FyZEV2ZW50JiBldmVudCkKLSAgICA6IFdlYktleWJvYXJkRXZlbnQoV2ViRXZlbnRGYWN0b3J5
OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KGV2ZW50Lm5hdGl2ZUV2ZW50KCksIGV2ZW50LnRleHQo
KSwgZXZlbnQuaGFuZGxlZEJ5SW5wdXRNZXRob2QoKSwgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6
OkNvbXBvc2l0aW9uVW5kZXJsaW5lPj4oZXZlbnQucHJlZWRpdFVuZGVybGluZXMoKSksIE9wdGlv
bmFsPEVkaXRpbmdSYW5nZT4oZXZlbnQucHJlZWRpdFNlbGVjdGlvblJhbmdlKCkpLCBWZWN0b3I8
U3RyaW5nPihldmVudC5jb21tYW5kcygpKSkpCi0gICAgLCBtX25hdGl2ZUV2ZW50KGdka19ldmVu
dF9jb3B5KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpKQorICAgIDogV2ViS2V5Ym9hcmRFdmVudChldmVu
dC50eXBlKCksIGV2ZW50LnRleHQoKSwgZXZlbnQua2V5KCksIGV2ZW50LmNvZGUoKSwgZXZlbnQu
a2V5SWRlbnRpZmllcigpLCBldmVudC53aW5kb3dzVmlydHVhbEtleUNvZGUoKSwgZXZlbnQubmF0
aXZlVmlydHVhbEtleUNvZGUoKSwgZXZlbnQuaGFuZGxlZEJ5SW5wdXRNZXRob2QoKSwgT3B0aW9u
YWw8VmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPj4oZXZlbnQucHJlZWRpdFVu
ZGVybGluZXMoKSksIE9wdGlvbmFsPEVkaXRpbmdSYW5nZT4oZXZlbnQucHJlZWRpdFNlbGVjdGlv
blJhbmdlKCkpLCBWZWN0b3I8U3RyaW5nPihldmVudC5jb21tYW5kcygpKSwgZXZlbnQuaXNLZXlw
YWQoKSwgZXZlbnQubW9kaWZpZXJzKCksIGV2ZW50LnRpbWVzdGFtcCgpKQorICAgICwgbV9uYXRp
dmVFdmVudChldmVudC5uYXRpdmVFdmVudCgpID8gZ2RrX2V2ZW50X2NvcHkoZXZlbnQubmF0aXZl
RXZlbnQoKSkgOiBudWxscHRyKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9ndGsvTmF0aXZlV2ViTW91c2VFdmVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9ndGsvTmF0aXZlV2ViTW91c2VFdmVudEd0ay5jcHAKaW5kZXggN2FjZDk0YmVjNjAxLi43Zjgy
NDk4NGEwNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9OYXRpdmVXZWJN
b3VzZUV2ZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsvTmF0aXZlV2Vi
TW91c2VFdmVudEd0ay5jcHAKQEAgLTQ4LDggKzQ4LDEzIEBAIE5hdGl2ZVdlYk1vdXNlRXZlbnQ6
Ok5hdGl2ZVdlYk1vdXNlRXZlbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uKQog
ewogfQogCitOYXRpdmVXZWJNb3VzZUV2ZW50OjpOYXRpdmVXZWJNb3VzZUV2ZW50KFR5cGUgdHlw
ZSwgQnV0dG9uIGJ1dHRvbiwgdW5zaWduZWQgc2hvcnQgYnV0dG9ucywgY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRp
b24sIGludCBjbGlja0NvdW50LCBPcHRpb25TZXQ8TW9kaWZpZXI+IG1vZGlmaWVycykKKyAgICA6
IFdlYk1vdXNlRXZlbnQodHlwZSwgYnV0dG9uLCBidXR0b25zLCBwb3NpdGlvbiwgZ2xvYmFsUG9z
aXRpb24sIDAsIDAsIDAsIGNsaWNrQ291bnQsIG1vZGlmaWVycywgV2FsbFRpbWU6Om5vdygpKQor
eworfQorCiBOYXRpdmVXZWJNb3VzZUV2ZW50OjpOYXRpdmVXZWJNb3VzZUV2ZW50KGNvbnN0IE5h
dGl2ZVdlYk1vdXNlRXZlbnQmIGV2ZW50KQotICAgIDogV2ViTW91c2VFdmVudChXZWJFdmVudEZh
Y3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoZXZlbnQubmF0aXZlRXZlbnQoKSwgZXZlbnQucG9z
aXRpb24oKSwgZXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgZXZlbnQuY2xpY2tDb3VudCgpLCBXZWJD
b3JlOjpJbnRQb2ludChldmVudC5kZWx0YVgoKSwgZXZlbnQuZGVsdGFZKCkpKSkKKyAgICA6IFdl
Yk1vdXNlRXZlbnQoZXZlbnQudHlwZSgpLCBldmVudC5idXR0b24oKSwgZXZlbnQuYnV0dG9ucygp
LCBldmVudC5wb3NpdGlvbigpLCBldmVudC5nbG9iYWxQb3NpdGlvbigpLCBldmVudC5kZWx0YVgo
KSwgZXZlbnQuZGVsdGFZKCksIGV2ZW50LmRlbHRhWigpLCBldmVudC5jbGlja0NvdW50KCksIGV2
ZW50Lm1vZGlmaWVycygpLCBldmVudC50aW1lc3RhbXAoKSkKICAgICAsIG1fbmF0aXZlRXZlbnQo
ZXZlbnQubmF0aXZlRXZlbnQoKSA/IGdka19ldmVudF9jb3B5KGNvbnN0X2Nhc3Q8R2RrRXZlbnQq
PihldmVudC5uYXRpdmVFdmVudCgpKSkgOiBudWxscHRyKQogewogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwCmluZGV4IGIyZjcw
MTAwNmFkMC4uM2I2MDU5NmQ1NWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9n
dGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
Z3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwCkBAIC00OSw5ICs0OSwxNCBAQCBOYXRpdmVX
ZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiBldmVudCwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbgogewogfQogCitOYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJX
aGVlbEV2ZW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGRl
bHRhLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHdoZWVsVGlja3MsIFdlYldoZWVsRXZlbnQ6
OlBoYXNlIHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNlKQorICAgIDog
V2ViV2hlZWxFdmVudChXZWJFdmVudDo6V2hlZWwsIHBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwg
ZGVsdGEsIHdoZWVsVGlja3MsIHBoYXNlLCBtb21lbnR1bVBoYXNlLCBXZWJXaGVlbEV2ZW50OjpT
Y3JvbGxCeVBpeGVsV2hlZWxFdmVudCwgeyB9LCBXYWxsVGltZTo6bm93KCkpCit7Cit9CisKIE5h
dGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hl
ZWxFdmVudCYgZXZlbnQpCi0gICAgOiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3Jl
YXRlV2ViV2hlZWxFdmVudChldmVudC5uYXRpdmVFdmVudCgpLCBldmVudC5wb3NpdGlvbigpLCBl
dmVudC5nbG9iYWxQb3NpdGlvbigpLCBldmVudC5waGFzZSgpLCBldmVudC5tb21lbnR1bVBoYXNl
KCkpKQotICAgICwgbV9uYXRpdmVFdmVudChnZGtfZXZlbnRfY29weShldmVudC5uYXRpdmVFdmVu
dCgpKSkKKyAgICA6IFdlYldoZWVsRXZlbnQoZXZlbnQudHlwZSgpLCBldmVudC5wb3NpdGlvbigp
LCBldmVudC5nbG9iYWxQb3NpdGlvbigpLCBldmVudC5kZWx0YSgpLCBldmVudC53aGVlbFRpY2tz
KCksIGV2ZW50LnBoYXNlKCksIGV2ZW50Lm1vbWVudHVtUGhhc2UoKSwgZXZlbnQuZ3JhbnVsYXJp
dHkoKSwgZXZlbnQubW9kaWZpZXJzKCksIGV2ZW50LnRpbWVzdGFtcCgpKQorICAgICwgbV9uYXRp
dmVFdmVudChldmVudC5uYXRpdmVFdmVudCgpID8gZ2RrX2V2ZW50X2NvcHkoZXZlbnQubmF0aXZl
RXZlbnQoKSkgOiBudWxscHRyKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IDNiOTNjMjM4MTU3ZC4uYmRmNTU1
Y2U2Y2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VD
bGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VD
bGllbnRJbXBsLmNwcApAQCAtMjM5LDcgKzIzOSw3IEBAIFdlYkNvcmU6OkludFJlY3QgUGFnZUNs
aWVudEltcGw6OnJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNvbnN0IFdlYkNvcmU6Oklu
CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudCYgZXZlbnQsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKQogewotICAgIGlmICh3
YXNFdmVudEhhbmRsZWQgfHwgZXZlbnQudHlwZSgpICE9IFdlYkV2ZW50OjpUeXBlOjpLZXlEb3du
KQorICAgIGlmICh3YXNFdmVudEhhbmRsZWQgfHwgZXZlbnQudHlwZSgpICE9IFdlYkV2ZW50OjpU
eXBlOjpLZXlEb3duIHx8ICFldmVudC5uYXRpdmVFdmVudCgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJ
RVdfQkFTRShtX3ZpZXdXaWRnZXQpOwpAQCAtNDExLDYgKzQxMSw4IEBAIHZvaWQgUGFnZUNsaWVu
dEltcGw6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiBldmVu
dCwgYm9vbCB3CiB7CiAjaWYgIVVTRShHVEs0KQogICAgIGNvbnN0IEdka0V2ZW50KiB0b3VjaEV2
ZW50ID0gZXZlbnQubmF0aXZlRXZlbnQoKTsKKyAgICBpZiAoIXRvdWNoRXZlbnQpCisgICAgICAg
IHJldHVybjsKIAogICAgIEdlc3R1cmVDb250cm9sbGVyJiBnZXN0dXJlQ29udHJvbGxlciA9IHdl
YmtpdFdlYlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV92
aWV3V2lkZ2V0KSk7CiAgICAgaWYgKHdhc0V2ZW50SGFuZGxlZCkgewpAQCAtNDcxLDYgKzQ3Myw5
IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVX
ZWJUb3VjaEV2ZW50JiBldmVudCwgYm9vbCB3CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OndoZWVs
RXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmIGV2
ZW50KQogeworICAgIGlmICghZXZlbnQubmF0aXZlRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAjaWYgIVVTRShHVEs0KQogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciogY29udHJvbGxlciA9
IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKFdFQktJVF9XRUJfVklFV19C
QVNFKG1fdmlld1dpZGdldCkpOwogICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXItPmlz
U3dpcGVHZXN0dXJlRW5hYmxlZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IGZkN2VlOTY5NGU4ZC4uZDVk
YTQ2ZjYwODA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtNDgsOSArNDgsMTEgQEAKICNpbmNsdWRlICJXZWJL
aXRFbW9qaUNob29zZXIuaCIKICNpbmNsdWRlICJXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRJbXBs
R3RrLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0FjY2Vzc2libGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRXZWJWaWV3QmFzZUludGVybmFsLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCisjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlHdGsuaCIKICNpbmNsdWRlICJXZWJQ
cmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAjaW5jbHVkZSAiV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaCIKQEAgLTYxLDYgKzYzLDcgQEAKICNpbmNsdWRl
IDxXZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVu
dGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybURpc3BsYXkuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRy
Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lvbi5oPgogI2luY2x1ZGUgPGdkay9nZGsu
aD4KQEAgLTIyNzUsMyArMjI3OCwxNzQgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNp
emVDb21wb3NpdGlvbktleVByZXNzKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmEKICAgICBw
cml2LT5wYWdlUHJveHktPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dChldmVudCwgdGV4dCwgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6SGFuZGxlZEJ5SW5wdXRNZXRo
b2Q6OlllcywgV1RGTW92ZSh1bmRlcmxpbmVzKSwgV1RGTW92ZShzZWxlY3Rpb25SYW5nZSksIHsg
fSkpOwogI2VuZGlmCiB9CisKK3N0YXRpYyBpbmxpbmUgT3B0aW9uU2V0PFdlYkV2ZW50OjpNb2Rp
Zmllcj4gdG9XZWJLaXRNb2RpZmllcnModW5zaWduZWQgbW9kaWZpZXJzKQoreworICAgIE9wdGlv
blNldDxXZWJFdmVudDo6TW9kaWZpZXI+IHdlYkV2ZW50TW9kaWZpZXJzOworICAgIGlmIChtb2Rp
ZmllcnMgJiBHREtfQ09OVFJPTF9NQVNLKQorICAgICAgICB3ZWJFdmVudE1vZGlmaWVycy5hZGQo
V2ViRXZlbnQ6Ok1vZGlmaWVyOjpDb250cm9sS2V5KTsKKyAgICBpZiAobW9kaWZpZXJzICYgR0RL
X1NISUZUX01BU0spCisgICAgICAgIHdlYkV2ZW50TW9kaWZpZXJzLmFkZChXZWJFdmVudDo6TW9k
aWZpZXI6OlNoaWZ0S2V5KTsKKyAgICBpZiAobW9kaWZpZXJzICYgR0RLX01PRDFfTUFTSykKKyAg
ICAgICAgd2ViRXZlbnRNb2RpZmllcnMuYWRkKFdlYkV2ZW50OjpNb2RpZmllcjo6QWx0S2V5KTsK
KyAgICBpZiAobW9kaWZpZXJzICYgR0RLX01FVEFfTUFTSykKKyAgICAgICAgd2ViRXZlbnRNb2Rp
ZmllcnMuYWRkKFdlYkV2ZW50OjpNb2RpZmllcjo6TWV0YUtleSk7CisgICAgaWYgKFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudDo6bW9kaWZpZXJzQ29udGFpbkNhcHNMb2NrKG1vZGlmaWVycykpCisgICAg
ICAgIHdlYkV2ZW50TW9kaWZpZXJzLmFkZChXZWJFdmVudDo6TW9kaWZpZXI6OkNhcHNMb2NrS2V5
KTsKKyAgICByZXR1cm4gd2ViRXZlbnRNb2RpZmllcnM7Cit9CisKK3ZvaWQgd2Via2l0V2ViVmll
d0Jhc2VTeW50aGVzaXplTW91c2VFdmVudChXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2Us
IE1vdXNlRXZlbnRUeXBlIHR5cGUsIHVuc2lnbmVkIGJ1dHRvbiwgdW5zaWduZWQgc2hvcnQgYnV0
dG9ucywgaW50IHgsIGludCB5LCB1bnNpZ25lZCBtb2RpZmllcnMsIGludCBjbGlja0NvdW50KQor
eworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2
OworICAgIGlmIChwcml2LT5kaWFsb2cpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYk1vdXNl
RXZlbnQ6OkJ1dHRvbiB3ZWJFdmVudEJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOwor
ICAgIHN3aXRjaCAoYnV0dG9uKSB7CisgICAgY2FzZSAwOgorICAgICAgICB3ZWJFdmVudEJ1dHRv
biA9IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6
CisgICAgICAgIHdlYkV2ZW50QnV0dG9uID0gV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICB3ZWJFdmVudEJ1dHRvbiA9IFdlYk1v
dXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAg
ICAgICB3ZWJFdmVudEJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBXZWJFdmVudDo6VHlwZSB3ZWJFdmVudFR5cGU7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBNb3VzZUV2ZW50VHlwZTo6UHJlc3M6CisgICAgICAg
IHdlYkV2ZW50VHlwZSA9IFdlYkV2ZW50OjpNb3VzZURvd247CisgICAgICAgIHByaXYtPmlucHV0
TWV0aG9kRmlsdGVyLmNhbmNlbENvbXBvc2l0aW9uKCk7CisgICAgICAgIGd0a193aWRnZXRfZ3Jh
Yl9mb2N1cyhHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTW91c2VFdmVudFR5cGU6OlJlbGVhc2U6CisgICAgICAgIHdlYkV2ZW50VHlwZSA9IFdlYkV2
ZW50OjpNb3VzZVVwOworICAgICAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVCh3
ZWJWaWV3QmFzZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1vdXNlRXZlbnRUeXBlOjpN
b3Rpb246CisgICAgICAgIC8vIEZJWE1FOiBhZGQgbW92ZW1lbnQgZGVsdGEgZm9yIHBvaW50ZXIg
bG9jay4KKyAgICAgICAgd2ViRXZlbnRUeXBlID0gV2ViRXZlbnQ6Ok1vdXNlTW92ZTsKKyAgICAg
ICAgaWYgKGJ1dHRvbnMgJiBHREtfQlVUVE9OMV9NQVNLKQorICAgICAgICAgICAgd2ViRXZlbnRC
dXR0b24gPSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOworICAgICAgICBlbHNlIGlmIChidXR0
b25zICYgR0RLX0JVVFRPTjJfTUFTSykKKyAgICAgICAgICAgIHdlYkV2ZW50QnV0dG9uID0gV2Vi
TW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOworICAgICAgICBlbHNlIGlmIChidXR0b25zICYgR0RL
X0JVVFRPTjNfTUFTSykKKyAgICAgICAgICAgIHdlYkV2ZW50QnV0dG9uID0gV2ViTW91c2VFdmVu
dDo6UmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHVuc2lnbmVkIHNo
b3J0IHdlYkV2ZW50QnV0dG9ucyA9IDA7CisgICAgaWYgKGJ1dHRvbnMgJiBHREtfQlVUVE9OMV9N
QVNLKQorICAgICAgICB3ZWJFdmVudEJ1dHRvbnMgfD0gMTsKKyAgICBpZiAoYnV0dG9ucyAmIEdE
S19CVVRUT04yX01BU0spCisgICAgICAgIHdlYkV2ZW50QnV0dG9ucyB8PSA0OworICAgIGlmIChi
dXR0b25zICYgR0RLX0JVVFRPTjNfTUFTSykKKyAgICAgICAgd2ViRXZlbnRCdXR0b25zIHw9IDI7
CisKKyAgICBwcml2LT5wYWdlUHJveHktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VF
dmVudCh3ZWJFdmVudFR5cGUsIHdlYkV2ZW50QnV0dG9uLCB3ZWJFdmVudEJ1dHRvbnMsIHsgeCwg
eSB9LAorICAgICAgICB3aWRnZXRSb290Q29vcmRzKEdUS19XSURHRVQod2ViVmlld0Jhc2UpLCB4
LCB5KSwgY2xpY2tDb3VudCwgdG9XZWJLaXRNb2RpZmllcnMobW9kaWZpZXJzKSkpOworfQorCit2
b2lkIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZUtleUV2ZW50KFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJWaWV3QmFzZSwgdW5zaWduZWQga2V5dmFsLCB1bnNpZ25lZCBtb2RpZmllcnMpCit7Cisg
ICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7Cisg
ICAgaWYgKHByaXYtPmRpYWxvZykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIHBv
cHVwTWVudSA9IHByaXYtPnBhZ2VQcm94eS0+YWN0aXZlUG9wdXBNZW51KCkpIHsKKyAgICAgICAg
YXV0byogZ3RrUG9wdXBNZW51ID0gc3RhdGljX2Nhc3Q8V2ViUG9wdXBNZW51UHJveHlHdGsqPihw
b3B1cE1lbnUpOworICAgICAgICBpZiAoZ3RrUG9wdXBNZW51LT5oYW5kbGVLZXlQcmVzcyhrZXl2
YWwsIEdES19DVVJSRU5UX1RJTUUpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
IChrZXl2YWwgPT0gR0RLX0tFWV9SZXR1cm4pIHsKKyAgICAgICAgICAgIGd0a1BvcHVwTWVudS0+
YWN0aXZhdGVTZWxlY3RlZEl0ZW0oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBpZiAocHJpdi0+ZnVsbFNj
cmVlbk1vZGVBY3RpdmUpIHsKKyAgICAgICAgc3dpdGNoIChrZXl2YWwpIHsKKyAgICAgICAgY2Fz
ZSBHREtfS0VZX0VzY2FwZToKKyAgICAgICAgY2FzZSBHREtfS0VZX2Y6CisgICAgICAgIGNhc2Ug
R0RLX0tFWV9GOgorICAgICAgICAgICAgcHJpdi0+cGFnZVByb3h5LT5mdWxsU2NyZWVuTWFuYWdl
cigpLT5yZXF1ZXN0RXhpdEZ1bGxTY3JlZW4oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorI2VuZGlm
CisKKyAgICBpZiAoa2V5dmFsID09IEdES19LRVlfTWVudSkgeworICAgICAgICB3ZWJraXRXZWJW
aWV3QmFzZVBvcHVwTWVudShHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBhdXRvIGtleWNvZGUgPSB3aWRnZXRLZXl2YWxUb0tleWNvZGUoR1RL
X1dJREdFVCh3ZWJWaWV3QmFzZSksIGtleXZhbCk7CisgICAgYXV0byB3ZWJFdmVudE1vZGlmaWVy
cyA9IHRvV2ViS2l0TW9kaWZpZXJzKG1vZGlmaWVycyk7CisKKyAgICBwcml2LT5wYWdlUHJveHkt
PmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCgKKyAgICAgICAgV2Vi
RXZlbnQ6OktleURvd24sCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6c2luZ2xlQ2hh
cmFjdGVyU3RyaW5nKGtleXZhbCksCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5
VmFsdWVGb3JHZGtLZXlDb2RlKGtleXZhbCksCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dDo6a2V5Q29kZUZvckhhcmR3YXJlS2V5Q29kZShrZXljb2RlKSwKKyAgICAgICAgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50OjprZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShrZXl2YWwpLAorICAgICAg
ICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OndpbmRvd3NLZXlDb2RlRm9yR2RrS2V5Q29kZShrZXl2
YWwpLAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGtleXZhbCksCisgICAgICAgIHByaXYtPmtl
eUJpbmRpbmdUcmFuc2xhdG9yLmNvbW1hbmRzRm9yS2V5dmFsKGtleXZhbCwgbW9kaWZpZXJzKSwK
KyAgICAgICAga2V5dmFsID49IEdES19LRVlfS1BfU3BhY2UgJiYga2V5dmFsIDw9IEdES19LRVlf
S1BfOSwKKyAgICAgICAgd2ViRXZlbnRNb2RpZmllcnMpKTsKKworICAgIHByaXYtPnBhZ2VQcm94
eS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KAorICAgICAgICBX
ZWJFdmVudDo6S2V5VXAsCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6c2luZ2xlQ2hh
cmFjdGVyU3RyaW5nKGtleXZhbCksCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5
VmFsdWVGb3JHZGtLZXlDb2RlKGtleXZhbCksCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dDo6a2V5Q29kZUZvckhhcmR3YXJlS2V5Q29kZShrZXljb2RlKSwKKyAgICAgICAgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50OjprZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShrZXl2YWwpLAorICAgICAg
ICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OndpbmRvd3NLZXlDb2RlRm9yR2RrS2V5Q29kZShrZXl2
YWwpLAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGtleXZhbCksCisgICAgICAgIHsgfSwKKyAg
ICAgICAga2V5dmFsID49IEdES19LRVlfS1BfU3BhY2UgJiYga2V5dmFsIDw9IEdES19LRVlfS1Bf
OSwKKyAgICAgICAgd2ViRXZlbnRNb2RpZmllcnMpKTsKK30KKworc3RhdGljIGlubGluZSBXZWJX
aGVlbEV2ZW50OjpQaGFzZSB0b1dlYktpdFdoZWVsRXZlbnRQaGFzZShXaGVlbEV2ZW50UGhhc2Ug
cGhhc2UpCit7CisgICAgc3dpdGNoIChwaGFzZSkgeworICAgIGNhc2UgV2hlZWxFdmVudFBoYXNl
OjpOb1BoYXNlOgorICAgICAgICByZXR1cm4gV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9u
ZTsKKyAgICBjYXNlIFdoZWVsRXZlbnRQaGFzZTo6QmVnYW46CisgICAgICAgIHJldHVybiBXZWJX
aGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VCZWdhbjsKKyAgICBjYXNlIFdoZWVsRXZlbnRQaGFzZTo6
Q2hhbmdlZDoKKyAgICAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5n
ZWQ7CisgICAgY2FzZSBXaGVlbEV2ZW50UGhhc2U6OkVuZGVkOgorICAgICAgICByZXR1cm4gV2Vi
V2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlRW5kZWQ7CisgICAgY2FzZSBXaGVlbEV2ZW50UGhhc2U6
OkNhbmNlbGxlZDoKKyAgICAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNh
bmNlbGxlZDsKKyAgICBjYXNlIFdoZWVsRXZlbnRQaGFzZTo6TWF5QmVnaW46CisgICAgICAgIHJl
dHVybiBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VNYXlCZWdpbjsKKyAgICB9CisKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIHdlYmtpdFdlYlZpZXdCYXNl
U3ludGhlc2l6ZVdoZWVsRXZlbnQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBkb3Vi
bGUgZGVsdGFYLCBkb3VibGUgZGVsdGFZLCBpbnQgeCwgaW50IHksIFdoZWVsRXZlbnRQaGFzZSBw
aGFzZSwgV2hlZWxFdmVudFBoYXNlIG1vbWVudHVtUGhhc2UpCit7CisgICAgV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisgICAgaWYgKHByaXYtPmRp
YWxvZykKKyAgICAgICAgcmV0dXJuOworCisgICAgRmxvYXRTaXplIHdoZWVsVGlja3MoZGVsdGFY
LCBkZWx0YVkpOworICAgIEZsb2F0U2l6ZSBkZWx0YSh3aGVlbFRpY2tzKTsKKyAgICBkZWx0YS5z
Y2FsZShzdGF0aWNfY2FzdDxmbG9hdD4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKSk7
CisKKyAgICBwcml2LT5wYWdlUHJveHktPmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxF
dmVudCh7IHgsIHkgfSwgd2lkZ2V0Um9vdENvb3JkcyhHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSwg
eCwgeSksCisgICAgICAgIGRlbHRhLCB3aGVlbFRpY2tzLCB0b1dlYktpdFdoZWVsRXZlbnRQaGFz
ZShwaGFzZSksIHRvV2ViS2l0V2hlZWxFdmVudFBoYXNlKG1vbWVudHVtUGhhc2UpKSk7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdC
YXNlSW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld0Jhc2VJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uZmFlZWE0YTc1OWNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZUludGVybmFsLmgKQEAgLTAsMCArMSwzNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlIFdlYktpdFdlYlZpZXdC
YXNlOworCitlbnVtIGNsYXNzIE1vdXNlRXZlbnRUeXBlIHsgUHJlc3MsIFJlbGVhc2UsIE1vdGlv
biB9Owordm9pZCB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVNb3VzZUV2ZW50KFdlYktpdFdl
YlZpZXdCYXNlKiwgTW91c2VFdmVudFR5cGUgdHlwZSwgdW5zaWduZWQgYnV0dG9uLCB1bnNpZ25l
ZCBzaG9ydCBidXR0b25zLCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIG1vZGlmaWVycywgaW50IGNs
aWNrQ291bnQpOworCit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZUtleUV2ZW50KFdl
YktpdFdlYlZpZXdCYXNlKiwgdW5zaWduZWQga2V5VmFsLCB1bnNpZ25lZCBtb2RpZmllcnMpOwor
CitlbnVtIGNsYXNzIFdoZWVsRXZlbnRQaGFzZSB7IE5vUGhhc2UsIEJlZ2FuLCBDaGFuZ2VkLCBF
bmRlZCwgQ2FuY2VsbGVkLCBNYXlCZWdpbiB9Owordm9pZCB3ZWJraXRXZWJWaWV3QmFzZVN5bnRo
ZXNpemVXaGVlbEV2ZW50KFdlYktpdFdlYlZpZXdCYXNlKiwgZG91YmxlIGRlbHRhWCwgZG91Ymxl
IGRlbHRhWSwgaW50IHgsIGludCB5LCBXaGVlbEV2ZW50UGhhc2UsIFdoZWVsRXZlbnRQaGFzZSBt
b21lbnR1bVBoYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXgg
OTA1M2VjZGM0NDM2Li44OGRkYzEzZWU1NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCkBAIC0xNzY5LDcgKzE3NjksOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZv
aWQgc2V0SGFzRXhlY3V0ZWRBcHBCb3VuZEJlaGF2aW9yQmVmb3JlTmF2aWdhdGlvbigpIHsgbV9o
YXNFeGVjdXRlZEFwcEJvdW5kQmVoYXZpb3JCZWZvcmVOYXZpZ2F0aW9uID0gdHJ1ZTsgfQotICAg
ICAgICAKKworICAgIFdlYlBvcHVwTWVudVByb3h5KiBhY3RpdmVQb3B1cE1lbnUoKSBjb25zdCB7
IHJldHVybiBtX2FjdGl2ZVBvcHVwTWVudS5nZXQoKTsgfQorCiBwcml2YXRlOgogICAgIFdlYlBh
Z2VQcm94eShQYWdlQ2xpZW50JiwgV2ViUHJvY2Vzc1Byb3h5JiwgUmVmPEFQSTo6UGFnZUNvbmZp
Z3VyYXRpb24+JiYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcAppbmRl
eCA2YmUyMzJlNDJlZWIuLjZkYjI0YjcxMzU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuY3BwCkBAIC0yMTcsMjEgKzIxNywy
NiBAQCBzdGF0aWMgY29uc3QgS2V5Q29tYmluYXRpb25FbnRyeSBjdXN0b21LZXlCaW5kaW5nc1td
ID0gewogICAgIHsgR0RLX0tFWV9WLCAgICAgICAgIEdES19DT05UUk9MX01BU0sgfCBHREtfU0hJ
RlRfTUFTSywgIlBhc3RlQXNQbGFpblRleHQiIH0sCiB9OwogCi1zdGF0aWMgVmVjdG9yPFN0cmlu
Zz4gaGFuZGxlQ3VzdG9tS2V5QmluZGluZ3ModW5zaWduZWQga2V5dmFsLCBHZGtNb2RpZmllclR5
cGUgc3RhdGUpCitzdGF0aWMgVmVjdG9yPFN0cmluZz4gaGFuZGxlS2V5QmluZGluZ3NGb3JNYXAo
Y29uc3QgS2V5Q29tYmluYXRpb25FbnRyeSogbWFwLCB1bnNpZ25lZCBtYXBTaXplLCB1bnNpZ25l
ZCBrZXl2YWwsIEdka01vZGlmaWVyVHlwZSBzdGF0ZSkKIHsKICAgICAvLyBGb3Iga2V5cHJlc3Mg
ZXZlbnRzLCB3ZSB3YW50IGNoYXJDb2RlKCksIGJ1dCBrZXlDb2RlKCkgZG9lcyB0aGF0LgogICAg
IHVuc2lnbmVkIG1hcEtleSA9IChzdGF0ZSAmIChHREtfU0hJRlRfTUFTSyB8IEdES19DT05UUk9M
X01BU0sgfCBHREtfTU9EMV9NQVNLKSkgPDwgMTYgfCBrZXl2YWw7CiAgICAgaWYgKCFtYXBLZXkp
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR19O
X0VMRU1FTlRTKGN1c3RvbUtleUJpbmRpbmdzKTsgKytpKSB7Ci0gICAgICAgIGlmIChtYXBLZXkg
PT0gKGN1c3RvbUtleUJpbmRpbmdzW2ldLnN0YXRlIDw8IDE2IHwgY3VzdG9tS2V5QmluZGluZ3Nb
aV0uZ2RrS2V5Q29kZSkpCi0gICAgICAgICAgICByZXR1cm4geyBjdXN0b21LZXlCaW5kaW5nc1tp
XS5uYW1lIH07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hcFNpemU7ICsraSkgewor
ICAgICAgICBpZiAobWFwS2V5ID09IChtYXBbaV0uc3RhdGUgPDwgMTYgfCBtYXBbaV0uZ2RrS2V5
Q29kZSkpCisgICAgICAgICAgICByZXR1cm4geyBtYXBbaV0ubmFtZSB9OwogICAgIH0KIAogICAg
IHJldHVybiB7IH07CiB9CiAKK3N0YXRpYyBWZWN0b3I8U3RyaW5nPiBoYW5kbGVDdXN0b21LZXlC
aW5kaW5ncyh1bnNpZ25lZCBrZXl2YWwsIEdka01vZGlmaWVyVHlwZSBzdGF0ZSkKK3sKKyAgICBy
ZXR1cm4gaGFuZGxlS2V5QmluZGluZ3NGb3JNYXAoY3VzdG9tS2V5QmluZGluZ3MsIEdfTl9FTEVN
RU5UUyhjdXN0b21LZXlCaW5kaW5ncyksIGtleXZhbCwgc3RhdGUpOworfQorCiAjaWYgVVNFKEdU
SzQpCiBWZWN0b3I8U3RyaW5nPiBLZXlCaW5kaW5nVHJhbnNsYXRvcjo6Y29tbWFuZHNGb3JLZXlF
dmVudChHdGtFdmVudENvbnRyb2xsZXJLZXkqIGNvbnRyb2xsZXIpCiB7CkBAIC0yNjEsNCArMjY2
LDcwIEBAIFZlY3RvcjxTdHJpbmc+IEtleUJpbmRpbmdUcmFuc2xhdG9yOjpjb21tYW5kc0Zvcktl
eUV2ZW50KEdka0V2ZW50S2V5KiBldmVudCkKIH0KICNlbmRpZgogCitzdGF0aWMgY29uc3QgS2V5
Q29tYmluYXRpb25FbnRyeSBwcmVkZWZpbmVkS2V5QmluZGluZ3NbXSA9IHsKKyAgICB7IEdES19L
RVlfTGVmdCwgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3Zl
TGVmdCIgfSwKKyAgICB7IEdES19LRVlfS1BfTGVmdCwgICAgICAwLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJNb3ZlTGVmdCIgfSwKKyAgICB7IEdES19LRVlfTGVmdCwgICAgICAg
ICBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAgICAgICAgICJNb3ZlQmFja3dhcmRBbmRNb2Rp
ZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZX0tQX0xlZnQsICAgICAgR0RLX1NISUZUX01B
U0ssICAgICAgICAgICAgICAgICAgICAiTW92ZUJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiB9
LAorICAgIHsgR0RLX0tFWV9MZWZ0LCAgICAgICAgIEdES19DT05UUk9MX01BU0ssICAgICAgICAg
ICAgICAgICAgIk1vdmVXb3JkQmFja3dhcmQiIH0sCisgICAgeyBHREtfS0VZX0tQX0xlZnQsICAg
ICAgR0RLX0NPTlRST0xfTUFTSywgICAgICAgICAgICAgICAgICAiTW92ZVdvcmRCYWNrd2FyZCIg
fSwKKyAgICB7IEdES19LRVlfTGVmdCwgICAgICAgICBHREtfQ09OVFJPTF9NQVNLIHwgR0RLX1NI
SUZUX01BU0ssICJNb3ZlV29yZEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsg
R0RLX0tFWV9LUF9MZWZ0LCAgICAgIEdES19DT05UUk9MX01BU0sgfCBHREtfU0hJRlRfTUFTSywg
Ik1vdmVXb3JkQmFja3dhcmRBbmRNb2RpZnlTZWxlY3RpbyIgfSwKKyAgICB7IEdES19LRVlfUmln
aHQsICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlUmlnaHQi
IH0sCisgICAgeyBHREtfS0VZX0tQX1JpZ2h0LCAgICAgMCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiTW92ZVJpZ2h0IiB9LAorICAgIHsgR0RLX0tFWV9SaWdodCwgICAgICAgIEdE
S19TSElGVF9NQVNLLCAgICAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkQW5kTW9kaWZ5U2Vs
ZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9LUF9SaWdodCwgICAgIEdES19TSElGVF9NQVNLLCAg
ICAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAg
IHsgR0RLX0tFWV9SaWdodCwgICAgICAgIEdES19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAg
ICAgIk1vdmVXb3JkRm9yd2FyZCIgfSwKKyAgICB7IEdES19LRVlfS1BfUmlnaHQsICAgICBHREtf
Q09OVFJPTF9NQVNLLCAgICAgICAgICAgICAgICAgICJNb3ZlV29yZEZvcndhcmQiIH0sCisgICAg
eyBHREtfS0VZX1JpZ2h0LCAgICAgICAgR0RLX0NPTlRST0xfTUFTSyB8IEdES19TSElGVF9NQVNL
LCAiTW92ZVdvcmRGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9L
UF9SaWdodCwgICAgIEdES19DT05UUk9MX01BU0sgfCBHREtfU0hJRlRfTUFTSywgIk1vdmVXb3Jk
Rm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIgfSwKKyAgICB7IEdES19LRVlfVXAsICAgICAgICAg
ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlVXAiIH0sCisgICAgeyBH
REtfS0VZX0tQX1VwLCAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
TW92ZVVwIiB9LAorICAgIHsgR0RLX0tFWV9VcCwgICAgICAgICAgIEdES19TSElGVF9NQVNLLCAg
ICAgICAgICAgICAgICAgICAgIk1vdmVVcEFuZE1vZGlmeVNlbGVjdGlvbiIgfSwKKyAgICB7IEdE
S19LRVlfS1BfVXAsICAgICAgICBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAgICAgICAgICJN
b3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZX0Rvd24sICAgICAgICAg
MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZURvd24iIH0sCisgICAgeyBH
REtfS0VZX0tQX0Rvd24sICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
TW92ZURvd24iIH0sCisgICAgeyBHREtfS0VZX0Rvd24sICAgICAgICAgR0RLX1NISUZUX01BU0ss
ICAgICAgICAgICAgICAgICAgICAiTW92ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAg
eyBHREtfS0VZX0tQX0Rvd24sICAgICAgR0RLX1NISUZUX01BU0ssICAgICAgICAgICAgICAgICAg
ICAiTW92ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZX0hvbWUsICAg
ICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5n
T2ZMaW5lIiB9LAorICAgIHsgR0RLX0tFWV9LUF9Ib21lLCAgICAgIDAsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIk1vdmVUb0JlZ2lubmluZ09mTGluZSIgfSwKKyAgICB7IEdES19L
RVlfSG9tZSwgICAgICAgICBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAgICAgICAgICJNb3Zl
VG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZX0tQ
X0hvbWUsICAgICAgR0RLX1NISUZUX01BU0ssICAgICAgICAgICAgICAgICAgICAiTW92ZVRvQmVn
aW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9Ib21lLCAg
ICAgICAgIEdES19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgICAgIk1vdmVUb0JlZ2lubmlu
Z09mRG9jdW1lbnQiIH0sCisgICAgeyBHREtfS0VZX0tQX0hvbWUsICAgICAgR0RLX0NPTlRST0xf
TUFTSywgICAgICAgICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudCIgfSwKKyAg
ICB7IEdES19LRVlfSG9tZSwgICAgICAgICBHREtfQ09OVFJPTF9NQVNLIHwgR0RLX1NISUZUX01B
U0ssICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAg
IHsgR0RLX0tFWV9LUF9Ib21lLCAgICAgIEdES19DT05UUk9MX01BU0sgfCBHREtfU0hJRlRfTUFT
SywgIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAg
eyBHREtfS0VZX0VuZCwgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiTW92ZVRvRW5kT2ZMaW5lIiB9LAorICAgIHsgR0RLX0tFWV9LUF9FbmQsICAgICAgIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVUb0VuZE9mTGluZSIgfSwKKyAgICB7
IEdES19LRVlfRW5kLCAgICAgICAgICBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAgICAgICAg
ICJNb3ZlVG9FbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZX0tQ
X0VuZCwgICAgICAgR0RLX1NISUZUX01BU0ssICAgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5k
T2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9FbmQsICAgICAgICAg
IEdES19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgICAgIk1vdmVUb0VuZE9mRG9jdW1lbnQi
IH0sCisgICAgeyBHREtfS0VZX0tQX0VuZCwgICAgICAgR0RLX0NPTlRST0xfTUFTSywgICAgICAg
ICAgICAgICAgICAiTW92ZVRvRW5kT2ZEb2N1bWVudCIgfSwKKyAgICB7IEdES19LRVlfRW5kLCAg
ICAgICAgICBHREtfQ09OVFJPTF9NQVNLIHwgR0RLX1NISUZUX01BU0ssICJNb3ZlVG9FbmRPZkRv
Y3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9LUF9FbmQsICAgICAg
IEdES19DT05UUk9MX01BU0sgfCBHREtfU0hJRlRfTUFTSywgIk1vdmVUb0VuZE9mRG9jdW1lbnRB
bmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZX1BhZ2VfVXAsICAgICAgMCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VVcCIgfSwKKyAgICB7IEdES19L
RVlfS1BfUGFnZV9VcCwgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3Zl
UGFnZVVwIiB9LAorICAgIHsgR0RLX0tFWV9QYWdlX1VwLCAgICAgIEdES19TSElGVF9NQVNLLCAg
ICAgICAgICAgICAgICAgICAgIk1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAg
eyBHREtfS0VZX0tQX1BhZ2VfVXAsICAgR0RLX1NISUZUX01BU0ssICAgICAgICAgICAgICAgICAg
ICAiTW92ZVBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbiIgfSwKKyAgICB7IEdES19LRVlfUGFnZV9E
b3duLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZURvd24i
IH0sCisgICAgeyBHREtfS0VZX0tQX1BhZ2VfRG93biwgMCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiTW92ZVBhZ2VEb3duIiB9LAorICAgIHsgR0RLX0tFWV9QYWdlX0Rvd24sICAg
IEdES19TSElGVF9NQVNLLCAgICAgICAgICAgICAgICAgICAgIk1vdmVQYWdlRG93bkFuZE1vZGlm
eVNlbGVjdGlvbiIgfSwKKyAgICB7IEdES19LRVlfS1BfUGFnZV9Eb3duLCBHREtfU0hJRlRfTUFT
SywgICAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iIH0s
CisgICAgeyBHREtfS0VZX0RlbGV0ZSwgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiRGVsZXRlRm9yd2FyZCIgfSwKKyAgICB7IEdES19LRVlfS1BfRGVsZXRlLCAgICAw
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZWxldGVGb3J3YXJkIiB9LAorICAg
IHsgR0RLX0tFWV9EZWxldGUsICAgICAgIEdES19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAg
ICAgIkRlbGV0ZVdvcmRGb3J3YXJkIiB9LAorICAgIHsgR0RLX0tFWV9LUF9EZWxldGUsICAgIEdE
S19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgICAgIkRlbGV0ZVdvcmRGb3J3YXJkIiB9LAor
ICAgIHsgR0RLX0tFWV9CYWNrU3BhY2UsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIkRlbGV0ZUJhY2t3YXJkIiB9LAorICAgIHsgR0RLX0tFWV9CYWNrU3BhY2UsICAgIEdE
S19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgICAgIkRlbGV0ZVdvcmRCYWNrd2FyZCIgfQor
fTsKKworVmVjdG9yPFN0cmluZz4gS2V5QmluZGluZ1RyYW5zbGF0b3I6OmNvbW1hbmRzRm9yS2V5
dmFsKHVuc2lnbmVkIGtleXZhbCwgdW5zaWduZWQgbW9kaWZpZXJzKQoreworICAgIGF1dG8gY29t
bWFuZHMgPSBoYW5kbGVLZXlCaW5kaW5nc0Zvck1hcChwcmVkZWZpbmVkS2V5QmluZGluZ3MsIEdf
Tl9FTEVNRU5UUyhwcmVkZWZpbmVkS2V5QmluZGluZ3MpLCBrZXl2YWwsIHN0YXRpY19jYXN0PEdk
a01vZGlmaWVyVHlwZT4obW9kaWZpZXJzKSk7CisgICAgaWYgKCFjb21tYW5kcy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBjb21tYW5kczsKKworICAgIHJldHVybiBoYW5kbGVDdXN0b21LZXlC
aW5kaW5ncyhrZXl2YWwsIHN0YXRpY19jYXN0PEdka01vZGlmaWVyVHlwZT4obW9kaWZpZXJzKSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuaAppbmRleCA0YzQzYWM3MzI3NmMuLmZlMDRj
MWZmNDQxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0tleUJpbmRp
bmdUcmFuc2xhdG9yLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0tleUJpbmRp
bmdUcmFuc2xhdG9yLmgKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGljOgogI2Vsc2UKICAgICBWZWN0
b3I8U3RyaW5nPiBjb21tYW5kc0ZvcktleUV2ZW50KEdka0V2ZW50S2V5Kik7CiAjZW5kaWYKKyAg
ICBWZWN0b3I8U3RyaW5nPiBjb21tYW5kc0ZvcktleXZhbCh1bnNpZ25lZCBrZXl2YWwsIHVuc2ln
bmVkIG1vZGlmaWVycyk7CisKICAgICB2b2lkIGFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKGNvbnN0
IGNoYXIqIGNvbW1hbmQpIHsgbV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMuYXBwZW5kKGNvbW1hbmQp
OyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsv
V2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsv
V2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKaW5kZXggNDlmYTY4NWMzN2JkLi5iMDRiNDdiMTJi
MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVu
dVByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4
dE1lbnVQcm94eUd0ay5jcHAKQEAgLTEwMCw2ICsxMDAsOCBAQCBzdGF0aWMgdm9pZCBwb3B1cE1l
bnVXaWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IEdka0V2ZW50KiB0cmlnZ2VyRXZlbnQs
IGNvbgogICAgICAgICBnZGtfZXZlbnRfc2V0X2RldmljZShrZXlFdmVudC5nZXQoKSwgZ2RrX3Nl
YXRfZ2V0X2tleWJvYXJkKGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3NlYXQoZ2RrX3dpbmRvd19n
ZXRfZGlzcGxheSh3aW5kb3cpKSkpOwogICAgICAgICBhdXRvKiBldmVudCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8R2RrRXZlbnRLZXkqPihrZXlFdmVudC5nZXQoKSk7CiAgICAgICAgIGV2ZW50LT53aW5k
b3cgPSB3aW5kb3c7CisgICAgICAgIC8vIFRha2UgYSByZWYgb2YgdGhlIEdka1dpbmRvdyB3aGVu
IGNyZWF0aW5nIHRoZSBHZGtFdmVudCwgc2luY2UgdGhlIGV2ZW50IHdpbGwgdW5yZWYgaXQgb24g
ZGVzdHJveS4KKyAgICAgICAgZ19vYmplY3RfcmVmKHdpbmRvdyk7CiAgICAgICAgIGV2ZW50LT50
aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKICAgICAgICAgZXZlbnQtPmtleXZhbCA9IEdES19LRVlf
TWVudTsKICAgICAgICAgdHJpZ2dlckV2ZW50ID0ga2V5RXZlbnQuZ2V0KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmNwcAppbmRl
eCA0NjRkZTZjY2I5YzYuLjkxNTUyZThmNjdjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuY3BwCkBAIC05MCw2ICs5MCwyNyBA
QCBib29sIFdlYlBvcHVwTWVudVByb3h5R3RrOjphY3RpdmF0ZUl0ZW1BdFBhdGgoR3RrVHJlZVBh
dGgqIHBhdGgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgV2ViUG9wdXBNZW51UHJveHlH
dGs6OmhhbmRsZUtleVByZXNzKHVuc2lnbmVkIGtleXZhbCwgdWludDMyX3QgdGltZXN0YW1wKQor
eworICAgIGlmIChrZXl2YWwgPT0gR0RLX0tFWV9Fc2NhcGUpIHsKKyAgICAgICAgaGlkZVBvcHVw
TWVudSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZUFo
ZWFkRmluZChrZXl2YWwsIHRpbWVzdGFtcCk7Cit9CisKK3ZvaWQgV2ViUG9wdXBNZW51UHJveHlH
dGs6OmFjdGl2YXRlU2VsZWN0ZWRJdGVtKCkKK3sKKyAgICBHdGtUcmVlTW9kZWwqIG1vZGVsOwor
ICAgIEd0a1RyZWVJdGVyIGl0ZXI7CisgICAgaWYgKCFndGtfdHJlZV9zZWxlY3Rpb25fZ2V0X3Nl
bGVjdGVkKGd0a190cmVlX3ZpZXdfZ2V0X3NlbGVjdGlvbihHVEtfVFJFRV9WSUVXKG1fdHJlZVZp
ZXcpKSwgJm1vZGVsLCAmaXRlcikpCisgICAgICAgIHJldHVybjsKKworICAgIEdVbmlxdWVQdHI8
R3RrVHJlZVBhdGg+IHBhdGgoZ3RrX3RyZWVfbW9kZWxfZ2V0X3BhdGgobW9kZWwsICZpdGVyKSk7
CisgICAgYWN0aXZhdGVJdGVtQXRQYXRoKHBhdGguZ2V0KCkpOworfQorCiB2b2lkIFdlYlBvcHVw
TWVudVByb3h5R3RrOjp0cmVlVmlld1Jvd0FjdGl2YXRlZENhbGxiYWNrKEd0a1RyZWVWaWV3Kiwg
R3RrVHJlZVBhdGgqIHBhdGgsIEd0a1RyZWVWaWV3Q29sdW1uKiwgV2ViUG9wdXBNZW51UHJveHlH
dGsqIHBvcHVwTWVudSkKIHsKICAgICBwb3B1cE1lbnUtPmFjdGl2YXRlSXRlbUF0UGF0aChwYXRo
KTsKQEAgLTEyMCwyMyArMTQxLDE4IEBAIGdib29sZWFuIFdlYlBvcHVwTWVudVByb3h5R3RrOjpi
dXR0b25QcmVzc0V2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2CiAgICAgcmV0
dXJuIFRSVUU7CiB9CiAKLWdib29sZWFuIFdlYlBvcHVwTWVudVByb3h5R3RrOjprZXlQcmVzc0V2
ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCwgV2ViUG9w
dXBNZW51UHJveHlHdGsqIHBvcHVwTWVudSkKK2dib29sZWFuIFdlYlBvcHVwTWVudVByb3h5R3Rr
OjprZXlQcmVzc0V2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50KiBldmVu
dCwgV2ViUG9wdXBNZW51UHJveHlHdGsqIHBvcHVwTWVudSkKIHsKICAgICBpZiAoIXBvcHVwTWVu
dS0+bV9kZXZpY2UpCiAgICAgICAgIHJldHVybiBGQUxTRTsKIAogICAgIGd1aW50IGtleXZhbDsK
LSAgICBnZGtfZXZlbnRfZ2V0X2tleXZhbChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZl
bnQpLCAma2V5dmFsKTsKLSAgICBpZiAoa2V5dmFsID09IEdES19LRVlfRXNjYXBlKSB7Ci0gICAg
ICAgIHBvcHVwTWVudS0+aGlkZVBvcHVwTWVudSgpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAg
ICB9Ci0KLSAgICBpZiAocG9wdXBNZW51LT50eXBlQWhlYWRGaW5kKGV2ZW50KSkKKyAgICBnZGtf
ZXZlbnRfZ2V0X2tleXZhbChldmVudCwgJmtleXZhbCk7CisgICAgaWYgKHBvcHVwTWVudS0+aGFu
ZGxlS2V5UHJlc3Moa2V5dmFsLCBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpKSkKICAgICAgICAg
cmV0dXJuIFRSVUU7CiAKICAgICAvLyBGb3J3YXJkIHRoZSBldmVudCB0byB0aGUgdHJlZSB2aWV3
LgotICAgIGd0a193aWRnZXRfZXZlbnQocG9wdXBNZW51LT5tX3RyZWVWaWV3LCByZWludGVycHJl
dF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKTsKKyAgICBndGtfd2lkZ2V0X2V2ZW50KHBvcHVwTWVu
dS0+bV90cmVlVmlldywgZXZlbnQpOwogICAgIHJldHVybiBUUlVFOwogfQogCkBAIC0zNTcsMTUg
KzM3MywxMiBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5R3RrOjpjYW5jZWxUcmFja2luZygpCiAg
ICAgaGlkZVBvcHVwTWVudSgpOwogfQogCi1PcHRpb25hbDx1bnNpZ25lZD4gV2ViUG9wdXBNZW51
UHJveHlHdGs6OnR5cGVBaGVhZEZpbmRJbmRleChHZGtFdmVudEtleSogZXZlbnQpCitPcHRpb25h
bDx1bnNpZ25lZD4gV2ViUG9wdXBNZW51UHJveHlHdGs6OnR5cGVBaGVhZEZpbmRJbmRleCh1bnNp
Z25lZCBrZXl2YWwsIHVpbnQzMl90IHRpbWUpCiB7Ci0gICAgZ3VpbnQga2V5dmFsOwotICAgIGdk
a19ldmVudF9nZXRfa2V5dmFsKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksICZr
ZXl2YWwpOwogICAgIGd1bmljaGFyIGtleWNoYXIgPSBnZGtfa2V5dmFsX3RvX3VuaWNvZGUoa2V5
dmFsKTsKICAgICBpZiAoIWdfdW5pY2hhcl9pc3ByaW50KGtleWNoYXIpKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgdWludDMyX3QgdGltZSA9IGdka19ldmVudF9nZXRfdGlt
ZShyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKTsKICAgICBpZiAodGltZSA8IG1f
cHJldmlvdXNLZXlFdmVudFRpbWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKQEAg
LTQyNyw5ICs0NDAsOSBAQCBPcHRpb25hbDx1bnNpZ25lZD4gV2ViUG9wdXBNZW51UHJveHlHdGs6
OnR5cGVBaGVhZEZpbmRJbmRleChHZGtFdmVudEtleSogZXZlbnQpCiAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIH0KIAotYm9vbCBXZWJQb3B1cE1lbnVQcm94eUd0azo6dHlwZUFoZWFkRmluZChH
ZGtFdmVudEtleSogZXZlbnQpCitib29sIFdlYlBvcHVwTWVudVByb3h5R3RrOjp0eXBlQWhlYWRG
aW5kKHVuc2lnbmVkIGtleXZhbCwgdWludDMyX3QgdGltZXN0YW1wKQogewotICAgIGF1dG8gc2Vh
cmNoSW5kZXggPSB0eXBlQWhlYWRGaW5kSW5kZXgoZXZlbnQpOworICAgIGF1dG8gc2VhcmNoSW5k
ZXggPSB0eXBlQWhlYWRGaW5kSW5kZXgoa2V5dmFsLCB0aW1lc3RhbXApOwogICAgIGlmICghc2Vh
cmNoSW5kZXgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuaAppbmRleCA1NTc1Yzc4ODNiOGIu
LjZjYjc0YmVjYjcyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dl
YlBvcHVwTWVudVByb3h5R3RrLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dl
YlBvcHVwTWVudVByb3h5R3RrLmgKQEAgLTI5LDEwICsyOSwxMCBAQAogdHlwZWRlZiBzdHJ1Y3Qg
X0dNYWluTG9vcCBHTWFpbkxvb3A7CiB0eXBlZGVmIHN0cnVjdCBfR2RrRGV2aWNlIEdka0Rldmlj
ZTsKIHR5cGVkZWYgc3RydWN0IF9HZGtFdmVudEJ1dHRvbiBHZGtFdmVudEJ1dHRvbjsKLXR5cGVk
ZWYgc3RydWN0IF9HZGtFdmVudEtleSBHZGtFdmVudEtleTsKIHR5cGVkZWYgc3RydWN0IF9HdGtU
cmVlUGF0aCBHdGtUcmVlUGF0aDsKIHR5cGVkZWYgc3RydWN0IF9HdGtUcmVlVmlldyBHdGtUcmVl
VmlldzsKIHR5cGVkZWYgc3RydWN0IF9HdGtUcmVlVmlld0NvbHVtbiBHdGtUcmVlVmlld0NvbHVt
bjsKK3R5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBJbnRSZWN0OwpAQCAtNTcsNiArNTcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHNlbGVjdEl0ZW0odW5zaWduZWQgaXRlbUluZGV4KTsKICAgICB2aXJ0dWFsIHZvaWQg
YWN0aXZhdGVJdGVtKE9wdGlvbmFsPHVuc2lnbmVkPiBpdGVtSW5kZXgpOwogCisgICAgYm9vbCBo
YW5kbGVLZXlQcmVzcyh1bnNpZ25lZCBrZXl2YWwsIHVpbnQzMl90IHRpbWVzdGFtcCk7CisgICAg
dm9pZCBhY3RpdmF0ZVNlbGVjdGVkSXRlbSgpOworCiBwcm90ZWN0ZWQ6CiAgICAgV2ViUG9wdXBN
ZW51UHJveHlHdGsoR3RrV2lkZ2V0KiwgV2ViUG9wdXBNZW51UHJveHk6OkNsaWVudCYpOwogCkBA
IC02NiwxMSArNjksMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVBvcHVwTWVudShjb25z
dCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCk7CiAgICAgdm9p
ZCBzaG93KCk7CiAgICAgYm9vbCBhY3RpdmF0ZUl0ZW1BdFBhdGgoR3RrVHJlZVBhdGgqKTsKLSAg
ICBPcHRpb25hbDx1bnNpZ25lZD4gdHlwZUFoZWFkRmluZEluZGV4KEdka0V2ZW50S2V5Kik7Ci0g
ICAgYm9vbCB0eXBlQWhlYWRGaW5kKEdka0V2ZW50S2V5Kik7CisgICAgT3B0aW9uYWw8dW5zaWdu
ZWQ+IHR5cGVBaGVhZEZpbmRJbmRleCh1bnNpZ25lZCBrZXl2YWwsIHVpbnQzMl90IHRpbWVzdGFt
cCk7CisgICAgYm9vbCB0eXBlQWhlYWRGaW5kKHVuc2lnbmVkIGtleXZhbCwgdWludDMyX3QgdGlt
ZXN0YW1wKTsKIAogICAgIHN0YXRpYyBnYm9vbGVhbiBidXR0b25QcmVzc0V2ZW50Q2FsbGJhY2so
R3RrV2lkZ2V0KiwgR2RrRXZlbnRCdXR0b24qLCBXZWJQb3B1cE1lbnVQcm94eUd0ayopOwotICAg
IHN0YXRpYyBnYm9vbGVhbiBrZXlQcmVzc0V2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiwgR2RrRXZl
bnRLZXkqLCBXZWJQb3B1cE1lbnVQcm94eUd0ayopOworICAgIHN0YXRpYyBnYm9vbGVhbiBrZXlQ
cmVzc0V2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiwgR2RrRXZlbnQqLCBXZWJQb3B1cE1lbnVQcm94
eUd0ayopOwogICAgIHN0YXRpYyB2b2lkIHRyZWVWaWV3Um93QWN0aXZhdGVkQ2FsbGJhY2soR3Rr
VHJlZVZpZXcqLCBHdGtUcmVlUGF0aCosIEd0a1RyZWVWaWV3Q29sdW1uKiwgV2ViUG9wdXBNZW51
UHJveHlHdGsqKTsKICAgICBzdGF0aWMgZ2Jvb2xlYW4gdHJlZVZpZXdCdXR0b25SZWxlYXNlRXZl
bnRDYWxsYmFjayhHdGtXaWRnZXQqLCBHZGtFdmVudEJ1dHRvbiosIFdlYlBvcHVwTWVudVByb3h5
R3RrKik7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCA5MmJkNGVmNTc4YmQuLjk0YWQxMDBhMjc3MCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIwLTA1LTI0ICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RL
XVtXVFJdIEV2ZW50U2VuZGVyOiBzdG9wIHVzaW5nIEdka0V2ZW50IEFQSSBpbiBwcmVwYXJhdGlv
biBmb3IgR1RLNAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEyMjk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVXNlIFdlYktpdFdlYlZpZXdCYXNlIGludGVybmFsIEFQSSB0byBzeW50aGVzaXplIGV2ZW50
cyBpbnN0ZWFkIG9mIEdka0V2ZW50cy4gVGhlIHRvdWNoIGV2ZW50cyBzdXBwb3J0IGhhcyBiZWVu
CisgICAgICAgIHJlbW92ZWQgYmVjYXVzZSB3ZSBhcmUgbm8gbG9uZ2VyIHRlc3RpbmcgdG91Y2gg
ZXZlbnRzLCBzaW5jZSB0aGV5IG5lZWQgYW4gYWN0dWFsIHRvdWNoc2NyZWVuLgorCisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5Lmg6CisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9ndGsvRXZlbnRTZW5kZXJQcm94eUd0ay5jcHA6CisgICAgICAgIChXVFI6Omdl
dEdES0tleVN5bUZvcktleVJlZik6CisgICAgICAgIChXVFI6OnRvV2ViS2l0R0xpYkFQSSk6Cisg
ICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OmtleURvd24pOgorICAgICAgICAoV1RSOjpF
dmVudFNlbmRlclByb3h5Ojptb3VzZURvd24pOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclBy
b3h5Ojptb3VzZVVwKToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6bW91c2VNb3Zl
VG8pOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5KToKKyAg
ICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6Y29udGludW91c01vdXNlU2Nyb2xsQnkpOgor
ICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5k
TW9tZW50dW1QaGFzZXMpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpsZWFwRm9y
d2FyZCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OmFkZFRvdWNoUG9pbnQpOgor
ICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVUb3VjaFBvaW50KToKKyAgICAg
ICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hTdGFydCk6CisgICAgICAgIChXVFI6OkV2
ZW50U2VuZGVyUHJveHk6OnRvdWNoTW92ZSk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJv
eHk6OnRvdWNoRW5kKToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hDYW5j
ZWwpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpjbGVhclRvdWNoUG9pbnRzKToK
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6cmVsZWFzZVRvdWNoUG9pbnQpOgorICAg
ICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpjYW5jZWxUb3VjaFBvaW50KToKKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hQb2ludFJhZGl1cyk6CisgICAgICAgIChX
VFI6OkV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoTW9kaWZpZXIpOgorCiAyMDIwLTA1LTIyICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFr
ZSBkb3dubG9hZCByZXN1bWUgd29ya2Fyb3VuZCBmb3JnaXZpbmcgb2YgY2hhbmdlcyBpbiBDRk5l
dHdvcmsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94
eS5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5LmgKaW5kZXggMTEz
OTliMzkwZmU5Li5kOGEyNzIzYzIyMzcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvRXZlbnRTZW5kZXJQcm94eS5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZlbnRT
ZW5kZXJQcm94eS5oCkBAIC0zMiwxMSArMzIsNiBAQAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBQTEFURk9STShHVEspCi0jaW5jbHVk
ZSA8V2ViQ29yZS9HVW5pcXVlUHRyR3RrLmg+Ci0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2VuZGlm
Ci0KICNpZiBQTEFURk9STShXUEUpCiAjaW5jbHVkZSA8d3BlL3dwZS5oPgogI2VuZGlmCkBAIC00
OSwxMCArNDQsNiBAQCBuYW1lc3BhY2UgV1RSIHsKIAogY2xhc3MgVGVzdENvbnRyb2xsZXI7CiAK
LSNpZiBQTEFURk9STShHVEspCi1zdHJ1Y3QgV1RSRXZlbnRRdWV1ZUl0ZW07Ci0jZW5kaWYKLQog
Y2xhc3MgRXZlbnRTZW5kZXJQcm94eSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CkBAIC0xMDIsMTAgKzkzLDYgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgY3VycmVudEV2
ZW50VGltZSgpIHsgcmV0dXJuIG1fdGltZTsgfQogICAgIHZvaWQgdXBkYXRlQ2xpY2tDb3VudEZv
ckJ1dHRvbihpbnQgYnV0dG9uKTsKIAotI2lmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHJlcGxh
eVNhdmVkRXZlbnRzKCk7Ci0jZW5kaWYKLQogICAgIHZvaWQgc2VuZE1vdXNlRG93blRvU3RhcnRQ
cmVzc3VyZUV2ZW50cygpOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGVudW0gY2xhc3MgUHJl
c3N1cmVDaGFuZ2VEaXJlY3Rpb24geyBJbmNyZWFzaW5nLCBEZWNyZWFzaW5nIH07CkBAIC0xMTQs
MTQgKzEwMSw2IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPE5TRXZlbnQ+IHByZXNzdXJlQ2hh
bmdlRXZlbnQoaW50IHN0YWdlLCBmbG9hdCBwcmVzc3VyZSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rp
b24pOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShHVEspCi0gICAgdm9pZCBzZW5kT3JRdWV1ZUV2
ZW50KEdka0V2ZW50Kik7Ci0gICAgdm9pZCBkaXNwYXRjaEV2ZW50KEdka0V2ZW50Kik7Ci0gICAg
R2RrRXZlbnQqIGNyZWF0ZU1vdXNlQnV0dG9uRXZlbnQoR2RrRXZlbnRUeXBlLCB1bnNpZ25lZCBi
dXR0b24sIFdLRXZlbnRNb2RpZmllcnMpOwotICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGNyZWF0
ZVRvdWNoRXZlbnQoR2RrRXZlbnRUeXBlLCBpbnQgaWQpOwotICAgIHZvaWQgc2VuZFVwZGF0ZWRU
b3VjaEV2ZW50cygpOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShXUEUpCiAgICAgVmVjdG9yPHN0
cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfcmF3PiBnZXRVcGRhdGVkVG91Y2hFdmVudHMoKTsK
ICAgICB2b2lkIHJlbW92ZVVwZGF0ZWRUb3VjaEV2ZW50cygpOwpAQCAtMTQwLDE3ICsxMTksMTEg
QEAgcHJpdmF0ZToKICAgICBkb3VibGUgbV9jbGlja1RpbWU7CiAgICAgV0tQb2ludCBtX2NsaWNr
UG9zaXRpb247CiAgICAgV0tFdmVudE1vdXNlQnV0dG9uIG1fY2xpY2tCdXR0b247CisgICAgdW5z
aWduZWQgbV9tb3VzZUJ1dHRvbnNDdXJyZW50bHlEb3duIHsgMCB9OwogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIGludCBldmVudE51bWJlcjsKLSAgICB1bnNpZ25lZCBtX21vdXNlQnV0dG9uc0N1
cnJlbnRseURvd24geyAwIH07Ci0jZWxpZiBQTEFURk9STShHVEspCi0gICAgRGVxdWU8V1RSRXZl
bnRRdWV1ZUl0ZW0+IG1fZXZlbnRRdWV1ZTsKLSAgICB1bnNpZ25lZCBtX21vdXNlQnV0dG9uc0N1
cnJlbnRseURvd24geyAwIH07Ci0gICAgVmVjdG9yPEdVbmlxdWVQdHI8R2RrRXZlbnQ+PiBtX3Rv
dWNoRXZlbnRzOwotICAgIEhhc2hTZXQ8aW50PiBtX3VwZGF0ZWRUb3VjaEV2ZW50czsKICNlbGlm
IFBMQVRGT1JNKFdQRSkKICAgICB1aW50MzJfdCBtX2J1dHRvblN0YXRlOwotICAgIHVpbnQzMl90
IG1fbW91c2VCdXR0b25zQ3VycmVudGx5RG93biB7IDAgfTsKICAgICBWZWN0b3I8c3RydWN0IHdw
ZV9pbnB1dF90b3VjaF9ldmVudF9yYXc+IG1fdG91Y2hFdmVudHM7CiAgICAgSGFzaFNldDx1bnNp
Z25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV91cGRhdGVkVG91Y2hFdmVudHM7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL0V2ZW50U2VuZGVyUHJveHlHdGsu
Y3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvRXZlbnRTZW5kZXJQcm94eUd0ay5jcHAK
aW5kZXggODQ4MWYxZDdhNWUyLi4wOTU1ZjUxNjg3MWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvZ3RrL0V2ZW50U2VuZGVyUHJveHlHdGsuY3BwCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvZ3RrL0V2ZW50U2VuZGVyUHJveHlHdGsuY3BwCkBAIC0zNSwxMSArMzUsMTAg
QEAKIAogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgogI2luY2x1ZGUgIlRlc3RDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VJbnRlcm5hbC5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvR3RrVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtWZXJzaW9uaW5n
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPGdkay9n
ZGsuaD4KICNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5
Lmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgpAQCAtNTksMjIgKzU4LDYgQEAg
ZW51bSBLZXlMb2NhdGlvbkNvZGUgewogfTsKIAogCi1zdHJ1Y3QgV1RSRXZlbnRRdWV1ZUl0ZW0g
ewotICAgIEdka0V2ZW50KiBldmVudDsKLSAgICBndWxvbmcgZGVsYXk7Ci0KLSAgICBXVFJFdmVu
dFF1ZXVlSXRlbSgpCi0gICAgICAgIDogZXZlbnQoMCkKLSAgICAgICAgLCBkZWxheSgwKQotICAg
IHsKLSAgICB9Ci0gICAgV1RSRXZlbnRRdWV1ZUl0ZW0oR2RrRXZlbnQqIGV2ZW50LCBndWxvbmcg
ZGVsYXkpCi0gICAgICAgIDogZXZlbnQoZXZlbnQpCi0gICAgICAgICwgZGVsYXkoZGVsYXkpCi0g
ICAgewotICAgIH0KLX07Ci0KIEV2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2VuZGVyUHJveHkoVGVz
dENvbnRyb2xsZXIqIHRlc3RDb250cm9sbGVyKQogICAgIDogbV90ZXN0Q29udHJvbGxlcih0ZXN0
Q29udHJvbGxlcikKICAgICAsIG1fdGltZSgwKQpAQCAtMTE5LDI4ICsxMDIsNiBAQCBzdGF0aWMg
Z3VpbnQgd2Via2l0TW9kaWZpZXJzVG9HREtNb2RpZmllcnMoV0tFdmVudE1vZGlmaWVycyB3a01v
ZGlmaWVycykKICAgICByZXR1cm4gbW9kaWZpZXJzOwogfQogCi1HZGtFdmVudCogRXZlbnRTZW5k
ZXJQcm94eTo6Y3JlYXRlTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUgZXZlbnRUeXBlLCB1
bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzKQotewotICAgIEdka0V2
ZW50KiBtb3VzZUV2ZW50ID0gZ2RrX2V2ZW50X25ldyhldmVudFR5cGUpOwotCi0gICAgbW91c2VF
dmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKLSAgICBtb3VzZUV2ZW50LT5idXR0b24ueCA9
IG1fcG9zaXRpb24ueDsKLSAgICBtb3VzZUV2ZW50LT5idXR0b24ueSA9IG1fcG9zaXRpb24ueTsK
LSAgICBtb3VzZUV2ZW50LT5idXR0b24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KEdU
S19XSURHRVQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkp
KTsKLSAgICBnX29iamVjdF9yZWYobW91c2VFdmVudC0+YnV0dG9uLndpbmRvdyk7Ci0gICAgZ2Rr
X2V2ZW50X3NldF9kZXZpY2UobW91c2VFdmVudCwgZ2RrX3NlYXRfZ2V0X3BvaW50ZXIoZ2RrX2Rp
c3BsYXlfZ2V0X2RlZmF1bHRfc2VhdChnZGtfd2luZG93X2dldF9kaXNwbGF5KG1vdXNlRXZlbnQt
PmJ1dHRvbi53aW5kb3cpKSkpOwotICAgIG1vdXNlRXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IHdlYmtp
dE1vZGlmaWVyc1RvR0RLTW9kaWZpZXJzKG1vZGlmaWVycykgfCBtX21vdXNlQnV0dG9uc0N1cnJl
bnRseURvd247Ci0gICAgbW91c2VFdmVudC0+YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1F
OwotICAgIG1vdXNlRXZlbnQtPmJ1dHRvbi5heGVzID0gMDsKLQotICAgIGludCB4Um9vdCwgeVJv
b3Q7Ci0gICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMobW91c2VFdmVudC0+YnV0dG9uLndp
bmRvdywgbV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnksICZ4Um9vdCwgJnlSb290KTsKLSAgICBt
b3VzZUV2ZW50LT5idXR0b24ueF9yb290ID0geFJvb3Q7Ci0gICAgbW91c2VFdmVudC0+YnV0dG9u
Lnlfcm9vdCA9IHlSb290OwotCi0gICAgcmV0dXJuIG1vdXNlRXZlbnQ7Ci19Ci0KIHZvaWQgRXZl
bnRTZW5kZXJQcm94eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQgYnV0dG9uKQogewog
ICAgIGlmIChtX3RpbWUgLSBtX2NsaWNrVGltZSA8IDEgJiYgbV9wb3NpdGlvbiA9PSBtX2NsaWNr
UG9zaXRpb24gJiYgYnV0dG9uID09IG1fY2xpY2tCdXR0b24pIHsKQEAgLTE1NSw0MSArMTE2LDEy
IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQg
YnV0dG9uKQogICAgIG1fY2xpY2tCdXR0b24gPSBidXR0b247CiB9CiAKLXZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6ZGlzcGF0Y2hFdmVudChHZGtFdmVudCogZXZlbnQpCi17Ci0gICAgQVNTRVJUKG1f
dGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCkpOwotICAgIGd0a19tYWluX2RvX2V2ZW50KGV2
ZW50KTsKLSAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6cmVwbGF5U2F2ZWRFdmVudHMoKQotewotICAgIHdoaWxlICghbV9ldmVudFF1ZXVlLmlz
RW1wdHkoKSkgewotICAgICAgICBXVFJFdmVudFF1ZXVlSXRlbSBpdGVtID0gbV9ldmVudFF1ZXVl
LnRha2VGaXJzdCgpOwotICAgICAgICBpZiAoaXRlbS5kZWxheSkKLSAgICAgICAgICAgIGdfdXNs
ZWVwKGl0ZW0uZGVsYXkgKiAxMDAwKTsKLQotICAgICAgICBkaXNwYXRjaEV2ZW50KGl0ZW0uZXZl
bnQpOwotICAgIH0KLX0KLQotdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kT3JRdWV1ZUV2ZW50
KEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBpZiAobV9ldmVudFF1ZXVlLmlzRW1wdHkoKSB8fCAh
bV9ldmVudFF1ZXVlLmxhc3QoKS5kZWxheSkgewotICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fZXZlbnRRdWV1ZS5sYXN0KCkuZXZl
bnQgPSBldmVudDsKLSAgICByZXBsYXlTYXZlZEV2ZW50cygpOwotfQotCi1pbnQgZ2V0R0RLS2V5
U3ltRm9yS2V5UmVmKFdLU3RyaW5nUmVmIGtleVJlZiwgdW5zaWduZWQgbG9jYXRpb24sIGd1aW50
KiBtb2RpZmllcnMpCitzdGF0aWMgaW50IGdldEdES0tleVN5bUZvcktleVJlZihXS1N0cmluZ1Jl
ZiBrZXlSZWYsIHVuc2lnbmVkIGxvY2F0aW9uLCBndWludCogbW9kaWZpZXJzKQogewogICAgIGlm
IChsb2NhdGlvbiA9PSBET01LZXlMb2NhdGlvbk51bXBhZCkgewogICAgICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJsZWZ0QXJyb3ciKSkKICAgICAgICAgICAg
IHJldHVybiBHREtfS0VZX0tQX0xlZnQ7Ci0gICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKGtleVJlZiwgInJpZ2h0QXJyb3IiKSkKKyAgICAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicmlnaHRBcnJvdyIpKQogICAgICAgICAgICAgcmV0
dXJuIEdES19LRVlfS1BfUmlnaHQ7CiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKGtleVJlZiwgInVwQXJyb3ciKSkKICAgICAgICAgICAgIHJldHVybiBHREtfS0VZX0tQ
X1VwOwpAQCAtMjk0LDI4ICsyMjYsMTYgQEAgaW50IGdldEdES0tleVN5bUZvcktleVJlZihXS1N0
cmluZ1JlZiBrZXlSZWYsIHVuc2lnbmVkIGxvY2F0aW9uLCBndWludCogbW9kaWZpZXIKICAgICBy
ZXR1cm4gZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKHN0YXRpY19jYXN0PGd1aW50MzI+KGJ1ZmZlci5n
ZXQoKVswXSkpOwogfQogCitzdGF0aWMgaW5saW5lIFdlYktpdFdlYlZpZXdCYXNlKiB0b1dlYktp
dEdMaWJBUEkoUGxhdGZvcm1XS1ZpZXcgdmlldykKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxX
ZWJLaXRXZWJWaWV3QmFzZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgV2ViS2l0V2ViVmlld0Jh
c2UqPih2aWV3KSk7Cit9CisKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmlu
Z1JlZiBrZXlSZWYsIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMsIHVuc2lnbmVkIGxvY2F0
aW9uKQogewogICAgIGd1aW50IG1vZGlmaWVycyA9IHdlYmtpdE1vZGlmaWVyc1RvR0RLTW9kaWZp
ZXJzKHdrTW9kaWZpZXJzKTsKICAgICBpbnQgZ2RrS2V5U3ltID0gZ2V0R0RLS2V5U3ltRm9yS2V5
UmVmKGtleVJlZiwgbG9jYXRpb24sICZtb2RpZmllcnMpOwotCi0gICAgR2RrRXZlbnQqIHByZXNz
RXZlbnQgPSBnZGtfZXZlbnRfbmV3KEdES19LRVlfUFJFU1MpOwotICAgIHByZXNzRXZlbnQtPmtl
eS5rZXl2YWwgPSBnZGtLZXlTeW07Ci0gICAgcHJlc3NFdmVudC0+a2V5LnN0YXRlID0gbW9kaWZp
ZXJzOwotICAgIHByZXNzRXZlbnQtPmtleS53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3co
R1RLX1dJREdFVChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRv
dygpKSk7Ci0gICAgZ19vYmplY3RfcmVmKHByZXNzRXZlbnQtPmtleS53aW5kb3cpOwotICAgIEdk
a0Rpc3BsYXkqIGRpc3BsYXkgPSBnZGtfd2luZG93X2dldF9kaXNwbGF5KHByZXNzRXZlbnQtPmtl
eS53aW5kb3cpOwotICAgIGdka19ldmVudF9zZXRfZGV2aWNlKHByZXNzRXZlbnQsIGdka19zZWF0
X2dldF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3NlYXQoZGlzcGxheSkpKTsKLQot
ICAgIEdVbmlxdWVPdXRQdHI8R2RrS2V5bWFwS2V5PiBrZXlzOwotICAgIGdpbnQgbktleXM7Ci0g
ICAgaWYgKGdka19rZXltYXBfZ2V0X2VudHJpZXNfZm9yX2tleXZhbChnZGtfa2V5bWFwX2dldF9m
b3JfZGlzcGxheShkaXNwbGF5KSwgZ2RrS2V5U3ltLCAma2V5cy5vdXRQdHIoKSwgJm5LZXlzKSAm
JiBuS2V5cykKLSAgICAgICAgcHJlc3NFdmVudC0+a2V5LmhhcmR3YXJlX2tleWNvZGUgPSBrZXlz
LmdldCgpWzBdLmtleWNvZGU7Ci0KLSAgICBHZGtFdmVudCogcmVsZWFzZUV2ZW50ID0gZ2RrX2V2
ZW50X2NvcHkocHJlc3NFdmVudCk7Ci0gICAgZGlzcGF0Y2hFdmVudChwcmVzc0V2ZW50KTsKLSAg
ICByZWxlYXNlRXZlbnQtPmtleS50eXBlID0gR0RLX0tFWV9SRUxFQVNFOwotICAgIGRpc3BhdGNo
RXZlbnQocmVsZWFzZUV2ZW50KTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVLZXlF
dmVudCh0b1dlYktpdEdMaWJBUEkobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxh
dGZvcm1WaWV3KCkpLCBnZGtLZXlTeW0sIG1vZGlmaWVycyk7CiB9CiAKIHZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6bW91c2VEb3duKHVuc2lnbmVkIGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyB3a01v
ZGlmaWVycykKQEAgLTMyOCw0MCArMjQ4LDIzIEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91
c2VEb3duKHVuc2lnbmVkIGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVycykKICAg
ICBpZiAobV9tb3VzZUJ1dHRvbnNDdXJyZW50bHlEb3duICYgbW9kaWZpZXIpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIC8vIE5vcm1hbGx5IEdESyB3aWxsIHNlbmQgYm90aCBHREtfQlVUVE9OX1BS
RVNTIGFuZCBHREtfMkJVVFRPTl9QUkVTUyBmb3IKLSAgICAvLyB0aGUgc2Vjb25kIGJ1dHRvbiBw
cmVzcyBkdXJpbmcgZG91YmxlLWNsaWNrcy4gV2ViS2l0IEdUSysgc2VsZWN0aXZlbHkKLSAgICAv
LyBpZ25vcmVzIHRoZSBmaXJzdCBHREtfQlVUVE9OX1BSRVNTIG9mIHRoYXQgcGFpciB1c2luZyBn
ZGtfZXZlbnRfcGVlay4KLSAgICAvLyBTaW5jZSBvdXIgZXZlbnRzIGFyZW4ndCBldmVyIGdvaW5n
IG9udG8gdGhlIEdESyBldmVudCBxdWV1ZSwgV2ViS2l0IHdvbid0Ci0gICAgLy8gYmUgYWJsZSB0
byBmaWx0ZXIgb3V0IHRoZSBmaXJzdCBHREtfQlVUVE9OX1BSRVNTLCBzbyB3ZSBqdXN0IGRvbid0
IHNlbmQKLSAgICAvLyBpdCBoZXJlLiBFdmVudHVhbGx5IHRoaXMgY29kZSBzaG91bGQgcHJvYmFi
bHkgZmlndXJlIG91dCBhIHdheSB0byBnZXQgYWxsCi0gICAgLy8gYXBwcm9wcmlhdGUgZXZlbnRz
IG9udG8gdGhlIGV2ZW50IHF1ZXVlIGFuZCB0aGlzIHdvcmstYXJvdW5kIHNob3VsZCBiZQotICAg
IC8vIHJlbW92ZWQuCiAgICAgdXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihidXR0b24pOwotCi0g
ICAgR2RrRXZlbnRUeXBlIGV2ZW50VHlwZTsKLSAgICBpZiAobV9jbGlja0NvdW50ID09IDIpCi0g
ICAgICAgIGV2ZW50VHlwZSA9IEdES18yQlVUVE9OX1BSRVNTOwotICAgIGVsc2UgaWYgKG1fY2xp
Y2tDb3VudCA9PSAzKQotICAgICAgICBldmVudFR5cGUgPSBHREtfM0JVVFRPTl9QUkVTUzsKLSAg
ICBlbHNlCi0gICAgICAgIGV2ZW50VHlwZSA9IEdES19CVVRUT05fUFJFU1M7Ci0KLSAgICBHZGtF
dmVudCogZXZlbnQgPSBjcmVhdGVNb3VzZUJ1dHRvbkV2ZW50KGV2ZW50VHlwZSwgZ2RrQnV0dG9u
LCB3a01vZGlmaWVycyk7CiAgICAgbV9tb3VzZUJ1dHRvbnNDdXJyZW50bHlEb3duIHw9IG1vZGlm
aWVyOwotICAgIHNlbmRPclF1ZXVlRXZlbnQoZXZlbnQpOworCisgICAgd2Via2l0V2ViVmlld0Jh
c2VTeW50aGVzaXplTW91c2VFdmVudCh0b1dlYktpdEdMaWJBUEkobV90ZXN0Q29udHJvbGxlci0+
bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpLAorICAgICAgICBNb3VzZUV2ZW50VHlwZTo6
UHJlc3MsIGdka0J1dHRvbiwgbV9tb3VzZUJ1dHRvbnNDdXJyZW50bHlEb3duLCBtX3Bvc2l0aW9u
LngsIG1fcG9zaXRpb24ueSwgd2Via2l0TW9kaWZpZXJzVG9HREtNb2RpZmllcnMod2tNb2RpZmll
cnMpLCBtX2NsaWNrQ291bnQpOwogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlVXAo
dW5zaWduZWQgYnV0dG9uLCBXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQogewotICAgIG1f
Y2xpY2tCdXR0b24gPSBrV0tFdmVudE1vdXNlQnV0dG9uTm9CdXR0b247CiAgICAgdW5zaWduZWQg
Z2RrQnV0dG9uID0gZXZlbnRTZW5kZXJCdXR0b25Ub0dES0J1dHRvbihidXR0b24pOwotICAgIEdk
a0V2ZW50KiBldmVudCA9IGNyZWF0ZU1vdXNlQnV0dG9uRXZlbnQoR0RLX0JVVFRPTl9SRUxFQVNF
LCBnZGtCdXR0b24sIHdrTW9kaWZpZXJzKTsKICAgICBhdXRvIG1vZGlmaWVyID0gV2ViQ29yZTo6
c3RhdGVNb2RpZmllckZvckdka0J1dHRvbihnZGtCdXR0b24pOwogICAgIG1fbW91c2VCdXR0b25z
Q3VycmVudGx5RG93biAmPSB+bW9kaWZpZXI7Ci0gICAgc2VuZE9yUXVldWVFdmVudChldmVudCk7
CisgICAgd2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplTW91c2VFdmVudCh0b1dlYktpdEdMaWJB
UEkobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpLAorICAg
ICAgICBNb3VzZUV2ZW50VHlwZTo6UmVsZWFzZSwgZ2RrQnV0dG9uLCBtX21vdXNlQnV0dG9uc0N1
cnJlbnRseURvd24sIG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55LCB3ZWJraXRNb2RpZmllcnNU
b0dES01vZGlmaWVycyh3a01vZGlmaWVycyksIDApOwogCiAgICAgbV9jbGlja1Bvc2l0aW9uID0g
bV9wb3NpdGlvbjsKLSAgICBtX2NsaWNrVGltZSA9IEdES19DVVJSRU5UX1RJTUU7CisgICAgbV9j
bGlja1RpbWUgPSBtX3RpbWU7CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VNb3Zl
VG8oZG91YmxlIHgsIGRvdWJsZSB5KQpAQCAtMzY5LDIzICsyNzIsOCBAQCB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6Om1vdXNlTW92ZVRvKGRvdWJsZSB4LCBkb3VibGUgeSkKICAgICBtX3Bvc2l0aW9u
LnggPSB4OwogICAgIG1fcG9zaXRpb24ueSA9IHk7CiAKLSAgICBHZGtFdmVudCogZXZlbnQgPSBn
ZGtfZXZlbnRfbmV3KEdES19NT1RJT05fTk9USUZZKTsKLSAgICBldmVudC0+bW90aW9uLnggPSBt
X3Bvc2l0aW9uLng7Ci0gICAgZXZlbnQtPm1vdGlvbi55ID0gbV9wb3NpdGlvbi55OwotCi0gICAg
ZXZlbnQtPm1vdGlvbi50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKLSAgICBldmVudC0+bW90aW9u
LndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKG1fdGVzdENvbnRyb2xs
ZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSk7Ci0gICAgZ19vYmplY3RfcmVmKGV2
ZW50LT5tb3Rpb24ud2luZG93KTsKLSAgICBnZGtfZXZlbnRfc2V0X2RldmljZShldmVudCwgZ2Rr
X3NlYXRfZ2V0X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHRfc2VhdChnZGtfd2luZG93
X2dldF9kaXNwbGF5KGV2ZW50LT5tb3Rpb24ud2luZG93KSkpKTsKLSAgICBldmVudC0+bW90aW9u
LnN0YXRlID0gbV9tb3VzZUJ1dHRvbnNDdXJyZW50bHlEb3duOwotICAgIGV2ZW50LT5tb3Rpb24u
YXhlcyA9IDA7Ci0KLSAgICBpbnQgeFJvb3QsIHlSb290OwotICAgIGdka193aW5kb3dfZ2V0X3Jv
b3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKG1fdGVzdENvbnRyb2xs
ZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSksIG1fcG9zaXRpb24ueCwgbV9wb3Np
dGlvbi55ICwgJnhSb290LCAmeVJvb3QpOwotICAgIGV2ZW50LT5tb3Rpb24ueF9yb290ID0geFJv
b3Q7Ci0gICAgZXZlbnQtPm1vdGlvbi55X3Jvb3QgPSB5Um9vdDsKLQotICAgIHNlbmRPclF1ZXVl
RXZlbnQoZXZlbnQpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZU1vdXNlRXZlbnQo
dG9XZWJLaXRHTGliQVBJKG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3Jt
VmlldygpKSwKKyAgICAgICAgTW91c2VFdmVudFR5cGU6Ok1vdGlvbiwgMCwgbV9tb3VzZUJ1dHRv
bnNDdXJyZW50bHlEb3duLCBtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSwgMCwgMCk7CiB9CiAK
IHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VTY3JvbGxCeShpbnQgaG9yaXpvbnRhbCwgaW50
IHZlcnRpY2FsKQpAQCAtMzk0LDM2ICsyODIsOCBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1v
dXNlU2Nyb2xsQnkoaW50IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCkKICAgICBpZiAoIWhvcml6
b250YWwgJiYgIXZlcnRpY2FsKQogICAgICAgICByZXR1cm47CiAKLSAgICBHZGtFdmVudCogZXZl
bnQgPSBnZGtfZXZlbnRfbmV3KEdES19TQ1JPTEwpOwotICAgIGV2ZW50LT5zY3JvbGwueCA9IG1f
cG9zaXRpb24ueDsKLSAgICBldmVudC0+c2Nyb2xsLnkgPSBtX3Bvc2l0aW9uLnk7Ci0gICAgZXZl
bnQtPnNjcm9sbC50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKLSAgICBldmVudC0+c2Nyb2xsLndp
bmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKG1fdGVzdENvbnRyb2xsZXIt
Pm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSk7Ci0gICAgZ19vYmplY3RfcmVmKGV2ZW50
LT5zY3JvbGwud2luZG93KTsKLSAgICBnZGtfZXZlbnRfc2V0X2RldmljZShldmVudCwgZ2RrX3Nl
YXRfZ2V0X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHRfc2VhdChnZGtfd2luZG93X2dl
dF9kaXNwbGF5KGV2ZW50LT5zY3JvbGwud2luZG93KSkpKTsKLQotICAgIC8vIEZvciBtb3JlIHRo
YW4gb25lIHRpY2sgaW4gYSBzY3JvbGwsIHdlIG5lZWQgc21vb3RoIHNjcm9sbCBldmVudAotICAg
IGlmICgoaG9yaXpvbnRhbCAmJiB2ZXJ0aWNhbCkgfHwgaG9yaXpvbnRhbCA+IDEgfHwgaG9yaXpv
bnRhbCA8IC0xIHx8IHZlcnRpY2FsID4gMSB8fCB2ZXJ0aWNhbCA8IC0xKSB7Ci0gICAgICAgIGV2
ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1NDUk9MTF9TTU9PVEg7Ci0gICAgICAgIGV2ZW50
LT5zY3JvbGwuZGVsdGFfeCA9IC1ob3Jpem9udGFsOwotICAgICAgICBldmVudC0+c2Nyb2xsLmRl
bHRhX3kgPSAtdmVydGljYWw7Ci0KLSAgICAgICAgc2VuZE9yUXVldWVFdmVudChldmVudCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaG9yaXpvbnRhbCA8IDApCi0gICAgICAg
IGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1NDUk9MTF9SSUdIVDsKLSAgICBlbHNlIGlm
IChob3Jpem9udGFsID4gMCkKLSAgICAgICAgZXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPSBHREtf
U0NST0xMX0xFRlQ7Ci0gICAgZWxzZSBpZiAodmVydGljYWwgPCAwKQotICAgICAgICBldmVudC0+
c2Nyb2xsLmRpcmVjdGlvbiA9IEdES19TQ1JPTExfRE9XTjsKLSAgICBlbHNlIGlmICh2ZXJ0aWNh
bCA+IDApCi0gICAgICAgIGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1NDUk9MTF9VUDsK
LSAgICBlbHNlCi0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0KLSAgICBzZW5kT3JR
dWV1ZUV2ZW50KGV2ZW50KTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVXaGVlbEV2
ZW50KHRvV2ViS2l0R0xpYkFQSShtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0
Zm9ybVZpZXcoKSksCisgICAgICAgIGhvcml6b250YWwsIHZlcnRpY2FsLCBtX3Bvc2l0aW9uLngs
IG1fcG9zaXRpb24ueSwgV2hlZWxFdmVudFBoYXNlOjpOb1BoYXNlLCBXaGVlbEV2ZW50UGhhc2U6
Ok5vUGhhc2UpOwogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNvbnRpbnVvdXNNb3VzZVNj
cm9sbEJ5KGludCBob3Jpem9udGFsLCBpbnQgdmVydGljYWwsIGJvb2wgcGFnZWQpCkBAIC00MzQs
MTUxICsyOTQsMTAyIEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6Y29udGludW91c01vdXNlU2Ny
b2xsQnkoaW50IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCwgYm9vCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtfZXZlbnRfbmV3KEdES19TQ1JPTEwp
OwotICAgIGV2ZW50LT5zY3JvbGwueCA9IG1fcG9zaXRpb24ueDsKLSAgICBldmVudC0+c2Nyb2xs
LnkgPSBtX3Bvc2l0aW9uLnk7Ci0gICAgZXZlbnQtPnNjcm9sbC50aW1lID0gR0RLX0NVUlJFTlRf
VElNRTsKLSAgICBldmVudC0+c2Nyb2xsLndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhH
VEtfV0lER0VUKG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygp
KSk7Ci0gICAgZ19vYmplY3RfcmVmKGV2ZW50LT5zY3JvbGwud2luZG93KTsKLSAgICBnZGtfZXZl
bnRfc2V0X2RldmljZShldmVudCwgZ2RrX3NlYXRfZ2V0X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0
X2RlZmF1bHRfc2VhdChnZGtfd2luZG93X2dldF9kaXNwbGF5KGV2ZW50LT5zY3JvbGwud2luZG93
KSkpKTsKLQotICAgIGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1NDUk9MTF9TTU9PVEg7
Ci0gICAgZXZlbnQtPnNjcm9sbC5kZWx0YV94ID0gLWhvcml6b250YWwgLyBwaXhlbHNQZXJTY3Jv
bGxUaWNrOwotICAgIGV2ZW50LT5zY3JvbGwuZGVsdGFfeSA9IC12ZXJ0aWNhbCAvIHBpeGVsc1Bl
clNjcm9sbFRpY2s7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplV2hlZWxFdmVudCh0
b1dlYktpdEdMaWJBUEkobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1W
aWV3KCkpLAorICAgICAgICBob3Jpem9udGFsIC8gcGl4ZWxzUGVyU2Nyb2xsVGljaywgdmVydGlj
YWwgLyBwaXhlbHNQZXJTY3JvbGxUaWNrLCBtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSwgV2hl
ZWxFdmVudFBoYXNlOjpOb1BoYXNlLCBXaGVlbEV2ZW50UGhhc2U6Ok5vUGhhc2UpOworfQorCit2
b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBo
YXNlcyhpbnQgaG9yaXpvbnRhbCwgaW50IHZlcnRpY2FsLCBpbnQgcGhhc2UsIGludCBtb21lbnR1
bSkKK3sKKyAgICBXaGVlbEV2ZW50UGhhc2UgZXZlbnRQaGFzZSA9IFdoZWVsRXZlbnRQaGFzZTo6
Tm9QaGFzZTsKKyAgICBzd2l0Y2ggKHBoYXNlKSB7CisgICAgY2FzZSAwOgorICAgICAgICBldmVu
dFBoYXNlID0gV2hlZWxFdmVudFBoYXNlOjpOb1BoYXNlOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIDE6CisgICAgICAgIGV2ZW50UGhhc2UgPSBXaGVlbEV2ZW50UGhhc2U6OkJlZ2FuOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIGV2ZW50UGhhc2UgPSBXaGVlbEV2ZW50
UGhhc2U6OkNoYW5nZWQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAgICAgICAgZXZl
bnRQaGFzZSA9IFdoZWVsRXZlbnRQaGFzZTo6RW5kZWQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgODoKKyAgICAgICAgZXZlbnRQaGFzZSA9IFdoZWVsRXZlbnRQaGFzZTo6Q2FuY2VsbGVkOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIDEyODoKKyAgICAgICAgZXZlbnRQaGFzZSA9IFdoZWVs
RXZlbnRQaGFzZTo6TWF5QmVnaW47CisgICAgICAgIGJyZWFrOworICAgIH0KIAotICAgIHNlbmRP
clF1ZXVlRXZlbnQoZXZlbnQpOwotfQorICAgIFdoZWVsRXZlbnRQaGFzZSBldmVudE1vbWVudHVt
UGhhc2UgPSBXaGVlbEV2ZW50UGhhc2U6Ok5vUGhhc2U7CisgICAgc3dpdGNoIChtb21lbnR1bSkg
eworICAgIGNhc2UgMDoKKyAgICAgICAgZXZlbnRQaGFzZSA9IFdoZWVsRXZlbnRQaGFzZTo6Tm9Q
aGFzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgICBldmVudFBoYXNlID0g
V2hlZWxFdmVudFBoYXNlOjpCZWdhbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAg
ICAgICBldmVudFBoYXNlID0gV2hlZWxFdmVudFBoYXNlOjpDaGFuZ2VkOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIDM6CisgICAgICAgIGV2ZW50UGhhc2UgPSBXaGVlbEV2ZW50UGhhc2U6OkVu
ZGVkOworICAgICAgICBicmVhazsKKyAgICB9CiAKLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91
c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKGludCB4LCBpbnQgeSwgaW50IC8q
cGhhc2UqLywgaW50IC8qbW9tZW50dW0qLykKLXsKLSAgICAvLyBHdGsrIGRvZXMgbm90IGhhdmUg
dGhlIGNvbmNlcHQgb2Ygd2hlZWwgZ2VzdHVyZSBwaGFzZXMgb3IgbW9tZW50dW0uIEp1c3QgcmVs
YXkgdG8KLSAgICAvLyB0aGUgbW91c2Ugd2hlZWwgaGFuZGxlci4KLSAgICBtb3VzZVNjcm9sbEJ5
KHgsIHkpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZVdoZWVsRXZlbnQodG9XZWJL
aXRHTGliQVBJKG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygp
KSwKKyAgICAgICAgaG9yaXpvbnRhbCwgdmVydGljYWwsIG1fcG9zaXRpb24ueCwgbV9wb3NpdGlv
bi55LCBldmVudFBoYXNlLCBldmVudE1vbWVudHVtUGhhc2UpOwogfQogCiB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCiB7Ci0gICAgaWYgKG1fZXZl
bnRRdWV1ZS5pc0VtcHR5KCkpCi0gICAgICAgIG1fZXZlbnRRdWV1ZS5hcHBlbmQoV1RSRXZlbnRR
dWV1ZUl0ZW0oKSk7Ci0KLSAgICBtX2V2ZW50UXVldWUubGFzdCgpLmRlbGF5ID0gbWlsbGlzZWNv
bmRzOwogICAgIG1fdGltZSArPSBtaWxsaXNlY29uZHMgLyAxMDAwLjA7CiB9CiAKLXZvaWQgdXBk
YXRlRXZlbnRDb29yZGluYXRlcyhHZGtFdmVudCogdG91Y2hFdmVudCwgaW50IHgsIGludCB5KQot
ewotICAgIHRvdWNoRXZlbnQtPnRvdWNoLnggPSB4OwotICAgIHRvdWNoRXZlbnQtPnRvdWNoLnkg
PSB5OwotCi0gICAgaW50IHhSb290LCB5Um9vdDsKLSAgICBnZGtfd2luZG93X2dldF9yb290X2Nv
b3Jkcyh0b3VjaEV2ZW50LT50b3VjaC53aW5kb3csIHgsIHksICZ4Um9vdCwgJnlSb290KTsKLSAg
ICB0b3VjaEV2ZW50LT50b3VjaC54X3Jvb3QgPSB4Um9vdDsKLSAgICB0b3VjaEV2ZW50LT50b3Vj
aC55X3Jvb3QgPSB5Um9vdDsKLX0KLQotR1VuaXF1ZVB0cjxHZGtFdmVudD4gRXZlbnRTZW5kZXJQ
cm94eTo6Y3JlYXRlVG91Y2hFdmVudChHZGtFdmVudFR5cGUgZXZlbnRUeXBlLCBpbnQgaWQpCi17
Ci0gICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gdG91Y2hFdmVudChnZGtfZXZlbnRfbmV3KGV2ZW50
VHlwZSkpOwotCi0gICAgdG91Y2hFdmVudC0+dG91Y2guc2VxdWVuY2UgPSBzdGF0aWNfY2FzdDxH
ZGtFdmVudFNlcXVlbmNlKj4oR0lOVF9UT19QT0lOVEVSKGlkKSk7Ci0gICAgdG91Y2hFdmVudC0+
dG91Y2gud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQobV90ZXN0Q29u
dHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpKTsKLSAgICBnX29iamVjdF9y
ZWYodG91Y2hFdmVudC0+dG91Y2gud2luZG93KTsKLSAgICBnZGtfZXZlbnRfc2V0X2RldmljZSh0
b3VjaEV2ZW50LmdldCgpLCBnZGtfc2VhdF9nZXRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGVm
YXVsdF9zZWF0KGdka193aW5kb3dfZ2V0X2Rpc3BsYXkodG91Y2hFdmVudC0+YnV0dG9uLndpbmRv
dykpKSk7Ci0gICAgdG91Y2hFdmVudC0+dG91Y2gudGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0K
LSAgICByZXR1cm4gdG91Y2hFdmVudDsKLX0KLQogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi12
b2lkIEV2ZW50U2VuZGVyUHJveHk6OmFkZFRvdWNoUG9pbnQoaW50IHgsIGludCB5KQordm9pZCBF
dmVudFNlbmRlclByb3h5OjphZGRUb3VjaFBvaW50KGludCwgaW50KQogewotICAgIC8vIFRvdWNo
IElEIGlzIGFycmF5IGluZGV4IHBsdXMgb25lLCBzbyAwIGlzIHNraXBwZWQuCi0gICAgR1VuaXF1
ZVB0cjxHZGtFdmVudD4gZXZlbnQgPSBjcmVhdGVUb3VjaEV2ZW50KHN0YXRpY19jYXN0PEdka0V2
ZW50VHlwZT4oR0RLX1RPVUNIX0JFR0lOKSwgbV90b3VjaEV2ZW50cy5zaXplKCkgKyAxKTsKLSAg
ICB1cGRhdGVFdmVudENvb3JkaW5hdGVzKGV2ZW50LmdldCgpLCB4LCB5KTsKLSAgICBtX3VwZGF0
ZWRUb3VjaEV2ZW50cy5hZGQoR1BPSU5URVJfVE9fSU5UKGV2ZW50LT50b3VjaC5zZXF1ZW5jZSkp
OwotICAgIG1fdG91Y2hFdmVudHMuYXBwZW5kKHN0ZDo6bW92ZShldmVudCkpOwogfQogCi12b2lk
IEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBpbnQgeCwgaW50
IHkpCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQoaW50LCBpbnQsIGlu
dCkKIHsKLSAgICBBU1NFUlQoaW5kZXggPj0gMCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4
KSA8IG1fdG91Y2hFdmVudHMuc2l6ZSgpKTsKLQotICAgIGNvbnN0IGF1dG8mIGV2ZW50ID0gbV90
b3VjaEV2ZW50c1tpbmRleF07Ci0gICAgQVNTRVJUKGV2ZW50KTsKLQotICAgIGV2ZW50LT50eXBl
ID0gR0RLX1RPVUNIX1VQREFURTsKLSAgICB1cGRhdGVFdmVudENvb3JkaW5hdGVzKGV2ZW50Lmdl
dCgpLCB4LCB5KTsKLSAgICBtX3VwZGF0ZWRUb3VjaEV2ZW50cy5hZGQoR1BPSU5URVJfVE9fSU5U
KGV2ZW50LT50b3VjaC5zZXF1ZW5jZSkpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNl
bmRVcGRhdGVkVG91Y2hFdmVudHMoKQotewotICAgIGZvciAoYXV0byBpZCA6IG1fdXBkYXRlZFRv
dWNoRXZlbnRzKQotICAgICAgICBzZW5kT3JRdWV1ZUV2ZW50KGdka19ldmVudF9jb3B5KG1fdG91
Y2hFdmVudHNbaWQgLSAxXS5nZXQoKSkpOwotCi0gICAgbV91cGRhdGVkVG91Y2hFdmVudHMuY2xl
YXIoKTsKIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaFN0YXJ0KCkKIHsKLSAgICBz
ZW5kVXBkYXRlZFRvdWNoRXZlbnRzKCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dG91
Y2hNb3ZlKCkKIHsKLSAgICBzZW5kVXBkYXRlZFRvdWNoRXZlbnRzKCk7CiB9CiAKIHZvaWQgRXZl
bnRTZW5kZXJQcm94eTo6dG91Y2hFbmQoKQogewotICAgIHNlbmRVcGRhdGVkVG91Y2hFdmVudHMo
KTsKIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaENhbmNlbCgpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpjbGVhclRvdWNoUG9p
bnRzKCkKIHsKLSAgICBtX3VwZGF0ZWRUb3VjaEV2ZW50cy5jbGVhcigpOwotICAgIG1fdG91Y2hF
dmVudHMuY2xlYXIoKTsKIH0KIAotdm9pZCBFdmVudFNlbmRlclByb3h5OjpyZWxlYXNlVG91Y2hQ
b2ludChpbnQgaW5kZXgpCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnJlbGVhc2VUb3VjaFBvaW50
KGludCkKIHsKLSAgICBBU1NFUlQoaW5kZXggPj0gMCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGlu
ZGV4KSA8IG1fdG91Y2hFdmVudHMuc2l6ZSgpKTsKLQotICAgIGNvbnN0IGF1dG8mIGV2ZW50ID0g
bV90b3VjaEV2ZW50c1tpbmRleF07Ci0gICAgZXZlbnQtPnR5cGUgPSBHREtfVE9VQ0hfRU5EOwot
ICAgIG1fdXBkYXRlZFRvdWNoRXZlbnRzLmFkZChHUE9JTlRFUl9UT19JTlQoZXZlbnQtPnRvdWNo
LnNlcXVlbmNlKSk7CiB9CiAKLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6Y2FuY2VsVG91Y2hQb2lu
dChpbnQgaW5kZXgpCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNhbmNlbFRvdWNoUG9pbnQoaW50
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6
c2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCit2b2lkIEV2ZW50
U2VuZGVyUHJveHk6OnNldFRvdWNoUG9pbnRSYWRpdXMoaW50LCBpbnQpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVy
KFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQordm9pZCBFdmVudFNlbmRl
clByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKFdLRXZlbnRNb2RpZmllcnMsIGJvb2wpCiB7Ci0gICAg
Z3VpbnQgc3RhdGUgPSB3ZWJraXRNb2RpZmllcnNUb0dES01vZGlmaWVycyhtb2RpZmllcik7Ci0K
LSAgICBmb3IgKGNvbnN0IGF1dG8mIGV2ZW50IDogbV90b3VjaEV2ZW50cykgewotICAgICAgICBp
ZiAoZXZlbnQtPnR5cGUgPT0gR0RLX1RPVUNIX0VORCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIGlmIChlbmFibGUpCi0gICAgICAgICAgICBldmVudC0+dG91Y2guc3RhdGUgfD0g
c3RhdGU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV2ZW50LT50b3VjaC5zdGF0ZSAmPSB+
KHN0YXRlKTsKLQotICAgICAgICBtX3VwZGF0ZWRUb3VjaEV2ZW50cy5hZGQoR1BPSU5URVJfVE9f
SU5UKGV2ZW50LT50b3VjaC5zZXF1ZW5jZSkpOwotICAgIH0KIH0KICNlbmRpZiAvLyBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400157</attachid>
            <date>2020-05-24 06:25:32 -0700</date>
            <delta_ts>2020-05-26 06:07:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wtr-no-gdk-events.diff</filename>
            <type>text/plain</type>
            <size>64189</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjYzA0MDU0NzBhMDguLmMzYjI3MjM0ZGNmMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBA
CisyMDIwLTA1LTI0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXVtXVFJdIEV2ZW50U2VuZGVyOiBzdG9wIHVzaW5nIEdka0V2ZW50IEFQ
SSBpbiBwcmVwYXJhdGlvbiBmb3IgR1RLNAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMjk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXBkYXRlIGV4cGVjdGF0aW9ucyBmb3IgdGVzdHMgdGhhdCBhcmUg
cGFzc2luZyBub3cuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9uczoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvZWRpdGluZy9zZWxlY3Rpb24vNTE5NTE2Ni0xLWV4cGVj
dGVkLnR4dDogUmVtb3ZlZC4KKwogMjAyMC0wNS0yMiAgSmFjayBMZWUgIDxzaGloY2hpZWhfbGVl
QGFwcGxlLmNvbT4KIAogICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiAoIXNfY3VycmVudCB8fCAm
bV92aWV3ICE9ICZzX2N1cnJlbnQtPm1fdmlldykgaW4gUmVuZGVyVHJlZUJ1aWxkZXI6OlJlbmRl
clRyZWVCdWlsZGVyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4
cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCmlu
ZGV4IGMzYTIzYjdiYmI5OS4uMGY0MDMyNzllZTYwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTQ4NSw4ICsxNDg1LDYgQEAgd2Via2l0Lm9yZy9iLzIx
MDkyNiBmYXN0L21lZGlhc3RyZWFtL2dldERpc3BsYXlNZWRpYS1tYXgtY29uc3RyYWludHMzLmh0
bWwgWyBTa2kKIAogd2Via2l0Lm9yZy9iLzE5OTIyNCBlZGl0aW5nL3Bhc3RlYm9hcmQvY29weS1w
YXN0ZS1hY3Jvc3Mtc2hhZG93LWJvdW5kYXJpZXMtd2l0aC1zdHlsZS0yLmh0bWwgWyBDcmFzaCBd
CiAKLXdlYmtpdC5vcmcvYi8yMTIwMTggZmFzdC9ldmVudHMvY29udGV4dC1hY3RpdmF0ZWQtYnkt
a2V5LWV2ZW50Lmh0bWwgWyBDcmFzaCBdCi0KIHdlYmtpdC5vcmcvYi8yMTIyMzIgZWRpdGluZy9h
c3luYy1jbGlwYm9hcmQvY2xpcGJvYXJkLXJlYWQtd2hpbGUtcGFzdGluZy5odG1sIFsgQ3Jhc2gg
XQogCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMzM4Niw3ICszMzg0LDYg
QEAgd2Via2l0Lm9yZy9iLzE1NzE3OSBmYXN0L2V2ZW50cy9kcmFnLWFuZC1kcm9wLWF1dG9zY3Jv
bGwtaW5uZXItZnJhbWUuaHRtbCBbIFRpbWUKIAogIyBXZWJLaXQyIHRlc3RSdW5uZXIuc2V0RWRp
dGluZ0JlaGF2aW91ciBhcHBlYXJzIGJyb2tlbiBzb21ldGltZXMuCiB3ZWJraXQub3JnL2IvMTQ0
NzY0IFsgUmVsZWFzZSBdIGVkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1t
YWMuaHRtbCBbIEZhaWx1cmUgXQotQnVnKEdUSykgZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWFm
dGVyLW1vdXNlLXNlbGVjdGlvbi5odG1sIFsgRmFpbHVyZSBdCiAKICMgV2ViS2l0MiBuZWVkcyB0
ZXh0SW5wdXRDb250cm9sbGVyLnNlbGVjdGVkUmFuZ2UKIEJ1ZyhHVEspIGVkaXRpbmcvc2VsZWN0
aW9uL21peGVkLWVkaXRhYmlsaXR5LTEwLmh0bWwgWyBGYWlsdXJlIF0KQEAgLTM0MjcsNyArMzQy
NCw2IEBAIEJ1ZyhHVEspIHBsYXRmb3JtL2d0ay9mYXN0L2V2ZW50cy9ldmVudC1zZW5kZXItbWV0
YWtleS5odG1sIFsgRmFpbHVyZSBdCiAKICMgVW5leHBsYWluZWQgZmFpbHVyZXMKIEJ1ZyhHVEsp
IGZhc3QvY3NzL2Rpc2FibGVkLWF1dGhvci1zdHlsZXMuaHRtbCBbIEZhaWx1cmUgXQotQnVnKEdU
SykgZmFzdC9ldmVudHMva2V5ZG93bi1udW1wYWQta2V5cy5odG1sIFsgRmFpbHVyZSBdCiBCdWco
R1RLKSBmYXN0L2V2ZW50cy9yZW1vdmUtdGFyZ2V0LXdpdGgtc2hhZG93LWluLWRyYWcuaHRtbCBb
IEZhaWx1cmUgXQogQnVnKEdUSykgZmFzdC9mb3Jtcy9saXN0Ym94LXR5cGVhaGVhZC1jeXJpbGxp
Yy5odG1sIFsgRmFpbHVyZSBdCiBCdWcoR1RLKSBmYXN0L2Zvcm1zL2xpc3Rib3gtdHlwZWFoZWFk
LWdyZWVrLmh0bWwgWyBGYWlsdXJlIF0KQEAgLTM1OTEsNyArMzU4Nyw2IEBAIHdlYmtpdC5vcmcv
Yi83NDI4MiBlZGl0aW5nL3Bhc3RlYm9hcmQvZW1hY3MtY3RybC1rLXdpdGgtbW92ZS5odG1sIFsg
RmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi84NDY3OSBjc3MzL3pvb20tY29vcmRzLnhodG1sIFsg
RmFpbHVyZSBdCiAKLXdlYmtpdC5vcmcvYi84NDY5NCBmYXN0L2V2ZW50cy9zZWxlY3RzdGFydC1i
eS1kb3VibGUtdHJpcGxlLWNsaWNrcy5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvODQ2
OTIgZmFzdC9ldmVudHMvYXR0ZW1wdC1zY3JvbGwtd2l0aC1uby1zY3JvbGxiYXJzLmh0bWwgWyBG
YWlsdXJlIF0KIAogIyBJbnRlcmZlcmVzIHdpdGggdGhlIHJBRiB0ZXN0cyB0aGF0IGFyZSBlbmFi
bGVkCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZWRpdGluZy9zZWxlY3Rp
b24vNTE5NTE2Ni0xLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9lZGl0
aW5nL3NlbGVjdGlvbi81MTk1MTY2LTEtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjMzIyMTExZWJiY2YuLjAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvZWRpdGluZy9zZWxlY3Rpb24vNTE5NTE2Ni0xLWV4cGVjdGVkLnR4dAorKysg
L2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotVGhpcyB0ZXN0cyBmb3IgYSBidWcgd2hlcmUgZXh0
ZW5kaW5nIGEgc2VsZWN0aW9uIGNyZWF0ZWQgd2l0aCB0aGUgbW91c2Ugd291bGQgYmxvdyBpdCBh
d2F5IGJlZm9yZSBleHRlbmRpbmcgaXQuCi0KLVRoZXJlIHNob3VsZCBiZSBzaXggY2hhcmFjdGVy
cyBzZWxlY3RlZCBpbiB0aGlzIHNlbnRlbmNlIG9uIE1hYyBhbmQgZm91ciBjaGFyYWN0ZXJzIHNl
bGVjdGVkIG9uIFdpbi9MaW51eC4KLVN1Y2Nlc3MKLUZhaWx1cmU6IFNlbGVjdGVkIHRleHQgd2Fz
ICJoZXJlIHNob3VsZCBiZSBzaXggY2hhcmFjdGVycyBzZWxlY3RlZCBpbiB0aGlzIHNlbnRlbmNl
IG9uIE1hYyBhbmQgZm91ciBjaGFyYWN0ZXJzIHNlbGVjdGVkIG9uIFdpbi9MaW51eC4iIGFuZCBz
aG91bGQgYmUgImhvdWxkIGJlICIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYWEwM2VjNjQxMWMuLmM2ZTI1YWRl
MDBjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA1LTI0ICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXVFJdIEV2
ZW50U2VuZGVyOiBzdG9wIHVzaW5nIEdka0V2ZW50IEFQSSBpbiBwcmVwYXJhdGlvbiBmb3IgR1RL
NAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMjk4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGhl
bHBlcnMgdG8gR3RrVXRpbGl0aWVzIHRvIGF2b2lkICNpZmRlZnMgZHVlIHRvIEdUSyB2ZXJzaW9u
IGRpZmZlcmVuY2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp3aWRnZXRSb290Q29vcmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OndpZGdldEtleXZhbFRvS2V5Y29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a1V0aWxp
dGllcy5oOgorCiAyMDIwLTA1LTIyICBKYWNrIExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29t
PgogCiAgICAgICAgIEFTU0VSVElPTiBGQUlMRUQ6ICghc19jdXJyZW50IHx8ICZtX3ZpZXcgIT0g
JnNfY3VycmVudC0+bV92aWV3KSBpbiBSZW5kZXJUcmVlQnVpbGRlcjo6UmVuZGVyVHJlZUJ1aWxk
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAKaW5kZXgg
YjQzNTFlZDVhZWNjLi5mYzE2MDE4ZWVlZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtVdGlsaXRpZXMuY3BwCkBAIC03Myw2ICs3MywzNiBAQCBib29sIHdpZGdldElzT25z
Y3JlZW5Ub3BsZXZlbFdpbmRvdyhHdGtXaWRnZXQqIHdpZGdldCkKICNlbmRpZiAvLyBVU0UoR1RL
NCkKIH0KIAorSW50UG9pbnQgd2lkZ2V0Um9vdENvb3JkcyhHdGtXaWRnZXQqIHdpZGdldCwgaW50
IHgsIGludCB5KQoreworI2lmIFVTRShHVEs0KQorICAgIHJldHVybiB7IHgsIHkgfTsKKyNlbHNl
CisgICAgaW50IHhSb290LCB5Um9vdDsKKyAgICBnZGtfd2luZG93X2dldF9yb290X2Nvb3Jkcyhn
dGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3QpOworICAg
IHJldHVybiB7IHhSb290LCB5Um9vdCB9OworI2VuZGlmCit9CisKK3Vuc2lnbmVkIHdpZGdldEtl
eXZhbFRvS2V5Y29kZShHdGtXaWRnZXQqIHdpZGdldCwgdW5zaWduZWQga2V5dmFsKQoreworICAg
IHVuc2lnbmVkIGtleWNvZGUgPSAwOworICAgIEdVbmlxdWVPdXRQdHI8R2RrS2V5bWFwS2V5PiBr
ZXlzOworICAgIGludCBrZXlzQ291bnQ7CisgICAgYXV0byogZGlzcGxheSA9IGd0a193aWRnZXRf
Z2V0X2Rpc3BsYXkod2lkZ2V0KTsKKworI2lmIFVTRShHVEs0KQorICAgIGlmIChnZGtfZGlzcGxh
eV9tYXBfa2V5dmFsKGRpc3BsYXksIGtleXZhbCwgJmtleXMub3V0UHRyKCksICZrZXlzQ291bnQp
ICYmIGtleXNDb3VudCkKKyAgICAgICAga2V5Y29kZSA9IGtleXMuZ2V0KClbMF0ua2V5Y29kZTsK
KyNlbHNlCisgICAgR2RrS2V5bWFwKiBrZXltYXAgPSBnZGtfa2V5bWFwX2dldF9mb3JfZGlzcGxh
eShkaXNwbGF5KTsKKyAgICBpZiAoZ2RrX2tleW1hcF9nZXRfZW50cmllc19mb3Jfa2V5dmFsKGtl
eW1hcCwga2V5dmFsLCAma2V5cy5vdXRQdHIoKSwgJmtleXNDb3VudCkgJiYga2V5c0NvdW50KQor
ICAgICAgICBrZXljb2RlID0ga2V5cy5nZXQoKVswXS5rZXljb2RlOworI2VuZGlmCisKKyAgICBy
ZXR1cm4ga2V5Y29kZTsKK30KKwogdGVtcGxhdGU8PgogV2FsbFRpbWUgd2FsbFRpbWVGb3JFdmVu
dChjb25zdCBHZGtFdmVudCogZXZlbnQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrVXRpbGl0aWVzLmgKaW5kZXggNWY1YTVmYjcxNTIxLi41NzQ1MGYzZDI5ZTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmgKQEAgLTMxLDYgKzMxLDggQEAg
Y2xhc3MgSW50UG9pbnQ7CiAKIEludFBvaW50IGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9p
bnQoR3RrV2lkZ2V0KiwgY29uc3QgSW50UG9pbnQmKTsKIGJvb2wgd2lkZ2V0SXNPbnNjcmVlblRv
cGxldmVsV2luZG93KEd0a1dpZGdldCopOworSW50UG9pbnQgd2lkZ2V0Um9vdENvb3JkcyhHdGtX
aWRnZXQqLCBpbnQsIGludCk7Cit1bnNpZ25lZCB3aWRnZXRLZXl2YWxUb0tleWNvZGUoR3RrV2lk
Z2V0KiwgdW5zaWduZWQpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBHZGtFdmVudFR5cGU+CiBXYWxs
VGltZSB3YWxsVGltZUZvckV2ZW50KGNvbnN0IEdka0V2ZW50VHlwZSogZXZlbnQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGU2MDU2YmZjYzg0NC4uMjJiY2M3YzhkYmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBA
CisyMDIwLTA1LTI0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXVtXVFJdIEV2ZW50U2VuZGVyOiBzdG9wIHVzaW5nIEdka0V2ZW50IEFQ
SSBpbiBwcmVwYXJhdGlvbiBmb3IgR1RLNAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMjk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGludGVybmFsIEFQSSB0byBXZWJLaXRXZWJWaWV3QmFzZSB0
byBzeW50aGVzaXplIGV2ZW50cywgYmVjYXVzZSB3aXRoIEdUSzQgaXQncyBub3QgcG9zc2libGUg
dG8KKyAgICAgICAgY3JlYXRlIGV2ZW50cy4gSW4gdGhlIGNhc2Ugb2YgbGF5b3V0IHRlc3RzLCB0
aGUgd2ViIHZpZXcgaXMgYWx3YXlzIHRoZSB0YXJnZXQgb2YgdGhlIGV2ZW50cywgc28gd2UgZG9u
J3QgcmVhbGx5CisgICAgICAgIG5lZWQgdG8gc2VuZCB0aGUgZXZlbnRzIHRvIEdUSyB0byBwcm9j
ZXNzIHRoZW0uCisKKyAgICAgICAgKiBTaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oOiBB
ZGQgbmV3IGNvbnN0cnVjdG9yIHRoYXQgZG9lc24ndCByZWNlaXZlIGEgR2RrRXZlbnQuCisgICAg
ICAgICogU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaDogRGl0dG8uCisgICAgICAgICogU2hh
cmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaDogRGl0dG8uCisgICAgICAgICogU2hhcmVkL2d0ay9O
YXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCk6IENyZWF0ZSB3aXRob3V0IGEg
R2RrRXZlbnQuCisgICAgICAgICogU2hhcmVkL2d0ay9OYXRpdmVXZWJNb3VzZUV2ZW50R3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TmF0aXZlV2ViTW91c2VFdmVudDo6TmF0aXZlV2ViTW91c2VF
dmVudCk6IERpdHRvLgorICAgICAgICAqIFNoYXJlZC9ndGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0
ay5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldo
ZWVsRXZlbnQpOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aEtleUV2
ZW50KTogUmV0dXJuIGVhcmx5IGlmIGV2ZW50IGRvZXNuJ3QgaGF2ZSBhIEdka0V2ZW50LgorICAg
ICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3VjaEV2ZW50KTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aGVlbEV2ZW50V2FzTm90SGFuZGxl
ZEJ5V2ViQ29yZSk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHRvV2ViS2l0TW9kaWZpZXJzKToKKyAgICAgICAgKHdl
YmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZU1vdXNlRXZlbnQpOgorICAgICAgICAod2Via2l0V2Vi
Vmlld0Jhc2VTeW50aGVzaXplS2V5RXZlbnQpOgorICAgICAgICAodG9XZWJLaXRXaGVlbEV2ZW50
UGhhc2UpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplV2hlZWxFdmVudCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VJbnRlcm5hbC5o
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6YWN0aXZlUG9wdXBNZW51IGNvbnN0KTogUmV0dXJuIHRoZSBh
Y3RpdmUgcG9wdXAgbWVudSBwcm94eS4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0tleUJpbmRp
bmdUcmFuc2xhdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6aGFuZGxlS2V5QmluZGluZ3NGb3JN
YXApOiBNYWtlIGl0IGdlbmVyaWMgYnkgcmVjZWl2aW5nIHRoZSBtYXAgYXMgcGFyYW1ldGVyLgor
ICAgICAgICAoV2ViS2l0OjpoYW5kbGVDdXN0b21LZXlCaW5kaW5ncyk6IENhbGwgaGFuZGxlS2V5
QmluZGluZ3NGb3JNYXAoKSBwYXNzaW5nIHRoZSBjdXN0b20ga2V5IGJpbmRpbmdzIG1hcC4KKyAg
ICAgICAgKFdlYktpdDo6S2V5QmluZGluZ1RyYW5zbGF0b3I6OmNvbW1hbmRzRm9yS2V5dmFsKTog
R2V0IGNvbW1hbmRzIGZvciB0aGUgcHJlZGVmaW5lZCBrZXkgYmluZGluZ3MuIFRoaXMgaXMgdXNl
ZAorICAgICAgICBvbmx5IHdoZW4gc3ludGhlc2l6aW5nIGtleSBldmVudHMgc2luY2Ugd2UgZG9u
J3QgaGF2ZSBhIEdka0VWZW50IHRvIGZvcndhcmQgdG8gdGhlIEd0a1RleHRWaWV3LgorICAgICAg
ICAqIFVJUHJvY2Vzcy9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0Ojpw
b3B1cE1lbnVXaWRnZXQpOiBUYWtlIGEgcmVmIG9mIHRoZSBHZGtXaW5kb3cgd2hlbiBjcmVhdGlu
ZyB0aGUgR2RrRXZlbnQsIHNpbmNlIHRoZSBldmVudCB3aWxsIHVucmVmIGl0CisgICAgICAgIG9u
IGRlc3Ryb3kuCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5R3RrOjpoYW5kbGVLZXlQcmVz
cyk6IEhhbmRsZSBhIGtleSBwcmVzcyBldmVudCBmcm9tIGl0cyBrZXl2YWwgYW5kIHRpbWVzdGFt
cC4KKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlHdGs6OmFjdGl2YXRlU2VsZWN0
ZWRJdGVtKTogQWN0aXZhdGUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtLgorICAgICAgICAo
V2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0azo6a2V5UHJlc3NFdmVudENhbGxiYWNrKTogQ2Fs
bCBoYW5kbGVLZXlQcmVzcygpLgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0
azo6dHlwZUFoZWFkRmluZEluZGV4KTogUmVjZWl2ZSBhIGtleXZhbCBhbmQgdGltZXN0YW1wIGlu
c3RlYWQgb2YgYSBHZGtFdmVudC4KKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlH
dGs6OnR5cGVBaGVhZEZpbmQpOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBv
cHVwTWVudVByb3h5R3RrLmg6CisKIDIwMjAtMDUtMjIgIEphbWVzIFNhdmFnZSAgPGphbWVzLnNh
dmFnZUBhcHBsZS5jb20+CiAKICAgICAgICAgQ3JlYXRlIFN3aWZ0IG92ZXJsYXkgZm9yIFdlYktp
dCBmcmFtZXdvcmsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYktl
eWJvYXJkRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZl
bnQuaAppbmRleCAyNGQ1NGU4YzIxZjcuLmUxYjJhYjQzZTE0MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaApAQCAtNzUsNiArNzUsNyBAQCBwdWJs
aWM6CiAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50Jik7CiAgICAgZW51bSBjbGFzcyBIYW5kbGVkQnlJbnB1dE1ldGhvZCA6IGJvb2wgeyBObywg
WWVzIH07CiAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudCosIGNvbnN0IFN0cmlu
ZyYsIEhhbmRsZWRCeUlucHV0TWV0aG9kLCBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6Q29tcG9z
aXRpb25VbmRlcmxpbmU+PiYmLCBPcHRpb25hbDxFZGl0aW5nUmFuZ2U+JiYsIFZlY3RvcjxTdHJp
bmc+JiYgY29tbWFuZHMpOworICAgIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoVHlwZSwgY29uc3Qg
U3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25z
dCBTdHJpbmcmIGtleUlkZW50aWZpZXIsIGludCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIGludCBu
YXRpdmVWaXJ0dWFsS2V5Q29kZSwgVmVjdG9yPFN0cmluZz4mJiBjb21tYW5kcywgYm9vbCBpc0tl
eXBhZCwgT3B0aW9uU2V0PE1vZGlmaWVyPik7CiAjZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKQog
ICAgIGVudW0gY2xhc3MgSGFuZGxlZEJ5SW5wdXRNZXRob2QgOiBib29sIHsgTm8sIFllcyB9Owog
ICAgIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoOjpXZWJFdmVudCAqLCBIYW5kbGVkQnlJbnB1dE1l
dGhvZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2
ZW50LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmgKaW5kZXgg
MzVmZGZiYjMwOTdhLi5jNmE1OTVhMjVlOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRp
dmVXZWJNb3VzZUV2ZW50LmgKQEAgLTY2LDYgKzY2LDcgQEAgcHVibGljOgogICAgIE5hdGl2ZVdl
Yk1vdXNlRXZlbnQoY29uc3QgTmF0aXZlV2ViTW91c2VFdmVudCYpOwogICAgIE5hdGl2ZVdlYk1v
dXNlRXZlbnQoR2RrRXZlbnQqLCBpbnQsIE9wdGlvbmFsPFdlYkNvcmU6OkludFBvaW50Pik7CiAg
ICAgTmF0aXZlV2ViTW91c2VFdmVudChHZGtFdmVudCosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiwgaW50LCBPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4pOworICAgIE5hdGl2ZVdlYk1vdXNl
RXZlbnQoVHlwZSwgQnV0dG9uLCB1bnNpZ25lZCBzaG9ydCBidXR0b25zLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3Np
dGlvbiwgaW50IGNsaWNrQ291bnQsIE9wdGlvblNldDxNb2RpZmllcj4gbW9kaWZpZXJzKTsKICAg
ICBleHBsaWNpdCBOYXRpdmVXZWJNb3VzZUV2ZW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7
CiAjZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIE5hdGl2ZVdlYk1vdXNlRXZlbnQoOjpX
ZWJFdmVudCAqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYldo
ZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaApp
bmRleCBhNWRiOGI3NDYxNzcuLmVhYzc2NjlkMDgwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L05hdGl2ZVdlYldoZWVsRXZlbnQuaApAQCAtNjEsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgTmF0
aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCopOwogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoR2Rr
RXZlbnQqLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhhc2UgbW9tZW50
dW1QaGFzZSk7CiAgICAgTmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCosIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50Jik7CisgICAgTmF0aXZlV2ViV2hlZWxFdmVudChjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlv
biwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiB3aGVlbFRpY2tzLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhh
c2UgbW9tZW50dW1QaGFzZSk7CiAjZWxpZiBVU0UoTElCV1BFKQogICAgIE5hdGl2ZVdlYldoZWVs
RXZlbnQoc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IsIFdlYldoZWVsRXZlbnQ6OlBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBo
YXNlKTsKICNlbGlmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcAppbmRleCA4YzBkZjQyODJmZDUu
LmM2ZGVhOTk5ODdkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL05hdGl2
ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9O
YXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcApAQCAtMzksOSArMzksMTQgQEAgTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudCogZXZlbnQsIGNv
bnN0IFN0cmluZyYgdGUKIHsKIH0KIAorTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudChUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyLCBp
bnQgd2luZG93c1ZpcnR1YWxLZXlDb2RlLCBpbnQgbmF0aXZlVmlydHVhbEtleUNvZGUsIFZlY3Rv
cjxTdHJpbmc+JiYgY29tbWFuZHMsIGJvb2wgaXNLZXlwYWQsIE9wdGlvblNldDxNb2RpZmllcj4g
bW9kaWZpZXJzKQorICAgIDogV2ViS2V5Ym9hcmRFdmVudCh0eXBlLCB0ZXh0LCBrZXksIGNvZGUs
IGtleUlkZW50aWZpZXIsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgbmF0aXZlVmlydHVhbEtleUNv
ZGUsIGZhbHNlLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgV1RGTW92ZShjb21tYW5kcyks
IGlzS2V5cGFkLCBtb2RpZmllcnMsIFdhbGxUaW1lOjpub3coKSkKK3sKK30KKwogTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBOYXRpdmVXZWJLZXli
b2FyZEV2ZW50JiBldmVudCkKLSAgICA6IFdlYktleWJvYXJkRXZlbnQoV2ViRXZlbnRGYWN0b3J5
OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KGV2ZW50Lm5hdGl2ZUV2ZW50KCksIGV2ZW50LnRleHQo
KSwgZXZlbnQuaGFuZGxlZEJ5SW5wdXRNZXRob2QoKSwgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6
OkNvbXBvc2l0aW9uVW5kZXJsaW5lPj4oZXZlbnQucHJlZWRpdFVuZGVybGluZXMoKSksIE9wdGlv
bmFsPEVkaXRpbmdSYW5nZT4oZXZlbnQucHJlZWRpdFNlbGVjdGlvblJhbmdlKCkpLCBWZWN0b3I8
U3RyaW5nPihldmVudC5jb21tYW5kcygpKSkpCi0gICAgLCBtX25hdGl2ZUV2ZW50KGdka19ldmVu
dF9jb3B5KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpKQorICAgIDogV2ViS2V5Ym9hcmRFdmVudChldmVu
dC50eXBlKCksIGV2ZW50LnRleHQoKSwgZXZlbnQua2V5KCksIGV2ZW50LmNvZGUoKSwgZXZlbnQu
a2V5SWRlbnRpZmllcigpLCBldmVudC53aW5kb3dzVmlydHVhbEtleUNvZGUoKSwgZXZlbnQubmF0
aXZlVmlydHVhbEtleUNvZGUoKSwgZXZlbnQuaGFuZGxlZEJ5SW5wdXRNZXRob2QoKSwgT3B0aW9u
YWw8VmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPj4oZXZlbnQucHJlZWRpdFVu
ZGVybGluZXMoKSksIE9wdGlvbmFsPEVkaXRpbmdSYW5nZT4oZXZlbnQucHJlZWRpdFNlbGVjdGlv
blJhbmdlKCkpLCBWZWN0b3I8U3RyaW5nPihldmVudC5jb21tYW5kcygpKSwgZXZlbnQuaXNLZXlw
YWQoKSwgZXZlbnQubW9kaWZpZXJzKCksIGV2ZW50LnRpbWVzdGFtcCgpKQorICAgICwgbV9uYXRp
dmVFdmVudChldmVudC5uYXRpdmVFdmVudCgpID8gZ2RrX2V2ZW50X2NvcHkoZXZlbnQubmF0aXZl
RXZlbnQoKSkgOiBudWxscHRyKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9ndGsvTmF0aXZlV2ViTW91c2VFdmVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9ndGsvTmF0aXZlV2ViTW91c2VFdmVudEd0ay5jcHAKaW5kZXggN2FjZDk0YmVjNjAxLi43Zjgy
NDk4NGEwNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9OYXRpdmVXZWJN
b3VzZUV2ZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsvTmF0aXZlV2Vi
TW91c2VFdmVudEd0ay5jcHAKQEAgLTQ4LDggKzQ4LDEzIEBAIE5hdGl2ZVdlYk1vdXNlRXZlbnQ6
Ok5hdGl2ZVdlYk1vdXNlRXZlbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uKQog
ewogfQogCitOYXRpdmVXZWJNb3VzZUV2ZW50OjpOYXRpdmVXZWJNb3VzZUV2ZW50KFR5cGUgdHlw
ZSwgQnV0dG9uIGJ1dHRvbiwgdW5zaWduZWQgc2hvcnQgYnV0dG9ucywgY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRp
b24sIGludCBjbGlja0NvdW50LCBPcHRpb25TZXQ8TW9kaWZpZXI+IG1vZGlmaWVycykKKyAgICA6
IFdlYk1vdXNlRXZlbnQodHlwZSwgYnV0dG9uLCBidXR0b25zLCBwb3NpdGlvbiwgZ2xvYmFsUG9z
aXRpb24sIDAsIDAsIDAsIGNsaWNrQ291bnQsIG1vZGlmaWVycywgV2FsbFRpbWU6Om5vdygpKQor
eworfQorCiBOYXRpdmVXZWJNb3VzZUV2ZW50OjpOYXRpdmVXZWJNb3VzZUV2ZW50KGNvbnN0IE5h
dGl2ZVdlYk1vdXNlRXZlbnQmIGV2ZW50KQotICAgIDogV2ViTW91c2VFdmVudChXZWJFdmVudEZh
Y3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoZXZlbnQubmF0aXZlRXZlbnQoKSwgZXZlbnQucG9z
aXRpb24oKSwgZXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgZXZlbnQuY2xpY2tDb3VudCgpLCBXZWJD
b3JlOjpJbnRQb2ludChldmVudC5kZWx0YVgoKSwgZXZlbnQuZGVsdGFZKCkpKSkKKyAgICA6IFdl
Yk1vdXNlRXZlbnQoZXZlbnQudHlwZSgpLCBldmVudC5idXR0b24oKSwgZXZlbnQuYnV0dG9ucygp
LCBldmVudC5wb3NpdGlvbigpLCBldmVudC5nbG9iYWxQb3NpdGlvbigpLCBldmVudC5kZWx0YVgo
KSwgZXZlbnQuZGVsdGFZKCksIGV2ZW50LmRlbHRhWigpLCBldmVudC5jbGlja0NvdW50KCksIGV2
ZW50Lm1vZGlmaWVycygpLCBldmVudC50aW1lc3RhbXAoKSkKICAgICAsIG1fbmF0aXZlRXZlbnQo
ZXZlbnQubmF0aXZlRXZlbnQoKSA/IGdka19ldmVudF9jb3B5KGNvbnN0X2Nhc3Q8R2RrRXZlbnQq
PihldmVudC5uYXRpdmVFdmVudCgpKSkgOiBudWxscHRyKQogewogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwCmluZGV4IGIyZjcw
MTAwNmFkMC4uM2I2MDU5NmQ1NWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9n
dGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
Z3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwCkBAIC00OSw5ICs0OSwxNCBAQCBOYXRpdmVX
ZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiBldmVudCwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbgogewogfQogCitOYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJX
aGVlbEV2ZW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGRl
bHRhLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHdoZWVsVGlja3MsIFdlYldoZWVsRXZlbnQ6
OlBoYXNlIHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNlKQorICAgIDog
V2ViV2hlZWxFdmVudChXZWJFdmVudDo6V2hlZWwsIHBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwg
ZGVsdGEsIHdoZWVsVGlja3MsIHBoYXNlLCBtb21lbnR1bVBoYXNlLCBXZWJXaGVlbEV2ZW50OjpT
Y3JvbGxCeVBpeGVsV2hlZWxFdmVudCwgeyB9LCBXYWxsVGltZTo6bm93KCkpCit7Cit9CisKIE5h
dGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hl
ZWxFdmVudCYgZXZlbnQpCi0gICAgOiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3Jl
YXRlV2ViV2hlZWxFdmVudChldmVudC5uYXRpdmVFdmVudCgpLCBldmVudC5wb3NpdGlvbigpLCBl
dmVudC5nbG9iYWxQb3NpdGlvbigpLCBldmVudC5waGFzZSgpLCBldmVudC5tb21lbnR1bVBoYXNl
KCkpKQotICAgICwgbV9uYXRpdmVFdmVudChnZGtfZXZlbnRfY29weShldmVudC5uYXRpdmVFdmVu
dCgpKSkKKyAgICA6IFdlYldoZWVsRXZlbnQoZXZlbnQudHlwZSgpLCBldmVudC5wb3NpdGlvbigp
LCBldmVudC5nbG9iYWxQb3NpdGlvbigpLCBldmVudC5kZWx0YSgpLCBldmVudC53aGVlbFRpY2tz
KCksIGV2ZW50LnBoYXNlKCksIGV2ZW50Lm1vbWVudHVtUGhhc2UoKSwgZXZlbnQuZ3JhbnVsYXJp
dHkoKSwgZXZlbnQubW9kaWZpZXJzKCksIGV2ZW50LnRpbWVzdGFtcCgpKQorICAgICwgbV9uYXRp
dmVFdmVudChldmVudC5uYXRpdmVFdmVudCgpID8gZ2RrX2V2ZW50X2NvcHkoZXZlbnQubmF0aXZl
RXZlbnQoKSkgOiBudWxscHRyKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IDNiOTNjMjM4MTU3ZC4uYmRmNTU1
Y2U2Y2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VD
bGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VD
bGllbnRJbXBsLmNwcApAQCAtMjM5LDcgKzIzOSw3IEBAIFdlYkNvcmU6OkludFJlY3QgUGFnZUNs
aWVudEltcGw6OnJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNvbnN0IFdlYkNvcmU6Oklu
CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudCYgZXZlbnQsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKQogewotICAgIGlmICh3
YXNFdmVudEhhbmRsZWQgfHwgZXZlbnQudHlwZSgpICE9IFdlYkV2ZW50OjpUeXBlOjpLZXlEb3du
KQorICAgIGlmICh3YXNFdmVudEhhbmRsZWQgfHwgZXZlbnQudHlwZSgpICE9IFdlYkV2ZW50OjpU
eXBlOjpLZXlEb3duIHx8ICFldmVudC5uYXRpdmVFdmVudCgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJ
RVdfQkFTRShtX3ZpZXdXaWRnZXQpOwpAQCAtNDExLDYgKzQxMSw4IEBAIHZvaWQgUGFnZUNsaWVu
dEltcGw6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiBldmVu
dCwgYm9vbCB3CiB7CiAjaWYgIVVTRShHVEs0KQogICAgIGNvbnN0IEdka0V2ZW50KiB0b3VjaEV2
ZW50ID0gZXZlbnQubmF0aXZlRXZlbnQoKTsKKyAgICBpZiAoIXRvdWNoRXZlbnQpCisgICAgICAg
IHJldHVybjsKIAogICAgIEdlc3R1cmVDb250cm9sbGVyJiBnZXN0dXJlQ29udHJvbGxlciA9IHdl
YmtpdFdlYlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV92
aWV3V2lkZ2V0KSk7CiAgICAgaWYgKHdhc0V2ZW50SGFuZGxlZCkgewpAQCAtNDcxLDYgKzQ3Myw5
IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVX
ZWJUb3VjaEV2ZW50JiBldmVudCwgYm9vbCB3CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OndoZWVs
RXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmIGV2
ZW50KQogeworICAgIGlmICghZXZlbnQubmF0aXZlRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAjaWYgIVVTRShHVEs0KQogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciogY29udHJvbGxlciA9
IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKFdFQktJVF9XRUJfVklFV19C
QVNFKG1fdmlld1dpZGdldCkpOwogICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXItPmlz
U3dpcGVHZXN0dXJlRW5hYmxlZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IGZkN2VlOTY5NGU4ZC4uMzNl
ZGNjYTkwYWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtNDgsOSArNDgsMTEgQEAKICNpbmNsdWRlICJXZWJL
aXRFbW9qaUNob29zZXIuaCIKICNpbmNsdWRlICJXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRJbXBs
R3RrLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0FjY2Vzc2libGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRXZWJWaWV3QmFzZUludGVybmFsLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCisjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlHdGsuaCIKICNpbmNsdWRlICJXZWJQ
cmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAjaW5jbHVkZSAiV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaCIKQEAgLTYxLDYgKzYzLDcgQEAKICNpbmNsdWRl
IDxXZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVu
dGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybURpc3BsYXkuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRy
Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lvbi5oPgogI2luY2x1ZGUgPGdkay9nZGsu
aD4KQEAgLTIyNzUsMyArMjI3OCwxNzggQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNp
emVDb21wb3NpdGlvbktleVByZXNzKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmEKICAgICBw
cml2LT5wYWdlUHJveHktPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dChldmVudCwgdGV4dCwgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6SGFuZGxlZEJ5SW5wdXRNZXRo
b2Q6OlllcywgV1RGTW92ZSh1bmRlcmxpbmVzKSwgV1RGTW92ZShzZWxlY3Rpb25SYW5nZSksIHsg
fSkpOwogI2VuZGlmCiB9CisKK3N0YXRpYyBpbmxpbmUgT3B0aW9uU2V0PFdlYkV2ZW50OjpNb2Rp
Zmllcj4gdG9XZWJLaXRNb2RpZmllcnModW5zaWduZWQgbW9kaWZpZXJzKQoreworICAgIE9wdGlv
blNldDxXZWJFdmVudDo6TW9kaWZpZXI+IHdlYkV2ZW50TW9kaWZpZXJzOworICAgIGlmIChtb2Rp
ZmllcnMgJiBHREtfQ09OVFJPTF9NQVNLKQorICAgICAgICB3ZWJFdmVudE1vZGlmaWVycy5hZGQo
V2ViRXZlbnQ6Ok1vZGlmaWVyOjpDb250cm9sS2V5KTsKKyAgICBpZiAobW9kaWZpZXJzICYgR0RL
X1NISUZUX01BU0spCisgICAgICAgIHdlYkV2ZW50TW9kaWZpZXJzLmFkZChXZWJFdmVudDo6TW9k
aWZpZXI6OlNoaWZ0S2V5KTsKKyAgICBpZiAobW9kaWZpZXJzICYgR0RLX01PRDFfTUFTSykKKyAg
ICAgICAgd2ViRXZlbnRNb2RpZmllcnMuYWRkKFdlYkV2ZW50OjpNb2RpZmllcjo6QWx0S2V5KTsK
KyAgICBpZiAobW9kaWZpZXJzICYgR0RLX01FVEFfTUFTSykKKyAgICAgICAgd2ViRXZlbnRNb2Rp
ZmllcnMuYWRkKFdlYkV2ZW50OjpNb2RpZmllcjo6TWV0YUtleSk7CisgICAgaWYgKFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudDo6bW9kaWZpZXJzQ29udGFpbkNhcHNMb2NrKG1vZGlmaWVycykpCisgICAg
ICAgIHdlYkV2ZW50TW9kaWZpZXJzLmFkZChXZWJFdmVudDo6TW9kaWZpZXI6OkNhcHNMb2NrS2V5
KTsKKyAgICByZXR1cm4gd2ViRXZlbnRNb2RpZmllcnM7Cit9CisKK3ZvaWQgd2Via2l0V2ViVmll
d0Jhc2VTeW50aGVzaXplTW91c2VFdmVudChXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2Us
IE1vdXNlRXZlbnRUeXBlIHR5cGUsIHVuc2lnbmVkIGJ1dHRvbiwgdW5zaWduZWQgc2hvcnQgYnV0
dG9ucywgaW50IHgsIGludCB5LCB1bnNpZ25lZCBtb2RpZmllcnMsIGludCBjbGlja0NvdW50KQor
eworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2
OworICAgIGlmIChwcml2LT5kaWFsb2cpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYk1vdXNl
RXZlbnQ6OkJ1dHRvbiB3ZWJFdmVudEJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOwor
ICAgIHN3aXRjaCAoYnV0dG9uKSB7CisgICAgY2FzZSAwOgorICAgICAgICB3ZWJFdmVudEJ1dHRv
biA9IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6
CisgICAgICAgIHdlYkV2ZW50QnV0dG9uID0gV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICB3ZWJFdmVudEJ1dHRvbiA9IFdlYk1v
dXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAg
ICAgICB3ZWJFdmVudEJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBXZWJFdmVudDo6VHlwZSB3ZWJFdmVudFR5cGU7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBNb3VzZUV2ZW50VHlwZTo6UHJlc3M6CisgICAgICAg
IHdlYkV2ZW50VHlwZSA9IFdlYkV2ZW50OjpNb3VzZURvd247CisgICAgICAgIHByaXYtPmlucHV0
TWV0aG9kRmlsdGVyLmNhbmNlbENvbXBvc2l0aW9uKCk7CisgICAgICAgIGd0a193aWRnZXRfZ3Jh
Yl9mb2N1cyhHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTW91c2VFdmVudFR5cGU6OlJlbGVhc2U6CisgICAgICAgIHdlYkV2ZW50VHlwZSA9IFdlYkV2
ZW50OjpNb3VzZVVwOworICAgICAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVCh3
ZWJWaWV3QmFzZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1vdXNlRXZlbnRUeXBlOjpN
b3Rpb246CisgICAgICAgIC8vIEZJWE1FOiBhZGQgbW92ZW1lbnQgZGVsdGEgZm9yIHBvaW50ZXIg
bG9jay4KKyAgICAgICAgd2ViRXZlbnRUeXBlID0gV2ViRXZlbnQ6Ok1vdXNlTW92ZTsKKyAgICAg
ICAgaWYgKGJ1dHRvbnMgJiBHREtfQlVUVE9OMV9NQVNLKQorICAgICAgICAgICAgd2ViRXZlbnRC
dXR0b24gPSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOworICAgICAgICBlbHNlIGlmIChidXR0
b25zICYgR0RLX0JVVFRPTjJfTUFTSykKKyAgICAgICAgICAgIHdlYkV2ZW50QnV0dG9uID0gV2Vi
TW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOworICAgICAgICBlbHNlIGlmIChidXR0b25zICYgR0RL
X0JVVFRPTjNfTUFTSykKKyAgICAgICAgICAgIHdlYkV2ZW50QnV0dG9uID0gV2ViTW91c2VFdmVu
dDo6UmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHVuc2lnbmVkIHNo
b3J0IHdlYkV2ZW50QnV0dG9ucyA9IDA7CisgICAgaWYgKGJ1dHRvbnMgJiBHREtfQlVUVE9OMV9N
QVNLKQorICAgICAgICB3ZWJFdmVudEJ1dHRvbnMgfD0gMTsKKyAgICBpZiAoYnV0dG9ucyAmIEdE
S19CVVRUT04yX01BU0spCisgICAgICAgIHdlYkV2ZW50QnV0dG9ucyB8PSA0OworICAgIGlmIChi
dXR0b25zICYgR0RLX0JVVFRPTjNfTUFTSykKKyAgICAgICAgd2ViRXZlbnRCdXR0b25zIHw9IDI7
CisKKyAgICBwcml2LT5wYWdlUHJveHktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VF
dmVudCh3ZWJFdmVudFR5cGUsIHdlYkV2ZW50QnV0dG9uLCB3ZWJFdmVudEJ1dHRvbnMsIHsgeCwg
eSB9LAorICAgICAgICB3aWRnZXRSb290Q29vcmRzKEdUS19XSURHRVQod2ViVmlld0Jhc2UpLCB4
LCB5KSwgY2xpY2tDb3VudCwgdG9XZWJLaXRNb2RpZmllcnMobW9kaWZpZXJzKSkpOworfQorCit2
b2lkIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZUtleUV2ZW50KFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJWaWV3QmFzZSwgdW5zaWduZWQga2V5dmFsLCB1bnNpZ25lZCBtb2RpZmllcnMpCit7Cisg
ICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7Cisg
ICAgaWYgKHByaXYtPmRpYWxvZykKKyAgICAgICAgcmV0dXJuOworCisjaWYgIVVTRShHVEs0KQor
ICAgIGlmIChhdXRvKiBwb3B1cE1lbnUgPSBwcml2LT5wYWdlUHJveHktPmFjdGl2ZVBvcHVwTWVu
dSgpKSB7CisgICAgICAgIGF1dG8qIGd0a1BvcHVwTWVudSA9IHN0YXRpY19jYXN0PFdlYlBvcHVw
TWVudVByb3h5R3RrKj4ocG9wdXBNZW51KTsKKyAgICAgICAgaWYgKGd0a1BvcHVwTWVudS0+aGFu
ZGxlS2V5UHJlc3Moa2V5dmFsLCBHREtfQ1VSUkVOVF9USU1FKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBpZiAoa2V5dmFsID09IEdES19LRVlfUmV0dXJuKSB7CisgICAgICAgICAg
ICBndGtQb3B1cE1lbnUtPmFjdGl2YXRlU2VsZWN0ZWRJdGVtKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKKyAgICBpZiAocHJpdi0+ZnVsbFNjcmVlbk1vZGVBY3RpdmUpIHsKKyAgICAgICAgc3dpdGNo
IChrZXl2YWwpIHsKKyAgICAgICAgY2FzZSBHREtfS0VZX0VzY2FwZToKKyAgICAgICAgY2FzZSBH
REtfS0VZX2Y6CisgICAgICAgIGNhc2UgR0RLX0tFWV9GOgorICAgICAgICAgICAgcHJpdi0+cGFn
ZVByb3h5LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5yZXF1ZXN0RXhpdEZ1bGxTY3JlZW4oKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyNpZiAhVVNFKEdUSzQpCisgICAgaWYgKGtleXZh
bCA9PSBHREtfS0VZX01lbnUpIHsKKyAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VQb3B1cE1lbnUo
R1RLX1dJREdFVCh3ZWJWaWV3QmFzZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisKKyAgICBhdXRvIGtleWNvZGUgPSB3aWRnZXRLZXl2YWxUb0tleWNvZGUoR1RLX1dJREdFVCh3
ZWJWaWV3QmFzZSksIGtleXZhbCk7CisgICAgYXV0byB3ZWJFdmVudE1vZGlmaWVycyA9IHRvV2Vi
S2l0TW9kaWZpZXJzKG1vZGlmaWVycyk7CisKKyAgICBwcml2LT5wYWdlUHJveHktPmhhbmRsZUtl
eWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCgKKyAgICAgICAgV2ViRXZlbnQ6Oktl
eURvd24sCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6c2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKGtleXZhbCksCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5VmFsdWVGb3JH
ZGtLZXlDb2RlKGtleXZhbCksCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5Q29k
ZUZvckhhcmR3YXJlS2V5Q29kZShrZXljb2RlKSwKKyAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2
ZW50OjprZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShrZXl2YWwpLAorICAgICAgICBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OndpbmRvd3NLZXlDb2RlRm9yR2RrS2V5Q29kZShrZXl2YWwpLAorICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQ+KGtleXZhbCksCisgICAgICAgIHByaXYtPmtleUJpbmRpbmdU
cmFuc2xhdG9yLmNvbW1hbmRzRm9yS2V5dmFsKGtleXZhbCwgbW9kaWZpZXJzKSwKKyAgICAgICAg
a2V5dmFsID49IEdES19LRVlfS1BfU3BhY2UgJiYga2V5dmFsIDw9IEdES19LRVlfS1BfOSwKKyAg
ICAgICAgd2ViRXZlbnRNb2RpZmllcnMpKTsKKworICAgIHByaXYtPnBhZ2VQcm94eS0+aGFuZGxl
S2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KAorICAgICAgICBXZWJFdmVudDo6
S2V5VXAsCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6c2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKGtleXZhbCksCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5VmFsdWVGb3JH
ZGtLZXlDb2RlKGtleXZhbCksCisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5Q29k
ZUZvckhhcmR3YXJlS2V5Q29kZShrZXljb2RlKSwKKyAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2
ZW50OjprZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShrZXl2YWwpLAorICAgICAgICBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OndpbmRvd3NLZXlDb2RlRm9yR2RrS2V5Q29kZShrZXl2YWwpLAorICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQ+KGtleXZhbCksCisgICAgICAgIHsgfSwKKyAgICAgICAga2V5
dmFsID49IEdES19LRVlfS1BfU3BhY2UgJiYga2V5dmFsIDw9IEdES19LRVlfS1BfOSwKKyAgICAg
ICAgd2ViRXZlbnRNb2RpZmllcnMpKTsKK30KKworc3RhdGljIGlubGluZSBXZWJXaGVlbEV2ZW50
OjpQaGFzZSB0b1dlYktpdFdoZWVsRXZlbnRQaGFzZShXaGVlbEV2ZW50UGhhc2UgcGhhc2UpCit7
CisgICAgc3dpdGNoIChwaGFzZSkgeworICAgIGNhc2UgV2hlZWxFdmVudFBoYXNlOjpOb1BoYXNl
OgorICAgICAgICByZXR1cm4gV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZTsKKyAgICBj
YXNlIFdoZWVsRXZlbnRQaGFzZTo6QmVnYW46CisgICAgICAgIHJldHVybiBXZWJXaGVlbEV2ZW50
OjpQaGFzZTo6UGhhc2VCZWdhbjsKKyAgICBjYXNlIFdoZWVsRXZlbnRQaGFzZTo6Q2hhbmdlZDoK
KyAgICAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQ7CisgICAg
Y2FzZSBXaGVlbEV2ZW50UGhhc2U6OkVuZGVkOgorICAgICAgICByZXR1cm4gV2ViV2hlZWxFdmVu
dDo6UGhhc2U6OlBoYXNlRW5kZWQ7CisgICAgY2FzZSBXaGVlbEV2ZW50UGhhc2U6OkNhbmNlbGxl
ZDoKKyAgICAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNhbmNlbGxlZDsK
KyAgICBjYXNlIFdoZWVsRXZlbnRQaGFzZTo6TWF5QmVnaW46CisgICAgICAgIHJldHVybiBXZWJX
aGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VNYXlCZWdpbjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6
ZVdoZWVsRXZlbnQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBkb3VibGUgZGVsdGFY
LCBkb3VibGUgZGVsdGFZLCBpbnQgeCwgaW50IHksIFdoZWVsRXZlbnRQaGFzZSBwaGFzZSwgV2hl
ZWxFdmVudFBoYXNlIG1vbWVudHVtUGhhc2UpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2
YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisgICAgaWYgKHByaXYtPmRpYWxvZykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgRmxvYXRTaXplIHdoZWVsVGlja3MoZGVsdGFYLCBkZWx0YVkp
OworICAgIEZsb2F0U2l6ZSBkZWx0YSh3aGVlbFRpY2tzKTsKKyAgICBkZWx0YS5zY2FsZShzdGF0
aWNfY2FzdDxmbG9hdD4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKSk7CisKKyAgICBw
cml2LT5wYWdlUHJveHktPmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudCh7IHgs
IHkgfSwgd2lkZ2V0Um9vdENvb3JkcyhHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSwgeCwgeSksCisg
ICAgICAgIGRlbHRhLCB3aGVlbFRpY2tzLCB0b1dlYktpdFdoZWVsRXZlbnRQaGFzZShwaGFzZSks
IHRvV2ViS2l0V2hlZWxFdmVudFBoYXNlKG1vbWVudHVtUGhhc2UpKSk7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlSW50ZXJu
YWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VJ
bnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZmFlZWE0
YTc1OWNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZUludGVybmFsLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlIFdlYktpdFdlYlZpZXdCYXNlOworCitl
bnVtIGNsYXNzIE1vdXNlRXZlbnRUeXBlIHsgUHJlc3MsIFJlbGVhc2UsIE1vdGlvbiB9Owordm9p
ZCB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVNb3VzZUV2ZW50KFdlYktpdFdlYlZpZXdCYXNl
KiwgTW91c2VFdmVudFR5cGUgdHlwZSwgdW5zaWduZWQgYnV0dG9uLCB1bnNpZ25lZCBzaG9ydCBi
dXR0b25zLCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIG1vZGlmaWVycywgaW50IGNsaWNrQ291bnQp
OworCit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZUtleUV2ZW50KFdlYktpdFdlYlZp
ZXdCYXNlKiwgdW5zaWduZWQga2V5VmFsLCB1bnNpZ25lZCBtb2RpZmllcnMpOworCitlbnVtIGNs
YXNzIFdoZWVsRXZlbnRQaGFzZSB7IE5vUGhhc2UsIEJlZ2FuLCBDaGFuZ2VkLCBFbmRlZCwgQ2Fu
Y2VsbGVkLCBNYXlCZWdpbiB9Owordm9pZCB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVXaGVl
bEV2ZW50KFdlYktpdFdlYlZpZXdCYXNlKiwgZG91YmxlIGRlbHRhWCwgZG91YmxlIGRlbHRhWSwg
aW50IHgsIGludCB5LCBXaGVlbEV2ZW50UGhhc2UsIFdoZWVsRXZlbnRQaGFzZSBtb21lbnR1bVBo
YXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggOTA1M2VjZGM0
NDM2Li44OGRkYzEzZWU1NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CkBAIC0xNzY5LDcgKzE3NjksOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZvaWQgc2V0SGFz
RXhlY3V0ZWRBcHBCb3VuZEJlaGF2aW9yQmVmb3JlTmF2aWdhdGlvbigpIHsgbV9oYXNFeGVjdXRl
ZEFwcEJvdW5kQmVoYXZpb3JCZWZvcmVOYXZpZ2F0aW9uID0gdHJ1ZTsgfQotICAgICAgICAKKwor
ICAgIFdlYlBvcHVwTWVudVByb3h5KiBhY3RpdmVQb3B1cE1lbnUoKSBjb25zdCB7IHJldHVybiBt
X2FjdGl2ZVBvcHVwTWVudS5nZXQoKTsgfQorCiBwcml2YXRlOgogICAgIFdlYlBhZ2VQcm94eShQ
YWdlQ2xpZW50JiwgV2ViUHJvY2Vzc1Byb3h5JiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+
JiYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcAppbmRleCA2YmUyMzJl
NDJlZWIuLjZkYjI0YjcxMzU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuY3BwCkBAIC0yMTcsMjEgKzIxNywyNiBAQCBzdGF0
aWMgY29uc3QgS2V5Q29tYmluYXRpb25FbnRyeSBjdXN0b21LZXlCaW5kaW5nc1tdID0gewogICAg
IHsgR0RLX0tFWV9WLCAgICAgICAgIEdES19DT05UUk9MX01BU0sgfCBHREtfU0hJRlRfTUFTSywg
IlBhc3RlQXNQbGFpblRleHQiIH0sCiB9OwogCi1zdGF0aWMgVmVjdG9yPFN0cmluZz4gaGFuZGxl
Q3VzdG9tS2V5QmluZGluZ3ModW5zaWduZWQga2V5dmFsLCBHZGtNb2RpZmllclR5cGUgc3RhdGUp
CitzdGF0aWMgVmVjdG9yPFN0cmluZz4gaGFuZGxlS2V5QmluZGluZ3NGb3JNYXAoY29uc3QgS2V5
Q29tYmluYXRpb25FbnRyeSogbWFwLCB1bnNpZ25lZCBtYXBTaXplLCB1bnNpZ25lZCBrZXl2YWws
IEdka01vZGlmaWVyVHlwZSBzdGF0ZSkKIHsKICAgICAvLyBGb3Iga2V5cHJlc3MgZXZlbnRzLCB3
ZSB3YW50IGNoYXJDb2RlKCksIGJ1dCBrZXlDb2RlKCkgZG9lcyB0aGF0LgogICAgIHVuc2lnbmVk
IG1hcEtleSA9IChzdGF0ZSAmIChHREtfU0hJRlRfTUFTSyB8IEdES19DT05UUk9MX01BU0sgfCBH
REtfTU9EMV9NQVNLKSkgPDwgMTYgfCBrZXl2YWw7CiAgICAgaWYgKCFtYXBLZXkpCiAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR19OX0VMRU1FTlRT
KGN1c3RvbUtleUJpbmRpbmdzKTsgKytpKSB7Ci0gICAgICAgIGlmIChtYXBLZXkgPT0gKGN1c3Rv
bUtleUJpbmRpbmdzW2ldLnN0YXRlIDw8IDE2IHwgY3VzdG9tS2V5QmluZGluZ3NbaV0uZ2RrS2V5
Q29kZSkpCi0gICAgICAgICAgICByZXR1cm4geyBjdXN0b21LZXlCaW5kaW5nc1tpXS5uYW1lIH07
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hcFNpemU7ICsraSkgeworICAgICAgICBp
ZiAobWFwS2V5ID09IChtYXBbaV0uc3RhdGUgPDwgMTYgfCBtYXBbaV0uZ2RrS2V5Q29kZSkpCisg
ICAgICAgICAgICByZXR1cm4geyBtYXBbaV0ubmFtZSB9OwogICAgIH0KIAogICAgIHJldHVybiB7
IH07CiB9CiAKK3N0YXRpYyBWZWN0b3I8U3RyaW5nPiBoYW5kbGVDdXN0b21LZXlCaW5kaW5ncyh1
bnNpZ25lZCBrZXl2YWwsIEdka01vZGlmaWVyVHlwZSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gaGFu
ZGxlS2V5QmluZGluZ3NGb3JNYXAoY3VzdG9tS2V5QmluZGluZ3MsIEdfTl9FTEVNRU5UUyhjdXN0
b21LZXlCaW5kaW5ncyksIGtleXZhbCwgc3RhdGUpOworfQorCiAjaWYgVVNFKEdUSzQpCiBWZWN0
b3I8U3RyaW5nPiBLZXlCaW5kaW5nVHJhbnNsYXRvcjo6Y29tbWFuZHNGb3JLZXlFdmVudChHdGtF
dmVudENvbnRyb2xsZXJLZXkqIGNvbnRyb2xsZXIpCiB7CkBAIC0yNjEsNCArMjY2LDcwIEBAIFZl
Y3RvcjxTdHJpbmc+IEtleUJpbmRpbmdUcmFuc2xhdG9yOjpjb21tYW5kc0ZvcktleUV2ZW50KEdk
a0V2ZW50S2V5KiBldmVudCkKIH0KICNlbmRpZgogCitzdGF0aWMgY29uc3QgS2V5Q29tYmluYXRp
b25FbnRyeSBwcmVkZWZpbmVkS2V5QmluZGluZ3NbXSA9IHsKKyAgICB7IEdES19LRVlfTGVmdCwg
ICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlTGVmdCIgfSwK
KyAgICB7IEdES19LRVlfS1BfTGVmdCwgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJNb3ZlTGVmdCIgfSwKKyAgICB7IEdES19LRVlfTGVmdCwgICAgICAgICBHREtfU0hJ
RlRfTUFTSywgICAgICAgICAgICAgICAgICAgICJNb3ZlQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rp
b24iIH0sCisgICAgeyBHREtfS0VZX0tQX0xlZnQsICAgICAgR0RLX1NISUZUX01BU0ssICAgICAg
ICAgICAgICAgICAgICAiTW92ZUJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsg
R0RLX0tFWV9MZWZ0LCAgICAgICAgIEdES19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgICAg
Ik1vdmVXb3JkQmFja3dhcmQiIH0sCisgICAgeyBHREtfS0VZX0tQX0xlZnQsICAgICAgR0RLX0NP
TlRST0xfTUFTSywgICAgICAgICAgICAgICAgICAiTW92ZVdvcmRCYWNrd2FyZCIgfSwKKyAgICB7
IEdES19LRVlfTGVmdCwgICAgICAgICBHREtfQ09OVFJPTF9NQVNLIHwgR0RLX1NISUZUX01BU0ss
ICJNb3ZlV29yZEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9L
UF9MZWZ0LCAgICAgIEdES19DT05UUk9MX01BU0sgfCBHREtfU0hJRlRfTUFTSywgIk1vdmVXb3Jk
QmFja3dhcmRBbmRNb2RpZnlTZWxlY3RpbyIgfSwKKyAgICB7IEdES19LRVlfUmlnaHQsICAgICAg
ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlUmlnaHQiIH0sCisgICAg
eyBHREtfS0VZX0tQX1JpZ2h0LCAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiTW92ZVJpZ2h0IiB9LAorICAgIHsgR0RLX0tFWV9SaWdodCwgICAgICAgIEdES19TSElGVF9N
QVNLLCAgICAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiB9
LAorICAgIHsgR0RLX0tFWV9LUF9SaWdodCwgICAgIEdES19TSElGVF9NQVNLLCAgICAgICAgICAg
ICAgICAgICAgIk1vdmVGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tF
WV9SaWdodCwgICAgICAgIEdES19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgICAgIk1vdmVX
b3JkRm9yd2FyZCIgfSwKKyAgICB7IEdES19LRVlfS1BfUmlnaHQsICAgICBHREtfQ09OVFJPTF9N
QVNLLCAgICAgICAgICAgICAgICAgICJNb3ZlV29yZEZvcndhcmQiIH0sCisgICAgeyBHREtfS0VZ
X1JpZ2h0LCAgICAgICAgR0RLX0NPTlRST0xfTUFTSyB8IEdES19TSElGVF9NQVNLLCAiTW92ZVdv
cmRGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9LUF9SaWdodCwg
ICAgIEdES19DT05UUk9MX01BU0sgfCBHREtfU0hJRlRfTUFTSywgIk1vdmVXb3JkRm9yd2FyZEFu
ZE1vZGlmeVNlbGVjdGlvbiIgfSwKKyAgICB7IEdES19LRVlfVXAsICAgICAgICAgICAwLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlVXAiIH0sCisgICAgeyBHREtfS0VZX0tQ
X1VwLCAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVVwIiB9
LAorICAgIHsgR0RLX0tFWV9VcCwgICAgICAgICAgIEdES19TSElGVF9NQVNLLCAgICAgICAgICAg
ICAgICAgICAgIk1vdmVVcEFuZE1vZGlmeVNlbGVjdGlvbiIgfSwKKyAgICB7IEdES19LRVlfS1Bf
VXAsICAgICAgICBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAgICAgICAgICJNb3ZlVXBBbmRN
b2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZX0Rvd24sICAgICAgICAgMCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZURvd24iIH0sCisgICAgeyBHREtfS0VZX0tQ
X0Rvd24sICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZURvd24i
IH0sCisgICAgeyBHREtfS0VZX0Rvd24sICAgICAgICAgR0RLX1NISUZUX01BU0ssICAgICAgICAg
ICAgICAgICAgICAiTW92ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZ
X0tQX0Rvd24sICAgICAgR0RLX1NISUZUX01BU0ssICAgICAgICAgICAgICAgICAgICAiTW92ZURv
d25BbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZX0hvbWUsICAgICAgICAgMCwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lIiB9
LAorICAgIHsgR0RLX0tFWV9LUF9Ib21lLCAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIk1vdmVUb0JlZ2lubmluZ09mTGluZSIgfSwKKyAgICB7IEdES19LRVlfSG9tZSwg
ICAgICAgICBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9CZWdpbm5p
bmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZX0tQX0hvbWUsICAg
ICAgR0RLX1NISUZUX01BU0ssICAgICAgICAgICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZM
aW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9Ib21lLCAgICAgICAgIEdE
S19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgICAgIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1l
bnQiIH0sCisgICAgeyBHREtfS0VZX0tQX0hvbWUsICAgICAgR0RLX0NPTlRST0xfTUFTSywgICAg
ICAgICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudCIgfSwKKyAgICB7IEdES19L
RVlfSG9tZSwgICAgICAgICBHREtfQ09OVFJPTF9NQVNLIHwgR0RLX1NISUZUX01BU0ssICJNb3Zl
VG9CZWdpbm5pbmdPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tF
WV9LUF9Ib21lLCAgICAgIEdES19DT05UUk9MX01BU0sgfCBHREtfU0hJRlRfTUFTSywgIk1vdmVU
b0JlZ2lubmluZ09mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZ
X0VuZCwgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVRv
RW5kT2ZMaW5lIiB9LAorICAgIHsgR0RLX0tFWV9LUF9FbmQsICAgICAgIDAsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIk1vdmVUb0VuZE9mTGluZSIgfSwKKyAgICB7IEdES19LRVlf
RW5kLCAgICAgICAgICBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9F
bmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZX0tQX0VuZCwgICAg
ICAgR0RLX1NISUZUX01BU0ssICAgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZMaW5lQW5k
TW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9FbmQsICAgICAgICAgIEdES19DT05U
Uk9MX01BU0ssICAgICAgICAgICAgICAgICAgIk1vdmVUb0VuZE9mRG9jdW1lbnQiIH0sCisgICAg
eyBHREtfS0VZX0tQX0VuZCwgICAgICAgR0RLX0NPTlRST0xfTUFTSywgICAgICAgICAgICAgICAg
ICAiTW92ZVRvRW5kT2ZEb2N1bWVudCIgfSwKKyAgICB7IEdES19LRVlfRW5kLCAgICAgICAgICBH
REtfQ09OVFJPTF9NQVNLIHwgR0RLX1NISUZUX01BU0ssICJNb3ZlVG9FbmRPZkRvY3VtZW50QW5k
TW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIHsgR0RLX0tFWV9LUF9FbmQsICAgICAgIEdES19DT05U
Uk9MX01BU0sgfCBHREtfU0hJRlRfTUFTSywgIk1vdmVUb0VuZE9mRG9jdW1lbnRBbmRNb2RpZnlT
ZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZX1BhZ2VfVXAsICAgICAgMCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VVcCIgfSwKKyAgICB7IEdES19LRVlfS1BfUGFn
ZV9VcCwgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZVVwIiB9
LAorICAgIHsgR0RLX0tFWV9QYWdlX1VwLCAgICAgIEdES19TSElGVF9NQVNLLCAgICAgICAgICAg
ICAgICAgICAgIk1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBHREtfS0VZ
X0tQX1BhZ2VfVXAsICAgR0RLX1NISUZUX01BU0ssICAgICAgICAgICAgICAgICAgICAiTW92ZVBh
Z2VVcEFuZE1vZGlmeVNlbGVjdGlvbiIgfSwKKyAgICB7IEdES19LRVlfUGFnZV9Eb3duLCAgICAw
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZURvd24iIH0sCisgICAg
eyBHREtfS0VZX0tQX1BhZ2VfRG93biwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiTW92ZVBhZ2VEb3duIiB9LAorICAgIHsgR0RLX0tFWV9QYWdlX0Rvd24sICAgIEdES19TSElG
VF9NQVNLLCAgICAgICAgICAgICAgICAgICAgIk1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlv
biIgfSwKKyAgICB7IEdES19LRVlfS1BfUGFnZV9Eb3duLCBHREtfU0hJRlRfTUFTSywgICAgICAg
ICAgICAgICAgICAgICJNb3ZlUGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iIH0sCisgICAgeyBH
REtfS0VZX0RlbGV0ZSwgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
RGVsZXRlRm9yd2FyZCIgfSwKKyAgICB7IEdES19LRVlfS1BfRGVsZXRlLCAgICAwLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJEZWxldGVGb3J3YXJkIiB9LAorICAgIHsgR0RLX0tF
WV9EZWxldGUsICAgICAgIEdES19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgICAgIkRlbGV0
ZVdvcmRGb3J3YXJkIiB9LAorICAgIHsgR0RLX0tFWV9LUF9EZWxldGUsICAgIEdES19DT05UUk9M
X01BU0ssICAgICAgICAgICAgICAgICAgIkRlbGV0ZVdvcmRGb3J3YXJkIiB9LAorICAgIHsgR0RL
X0tFWV9CYWNrU3BhY2UsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRl
bGV0ZUJhY2t3YXJkIiB9LAorICAgIHsgR0RLX0tFWV9CYWNrU3BhY2UsICAgIEdES19DT05UUk9M
X01BU0ssICAgICAgICAgICAgICAgICAgIkRlbGV0ZVdvcmRCYWNrd2FyZCIgfQorfTsKKworVmVj
dG9yPFN0cmluZz4gS2V5QmluZGluZ1RyYW5zbGF0b3I6OmNvbW1hbmRzRm9yS2V5dmFsKHVuc2ln
bmVkIGtleXZhbCwgdW5zaWduZWQgbW9kaWZpZXJzKQoreworICAgIGF1dG8gY29tbWFuZHMgPSBo
YW5kbGVLZXlCaW5kaW5nc0Zvck1hcChwcmVkZWZpbmVkS2V5QmluZGluZ3MsIEdfTl9FTEVNRU5U
UyhwcmVkZWZpbmVkS2V5QmluZGluZ3MpLCBrZXl2YWwsIHN0YXRpY19jYXN0PEdka01vZGlmaWVy
VHlwZT4obW9kaWZpZXJzKSk7CisgICAgaWYgKCFjb21tYW5kcy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBjb21tYW5kczsKKworICAgIHJldHVybiBoYW5kbGVDdXN0b21LZXlCaW5kaW5ncyhr
ZXl2YWwsIHN0YXRpY19jYXN0PEdka01vZGlmaWVyVHlwZT4obW9kaWZpZXJzKSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsv
S2V5QmluZGluZ1RyYW5zbGF0b3IuaAppbmRleCA0YzQzYWM3MzI3NmMuLmZlMDRjMWZmNDQxNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xh
dG9yLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xh
dG9yLmgKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGljOgogI2Vsc2UKICAgICBWZWN0b3I8U3RyaW5n
PiBjb21tYW5kc0ZvcktleUV2ZW50KEdka0V2ZW50S2V5Kik7CiAjZW5kaWYKKyAgICBWZWN0b3I8
U3RyaW5nPiBjb21tYW5kc0ZvcktleXZhbCh1bnNpZ25lZCBrZXl2YWwsIHVuc2lnbmVkIG1vZGlm
aWVycyk7CisKICAgICB2b2lkIGFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKGNvbnN0IGNoYXIqIGNv
bW1hbmQpIHsgbV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMuYXBwZW5kKGNvbW1hbmQpOyB9CiAKIHBy
aXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4
dE1lbnVQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4
dE1lbnVQcm94eUd0ay5jcHAKaW5kZXggNDlmYTY4NWMzN2JkLi5iMDRiNDdiMTJiMTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3Rr
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94
eUd0ay5jcHAKQEAgLTEwMCw2ICsxMDAsOCBAQCBzdGF0aWMgdm9pZCBwb3B1cE1lbnVXaWRnZXQo
R3RrV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IEdka0V2ZW50KiB0cmlnZ2VyRXZlbnQsIGNvbgogICAg
ICAgICBnZGtfZXZlbnRfc2V0X2RldmljZShrZXlFdmVudC5nZXQoKSwgZ2RrX3NlYXRfZ2V0X2tl
eWJvYXJkKGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3NlYXQoZ2RrX3dpbmRvd19nZXRfZGlzcGxh
eSh3aW5kb3cpKSkpOwogICAgICAgICBhdXRvKiBldmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2Rr
RXZlbnRLZXkqPihrZXlFdmVudC5nZXQoKSk7CiAgICAgICAgIGV2ZW50LT53aW5kb3cgPSB3aW5k
b3c7CisgICAgICAgIC8vIFRha2UgYSByZWYgb2YgdGhlIEdka1dpbmRvdyB3aGVuIGNyZWF0aW5n
IHRoZSBHZGtFdmVudCwgc2luY2UgdGhlIGV2ZW50IHdpbGwgdW5yZWYgaXQgb24gZGVzdHJveS4K
KyAgICAgICAgZ19vYmplY3RfcmVmKHdpbmRvdyk7CiAgICAgICAgIGV2ZW50LT50aW1lID0gR0RL
X0NVUlJFTlRfVElNRTsKICAgICAgICAgZXZlbnQtPmtleXZhbCA9IEdES19LRVlfTWVudTsKICAg
ICAgICAgdHJpZ2dlckV2ZW50ID0ga2V5RXZlbnQuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmNwcAppbmRleCA0NjRkZTZj
Y2I5YzYuLjkxNTUyZThmNjdjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuY3BwCkBAIC05MCw2ICs5MCwyNyBAQCBib29sIFdl
YlBvcHVwTWVudVByb3h5R3RrOjphY3RpdmF0ZUl0ZW1BdFBhdGgoR3RrVHJlZVBhdGgqIHBhdGgp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgV2ViUG9wdXBNZW51UHJveHlHdGs6OmhhbmRs
ZUtleVByZXNzKHVuc2lnbmVkIGtleXZhbCwgdWludDMyX3QgdGltZXN0YW1wKQoreworICAgIGlm
IChrZXl2YWwgPT0gR0RLX0tFWV9Fc2NhcGUpIHsKKyAgICAgICAgaGlkZVBvcHVwTWVudSgpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZUFoZWFkRmluZChr
ZXl2YWwsIHRpbWVzdGFtcCk7Cit9CisKK3ZvaWQgV2ViUG9wdXBNZW51UHJveHlHdGs6OmFjdGl2
YXRlU2VsZWN0ZWRJdGVtKCkKK3sKKyAgICBHdGtUcmVlTW9kZWwqIG1vZGVsOworICAgIEd0a1Ry
ZWVJdGVyIGl0ZXI7CisgICAgaWYgKCFndGtfdHJlZV9zZWxlY3Rpb25fZ2V0X3NlbGVjdGVkKGd0
a190cmVlX3ZpZXdfZ2V0X3NlbGVjdGlvbihHVEtfVFJFRV9WSUVXKG1fdHJlZVZpZXcpKSwgJm1v
ZGVsLCAmaXRlcikpCisgICAgICAgIHJldHVybjsKKworICAgIEdVbmlxdWVQdHI8R3RrVHJlZVBh
dGg+IHBhdGgoZ3RrX3RyZWVfbW9kZWxfZ2V0X3BhdGgobW9kZWwsICZpdGVyKSk7CisgICAgYWN0
aXZhdGVJdGVtQXRQYXRoKHBhdGguZ2V0KCkpOworfQorCiB2b2lkIFdlYlBvcHVwTWVudVByb3h5
R3RrOjp0cmVlVmlld1Jvd0FjdGl2YXRlZENhbGxiYWNrKEd0a1RyZWVWaWV3KiwgR3RrVHJlZVBh
dGgqIHBhdGgsIEd0a1RyZWVWaWV3Q29sdW1uKiwgV2ViUG9wdXBNZW51UHJveHlHdGsqIHBvcHVw
TWVudSkKIHsKICAgICBwb3B1cE1lbnUtPmFjdGl2YXRlSXRlbUF0UGF0aChwYXRoKTsKQEAgLTEy
MCwyMyArMTQxLDE4IEBAIGdib29sZWFuIFdlYlBvcHVwTWVudVByb3h5R3RrOjpidXR0b25QcmVz
c0V2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2CiAgICAgcmV0dXJuIFRSVUU7
CiB9CiAKLWdib29sZWFuIFdlYlBvcHVwTWVudVByb3h5R3RrOjprZXlQcmVzc0V2ZW50Q2FsbGJh
Y2soR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCwgV2ViUG9wdXBNZW51UHJv
eHlHdGsqIHBvcHVwTWVudSkKK2dib29sZWFuIFdlYlBvcHVwTWVudVByb3h5R3RrOjprZXlQcmVz
c0V2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50KiBldmVudCwgV2ViUG9w
dXBNZW51UHJveHlHdGsqIHBvcHVwTWVudSkKIHsKICAgICBpZiAoIXBvcHVwTWVudS0+bV9kZXZp
Y2UpCiAgICAgICAgIHJldHVybiBGQUxTRTsKIAogICAgIGd1aW50IGtleXZhbDsKLSAgICBnZGtf
ZXZlbnRfZ2V0X2tleXZhbChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAma2V5
dmFsKTsKLSAgICBpZiAoa2V5dmFsID09IEdES19LRVlfRXNjYXBlKSB7Ci0gICAgICAgIHBvcHVw
TWVudS0+aGlkZVBvcHVwTWVudSgpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAg
ICBpZiAocG9wdXBNZW51LT50eXBlQWhlYWRGaW5kKGV2ZW50KSkKKyAgICBnZGtfZXZlbnRfZ2V0
X2tleXZhbChldmVudCwgJmtleXZhbCk7CisgICAgaWYgKHBvcHVwTWVudS0+aGFuZGxlS2V5UHJl
c3Moa2V5dmFsLCBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpKSkKICAgICAgICAgcmV0dXJuIFRS
VUU7CiAKICAgICAvLyBGb3J3YXJkIHRoZSBldmVudCB0byB0aGUgdHJlZSB2aWV3LgotICAgIGd0
a193aWRnZXRfZXZlbnQocG9wdXBNZW51LT5tX3RyZWVWaWV3LCByZWludGVycHJldF9jYXN0PEdk
a0V2ZW50Kj4oZXZlbnQpKTsKKyAgICBndGtfd2lkZ2V0X2V2ZW50KHBvcHVwTWVudS0+bV90cmVl
VmlldywgZXZlbnQpOwogICAgIHJldHVybiBUUlVFOwogfQogCkBAIC0zNTcsMTUgKzM3MywxMiBA
QCB2b2lkIFdlYlBvcHVwTWVudVByb3h5R3RrOjpjYW5jZWxUcmFja2luZygpCiAgICAgaGlkZVBv
cHVwTWVudSgpOwogfQogCi1PcHRpb25hbDx1bnNpZ25lZD4gV2ViUG9wdXBNZW51UHJveHlHdGs6
OnR5cGVBaGVhZEZpbmRJbmRleChHZGtFdmVudEtleSogZXZlbnQpCitPcHRpb25hbDx1bnNpZ25l
ZD4gV2ViUG9wdXBNZW51UHJveHlHdGs6OnR5cGVBaGVhZEZpbmRJbmRleCh1bnNpZ25lZCBrZXl2
YWwsIHVpbnQzMl90IHRpbWUpCiB7Ci0gICAgZ3VpbnQga2V5dmFsOwotICAgIGdka19ldmVudF9n
ZXRfa2V5dmFsKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksICZrZXl2YWwpOwog
ICAgIGd1bmljaGFyIGtleWNoYXIgPSBnZGtfa2V5dmFsX3RvX3VuaWNvZGUoa2V5dmFsKTsKICAg
ICBpZiAoIWdfdW5pY2hhcl9pc3ByaW50KGtleWNoYXIpKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgdWludDMyX3QgdGltZSA9IGdka19ldmVudF9nZXRfdGltZShyZWludGVy
cHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKTsKICAgICBpZiAodGltZSA8IG1fcHJldmlvdXNL
ZXlFdmVudFRpbWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKQEAgLTQyNyw5ICs0
NDAsOSBAQCBPcHRpb25hbDx1bnNpZ25lZD4gV2ViUG9wdXBNZW51UHJveHlHdGs6OnR5cGVBaGVh
ZEZpbmRJbmRleChHZGtFdmVudEtleSogZXZlbnQpCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IH0KIAotYm9vbCBXZWJQb3B1cE1lbnVQcm94eUd0azo6dHlwZUFoZWFkRmluZChHZGtFdmVudEtl
eSogZXZlbnQpCitib29sIFdlYlBvcHVwTWVudVByb3h5R3RrOjp0eXBlQWhlYWRGaW5kKHVuc2ln
bmVkIGtleXZhbCwgdWludDMyX3QgdGltZXN0YW1wKQogewotICAgIGF1dG8gc2VhcmNoSW5kZXgg
PSB0eXBlQWhlYWRGaW5kSW5kZXgoZXZlbnQpOworICAgIGF1dG8gc2VhcmNoSW5kZXggPSB0eXBl
QWhlYWRGaW5kSW5kZXgoa2V5dmFsLCB0aW1lc3RhbXApOwogICAgIGlmICghc2VhcmNoSW5kZXgp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuaAppbmRleCA1NTc1Yzc4ODNiOGIuLjZjYjc0YmVj
YjcyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVu
dVByb3h5R3RrLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVu
dVByb3h5R3RrLmgKQEAgLTI5LDEwICsyOSwxMCBAQAogdHlwZWRlZiBzdHJ1Y3QgX0dNYWluTG9v
cCBHTWFpbkxvb3A7CiB0eXBlZGVmIHN0cnVjdCBfR2RrRGV2aWNlIEdka0RldmljZTsKIHR5cGVk
ZWYgc3RydWN0IF9HZGtFdmVudEJ1dHRvbiBHZGtFdmVudEJ1dHRvbjsKLXR5cGVkZWYgc3RydWN0
IF9HZGtFdmVudEtleSBHZGtFdmVudEtleTsKIHR5cGVkZWYgc3RydWN0IF9HdGtUcmVlUGF0aCBH
dGtUcmVlUGF0aDsKIHR5cGVkZWYgc3RydWN0IF9HdGtUcmVlVmlldyBHdGtUcmVlVmlldzsKIHR5
cGVkZWYgc3RydWN0IF9HdGtUcmVlVmlld0NvbHVtbiBHdGtUcmVlVmlld0NvbHVtbjsKK3R5cGVk
ZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBJbnRSZWN0OwpAQCAtNTcsNiArNTcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNl
bGVjdEl0ZW0odW5zaWduZWQgaXRlbUluZGV4KTsKICAgICB2aXJ0dWFsIHZvaWQgYWN0aXZhdGVJ
dGVtKE9wdGlvbmFsPHVuc2lnbmVkPiBpdGVtSW5kZXgpOwogCisgICAgYm9vbCBoYW5kbGVLZXlQ
cmVzcyh1bnNpZ25lZCBrZXl2YWwsIHVpbnQzMl90IHRpbWVzdGFtcCk7CisgICAgdm9pZCBhY3Rp
dmF0ZVNlbGVjdGVkSXRlbSgpOworCiBwcm90ZWN0ZWQ6CiAgICAgV2ViUG9wdXBNZW51UHJveHlH
dGsoR3RrV2lkZ2V0KiwgV2ViUG9wdXBNZW51UHJveHk6OkNsaWVudCYpOwogCkBAIC02NiwxMSAr
NjksMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVBvcHVwTWVudShjb25zdCBWZWN0b3I8
V2ViUG9wdXBJdGVtPiYsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCk7CiAgICAgdm9pZCBzaG93KCk7
CiAgICAgYm9vbCBhY3RpdmF0ZUl0ZW1BdFBhdGgoR3RrVHJlZVBhdGgqKTsKLSAgICBPcHRpb25h
bDx1bnNpZ25lZD4gdHlwZUFoZWFkRmluZEluZGV4KEdka0V2ZW50S2V5Kik7Ci0gICAgYm9vbCB0
eXBlQWhlYWRGaW5kKEdka0V2ZW50S2V5Kik7CisgICAgT3B0aW9uYWw8dW5zaWduZWQ+IHR5cGVB
aGVhZEZpbmRJbmRleCh1bnNpZ25lZCBrZXl2YWwsIHVpbnQzMl90IHRpbWVzdGFtcCk7CisgICAg
Ym9vbCB0eXBlQWhlYWRGaW5kKHVuc2lnbmVkIGtleXZhbCwgdWludDMyX3QgdGltZXN0YW1wKTsK
IAogICAgIHN0YXRpYyBnYm9vbGVhbiBidXR0b25QcmVzc0V2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0
KiwgR2RrRXZlbnRCdXR0b24qLCBXZWJQb3B1cE1lbnVQcm94eUd0ayopOwotICAgIHN0YXRpYyBn
Ym9vbGVhbiBrZXlQcmVzc0V2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiwgR2RrRXZlbnRLZXkqLCBX
ZWJQb3B1cE1lbnVQcm94eUd0ayopOworICAgIHN0YXRpYyBnYm9vbGVhbiBrZXlQcmVzc0V2ZW50
Q2FsbGJhY2soR3RrV2lkZ2V0KiwgR2RrRXZlbnQqLCBXZWJQb3B1cE1lbnVQcm94eUd0ayopOwog
ICAgIHN0YXRpYyB2b2lkIHRyZWVWaWV3Um93QWN0aXZhdGVkQ2FsbGJhY2soR3RrVHJlZVZpZXcq
LCBHdGtUcmVlUGF0aCosIEd0a1RyZWVWaWV3Q29sdW1uKiwgV2ViUG9wdXBNZW51UHJveHlHdGsq
KTsKICAgICBzdGF0aWMgZ2Jvb2xlYW4gdHJlZVZpZXdCdXR0b25SZWxlYXNlRXZlbnRDYWxsYmFj
ayhHdGtXaWRnZXQqLCBHZGtFdmVudEJ1dHRvbiosIFdlYlBvcHVwTWVudVByb3h5R3RrKik7CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5MmJk
NGVmNTc4YmQuLjk0YWQxMDBhMjc3MCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIwLTA1LTI0ICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXVFJdIEV2
ZW50U2VuZGVyOiBzdG9wIHVzaW5nIEdka0V2ZW50IEFQSSBpbiBwcmVwYXJhdGlvbiBmb3IgR1RL
NAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMjk4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIFdl
YktpdFdlYlZpZXdCYXNlIGludGVybmFsIEFQSSB0byBzeW50aGVzaXplIGV2ZW50cyBpbnN0ZWFk
IG9mIEdka0V2ZW50cy4gVGhlIHRvdWNoIGV2ZW50cyBzdXBwb3J0IGhhcyBiZWVuCisgICAgICAg
IHJlbW92ZWQgYmVjYXVzZSB3ZSBhcmUgbm8gbG9uZ2VyIHRlc3RpbmcgdG91Y2ggZXZlbnRzLCBz
aW5jZSB0aGV5IG5lZWQgYW4gYWN0dWFsIHRvdWNoc2NyZWVuLgorCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9ndGsvRXZlbnRTZW5kZXJQcm94eUd0ay5jcHA6CisgICAgICAgIChXVFI6OmdldEdES0tleVN5
bUZvcktleVJlZik6CisgICAgICAgIChXVFI6OnRvV2ViS2l0R0xpYkFQSSk6CisgICAgICAgIChX
VFI6OkV2ZW50U2VuZGVyUHJveHk6OmtleURvd24pOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRl
clByb3h5Ojptb3VzZURvd24pOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3Vz
ZVVwKToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6bW91c2VNb3ZlVG8pOgorICAg
ICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5KToKKyAgICAgICAgKFdU
Ujo6RXZlbnRTZW5kZXJQcm94eTo6Y29udGludW91c01vdXNlU2Nyb2xsQnkpOgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1Q
aGFzZXMpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpsZWFwRm9yd2FyZCk6Cisg
ICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OmFkZFRvdWNoUG9pbnQpOgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVUb3VjaFBvaW50KToKKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hTdGFydCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OnRvdWNoTW92ZSk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnRvdWNo
RW5kKToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hDYW5jZWwpOgorICAg
ICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpjbGVhclRvdWNoUG9pbnRzKToKKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6cmVsZWFzZVRvdWNoUG9pbnQpOgorICAgICAgICAoV1RS
OjpFdmVudFNlbmRlclByb3h5OjpjYW5jZWxUb3VjaFBvaW50KToKKyAgICAgICAgKFdUUjo6RXZl
bnRTZW5kZXJQcm94eTo6c2V0VG91Y2hQb2ludFJhZGl1cyk6CisgICAgICAgIChXVFI6OkV2ZW50
U2VuZGVyUHJveHk6OnNldFRvdWNoTW9kaWZpZXIpOgorCiAyMDIwLTA1LTIyICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBkb3dubG9h
ZCByZXN1bWUgd29ya2Fyb3VuZCBmb3JnaXZpbmcgb2YgY2hhbmdlcyBpbiBDRk5ldHdvcmsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5LmgKaW5kZXggMTEzOTliMzkwZmU5
Li5kOGEyNzIzYzIyMzcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZlbnRT
ZW5kZXJQcm94eS5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94
eS5oCkBAIC0zMiwxMSArMzIsNiBAQAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBQTEFURk9STShHVEspCi0jaW5jbHVkZSA8V2ViQ29y
ZS9HVW5pcXVlUHRyR3RrLmg+Ci0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2VuZGlmCi0KICNpZiBQ
TEFURk9STShXUEUpCiAjaW5jbHVkZSA8d3BlL3dwZS5oPgogI2VuZGlmCkBAIC00OSwxMCArNDQs
NiBAQCBuYW1lc3BhY2UgV1RSIHsKIAogY2xhc3MgVGVzdENvbnRyb2xsZXI7CiAKLSNpZiBQTEFU
Rk9STShHVEspCi1zdHJ1Y3QgV1RSRXZlbnRRdWV1ZUl0ZW07Ci0jZW5kaWYKLQogY2xhc3MgRXZl
bnRTZW5kZXJQcm94eSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBA
IC0xMDIsMTAgKzkzLDYgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgY3VycmVudEV2ZW50VGltZSgp
IHsgcmV0dXJuIG1fdGltZTsgfQogICAgIHZvaWQgdXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihp
bnQgYnV0dG9uKTsKIAotI2lmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHJlcGxheVNhdmVkRXZl
bnRzKCk7Ci0jZW5kaWYKLQogICAgIHZvaWQgc2VuZE1vdXNlRG93blRvU3RhcnRQcmVzc3VyZUV2
ZW50cygpOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGVudW0gY2xhc3MgUHJlc3N1cmVDaGFu
Z2VEaXJlY3Rpb24geyBJbmNyZWFzaW5nLCBEZWNyZWFzaW5nIH07CkBAIC0xMTQsMTQgKzEwMSw2
IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPE5TRXZlbnQ+IHByZXNzdXJlQ2hhbmdlRXZlbnQo
aW50IHN0YWdlLCBmbG9hdCBwcmVzc3VyZSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb24pOwogI2Vu
ZGlmCiAKLSNpZiBQTEFURk9STShHVEspCi0gICAgdm9pZCBzZW5kT3JRdWV1ZUV2ZW50KEdka0V2
ZW50Kik7Ci0gICAgdm9pZCBkaXNwYXRjaEV2ZW50KEdka0V2ZW50Kik7Ci0gICAgR2RrRXZlbnQq
IGNyZWF0ZU1vdXNlQnV0dG9uRXZlbnQoR2RrRXZlbnRUeXBlLCB1bnNpZ25lZCBidXR0b24sIFdL
RXZlbnRNb2RpZmllcnMpOwotICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGNyZWF0ZVRvdWNoRXZl
bnQoR2RrRXZlbnRUeXBlLCBpbnQgaWQpOwotICAgIHZvaWQgc2VuZFVwZGF0ZWRUb3VjaEV2ZW50
cygpOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShXUEUpCiAgICAgVmVjdG9yPHN0cnVjdCB3cGVf
aW5wdXRfdG91Y2hfZXZlbnRfcmF3PiBnZXRVcGRhdGVkVG91Y2hFdmVudHMoKTsKICAgICB2b2lk
IHJlbW92ZVVwZGF0ZWRUb3VjaEV2ZW50cygpOwpAQCAtMTQwLDE3ICsxMTksMTEgQEAgcHJpdmF0
ZToKICAgICBkb3VibGUgbV9jbGlja1RpbWU7CiAgICAgV0tQb2ludCBtX2NsaWNrUG9zaXRpb247
CiAgICAgV0tFdmVudE1vdXNlQnV0dG9uIG1fY2xpY2tCdXR0b247CisgICAgdW5zaWduZWQgbV9t
b3VzZUJ1dHRvbnNDdXJyZW50bHlEb3duIHsgMCB9OwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAg
IGludCBldmVudE51bWJlcjsKLSAgICB1bnNpZ25lZCBtX21vdXNlQnV0dG9uc0N1cnJlbnRseURv
d24geyAwIH07Ci0jZWxpZiBQTEFURk9STShHVEspCi0gICAgRGVxdWU8V1RSRXZlbnRRdWV1ZUl0
ZW0+IG1fZXZlbnRRdWV1ZTsKLSAgICB1bnNpZ25lZCBtX21vdXNlQnV0dG9uc0N1cnJlbnRseURv
d24geyAwIH07Ci0gICAgVmVjdG9yPEdVbmlxdWVQdHI8R2RrRXZlbnQ+PiBtX3RvdWNoRXZlbnRz
OwotICAgIEhhc2hTZXQ8aW50PiBtX3VwZGF0ZWRUb3VjaEV2ZW50czsKICNlbGlmIFBMQVRGT1JN
KFdQRSkKICAgICB1aW50MzJfdCBtX2J1dHRvblN0YXRlOwotICAgIHVpbnQzMl90IG1fbW91c2VC
dXR0b25zQ3VycmVudGx5RG93biB7IDAgfTsKICAgICBWZWN0b3I8c3RydWN0IHdwZV9pbnB1dF90
b3VjaF9ldmVudF9yYXc+IG1fdG91Y2hFdmVudHM7CiAgICAgSGFzaFNldDx1bnNpZ25lZCwgRGVm
YXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPHVuc2lnbmVkPj4gbV91cGRhdGVkVG91Y2hFdmVudHM7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL0V2ZW50U2VuZGVyUHJveHlHdGsuY3BwIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvRXZlbnRTZW5kZXJQcm94eUd0ay5jcHAKaW5kZXggODQ4
MWYxZDdhNWUyLi4wOTU1ZjUxNjg3MWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvZ3RrL0V2ZW50U2VuZGVyUHJveHlHdGsuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvZ3RrL0V2ZW50U2VuZGVyUHJveHlHdGsuY3BwCkBAIC0zNSwxMSArMzUsMTAgQEAKIAogI2lu
Y2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgogI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCisj
aW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VJbnRlcm5hbC5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
R3RrVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtWZXJzaW9uaW5nLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPGdkay9nZGsuaD4KICNp
bmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CiAjaW5j
bHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgpAQCAtNTksMjIgKzU4LDYgQEAgZW51bSBLZXlM
b2NhdGlvbkNvZGUgewogfTsKIAogCi1zdHJ1Y3QgV1RSRXZlbnRRdWV1ZUl0ZW0gewotICAgIEdk
a0V2ZW50KiBldmVudDsKLSAgICBndWxvbmcgZGVsYXk7Ci0KLSAgICBXVFJFdmVudFF1ZXVlSXRl
bSgpCi0gICAgICAgIDogZXZlbnQoMCkKLSAgICAgICAgLCBkZWxheSgwKQotICAgIHsKLSAgICB9
Ci0gICAgV1RSRXZlbnRRdWV1ZUl0ZW0oR2RrRXZlbnQqIGV2ZW50LCBndWxvbmcgZGVsYXkpCi0g
ICAgICAgIDogZXZlbnQoZXZlbnQpCi0gICAgICAgICwgZGVsYXkoZGVsYXkpCi0gICAgewotICAg
IH0KLX07Ci0KIEV2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2VuZGVyUHJveHkoVGVzdENvbnRyb2xs
ZXIqIHRlc3RDb250cm9sbGVyKQogICAgIDogbV90ZXN0Q29udHJvbGxlcih0ZXN0Q29udHJvbGxl
cikKICAgICAsIG1fdGltZSgwKQpAQCAtMTE5LDI4ICsxMDIsNiBAQCBzdGF0aWMgZ3VpbnQgd2Vi
a2l0TW9kaWZpZXJzVG9HREtNb2RpZmllcnMoV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVycykK
ICAgICByZXR1cm4gbW9kaWZpZXJzOwogfQogCi1HZGtFdmVudCogRXZlbnRTZW5kZXJQcm94eTo6
Y3JlYXRlTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUgZXZlbnRUeXBlLCB1bnNpZ25lZCBi
dXR0b24sIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzKQotewotICAgIEdka0V2ZW50KiBtb3Vz
ZUV2ZW50ID0gZ2RrX2V2ZW50X25ldyhldmVudFR5cGUpOwotCi0gICAgbW91c2VFdmVudC0+YnV0
dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKLSAgICBtb3VzZUV2ZW50LT5idXR0b24ueCA9IG1fcG9zaXRp
b24ueDsKLSAgICBtb3VzZUV2ZW50LT5idXR0b24ueSA9IG1fcG9zaXRpb24ueTsKLSAgICBtb3Vz
ZUV2ZW50LT5idXR0b24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQo
bV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpKTsKLSAgICBn
X29iamVjdF9yZWYobW91c2VFdmVudC0+YnV0dG9uLndpbmRvdyk7Ci0gICAgZ2RrX2V2ZW50X3Nl
dF9kZXZpY2UobW91c2VFdmVudCwgZ2RrX3NlYXRfZ2V0X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0
X2RlZmF1bHRfc2VhdChnZGtfd2luZG93X2dldF9kaXNwbGF5KG1vdXNlRXZlbnQtPmJ1dHRvbi53
aW5kb3cpKSkpOwotICAgIG1vdXNlRXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IHdlYmtpdE1vZGlmaWVy
c1RvR0RLTW9kaWZpZXJzKG1vZGlmaWVycykgfCBtX21vdXNlQnV0dG9uc0N1cnJlbnRseURvd247
Ci0gICAgbW91c2VFdmVudC0+YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOwotICAgIG1v
dXNlRXZlbnQtPmJ1dHRvbi5heGVzID0gMDsKLQotICAgIGludCB4Um9vdCwgeVJvb3Q7Ci0gICAg
Z2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMobW91c2VFdmVudC0+YnV0dG9uLndpbmRvdywgbV9w
b3NpdGlvbi54LCBtX3Bvc2l0aW9uLnksICZ4Um9vdCwgJnlSb290KTsKLSAgICBtb3VzZUV2ZW50
LT5idXR0b24ueF9yb290ID0geFJvb3Q7Ci0gICAgbW91c2VFdmVudC0+YnV0dG9uLnlfcm9vdCA9
IHlSb290OwotCi0gICAgcmV0dXJuIG1vdXNlRXZlbnQ7Ci19Ci0KIHZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQgYnV0dG9uKQogewogICAgIGlmICht
X3RpbWUgLSBtX2NsaWNrVGltZSA8IDEgJiYgbV9wb3NpdGlvbiA9PSBtX2NsaWNrUG9zaXRpb24g
JiYgYnV0dG9uID09IG1fY2xpY2tCdXR0b24pIHsKQEAgLTE1NSw0MSArMTE2LDEyIEBAIHZvaWQg
RXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQgYnV0dG9uKQog
ICAgIG1fY2xpY2tCdXR0b24gPSBidXR0b247CiB9CiAKLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6
ZGlzcGF0Y2hFdmVudChHZGtFdmVudCogZXZlbnQpCi17Ci0gICAgQVNTRVJUKG1fdGVzdENvbnRy
b2xsZXItPm1haW5XZWJWaWV3KCkpOwotICAgIGd0a19tYWluX2RvX2V2ZW50KGV2ZW50KTsKLSAg
ICBnZGtfZXZlbnRfZnJlZShldmVudCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6cmVw
bGF5U2F2ZWRFdmVudHMoKQotewotICAgIHdoaWxlICghbV9ldmVudFF1ZXVlLmlzRW1wdHkoKSkg
ewotICAgICAgICBXVFJFdmVudFF1ZXVlSXRlbSBpdGVtID0gbV9ldmVudFF1ZXVlLnRha2VGaXJz
dCgpOwotICAgICAgICBpZiAoaXRlbS5kZWxheSkKLSAgICAgICAgICAgIGdfdXNsZWVwKGl0ZW0u
ZGVsYXkgKiAxMDAwKTsKLQotICAgICAgICBkaXNwYXRjaEV2ZW50KGl0ZW0uZXZlbnQpOwotICAg
IH0KLX0KLQotdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kT3JRdWV1ZUV2ZW50KEdka0V2ZW50
KiBldmVudCkKLXsKLSAgICBpZiAobV9ldmVudFF1ZXVlLmlzRW1wdHkoKSB8fCAhbV9ldmVudFF1
ZXVlLmxhc3QoKS5kZWxheSkgewotICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fZXZlbnRRdWV1ZS5sYXN0KCkuZXZlbnQgPSBldmVu
dDsKLSAgICByZXBsYXlTYXZlZEV2ZW50cygpOwotfQotCi1pbnQgZ2V0R0RLS2V5U3ltRm9yS2V5
UmVmKFdLU3RyaW5nUmVmIGtleVJlZiwgdW5zaWduZWQgbG9jYXRpb24sIGd1aW50KiBtb2RpZmll
cnMpCitzdGF0aWMgaW50IGdldEdES0tleVN5bUZvcktleVJlZihXS1N0cmluZ1JlZiBrZXlSZWYs
IHVuc2lnbmVkIGxvY2F0aW9uLCBndWludCogbW9kaWZpZXJzKQogewogICAgIGlmIChsb2NhdGlv
biA9PSBET01LZXlMb2NhdGlvbk51bXBhZCkgewogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhrZXlSZWYsICJsZWZ0QXJyb3ciKSkKICAgICAgICAgICAgIHJldHVybiBH
REtfS0VZX0tQX0xlZnQ7Ci0gICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KGtleVJlZiwgInJpZ2h0QXJyb3IiKSkKKyAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoa2V5UmVmLCAicmlnaHRBcnJvdyIpKQogICAgICAgICAgICAgcmV0dXJuIEdES19L
RVlfS1BfUmlnaHQ7CiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtl
eVJlZiwgInVwQXJyb3ciKSkKICAgICAgICAgICAgIHJldHVybiBHREtfS0VZX0tQX1VwOwpAQCAt
Mjk0LDI4ICsyMjYsMTYgQEAgaW50IGdldEdES0tleVN5bUZvcktleVJlZihXS1N0cmluZ1JlZiBr
ZXlSZWYsIHVuc2lnbmVkIGxvY2F0aW9uLCBndWludCogbW9kaWZpZXIKICAgICByZXR1cm4gZ2Rr
X3VuaWNvZGVfdG9fa2V5dmFsKHN0YXRpY19jYXN0PGd1aW50MzI+KGJ1ZmZlci5nZXQoKVswXSkp
OwogfQogCitzdGF0aWMgaW5saW5lIFdlYktpdFdlYlZpZXdCYXNlKiB0b1dlYktpdEdMaWJBUEko
UGxhdGZvcm1XS1ZpZXcgdmlldykKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJLaXRXZWJW
aWV3QmFzZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgV2ViS2l0V2ViVmlld0Jhc2UqPih2aWV3
KSk7Cit9CisKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXlS
ZWYsIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMsIHVuc2lnbmVkIGxvY2F0aW9uKQogewog
ICAgIGd1aW50IG1vZGlmaWVycyA9IHdlYmtpdE1vZGlmaWVyc1RvR0RLTW9kaWZpZXJzKHdrTW9k
aWZpZXJzKTsKICAgICBpbnQgZ2RrS2V5U3ltID0gZ2V0R0RLS2V5U3ltRm9yS2V5UmVmKGtleVJl
ZiwgbG9jYXRpb24sICZtb2RpZmllcnMpOwotCi0gICAgR2RrRXZlbnQqIHByZXNzRXZlbnQgPSBn
ZGtfZXZlbnRfbmV3KEdES19LRVlfUFJFU1MpOwotICAgIHByZXNzRXZlbnQtPmtleS5rZXl2YWwg
PSBnZGtLZXlTeW07Ci0gICAgcHJlc3NFdmVudC0+a2V5LnN0YXRlID0gbW9kaWZpZXJzOwotICAg
IHByZXNzRXZlbnQtPmtleS53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdF
VChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSk7Ci0g
ICAgZ19vYmplY3RfcmVmKHByZXNzRXZlbnQtPmtleS53aW5kb3cpOwotICAgIEdka0Rpc3BsYXkq
IGRpc3BsYXkgPSBnZGtfd2luZG93X2dldF9kaXNwbGF5KHByZXNzRXZlbnQtPmtleS53aW5kb3cp
OwotICAgIGdka19ldmVudF9zZXRfZGV2aWNlKHByZXNzRXZlbnQsIGdka19zZWF0X2dldF9wb2lu
dGVyKGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3NlYXQoZGlzcGxheSkpKTsKLQotICAgIEdVbmlx
dWVPdXRQdHI8R2RrS2V5bWFwS2V5PiBrZXlzOwotICAgIGdpbnQgbktleXM7Ci0gICAgaWYgKGdk
a19rZXltYXBfZ2V0X2VudHJpZXNfZm9yX2tleXZhbChnZGtfa2V5bWFwX2dldF9mb3JfZGlzcGxh
eShkaXNwbGF5KSwgZ2RrS2V5U3ltLCAma2V5cy5vdXRQdHIoKSwgJm5LZXlzKSAmJiBuS2V5cykK
LSAgICAgICAgcHJlc3NFdmVudC0+a2V5LmhhcmR3YXJlX2tleWNvZGUgPSBrZXlzLmdldCgpWzBd
LmtleWNvZGU7Ci0KLSAgICBHZGtFdmVudCogcmVsZWFzZUV2ZW50ID0gZ2RrX2V2ZW50X2NvcHko
cHJlc3NFdmVudCk7Ci0gICAgZGlzcGF0Y2hFdmVudChwcmVzc0V2ZW50KTsKLSAgICByZWxlYXNl
RXZlbnQtPmtleS50eXBlID0gR0RLX0tFWV9SRUxFQVNFOwotICAgIGRpc3BhdGNoRXZlbnQocmVs
ZWFzZUV2ZW50KTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVLZXlFdmVudCh0b1dl
YktpdEdMaWJBUEkobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3
KCkpLCBnZGtLZXlTeW0sIG1vZGlmaWVycyk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6
bW91c2VEb3duKHVuc2lnbmVkIGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVycykK
QEAgLTMyOCw0MCArMjQ4LDIzIEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VEb3duKHVu
c2lnbmVkIGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVycykKICAgICBpZiAobV9t
b3VzZUJ1dHRvbnNDdXJyZW50bHlEb3duICYgbW9kaWZpZXIpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIC8vIE5vcm1hbGx5IEdESyB3aWxsIHNlbmQgYm90aCBHREtfQlVUVE9OX1BSRVNTIGFuZCBH
REtfMkJVVFRPTl9QUkVTUyBmb3IKLSAgICAvLyB0aGUgc2Vjb25kIGJ1dHRvbiBwcmVzcyBkdXJp
bmcgZG91YmxlLWNsaWNrcy4gV2ViS2l0IEdUSysgc2VsZWN0aXZlbHkKLSAgICAvLyBpZ25vcmVz
IHRoZSBmaXJzdCBHREtfQlVUVE9OX1BSRVNTIG9mIHRoYXQgcGFpciB1c2luZyBnZGtfZXZlbnRf
cGVlay4KLSAgICAvLyBTaW5jZSBvdXIgZXZlbnRzIGFyZW4ndCBldmVyIGdvaW5nIG9udG8gdGhl
IEdESyBldmVudCBxdWV1ZSwgV2ViS2l0IHdvbid0Ci0gICAgLy8gYmUgYWJsZSB0byBmaWx0ZXIg
b3V0IHRoZSBmaXJzdCBHREtfQlVUVE9OX1BSRVNTLCBzbyB3ZSBqdXN0IGRvbid0IHNlbmQKLSAg
ICAvLyBpdCBoZXJlLiBFdmVudHVhbGx5IHRoaXMgY29kZSBzaG91bGQgcHJvYmFibHkgZmlndXJl
IG91dCBhIHdheSB0byBnZXQgYWxsCi0gICAgLy8gYXBwcm9wcmlhdGUgZXZlbnRzIG9udG8gdGhl
IGV2ZW50IHF1ZXVlIGFuZCB0aGlzIHdvcmstYXJvdW5kIHNob3VsZCBiZQotICAgIC8vIHJlbW92
ZWQuCiAgICAgdXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihidXR0b24pOwotCi0gICAgR2RrRXZl
bnRUeXBlIGV2ZW50VHlwZTsKLSAgICBpZiAobV9jbGlja0NvdW50ID09IDIpCi0gICAgICAgIGV2
ZW50VHlwZSA9IEdES18yQlVUVE9OX1BSRVNTOwotICAgIGVsc2UgaWYgKG1fY2xpY2tDb3VudCA9
PSAzKQotICAgICAgICBldmVudFR5cGUgPSBHREtfM0JVVFRPTl9QUkVTUzsKLSAgICBlbHNlCi0g
ICAgICAgIGV2ZW50VHlwZSA9IEdES19CVVRUT05fUFJFU1M7Ci0KLSAgICBHZGtFdmVudCogZXZl
bnQgPSBjcmVhdGVNb3VzZUJ1dHRvbkV2ZW50KGV2ZW50VHlwZSwgZ2RrQnV0dG9uLCB3a01vZGlm
aWVycyk7CiAgICAgbV9tb3VzZUJ1dHRvbnNDdXJyZW50bHlEb3duIHw9IG1vZGlmaWVyOwotICAg
IHNlbmRPclF1ZXVlRXZlbnQoZXZlbnQpOworCisgICAgd2Via2l0V2ViVmlld0Jhc2VTeW50aGVz
aXplTW91c2VFdmVudCh0b1dlYktpdEdMaWJBUEkobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZp
ZXcoKS0+cGxhdGZvcm1WaWV3KCkpLAorICAgICAgICBNb3VzZUV2ZW50VHlwZTo6UHJlc3MsIGdk
a0J1dHRvbiwgbV9tb3VzZUJ1dHRvbnNDdXJyZW50bHlEb3duLCBtX3Bvc2l0aW9uLngsIG1fcG9z
aXRpb24ueSwgd2Via2l0TW9kaWZpZXJzVG9HREtNb2RpZmllcnMod2tNb2RpZmllcnMpLCBtX2Ns
aWNrQ291bnQpOwogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlVXAodW5zaWduZWQg
YnV0dG9uLCBXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQogewotICAgIG1fY2xpY2tCdXR0
b24gPSBrV0tFdmVudE1vdXNlQnV0dG9uTm9CdXR0b247CiAgICAgdW5zaWduZWQgZ2RrQnV0dG9u
ID0gZXZlbnRTZW5kZXJCdXR0b25Ub0dES0J1dHRvbihidXR0b24pOwotICAgIEdka0V2ZW50KiBl
dmVudCA9IGNyZWF0ZU1vdXNlQnV0dG9uRXZlbnQoR0RLX0JVVFRPTl9SRUxFQVNFLCBnZGtCdXR0
b24sIHdrTW9kaWZpZXJzKTsKICAgICBhdXRvIG1vZGlmaWVyID0gV2ViQ29yZTo6c3RhdGVNb2Rp
ZmllckZvckdka0J1dHRvbihnZGtCdXR0b24pOwogICAgIG1fbW91c2VCdXR0b25zQ3VycmVudGx5
RG93biAmPSB+bW9kaWZpZXI7Ci0gICAgc2VuZE9yUXVldWVFdmVudChldmVudCk7CisgICAgd2Vi
a2l0V2ViVmlld0Jhc2VTeW50aGVzaXplTW91c2VFdmVudCh0b1dlYktpdEdMaWJBUEkobV90ZXN0
Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpLAorICAgICAgICBNb3Vz
ZUV2ZW50VHlwZTo6UmVsZWFzZSwgZ2RrQnV0dG9uLCBtX21vdXNlQnV0dG9uc0N1cnJlbnRseURv
d24sIG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55LCB3ZWJraXRNb2RpZmllcnNUb0dES01vZGlm
aWVycyh3a01vZGlmaWVycyksIDApOwogCiAgICAgbV9jbGlja1Bvc2l0aW9uID0gbV9wb3NpdGlv
bjsKLSAgICBtX2NsaWNrVGltZSA9IEdES19DVVJSRU5UX1RJTUU7CisgICAgbV9jbGlja1RpbWUg
PSBtX3RpbWU7CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VNb3ZlVG8oZG91Ymxl
IHgsIGRvdWJsZSB5KQpAQCAtMzY5LDIzICsyNzIsOCBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6
Om1vdXNlTW92ZVRvKGRvdWJsZSB4LCBkb3VibGUgeSkKICAgICBtX3Bvc2l0aW9uLnggPSB4Owog
ICAgIG1fcG9zaXRpb24ueSA9IHk7CiAKLSAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtfZXZlbnRf
bmV3KEdES19NT1RJT05fTk9USUZZKTsKLSAgICBldmVudC0+bW90aW9uLnggPSBtX3Bvc2l0aW9u
Lng7Ci0gICAgZXZlbnQtPm1vdGlvbi55ID0gbV9wb3NpdGlvbi55OwotCi0gICAgZXZlbnQtPm1v
dGlvbi50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKLSAgICBldmVudC0+bW90aW9uLndpbmRvdyA9
IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKG1fdGVzdENvbnRyb2xsZXItPm1haW5X
ZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSk7Ci0gICAgZ19vYmplY3RfcmVmKGV2ZW50LT5tb3Rp
b24ud2luZG93KTsKLSAgICBnZGtfZXZlbnRfc2V0X2RldmljZShldmVudCwgZ2RrX3NlYXRfZ2V0
X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHRfc2VhdChnZGtfd2luZG93X2dldF9kaXNw
bGF5KGV2ZW50LT5tb3Rpb24ud2luZG93KSkpKTsKLSAgICBldmVudC0+bW90aW9uLnN0YXRlID0g
bV9tb3VzZUJ1dHRvbnNDdXJyZW50bHlEb3duOwotICAgIGV2ZW50LT5tb3Rpb24uYXhlcyA9IDA7
Ci0KLSAgICBpbnQgeFJvb3QsIHlSb290OwotICAgIGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRz
KGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKG1fdGVzdENvbnRyb2xsZXItPm1haW5X
ZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSksIG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55ICwg
JnhSb290LCAmeVJvb3QpOwotICAgIGV2ZW50LT5tb3Rpb24ueF9yb290ID0geFJvb3Q7Ci0gICAg
ZXZlbnQtPm1vdGlvbi55X3Jvb3QgPSB5Um9vdDsKLQotICAgIHNlbmRPclF1ZXVlRXZlbnQoZXZl
bnQpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZU1vdXNlRXZlbnQodG9XZWJLaXRH
TGliQVBJKG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSwK
KyAgICAgICAgTW91c2VFdmVudFR5cGU6Ok1vdGlvbiwgMCwgbV9tb3VzZUJ1dHRvbnNDdXJyZW50
bHlEb3duLCBtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSwgMCwgMCk7CiB9CiAKIHZvaWQgRXZl
bnRTZW5kZXJQcm94eTo6bW91c2VTY3JvbGxCeShpbnQgaG9yaXpvbnRhbCwgaW50IHZlcnRpY2Fs
KQpAQCAtMzk0LDM2ICsyODIsOCBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xs
QnkoaW50IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCkKICAgICBpZiAoIWhvcml6b250YWwgJiYg
IXZlcnRpY2FsKQogICAgICAgICByZXR1cm47CiAKLSAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtf
ZXZlbnRfbmV3KEdES19TQ1JPTEwpOwotICAgIGV2ZW50LT5zY3JvbGwueCA9IG1fcG9zaXRpb24u
eDsKLSAgICBldmVudC0+c2Nyb2xsLnkgPSBtX3Bvc2l0aW9uLnk7Ci0gICAgZXZlbnQtPnNjcm9s
bC50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKLSAgICBldmVudC0+c2Nyb2xsLndpbmRvdyA9IGd0
a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJW
aWV3KCktPnBsYXRmb3JtVmlldygpKSk7Ci0gICAgZ19vYmplY3RfcmVmKGV2ZW50LT5zY3JvbGwu
d2luZG93KTsKLSAgICBnZGtfZXZlbnRfc2V0X2RldmljZShldmVudCwgZ2RrX3NlYXRfZ2V0X3Bv
aW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHRfc2VhdChnZGtfd2luZG93X2dldF9kaXNwbGF5
KGV2ZW50LT5zY3JvbGwud2luZG93KSkpKTsKLQotICAgIC8vIEZvciBtb3JlIHRoYW4gb25lIHRp
Y2sgaW4gYSBzY3JvbGwsIHdlIG5lZWQgc21vb3RoIHNjcm9sbCBldmVudAotICAgIGlmICgoaG9y
aXpvbnRhbCAmJiB2ZXJ0aWNhbCkgfHwgaG9yaXpvbnRhbCA+IDEgfHwgaG9yaXpvbnRhbCA8IC0x
IHx8IHZlcnRpY2FsID4gMSB8fCB2ZXJ0aWNhbCA8IC0xKSB7Ci0gICAgICAgIGV2ZW50LT5zY3Jv
bGwuZGlyZWN0aW9uID0gR0RLX1NDUk9MTF9TTU9PVEg7Ci0gICAgICAgIGV2ZW50LT5zY3JvbGwu
ZGVsdGFfeCA9IC1ob3Jpem9udGFsOwotICAgICAgICBldmVudC0+c2Nyb2xsLmRlbHRhX3kgPSAt
dmVydGljYWw7Ci0KLSAgICAgICAgc2VuZE9yUXVldWVFdmVudChldmVudCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaG9yaXpvbnRhbCA8IDApCi0gICAgICAgIGV2ZW50LT5z
Y3JvbGwuZGlyZWN0aW9uID0gR0RLX1NDUk9MTF9SSUdIVDsKLSAgICBlbHNlIGlmIChob3Jpem9u
dGFsID4gMCkKLSAgICAgICAgZXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPSBHREtfU0NST0xMX0xF
RlQ7Ci0gICAgZWxzZSBpZiAodmVydGljYWwgPCAwKQotICAgICAgICBldmVudC0+c2Nyb2xsLmRp
cmVjdGlvbiA9IEdES19TQ1JPTExfRE9XTjsKLSAgICBlbHNlIGlmICh2ZXJ0aWNhbCA+IDApCi0g
ICAgICAgIGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1NDUk9MTF9VUDsKLSAgICBlbHNl
Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0KLSAgICBzZW5kT3JRdWV1ZUV2ZW50
KGV2ZW50KTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVXaGVlbEV2ZW50KHRvV2Vi
S2l0R0xpYkFQSShtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXco
KSksCisgICAgICAgIGhvcml6b250YWwsIHZlcnRpY2FsLCBtX3Bvc2l0aW9uLngsIG1fcG9zaXRp
b24ueSwgV2hlZWxFdmVudFBoYXNlOjpOb1BoYXNlLCBXaGVlbEV2ZW50UGhhc2U6Ok5vUGhhc2Up
OwogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5KGlu
dCBob3Jpem9udGFsLCBpbnQgdmVydGljYWwsIGJvb2wgcGFnZWQpCkBAIC00MzQsMTUxICsyOTQs
MTAyIEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6Y29udGludW91c01vdXNlU2Nyb2xsQnkoaW50
IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCwgYm9vCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtfZXZlbnRfbmV3KEdES19TQ1JPTEwpOwotICAgIGV2
ZW50LT5zY3JvbGwueCA9IG1fcG9zaXRpb24ueDsKLSAgICBldmVudC0+c2Nyb2xsLnkgPSBtX3Bv
c2l0aW9uLnk7Ci0gICAgZXZlbnQtPnNjcm9sbC50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKLSAg
ICBldmVudC0+c2Nyb2xsLndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VU
KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSk7Ci0gICAg
Z19vYmplY3RfcmVmKGV2ZW50LT5zY3JvbGwud2luZG93KTsKLSAgICBnZGtfZXZlbnRfc2V0X2Rl
dmljZShldmVudCwgZ2RrX3NlYXRfZ2V0X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHRf
c2VhdChnZGtfd2luZG93X2dldF9kaXNwbGF5KGV2ZW50LT5zY3JvbGwud2luZG93KSkpKTsKLQot
ICAgIGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1NDUk9MTF9TTU9PVEg7Ci0gICAgZXZl
bnQtPnNjcm9sbC5kZWx0YV94ID0gLWhvcml6b250YWwgLyBwaXhlbHNQZXJTY3JvbGxUaWNrOwot
ICAgIGV2ZW50LT5zY3JvbGwuZGVsdGFfeSA9IC12ZXJ0aWNhbCAvIHBpeGVsc1BlclNjcm9sbFRp
Y2s7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplV2hlZWxFdmVudCh0b1dlYktpdEdM
aWJBUEkobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpLAor
ICAgICAgICBob3Jpem9udGFsIC8gcGl4ZWxzUGVyU2Nyb2xsVGljaywgdmVydGljYWwgLyBwaXhl
bHNQZXJTY3JvbGxUaWNrLCBtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSwgV2hlZWxFdmVudFBo
YXNlOjpOb1BoYXNlLCBXaGVlbEV2ZW50UGhhc2U6Ok5vUGhhc2UpOworfQorCit2b2lkIEV2ZW50
U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyhpbnQg
aG9yaXpvbnRhbCwgaW50IHZlcnRpY2FsLCBpbnQgcGhhc2UsIGludCBtb21lbnR1bSkKK3sKKyAg
ICBXaGVlbEV2ZW50UGhhc2UgZXZlbnRQaGFzZSA9IFdoZWVsRXZlbnRQaGFzZTo6Tm9QaGFzZTsK
KyAgICBzd2l0Y2ggKHBoYXNlKSB7CisgICAgY2FzZSAwOgorICAgICAgICBldmVudFBoYXNlID0g
V2hlZWxFdmVudFBoYXNlOjpOb1BoYXNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6Cisg
ICAgICAgIGV2ZW50UGhhc2UgPSBXaGVlbEV2ZW50UGhhc2U6OkJlZ2FuOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIDI6CisgICAgICAgIGV2ZW50UGhhc2UgPSBXaGVlbEV2ZW50UGhhc2U6OkNo
YW5nZWQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAgICAgICAgZXZlbnRQaGFzZSA9
IFdoZWVsRXZlbnRQaGFzZTo6RW5kZWQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgODoKKyAg
ICAgICAgZXZlbnRQaGFzZSA9IFdoZWVsRXZlbnRQaGFzZTo6Q2FuY2VsbGVkOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIDEyODoKKyAgICAgICAgZXZlbnRQaGFzZSA9IFdoZWVsRXZlbnRQaGFz
ZTo6TWF5QmVnaW47CisgICAgICAgIGJyZWFrOworICAgIH0KIAotICAgIHNlbmRPclF1ZXVlRXZl
bnQoZXZlbnQpOwotfQorICAgIFdoZWVsRXZlbnRQaGFzZSBldmVudE1vbWVudHVtUGhhc2UgPSBX
aGVlbEV2ZW50UGhhc2U6Ok5vUGhhc2U7CisgICAgc3dpdGNoIChtb21lbnR1bSkgeworICAgIGNh
c2UgMDoKKyAgICAgICAgZXZlbnRQaGFzZSA9IFdoZWVsRXZlbnRQaGFzZTo6Tm9QaGFzZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgICBldmVudFBoYXNlID0gV2hlZWxFdmVu
dFBoYXNlOjpCZWdhbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICBldmVu
dFBoYXNlID0gV2hlZWxFdmVudFBoYXNlOjpDaGFuZ2VkOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIDM6CisgICAgICAgIGV2ZW50UGhhc2UgPSBXaGVlbEV2ZW50UGhhc2U6OkVuZGVkOworICAg
ICAgICBicmVhazsKKyAgICB9CiAKLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VTY3JvbGxC
eVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKGludCB4LCBpbnQgeSwgaW50IC8qcGhhc2UqLywg
aW50IC8qbW9tZW50dW0qLykKLXsKLSAgICAvLyBHdGsrIGRvZXMgbm90IGhhdmUgdGhlIGNvbmNl
cHQgb2Ygd2hlZWwgZ2VzdHVyZSBwaGFzZXMgb3IgbW9tZW50dW0uIEp1c3QgcmVsYXkgdG8KLSAg
ICAvLyB0aGUgbW91c2Ugd2hlZWwgaGFuZGxlci4KLSAgICBtb3VzZVNjcm9sbEJ5KHgsIHkpOwor
ICAgIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZVdoZWVsRXZlbnQodG9XZWJLaXRHTGliQVBJ
KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSwKKyAgICAg
ICAgaG9yaXpvbnRhbCwgdmVydGljYWwsIG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55LCBldmVu
dFBoYXNlLCBldmVudE1vbWVudHVtUGhhc2UpOwogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6
OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCiB7Ci0gICAgaWYgKG1fZXZlbnRRdWV1ZS5p
c0VtcHR5KCkpCi0gICAgICAgIG1fZXZlbnRRdWV1ZS5hcHBlbmQoV1RSRXZlbnRRdWV1ZUl0ZW0o
KSk7Ci0KLSAgICBtX2V2ZW50UXVldWUubGFzdCgpLmRlbGF5ID0gbWlsbGlzZWNvbmRzOwogICAg
IG1fdGltZSArPSBtaWxsaXNlY29uZHMgLyAxMDAwLjA7CiB9CiAKLXZvaWQgdXBkYXRlRXZlbnRD
b29yZGluYXRlcyhHZGtFdmVudCogdG91Y2hFdmVudCwgaW50IHgsIGludCB5KQotewotICAgIHRv
dWNoRXZlbnQtPnRvdWNoLnggPSB4OwotICAgIHRvdWNoRXZlbnQtPnRvdWNoLnkgPSB5OwotCi0g
ICAgaW50IHhSb290LCB5Um9vdDsKLSAgICBnZGtfd2luZG93X2dldF9yb290X2Nvb3Jkcyh0b3Vj
aEV2ZW50LT50b3VjaC53aW5kb3csIHgsIHksICZ4Um9vdCwgJnlSb290KTsKLSAgICB0b3VjaEV2
ZW50LT50b3VjaC54X3Jvb3QgPSB4Um9vdDsKLSAgICB0b3VjaEV2ZW50LT50b3VjaC55X3Jvb3Qg
PSB5Um9vdDsKLX0KLQotR1VuaXF1ZVB0cjxHZGtFdmVudD4gRXZlbnRTZW5kZXJQcm94eTo6Y3Jl
YXRlVG91Y2hFdmVudChHZGtFdmVudFR5cGUgZXZlbnRUeXBlLCBpbnQgaWQpCi17Ci0gICAgR1Vu
aXF1ZVB0cjxHZGtFdmVudD4gdG91Y2hFdmVudChnZGtfZXZlbnRfbmV3KGV2ZW50VHlwZSkpOwot
Ci0gICAgdG91Y2hFdmVudC0+dG91Y2guc2VxdWVuY2UgPSBzdGF0aWNfY2FzdDxHZGtFdmVudFNl
cXVlbmNlKj4oR0lOVF9UT19QT0lOVEVSKGlkKSk7Ci0gICAgdG91Y2hFdmVudC0+dG91Y2gud2lu
ZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQobV90ZXN0Q29udHJvbGxlci0+
bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpKTsKLSAgICBnX29iamVjdF9yZWYodG91Y2hF
dmVudC0+dG91Y2gud2luZG93KTsKLSAgICBnZGtfZXZlbnRfc2V0X2RldmljZSh0b3VjaEV2ZW50
LmdldCgpLCBnZGtfc2VhdF9nZXRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGVmYXVsdF9zZWF0
KGdka193aW5kb3dfZ2V0X2Rpc3BsYXkodG91Y2hFdmVudC0+YnV0dG9uLndpbmRvdykpKSk7Ci0g
ICAgdG91Y2hFdmVudC0+dG91Y2gudGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0KLSAgICByZXR1
cm4gdG91Y2hFdmVudDsKLX0KLQogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi12b2lkIEV2ZW50
U2VuZGVyUHJveHk6OmFkZFRvdWNoUG9pbnQoaW50IHgsIGludCB5KQordm9pZCBFdmVudFNlbmRl
clByb3h5OjphZGRUb3VjaFBvaW50KGludCwgaW50KQogewotICAgIC8vIFRvdWNoIElEIGlzIGFy
cmF5IGluZGV4IHBsdXMgb25lLCBzbyAwIGlzIHNraXBwZWQuCi0gICAgR1VuaXF1ZVB0cjxHZGtF
dmVudD4gZXZlbnQgPSBjcmVhdGVUb3VjaEV2ZW50KHN0YXRpY19jYXN0PEdka0V2ZW50VHlwZT4o
R0RLX1RPVUNIX0JFR0lOKSwgbV90b3VjaEV2ZW50cy5zaXplKCkgKyAxKTsKLSAgICB1cGRhdGVF
dmVudENvb3JkaW5hdGVzKGV2ZW50LmdldCgpLCB4LCB5KTsKLSAgICBtX3VwZGF0ZWRUb3VjaEV2
ZW50cy5hZGQoR1BPSU5URVJfVE9fSU5UKGV2ZW50LT50b3VjaC5zZXF1ZW5jZSkpOwotICAgIG1f
dG91Y2hFdmVudHMuYXBwZW5kKHN0ZDo6bW92ZShldmVudCkpOwogfQogCi12b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBpbnQgeCwgaW50IHkpCit2b2lk
IEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQoaW50LCBpbnQsIGludCkKIHsKLSAg
ICBBU1NFUlQoaW5kZXggPj0gMCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KSA8IG1fdG91
Y2hFdmVudHMuc2l6ZSgpKTsKLQotICAgIGNvbnN0IGF1dG8mIGV2ZW50ID0gbV90b3VjaEV2ZW50
c1tpbmRleF07Ci0gICAgQVNTRVJUKGV2ZW50KTsKLQotICAgIGV2ZW50LT50eXBlID0gR0RLX1RP
VUNIX1VQREFURTsKLSAgICB1cGRhdGVFdmVudENvb3JkaW5hdGVzKGV2ZW50LmdldCgpLCB4LCB5
KTsKLSAgICBtX3VwZGF0ZWRUb3VjaEV2ZW50cy5hZGQoR1BPSU5URVJfVE9fSU5UKGV2ZW50LT50
b3VjaC5zZXF1ZW5jZSkpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNlbmRVcGRhdGVk
VG91Y2hFdmVudHMoKQotewotICAgIGZvciAoYXV0byBpZCA6IG1fdXBkYXRlZFRvdWNoRXZlbnRz
KQotICAgICAgICBzZW5kT3JRdWV1ZUV2ZW50KGdka19ldmVudF9jb3B5KG1fdG91Y2hFdmVudHNb
aWQgLSAxXS5nZXQoKSkpOwotCi0gICAgbV91cGRhdGVkVG91Y2hFdmVudHMuY2xlYXIoKTsKIH0K
IAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaFN0YXJ0KCkKIHsKLSAgICBzZW5kVXBkYXRl
ZFRvdWNoRXZlbnRzKCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dG91Y2hNb3ZlKCkK
IHsKLSAgICBzZW5kVXBkYXRlZFRvdWNoRXZlbnRzKCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6dG91Y2hFbmQoKQogewotICAgIHNlbmRVcGRhdGVkVG91Y2hFdmVudHMoKTsKIH0KIAog
dm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaENhbmNlbCgpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpjbGVhclRvdWNoUG9pbnRzKCkKIHsK
LSAgICBtX3VwZGF0ZWRUb3VjaEV2ZW50cy5jbGVhcigpOwotICAgIG1fdG91Y2hFdmVudHMuY2xl
YXIoKTsKIH0KIAotdm9pZCBFdmVudFNlbmRlclByb3h5OjpyZWxlYXNlVG91Y2hQb2ludChpbnQg
aW5kZXgpCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnJlbGVhc2VUb3VjaFBvaW50KGludCkKIHsK
LSAgICBBU1NFUlQoaW5kZXggPj0gMCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KSA8IG1f
dG91Y2hFdmVudHMuc2l6ZSgpKTsKLQotICAgIGNvbnN0IGF1dG8mIGV2ZW50ID0gbV90b3VjaEV2
ZW50c1tpbmRleF07Ci0gICAgZXZlbnQtPnR5cGUgPSBHREtfVE9VQ0hfRU5EOwotICAgIG1fdXBk
YXRlZFRvdWNoRXZlbnRzLmFkZChHUE9JTlRFUl9UT19JTlQoZXZlbnQtPnRvdWNoLnNlcXVlbmNl
KSk7CiB9CiAKLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6Y2FuY2VsVG91Y2hQb2ludChpbnQgaW5k
ZXgpCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNhbmNlbFRvdWNoUG9pbnQoaW50KQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hQ
b2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCit2b2lkIEV2ZW50U2VuZGVyUHJv
eHk6OnNldFRvdWNoUG9pbnRSYWRpdXMoaW50LCBpbnQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKFdLRXZlbnRN
b2RpZmllcnMgbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQordm9pZCBFdmVudFNlbmRlclByb3h5Ojpz
ZXRUb3VjaE1vZGlmaWVyKFdLRXZlbnRNb2RpZmllcnMsIGJvb2wpCiB7Ci0gICAgZ3VpbnQgc3Rh
dGUgPSB3ZWJraXRNb2RpZmllcnNUb0dES01vZGlmaWVycyhtb2RpZmllcik7Ci0KLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGV2ZW50IDogbV90b3VjaEV2ZW50cykgewotICAgICAgICBpZiAoZXZlbnQt
PnR5cGUgPT0gR0RLX1RPVUNIX0VORCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IGlmIChlbmFibGUpCi0gICAgICAgICAgICBldmVudC0+dG91Y2guc3RhdGUgfD0gc3RhdGU7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV2ZW50LT50b3VjaC5zdGF0ZSAmPSB+KHN0YXRlKTsK
LQotICAgICAgICBtX3VwZGF0ZWRUb3VjaEV2ZW50cy5hZGQoR1BPSU5URVJfVE9fSU5UKGV2ZW50
LT50b3VjaC5zZXF1ZW5jZSkpOwotICAgIH0KIH0KICNlbmRpZiAvLyBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQogCg==
</data>
<flag name="review"
          id="415576"
          type_id="1"
          status="+"
          setter="aperez"
    />
          </attachment>
      

    </bug>

</bugzilla>