<?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>230630</bug_id>
          
          <creation_ts>2021-09-22 09:44:12 -0700</creation_ts>
          <short_desc>[WPE] Add gamepad support</short_desc>
          <delta_ts>2022-08-24 04:13:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://github.com/WebPlatformForEmbedded/libwpe/pull/88</see_also>
    
    <see_also>https://github.com/Igalia/cog/pull/361</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>243822</dependson>
    
    <dependson>244245</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Víctor M. Jáquez L.">vjaquez</reporter>
          <assigned_to name="Víctor M. Jáquez L.">vjaquez</assigned_to>
          <cc>annulen</cc>
    
    <cc>aperez</cc>
    
    <cc>clopez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zan</cc>
    
    <cc>zdobersek</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1796110</commentid>
    <comment_count>0</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2021-09-22 09:44:12 -0700</bug_when>
    <thetext>Add gamepad support through libwpe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796445</commentid>
    <comment_count>1</comment_count>
      <attachid>439033</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2021-09-23 03:51:02 -0700</bug_when>
    <thetext>Created attachment 439033
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796566</commentid>
    <comment_count>2</comment_count>
      <attachid>439064</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2021-09-23 10:54:17 -0700</bug_when>
    <thetext>Created attachment 439064
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814523</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2021-11-12 10:55:30 -0800</bug_when>
    <thetext>Patch failed to build on the WPE EWS

Is because it needs https://github.com/WebPlatformForEmbedded/libwpe/pull/88 into libwpe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814728</commentid>
    <comment_count>4</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2021-11-12 20:12:00 -0800</bug_when>
    <thetext>(In reply to Carlos Alberto Lopez Perez from comment #3)
&gt; Patch failed to build on the WPE EWS
&gt; 
&gt; Is because it needs https://github.com/WebPlatformForEmbedded/libwpe/pull/88
&gt; into libwpe?

Yes, that API is required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814962</commentid>
    <comment_count>5</comment_count>
      <attachid>439064</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2021-11-14 23:51:29 -0800</bug_when>
    <thetext>Comment on attachment 439064
Patch

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

&gt; Source/WebKit/UIProcess/API/wpe/WPEView.cpp:467
&gt; +#if ENABLE(GAMEPAD)
&gt; +WebKit::WebPageProxy* View::platformWebPageProxyForGamepadInput()
&gt; +{
&gt; +    const auto&amp; views = viewsVector();
&gt; +    if (views.isEmpty())
&gt; +        return nullptr;
&gt; +
&gt; +    auto index = views.findMatching([](View* view) {
&gt; +        return view-&gt;viewState().contains(WebCore::ActivityState::IsVisible)
&gt; +            &amp;&amp; view-&gt;viewState().contains(WebCore::ActivityState::IsFocused);
&gt; +    });
&gt; +
&gt; +    if (index != notFound)
&gt; +        return &amp;(views[index]-&gt;page());
&gt; +
&gt; +    return nullptr;
&gt; +}
&gt; +#endif

This is not ideal. The wpe_gamepad API should be handled so that the embedding application has the control over what view the provider is assigned to, and covering the possibility of that provider being assigned to a different view during its lifetime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815989</commentid>
    <comment_count>6</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2021-11-17 10:05:59 -0800</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #5)
&gt; Comment on attachment 439064 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=439064&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/wpe/WPEView.cpp:467
&gt; &gt; +#if ENABLE(GAMEPAD)
&gt; &gt; +WebKit::WebPageProxy* View::platformWebPageProxyForGamepadInput()
&gt; &gt; +{
&gt; &gt; +    const auto&amp; views = viewsVector();
&gt; &gt; +    if (views.isEmpty())
&gt; &gt; +        return nullptr;
&gt; &gt; +
&gt; &gt; +    auto index = views.findMatching([](View* view) {
&gt; &gt; +        return view-&gt;viewState().contains(WebCore::ActivityState::IsVisible)
&gt; &gt; +            &amp;&amp; view-&gt;viewState().contains(WebCore::ActivityState::IsFocused);
&gt; &gt; +    });
&gt; &gt; +
&gt; &gt; +    if (index != notFound)
&gt; &gt; +        return &amp;(views[index]-&gt;page());
&gt; &gt; +
&gt; &gt; +    return nullptr;
&gt; &gt; +}
&gt; &gt; +#endif
&gt; 
&gt; This is not ideal. The wpe_gamepad API should be handled so that the
&gt; embedding application has the control over what view the provider is
&gt; assigned to, and covering the possibility of that provider being assigned to
&gt; a different view during its lifetime.

Right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1839599</commentid>
    <comment_count>7</comment_count>
      <attachid>451516</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2022-02-10 04:31:41 -0800</bug_when>
    <thetext>Created attachment 451516
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849250</commentid>
    <comment_count>8</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2022-03-08 07:19:40 -0800</bug_when>
    <thetext> (In reply to Zan Dobersek from comment #5)
&gt;
&gt; This is not ideal. The wpe_gamepad API should be handled so that the
&gt; embedding application has the control over what view the provider is
&gt; assigned to, and covering the possibility of that provider being assigned to
&gt; a different view during its lifetime.

I guess this request is now addressed. So, gently ping :)

Remind this patch needs: https://github.com/WebPlatformForEmbedded/libwpe/pull/88

And, to test it in cog: https://github.com/Igalia/cog/pull/361</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1866432</commentid>
    <comment_count>9</comment_count>
      <attachid>451516</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-05-04 06:45:40 -0700</bug_when>
    <thetext>Comment on attachment 451516
Patch

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

Other than a few suggestions here and there, this is looking quite good to me.
Probably we can merge it after a round of polish :-)

&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepad.cpp:48
&gt; +    static struct wpe_gamepad_client_interface s_client = {

This can be “static const”.

&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepad.cpp:51
&gt; +            auto&amp; self = *reinterpret_cast&lt;WPEGamepad*&gt;(data);

Use static_cast&lt;WPEGamepad*&gt; here.

&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepad.cpp:57
&gt; +            auto&amp; self = *reinterpret_cast&lt;WPEGamepad*&gt;(data);

Same here, use static_cast&lt;WPEGamepad*&gt;.

&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepad.cpp:66
&gt; +        value.setValue(0.0);

There is a Vector(value, size) constructor that can be used initialize this
automatically during construction, without needing an explicit resize+loop.
See note below.

&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepad.cpp:76
&gt; +        return;

I would actually ASSERT(!m_gamepad) because the pointer is always
initialized in the constructor, so unless something weird happens the
pointer should always be valid during the lifetime of the WPEGamepad
instance.

&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepad.h:51
&gt; +    Vector&lt;SharedGamepadValue&gt; m_buttonValues;

Given that GAMEPAD_BUTTON_COUNT is a constant, this could be a
Vector&lt;SharedGamepadValue, GAMEPAD_BUTTON_COUNT&gt; to store the
values inline inside the WPEGamepad. As a side effect that avoids
a heap allocation and has better cache locality (less pointer chasing).

Also you can do the initialization here:

    Vector&lt;SharedGamepadValue, GAMEPAD_BUTTON_COUNT&gt; m_buttonValues { GAMEPAD_BUTTON_COUNT, 0.0 };

&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepad.h:54
&gt; +    struct wpe_gamepad* m_gamepad { nullptr };

How about using a std::unique_ptr&lt;struct wpe_gamepad, wpe_gamepad_destroy&gt; here?

&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepadProvider.cpp:57
&gt; +    static struct wpe_gamepad_provider_client_interface s_client = {

This can be “static const”.

&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepadProvider.cpp:60
&gt; +            auto&amp; provider = *reinterpret_cast&lt;WPEGamepadProvider*&gt;(data);

static_cast

&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepadProvider.cpp:65
&gt; +            auto&amp; provider = *reinterpret_cast&lt;WPEGamepadProvider*&gt;(data);

static_cast

&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepadProvider.cpp:155
&gt; +void WPEGamepadProvider::gamepadDiconnected(unsigned id)

Typo: gamepadDiconnected -&gt; gamepadDisconnected

&gt; Source/WebKit/UIProcess/API/wpe/WPEView.cpp:54
&gt; +}

I&apos;m not much of a fan of adding global data, but I would need to think a
bit to try to come up with some alternative. Right not I don&apos;t have anything
from the top of my head, and this definitely works, so I won&apos;t ask to change
it 😉️</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1866545</commentid>
    <comment_count>10</comment_count>
      <attachid>451516</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2022-05-04 11:38:11 -0700</bug_when>
    <thetext>Comment on attachment 451516
Patch

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

&gt;&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepad.cpp:48
&gt;&gt; +    static struct wpe_gamepad_client_interface s_client = {
&gt; 
&gt; This can be “static const”.

it cannot be const because the function&apos;s signature for wpe_gamepad_set_client isn&apos;t either.

&gt;&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepad.cpp:51
&gt;&gt; +            auto&amp; self = *reinterpret_cast&lt;WPEGamepad*&gt;(data);
&gt; 
&gt; Use static_cast&lt;WPEGamepad*&gt; here.

done

&gt;&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepad.cpp:57
&gt;&gt; +            auto&amp; self = *reinterpret_cast&lt;WPEGamepad*&gt;(data);
&gt; 
&gt; Same here, use static_cast&lt;WPEGamepad*&gt;.

done

&gt;&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepad.cpp:66
&gt;&gt; +        value.setValue(0.0);
&gt; 
&gt; There is a Vector(value, size) constructor that can be used initialize this
&gt; automatically during construction, without needing an explicit resize+loop.
&gt; See note below.

I didn&apos;t initialized it in the header but in the class constructor, because libwpe.h enums aren&apos;t exposed in the header file.

&gt;&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepad.cpp:76
&gt;&gt; +        return;
&gt; 
&gt; I would actually ASSERT(!m_gamepad) because the pointer is always
&gt; initialized in the constructor, so unless something weird happens the
&gt; pointer should always be valid during the lifetime of the WPEGamepad
&gt; instance.

added the ASSERT

&gt;&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepad.h:51
&gt;&gt; +    Vector&lt;SharedGamepadValue&gt; m_buttonValues;
&gt; 
&gt; Given that GAMEPAD_BUTTON_COUNT is a constant, this could be a
&gt; Vector&lt;SharedGamepadValue, GAMEPAD_BUTTON_COUNT&gt; to store the
&gt; values inline inside the WPEGamepad. As a side effect that avoids
&gt; a heap allocation and has better cache locality (less pointer chasing).
&gt; 
&gt; Also you can do the initialization here:
&gt; 
&gt;     Vector&lt;SharedGamepadValue, GAMEPAD_BUTTON_COUNT&gt; m_buttonValues { GAMEPAD_BUTTON_COUNT, 0.0 };

I used the initializator but not in this way, because of the libwpe.h header inclusion.

&gt;&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepad.h:54
&gt;&gt; +    struct wpe_gamepad* m_gamepad { nullptr };
&gt; 
&gt; How about using a std::unique_ptr&lt;struct wpe_gamepad, wpe_gamepad_destroy&gt; here?

done

Also for the wpe_gamepad_provider. Though, didn&apos;t include the function there, but in the initializator in class consturctor.

&gt;&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepadProvider.cpp:57
&gt;&gt; +    static struct wpe_gamepad_provider_client_interface s_client = {
&gt; 
&gt; This can be “static const”.

As  in wpe_gamepad, it cannot be const because of the wpe&apos;s function signature.

&gt;&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepadProvider.cpp:60
&gt;&gt; +            auto&amp; provider = *reinterpret_cast&lt;WPEGamepadProvider*&gt;(data);
&gt; 
&gt; static_cast

done

&gt;&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepadProvider.cpp:65
&gt;&gt; +            auto&amp; provider = *reinterpret_cast&lt;WPEGamepadProvider*&gt;(data);
&gt; 
&gt; static_cast

done

&gt;&gt; Source/WebCore/platform/gamepad/wpe/WPEGamepadProvider.cpp:155
&gt;&gt; +void WPEGamepadProvider::gamepadDiconnected(unsigned id)
&gt; 
&gt; Typo: gamepadDiconnected -&gt; gamepadDisconnected

done! hehehe

&gt;&gt; Source/WebKit/UIProcess/API/wpe/WPEView.cpp:54
&gt;&gt; +}
&gt; 
&gt; I&apos;m not much of a fan of adding global data, but I would need to think a
&gt; bit to try to come up with some alternative. Right not I don&apos;t have anything
&gt; from the top of my head, and this definitely works, so I won&apos;t ask to change
&gt; it 😉️

ok :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1866553</commentid>
    <comment_count>11</comment_count>
      <attachid>458817</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2022-05-04 11:59:32 -0700</bug_when>
    <thetext>Created attachment 458817
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1866554</commentid>
    <comment_count>12</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2022-05-04 12:00:43 -0700</bug_when>
    <thetext>We need to talk how and when merge this because of the version bumps needed for cog and libwpe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867874</commentid>
    <comment_count>13</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2022-05-10 01:20:59 -0700</bug_when>
    <thetext>(In reply to Víctor M. Jáquez L. from comment #12)
&gt; We need to talk how and when merge this because of the version bumps needed
&gt; for cog and libwpe.

There&apos;s an interesting situation here: WebXR WPE implementation also has its own gamepad implementation, through OpenXR, but it excludes the html gamepad. It&apos;s specific to WebXR.

It brings some questions:

1\ Doesn&apos;t both implementations step one over the other?
2\ If user disable gamepad, it&apos;s enabled for WebXR silently
3\ There&apos;s not a implicit feature mechanism to disable one but enabling the other.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867897</commentid>
    <comment_count>14</comment_count>
      <attachid>459107</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2022-05-10 04:22:33 -0700</bug_when>
    <thetext>Created attachment 459107
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1871133</commentid>
    <comment_count>15</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2022-05-23 05:09:01 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/911</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1893445</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-08-24 04:12:34 -0700</bug_when>
    <thetext>Committed 253720@main (ab0e24752e11): &lt;https://commits.webkit.org/253720@main&gt;

Reviewed commits have been landed. Closing PR #911 and removing active labels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1893447</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-08-24 04:13:44 -0700</bug_when>
    <thetext>&lt;rdar://problem/99078410&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439033</attachid>
            <date>2021-09-23 03:51:02 -0700</date>
            <delta_ts>2021-09-23 10:54:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230630-20210923125100.patch</filename>
            <type>text/plain</type>
            <size>30959</size>
            <attacher name="Víctor M. Jáquez L.">vjaquez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyOTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGVhZDlmZWQ3N2Q4NzA3
ZTZiM2JjMGUxZGRiMTM2YjlmMDFhNzFiNi4uZjYyNTZiZDA4N2EzMDc3ODEzZWNhOWM1OGVjZTMx
MjRiYjVmYzUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDIxLTA5LTIyICBWw61j
dG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W1dQRV0gQWRkIGdhbWVwYWQgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEdhbXBlcGFkIEFQSSBmb3IgV1BFLgorCisgICAg
ICAgIE9yaWdpbmFsIHBhdGNoIGJ5IEV1Z2VuZSBNdXRhdmNoaSA8SWV2Z2VuX011dGF2Y2hpQGNv
bWNhc3QuY29tPi4KKworICAgICAgICBObyBuZXcgdGVzdHMuIENvbmZpcm1lZCBieSBleGlzdGlu
ZyB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3JtV1BFLmNtYWtlOgorICAgICAgICAqIFNvdXJj
ZXNXUEUudHh0OgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldQRUdhbWVwYWQ6OldQRUdhbWVwYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6V1BFR2FtZXBhZDo6fldQRUdhbWVwYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6V1BFR2FtZXBhZDo6YnV0dG9uUHJlc3NlZE9yUmVsZWFzZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6V1BFR2FtZXBhZDo6YWJzb2x1dGVBeGlzQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z2FtZXBhZC93cGUvV1BFR2FtZXBhZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1l
cGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldQRUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OldQRUdh
bWVwYWRQcm92aWRlcjo6V1BFR2FtZXBhZFByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldQ
RUdhbWVwYWRQcm92aWRlcjo6fldQRUdhbWVwYWRQcm92aWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXUEVHYW1lcGFkUHJvdmlkZXI6OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKToKKyAgICAgICAg
KFdlYkNvcmU6OldQRUdhbWVwYWRQcm92aWRlcjo6c3RvcE1vbml0b3JpbmdHYW1lcGFkcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXUEVHYW1lcGFkUHJvdmlkZXI6OmdhbWVwYWRDb25uZWN0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6V1BFR2FtZXBhZFByb3ZpZGVyOjpnYW1lcGFkRGljb25uZWN0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6V1BFR2FtZXBhZFByb3ZpZGVyOjppbmRleEZvck5ld2x5Q29u
bmVjdGVkRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OldQRUdhbWVwYWRQcm92aWRlcjo6cmVt
b3ZlR2FtZXBhZEZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6OldQRUdhbWVwYWRQcm92aWRlcjo6
aW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpX
UEVHYW1lcGFkUHJvdmlkZXI6OmlucHV0Tm90aWZpY2F0aW9uVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJDb3JlOjpXUEVHYW1lcGFkUHJvdmlkZXI6OnNjaGVkdWxlSW5wdXROb3RpZmljYXRpb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWRQcm92aWRlci5oOiBB
ZGRlZC4KKwogMjAyMS0wOS0wOSAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlh
LmNvbT4KIAogICAgICAgICBJbXByb3ZlIHRoZSBoYW5kbGluZyBvZiBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6c3BsaXRUcmVlVG9Ob2RlKCkgcmV0dXJuIHZhbHVlcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA2ODE3MGM1
Yjg0ZmEzMDFmYTUzMTM3NmFkYmQxMzQ0ZTlhZmFiZTQ4Li41ODIxZjliMTViZmZlMmI2NzNiM2U0
Yzk5ZjU5MTJhZGJjYzA2ODY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIxLTA5LTIy
ICBWw61jdG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW1dQRV0gQWRkIGdhbWVwYWQgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSGFuZGxlIGEgdmVjdG9yIG9mIGNyZWF0ZWQgdmlld3Mg
aW4gb3JkZXIgdG8gc2VsZWN0IHRoZSBvbmUgd2hlcmUgZ2FtZXBhZHMgYXJlIGFjdGl2ZS4KKwor
ICAgICAgICBPcmlnaW5hbCBwYXRjaCBieSBFdWdlbmUgTXV0YXZjaGkgPElldmdlbl9NdXRhdmNo
aUBjb21jYXN0LmNvbT4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBTb3Vy
Y2VzV1BFLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcDoKKyAg
ICAgICAgKFdLV1BFOjptX2JhY2tlbmQpOgorICAgICAgICAoV0tXUEU6OlZpZXc6On5WaWV3KToK
KyAgICAgICAgKFdLV1BFOjpWaWV3OjpzZXRWaWV3U3RhdGUpOgorICAgICAgICAoV0tXUEU6OlZp
ZXc6OnBsYXRmb3JtV2ViUGFnZVByb3h5Rm9yR2FtZXBhZElucHV0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3dwZS9XUEVWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0dhbWVwYWQvVUlH
YW1lcGFkUHJvdmlkZXIuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9HYW1lcGFkL3dwZS9VSUdh
bWVwYWRQcm92aWRlcldQRS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpVSUdhbWVwYWRQ
cm92aWRlcjo6cGxhdGZvcm1TZXREZWZhdWx0R2FtZXBhZFByb3ZpZGVyKToKKyAgICAgICAgKFdl
YktpdDo6VUlHYW1lcGFkUHJvdmlkZXI6OnBsYXRmb3JtV2ViUGFnZVByb3h5Rm9yR2FtZXBhZElu
cHV0KToKKyAgICAgICAgKFdlYktpdDo6VUlHYW1lcGFkUHJvdmlkZXI6OnBsYXRmb3JtU3RvcE1v
bml0b3JpbmdJbnB1dCk6CisgICAgICAgIChXZWJLaXQ6OlVJR2FtZXBhZFByb3ZpZGVyOjpwbGF0
Zm9ybVN0YXJ0TW9uaXRvcmluZ0lucHV0KToKKwogMjAyMS0wOS0yMyAgQ2hyaXMgTG9yZCAgPGNs
b3JkQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWxsb3cgc2VuZGluZyBwcmVjaXNlIG1v
dXNlIHdoZWVsIGV2ZW50cyBpbiBMYXlvdXRUZXN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1XUEUuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5jbWFrZQpp
bmRleCA5ZjRkYWVmY2QzODVkNTM0MTQ5ZjBhNWE2Y2UwZTgwMTZlMjU2MzhmLi5hY2ZjZjRjNzk4
NzkwZjg0OWExZTQyMGMwYmI1NzdlNDEzMDE5NDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybVdQRS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5jbWFr
ZQpAQCAtOTIsMyArOTIsOSBAQCBpZiAoVVNFX09QRU5YUikKICAgICBsaXN0KEFQUEVORCBXZWJD
b3JlX0xJQlJBUklFUyAke09QRU5YUl9MSUJSQVJJRVN9KQogICAgIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMgJHtPUEVOWFJfSU5DTFVERV9ESVJTfSkKIGVu
ZGlmICgpCisKK2lmIChFTkFCTEVfR0FNRVBBRCkKKyAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKKyAgICAgICAgcGxhdGZvcm0vZ2FtZXBhZC93cGUvV1BF
R2FtZXBhZFByb3ZpZGVyLmgKKyAgICApCitlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvU291cmNlc1dQRS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dAppbmRl
eCBhOWEyNzkxNDE4MDE2OTkxZGIyNGQ1YmYwOWM5ZTUxMGM4MDEzM2I4Li44ZDVjMTYyN2E0N2Y4
MDVkNmNjNDliZGFiOGIyNGQ2MmY4MTUwNDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzV1BFLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dApAQCAtNjMs
NiArNjMsOSBAQCBwbGF0Zm9ybS9Vc2VyQWdlbnRRdWlya3MuY3BwCiBwbGF0Zm9ybS9hZHdhaXRh
L1Njcm9sbGJhclRoZW1lQWR3YWl0YS5jcHAKIHBsYXRmb3JtL2Fkd2FpdGEvVGhlbWVBZHdhaXRh
LmNwcAogCitwbGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkLmNwcAorcGxhdGZvcm0vZ2Ft
ZXBhZC93cGUvV1BFR2FtZXBhZFByb3ZpZGVyLmNwcAorCiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9s
bEFuaW1hdG9yR2VuZXJpYy5jcHAKIHBsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJHZW5lcmljLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1l
cGFkL3dwZS9XUEVHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQv
d3BlL1dQRUdhbWVwYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3Y2VkMzY4NjMxMTQzZGZiNDA4MGFmY2Zi
NmQzMmE0YzZjZmI5NzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkLmNwcApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBSREsgTWFuYWdlbWVudCAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV1BFR2FtZXBhZC5oIgorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisK
KyNpbmNsdWRlICJXUEVHYW1lcGFkUHJvdmlkZXIuaCIKKyNpbmNsdWRlIDx3cGUvd3BlLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1BFR2FtZXBhZDo6V1BFR2FtZXBhZCh1bnNpZ25lZCBn
YW1lcGFkSWQsIHVuc2lnbmVkIGluZGV4KQorICAgIDogUGxhdGZvcm1HYW1lcGFkKGluZGV4KQor
ICAgICwgbV9nYW1lcGFkKHdwZV9nYW1lcGFkX2NyZWF0ZShnYW1lcGFkSWQpKQoreworICAgIEFT
U0VSVChtX2dhbWVwYWQpOworCisgICAgbV9jb25uZWN0VGltZSA9IG1fbGFzdFVwZGF0ZVRpbWUg
PSBNb25vdG9uaWNUaW1lOjpub3coKTsKKworICAgIG1faWQgPSBTdHJpbmc6OmZyb21VVEY4KHdw
ZV9nYW1lcGFkX2dldF9pZChtX2dhbWVwYWQpKTsKKyAgICBtX21hcHBpbmcgPSBTdHJpbmc6OmZy
b21VVEY4KCJzdGFuZGFyZCIpOworCisgICAgc3RhdGljIHN0cnVjdCB3cGVfZ2FtZXBhZF9jbGll
bnRfaW50ZXJmYWNlIHNfY2xpZW50ID0geworICAgICAgICAvLyBidXR0b25fZXZlbnQKKyAgICAg
ICAgW10odm9pZCogZGF0YSwgZW51bSBTdGFuZGFyZEdhbWVwYWRCdXR0b24gYnV0dG9uLCBib29s
IHByZXNzZWQpIHsKKyAgICAgICAgICAgIGF1dG8mIHNlbGYgPSAqcmVpbnRlcnByZXRfY2FzdDxX
UEVHYW1lcGFkKj4oZGF0YSk7CisgICAgICAgICAgICBpZiAoYnV0dG9uICE9IEdBTUVQQURfQlVU
VE9OX1VOS05PV04pCisgICAgICAgICAgICAgICAgc2VsZi5idXR0b25QcmVzc2VkT3JSZWxlYXNl
ZChzdGF0aWNfY2FzdDxpbnQ+KGJ1dHRvbiksIHByZXNzZWQpOworICAgICAgICB9LAorICAgICAg
ICAvLyBheGlzX2V2ZW50CisgICAgICAgIFtdKHZvaWQqIGRhdGEsIGVudW0gU3RhbmRhcmRHYW1l
cGFkQXhpcyBheGlzLCBkb3VibGUgdmFsdWUpIHsKKyAgICAgICAgICAgIGF1dG8mIHNlbGYgPSAq
cmVpbnRlcnByZXRfY2FzdDxXUEVHYW1lcGFkKj4oZGF0YSk7CisgICAgICAgICAgICBpZiAoYXhp
cyAhPSBHQU1FUEFEX0FYSVNfVU5LTk9XTikKKyAgICAgICAgICAgICAgICBzZWxmLmFic29sdXRl
QXhpc0NoYW5nZWQoc3RhdGljX2Nhc3Q8aW50PihheGlzKSwgdmFsdWUpOworICAgICAgICB9Cisg
ICAgfTsKKyAgICB3cGVfZ2FtZXBhZF9zZXRfY2xpZW50KG1fZ2FtZXBhZCwgJnNfY2xpZW50LCB0
aGlzKTsKKworICAgIG1fYnV0dG9uVmFsdWVzLnJlc2l6ZShzdGF0aWNfY2FzdDxzaXplX3Q+KEdB
TUVQQURfQlVUVE9OX0NPVU5UKSk7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IG1fYnV0dG9uVmFs
dWVzKQorICAgICAgICB2YWx1ZS5zZXRWYWx1ZSgwLjApOworCisgICAgbV9heGlzVmFsdWVzLnJl
c2l6ZShzdGF0aWNfY2FzdDxzaXplX3Q+KEdBTUVQQURfQVhJU19DT1VOVCkpOworICAgIGZvciAo
YXV0byYgdmFsdWUgOiBtX2F4aXNWYWx1ZXMpCisgICAgICAgIHZhbHVlLnNldFZhbHVlKDAuMCk7
Cit9CisKK1dQRUdhbWVwYWQ6On5XUEVHYW1lcGFkKCkKK3sKKyAgICBpZiAoIW1fZ2FtZXBhZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgd3BlX2dhbWVwYWRfc2V0X2NsaWVudChtX2dhbWVwYWQs
IG51bGxwdHIsIG51bGxwdHIpOworICAgIHdwZV9nYW1lcGFkX2Rlc3Ryb3kobV9nYW1lcGFkKTsK
KyAgICBtX2dhbWVwYWQgPSBudWxscHRyOworfQorCit2b2lkIFdQRUdhbWVwYWQ6OmJ1dHRvblBy
ZXNzZWRPclJlbGVhc2VkKGludCBidXR0b24sIGJvb2wgcHJlc3NlZCkKK3sKKyAgICBtX2xhc3RV
cGRhdGVUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgbV9idXR0b25WYWx1ZXNbYnV0
dG9uXS5zZXRWYWx1ZShwcmVzc2VkID8gMS4wIDogMC4wKTsKKworICAgIFdQRUdhbWVwYWRQcm92
aWRlcjo6c2luZ2xldG9uKCkuc2NoZWR1bGVJbnB1dE5vdGlmaWNhdGlvbigqdGhpcywgcHJlc3Nl
ZCA/IFdQRUdhbWVwYWRQcm92aWRlcjo6U2hvdWxkTWFrZUdhbWVwYWRzVmlzaWJsZTo6WWVzIDog
V1BFR2FtZXBhZFByb3ZpZGVyOjpTaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlOjpObyk7Cit9CisK
K3ZvaWQgV1BFR2FtZXBhZDo6YWJzb2x1dGVBeGlzQ2hhbmdlZChpbnQgYXhpcywgZG91YmxlIHZh
bHVlKQoreworICAgIG1fbGFzdFVwZGF0ZVRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAg
ICBtX2F4aXNWYWx1ZXNbYXhpc10uc2V0VmFsdWUodmFsdWUpOworCisgICAgV1BFR2FtZXBhZFBy
b3ZpZGVyOjpzaW5nbGV0b24oKS5zY2hlZHVsZUlucHV0Tm90aWZpY2F0aW9uKCp0aGlzLCBXUEVH
YW1lcGFkUHJvdmlkZXI6OlNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGU6Ok5vKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTVkNTI5MmU3NGJmNmYwYzQ2ZWU5MjRiNTc2NTE4NmU5OWM2OGFlZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWQuaApA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFJESyBNYW5hZ2VtZW50
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNs
dWRlICJQbGF0Zm9ybUdhbWVwYWQuaCIKKworc3RydWN0IHdwZV9nYW1lcGFkOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFdQRUdhbWVwYWQgZmluYWwgOiBwdWJsaWMgUGxhdGZvcm1H
YW1lcGFkIHsKK3B1YmxpYzoKKyAgICBXUEVHYW1lcGFkKHVuc2lnbmVkLCB1bnNpZ25lZCk7Cisg
ICAgdmlydHVhbCB+V1BFR2FtZXBhZCgpOworCisgICAgY29uc3QgVmVjdG9yPFNoYXJlZEdhbWVw
YWRWYWx1ZT4mIGF4aXNWYWx1ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2F4aXNWYWx1ZXM7
IH0KKyAgICBjb25zdCBWZWN0b3I8U2hhcmVkR2FtZXBhZFZhbHVlPiYgYnV0dG9uVmFsdWVzKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9idXR0b25WYWx1ZXM7IH0KKworICAgIGNvbnN0IHN0cnVj
dCB3cGVfZ2FtZXBhZCogd3BlR2FtZXBhZCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2FtZXBhZDsgfQor
Citwcml2YXRlOgorICAgIHZvaWQgYnV0dG9uUHJlc3NlZE9yUmVsZWFzZWQoaW50LCBib29sKTsK
KyAgICB2b2lkIGFic29sdXRlQXhpc0NoYW5nZWQoaW50LCBkb3VibGUpOworCisgICAgVmVjdG9y
PFNoYXJlZEdhbWVwYWRWYWx1ZT4gbV9idXR0b25WYWx1ZXM7CisgICAgVmVjdG9yPFNoYXJlZEdh
bWVwYWRWYWx1ZT4gbV9heGlzVmFsdWVzOworCisgICAgc3RydWN0IHdwZV9nYW1lcGFkKiBtX2dh
bWVwYWQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dhbWVwYWQvd3BlL1dQRUdhbWVwYWRQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRmMzIy
MGQxMDI2ZDlhYzdiMzQ5MTQ3MjA4MjIzMTQ2OTJkMzQ4MWMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuY3Bw
CkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFJESyBNYW5hZ2Vt
ZW50ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXUEVHYW1lcGFk
UHJvdmlkZXIuaCIKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSAiR2FtZXBhZFBy
b3ZpZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIldQRUdhbWVw
YWQuaCIKKyNpbmNsdWRlIDx3cGUvd3BlLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IFNlY29uZHMgY29ubmVj
dGlvbkRlbGF5SW50ZXJ2YWwgeyA1MDBfbXMgfTsKK3N0YXRpYyBjb25zdCBTZWNvbmRzIGlucHV0
Tm90aWZpY2F0aW9uRGVsYXkgeyA1MF9tcyB9OworCitXUEVHYW1lcGFkUHJvdmlkZXImIFdQRUdh
bWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
V1BFR2FtZXBhZFByb3ZpZGVyPiBzaGFyZWRQcm92aWRlcjsKKyAgICByZXR1cm4gc2hhcmVkUHJv
dmlkZXI7Cit9CisKK1dQRUdhbWVwYWRQcm92aWRlcjo6V1BFR2FtZXBhZFByb3ZpZGVyKCkKKyAg
ICA6IG1fcHJvdmlkZXIod3BlX2dhbWVwYWRfcHJvdmlkZXJfY3JlYXRlKCkpCisgICAgLCBtX2lu
aXRpYWxHYW1lcGFkc0Nvbm5lY3RlZFRpbWVyKFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJldQ
RUdhbWVwYWRQcm92aWRlcjo6aW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGltZXJGaXJlZCkKKyAg
ICAsIG1faW5wdXROb3RpZmljYXRpb25UaW1lcihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZX
UEVHYW1lcGFkUHJvdmlkZXI6OmlucHV0Tm90aWZpY2F0aW9uVGltZXJGaXJlZCkKK3sKKyAgICBp
ZiAoIW1fcHJvdmlkZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpYyBzdHJ1Y3Qgd3Bl
X2dhbWVwYWRfcHJvdmlkZXJfY2xpZW50X2ludGVyZmFjZSBzX2NsaWVudCA9IHsKKyAgICAgICAg
Ly8gY29ubmVjdGVkCisgICAgICAgIFtdKHZvaWQqIGRhdGEsIHVuc2lnbmVkIGdhbWVwYWRJZCkg
eworICAgICAgICAgICAgYXV0byYgcHJvdmlkZXIgPSAqcmVpbnRlcnByZXRfY2FzdDxXUEVHYW1l
cGFkUHJvdmlkZXIqPihkYXRhKTsKKyAgICAgICAgICAgIHByb3ZpZGVyLmdhbWVwYWRDb25uZWN0
ZWQoZ2FtZXBhZElkKTsKKyAgICAgICAgfSwKKyAgICAgICAgLy8gZGlzY29ubmVjdGVkCisgICAg
ICAgIFtdKHZvaWQqIGRhdGEsIHVuc2lnbmVkIGdhbWVwYWRJZCkgeworICAgICAgICAgICAgYXV0
byYgcHJvdmlkZXIgPSAqcmVpbnRlcnByZXRfY2FzdDxXUEVHYW1lcGFkUHJvdmlkZXIqPihkYXRh
KTsKKyAgICAgICAgICAgIHByb3ZpZGVyLmdhbWVwYWREaWNvbm5lY3RlZChnYW1lcGFkSWQpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIHdwZV9nYW1lcGFkX3Byb3ZpZGVyX3NldF9jbGllbnQo
bV9wcm92aWRlciwgJnNfY2xpZW50LCB0aGlzKTsKK30KKworV1BFR2FtZXBhZFByb3ZpZGVyOjp+
V1BFR2FtZXBhZFByb3ZpZGVyKCkKK3sKKyAgICB3cGVfZ2FtZXBhZF9wcm92aWRlcl9zZXRfY2xp
ZW50KG1fcHJvdmlkZXIsIG51bGxwdHIsIG51bGxwdHIpOworICAgIHdwZV9nYW1lcGFkX3Byb3Zp
ZGVyX2Rlc3Ryb3kobV9wcm92aWRlcik7CisgICAgbV9wcm92aWRlciA9IG51bGxwdHI7Cit9CisK
K3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjpzdGFydE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFk
UHJvdmlkZXJDbGllbnQmIGNsaWVudCkKK3sKKyAgICBpZiAoIW1fcHJvdmlkZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIGJvb2wgc2hvdWxkT3BlbkFuZFNjaGVkdWxlTWFuYWdlciA9IG1fY2xp
ZW50cy5pc0VtcHR5KCk7CisKKyAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50
KSk7CisgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKKworICAgIGlmICghc2hvdWxkT3BlbkFu
ZFNjaGVkdWxlTWFuYWdlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fZ2FtZXBh
ZFZlY3Rvci5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2dhbWVwYWRNYXAuaXNFbXB0eSgpKTsK
KworICAgIG1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkID0gZmFsc2U7CisKKyAgICAvLyBBbnkg
Y29ubmVjdGlvbnMgd2UgYXJlIG5vdGlmaWVkIG9mIHdpdGhpbiB0aGUgY29ubmVjdGlvbkRlbGF5
SW50ZXJ2YWwgb2YgbGlzdGVuaW5nIGxpa2VseSByZXByZXNlbnQKKyAgICAvLyBkZXZpY2VzIHRo
YXQgd2VyZSBhbHJlYWR5IGNvbm5lY3RlZCwgc28gd2Ugc3VwcHJlc3Mgbm90aWZ5aW5nIGNsaWVu
dHMgb2YgdGhlc2UuCisgICAgbV9pbml0aWFsR2FtZXBhZHNDb25uZWN0ZWRUaW1lci5zdGFydE9u
ZVNob3QoY29ubmVjdGlvbkRlbGF5SW50ZXJ2YWwpOworCisgICAgd3BlX2dhbWVwYWRfcHJvdmlk
ZXJfc3RhcnQobV9wcm92aWRlcik7Cit9CisKK3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjpzdG9w
TW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCYgY2xpZW50KQoreworICAg
IGlmICghbV9wcm92aWRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fY2xpZW50
cy5jb250YWlucygmY2xpZW50KSk7CisKKyAgICBib29sIHNob3VsZENsb3NlQW5kVW5zY2hlZHVs
ZU1hbmFnZXIgPSBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpICYmIG1fY2xpZW50cy5pc0VtcHR5
KCk7CisgICAgaWYgKCFzaG91bGRDbG9zZUFuZFVuc2NoZWR1bGVNYW5hZ2VyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB3cGVfZ2FtZXBhZF9wcm92aWRlcl9zdG9wKG1fcHJvdmlkZXIpOworCisg
ICAgbV9nYW1lcGFkVmVjdG9yLmNsZWFyKCk7CisgICAgbV9nYW1lcGFkTWFwLmNsZWFyKCk7Cisg
ICAgbV9pbml0aWFsR2FtZXBhZHNDb25uZWN0ZWRUaW1lci5zdG9wKCk7CisgICAgbV9sYXN0QWN0
aXZlR2FtZXBhZCA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjpnYW1l
cGFkQ29ubmVjdGVkKHVuc2lnbmVkIGlkKQoreworICAgIEFTU0VSVCghbV9nYW1lcGFkTWFwLmdl
dChpZCkpOworICAgIEFTU0VSVChtX3Byb3ZpZGVyKTsKKworICAgIExPRyhHYW1lcGFkLCAiV1BF
R2FtZXBhZFByb3ZpZGVyIGRldmljZSAldSBhZGRlZCIsIGlkKTsKKworICAgIHVuc2lnbmVkIGlu
ZGV4ID0gaW5kZXhGb3JOZXdseUNvbm5lY3RlZERldmljZSgpOworICAgIGF1dG8gZ2FtZXBhZCA9
IG1ha2VVbmlxdWU8V1BFR2FtZXBhZD4oaWQsIGluZGV4KTsKKworICAgIGlmIChtX2dhbWVwYWRW
ZWN0b3Iuc2l6ZSgpIDw9IGluZGV4KQorICAgICAgICBtX2dhbWVwYWRWZWN0b3IuZ3JvdyhpbmRl
eCArIDEpOworCisgICAgbV9nYW1lcGFkVmVjdG9yW2luZGV4XSA9IGdhbWVwYWQuZ2V0KCk7Cisg
ICAgbV9nYW1lcGFkTWFwLnNldChpZCwgV1RGTW92ZShnYW1lcGFkKSk7CisKKyAgICBpZiAoIW1f
aW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkKSB7CisgICAgICAgIC8vIFRoaXMgYWRkZWQgZGV2aWNl
IGlzIHRoZSByZXN1bHQgb2YgdXMgc3RhcnRpbmcgdG8gbW9uaXRvciBnYW1lcGFkcy4KKyAgICAg
ICAgLy8gV2UnbGwgZ2V0IG5vdGlmaWVkIG9mIGFsbCBjb25uZWN0ZWQgZGV2aWNlcyBkdXJpbmcg
dGhpcyBjdXJyZW50IHNwaW4gb2YgdGhlIHJ1bmxvb3AKKyAgICAgICAgLy8gYW5kIHRoZSBjbGll
bnQgc2hvdWxkIGJlIHRvbGQgdGhleSB3ZXJlIGFscmVhZHkgY29ubmVjdGVkLgorICAgICAgICAv
LyBUaGUgbV9jb25uZWN0aW9uRGVsYXlUaW1lciBmaXJlcyBpbiBhIHN1YnNlcXVlbnQgc3BpbiBv
ZiB0aGUgcnVubG9vcCBhZnRlciB3aGljaAorICAgICAgICAvLyBhbnkgY29ubmVjdGlvbiBldmVu
dHMgYXJlIGFjdHVhbCBuZXcgZGV2aWNlcyBhbmQgY2FuIHRyaWdnZXIgZ2FtZXBhZCB2aXNpYmls
aXR5LgorICAgICAgICBpZiAoIW1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGltZXIuaXNBY3Rp
dmUoKSkKKyAgICAgICAgICAgIG1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGltZXIuc3RhcnRP
bmVTaG90KDBfcyk7CisgICAgfQorCisgICAgYXV0byBldmVudFZpc2liaWxpdHkgPSBtX2luaXRp
YWxHYW1lcGFkc0Nvbm5lY3RlZCA/IEV2ZW50TWFrZXNHYW1lcGFkc1Zpc2libGU6OlllcyA6IEV2
ZW50TWFrZXNHYW1lcGFkc1Zpc2libGU6Ok5vOworICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9j
bGllbnRzKQorICAgICAgICBjbGllbnQtPnBsYXRmb3JtR2FtZXBhZENvbm5lY3RlZCgqbV9nYW1l
cGFkVmVjdG9yW2luZGV4XSwgZXZlbnRWaXNpYmlsaXR5KTsKK30KKwordm9pZCBXUEVHYW1lcGFk
UHJvdmlkZXI6OmdhbWVwYWREaWNvbm5lY3RlZCh1bnNpZ25lZCBpZCkKK3sKKyAgICBMT0coR2Ft
ZXBhZCwgIldQRUdhbWVwYWRQcm92aWRlciBkZXZpY2UgJXUgcmVtb3ZlZCIsIGlkKTsKKworICAg
IGF1dG8gcmVtb3ZlZEdhbWVwYWQgPSByZW1vdmVHYW1lcGFkRm9ySWQoaWQpOworICAgIEFTU0VS
VChyZW1vdmVkR2FtZXBhZCk7CisKKyAgICBpZiAocmVtb3ZlZEdhbWVwYWQtPndwZUdhbWVwYWQo
KSA9PSBtX2xhc3RBY3RpdmVHYW1lcGFkKQorICAgICAgICBtX2xhc3RBY3RpdmVHYW1lcGFkID0g
bnVsbHB0cjsKKworICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBj
bGllbnQtPnBsYXRmb3JtR2FtZXBhZERpc2Nvbm5lY3RlZCgqcmVtb3ZlZEdhbWVwYWQpOworfQor
Cit1bnNpZ25lZCBXUEVHYW1lcGFkUHJvdmlkZXI6OmluZGV4Rm9yTmV3bHlDb25uZWN0ZWREZXZp
Y2UoKQoreworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICB3aGlsZSAoaW5kZXggPCBtX2dh
bWVwYWRWZWN0b3Iuc2l6ZSgpICYmIG1fZ2FtZXBhZFZlY3RvcltpbmRleF0pCisgICAgICAgICsr
aW5kZXg7CisKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxXUEVHYW1l
cGFkPiBXUEVHYW1lcGFkUHJvdmlkZXI6OnJlbW92ZUdhbWVwYWRGb3JJZCh1bnNpZ25lZCBpZCkK
K3sKKyAgICBhdXRvIHJlbW92ZWRHYW1lcGFkID0gbV9nYW1lcGFkTWFwLnRha2UoaWQpOworICAg
IEFTU0VSVChyZW1vdmVkR2FtZXBhZCk7CisKKyAgICBhdXRvIGluZGV4ID0gbV9nYW1lcGFkVmVj
dG9yLmZpbmQocmVtb3ZlZEdhbWVwYWQuZ2V0KCkpOworICAgIGlmIChpbmRleCAhPSBub3RGb3Vu
ZCkKKyAgICAgICAgbV9nYW1lcGFkVmVjdG9yW2luZGV4XSA9IG51bGxwdHI7CisKKyAgICByZXR1
cm4gcmVtb3ZlZEdhbWVwYWQ7Cit9CisKK3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjppbml0aWFs
R2FtZXBhZHNDb25uZWN0ZWRUaW1lckZpcmVkKCkKK3sKKyAgICBtX2luaXRpYWxHYW1lcGFkc0Nv
bm5lY3RlZCA9IHRydWU7Cit9CisKK3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjppbnB1dE5vdGlm
aWNhdGlvblRpbWVyRmlyZWQoKQoreworICAgIGlmICghbV9pbml0aWFsR2FtZXBhZHNDb25uZWN0
ZWQpIHsKKyAgICAgICAgaWYgKCFtX2lucHV0Tm90aWZpY2F0aW9uVGltZXIuaXNBY3RpdmUoKSkK
KyAgICAgICAgICAgIG1faW5wdXROb3RpZmljYXRpb25UaW1lci5zdGFydE9uZVNob3QoMF9zKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRpc3BhdGNoUGxhdGZvcm1HYW1lcGFkSW5w
dXRBY3Rpdml0eSgpOworfQorCit2b2lkIFdQRUdhbWVwYWRQcm92aWRlcjo6c2NoZWR1bGVJbnB1
dE5vdGlmaWNhdGlvbihXUEVHYW1lcGFkJiBnYW1lcGFkLCBTaG91bGRNYWtlR2FtZXBhZHNWaXNp
YmxlIHNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGUpCit7CisgICAgbV9sYXN0QWN0aXZlR2FtZXBh
ZCA9IGNvbnN0X2Nhc3Q8c3RydWN0IHdwZV9nYW1lcGFkKj4oZ2FtZXBhZC53cGVHYW1lcGFkKCkp
OworCisgICAgaWYgKCFtX2lucHV0Tm90aWZpY2F0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgbV9pbnB1dE5vdGlmaWNhdGlvblRpbWVyLnN0YXJ0T25lU2hvdChpbnB1dE5vdGlmaWNhdGlv
bkRlbGF5KTsKKworICAgIGlmIChzaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlID09IFNob3VsZE1h
a2VHYW1lcGFkc1Zpc2libGU6OlllcykKKyAgICAgICAgc2V0U2hvdWxkTWFrZUdhbWVwYWRzVmlz
aWJpbGUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL3dw
ZS9XUEVHYW1lcGFkUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQv
d3BlL1dQRUdhbWVwYWRQcm92aWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4MGNmYThmYjRkNWNjODYxNzBl
MzNhZjhmMTE4Mjg3ZDg0MmUzOTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuaApAQCAtMCwwICsxLDgzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFJESyBNYW5hZ2VtZW50ICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlICJHYW1lcGFkUHJv
dmlkZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29w
Lmg+CisKK3N0cnVjdCB3cGVfZ2FtZXBhZF9wcm92aWRlcjsKK3N0cnVjdCB3cGVfdmlld19iYWNr
ZW5kOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdQRUdhbWVwYWQ7CisKK2NsYXNz
IFdQRUdhbWVwYWRQcm92aWRlciBmaW5hbCA6IHB1YmxpYyBHYW1lcGFkUHJvdmlkZXIgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFdQRUdhbWVwYWRQcm92aWRlcik7CisgICAgZnJpZW5kIGNs
YXNzIE5ldmVyRGVzdHJveWVkPFdQRUdhbWVwYWRQcm92aWRlcj47CisKK3B1YmxpYzoKKyAgICBz
dGF0aWMgV1BFR2FtZXBhZFByb3ZpZGVyJiBzaW5nbGV0b24oKTsKKworICAgIHZpcnR1YWwgfldQ
RUdhbWVwYWRQcm92aWRlcigpOworCisgICAgdm9pZCBzdGFydE1vbml0b3JpbmdHYW1lcGFkcyhH
YW1lcGFkUHJvdmlkZXJDbGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BNb25pdG9yaW5nR2Ft
ZXBhZHMoR2FtZXBhZFByb3ZpZGVyQ2xpZW50JikgZmluYWw7CisgICAgY29uc3QgVmVjdG9yPFBs
YXRmb3JtR2FtZXBhZCo+JiBwbGF0Zm9ybUdhbWVwYWRzKCkgZmluYWwgeyByZXR1cm4gbV9nYW1l
cGFkVmVjdG9yOyB9CisKKyAgICBlbnVtIGNsYXNzIFNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGUg
OiBib29sIHsgTm8sCisgICAgICAgIFllcyB9OworICAgIHZvaWQgc2NoZWR1bGVJbnB1dE5vdGlm
aWNhdGlvbihXUEVHYW1lcGFkJiwgU2hvdWxkTWFrZUdhbWVwYWRzVmlzaWJsZSk7CisKK3ByaXZh
dGU6CisgICAgV1BFR2FtZXBhZFByb3ZpZGVyKCk7CisKKyAgICB2b2lkIGdhbWVwYWRDb25uZWN0
ZWQodW5zaWduZWQpOworICAgIHZvaWQgZ2FtZXBhZERpY29ubmVjdGVkKHVuc2lnbmVkKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V1BFR2FtZXBhZD4gcmVtb3ZlR2FtZXBhZEZvcklkKHVuc2lnbmVk
KTsKKworICAgIHVuc2lnbmVkIGluZGV4Rm9yTmV3bHlDb25uZWN0ZWREZXZpY2UoKTsKKyAgICB2
b2lkIGluaXRpYWxHYW1lcGFkc0Nvbm5lY3RlZFRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIGlucHV0
Tm90aWZpY2F0aW9uVGltZXJGaXJlZCgpOworCisgICAgVmVjdG9yPFBsYXRmb3JtR2FtZXBhZCo+
IG1fZ2FtZXBhZFZlY3RvcjsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8
V1BFR2FtZXBhZD4+IG1fZ2FtZXBhZE1hcDsKKyAgICBib29sIG1faW5pdGlhbEdhbWVwYWRzQ29u
bmVjdGVkIHsgZmFsc2UgfTsKKworICAgIHN0cnVjdCB3cGVfZ2FtZXBhZF9wcm92aWRlciogbV9w
cm92aWRlciB7IG51bGxwdHIgfTsKKyAgICBzdHJ1Y3Qgd3BlX2dhbWVwYWQqIG1fbGFzdEFjdGl2
ZUdhbWVwYWQgeyBudWxscHRyIH07CisKKyAgICBSdW5Mb29wOjpUaW1lcjxXUEVHYW1lcGFkUHJv
dmlkZXI+IG1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGltZXI7CisgICAgUnVuTG9vcDo6VGlt
ZXI8V1BFR2FtZXBhZFByb3ZpZGVyPiBtX2lucHV0Tm90aWZpY2F0aW9uVGltZXI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNXUEUudHh0CmluZGV4IDJhNGY0MDZhYmI4YWZiMzA0ZWUzOGQ2MmIzYTJiZjc2MDg5NGNkYTYu
LmJlNmY0MjE5OTc3ZmU4MDA3MDJiNDA2YjM2YWRkZWQwNDYwZjNiMmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BF
LnR4dApAQCAtMTk3LDYgKzE5Nyw4IEBAIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL3dwZS9XZWJBdXRv
bWF0aW9uU2Vzc2lvbldQRS5jcHAKIAogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJh
d2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCiAKK1VJUHJvY2Vzcy9HYW1lcGFk
L3dwZS9VSUdhbWVwYWRQcm92aWRlcldQRS5jcHAKKwogVUlQcm9jZXNzL2dlb2NsdWUvR2VvY2x1
ZUdlb2xvY2F0aW9uUHJvdmlkZXIuY3BwCiAKIFVJUHJvY2Vzcy9nbGliL1dlYlBhZ2VQcm94eUdM
aWIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZp
ZXcuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcAppbmRl
eCA1NTM2ZmJjNTQzMDk2OWUxNjYwMDMyYjI0OWM2YmM4NDY1M2MyMzNhLi5iYzU3NDgyNTdmYTkx
MGI3MzlmOTE1N2Y2MzE5NDUwMjQyZjMzMWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvV1BFVmlldy5jcHAKQEAgLTQwLDExICs0MCwxOCBAQAogI2luY2x1ZGUgIldlYlBy
b2Nlc3NQb29sLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db21wb3NpdGlvblVuZGVybGluZS5oPgog
I2luY2x1ZGUgPHdwZS93cGUuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIFdLV1BFIHsKIAorc3RhdGljIFZl
Y3RvcjxWaWV3Kj4mIHZpZXdzVmVjdG9yKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
VmVjdG9yPFZpZXcqPj4gdmVjdG9yOworICAgIHJldHVybiB2ZWN0b3I7Cit9CisKIFZpZXc6OlZp
ZXcoc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQSTo6UGFnZUNvbmZp
Z3VyYXRpb24mIGJhc2VDb25maWd1cmF0aW9uKQogICAgIDogbV9jbGllbnQobWFrZVVuaXF1ZTxB
UEk6OlZpZXdDbGllbnQ+KCkpCiAgICAgLCBtX3RvdWNoR2VzdHVyZUNvbnRyb2xsZXIobWFrZVVu
aXF1ZTxUb3VjaEdlc3R1cmVDb250cm9sbGVyPigpKQpAQCAtMjk0LDEwICszMDEsMTMgQEAgVmll
dzo6VmlldyhzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogYmFja2VuZCwgY29uc3QgQVBJOjpQYWdl
Q29uZmlndXJhdGlvbiYgYmFzZUMKICAgICB3cGVfdmlld19iYWNrZW5kX2luaXRpYWxpemUobV9i
YWNrZW5kKTsKIAogICAgIG1fcGFnZVByb3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOworCisgICAg
dmlld3NWZWN0b3IoKS5hcHBlbmQodGhpcyk7CiB9CiAKIFZpZXc6On5WaWV3KCkKIHsKKyAgICB2
aWV3c1ZlY3RvcigpLnJlbW92ZUFsbCh0aGlzKTsKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkK
ICAgICBpZiAobV9hY2Nlc3NpYmxlKQogICAgICAgICB3ZWJraXRXZWJWaWV3QWNjZXNzaWJsZVNl
dFdlYlZpZXcobV9hY2Nlc3NpYmxlLmdldCgpLCBudWxscHRyKTsKQEAgLTM4Myw2ICszOTMsMTMg
QEAgdm9pZCBWaWV3OjpzZXRWaWV3U3RhdGUoT3B0aW9uU2V0PFdlYkNvcmU6OkFjdGl2aXR5U3Rh
dGU6OkZsYWc+IGZsYWdzKQogCiAgICAgaWYgKGNoYW5nZWRGbGFncykKICAgICAgICAgbV9wYWdl
UHJveHktPmFjdGl2aXR5U3RhdGVEaWRDaGFuZ2UoY2hhbmdlZEZsYWdzKTsKKworICAgIGlmICh2
aWV3U3RhdGUoKS5jb250YWlucyhXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc1Zpc2libGUpKSB7
CisgICAgICAgIGlmICh2aWV3c1ZlY3RvcigpLmZpcnN0KCkgIT0gdGhpcykgeworICAgICAgICAg
ICAgdmlld3NWZWN0b3IoKS5yZW1vdmVBbGwodGhpcyk7CisgICAgICAgICAgICB2aWV3c1ZlY3Rv
cigpLmluc2VydCgwLCB0aGlzKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogdm9pZCBWaWV3Ojpo
YW5kbGVLZXlib2FyZEV2ZW50KHN0cnVjdCB3cGVfaW5wdXRfa2V5Ym9hcmRfZXZlbnQqIGV2ZW50
KQpAQCAtNDMwLDQgKzQ0NywyMyBAQCBXZWJLaXRXZWJWaWV3QWNjZXNzaWJsZSogVmlldzo6YWNj
ZXNzaWJsZSgpIGNvbnN0CiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHQU1FUEFEKQorV2ViS2l0
OjpXZWJQYWdlUHJveHkqIFZpZXc6OnBsYXRmb3JtV2ViUGFnZVByb3h5Rm9yR2FtZXBhZElucHV0
KCkKK3sKKyAgICBjb25zdCBhdXRvJiB2aWV3cyA9IHZpZXdzVmVjdG9yKCk7CisgICAgaWYgKHZp
ZXdzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGluZGV4
ID0gdmlld3MuZmluZE1hdGNoaW5nKFtdKFZpZXcqIHZpZXcpIHsKKyAgICAgICAgcmV0dXJuIHZp
ZXctPnZpZXdTdGF0ZSgpLmNvbnRhaW5zKFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzVmlzaWJs
ZSkKKyAgICAgICAgICAgICYmIHZpZXctPnZpZXdTdGF0ZSgpLmNvbnRhaW5zKFdlYkNvcmU6OkFj
dGl2aXR5U3RhdGU6OklzRm9jdXNlZCk7CisgICAgfSk7CisKKyAgICBpZiAoaW5kZXggIT0gbm90
Rm91bmQpCisgICAgICAgIHJldHVybiAmKHZpZXdzW2luZGV4XS0+cGFnZSgpKTsKKworICAgIHJl
dHVybiBudWxscHRyOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdLV1BFCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5oCmluZGV4IGFhMGUwMzA2MjlkNTYyNzEy
MTlhYTE3MzgzMTNjNWJlOGFlZmMyYzAuLmVlNjlkYjJhNTUyZjc0MGZlZTE5OThmZGUyZTgxNjNm
MjQ3NjM0ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BF
Vmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5oCkBA
IC0xMDgsNiArMTA4LDkgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBXZWJLaXQ6OlRvdWNoR2Vz
dHVyZUNvbnRyb2xsZXImIHRvdWNoR2VzdHVyZUNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiAq
bV90b3VjaEdlc3R1cmVDb250cm9sbGVyOyB9CisjaWYgRU5BQkxFKEdBTUVQQUQpCisgICAgc3Rh
dGljIFdlYktpdDo6V2ViUGFnZVByb3h5KiBwbGF0Zm9ybVdlYlBhZ2VQcm94eUZvckdhbWVwYWRJ
bnB1dCgpOworI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgVmlldyhzdHJ1Y3Qgd3BlX3ZpZXdfYmFj
a2VuZCosIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0dhbWVwYWQvVUlHYW1lcGFkUHJvdmlkZXIuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvR2FtZXBhZC9VSUdhbWVwYWRQcm92aWRlci5jcHAKaW5kZXggZDk4
YzUzOTVlZTEyYzRmNTc4MzA5M2M3ODQzMTM2ODcxZjQzNmUyNi4uZjBjMTE4ZTRiZmUwODk4YjZj
ZGVmYmYwNzc3NGY3NjhmNTM1MzhmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvR2FtZXBhZC9VSUdhbWVwYWRQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvR2FtZXBhZC9VSUdhbWVwYWRQcm92aWRlci5jcHAKQEAgLTIwNyw3ICsyMDcsNyBAQCBW
ZWN0b3I8R2FtZXBhZERhdGE+IFVJR2FtZXBhZFByb3ZpZGVyOjpzbmFwc2hvdEdhbWVwYWRzKCkK
ICAgICByZXR1cm4gZ2FtZXBhZERhdGFzOwogfQogCi0jaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAh
KFVTRShNQU5FVFRFKSAmJiBPUyhMSU5VWCkpCisjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhKFVT
RShNQU5FVFRFKSAmJiBPUyhMSU5VWCkpICYmICFQTEFURk9STShXUEUpCiAKIHZvaWQgVUlHYW1l
cGFkUHJvdmlkZXI6OnBsYXRmb3JtU2V0RGVmYXVsdEdhbWVwYWRQcm92aWRlcigpCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL3dwZS9VSUdhbWVwYWRQcm92
aWRlcldQRS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL3dwZS9VSUdhbWVw
YWRQcm92aWRlcldQRS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTMyZjAxZTUxZTNlZDNlYzllYTUzZTdjZmZj
ODM0MGE0NmRkN2NhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0dhbWVwYWQvd3BlL1VJR2FtZXBhZFByb3ZpZGVyV1BFLmNwcApAQCAtMCwwICsxLDYxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVSUdhbWVwYWRQcm92
aWRlci5oIgorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlICJXUEVWaWV3LmgiCisK
KyNpbmNsdWRlIDxXZWJDb3JlL1dQRUdhbWVwYWRQcm92aWRlci5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgVUlHYW1lcGFkUHJvdmlk
ZXI6OnBsYXRmb3JtU2V0RGVmYXVsdEdhbWVwYWRQcm92aWRlcigpCit7CisgICAgaWYgKEdhbWVw
YWRQcm92aWRlcjo6c2luZ2xldG9uKCkuaXNNb2NrR2FtZXBhZFByb3ZpZGVyKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIEdhbWVwYWRQcm92aWRlcjo6c2V0U2hhcmVkUHJvdmlkZXIoV1BFR2Ft
ZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKSk7Cit9CisKK1dlYlBhZ2VQcm94eSogVUlHYW1lcGFk
UHJvdmlkZXI6OnBsYXRmb3JtV2ViUGFnZVByb3h5Rm9yR2FtZXBhZElucHV0KCkKK3sKKyAgICBy
ZXR1cm4gV0tXUEU6OlZpZXc6OnBsYXRmb3JtV2ViUGFnZVByb3h5Rm9yR2FtZXBhZElucHV0KCk7
Cit9CisKK3ZvaWQgVUlHYW1lcGFkUHJvdmlkZXI6OnBsYXRmb3JtU3RvcE1vbml0b3JpbmdJbnB1
dCgpCit7Cit9CisKK3ZvaWQgVUlHYW1lcGFkUHJvdmlkZXI6OnBsYXRmb3JtU3RhcnRNb25pdG9y
aW5nSW5wdXQoKQoreworfQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25z
V1BFLmNtYWtlCmluZGV4IDBlMjM3MzIyMDlkZTUyYTM0MmU4ZGMxOWVlYTVlZmJiN2I4NWI5N2Eu
LmE5OWNiZTIxYjQxNGZmM2IzNjE1OTA4N2NkZDRmNDI0YTA5ZWYwODUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BF
LmNtYWtlCkBAIC00OSw2ICs0OSw3IEBAIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9DU1NfUEFJTlRJTkdfQVBJIFBSSVZBVEUgJHtFTkFCTEVfRVhQRVJJCiBXRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX1RZUEVEX09NIFBSSVZBVEUgJHtF
TkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTfSkKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9EQVJLX01PREVfQ1NTIFBSSVZBVEUgT04pCiBXRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRklMVEVSU19MRVZFTF8yIFBSSVZBVEUgT04pCitXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfR0FNRVBBRCBQUklWQVRFICR7RU5B
QkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFU30pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfR1BVX1BST0NFU1MgUFJJVkFURSBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfSU5URUxMSUdFTlRfVFJBQ0tJTkdfUFJFVkVOVElPTiBQUklW
QVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQgUFJJVkFURSAke0VOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVN9
KQpAQCAtMjE3LDcgKzIxOCw2IEBAIGlmIChFTkFCTEVfV0VCWFIpCiAgICAgaWYgKE5PVCBPUEVO
WFJfRk9VTkQpCiAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIk9wZW5YUiBpcyByZXF1aXJl
ZCB0byBlbmFibGUgV2ViWFIgc3VwcG9ydC4iKQogICAgIGVuZGlmICgpCi0gICAgU0VUX0FORF9F
WFBPU0VfVE9fQlVJTEQoRU5BQkxFX0dBTUVQQUQgT04pCiAgICAgU0VUX0FORF9FWFBPU0VfVE9f
QlVJTEQoVVNFX09QRU5YUiAke09wZW5YUl9GT1VORH0pCiAgICAgU0VUX0FORF9FWFBPU0VfVE9f
QlVJTEQoWFJfVVNFX1BMQVRGT1JNX0VHTCBUUlVFKQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JV
SUxEKFhSX1VTRV9HUkFQSElDU19BUElfT1BFTkdMIFRSVUUpCmRpZmYgLS1naXQgYS9DaGFuZ2VM
b2cgYi9DaGFuZ2VMb2cKaW5kZXggY2I4NzUyM2I1MWNkMWE0MmMyODViZTg3YjAzODFjOWUzNjRl
ODBjNS4uYzBlM2RiMTAxZTVhMWJiNGRjNTlmYmFhNTRmMDQ0ZDc2ZWE3MjdjZCAxMDA2NDQKLS0t
IGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA5LTIy
ICBWw61jdG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW1dQRV0gQWRkIGdhbWVwYWQgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIEdhbWVwYWQgQVBJIGFzIGV4cGVyaW1lbnRh
bCBmZWF0dXJlLgorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2U6CisK
IDIwMjEtMDktMTcgIEFuZ2Vsb3MgT2lrb25vbW9wb3Vsb3MgIDxhbmdlbG9zQGlnYWxpYS5jb20+
CiAKICAgICAgICAgVW5icmVhayBHQ0NfT0ZGTElORUFTTV9TT1VSQ0VfTUFQIHdoZW4gTFRPIGlz
IGluIHVzZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439064</attachid>
            <date>2021-09-23 10:54:17 -0700</date>
            <delta_ts>2022-02-10 04:31:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230630-20210923195416.patch</filename>
            <type>text/plain</type>
            <size>32491</size>
            <attacher name="Víctor M. Jáquez L.">vjaquez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyOTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGVhZDlmZWQ3N2Q4NzA3
ZTZiM2JjMGUxZGRiMTM2YjlmMDFhNzFiNi4uZjYyNTZiZDA4N2EzMDc3ODEzZWNhOWM1OGVjZTMx
MjRiYjVmYzUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDIxLTA5LTIyICBWw61j
dG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W1dQRV0gQWRkIGdhbWVwYWQgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEdhbXBlcGFkIEFQSSBmb3IgV1BFLgorCisgICAg
ICAgIE9yaWdpbmFsIHBhdGNoIGJ5IEV1Z2VuZSBNdXRhdmNoaSA8SWV2Z2VuX011dGF2Y2hpQGNv
bWNhc3QuY29tPi4KKworICAgICAgICBObyBuZXcgdGVzdHMuIENvbmZpcm1lZCBieSBleGlzdGlu
ZyB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3JtV1BFLmNtYWtlOgorICAgICAgICAqIFNvdXJj
ZXNXUEUudHh0OgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldQRUdhbWVwYWQ6OldQRUdhbWVwYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6V1BFR2FtZXBhZDo6fldQRUdhbWVwYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6V1BFR2FtZXBhZDo6YnV0dG9uUHJlc3NlZE9yUmVsZWFzZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6V1BFR2FtZXBhZDo6YWJzb2x1dGVBeGlzQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z2FtZXBhZC93cGUvV1BFR2FtZXBhZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1l
cGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldQRUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OldQRUdh
bWVwYWRQcm92aWRlcjo6V1BFR2FtZXBhZFByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldQ
RUdhbWVwYWRQcm92aWRlcjo6fldQRUdhbWVwYWRQcm92aWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXUEVHYW1lcGFkUHJvdmlkZXI6OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKToKKyAgICAgICAg
KFdlYkNvcmU6OldQRUdhbWVwYWRQcm92aWRlcjo6c3RvcE1vbml0b3JpbmdHYW1lcGFkcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXUEVHYW1lcGFkUHJvdmlkZXI6OmdhbWVwYWRDb25uZWN0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6V1BFR2FtZXBhZFByb3ZpZGVyOjpnYW1lcGFkRGljb25uZWN0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6V1BFR2FtZXBhZFByb3ZpZGVyOjppbmRleEZvck5ld2x5Q29u
bmVjdGVkRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OldQRUdhbWVwYWRQcm92aWRlcjo6cmVt
b3ZlR2FtZXBhZEZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6OldQRUdhbWVwYWRQcm92aWRlcjo6
aW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpX
UEVHYW1lcGFkUHJvdmlkZXI6OmlucHV0Tm90aWZpY2F0aW9uVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJDb3JlOjpXUEVHYW1lcGFkUHJvdmlkZXI6OnNjaGVkdWxlSW5wdXROb3RpZmljYXRpb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWRQcm92aWRlci5oOiBB
ZGRlZC4KKwogMjAyMS0wOS0wOSAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlh
LmNvbT4KIAogICAgICAgICBJbXByb3ZlIHRoZSBoYW5kbGluZyBvZiBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6c3BsaXRUcmVlVG9Ob2RlKCkgcmV0dXJuIHZhbHVlcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA2ODE3MGM1
Yjg0ZmEzMDFmYTUzMTM3NmFkYmQxMzQ0ZTlhZmFiZTQ4Li41ODIxZjliMTViZmZlMmI2NzNiM2U0
Yzk5ZjU5MTJhZGJjYzA2ODY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIxLTA5LTIy
ICBWw61jdG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW1dQRV0gQWRkIGdhbWVwYWQgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSGFuZGxlIGEgdmVjdG9yIG9mIGNyZWF0ZWQgdmlld3Mg
aW4gb3JkZXIgdG8gc2VsZWN0IHRoZSBvbmUgd2hlcmUgZ2FtZXBhZHMgYXJlIGFjdGl2ZS4KKwor
ICAgICAgICBPcmlnaW5hbCBwYXRjaCBieSBFdWdlbmUgTXV0YXZjaGkgPElldmdlbl9NdXRhdmNo
aUBjb21jYXN0LmNvbT4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBTb3Vy
Y2VzV1BFLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcDoKKyAg
ICAgICAgKFdLV1BFOjptX2JhY2tlbmQpOgorICAgICAgICAoV0tXUEU6OlZpZXc6On5WaWV3KToK
KyAgICAgICAgKFdLV1BFOjpWaWV3OjpzZXRWaWV3U3RhdGUpOgorICAgICAgICAoV0tXUEU6OlZp
ZXc6OnBsYXRmb3JtV2ViUGFnZVByb3h5Rm9yR2FtZXBhZElucHV0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3dwZS9XUEVWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0dhbWVwYWQvVUlH
YW1lcGFkUHJvdmlkZXIuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9HYW1lcGFkL3dwZS9VSUdh
bWVwYWRQcm92aWRlcldQRS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpVSUdhbWVwYWRQ
cm92aWRlcjo6cGxhdGZvcm1TZXREZWZhdWx0R2FtZXBhZFByb3ZpZGVyKToKKyAgICAgICAgKFdl
YktpdDo6VUlHYW1lcGFkUHJvdmlkZXI6OnBsYXRmb3JtV2ViUGFnZVByb3h5Rm9yR2FtZXBhZElu
cHV0KToKKyAgICAgICAgKFdlYktpdDo6VUlHYW1lcGFkUHJvdmlkZXI6OnBsYXRmb3JtU3RvcE1v
bml0b3JpbmdJbnB1dCk6CisgICAgICAgIChXZWJLaXQ6OlVJR2FtZXBhZFByb3ZpZGVyOjpwbGF0
Zm9ybVN0YXJ0TW9uaXRvcmluZ0lucHV0KToKKwogMjAyMS0wOS0yMyAgQ2hyaXMgTG9yZCAgPGNs
b3JkQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWxsb3cgc2VuZGluZyBwcmVjaXNlIG1v
dXNlIHdoZWVsIGV2ZW50cyBpbiBMYXlvdXRUZXN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1XUEUuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5jbWFrZQpp
bmRleCA5ZjRkYWVmY2QzODVkNTM0MTQ5ZjBhNWE2Y2UwZTgwMTZlMjU2MzhmLi5hY2ZjZjRjNzk4
NzkwZjg0OWExZTQyMGMwYmI1NzdlNDEzMDE5NDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybVdQRS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5jbWFr
ZQpAQCAtOTIsMyArOTIsOSBAQCBpZiAoVVNFX09QRU5YUikKICAgICBsaXN0KEFQUEVORCBXZWJD
b3JlX0xJQlJBUklFUyAke09QRU5YUl9MSUJSQVJJRVN9KQogICAgIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMgJHtPUEVOWFJfSU5DTFVERV9ESVJTfSkKIGVu
ZGlmICgpCisKK2lmIChFTkFCTEVfR0FNRVBBRCkKKyAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKKyAgICAgICAgcGxhdGZvcm0vZ2FtZXBhZC93cGUvV1BF
R2FtZXBhZFByb3ZpZGVyLmgKKyAgICApCitlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvU291cmNlc1dQRS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dAppbmRl
eCBhOWEyNzkxNDE4MDE2OTkxZGIyNGQ1YmYwOWM5ZTUxMGM4MDEzM2I4Li44ZDVjMTYyN2E0N2Y4
MDVkNmNjNDliZGFiOGIyNGQ2MmY4MTUwNDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzV1BFLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dApAQCAtNjMs
NiArNjMsOSBAQCBwbGF0Zm9ybS9Vc2VyQWdlbnRRdWlya3MuY3BwCiBwbGF0Zm9ybS9hZHdhaXRh
L1Njcm9sbGJhclRoZW1lQWR3YWl0YS5jcHAKIHBsYXRmb3JtL2Fkd2FpdGEvVGhlbWVBZHdhaXRh
LmNwcAogCitwbGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkLmNwcAorcGxhdGZvcm0vZ2Ft
ZXBhZC93cGUvV1BFR2FtZXBhZFByb3ZpZGVyLmNwcAorCiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9s
bEFuaW1hdG9yR2VuZXJpYy5jcHAKIHBsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsYmFyc0NvbnRyb2xs
ZXJHZW5lcmljLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1l
cGFkL3dwZS9XUEVHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQv
d3BlL1dQRUdhbWVwYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3Y2VkMzY4NjMxMTQzZGZiNDA4MGFmY2Zi
NmQzMmE0YzZjZmI5NzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkLmNwcApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBSREsgTWFuYWdlbWVudCAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV1BFR2FtZXBhZC5oIgorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisK
KyNpbmNsdWRlICJXUEVHYW1lcGFkUHJvdmlkZXIuaCIKKyNpbmNsdWRlIDx3cGUvd3BlLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1BFR2FtZXBhZDo6V1BFR2FtZXBhZCh1bnNpZ25lZCBn
YW1lcGFkSWQsIHVuc2lnbmVkIGluZGV4KQorICAgIDogUGxhdGZvcm1HYW1lcGFkKGluZGV4KQor
ICAgICwgbV9nYW1lcGFkKHdwZV9nYW1lcGFkX2NyZWF0ZShnYW1lcGFkSWQpKQoreworICAgIEFT
U0VSVChtX2dhbWVwYWQpOworCisgICAgbV9jb25uZWN0VGltZSA9IG1fbGFzdFVwZGF0ZVRpbWUg
PSBNb25vdG9uaWNUaW1lOjpub3coKTsKKworICAgIG1faWQgPSBTdHJpbmc6OmZyb21VVEY4KHdw
ZV9nYW1lcGFkX2dldF9pZChtX2dhbWVwYWQpKTsKKyAgICBtX21hcHBpbmcgPSBTdHJpbmc6OmZy
b21VVEY4KCJzdGFuZGFyZCIpOworCisgICAgc3RhdGljIHN0cnVjdCB3cGVfZ2FtZXBhZF9jbGll
bnRfaW50ZXJmYWNlIHNfY2xpZW50ID0geworICAgICAgICAvLyBidXR0b25fZXZlbnQKKyAgICAg
ICAgW10odm9pZCogZGF0YSwgZW51bSBTdGFuZGFyZEdhbWVwYWRCdXR0b24gYnV0dG9uLCBib29s
IHByZXNzZWQpIHsKKyAgICAgICAgICAgIGF1dG8mIHNlbGYgPSAqcmVpbnRlcnByZXRfY2FzdDxX
UEVHYW1lcGFkKj4oZGF0YSk7CisgICAgICAgICAgICBpZiAoYnV0dG9uICE9IEdBTUVQQURfQlVU
VE9OX1VOS05PV04pCisgICAgICAgICAgICAgICAgc2VsZi5idXR0b25QcmVzc2VkT3JSZWxlYXNl
ZChzdGF0aWNfY2FzdDxpbnQ+KGJ1dHRvbiksIHByZXNzZWQpOworICAgICAgICB9LAorICAgICAg
ICAvLyBheGlzX2V2ZW50CisgICAgICAgIFtdKHZvaWQqIGRhdGEsIGVudW0gU3RhbmRhcmRHYW1l
cGFkQXhpcyBheGlzLCBkb3VibGUgdmFsdWUpIHsKKyAgICAgICAgICAgIGF1dG8mIHNlbGYgPSAq
cmVpbnRlcnByZXRfY2FzdDxXUEVHYW1lcGFkKj4oZGF0YSk7CisgICAgICAgICAgICBpZiAoYXhp
cyAhPSBHQU1FUEFEX0FYSVNfVU5LTk9XTikKKyAgICAgICAgICAgICAgICBzZWxmLmFic29sdXRl
QXhpc0NoYW5nZWQoc3RhdGljX2Nhc3Q8aW50PihheGlzKSwgdmFsdWUpOworICAgICAgICB9Cisg
ICAgfTsKKyAgICB3cGVfZ2FtZXBhZF9zZXRfY2xpZW50KG1fZ2FtZXBhZCwgJnNfY2xpZW50LCB0
aGlzKTsKKworICAgIG1fYnV0dG9uVmFsdWVzLnJlc2l6ZShzdGF0aWNfY2FzdDxzaXplX3Q+KEdB
TUVQQURfQlVUVE9OX0NPVU5UKSk7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IG1fYnV0dG9uVmFs
dWVzKQorICAgICAgICB2YWx1ZS5zZXRWYWx1ZSgwLjApOworCisgICAgbV9heGlzVmFsdWVzLnJl
c2l6ZShzdGF0aWNfY2FzdDxzaXplX3Q+KEdBTUVQQURfQVhJU19DT1VOVCkpOworICAgIGZvciAo
YXV0byYgdmFsdWUgOiBtX2F4aXNWYWx1ZXMpCisgICAgICAgIHZhbHVlLnNldFZhbHVlKDAuMCk7
Cit9CisKK1dQRUdhbWVwYWQ6On5XUEVHYW1lcGFkKCkKK3sKKyAgICBpZiAoIW1fZ2FtZXBhZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgd3BlX2dhbWVwYWRfc2V0X2NsaWVudChtX2dhbWVwYWQs
IG51bGxwdHIsIG51bGxwdHIpOworICAgIHdwZV9nYW1lcGFkX2Rlc3Ryb3kobV9nYW1lcGFkKTsK
KyAgICBtX2dhbWVwYWQgPSBudWxscHRyOworfQorCit2b2lkIFdQRUdhbWVwYWQ6OmJ1dHRvblBy
ZXNzZWRPclJlbGVhc2VkKGludCBidXR0b24sIGJvb2wgcHJlc3NlZCkKK3sKKyAgICBtX2xhc3RV
cGRhdGVUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgbV9idXR0b25WYWx1ZXNbYnV0
dG9uXS5zZXRWYWx1ZShwcmVzc2VkID8gMS4wIDogMC4wKTsKKworICAgIFdQRUdhbWVwYWRQcm92
aWRlcjo6c2luZ2xldG9uKCkuc2NoZWR1bGVJbnB1dE5vdGlmaWNhdGlvbigqdGhpcywgcHJlc3Nl
ZCA/IFdQRUdhbWVwYWRQcm92aWRlcjo6U2hvdWxkTWFrZUdhbWVwYWRzVmlzaWJsZTo6WWVzIDog
V1BFR2FtZXBhZFByb3ZpZGVyOjpTaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlOjpObyk7Cit9CisK
K3ZvaWQgV1BFR2FtZXBhZDo6YWJzb2x1dGVBeGlzQ2hhbmdlZChpbnQgYXhpcywgZG91YmxlIHZh
bHVlKQoreworICAgIG1fbGFzdFVwZGF0ZVRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAg
ICBtX2F4aXNWYWx1ZXNbYXhpc10uc2V0VmFsdWUodmFsdWUpOworCisgICAgV1BFR2FtZXBhZFBy
b3ZpZGVyOjpzaW5nbGV0b24oKS5zY2hlZHVsZUlucHV0Tm90aWZpY2F0aW9uKCp0aGlzLCBXUEVH
YW1lcGFkUHJvdmlkZXI6OlNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGU6Ok5vKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTVkNTI5MmU3NGJmNmYwYzQ2ZWU5MjRiNTc2NTE4NmU5OWM2OGFlZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWQuaApA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFJESyBNYW5hZ2VtZW50
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNs
dWRlICJQbGF0Zm9ybUdhbWVwYWQuaCIKKworc3RydWN0IHdwZV9nYW1lcGFkOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFdQRUdhbWVwYWQgZmluYWwgOiBwdWJsaWMgUGxhdGZvcm1H
YW1lcGFkIHsKK3B1YmxpYzoKKyAgICBXUEVHYW1lcGFkKHVuc2lnbmVkLCB1bnNpZ25lZCk7Cisg
ICAgdmlydHVhbCB+V1BFR2FtZXBhZCgpOworCisgICAgY29uc3QgVmVjdG9yPFNoYXJlZEdhbWVw
YWRWYWx1ZT4mIGF4aXNWYWx1ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2F4aXNWYWx1ZXM7
IH0KKyAgICBjb25zdCBWZWN0b3I8U2hhcmVkR2FtZXBhZFZhbHVlPiYgYnV0dG9uVmFsdWVzKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9idXR0b25WYWx1ZXM7IH0KKworICAgIGNvbnN0IHN0cnVj
dCB3cGVfZ2FtZXBhZCogd3BlR2FtZXBhZCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2FtZXBhZDsgfQor
Citwcml2YXRlOgorICAgIHZvaWQgYnV0dG9uUHJlc3NlZE9yUmVsZWFzZWQoaW50LCBib29sKTsK
KyAgICB2b2lkIGFic29sdXRlQXhpc0NoYW5nZWQoaW50LCBkb3VibGUpOworCisgICAgVmVjdG9y
PFNoYXJlZEdhbWVwYWRWYWx1ZT4gbV9idXR0b25WYWx1ZXM7CisgICAgVmVjdG9yPFNoYXJlZEdh
bWVwYWRWYWx1ZT4gbV9heGlzVmFsdWVzOworCisgICAgc3RydWN0IHdwZV9nYW1lcGFkKiBtX2dh
bWVwYWQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dhbWVwYWQvd3BlL1dQRUdhbWVwYWRQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRmMzIy
MGQxMDI2ZDlhYzdiMzQ5MTQ3MjA4MjIzMTQ2OTJkMzQ4MWMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuY3Bw
CkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFJESyBNYW5hZ2Vt
ZW50ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXUEVHYW1lcGFk
UHJvdmlkZXIuaCIKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSAiR2FtZXBhZFBy
b3ZpZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIldQRUdhbWVw
YWQuaCIKKyNpbmNsdWRlIDx3cGUvd3BlLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IFNlY29uZHMgY29ubmVj
dGlvbkRlbGF5SW50ZXJ2YWwgeyA1MDBfbXMgfTsKK3N0YXRpYyBjb25zdCBTZWNvbmRzIGlucHV0
Tm90aWZpY2F0aW9uRGVsYXkgeyA1MF9tcyB9OworCitXUEVHYW1lcGFkUHJvdmlkZXImIFdQRUdh
bWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
V1BFR2FtZXBhZFByb3ZpZGVyPiBzaGFyZWRQcm92aWRlcjsKKyAgICByZXR1cm4gc2hhcmVkUHJv
dmlkZXI7Cit9CisKK1dQRUdhbWVwYWRQcm92aWRlcjo6V1BFR2FtZXBhZFByb3ZpZGVyKCkKKyAg
ICA6IG1fcHJvdmlkZXIod3BlX2dhbWVwYWRfcHJvdmlkZXJfY3JlYXRlKCkpCisgICAgLCBtX2lu
aXRpYWxHYW1lcGFkc0Nvbm5lY3RlZFRpbWVyKFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJldQ
RUdhbWVwYWRQcm92aWRlcjo6aW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGltZXJGaXJlZCkKKyAg
ICAsIG1faW5wdXROb3RpZmljYXRpb25UaW1lcihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZX
UEVHYW1lcGFkUHJvdmlkZXI6OmlucHV0Tm90aWZpY2F0aW9uVGltZXJGaXJlZCkKK3sKKyAgICBp
ZiAoIW1fcHJvdmlkZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpYyBzdHJ1Y3Qgd3Bl
X2dhbWVwYWRfcHJvdmlkZXJfY2xpZW50X2ludGVyZmFjZSBzX2NsaWVudCA9IHsKKyAgICAgICAg
Ly8gY29ubmVjdGVkCisgICAgICAgIFtdKHZvaWQqIGRhdGEsIHVuc2lnbmVkIGdhbWVwYWRJZCkg
eworICAgICAgICAgICAgYXV0byYgcHJvdmlkZXIgPSAqcmVpbnRlcnByZXRfY2FzdDxXUEVHYW1l
cGFkUHJvdmlkZXIqPihkYXRhKTsKKyAgICAgICAgICAgIHByb3ZpZGVyLmdhbWVwYWRDb25uZWN0
ZWQoZ2FtZXBhZElkKTsKKyAgICAgICAgfSwKKyAgICAgICAgLy8gZGlzY29ubmVjdGVkCisgICAg
ICAgIFtdKHZvaWQqIGRhdGEsIHVuc2lnbmVkIGdhbWVwYWRJZCkgeworICAgICAgICAgICAgYXV0
byYgcHJvdmlkZXIgPSAqcmVpbnRlcnByZXRfY2FzdDxXUEVHYW1lcGFkUHJvdmlkZXIqPihkYXRh
KTsKKyAgICAgICAgICAgIHByb3ZpZGVyLmdhbWVwYWREaWNvbm5lY3RlZChnYW1lcGFkSWQpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIHdwZV9nYW1lcGFkX3Byb3ZpZGVyX3NldF9jbGllbnQo
bV9wcm92aWRlciwgJnNfY2xpZW50LCB0aGlzKTsKK30KKworV1BFR2FtZXBhZFByb3ZpZGVyOjp+
V1BFR2FtZXBhZFByb3ZpZGVyKCkKK3sKKyAgICB3cGVfZ2FtZXBhZF9wcm92aWRlcl9zZXRfY2xp
ZW50KG1fcHJvdmlkZXIsIG51bGxwdHIsIG51bGxwdHIpOworICAgIHdwZV9nYW1lcGFkX3Byb3Zp
ZGVyX2Rlc3Ryb3kobV9wcm92aWRlcik7CisgICAgbV9wcm92aWRlciA9IG51bGxwdHI7Cit9CisK
K3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjpzdGFydE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFk
UHJvdmlkZXJDbGllbnQmIGNsaWVudCkKK3sKKyAgICBpZiAoIW1fcHJvdmlkZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIGJvb2wgc2hvdWxkT3BlbkFuZFNjaGVkdWxlTWFuYWdlciA9IG1fY2xp
ZW50cy5pc0VtcHR5KCk7CisKKyAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50
KSk7CisgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKKworICAgIGlmICghc2hvdWxkT3BlbkFu
ZFNjaGVkdWxlTWFuYWdlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fZ2FtZXBh
ZFZlY3Rvci5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2dhbWVwYWRNYXAuaXNFbXB0eSgpKTsK
KworICAgIG1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkID0gZmFsc2U7CisKKyAgICAvLyBBbnkg
Y29ubmVjdGlvbnMgd2UgYXJlIG5vdGlmaWVkIG9mIHdpdGhpbiB0aGUgY29ubmVjdGlvbkRlbGF5
SW50ZXJ2YWwgb2YgbGlzdGVuaW5nIGxpa2VseSByZXByZXNlbnQKKyAgICAvLyBkZXZpY2VzIHRo
YXQgd2VyZSBhbHJlYWR5IGNvbm5lY3RlZCwgc28gd2Ugc3VwcHJlc3Mgbm90aWZ5aW5nIGNsaWVu
dHMgb2YgdGhlc2UuCisgICAgbV9pbml0aWFsR2FtZXBhZHNDb25uZWN0ZWRUaW1lci5zdGFydE9u
ZVNob3QoY29ubmVjdGlvbkRlbGF5SW50ZXJ2YWwpOworCisgICAgd3BlX2dhbWVwYWRfcHJvdmlk
ZXJfc3RhcnQobV9wcm92aWRlcik7Cit9CisKK3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjpzdG9w
TW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCYgY2xpZW50KQoreworICAg
IGlmICghbV9wcm92aWRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fY2xpZW50
cy5jb250YWlucygmY2xpZW50KSk7CisKKyAgICBib29sIHNob3VsZENsb3NlQW5kVW5zY2hlZHVs
ZU1hbmFnZXIgPSBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpICYmIG1fY2xpZW50cy5pc0VtcHR5
KCk7CisgICAgaWYgKCFzaG91bGRDbG9zZUFuZFVuc2NoZWR1bGVNYW5hZ2VyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB3cGVfZ2FtZXBhZF9wcm92aWRlcl9zdG9wKG1fcHJvdmlkZXIpOworCisg
ICAgbV9nYW1lcGFkVmVjdG9yLmNsZWFyKCk7CisgICAgbV9nYW1lcGFkTWFwLmNsZWFyKCk7Cisg
ICAgbV9pbml0aWFsR2FtZXBhZHNDb25uZWN0ZWRUaW1lci5zdG9wKCk7CisgICAgbV9sYXN0QWN0
aXZlR2FtZXBhZCA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjpnYW1l
cGFkQ29ubmVjdGVkKHVuc2lnbmVkIGlkKQoreworICAgIEFTU0VSVCghbV9nYW1lcGFkTWFwLmdl
dChpZCkpOworICAgIEFTU0VSVChtX3Byb3ZpZGVyKTsKKworICAgIExPRyhHYW1lcGFkLCAiV1BF
R2FtZXBhZFByb3ZpZGVyIGRldmljZSAldSBhZGRlZCIsIGlkKTsKKworICAgIHVuc2lnbmVkIGlu
ZGV4ID0gaW5kZXhGb3JOZXdseUNvbm5lY3RlZERldmljZSgpOworICAgIGF1dG8gZ2FtZXBhZCA9
IG1ha2VVbmlxdWU8V1BFR2FtZXBhZD4oaWQsIGluZGV4KTsKKworICAgIGlmIChtX2dhbWVwYWRW
ZWN0b3Iuc2l6ZSgpIDw9IGluZGV4KQorICAgICAgICBtX2dhbWVwYWRWZWN0b3IuZ3JvdyhpbmRl
eCArIDEpOworCisgICAgbV9nYW1lcGFkVmVjdG9yW2luZGV4XSA9IGdhbWVwYWQuZ2V0KCk7Cisg
ICAgbV9nYW1lcGFkTWFwLnNldChpZCwgV1RGTW92ZShnYW1lcGFkKSk7CisKKyAgICBpZiAoIW1f
aW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkKSB7CisgICAgICAgIC8vIFRoaXMgYWRkZWQgZGV2aWNl
IGlzIHRoZSByZXN1bHQgb2YgdXMgc3RhcnRpbmcgdG8gbW9uaXRvciBnYW1lcGFkcy4KKyAgICAg
ICAgLy8gV2UnbGwgZ2V0IG5vdGlmaWVkIG9mIGFsbCBjb25uZWN0ZWQgZGV2aWNlcyBkdXJpbmcg
dGhpcyBjdXJyZW50IHNwaW4gb2YgdGhlIHJ1bmxvb3AKKyAgICAgICAgLy8gYW5kIHRoZSBjbGll
bnQgc2hvdWxkIGJlIHRvbGQgdGhleSB3ZXJlIGFscmVhZHkgY29ubmVjdGVkLgorICAgICAgICAv
LyBUaGUgbV9jb25uZWN0aW9uRGVsYXlUaW1lciBmaXJlcyBpbiBhIHN1YnNlcXVlbnQgc3BpbiBv
ZiB0aGUgcnVubG9vcCBhZnRlciB3aGljaAorICAgICAgICAvLyBhbnkgY29ubmVjdGlvbiBldmVu
dHMgYXJlIGFjdHVhbCBuZXcgZGV2aWNlcyBhbmQgY2FuIHRyaWdnZXIgZ2FtZXBhZCB2aXNpYmls
aXR5LgorICAgICAgICBpZiAoIW1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGltZXIuaXNBY3Rp
dmUoKSkKKyAgICAgICAgICAgIG1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGltZXIuc3RhcnRP
bmVTaG90KDBfcyk7CisgICAgfQorCisgICAgYXV0byBldmVudFZpc2liaWxpdHkgPSBtX2luaXRp
YWxHYW1lcGFkc0Nvbm5lY3RlZCA/IEV2ZW50TWFrZXNHYW1lcGFkc1Zpc2libGU6OlllcyA6IEV2
ZW50TWFrZXNHYW1lcGFkc1Zpc2libGU6Ok5vOworICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9j
bGllbnRzKQorICAgICAgICBjbGllbnQtPnBsYXRmb3JtR2FtZXBhZENvbm5lY3RlZCgqbV9nYW1l
cGFkVmVjdG9yW2luZGV4XSwgZXZlbnRWaXNpYmlsaXR5KTsKK30KKwordm9pZCBXUEVHYW1lcGFk
UHJvdmlkZXI6OmdhbWVwYWREaWNvbm5lY3RlZCh1bnNpZ25lZCBpZCkKK3sKKyAgICBMT0coR2Ft
ZXBhZCwgIldQRUdhbWVwYWRQcm92aWRlciBkZXZpY2UgJXUgcmVtb3ZlZCIsIGlkKTsKKworICAg
IGF1dG8gcmVtb3ZlZEdhbWVwYWQgPSByZW1vdmVHYW1lcGFkRm9ySWQoaWQpOworICAgIEFTU0VS
VChyZW1vdmVkR2FtZXBhZCk7CisKKyAgICBpZiAocmVtb3ZlZEdhbWVwYWQtPndwZUdhbWVwYWQo
KSA9PSBtX2xhc3RBY3RpdmVHYW1lcGFkKQorICAgICAgICBtX2xhc3RBY3RpdmVHYW1lcGFkID0g
bnVsbHB0cjsKKworICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBj
bGllbnQtPnBsYXRmb3JtR2FtZXBhZERpc2Nvbm5lY3RlZCgqcmVtb3ZlZEdhbWVwYWQpOworfQor
Cit1bnNpZ25lZCBXUEVHYW1lcGFkUHJvdmlkZXI6OmluZGV4Rm9yTmV3bHlDb25uZWN0ZWREZXZp
Y2UoKQoreworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICB3aGlsZSAoaW5kZXggPCBtX2dh
bWVwYWRWZWN0b3Iuc2l6ZSgpICYmIG1fZ2FtZXBhZFZlY3RvcltpbmRleF0pCisgICAgICAgICsr
aW5kZXg7CisKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxXUEVHYW1l
cGFkPiBXUEVHYW1lcGFkUHJvdmlkZXI6OnJlbW92ZUdhbWVwYWRGb3JJZCh1bnNpZ25lZCBpZCkK
K3sKKyAgICBhdXRvIHJlbW92ZWRHYW1lcGFkID0gbV9nYW1lcGFkTWFwLnRha2UoaWQpOworICAg
IEFTU0VSVChyZW1vdmVkR2FtZXBhZCk7CisKKyAgICBhdXRvIGluZGV4ID0gbV9nYW1lcGFkVmVj
dG9yLmZpbmQocmVtb3ZlZEdhbWVwYWQuZ2V0KCkpOworICAgIGlmIChpbmRleCAhPSBub3RGb3Vu
ZCkKKyAgICAgICAgbV9nYW1lcGFkVmVjdG9yW2luZGV4XSA9IG51bGxwdHI7CisKKyAgICByZXR1
cm4gcmVtb3ZlZEdhbWVwYWQ7Cit9CisKK3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjppbml0aWFs
R2FtZXBhZHNDb25uZWN0ZWRUaW1lckZpcmVkKCkKK3sKKyAgICBtX2luaXRpYWxHYW1lcGFkc0Nv
bm5lY3RlZCA9IHRydWU7Cit9CisKK3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjppbnB1dE5vdGlm
aWNhdGlvblRpbWVyRmlyZWQoKQoreworICAgIGlmICghbV9pbml0aWFsR2FtZXBhZHNDb25uZWN0
ZWQpIHsKKyAgICAgICAgaWYgKCFtX2lucHV0Tm90aWZpY2F0aW9uVGltZXIuaXNBY3RpdmUoKSkK
KyAgICAgICAgICAgIG1faW5wdXROb3RpZmljYXRpb25UaW1lci5zdGFydE9uZVNob3QoMF9zKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRpc3BhdGNoUGxhdGZvcm1HYW1lcGFkSW5w
dXRBY3Rpdml0eSgpOworfQorCit2b2lkIFdQRUdhbWVwYWRQcm92aWRlcjo6c2NoZWR1bGVJbnB1
dE5vdGlmaWNhdGlvbihXUEVHYW1lcGFkJiBnYW1lcGFkLCBTaG91bGRNYWtlR2FtZXBhZHNWaXNp
YmxlIHNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGUpCit7CisgICAgbV9sYXN0QWN0aXZlR2FtZXBh
ZCA9IGNvbnN0X2Nhc3Q8c3RydWN0IHdwZV9nYW1lcGFkKj4oZ2FtZXBhZC53cGVHYW1lcGFkKCkp
OworCisgICAgaWYgKCFtX2lucHV0Tm90aWZpY2F0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgbV9pbnB1dE5vdGlmaWNhdGlvblRpbWVyLnN0YXJ0T25lU2hvdChpbnB1dE5vdGlmaWNhdGlv
bkRlbGF5KTsKKworICAgIGlmIChzaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlID09IFNob3VsZE1h
a2VHYW1lcGFkc1Zpc2libGU6OlllcykKKyAgICAgICAgc2V0U2hvdWxkTWFrZUdhbWVwYWRzVmlz
aWJpbGUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL3dw
ZS9XUEVHYW1lcGFkUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQv
d3BlL1dQRUdhbWVwYWRQcm92aWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4MGNmYThmYjRkNWNjODYxNzBl
MzNhZjhmMTE4Mjg3ZDg0MmUzOTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuaApAQCAtMCwwICsxLDgzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFJESyBNYW5hZ2VtZW50ICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlICJHYW1lcGFkUHJv
dmlkZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29w
Lmg+CisKK3N0cnVjdCB3cGVfZ2FtZXBhZF9wcm92aWRlcjsKK3N0cnVjdCB3cGVfdmlld19iYWNr
ZW5kOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdQRUdhbWVwYWQ7CisKK2NsYXNz
IFdQRUdhbWVwYWRQcm92aWRlciBmaW5hbCA6IHB1YmxpYyBHYW1lcGFkUHJvdmlkZXIgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFdQRUdhbWVwYWRQcm92aWRlcik7CisgICAgZnJpZW5kIGNs
YXNzIE5ldmVyRGVzdHJveWVkPFdQRUdhbWVwYWRQcm92aWRlcj47CisKK3B1YmxpYzoKKyAgICBz
dGF0aWMgV1BFR2FtZXBhZFByb3ZpZGVyJiBzaW5nbGV0b24oKTsKKworICAgIHZpcnR1YWwgfldQ
RUdhbWVwYWRQcm92aWRlcigpOworCisgICAgdm9pZCBzdGFydE1vbml0b3JpbmdHYW1lcGFkcyhH
YW1lcGFkUHJvdmlkZXJDbGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BNb25pdG9yaW5nR2Ft
ZXBhZHMoR2FtZXBhZFByb3ZpZGVyQ2xpZW50JikgZmluYWw7CisgICAgY29uc3QgVmVjdG9yPFBs
YXRmb3JtR2FtZXBhZCo+JiBwbGF0Zm9ybUdhbWVwYWRzKCkgZmluYWwgeyByZXR1cm4gbV9nYW1l
cGFkVmVjdG9yOyB9CisKKyAgICBlbnVtIGNsYXNzIFNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGUg
OiBib29sIHsgTm8sCisgICAgICAgIFllcyB9OworICAgIHZvaWQgc2NoZWR1bGVJbnB1dE5vdGlm
aWNhdGlvbihXUEVHYW1lcGFkJiwgU2hvdWxkTWFrZUdhbWVwYWRzVmlzaWJsZSk7CisKK3ByaXZh
dGU6CisgICAgV1BFR2FtZXBhZFByb3ZpZGVyKCk7CisKKyAgICB2b2lkIGdhbWVwYWRDb25uZWN0
ZWQodW5zaWduZWQpOworICAgIHZvaWQgZ2FtZXBhZERpY29ubmVjdGVkKHVuc2lnbmVkKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V1BFR2FtZXBhZD4gcmVtb3ZlR2FtZXBhZEZvcklkKHVuc2lnbmVk
KTsKKworICAgIHVuc2lnbmVkIGluZGV4Rm9yTmV3bHlDb25uZWN0ZWREZXZpY2UoKTsKKyAgICB2
b2lkIGluaXRpYWxHYW1lcGFkc0Nvbm5lY3RlZFRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIGlucHV0
Tm90aWZpY2F0aW9uVGltZXJGaXJlZCgpOworCisgICAgVmVjdG9yPFBsYXRmb3JtR2FtZXBhZCo+
IG1fZ2FtZXBhZFZlY3RvcjsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8
V1BFR2FtZXBhZD4+IG1fZ2FtZXBhZE1hcDsKKyAgICBib29sIG1faW5pdGlhbEdhbWVwYWRzQ29u
bmVjdGVkIHsgZmFsc2UgfTsKKworICAgIHN0cnVjdCB3cGVfZ2FtZXBhZF9wcm92aWRlciogbV9w
cm92aWRlciB7IG51bGxwdHIgfTsKKyAgICBzdHJ1Y3Qgd3BlX2dhbWVwYWQqIG1fbGFzdEFjdGl2
ZUdhbWVwYWQgeyBudWxscHRyIH07CisKKyAgICBSdW5Mb29wOjpUaW1lcjxXUEVHYW1lcGFkUHJv
dmlkZXI+IG1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGltZXI7CisgICAgUnVuTG9vcDo6VGlt
ZXI8V1BFR2FtZXBhZFByb3ZpZGVyPiBtX2lucHV0Tm90aWZpY2F0aW9uVGltZXI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNXUEUudHh0CmluZGV4IDJhNGY0MDZhYmI4YWZiMzA0ZWUzOGQ2MmIzYTJiZjc2MDg5NGNkYTYu
LmJlNmY0MjE5OTc3ZmU4MDA3MDJiNDA2YjM2YWRkZWQwNDYwZjNiMmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BF
LnR4dApAQCAtMTk3LDYgKzE5Nyw4IEBAIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL3dwZS9XZWJBdXRv
bWF0aW9uU2Vzc2lvbldQRS5jcHAKIAogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJh
d2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCiAKK1VJUHJvY2Vzcy9HYW1lcGFk
L3dwZS9VSUdhbWVwYWRQcm92aWRlcldQRS5jcHAKKwogVUlQcm9jZXNzL2dlb2NsdWUvR2VvY2x1
ZUdlb2xvY2F0aW9uUHJvdmlkZXIuY3BwCiAKIFVJUHJvY2Vzcy9nbGliL1dlYlBhZ2VQcm94eUdM
aWIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZp
ZXcuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcAppbmRl
eCA1NTM2ZmJjNTQzMDk2OWUxNjYwMDMyYjI0OWM2YmM4NDY1M2MyMzNhLi43ZGNjNWY4ZjRjNjZh
MWI0MjY4ZmU0NWNjNWQ0ZjNjMmFmZjAxYTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvV1BFVmlldy5jcHAKQEAgLTQwLDExICs0MCwxOCBAQAogI2luY2x1ZGUgIldlYlBy
b2Nlc3NQb29sLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db21wb3NpdGlvblVuZGVybGluZS5oPgog
I2luY2x1ZGUgPHdwZS93cGUuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIFdLV1BFIHsKIAorc3RhdGljIFZl
Y3RvcjxWaWV3Kj4mIHZpZXdzVmVjdG9yKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
VmVjdG9yPFZpZXcqPj4gdmVjdG9yOworICAgIHJldHVybiB2ZWN0b3I7Cit9CisKIFZpZXc6OlZp
ZXcoc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQSTo6UGFnZUNvbmZp
Z3VyYXRpb24mIGJhc2VDb25maWd1cmF0aW9uKQogICAgIDogbV9jbGllbnQobWFrZVVuaXF1ZTxB
UEk6OlZpZXdDbGllbnQ+KCkpCiAgICAgLCBtX3RvdWNoR2VzdHVyZUNvbnRyb2xsZXIobWFrZVVu
aXF1ZTxUb3VjaEdlc3R1cmVDb250cm9sbGVyPigpKQpAQCAtMjk0LDEwICszMDEsMTMgQEAgVmll
dzo6VmlldyhzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogYmFja2VuZCwgY29uc3QgQVBJOjpQYWdl
Q29uZmlndXJhdGlvbiYgYmFzZUMKICAgICB3cGVfdmlld19iYWNrZW5kX2luaXRpYWxpemUobV9i
YWNrZW5kKTsKIAogICAgIG1fcGFnZVByb3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOworCisgICAg
dmlld3NWZWN0b3IoKS5hcHBlbmQodGhpcyk7CiB9CiAKIFZpZXc6On5WaWV3KCkKIHsKKyAgICB2
aWV3c1ZlY3RvcigpLnJlbW92ZUFsbCh0aGlzKTsKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkK
ICAgICBpZiAobV9hY2Nlc3NpYmxlKQogICAgICAgICB3ZWJraXRXZWJWaWV3QWNjZXNzaWJsZVNl
dFdlYlZpZXcobV9hY2Nlc3NpYmxlLmdldCgpLCBudWxscHRyKTsKQEAgLTM4Myw2ICszOTMsMTMg
QEAgdm9pZCBWaWV3OjpzZXRWaWV3U3RhdGUoT3B0aW9uU2V0PFdlYkNvcmU6OkFjdGl2aXR5U3Rh
dGU6OkZsYWc+IGZsYWdzKQogCiAgICAgaWYgKGNoYW5nZWRGbGFncykKICAgICAgICAgbV9wYWdl
UHJveHktPmFjdGl2aXR5U3RhdGVEaWRDaGFuZ2UoY2hhbmdlZEZsYWdzKTsKKworICAgIGlmICgh
dmlld3NWZWN0b3IoKS5pc0VtcHR5KCkgJiYgdmlld1N0YXRlKCkuY29udGFpbnMoV2ViQ29yZTo6
QWN0aXZpdHlTdGF0ZTo6SXNWaXNpYmxlKSkgeworICAgICAgICBpZiAodmlld3NWZWN0b3IoKS5m
aXJzdCgpICE9IHRoaXMpIHsKKyAgICAgICAgICAgIHZpZXdzVmVjdG9yKCkucmVtb3ZlQWxsKHRo
aXMpOworICAgICAgICAgICAgdmlld3NWZWN0b3IoKS5pbnNlcnQoMCwgdGhpcyk7CisgICAgICAg
IH0KKyAgICB9CiB9CiAKIHZvaWQgVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChzdHJ1Y3Qgd3Bl
X2lucHV0X2tleWJvYXJkX2V2ZW50KiBldmVudCkKQEAgLTQzMCw0ICs0NDcsMjMgQEAgV2ViS2l0
V2ViVmlld0FjY2Vzc2libGUqIFZpZXc6OmFjY2Vzc2libGUoKSBjb25zdAogfQogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoR0FNRVBBRCkKK1dlYktpdDo6V2ViUGFnZVByb3h5KiBWaWV3OjpwbGF0Zm9y
bVdlYlBhZ2VQcm94eUZvckdhbWVwYWRJbnB1dCgpCit7CisgICAgY29uc3QgYXV0byYgdmlld3Mg
PSB2aWV3c1ZlY3RvcigpOworICAgIGlmICh2aWV3cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgYXV0byBpbmRleCA9IHZpZXdzLmZpbmRNYXRjaGluZyhbXShWaWV3
KiB2aWV3KSB7CisgICAgICAgIHJldHVybiB2aWV3LT52aWV3U3RhdGUoKS5jb250YWlucyhXZWJD
b3JlOjpBY3Rpdml0eVN0YXRlOjpJc1Zpc2libGUpCisgICAgICAgICAgICAmJiB2aWV3LT52aWV3
U3RhdGUoKS5jb250YWlucyhXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc0ZvY3VzZWQpOworICAg
IH0pOworCisgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gJih2aWV3
c1tpbmRleF0tPnBhZ2UoKSk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKyNlbmRpZgorCiB9
IC8vIG5hbWVzcGFjZSBXS1dQRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9XUEVWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZp
ZXcuaAppbmRleCBhYTBlMDMwNjI5ZDU2MjcxMjE5YWExNzM4MzEzYzViZThhZWZjMmMwLi5lZTY5
ZGIyYTU1MmY3NDBmZWUxOTk4ZmRlMmU4MTYzZjI0NzYzNGUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuaApAQCAtMTA4LDYgKzEwOCw5IEBAIHB1YmxpYzoKICNl
bmRpZgogCiAgICAgV2ViS2l0OjpUb3VjaEdlc3R1cmVDb250cm9sbGVyJiB0b3VjaEdlc3R1cmVD
b250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gKm1fdG91Y2hHZXN0dXJlQ29udHJvbGxlcjsgfQor
I2lmIEVOQUJMRShHQU1FUEFEKQorICAgIHN0YXRpYyBXZWJLaXQ6OldlYlBhZ2VQcm94eSogcGxh
dGZvcm1XZWJQYWdlUHJveHlGb3JHYW1lcGFkSW5wdXQoKTsKKyNlbmRpZgogCiBwcml2YXRlOgog
ICAgIFZpZXcoc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqLCBjb25zdCBBUEk6OlBhZ2VDb25maWd1
cmF0aW9uJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL1VJ
R2FtZXBhZFByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0dhbWVwYWQvVUlH
YW1lcGFkUHJvdmlkZXIuY3BwCmluZGV4IGQ5OGM1Mzk1ZWUxMmM0ZjU3ODMwOTNjNzg0MzEzNjg3
MWY0MzZlMjYuLmYwYzExOGU0YmZlMDg5OGI2Y2RlZmJmMDc3NzRmNzY4ZjUzNTM4ZjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0dhbWVwYWQvVUlHYW1lcGFkUHJvdmlkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0dhbWVwYWQvVUlHYW1lcGFkUHJvdmlk
ZXIuY3BwCkBAIC0yMDcsNyArMjA3LDcgQEAgVmVjdG9yPEdhbWVwYWREYXRhPiBVSUdhbWVwYWRQ
cm92aWRlcjo6c25hcHNob3RHYW1lcGFkcygpCiAgICAgcmV0dXJuIGdhbWVwYWREYXRhczsKIH0K
IAotI2lmICFQTEFURk9STShDT0NPQSkgJiYgIShVU0UoTUFORVRURSkgJiYgT1MoTElOVVgpKQor
I2lmICFQTEFURk9STShDT0NPQSkgJiYgIShVU0UoTUFORVRURSkgJiYgT1MoTElOVVgpKSAmJiAh
UExBVEZPUk0oV1BFKQogCiB2b2lkIFVJR2FtZXBhZFByb3ZpZGVyOjpwbGF0Zm9ybVNldERlZmF1
bHRHYW1lcGFkUHJvdmlkZXIoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvR2FtZXBhZC93cGUvVUlHYW1lcGFkUHJvdmlkZXJXUEUuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvR2FtZXBhZC93cGUvVUlHYW1lcGFkUHJvdmlkZXJXUEUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmEzMmYwMWU1MWUzZWQzZWM5ZWE1M2U3Y2ZmYzgzNDBhNDZkZDdjYTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL3dwZS9VSUdhbWVwYWRQcm92aWRl
cldQRS5jcHAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2Fs
aWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVUlHYW1lcGFkUHJvdmlkZXIuaCIKKworI2lmIEVOQUJMRShHQU1FUEFE
KQorCisjaW5jbHVkZSAiV1BFVmlldy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9XUEVHYW1lcGFk
UHJvdmlkZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCit2b2lkIFVJR2FtZXBhZFByb3ZpZGVyOjpwbGF0Zm9ybVNldERlZmF1bHRHYW1lcGFk
UHJvdmlkZXIoKQoreworICAgIGlmIChHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLmlzTW9j
a0dhbWVwYWRQcm92aWRlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBHYW1lcGFkUHJvdmlk
ZXI6OnNldFNoYXJlZFByb3ZpZGVyKFdQRUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkpOwor
fQorCitXZWJQYWdlUHJveHkqIFVJR2FtZXBhZFByb3ZpZGVyOjpwbGF0Zm9ybVdlYlBhZ2VQcm94
eUZvckdhbWVwYWRJbnB1dCgpCit7CisgICAgcmV0dXJuIFdLV1BFOjpWaWV3OjpwbGF0Zm9ybVdl
YlBhZ2VQcm94eUZvckdhbWVwYWRJbnB1dCgpOworfQorCit2b2lkIFVJR2FtZXBhZFByb3ZpZGVy
OjpwbGF0Zm9ybVN0b3BNb25pdG9yaW5nSW5wdXQoKQoreworfQorCit2b2lkIFVJR2FtZXBhZFBy
b3ZpZGVyOjpwbGF0Zm9ybVN0YXJ0TW9uaXRvcmluZ0lucHV0KCkKK3sKK30KK30KKworI2VuZGlm
IC8vIEVOQUJMRShHQU1FUEFEKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNXUEUu
Y21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZQppbmRleCAwZTIzNzMyMjA5ZGU1
MmEzNDJlOGRjMTllZWE1ZWZiYjdiODViOTdhLi5hOTljYmUyMWI0MTRmZjNiMzYxNTkwODdjZGQ0
ZjQyNGEwOWVmMDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZQor
KysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZQpAQCAtNDksNiArNDksNyBAQCBXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX1BBSU5USU5HX0FQSSBQUklW
QVRFICR7RU5BQkxFX0VYUEVSSQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX0NTU19UWVBFRF9PTSBQUklWQVRFICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFU30p
CiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfREFSS19NT0RFX0NTUyBQ
UklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0ZJTFRF
UlNfTEVWRUxfMiBQUklWQVRFIE9OKQorV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX0dBTUVQQUQgUFJJVkFURSAke0VOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVN9KQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0dQVV9QUk9DRVNTIFBSSVZB
VEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0lOVEVMTElH
RU5UX1RSQUNLSU5HX1BSRVZFTlRJT04gUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9MQVlPVVRfRk9STUFUVElOR19DT05URVhUIFBSSVZBVEUgJHtF
TkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTfSkKQEAgLTIxNyw3ICsyMTgsNiBAQCBpZiAoRU5B
QkxFX1dFQlhSKQogICAgIGlmIChOT1QgT1BFTlhSX0ZPVU5EKQogICAgICAgICBtZXNzYWdlKEZB
VEFMX0VSUk9SICJPcGVuWFIgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFdlYlhSIHN1cHBvcnQuIikK
ICAgICBlbmRpZiAoKQotICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKEVOQUJMRV9HQU1FUEFE
IE9OKQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9PUEVOWFIgJHtPcGVuWFJfRk9V
TkR9KQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFhSX1VTRV9QTEFURk9STV9FR0wgVFJV
RSkKICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChYUl9VU0VfR1JBUEhJQ1NfQVBJX09QRU5H
TCBUUlVFKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDVhYjU2YmQ2YzA5MGM2M2IyNDNjMjVkZDAxMGU0YTNlOWIzNmFhZjEu
LmM2NzEyZjU1NjcwNjliZmQzZDJiYjAwNDY2YTdjMzZiOGFiMzU3YzQgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAyMS0wOS0yMiAgVsOtY3RvciBNYW51ZWwgSsOhcXVleiBMZWFsICA8dmphcXVl
ekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXUEVdIEFkZCBnYW1lcGFkIHN1cHBvcnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDYzMAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZWQgV1BFIGV4
cGVjdGF0aW9ucyBmb3IgZ2FtZXBhZCBBUEkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93cGUvVGVz
dEV4cGVjdGF0aW9uczoKKwogMjAyMS0wOS0yMiAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBw
bGUuY29tPgogCiAgICAgICAgIE1ha2UgU2hhcmVkQnVmZmVyIGluaGVyaXQgZnJvbSBUaHJlYWRT
YWZlUmVmQ291bnRlZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd3BlL1Rlc3RF
eHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93cGUvVGVzdEV4cGVjdGF0aW9ucwpp
bmRleCA1MDcwOWFjMzYyYjM5M2MxY2VmMDg0ZGZiNjQ3YzFjMTNhNGMwNjg0Li5mNTI3ZGE1Mzg1
YjBkZTQ2ZWY5NzkyYTAzZTU5MDcwNTg2ZWUwZTIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS93cGUvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
cGUvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNjE5LDEwICs2MTksNiBAQCB3ZWJraXQub3JnL2IvMjE3
MzY5IGZhc3QvY2FudmFzL2ZpbGwtdGV4dC13aXRoLWZvbnQtZmVhdHVyZXMuaHRtbCBbIEltYWdl
T25seUZhaQogCiB3ZWJraXQub3JnL2IvMjE3MzcwIGZhc3QvZXZlbnRzL3NldERyYWdJbWFnZS1l
bGVtZW50LW5vbi1udWxsYWJsZS5odG1sIFsgRmFpbHVyZSBdCiAKLSMgRU5BQkxFX0dBTUVQQUQg
bm90IGVuYWJsZWQuCi13ZWJraXQub3JnL2IvMjEzMTMxIGdhbWVwYWQgWyBTa2lwIF0KLXdlYmtp
dC5vcmcvYi8yMTMxMzEgaHR0cC90ZXN0cy9taXNjL2dhbWVwYWRzLWluc2VjdXJlLmh0bWwgWyBT
a2lwIF0KLQogIyBXZWJYUgogd2Via2l0Lm9yZy9iLzIyNTQ4MyBbIFJlbGVhc2UgXSBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL2V2ZW50c19pbnB1dF9zb3VyY2VfcmVjcmVh
dGlvbi5odHRwcy5odG1sIFsgUGFzcyBdCiB3ZWJraXQub3JnL2IvMjI1NDgzIFsgUmVsZWFzZSBd
IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIvZXZlbnRzX2lucHV0X3NvdXJj
ZXNfY2hhbmdlLmh0dHBzLmh0bWwgWyBQYXNzIF0KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0No
YW5nZUxvZwppbmRleCBjYjg3NTIzYjUxY2QxYTQyYzI4NWJlODdiMDM4MWM5ZTM2NGU4MGM1Li5j
MGUzZGIxMDFlNWExYmI0ZGM1OWZiYWE1NGYwNDRkNzZlYTcyN2NkIDEwMDY0NAotLS0gYS9DaGFu
Z2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDktMjIgIFbDrWN0
b3IgTWFudWVsIErDoXF1ZXogTGVhbCAgPHZqYXF1ZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBb
V1BFXSBBZGQgZ2FtZXBhZCBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzA2MzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBFbmFibGUgR2FtZXBhZCBBUEkgYXMgZXhwZXJpbWVudGFsIGZlYXR1
cmUuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZToKKwogMjAyMS0w
OS0xNyAgQW5nZWxvcyBPaWtvbm9tb3BvdWxvcyAgPGFuZ2Vsb3NAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBVbmJyZWFrIEdDQ19PRkZMSU5FQVNNX1NPVVJDRV9NQVAgd2hlbiBMVE8gaXMgaW4gdXNl
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451516</attachid>
            <date>2022-02-10 04:31:41 -0800</date>
            <delta_ts>2022-05-04 11:59:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230630-20220210133140.patch</filename>
            <type>text/plain</type>
            <size>33286</size>
            <attacher name="Víctor M. Jáquez L.">vjaquez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5NTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmEzODQyOGRiNTVkYjM2
MTFiNDJkYzM5YThjYTg3OTFiNDVhNTMwZS4uMjE0YmQzYWY4OThiYWY4ZjFmNTFkZDRmMzQ2OGY4
ZDQ0MjZkOTQ3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDIyLTAyLTEwICBWw61j
dG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W1dQRV0gQWRkIGdhbWVwYWQgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEdhbXBlcGFkIEFQSSBmb3IgV1BFLgorCisgICAg
ICAgIE9yaWdpbmFsIHBhdGNoIGJ5IEV1Z2VuZSBNdXRhdmNoaSA8SWV2Z2VuX011dGF2Y2hpQGNv
bWNhc3QuY29tPi4KKworICAgICAgICBObyBuZXcgdGVzdHMuIENvbmZpcm1lZCBieSBleGlzdGlu
ZyB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3JtV1BFLmNtYWtlOgorICAgICAgICAqIFNvdXJj
ZXNXUEUudHh0OgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldQRUdhbWVwYWQ6OldQRUdhbWVwYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6V1BFR2FtZXBhZDo6fldQRUdhbWVwYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6V1BFR2FtZXBhZDo6YnV0dG9uUHJlc3NlZE9yUmVsZWFzZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6V1BFR2FtZXBhZDo6YWJzb2x1dGVBeGlzQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z2FtZXBhZC93cGUvV1BFR2FtZXBhZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1l
cGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldQRUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OldQRUdh
bWVwYWRQcm92aWRlcjo6V1BFR2FtZXBhZFByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldQ
RUdhbWVwYWRQcm92aWRlcjo6fldQRUdhbWVwYWRQcm92aWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXUEVHYW1lcGFkUHJvdmlkZXI6OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKToKKyAgICAgICAg
KFdlYkNvcmU6OldQRUdhbWVwYWRQcm92aWRlcjo6c3RvcE1vbml0b3JpbmdHYW1lcGFkcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXUEVHYW1lcGFkUHJvdmlkZXI6OmdhbWVwYWRDb25uZWN0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6V1BFR2FtZXBhZFByb3ZpZGVyOjpnYW1lcGFkRGljb25uZWN0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6V1BFR2FtZXBhZFByb3ZpZGVyOjppbmRleEZvck5ld2x5Q29u
bmVjdGVkRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OldQRUdhbWVwYWRQcm92aWRlcjo6cmVt
b3ZlR2FtZXBhZEZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6OldQRUdhbWVwYWRQcm92aWRlcjo6
aW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpX
UEVHYW1lcGFkUHJvdmlkZXI6OmlucHV0Tm90aWZpY2F0aW9uVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJDb3JlOjpXUEVHYW1lcGFkUHJvdmlkZXI6OnNjaGVkdWxlSW5wdXROb3RpZmljYXRpb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWRQcm92aWRlci5oOiBB
ZGRlZC4KKwogMjAyMi0wMi0xMCAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KIAog
ICAgICAgICBJREJSZXF1ZXN0IHNob3VsZCBlbWl0IHdyaXRlIGJhcnJpZXIgb24gSlNWYWx1ZUlu
V3JhcHBlZE9iamVjdCBtb2RpZmljYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZGU4ZTM3Y2E1ODU1ZWRlODVj
M2M5Mzk1ZWU3OTg0MDcwMDgxZWRjMC4uZDgxZWRmODNlZTI0NTE5NjdkNGZlMmVlYzJiYWNlNTU3
NmRiNjI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAyMi0wMi0xMCAgVsOtY3RvciBN
YW51ZWwgSsOhcXVleiBMZWFsICA8dmphcXVlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXUEVd
IEFkZCBnYW1lcGFkIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzMDYzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEhhbmRsZSBhIHZlY3RvciBvZiBjcmVhdGVkIHZpZXdzIGluIG9yZGVyIHRv
IHNlbGVjdCB0aGUgb25lIHdoZXJlIGdhbWVwYWRzIGFyZSBhY3RpdmUuCisKKyAgICAgICAgT3Jp
Z2luYWwgcGF0Y2ggYnkgRXVnZW5lIE11dGF2Y2hpIDxJZXZnZW5fTXV0YXZjaGlAY29tY2FzdC5j
b20+CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogU291cmNlc1dQRS50eHQ6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5jcHA6CisgICAgICAgIChXS1dQ
RTo6bV9iYWNrZW5kKToKKyAgICAgICAgKFdLV1BFOjpWaWV3Ojp+Vmlldyk6CisgICAgICAgIChX
S1dQRTo6Vmlldzo6c2V0Vmlld1N0YXRlKToKKyAgICAgICAgKFdLV1BFOjpWaWV3OjpwbGF0Zm9y
bVdlYlBhZ2VQcm94eUZvckdhbWVwYWRJbnB1dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93
cGUvV1BFVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9HYW1lcGFkL1VJR2FtZXBhZFByb3Zp
ZGVyLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvR2FtZXBhZC93cGUvVUlHYW1lcGFkUHJvdmlk
ZXJXUEUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6VUlHYW1lcGFkUHJvdmlkZXI6OnBs
YXRmb3JtU2V0RGVmYXVsdEdhbWVwYWRQcm92aWRlcik6CisgICAgICAgIChXZWJLaXQ6OlVJR2Ft
ZXBhZFByb3ZpZGVyOjpwbGF0Zm9ybVdlYlBhZ2VQcm94eUZvckdhbWVwYWRJbnB1dCk6CisgICAg
ICAgIChXZWJLaXQ6OlVJR2FtZXBhZFByb3ZpZGVyOjpwbGF0Zm9ybVN0b3BNb25pdG9yaW5nSW5w
dXQpOgorICAgICAgICAoV2ViS2l0OjpVSUdhbWVwYWRQcm92aWRlcjo6cGxhdGZvcm1TdGFydE1v
bml0b3JpbmdJbnB1dCk6CisKIDIwMjItMDItMTAgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVu
QGFwcGxlLmNvbT4KIAogICAgICAgICBOb24tZGVmYXVsdCBjb25zdHJ1Y3RpYmxlIHR5cGVzIGNh
bm5vdCBiZSBkZWNvZGVkIHdpdGggSVBDOjpEZWNvZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybVdQRS5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV1BFLmNtYWtl
CmluZGV4IGUzMzgzMTdmMzJlYzhkZTg4YTEzNjM0MzJmZTA4YmFmZTRhODNmODkuLmI0Y2MzZTU0
NjE1NWEzOGFhMzA2OWZlYmI4NjY2MWVlNjkxMjJhNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV1BFLmNt
YWtlCkBAIC0xMzEsMyArMTMxLDkgQEAgaWYgKFVTRV9BVFNQSSkKICAgICAgICAgJHtXZWJDb3Jl
X0RFUklWRURfU09VUkNFU19ESVJ9L0FjY2Vzc2liaWxpdHlBdHNwaUludGVyZmFjZXMuYwogICAg
ICkKIGVuZGlmICgpCisKK2lmIChFTkFCTEVfR0FNRVBBRCkKKyAgICBsaXN0KEFQUEVORCBXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKKyAgICAgICAgcGxhdGZvcm0vZ2FtZXBhZC93
cGUvV1BFR2FtZXBhZFByb3ZpZGVyLmgKKyAgICApCitlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlc1dQRS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4
dAppbmRleCA1N2ZhN2NhNjdjNGRlYTRhOWU1Yjk4NDVlNzJhZTI1ODczZDhjZjU1Li41MDY0MWU2
ZDUwZTc1NWM1ZGI1NjMxMWI3YzVjYTJjYjcyYmU3MDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzV1BFLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dApA
QCAtODAsNiArODAsOSBAQCBwbGF0Zm9ybS9Vc2VyQWdlbnRRdWlya3MuY3BwCiBwbGF0Zm9ybS9h
ZHdhaXRhL1Njcm9sbGJhclRoZW1lQWR3YWl0YS5jcHAKIHBsYXRmb3JtL2Fkd2FpdGEvVGhlbWVB
ZHdhaXRhLmNwcAogCitwbGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkLmNwcAorcGxhdGZv
cm0vZ2FtZXBhZC93cGUvV1BFR2FtZXBhZFByb3ZpZGVyLmNwcAorCiBwbGF0Zm9ybS9nZW5lcmlj
L1Njcm9sbGJhcnNDb250cm9sbGVyR2VuZXJpYy5jcHAKIAogcGxhdGZvcm0vZ3JhcGhpY3MvQU5H
TEVXZWJLaXRCcmlkZ2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
YW1lcGFkL3dwZS9XUEVHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVw
YWQvd3BlL1dQRUdhbWVwYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3Y2VkMzY4NjMxMTQzZGZiNDA4MGFm
Y2ZiNmQzMmE0YzZjZmI5NzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkLmNwcApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBSREsgTWFuYWdlbWVudCAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV1BFR2FtZXBhZC5oIgorCisjaWYgRU5BQkxFKEdBTUVQQUQp
CisKKyNpbmNsdWRlICJXUEVHYW1lcGFkUHJvdmlkZXIuaCIKKyNpbmNsdWRlIDx3cGUvd3BlLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1BFR2FtZXBhZDo6V1BFR2FtZXBhZCh1bnNpZ25l
ZCBnYW1lcGFkSWQsIHVuc2lnbmVkIGluZGV4KQorICAgIDogUGxhdGZvcm1HYW1lcGFkKGluZGV4
KQorICAgICwgbV9nYW1lcGFkKHdwZV9nYW1lcGFkX2NyZWF0ZShnYW1lcGFkSWQpKQoreworICAg
IEFTU0VSVChtX2dhbWVwYWQpOworCisgICAgbV9jb25uZWN0VGltZSA9IG1fbGFzdFVwZGF0ZVRp
bWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKworICAgIG1faWQgPSBTdHJpbmc6OmZyb21VVEY4
KHdwZV9nYW1lcGFkX2dldF9pZChtX2dhbWVwYWQpKTsKKyAgICBtX21hcHBpbmcgPSBTdHJpbmc6
OmZyb21VVEY4KCJzdGFuZGFyZCIpOworCisgICAgc3RhdGljIHN0cnVjdCB3cGVfZ2FtZXBhZF9j
bGllbnRfaW50ZXJmYWNlIHNfY2xpZW50ID0geworICAgICAgICAvLyBidXR0b25fZXZlbnQKKyAg
ICAgICAgW10odm9pZCogZGF0YSwgZW51bSBTdGFuZGFyZEdhbWVwYWRCdXR0b24gYnV0dG9uLCBi
b29sIHByZXNzZWQpIHsKKyAgICAgICAgICAgIGF1dG8mIHNlbGYgPSAqcmVpbnRlcnByZXRfY2Fz
dDxXUEVHYW1lcGFkKj4oZGF0YSk7CisgICAgICAgICAgICBpZiAoYnV0dG9uICE9IEdBTUVQQURf
QlVUVE9OX1VOS05PV04pCisgICAgICAgICAgICAgICAgc2VsZi5idXR0b25QcmVzc2VkT3JSZWxl
YXNlZChzdGF0aWNfY2FzdDxpbnQ+KGJ1dHRvbiksIHByZXNzZWQpOworICAgICAgICB9LAorICAg
ICAgICAvLyBheGlzX2V2ZW50CisgICAgICAgIFtdKHZvaWQqIGRhdGEsIGVudW0gU3RhbmRhcmRH
YW1lcGFkQXhpcyBheGlzLCBkb3VibGUgdmFsdWUpIHsKKyAgICAgICAgICAgIGF1dG8mIHNlbGYg
PSAqcmVpbnRlcnByZXRfY2FzdDxXUEVHYW1lcGFkKj4oZGF0YSk7CisgICAgICAgICAgICBpZiAo
YXhpcyAhPSBHQU1FUEFEX0FYSVNfVU5LTk9XTikKKyAgICAgICAgICAgICAgICBzZWxmLmFic29s
dXRlQXhpc0NoYW5nZWQoc3RhdGljX2Nhc3Q8aW50PihheGlzKSwgdmFsdWUpOworICAgICAgICB9
CisgICAgfTsKKyAgICB3cGVfZ2FtZXBhZF9zZXRfY2xpZW50KG1fZ2FtZXBhZCwgJnNfY2xpZW50
LCB0aGlzKTsKKworICAgIG1fYnV0dG9uVmFsdWVzLnJlc2l6ZShzdGF0aWNfY2FzdDxzaXplX3Q+
KEdBTUVQQURfQlVUVE9OX0NPVU5UKSk7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IG1fYnV0dG9u
VmFsdWVzKQorICAgICAgICB2YWx1ZS5zZXRWYWx1ZSgwLjApOworCisgICAgbV9heGlzVmFsdWVz
LnJlc2l6ZShzdGF0aWNfY2FzdDxzaXplX3Q+KEdBTUVQQURfQVhJU19DT1VOVCkpOworICAgIGZv
ciAoYXV0byYgdmFsdWUgOiBtX2F4aXNWYWx1ZXMpCisgICAgICAgIHZhbHVlLnNldFZhbHVlKDAu
MCk7Cit9CisKK1dQRUdhbWVwYWQ6On5XUEVHYW1lcGFkKCkKK3sKKyAgICBpZiAoIW1fZ2FtZXBh
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgd3BlX2dhbWVwYWRfc2V0X2NsaWVudChtX2dhbWVw
YWQsIG51bGxwdHIsIG51bGxwdHIpOworICAgIHdwZV9nYW1lcGFkX2Rlc3Ryb3kobV9nYW1lcGFk
KTsKKyAgICBtX2dhbWVwYWQgPSBudWxscHRyOworfQorCit2b2lkIFdQRUdhbWVwYWQ6OmJ1dHRv
blByZXNzZWRPclJlbGVhc2VkKGludCBidXR0b24sIGJvb2wgcHJlc3NlZCkKK3sKKyAgICBtX2xh
c3RVcGRhdGVUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgbV9idXR0b25WYWx1ZXNb
YnV0dG9uXS5zZXRWYWx1ZShwcmVzc2VkID8gMS4wIDogMC4wKTsKKworICAgIFdQRUdhbWVwYWRQ
cm92aWRlcjo6c2luZ2xldG9uKCkuc2NoZWR1bGVJbnB1dE5vdGlmaWNhdGlvbigqdGhpcywgcHJl
c3NlZCA/IFdQRUdhbWVwYWRQcm92aWRlcjo6U2hvdWxkTWFrZUdhbWVwYWRzVmlzaWJsZTo6WWVz
IDogV1BFR2FtZXBhZFByb3ZpZGVyOjpTaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlOjpObyk7Cit9
CisKK3ZvaWQgV1BFR2FtZXBhZDo6YWJzb2x1dGVBeGlzQ2hhbmdlZChpbnQgYXhpcywgZG91Ymxl
IHZhbHVlKQoreworICAgIG1fbGFzdFVwZGF0ZVRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsK
KyAgICBtX2F4aXNWYWx1ZXNbYXhpc10uc2V0VmFsdWUodmFsdWUpOworCisgICAgV1BFR2FtZXBh
ZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5zY2hlZHVsZUlucHV0Tm90aWZpY2F0aW9uKCp0aGlzLCBX
UEVHYW1lcGFkUHJvdmlkZXI6OlNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGU6Ok5vKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTVkNTI5MmU3NGJmNmYwYzQ2ZWU5MjRiNTc2NTE4NmU5OWM2OGFlZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWQu
aApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFJESyBNYW5hZ2Vt
ZW50ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNp
bmNsdWRlICJQbGF0Zm9ybUdhbWVwYWQuaCIKKworc3RydWN0IHdwZV9nYW1lcGFkOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdQRUdhbWVwYWQgZmluYWwgOiBwdWJsaWMgUGxhdGZv
cm1HYW1lcGFkIHsKK3B1YmxpYzoKKyAgICBXUEVHYW1lcGFkKHVuc2lnbmVkLCB1bnNpZ25lZCk7
CisgICAgdmlydHVhbCB+V1BFR2FtZXBhZCgpOworCisgICAgY29uc3QgVmVjdG9yPFNoYXJlZEdh
bWVwYWRWYWx1ZT4mIGF4aXNWYWx1ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2F4aXNWYWx1
ZXM7IH0KKyAgICBjb25zdCBWZWN0b3I8U2hhcmVkR2FtZXBhZFZhbHVlPiYgYnV0dG9uVmFsdWVz
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9idXR0b25WYWx1ZXM7IH0KKworICAgIGNvbnN0IHN0
cnVjdCB3cGVfZ2FtZXBhZCogd3BlR2FtZXBhZCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2FtZXBhZDsg
fQorCitwcml2YXRlOgorICAgIHZvaWQgYnV0dG9uUHJlc3NlZE9yUmVsZWFzZWQoaW50LCBib29s
KTsKKyAgICB2b2lkIGFic29sdXRlQXhpc0NoYW5nZWQoaW50LCBkb3VibGUpOworCisgICAgVmVj
dG9yPFNoYXJlZEdhbWVwYWRWYWx1ZT4gbV9idXR0b25WYWx1ZXM7CisgICAgVmVjdG9yPFNoYXJl
ZEdhbWVwYWRWYWx1ZT4gbV9heGlzVmFsdWVzOworCisgICAgc3RydWN0IHdwZV9nYW1lcGFkKiBt
X2dhbWVwYWQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWRQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhk
OTYyN2JiZjNjZTAxZmYxODFlNmE0ZTM1ZDcyMmNmZjkwYzU5YjAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIu
Y3BwCkBAIC0wLDAgKzEsMjI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFJESyBNYW5h
Z2VtZW50ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxp
YSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXUEVHYW1l
cGFkUHJvdmlkZXIuaCIKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSAiR2FtZXBh
ZFByb3ZpZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIldQRUdh
bWVwYWQuaCIKKyNpbmNsdWRlIDx3cGUvd3BlLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IFNlY29uZHMgY29u
bmVjdGlvbkRlbGF5SW50ZXJ2YWwgeyA1MDBfbXMgfTsKK3N0YXRpYyBjb25zdCBTZWNvbmRzIGlu
cHV0Tm90aWZpY2F0aW9uRGVsYXkgeyA1MF9tcyB9OworCitXUEVHYW1lcGFkUHJvdmlkZXImIFdQ
RUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8V1BFR2FtZXBhZFByb3ZpZGVyPiBzaGFyZWRQcm92aWRlcjsKKyAgICByZXR1cm4gc2hhcmVk
UHJvdmlkZXI7Cit9CisKK1dQRUdhbWVwYWRQcm92aWRlcjo6V1BFR2FtZXBhZFByb3ZpZGVyKCkK
KyAgICA6IG1fcHJvdmlkZXIod3BlX2dhbWVwYWRfcHJvdmlkZXJfY3JlYXRlKCkpCisgICAgLCBt
X2luaXRpYWxHYW1lcGFkc0Nvbm5lY3RlZFRpbWVyKFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywg
JldQRUdhbWVwYWRQcm92aWRlcjo6aW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGltZXJGaXJlZCkK
KyAgICAsIG1faW5wdXROb3RpZmljYXRpb25UaW1lcihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMs
ICZXUEVHYW1lcGFkUHJvdmlkZXI6OmlucHV0Tm90aWZpY2F0aW9uVGltZXJGaXJlZCkKK3sKKyAg
ICBpZiAoIW1fcHJvdmlkZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpYyBzdHJ1Y3Qg
d3BlX2dhbWVwYWRfcHJvdmlkZXJfY2xpZW50X2ludGVyZmFjZSBzX2NsaWVudCA9IHsKKyAgICAg
ICAgLy8gY29ubmVjdGVkCisgICAgICAgIFtdKHZvaWQqIGRhdGEsIHVuc2lnbmVkIGdhbWVwYWRJ
ZCkgeworICAgICAgICAgICAgYXV0byYgcHJvdmlkZXIgPSAqcmVpbnRlcnByZXRfY2FzdDxXUEVH
YW1lcGFkUHJvdmlkZXIqPihkYXRhKTsKKyAgICAgICAgICAgIHByb3ZpZGVyLmdhbWVwYWRDb25u
ZWN0ZWQoZ2FtZXBhZElkKTsKKyAgICAgICAgfSwKKyAgICAgICAgLy8gZGlzY29ubmVjdGVkCisg
ICAgICAgIFtdKHZvaWQqIGRhdGEsIHVuc2lnbmVkIGdhbWVwYWRJZCkgeworICAgICAgICAgICAg
YXV0byYgcHJvdmlkZXIgPSAqcmVpbnRlcnByZXRfY2FzdDxXUEVHYW1lcGFkUHJvdmlkZXIqPihk
YXRhKTsKKyAgICAgICAgICAgIHByb3ZpZGVyLmdhbWVwYWREaWNvbm5lY3RlZChnYW1lcGFkSWQp
OworICAgICAgICB9CisgICAgfTsKKworICAgIHdwZV9nYW1lcGFkX3Byb3ZpZGVyX3NldF9jbGll
bnQobV9wcm92aWRlciwgJnNfY2xpZW50LCB0aGlzKTsKK30KKworV1BFR2FtZXBhZFByb3ZpZGVy
Ojp+V1BFR2FtZXBhZFByb3ZpZGVyKCkKK3sKKyAgICB3cGVfZ2FtZXBhZF9wcm92aWRlcl9zZXRf
Y2xpZW50KG1fcHJvdmlkZXIsIG51bGxwdHIsIG51bGxwdHIpOworICAgIHdwZV9nYW1lcGFkX3By
b3ZpZGVyX2Rlc3Ryb3kobV9wcm92aWRlcik7CisgICAgbV9wcm92aWRlciA9IG51bGxwdHI7Cit9
CisKK3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjpzdGFydE1vbml0b3JpbmdHYW1lcGFkcyhHYW1l
cGFkUHJvdmlkZXJDbGllbnQmIGNsaWVudCkKK3sKKyAgICBpZiAoIW1fcHJvdmlkZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGJvb2wgc2hvdWxkT3BlbkFuZFNjaGVkdWxlTWFuYWdlciA9IG1f
Y2xpZW50cy5pc0VtcHR5KCk7CisKKyAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xp
ZW50KSk7CisgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKKworICAgIGlmICghc2hvdWxkT3Bl
bkFuZFNjaGVkdWxlTWFuYWdlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fZ2Ft
ZXBhZFZlY3Rvci5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2dhbWVwYWRNYXAuaXNFbXB0eSgp
KTsKKworICAgIG1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkID0gZmFsc2U7CisKKyAgICAvLyBB
bnkgY29ubmVjdGlvbnMgd2UgYXJlIG5vdGlmaWVkIG9mIHdpdGhpbiB0aGUgY29ubmVjdGlvbkRl
bGF5SW50ZXJ2YWwgb2YgbGlzdGVuaW5nIGxpa2VseSByZXByZXNlbnQKKyAgICAvLyBkZXZpY2Vz
IHRoYXQgd2VyZSBhbHJlYWR5IGNvbm5lY3RlZCwgc28gd2Ugc3VwcHJlc3Mgbm90aWZ5aW5nIGNs
aWVudHMgb2YgdGhlc2UuCisgICAgbV9pbml0aWFsR2FtZXBhZHNDb25uZWN0ZWRUaW1lci5zdGFy
dE9uZVNob3QoY29ubmVjdGlvbkRlbGF5SW50ZXJ2YWwpOworCisgICAgd3BlX2dhbWVwYWRfcHJv
dmlkZXJfc3RhcnQobV9wcm92aWRlcik7Cit9CisKK3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjpz
dG9wTW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCYgY2xpZW50KQorewor
ICAgIGlmICghbV9wcm92aWRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fY2xp
ZW50cy5jb250YWlucygmY2xpZW50KSk7CisKKyAgICBib29sIHNob3VsZENsb3NlQW5kVW5zY2hl
ZHVsZU1hbmFnZXIgPSBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpICYmIG1fY2xpZW50cy5pc0Vt
cHR5KCk7CisgICAgaWYgKCFzaG91bGRDbG9zZUFuZFVuc2NoZWR1bGVNYW5hZ2VyKQorICAgICAg
ICByZXR1cm47CisKKyAgICB3cGVfZ2FtZXBhZF9wcm92aWRlcl9zdG9wKG1fcHJvdmlkZXIpOwor
CisgICAgbV9nYW1lcGFkVmVjdG9yLmNsZWFyKCk7CisgICAgbV9nYW1lcGFkTWFwLmNsZWFyKCk7
CisgICAgbV9pbml0aWFsR2FtZXBhZHNDb25uZWN0ZWRUaW1lci5zdG9wKCk7CisgICAgbV9sYXN0
QWN0aXZlR2FtZXBhZCA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjpn
YW1lcGFkQ29ubmVjdGVkKHVuc2lnbmVkIGlkKQoreworICAgIEFTU0VSVCghbV9nYW1lcGFkTWFw
LmdldChpZCkpOworICAgIEFTU0VSVChtX3Byb3ZpZGVyKTsKKworICAgIExPRyhHYW1lcGFkLCAi
V1BFR2FtZXBhZFByb3ZpZGVyIGRldmljZSAldSBhZGRlZCIsIGlkKTsKKworICAgIHVuc2lnbmVk
IGluZGV4ID0gaW5kZXhGb3JOZXdseUNvbm5lY3RlZERldmljZSgpOworICAgIGF1dG8gZ2FtZXBh
ZCA9IG1ha2VVbmlxdWU8V1BFR2FtZXBhZD4oaWQsIGluZGV4KTsKKworICAgIGlmIChtX2dhbWVw
YWRWZWN0b3Iuc2l6ZSgpIDw9IGluZGV4KQorICAgICAgICBtX2dhbWVwYWRWZWN0b3IuZ3Jvdyhp
bmRleCArIDEpOworCisgICAgbV9nYW1lcGFkVmVjdG9yW2luZGV4XSA9IGdhbWVwYWQuZ2V0KCk7
CisgICAgbV9nYW1lcGFkTWFwLnNldChpZCwgV1RGTW92ZShnYW1lcGFkKSk7CisKKyAgICBpZiAo
IW1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkKSB7CisgICAgICAgIC8vIFRoaXMgYWRkZWQgZGV2
aWNlIGlzIHRoZSByZXN1bHQgb2YgdXMgc3RhcnRpbmcgdG8gbW9uaXRvciBnYW1lcGFkcy4KKyAg
ICAgICAgLy8gV2UnbGwgZ2V0IG5vdGlmaWVkIG9mIGFsbCBjb25uZWN0ZWQgZGV2aWNlcyBkdXJp
bmcgdGhpcyBjdXJyZW50IHNwaW4gb2YgdGhlIHJ1bmxvb3AKKyAgICAgICAgLy8gYW5kIHRoZSBj
bGllbnQgc2hvdWxkIGJlIHRvbGQgdGhleSB3ZXJlIGFscmVhZHkgY29ubmVjdGVkLgorICAgICAg
ICAvLyBUaGUgbV9jb25uZWN0aW9uRGVsYXlUaW1lciBmaXJlcyBpbiBhIHN1YnNlcXVlbnQgc3Bp
biBvZiB0aGUgcnVubG9vcCBhZnRlciB3aGljaAorICAgICAgICAvLyBhbnkgY29ubmVjdGlvbiBl
dmVudHMgYXJlIGFjdHVhbCBuZXcgZGV2aWNlcyBhbmQgY2FuIHRyaWdnZXIgZ2FtZXBhZCB2aXNp
YmlsaXR5LgorICAgICAgICBpZiAoIW1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGltZXIuaXNB
Y3RpdmUoKSkKKyAgICAgICAgICAgIG1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGltZXIuc3Rh
cnRPbmVTaG90KDBfcyk7CisgICAgfQorCisgICAgYXV0byBldmVudFZpc2liaWxpdHkgPSBtX2lu
aXRpYWxHYW1lcGFkc0Nvbm5lY3RlZCA/IEV2ZW50TWFrZXNHYW1lcGFkc1Zpc2libGU6OlllcyA6
IEV2ZW50TWFrZXNHYW1lcGFkc1Zpc2libGU6Ok5vOworICAgIGZvciAoYXV0byYgY2xpZW50IDog
bV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPnBsYXRmb3JtR2FtZXBhZENvbm5lY3RlZCgqbV9n
YW1lcGFkVmVjdG9yW2luZGV4XSwgZXZlbnRWaXNpYmlsaXR5KTsKK30KKwordm9pZCBXUEVHYW1l
cGFkUHJvdmlkZXI6OmdhbWVwYWREaWNvbm5lY3RlZCh1bnNpZ25lZCBpZCkKK3sKKyAgICBMT0co
R2FtZXBhZCwgIldQRUdhbWVwYWRQcm92aWRlciBkZXZpY2UgJXUgcmVtb3ZlZCIsIGlkKTsKKwor
ICAgIGF1dG8gcmVtb3ZlZEdhbWVwYWQgPSByZW1vdmVHYW1lcGFkRm9ySWQoaWQpOworICAgIEFT
U0VSVChyZW1vdmVkR2FtZXBhZCk7CisKKyAgICBpZiAocmVtb3ZlZEdhbWVwYWQtPndwZUdhbWVw
YWQoKSA9PSBtX2xhc3RBY3RpdmVHYW1lcGFkKQorICAgICAgICBtX2xhc3RBY3RpdmVHYW1lcGFk
ID0gbnVsbHB0cjsKKworICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQorICAgICAg
ICBjbGllbnQtPnBsYXRmb3JtR2FtZXBhZERpc2Nvbm5lY3RlZCgqcmVtb3ZlZEdhbWVwYWQpOwor
fQorCit1bnNpZ25lZCBXUEVHYW1lcGFkUHJvdmlkZXI6OmluZGV4Rm9yTmV3bHlDb25uZWN0ZWRE
ZXZpY2UoKQoreworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICB3aGlsZSAoaW5kZXggPCBt
X2dhbWVwYWRWZWN0b3Iuc2l6ZSgpICYmIG1fZ2FtZXBhZFZlY3RvcltpbmRleF0pCisgICAgICAg
ICsraW5kZXg7CisKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxXUEVH
YW1lcGFkPiBXUEVHYW1lcGFkUHJvdmlkZXI6OnJlbW92ZUdhbWVwYWRGb3JJZCh1bnNpZ25lZCBp
ZCkKK3sKKyAgICBhdXRvIHJlbW92ZWRHYW1lcGFkID0gbV9nYW1lcGFkTWFwLnRha2UoaWQpOwor
ICAgIEFTU0VSVChyZW1vdmVkR2FtZXBhZCk7CisKKyAgICBhdXRvIGluZGV4ID0gbV9nYW1lcGFk
VmVjdG9yLmZpbmQocmVtb3ZlZEdhbWVwYWQuZ2V0KCkpOworICAgIGlmIChpbmRleCAhPSBub3RG
b3VuZCkKKyAgICAgICAgbV9nYW1lcGFkVmVjdG9yW2luZGV4XSA9IG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gcmVtb3ZlZEdhbWVwYWQ7Cit9CisKK3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjppbml0
aWFsR2FtZXBhZHNDb25uZWN0ZWRUaW1lckZpcmVkKCkKK3sKKyAgICBtX2luaXRpYWxHYW1lcGFk
c0Nvbm5lY3RlZCA9IHRydWU7Cit9CisKK3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjppbnB1dE5v
dGlmaWNhdGlvblRpbWVyRmlyZWQoKQoreworICAgIGlmICghbV9pbml0aWFsR2FtZXBhZHNDb25u
ZWN0ZWQpIHsKKyAgICAgICAgaWYgKCFtX2lucHV0Tm90aWZpY2F0aW9uVGltZXIuaXNBY3RpdmUo
KSkKKyAgICAgICAgICAgIG1faW5wdXROb3RpZmljYXRpb25UaW1lci5zdGFydE9uZVNob3QoMF9z
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRpc3BhdGNoUGxhdGZvcm1HYW1lcGFk
SW5wdXRBY3Rpdml0eSgpOworfQorCit2b2lkIFdQRUdhbWVwYWRQcm92aWRlcjo6c2NoZWR1bGVJ
bnB1dE5vdGlmaWNhdGlvbihXUEVHYW1lcGFkJiBnYW1lcGFkLCBTaG91bGRNYWtlR2FtZXBhZHNW
aXNpYmxlIHNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGUpCit7CisgICAgbV9sYXN0QWN0aXZlR2Ft
ZXBhZCA9IGNvbnN0X2Nhc3Q8c3RydWN0IHdwZV9nYW1lcGFkKj4oZ2FtZXBhZC53cGVHYW1lcGFk
KCkpOworCisgICAgaWYgKCFtX2lucHV0Tm90aWZpY2F0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAg
ICAgICAgbV9pbnB1dE5vdGlmaWNhdGlvblRpbWVyLnN0YXJ0T25lU2hvdChpbnB1dE5vdGlmaWNh
dGlvbkRlbGF5KTsKKworICAgIGlmIChzaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlID09IFNob3Vs
ZE1ha2VHYW1lcGFkc1Zpc2libGU6OlllcykKKyAgICAgICAgc2V0U2hvdWxkTWFrZUdhbWVwYWRz
VmlzaWJpbGUoKTsKK30KKworc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIFdQRUdhbWVwYWRQcm92
aWRlcjo6aW5wdXRWaWV3KCkKK3sKKyAgICBpZiAoIW1fcHJvdmlkZXIgfHwgIW1fbGFzdEFjdGl2
ZUdhbWVwYWQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiB3cGVfZ2FtZXBh
ZF9wcm92aWRlcl9nZXRfdmlld19iYWNrZW5kX2Zvcl9nYW1lcGFkKG1fcHJvdmlkZXIsIG1fbGFz
dEFjdGl2ZUdhbWVwYWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dh
bWVwYWQvd3BlL1dQRUdhbWVwYWRQcm92aWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z2FtZXBhZC93cGUvV1BFR2FtZXBhZFByb3ZpZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjY1ZDhmMDYyMDJj
ODkxODY1NWRjZDI1ODNhYzI3MzgwMTZhN2M4NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWRQcm92aWRlci5oCkBAIC0wLDAg
KzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgUkRLIE1hbmFnZW1lbnQgIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKworI2luY2x1ZGUgIkdh
bWVwYWRQcm92aWRlci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1J1bkxvb3AuaD4KKworc3RydWN0IHdwZV9nYW1lcGFkX3Byb3ZpZGVyOworc3RydWN0IHdwZV92
aWV3X2JhY2tlbmQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV1BFR2FtZXBhZDsK
KworY2xhc3MgV1BFR2FtZXBhZFByb3ZpZGVyIGZpbmFsIDogcHVibGljIEdhbWVwYWRQcm92aWRl
ciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV1BFR2FtZXBhZFByb3ZpZGVyKTsKKyAgICBm
cmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8V1BFR2FtZXBhZFByb3ZpZGVyPjsKKworcHVibGlj
OgorICAgIHN0YXRpYyBXUEVHYW1lcGFkUHJvdmlkZXImIHNpbmdsZXRvbigpOworCisgICAgdmly
dHVhbCB+V1BFR2FtZXBhZFByb3ZpZGVyKCk7CisKKyAgICB2b2lkIHN0YXJ0TW9uaXRvcmluZ0dh
bWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCYpIGZpbmFsOworICAgIHZvaWQgc3RvcE1vbml0
b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJDbGllbnQmKSBmaW5hbDsKKyAgICBjb25zdCBW
ZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRmb3JtR2FtZXBhZHMoKSBmaW5hbCB7IHJldHVy
biBtX2dhbWVwYWRWZWN0b3I7IH0KKworICAgIGVudW0gY2xhc3MgU2hvdWxkTWFrZUdhbWVwYWRz
VmlzaWJsZSA6IGJvb2wgeyBObywKKyAgICAgICAgWWVzIH07CisgICAgdm9pZCBzY2hlZHVsZUlu
cHV0Tm90aWZpY2F0aW9uKFdQRUdhbWVwYWQmLCBTaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlKTsK
KworICAgIHN0cnVjdCB3cGVfdmlld19iYWNrZW5kKiBpbnB1dFZpZXcoKTsKKworcHJpdmF0ZToK
KyAgICBXUEVHYW1lcGFkUHJvdmlkZXIoKTsKKworICAgIHZvaWQgZ2FtZXBhZENvbm5lY3RlZCh1
bnNpZ25lZCk7CisgICAgdm9pZCBnYW1lcGFkRGljb25uZWN0ZWQodW5zaWduZWQpOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxXUEVHYW1lcGFkPiByZW1vdmVHYW1lcGFkRm9ySWQodW5zaWduZWQpOwor
CisgICAgdW5zaWduZWQgaW5kZXhGb3JOZXdseUNvbm5lY3RlZERldmljZSgpOworICAgIHZvaWQg
aW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGltZXJGaXJlZCgpOworICAgIHZvaWQgaW5wdXROb3Rp
ZmljYXRpb25UaW1lckZpcmVkKCk7CisKKyAgICBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4gbV9n
YW1lcGFkVmVjdG9yOworICAgIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxXUEVH
YW1lcGFkPj4gbV9nYW1lcGFkTWFwOworICAgIGJvb2wgbV9pbml0aWFsR2FtZXBhZHNDb25uZWN0
ZWQgeyBmYWxzZSB9OworCisgICAgc3RydWN0IHdwZV9nYW1lcGFkX3Byb3ZpZGVyKiBtX3Byb3Zp
ZGVyIHsgbnVsbHB0ciB9OworICAgIHN0cnVjdCB3cGVfZ2FtZXBhZCogbV9sYXN0QWN0aXZlR2Ft
ZXBhZCB7IG51bGxwdHIgfTsKKworICAgIFJ1bkxvb3A6OlRpbWVyPFdQRUdhbWVwYWRQcm92aWRl
cj4gbV9pbml0aWFsR2FtZXBhZHNDb25uZWN0ZWRUaW1lcjsKKyAgICBSdW5Mb29wOjpUaW1lcjxX
UEVHYW1lcGFkUHJvdmlkZXI+IG1faW5wdXROb3RpZmljYXRpb25UaW1lcjsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQ
RS50eHQKaW5kZXggOTQ0MTlkZDg2ZjA3OWM1YzUzZTY4Y2U4ZTc5YjkxNTUwNWE4N2FiMC4uMmIy
MzQyMWMwYTNhZDU2NjgxMWI4YzBmZjEzZjYzYmY0MWU4OTJhMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9Tb3VyY2VzV1BFLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0
CkBAIC0yMDAsNiArMjAwLDggQEAgVUlQcm9jZXNzL0F1dG9tYXRpb24vd3BlL1dlYkF1dG9tYXRp
b25TZXNzaW9uV1BFLmNwcAogCiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5n
QXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKIAorVUlQcm9jZXNzL0dhbWVwYWQvd3Bl
L1VJR2FtZXBhZFByb3ZpZGVyV1BFLmNwcAorCiBVSVByb2Nlc3MvZ2VvY2x1ZS9HZW9jbHVlR2Vv
bG9jYXRpb25Qcm92aWRlci5jcHAKIAogVUlQcm9jZXNzL2dsaWIvV2ViUGFnZVByb3h5R0xpYi5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwCmluZGV4IDUx
NjQ1OWIzMTQwOWM3MDYxZTU0NmZkZDAyYjk4ZWRlMzRiYTZmM2QuLmM1Y2Q0ZWQ3ODRhZTk0NWE0
ODZiZDc2ZjlmMDg5MWI5N2U3YzQ1N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS93cGUvV1BFVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L3dwZS9XUEVWaWV3LmNwcApAQCAtMzksMTIgKzM5LDIwIEBACiAjaW5jbHVkZSAiV2ViUGFnZUdy
b3VwLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nv
bXBvc2l0aW9uVW5kZXJsaW5lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XUEVHYW1lcGFkUHJvdmlk
ZXIuaD4KICNpbmNsdWRlIDx3cGUvd3BlLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSBXS1dQRSB7CiAKK3N0
YXRpYyBWZWN0b3I8Vmlldyo+JiB2aWV3c1ZlY3RvcigpCit7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFZlY3RvcjxWaWV3Kj4+IHZlY3RvcjsKKyAgICByZXR1cm4gdmVjdG9yOworfQorCiBW
aWV3OjpWaWV3KHN0cnVjdCB3cGVfdmlld19iYWNrZW5kKiBiYWNrZW5kLCBjb25zdCBBUEk6OlBh
Z2VDb25maWd1cmF0aW9uJiBiYXNlQ29uZmlndXJhdGlvbikKICAgICA6IG1fY2xpZW50KG1ha2VV
bmlxdWU8QVBJOjpWaWV3Q2xpZW50PigpKQogICAgICwgbV90b3VjaEdlc3R1cmVDb250cm9sbGVy
KG1ha2VVbmlxdWU8VG91Y2hHZXN0dXJlQ29udHJvbGxlcj4oKSkKQEAgLTI5MywxMCArMzAxLDEz
IEBAIFZpZXc6OlZpZXcoc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQ
STo6UGFnZUNvbmZpZ3VyYXRpb24mIGJhc2VDCiAgICAgd3BlX3ZpZXdfYmFja2VuZF9pbml0aWFs
aXplKG1fYmFja2VuZCk7CiAKICAgICBtX3BhZ2VQcm94eS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsK
KworICAgIHZpZXdzVmVjdG9yKCkuYXBwZW5kKHRoaXMpOwogfQogCiBWaWV3Ojp+VmlldygpCiB7
CisgICAgdmlld3NWZWN0b3IoKS5yZW1vdmVBbGwodGhpcyk7CiAjaWYgRU5BQkxFKEFDQ0VTU0lC
SUxJVFkpCiAgICAgaWYgKG1fYWNjZXNzaWJsZSkKICAgICAgICAgd2Via2l0V2ViVmlld0FjY2Vz
c2libGVTZXRXZWJWaWV3KG1fYWNjZXNzaWJsZS5nZXQoKSwgbnVsbHB0cik7CkBAIC0zODIsNiAr
MzkzLDEzIEBAIHZvaWQgVmlldzo6c2V0Vmlld1N0YXRlKE9wdGlvblNldDxXZWJDb3JlOjpBY3Rp
dml0eVN0YXRlOjpGbGFnPiBmbGFncykKIAogICAgIGlmIChjaGFuZ2VkRmxhZ3MpCiAgICAgICAg
IG1fcGFnZVByb3h5LT5hY3Rpdml0eVN0YXRlRGlkQ2hhbmdlKGNoYW5nZWRGbGFncyk7CisKKyAg
ICBpZiAoIXZpZXdzVmVjdG9yKCkuaXNFbXB0eSgpICYmIHZpZXdTdGF0ZSgpLmNvbnRhaW5zKFdl
YkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzVmlzaWJsZSkpIHsKKyAgICAgICAgaWYgKHZpZXdzVmVj
dG9yKCkuZmlyc3QoKSAhPSB0aGlzKSB7CisgICAgICAgICAgICB2aWV3c1ZlY3RvcigpLnJlbW92
ZUFsbCh0aGlzKTsKKyAgICAgICAgICAgIHZpZXdzVmVjdG9yKCkuaW5zZXJ0KDAsIHRoaXMpOwor
ICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIFZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoc3Ry
dWN0IHdwZV9pbnB1dF9rZXlib2FyZF9ldmVudCogZXZlbnQpCkBAIC00MjksNCArNDQ3LDM1IEBA
IFdlYktpdFdlYlZpZXdBY2Nlc3NpYmxlKiBWaWV3OjphY2Nlc3NpYmxlKCkgY29uc3QKIH0KICNl
bmRpZgogCisjaWYgRU5BQkxFKEdBTUVQQUQpCitXZWJLaXQ6OldlYlBhZ2VQcm94eSogVmlldzo6
cGxhdGZvcm1XZWJQYWdlUHJveHlGb3JHYW1lcGFkSW5wdXQoKQoreworICAgIGNvbnN0IGF1dG8m
IHZpZXdzID0gdmlld3NWZWN0b3IoKTsKKyAgICBpZiAodmlld3MuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHN0cnVjdCB3cGVfdmlld19iYWNrZW5kKiB2aWV3QmFj
a2VuZCA9IFdlYkNvcmU6OldQRUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkuaW5wdXRWaWV3
KCk7CisKKyAgICBzaXplX3QgaW5kZXggPSBub3RGb3VuZDsKKworICAgIGlmICh2aWV3QmFja2Vu
ZCkgeworICAgICAgICBpbmRleCA9IHZpZXdzLmZpbmRJZihbJl0oVmlldyogdmlldykgeworICAg
ICAgICAgICAgcmV0dXJuIHZpZXctPmJhY2tlbmQoKSA9PSB2aWV3QmFja2VuZAorICAgICAgICAg
ICAgICAgICYmIHZpZXctPnZpZXdTdGF0ZSgpLmNvbnRhaW5zKFdlYkNvcmU6OkFjdGl2aXR5U3Rh
dGU6OklzVmlzaWJsZSkKKyAgICAgICAgICAgICAgICAmJiB2aWV3LT52aWV3U3RhdGUoKS5jb250
YWlucyhXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc0ZvY3VzZWQpOworICAgICAgICB9KTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpbmRleCA9IHZpZXdzLmZpbmRJZihbXShWaWV3KiB2aWV3KSB7
CisgICAgICAgICAgICByZXR1cm4gdmlldy0+dmlld1N0YXRlKCkuY29udGFpbnMoV2ViQ29yZTo6
QWN0aXZpdHlTdGF0ZTo6SXNWaXNpYmxlKQorICAgICAgICAgICAgICAgICYmIHZpZXctPnZpZXdT
dGF0ZSgpLmNvbnRhaW5zKFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzRm9jdXNlZCk7CisgICAg
ICAgIH0pOworICAgIH0KKworICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKKyAgICAgICAgcmV0
dXJuICYodmlld3NbaW5kZXhdLT5wYWdlKCkpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9Cisj
ZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV0tXUEUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L3dwZS9XUEVWaWV3LmgKaW5kZXggYWEwZTAzMDYyOWQ1NjI3MTIxOWFhMTczODMxM2M1YmU4YWVm
YzJjMC4uZWU2OWRiMmE1NTJmNzQwZmVlMTk5OGZkZTJlODE2M2YyNDc2MzRlMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmgKQEAgLTEwOCw2ICsxMDgsOSBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogICAgIFdlYktpdDo6VG91Y2hHZXN0dXJlQ29udHJvbGxlciYgdG91
Y2hHZXN0dXJlQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuICptX3RvdWNoR2VzdHVyZUNvbnRy
b2xsZXI7IH0KKyNpZiBFTkFCTEUoR0FNRVBBRCkKKyAgICBzdGF0aWMgV2ViS2l0OjpXZWJQYWdl
UHJveHkqIHBsYXRmb3JtV2ViUGFnZVByb3h5Rm9yR2FtZXBhZElucHV0KCk7CisjZW5kaWYKIAog
cHJpdmF0ZToKICAgICBWaWV3KHN0cnVjdCB3cGVfdmlld19iYWNrZW5kKiwgY29uc3QgQVBJOjpQ
YWdlQ29uZmlndXJhdGlvbiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
R2FtZXBhZC9VSUdhbWVwYWRQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9H
YW1lcGFkL1VJR2FtZXBhZFByb3ZpZGVyLmNwcAppbmRleCBkOThjNTM5NWVlMTJjNGY1NzgzMDkz
Yzc4NDMxMzY4NzFmNDM2ZTI2Li5mMGMxMThlNGJmZTA4OThiNmNkZWZiZjA3Nzc0Zjc2OGY1MzUz
OGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL1VJR2FtZXBh
ZFByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL1VJR2Ft
ZXBhZFByb3ZpZGVyLmNwcApAQCAtMjA3LDcgKzIwNyw3IEBAIFZlY3RvcjxHYW1lcGFkRGF0YT4g
VUlHYW1lcGFkUHJvdmlkZXI6OnNuYXBzaG90R2FtZXBhZHMoKQogICAgIHJldHVybiBnYW1lcGFk
RGF0YXM7CiB9CiAKLSNpZiAhUExBVEZPUk0oQ09DT0EpICYmICEoVVNFKE1BTkVUVEUpICYmIE9T
KExJTlVYKSkKKyNpZiAhUExBVEZPUk0oQ09DT0EpICYmICEoVVNFKE1BTkVUVEUpICYmIE9TKExJ
TlVYKSkgJiYgIVBMQVRGT1JNKFdQRSkKIAogdm9pZCBVSUdhbWVwYWRQcm92aWRlcjo6cGxhdGZv
cm1TZXREZWZhdWx0R2FtZXBhZFByb3ZpZGVyKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0dhbWVwYWQvd3BlL1VJR2FtZXBhZFByb3ZpZGVyV1BFLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0dhbWVwYWQvd3BlL1VJR2FtZXBhZFByb3ZpZGVyV1BFLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hMzJmMDFlNTFlM2VkM2VjOWVhNTNlN2NmZmM4MzQwYTQ2ZGQ3Y2ExCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvR2FtZXBhZC93cGUvVUlHYW1l
cGFkUHJvdmlkZXJXUEUuY3BwCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVJR2FtZXBhZFByb3ZpZGVyLmgiCisKKyNpZiBFTkFC
TEUoR0FNRVBBRCkKKworI2luY2x1ZGUgIldQRVZpZXcuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUv
V1BFR2FtZXBhZFByb3ZpZGVyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKwordm9pZCBVSUdhbWVwYWRQcm92aWRlcjo6cGxhdGZvcm1TZXREZWZh
dWx0R2FtZXBhZFByb3ZpZGVyKCkKK3sKKyAgICBpZiAoR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0
b24oKS5pc01vY2tHYW1lcGFkUHJvdmlkZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR2Ft
ZXBhZFByb3ZpZGVyOjpzZXRTaGFyZWRQcm92aWRlcihXUEVHYW1lcGFkUHJvdmlkZXI6OnNpbmds
ZXRvbigpKTsKK30KKworV2ViUGFnZVByb3h5KiBVSUdhbWVwYWRQcm92aWRlcjo6cGxhdGZvcm1X
ZWJQYWdlUHJveHlGb3JHYW1lcGFkSW5wdXQoKQoreworICAgIHJldHVybiBXS1dQRTo6Vmlldzo6
cGxhdGZvcm1XZWJQYWdlUHJveHlGb3JHYW1lcGFkSW5wdXQoKTsKK30KKwordm9pZCBVSUdhbWVw
YWRQcm92aWRlcjo6cGxhdGZvcm1TdG9wTW9uaXRvcmluZ0lucHV0KCkKK3sKK30KKwordm9pZCBV
SUdhbWVwYWRQcm92aWRlcjo6cGxhdGZvcm1TdGFydE1vbml0b3JpbmdJbnB1dCgpCit7Cit9Cit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9P
cHRpb25zV1BFLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKaW5kZXggNzli
NDZiMjBjMGNhNDU1MzY3NzdkY2U3MDE4Yzg2MTljNzkwNjQ1Mi4uMGJhMjk1ZjM4OTBjYzdmYWZm
MzkxMmU3YTkwYjdhZjM0NGI3ODI2NyAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNX
UEUuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKQEAgLTQ5LDYgKzQ5
LDcgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19QQUlOVElO
R19BUEkgUFJJVkFURSAke0VOQUJMRV9FWFBFUkkKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9DU1NfVFlQRURfT00gUFJJVkFURSAke0VOQUJMRV9FWFBFUklNRU5UQUxf
RkVBVFVSRVN9KQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0RBUktf
TU9ERV9DU1MgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9GSUxURVJTX0xFVkVMXzIgUFJJVkFURSBPTikKK1dFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9HQU1FUEFEIFBSSVZBVEUgJHtFTkFCTEVfRVhQRVJJTUVOVEFMX0ZF
QVRVUkVTfSkKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9HUFVfUFJP
Q0VTUyBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9JTlRFTExJR0VOVF9UUkFDS0lOR19QUkVWRU5USU9OIFBSSVZBVEUgT04pCiBXRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTEFZRVJfQkFTRURfU1ZHX0VOR0lORSBQUklW
QVRFIE9OKQpAQCAtMjM1LDcgKzIzNiw2IEBAIGlmIChFTkFCTEVfV0VCWFIpCiAgICAgaWYgKE5P
VCBPUEVOWFJfRk9VTkQpCiAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIk9wZW5YUiBpcyBy
ZXF1aXJlZCB0byBlbmFibGUgV2ViWFIgc3VwcG9ydC4iKQogICAgIGVuZGlmICgpCi0gICAgU0VU
X0FORF9FWFBPU0VfVE9fQlVJTEQoRU5BQkxFX0dBTUVQQUQgT04pCiAgICAgU0VUX0FORF9FWFBP
U0VfVE9fQlVJTEQoVVNFX09QRU5YUiAke09wZW5YUl9GT1VORH0pCiAgICAgU0VUX0FORF9FWFBP
U0VfVE9fQlVJTEQoWFJfVVNFX1BMQVRGT1JNX0VHTCBUUlVFKQogICAgIFNFVF9BTkRfRVhQT1NF
X1RPX0JVSUxEKFhSX1VTRV9HUkFQSElDU19BUElfT1BFTkdMIFRSVUUpCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjNhMzAw
MTJlZjMzODNiMDg5YWM0NGRmNjc4Y2U5NWMzMDBmZGY4MS4uNmI0ZDQyZmQ4NTc0ZjEyZTA4M2M4
Yzg0Mjg2OWU5MWJkZDA5NjcxZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIyLTAyLTEwICBW
w61jdG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAg
ICAgW1dQRV0gQWRkIGdhbWVwYWQgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBXUEUgZXhwZWN0YXRpb25zIGZvciBnYW1lcGFk
IEFQSS4KKworICAgICAgICAqIHBsYXRmb3JtL3dwZS9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIy
LTAyLTEwICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBbbWFjT1MgYXJtNjRdIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy10
cmFuc2Zvcm1zL3BlcnNwZWN0aXZlLXRyYW5zZm9ybXMtZXF1aXZhbGVuY2UuaHRtbCBpcyBjb25z
aXN0ZW50bHkgZmFpbGluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd3BlL1Rl
c3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93cGUvVGVzdEV4cGVjdGF0aW9u
cwppbmRleCBjZjAzYWY4Y2EwMWNhOWY2ZmJhOTc3OWFhYTc0ZmY4NmEwZDdiN2U3Li5hYmJlMjcy
ZWVkYzllNDExYTY2NzY2ZGM1NjIwZDZmM2NhZjI0MDE0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93cGUvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93cGUvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNjA2LDEwICs2MDYsNiBAQCB3ZWJraXQub3JnL2Iv
MjE3MzY5IGZhc3QvY2FudmFzL2ZpbGwtdGV4dC13aXRoLWZvbnQtZmVhdHVyZXMuaHRtbCBbIElt
YWdlT25seUZhaQogCiB3ZWJraXQub3JnL2IvMjE3MzcwIGZhc3QvZXZlbnRzL3NldERyYWdJbWFn
ZS1lbGVtZW50LW5vbi1udWxsYWJsZS5odG1sIFsgRmFpbHVyZSBdCiAKLSMgRU5BQkxFX0dBTUVQ
QUQgbm90IGVuYWJsZWQuCi13ZWJraXQub3JnL2IvMjEzMTMxIGdhbWVwYWQgWyBTa2lwIF0KLXdl
YmtpdC5vcmcvYi8yMTMxMzEgaHR0cC90ZXN0cy9taXNjL2dhbWVwYWRzLWluc2VjdXJlLmh0bWwg
WyBTa2lwIF0KLQogIyBXZWJYUgogd2Via2l0Lm9yZy9iLzIyNTQ4MyBbIFJlbGVhc2UgXSBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL2V2ZW50c19pbnB1dF9zb3VyY2VfcmVj
cmVhdGlvbi5odHRwcy5odG1sIFsgUGFzcyBdCiB3ZWJraXQub3JnL2IvMjI1NDgzIFsgUmVsZWFz
ZSBdIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIvZXZlbnRzX2lucHV0X3Nv
dXJjZXNfY2hhbmdlLmh0dHBzLmh0bWwgWyBQYXNzIF0KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBi
L0NoYW5nZUxvZwppbmRleCA4MjBkZWZjYmZkMDUwNjY5ZTdlMjY4NzE5OTdiYjYxZWZhY2RiNjMx
Li5hZjRhNjdjNzE4MDY5YzY4MTk5OWJhMGZjODkzYzFiMDdiMGNhNmFkIDEwMDY0NAotLS0gYS9D
aGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDItMTAgIFbD
rWN0b3IgTWFudWVsIErDoXF1ZXogTGVhbCAgPHZqYXF1ZXpAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbV1BFXSBBZGQgZ2FtZXBhZCBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzA2MzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBFbmFibGUgR2FtZXBhZCBBUEkgYXMgZXhwZXJpbWVudGFsIGZl
YXR1cmUuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZToKKwogMjAy
Mi0wMi0wOSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAg
ICAgU2hhcmVkTWVtb3J5VW5peCBzaG91bGQgdXNlIFNITV9BTk9OIHdoZW4gYXZhaWxhYmxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458817</attachid>
            <date>2022-05-04 11:59:32 -0700</date>
            <delta_ts>2022-05-10 04:22:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230630-20220504205931.patch</filename>
            <type>text/plain</type>
            <size>32923</size>
            <attacher name="Víctor M. Jáquez L.">vjaquez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzNzczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjlkOWFhZTZiYTI5MzQ4
ZGY4ZWJlZWFlZDA3NTNkMTQwODQ5NmQzYy4uYWYxNmEyMzQ5MGRiYTc0ODFiMzU5ZmIzZDgwMjFj
NDg0YTY0YTM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDIyLTA1LTA0ICBWw61j
dG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W1dQRV0gQWRkIGdhbWVwYWQgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEdhbXBlcGFkIEFQSSBmb3IgV1BFLgorCisgICAg
ICAgIE9yaWdpbmFsIHBhdGNoIGJ5IEV1Z2VuZSBNdXRhdmNoaSA8SWV2Z2VuX011dGF2Y2hpQGNv
bWNhc3QuY29tPi4KKworICAgICAgICBObyBuZXcgdGVzdHMuIENvbmZpcm1lZCBieSBleGlzdGlu
ZyB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3JtV1BFLmNtYWtlOgorICAgICAgICAqIFNvdXJj
ZXNXUEUudHh0OgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldQRUdhbWVwYWQ6OldQRUdhbWVwYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6V1BFR2FtZXBhZDo6fldQRUdhbWVwYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6V1BFR2FtZXBhZDo6YnV0dG9uUHJlc3NlZE9yUmVsZWFzZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6V1BFR2FtZXBhZDo6YWJzb2x1dGVBeGlzQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z2FtZXBhZC93cGUvV1BFR2FtZXBhZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1l
cGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldQRUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OldQRUdh
bWVwYWRQcm92aWRlcjo6V1BFR2FtZXBhZFByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldQ
RUdhbWVwYWRQcm92aWRlcjo6fldQRUdhbWVwYWRQcm92aWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXUEVHYW1lcGFkUHJvdmlkZXI6OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKToKKyAgICAgICAg
KFdlYkNvcmU6OldQRUdhbWVwYWRQcm92aWRlcjo6c3RvcE1vbml0b3JpbmdHYW1lcGFkcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXUEVHYW1lcGFkUHJvdmlkZXI6OmdhbWVwYWRDb25uZWN0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6V1BFR2FtZXBhZFByb3ZpZGVyOjpnYW1lcGFkRGlzY29ubmVjdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OldQRUdhbWVwYWRQcm92aWRlcjo6aW5kZXhGb3JOZXdseUNv
bm5lY3RlZERldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpXUEVHYW1lcGFkUHJvdmlkZXI6OnJl
bW92ZUdhbWVwYWRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpXUEVHYW1lcGFkUHJvdmlkZXI6
OmluaXRpYWxHYW1lcGFkc0Nvbm5lY3RlZFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
V1BFR2FtZXBhZFByb3ZpZGVyOjppbnB1dE5vdGlmaWNhdGlvblRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6V1BFR2FtZXBhZFByb3ZpZGVyOjpzY2hlZHVsZUlucHV0Tm90aWZpY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OldQRUdhbWVwYWRQcm92aWRlcjo6aW5wdXRWaWV3KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuaDogQWRkZWQu
CisKIDIwMjItMDUtMDQgIFppcmFuIFN1biAgPHpzdW5AaWdhbGlhLmNvbT4KIAogICAgICAgICBb
SW5wdXRFbGVtZW50XSBTZWxlY3Rpb24gYWZ0ZXIgdHlwZSBjaGFuZ2UgbmVlZHMgdG8gZm9sbG93
IEhUTUwgc3BlY2lmaWNhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmMmYxODgxMDJlNzQwYTNkMTVhYWJkMTg1
MWM4YzBiNTViZDBkYzQ0Li44ZWM4YWVhMDA0NmU4NzJhN2EwZDZjZjQ3ZTQwYWMzZDIxZWE3YzU3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIyLTA1LTA0ICBWw61jdG9yIE1hbnVlbCBK
w6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW1dQRV0gQWRkIGdh
bWVwYWQgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjMwNjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSGFuZGxlIGEgdmVjdG9yIG9mIGNyZWF0ZWQgdmlld3MgaW4gb3JkZXIgdG8gc2VsZWN0
IHRoZSBvbmUgd2hlcmUgZ2FtZXBhZHMgYXJlIGFjdGl2ZS4KKworICAgICAgICBPcmlnaW5hbCBw
YXRjaCBieSBFdWdlbmUgTXV0YXZjaGkgPElldmdlbl9NdXRhdmNoaUBjb21jYXN0LmNvbT4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBTb3VyY2VzV1BFLnR4dDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcDoKKyAgICAgICAgKFdLV1BFOjptX2Jh
Y2tlbmQpOgorICAgICAgICAoV0tXUEU6OlZpZXc6On5WaWV3KToKKyAgICAgICAgKFdLV1BFOjpW
aWV3OjpzZXRWaWV3U3RhdGUpOgorICAgICAgICAoV0tXUEU6OlZpZXc6OnBsYXRmb3JtV2ViUGFn
ZVByb3h5Rm9yR2FtZXBhZElucHV0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XUEVW
aWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0dhbWVwYWQvVUlHYW1lcGFkUHJvdmlkZXIuY3Bw
OgorICAgICAgICAqIFVJUHJvY2Vzcy9HYW1lcGFkL3dwZS9VSUdhbWVwYWRQcm92aWRlcldQRS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpVSUdhbWVwYWRQcm92aWRlcjo6cGxhdGZvcm1T
ZXREZWZhdWx0R2FtZXBhZFByb3ZpZGVyKToKKyAgICAgICAgKFdlYktpdDo6VUlHYW1lcGFkUHJv
dmlkZXI6OnBsYXRmb3JtV2ViUGFnZVByb3h5Rm9yR2FtZXBhZElucHV0KToKKyAgICAgICAgKFdl
YktpdDo6VUlHYW1lcGFkUHJvdmlkZXI6OnBsYXRmb3JtU3RvcE1vbml0b3JpbmdJbnB1dCk6Cisg
ICAgICAgIChXZWJLaXQ6OlVJR2FtZXBhZFByb3ZpZGVyOjpwbGF0Zm9ybVN0YXJ0TW9uaXRvcmlu
Z0lucHV0KToKKwogMjAyMi0wNS0wNCAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlciBoYXMgcmVkdW5kYW50LCB1bnVz
ZWQgZmx1c2hDb250ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5j
bWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV1BFLmNtYWtlCmluZGV4IDlkMDIxYTFhODg3
ZmIwNjc3OWIwNjNiNTI1YWM5ODVmOGY0YmEzN2EuLmU3NWYwYmI2NzEzYmU0YTJkMGE5YjVlMDMw
ZmMzMGNhYmZlY2MwYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV1BFLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV1BFLmNtYWtlCkBAIC0xMzksMyArMTM5
LDkgQEAgaWYgKFVTRV9MSUJHQk0pCiAgICAgICAgICR7TElCRFJNX0xJQlJBUklFU30KICAgICAp
CiBlbmRpZiAoKQorCitpZiAoRU5BQkxFX0dBTUVQQUQpCisgICAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCisgICAgICAgIHBsYXRmb3JtL2dhbWVwYWQvd3Bl
L1dQRUdhbWVwYWRQcm92aWRlci5oCisgICAgKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc1dQRS50eHQK
aW5kZXggM2M2NGJmZDllMmE1ZWQ1NmZmZDYxZjZjMGUxYTQyZjc4YzllNzI2Yi4uODVlYzAwZmFh
MGRhMjZlODY4MmIyNzVkMDFjYmIzZDI2NDMyNmUwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvU291cmNlc1dQRS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc1dQRS50eHQKQEAg
LTYxLDYgKzYxLDkgQEAgcGxhdGZvcm0vVXNlckFnZW50UXVpcmtzLmNwcAogcGxhdGZvcm0vYWR3
YWl0YS9TY3JvbGxiYXJUaGVtZUFkd2FpdGEuY3BwCiBwbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3
YWl0YS5jcHAKIAorcGxhdGZvcm0vZ2FtZXBhZC93cGUvV1BFR2FtZXBhZC5jcHAKK3BsYXRmb3Jt
L2dhbWVwYWQvd3BlL1dQRUdhbWVwYWRQcm92aWRlci5jcHAKKwogcGxhdGZvcm0vZ2VuZXJpYy9T
Y3JvbGxiYXJzQ29udHJvbGxlckdlbmVyaWMuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xF
V2ViS2l0QnJpZGdlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2Ft
ZXBhZC93cGUvV1BFR2FtZXBhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFk
L3dwZS9XUEVHYW1lcGFkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MjYwZWQ4ODY5YThlYjhhNTQ1YzlhZjIy
OTQwZWZiZDI1YzJiNWFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2FtZXBhZC93cGUvV1BFR2FtZXBhZC5jcHAKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBSREsgTWFuYWdlbWVudCAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV1BFR2FtZXBhZC5oIgorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisK
KyNpbmNsdWRlICJXUEVHYW1lcGFkUHJvdmlkZXIuaCIKKyNpbmNsdWRlIDx3cGUvd3BlLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1BFR2FtZXBhZDo6V1BFR2FtZXBhZCh1bnNpZ25lZCBn
YW1lcGFkSWQsIHVuc2lnbmVkIGluZGV4KQorICAgIDogUGxhdGZvcm1HYW1lcGFkKGluZGV4KQor
ICAgICwgbV9idXR0b25WYWx1ZXMoV1BFX0dBTUVQQURfQlVUVE9OX0NPVU5ULCBTaGFyZWRHYW1l
cGFkVmFsdWUoMC4wKSkKKyAgICAsIG1fYXhpc1ZhbHVlcyhXUEVfR0FNRVBBRF9BWElTX0NPVU5U
LCBTaGFyZWRHYW1lcGFkVmFsdWUoMC4wKSkKKyAgICAsIG1fZ2FtZXBhZCh3cGVfZ2FtZXBhZF9j
cmVhdGUoZ2FtZXBhZElkKSwgd3BlX2dhbWVwYWRfZGVzdHJveSkKK3sKKyAgICBBU1NFUlQobV9n
YW1lcGFkKTsKKworICAgIG1fY29ubmVjdFRpbWUgPSBtX2xhc3RVcGRhdGVUaW1lID0gTW9ub3Rv
bmljVGltZTo6bm93KCk7CisKKyAgICBtX2lkID0gU3RyaW5nOjpmcm9tVVRGOCh3cGVfZ2FtZXBh
ZF9nZXRfaWQobV9nYW1lcGFkLmdldCgpKSk7CisgICAgbV9tYXBwaW5nID0gU3RyaW5nOjpmcm9t
VVRGOCgic3RhbmRhcmQiKTsKKworICAgIHN0YXRpYyBzdHJ1Y3Qgd3BlX2dhbWVwYWRfY2xpZW50
X2ludGVyZmFjZSBzX2NsaWVudCA9IHsKKyAgICAgICAgLy8gYnV0dG9uX2V2ZW50CisgICAgICAg
IFtdKHZvaWQqIGRhdGEsIGVudW0gd3BlX2dhbWVwYWRfYnV0dG9uIGJ1dHRvbiwgYm9vbCBwcmVz
c2VkKSB7CisgICAgICAgICAgICBhdXRvJiBzZWxmID0gKnN0YXRpY19jYXN0PFdQRUdhbWVwYWQq
PihkYXRhKTsKKyAgICAgICAgICAgIHNlbGYuYnV0dG9uUHJlc3NlZE9yUmVsZWFzZWQoc3RhdGlj
X2Nhc3Q8aW50PihidXR0b24pLCBwcmVzc2VkKTsKKyAgICAgICAgfSwKKyAgICAgICAgLy8gYXhp
c19ldmVudAorICAgICAgICBbXSh2b2lkKiBkYXRhLCBlbnVtIHdwZV9nYW1lcGFkX2F4aXMgYXhp
cywgZG91YmxlIHZhbHVlKSB7CisgICAgICAgICAgICBhdXRvJiBzZWxmID0gKnN0YXRpY19jYXN0
PFdQRUdhbWVwYWQqPihkYXRhKTsKKyAgICAgICAgICAgIHNlbGYuYWJzb2x1dGVBeGlzQ2hhbmdl
ZChzdGF0aWNfY2FzdDxpbnQ+KGF4aXMpLCB2YWx1ZSk7CisgICAgICAgIH0sCisgICAgICAgIG51
bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsCisgICAgfTsKKyAgICB3cGVfZ2FtZXBhZF9zZXRfY2xp
ZW50KG1fZ2FtZXBhZC5nZXQoKSwgJnNfY2xpZW50LCB0aGlzKTsKK30KKworV1BFR2FtZXBhZDo6
fldQRUdhbWVwYWQoKQoreworICAgIHdwZV9nYW1lcGFkX3NldF9jbGllbnQobV9nYW1lcGFkLmdl
dCgpLCBudWxscHRyLCBudWxscHRyKTsKK30KKwordm9pZCBXUEVHYW1lcGFkOjpidXR0b25QcmVz
c2VkT3JSZWxlYXNlZChpbnQgYnV0dG9uLCBib29sIHByZXNzZWQpCit7CisgICAgbV9sYXN0VXBk
YXRlVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIG1fYnV0dG9uVmFsdWVzW2J1dHRv
bl0uc2V0VmFsdWUocHJlc3NlZCA/IDEuMCA6IDAuMCk7CisKKyAgICBXUEVHYW1lcGFkUHJvdmlk
ZXI6OnNpbmdsZXRvbigpLnNjaGVkdWxlSW5wdXROb3RpZmljYXRpb24oKnRoaXMsIHByZXNzZWQg
PyBXUEVHYW1lcGFkUHJvdmlkZXI6OlNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGU6OlllcyA6IFdQ
RUdhbWVwYWRQcm92aWRlcjo6U2hvdWxkTWFrZUdhbWVwYWRzVmlzaWJsZTo6Tm8pOworfQorCit2
b2lkIFdQRUdhbWVwYWQ6OmFic29sdXRlQXhpc0NoYW5nZWQoaW50IGF4aXMsIGRvdWJsZSB2YWx1
ZSkKK3sKKyAgICBtX2xhc3RVcGRhdGVUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAg
bV9heGlzVmFsdWVzW2F4aXNdLnNldFZhbHVlKHZhbHVlKTsKKworICAgIFdQRUdhbWVwYWRQcm92
aWRlcjo6c2luZ2xldG9uKCkuc2NoZWR1bGVJbnB1dE5vdGlmaWNhdGlvbigqdGhpcywgV1BFR2Ft
ZXBhZFByb3ZpZGVyOjpTaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlOjpObyk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC93cGUvV1BFR2FtZXBhZC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC93cGUvV1BFR2FtZXBhZC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjFhYzFiZDExNGQxNWRkN2RkMWE0MDJkZjUwOTc5OGEwMmNiNDk1NjgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkLmgKQEAg
LTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBSREsgTWFuYWdlbWVudCAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVk
ZSAiUGxhdGZvcm1HYW1lcGFkLmgiCisKK3N0cnVjdCB3cGVfZ2FtZXBhZDsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBXUEVHYW1lcGFkIGZpbmFsIDogcHVibGljIFBsYXRmb3JtR2Ft
ZXBhZCB7CitwdWJsaWM6CisgICAgV1BFR2FtZXBhZCh1bnNpZ25lZCwgdW5zaWduZWQpOworICAg
IHZpcnR1YWwgfldQRUdhbWVwYWQoKTsKKworICAgIGNvbnN0IFZlY3RvcjxTaGFyZWRHYW1lcGFk
VmFsdWU+JiBheGlzVmFsdWVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9heGlzVmFsdWVzOyB9
CisgICAgY29uc3QgVmVjdG9yPFNoYXJlZEdhbWVwYWRWYWx1ZT4mIGJ1dHRvblZhbHVlcygpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fYnV0dG9uVmFsdWVzOyB9CisKKyAgICBjb25zdCBzdHJ1Y3Qg
d3BlX2dhbWVwYWQqIHdwZUdhbWVwYWQoKSBjb25zdCB7IHJldHVybiBtX2dhbWVwYWQuZ2V0KCk7
IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGJ1dHRvblByZXNzZWRPclJlbGVhc2VkKGludCwgYm9v
bCk7CisgICAgdm9pZCBhYnNvbHV0ZUF4aXNDaGFuZ2VkKGludCwgZG91YmxlKTsKKworICAgIFZl
Y3RvcjxTaGFyZWRHYW1lcGFkVmFsdWU+IG1fYnV0dG9uVmFsdWVzOworICAgIFZlY3RvcjxTaGFy
ZWRHYW1lcGFkVmFsdWU+IG1fYXhpc1ZhbHVlczsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxzdHJ1
Y3Qgd3BlX2dhbWVwYWQsIHZvaWQoKikoc3RydWN0IHdwZV9nYW1lcGFkKik+IG1fZ2FtZXBhZDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFE
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC93cGUvV1BFR2Ft
ZXBhZFByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvd3BlL1dQ
RUdhbWVwYWRQcm92aWRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzYyYzg5M2RkYjFhMjVmYjExMWMwMTU5
MTZkZWY2YWNmNDU3Njg5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWRQcm92aWRlci5jcHAKQEAgLTAsMCArMSwyMjIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgUkRLIE1hbmFnZW1lbnQgIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldQRUdhbWVwYWRQcm92aWRlci5oIgorCisjaWYg
RU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlICJHYW1lcGFkUHJvdmlkZXJDbGllbnQuaCIKKyNp
bmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiV1BFR2FtZXBhZC5oIgorI2luY2x1ZGUgPHdw
ZS93cGUuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgY29uc3QgU2Vjb25kcyBjb25uZWN0aW9uRGVsYXlJbnRlcnZhbCB7
IDUwMF9tcyB9Oworc3RhdGljIGNvbnN0IFNlY29uZHMgaW5wdXROb3RpZmljYXRpb25EZWxheSB7
IDUwX21zIH07CisKK1dQRUdhbWVwYWRQcm92aWRlciYgV1BFR2FtZXBhZFByb3ZpZGVyOjpzaW5n
bGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXUEVHYW1lcGFkUHJvdmlkZXI+
IHNoYXJlZFByb3ZpZGVyOworICAgIHJldHVybiBzaGFyZWRQcm92aWRlcjsKK30KKworV1BFR2Ft
ZXBhZFByb3ZpZGVyOjpXUEVHYW1lcGFkUHJvdmlkZXIoKQorICAgIDogbV9wcm92aWRlcih3cGVf
Z2FtZXBhZF9wcm92aWRlcl9jcmVhdGUoKSwgd3BlX2dhbWVwYWRfcHJvdmlkZXJfZGVzdHJveSkK
KyAgICAsIG1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGltZXIoUnVuTG9vcDo6Y3VycmVudCgp
LCB0aGlzLCAmV1BFR2FtZXBhZFByb3ZpZGVyOjppbml0aWFsR2FtZXBhZHNDb25uZWN0ZWRUaW1l
ckZpcmVkKQorICAgICwgbV9pbnB1dE5vdGlmaWNhdGlvblRpbWVyKFJ1bkxvb3A6OmN1cnJlbnQo
KSwgdGhpcywgJldQRUdhbWVwYWRQcm92aWRlcjo6aW5wdXROb3RpZmljYXRpb25UaW1lckZpcmVk
KQoreworICAgIHN0YXRpYyBzdHJ1Y3Qgd3BlX2dhbWVwYWRfcHJvdmlkZXJfY2xpZW50X2ludGVy
ZmFjZSBzX2NsaWVudCA9IHsKKyAgICAgICAgLy8gY29ubmVjdGVkCisgICAgICAgIFtdKHZvaWQq
IGRhdGEsIHVuc2lnbmVkIGdhbWVwYWRJZCkgeworICAgICAgICAgICAgYXV0byYgcHJvdmlkZXIg
PSAqc3RhdGljX2Nhc3Q8V1BFR2FtZXBhZFByb3ZpZGVyKj4oZGF0YSk7CisgICAgICAgICAgICBw
cm92aWRlci5nYW1lcGFkQ29ubmVjdGVkKGdhbWVwYWRJZCk7CisgICAgICAgIH0sCisgICAgICAg
IC8vIGRpc2Nvbm5lY3RlZAorICAgICAgICBbXSh2b2lkKiBkYXRhLCB1bnNpZ25lZCBnYW1lcGFk
SWQpIHsKKyAgICAgICAgICAgIGF1dG8mIHByb3ZpZGVyID0gKnN0YXRpY19jYXN0PFdQRUdhbWVw
YWRQcm92aWRlcio+KGRhdGEpOworICAgICAgICAgICAgcHJvdmlkZXIuZ2FtZXBhZERpc2Nvbm5l
Y3RlZChnYW1lcGFkSWQpOworICAgICAgICB9LAorICAgICAgICBudWxscHRyLCBudWxscHRyLCBu
dWxscHRyLAorICAgIH07CisKKyAgICB3cGVfZ2FtZXBhZF9wcm92aWRlcl9zZXRfY2xpZW50KG1f
cHJvdmlkZXIuZ2V0KCksICZzX2NsaWVudCwgdGhpcyk7Cit9CisKK1dQRUdhbWVwYWRQcm92aWRl
cjo6fldQRUdhbWVwYWRQcm92aWRlcigpCit7CisgICAgd3BlX2dhbWVwYWRfcHJvdmlkZXJfc2V0
X2NsaWVudChtX3Byb3ZpZGVyLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKK30KKwordm9pZCBX
UEVHYW1lcGFkUHJvdmlkZXI6OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRl
ckNsaWVudCYgY2xpZW50KQoreworICAgIGlmICghbV9wcm92aWRlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgYm9vbCBzaG91bGRPcGVuQW5kU2NoZWR1bGVNYW5hZ2VyID0gbV9jbGllbnRzLmlz
RW1wdHkoKTsKKworICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKKyAg
ICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOworCisgICAgaWYgKCFzaG91bGRPcGVuQW5kU2NoZWR1
bGVNYW5hZ2VyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9nYW1lcGFkVmVjdG9y
LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fZ2FtZXBhZE1hcC5pc0VtcHR5KCkpOworCisgICAg
bV9pbml0aWFsR2FtZXBhZHNDb25uZWN0ZWQgPSBmYWxzZTsKKworICAgIC8vIEFueSBjb25uZWN0
aW9ucyB3ZSBhcmUgbm90aWZpZWQgb2Ygd2l0aGluIHRoZSBjb25uZWN0aW9uRGVsYXlJbnRlcnZh
bCBvZiBsaXN0ZW5pbmcgbGlrZWx5IHJlcHJlc2VudAorICAgIC8vIGRldmljZXMgdGhhdCB3ZXJl
IGFscmVhZHkgY29ubmVjdGVkLCBzbyB3ZSBzdXBwcmVzcyBub3RpZnlpbmcgY2xpZW50cyBvZiB0
aGVzZS4KKyAgICBtX2luaXRpYWxHYW1lcGFkc0Nvbm5lY3RlZFRpbWVyLnN0YXJ0T25lU2hvdChj
b25uZWN0aW9uRGVsYXlJbnRlcnZhbCk7CisKKyAgICB3cGVfZ2FtZXBhZF9wcm92aWRlcl9zdGFy
dChtX3Byb3ZpZGVyLmdldCgpKTsKK30KKwordm9pZCBXUEVHYW1lcGFkUHJvdmlkZXI6OnN0b3BN
b25pdG9yaW5nR2FtZXBhZHMoR2FtZXBhZFByb3ZpZGVyQ2xpZW50JiBjbGllbnQpCit7CisgICAg
aWYgKCFtX3Byb3ZpZGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9jbGllbnRz
LmNvbnRhaW5zKCZjbGllbnQpKTsKKworICAgIGJvb2wgc2hvdWxkQ2xvc2VBbmRVbnNjaGVkdWxl
TWFuYWdlciA9IG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCkgJiYgbV9jbGllbnRzLmlzRW1wdHko
KTsKKyAgICBpZiAoIXNob3VsZENsb3NlQW5kVW5zY2hlZHVsZU1hbmFnZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIHdwZV9nYW1lcGFkX3Byb3ZpZGVyX3N0b3AobV9wcm92aWRlci5nZXQoKSk7
CisKKyAgICBtX2dhbWVwYWRWZWN0b3IuY2xlYXIoKTsKKyAgICBtX2dhbWVwYWRNYXAuY2xlYXIo
KTsKKyAgICBtX2luaXRpYWxHYW1lcGFkc0Nvbm5lY3RlZFRpbWVyLnN0b3AoKTsKKyAgICBtX2xh
c3RBY3RpdmVHYW1lcGFkID0gbnVsbHB0cjsKK30KKwordm9pZCBXUEVHYW1lcGFkUHJvdmlkZXI6
OmdhbWVwYWRDb25uZWN0ZWQodW5zaWduZWQgaWQpCit7CisgICAgQVNTRVJUKCFtX2dhbWVwYWRN
YXAuZ2V0KGlkKSk7CisgICAgQVNTRVJUKG1fcHJvdmlkZXIpOworCisgICAgTE9HKEdhbWVwYWQs
ICJXUEVHYW1lcGFkUHJvdmlkZXIgZGV2aWNlICV1IGFkZGVkIiwgaWQpOworCisgICAgdW5zaWdu
ZWQgaW5kZXggPSBpbmRleEZvck5ld2x5Q29ubmVjdGVkRGV2aWNlKCk7CisgICAgYXV0byBnYW1l
cGFkID0gbWFrZVVuaXF1ZTxXUEVHYW1lcGFkPihpZCwgaW5kZXgpOworCisgICAgaWYgKG1fZ2Ft
ZXBhZFZlY3Rvci5zaXplKCkgPD0gaW5kZXgpCisgICAgICAgIG1fZ2FtZXBhZFZlY3Rvci5ncm93
KGluZGV4ICsgMSk7CisKKyAgICBtX2dhbWVwYWRWZWN0b3JbaW5kZXhdID0gZ2FtZXBhZC5nZXQo
KTsKKyAgICBtX2dhbWVwYWRNYXAuc2V0KGlkLCBXVEZNb3ZlKGdhbWVwYWQpKTsKKworICAgIGlm
ICghbV9pbml0aWFsR2FtZXBhZHNDb25uZWN0ZWQpIHsKKyAgICAgICAgLy8gVGhpcyBhZGRlZCBk
ZXZpY2UgaXMgdGhlIHJlc3VsdCBvZiB1cyBzdGFydGluZyB0byBtb25pdG9yIGdhbWVwYWRzLgor
ICAgICAgICAvLyBXZSdsbCBnZXQgbm90aWZpZWQgb2YgYWxsIGNvbm5lY3RlZCBkZXZpY2VzIGR1
cmluZyB0aGlzIGN1cnJlbnQgc3BpbiBvZiB0aGUgcnVubG9vcAorICAgICAgICAvLyBhbmQgdGhl
IGNsaWVudCBzaG91bGQgYmUgdG9sZCB0aGV5IHdlcmUgYWxyZWFkeSBjb25uZWN0ZWQuCisgICAg
ICAgIC8vIFRoZSBtX2Nvbm5lY3Rpb25EZWxheVRpbWVyIGZpcmVzIGluIGEgc3Vic2VxdWVudCBz
cGluIG9mIHRoZSBydW5sb29wIGFmdGVyIHdoaWNoCisgICAgICAgIC8vIGFueSBjb25uZWN0aW9u
IGV2ZW50cyBhcmUgYWN0dWFsIG5ldyBkZXZpY2VzIGFuZCBjYW4gdHJpZ2dlciBnYW1lcGFkIHZp
c2liaWxpdHkuCisgICAgICAgIGlmICghbV9pbml0aWFsR2FtZXBhZHNDb25uZWN0ZWRUaW1lci5p
c0FjdGl2ZSgpKQorICAgICAgICAgICAgbV9pbml0aWFsR2FtZXBhZHNDb25uZWN0ZWRUaW1lci5z
dGFydE9uZVNob3QoMF9zKTsKKyAgICB9CisKKyAgICBhdXRvIGV2ZW50VmlzaWJpbGl0eSA9IG1f
aW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkID8gRXZlbnRNYWtlc0dhbWVwYWRzVmlzaWJsZTo6WWVz
IDogRXZlbnRNYWtlc0dhbWVwYWRzVmlzaWJsZTo6Tm87CisgICAgZm9yIChhdXRvJiBjbGllbnQg
OiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+cGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKCpt
X2dhbWVwYWRWZWN0b3JbaW5kZXhdLCBldmVudFZpc2liaWxpdHkpOworfQorCit2b2lkIFdQRUdh
bWVwYWRQcm92aWRlcjo6Z2FtZXBhZERpc2Nvbm5lY3RlZCh1bnNpZ25lZCBpZCkKK3sKKyAgICBM
T0coR2FtZXBhZCwgIldQRUdhbWVwYWRQcm92aWRlciBkZXZpY2UgJXUgcmVtb3ZlZCIsIGlkKTsK
KworICAgIGF1dG8gcmVtb3ZlZEdhbWVwYWQgPSByZW1vdmVHYW1lcGFkRm9ySWQoaWQpOworICAg
IEFTU0VSVChyZW1vdmVkR2FtZXBhZCk7CisKKyAgICBpZiAocmVtb3ZlZEdhbWVwYWQtPndwZUdh
bWVwYWQoKSA9PSBtX2xhc3RBY3RpdmVHYW1lcGFkKQorICAgICAgICBtX2xhc3RBY3RpdmVHYW1l
cGFkID0gbnVsbHB0cjsKKworICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQorICAg
ICAgICBjbGllbnQtPnBsYXRmb3JtR2FtZXBhZERpc2Nvbm5lY3RlZCgqcmVtb3ZlZEdhbWVwYWQp
OworfQorCit1bnNpZ25lZCBXUEVHYW1lcGFkUHJvdmlkZXI6OmluZGV4Rm9yTmV3bHlDb25uZWN0
ZWREZXZpY2UoKQoreworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICB3aGlsZSAoaW5kZXgg
PCBtX2dhbWVwYWRWZWN0b3Iuc2l6ZSgpICYmIG1fZ2FtZXBhZFZlY3RvcltpbmRleF0pCisgICAg
ICAgICsraW5kZXg7CisKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxX
UEVHYW1lcGFkPiBXUEVHYW1lcGFkUHJvdmlkZXI6OnJlbW92ZUdhbWVwYWRGb3JJZCh1bnNpZ25l
ZCBpZCkKK3sKKyAgICBhdXRvIHJlbW92ZWRHYW1lcGFkID0gbV9nYW1lcGFkTWFwLnRha2UoaWQp
OworICAgIEFTU0VSVChyZW1vdmVkR2FtZXBhZCk7CisKKyAgICBhdXRvIGluZGV4ID0gbV9nYW1l
cGFkVmVjdG9yLmZpbmQocmVtb3ZlZEdhbWVwYWQuZ2V0KCkpOworICAgIGlmIChpbmRleCAhPSBu
b3RGb3VuZCkKKyAgICAgICAgbV9nYW1lcGFkVmVjdG9yW2luZGV4XSA9IG51bGxwdHI7CisKKyAg
ICByZXR1cm4gcmVtb3ZlZEdhbWVwYWQ7Cit9CisKK3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjpp
bml0aWFsR2FtZXBhZHNDb25uZWN0ZWRUaW1lckZpcmVkKCkKK3sKKyAgICBtX2luaXRpYWxHYW1l
cGFkc0Nvbm5lY3RlZCA9IHRydWU7Cit9CisKK3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjppbnB1
dE5vdGlmaWNhdGlvblRpbWVyRmlyZWQoKQoreworICAgIGlmICghbV9pbml0aWFsR2FtZXBhZHND
b25uZWN0ZWQpIHsKKyAgICAgICAgaWYgKCFtX2lucHV0Tm90aWZpY2F0aW9uVGltZXIuaXNBY3Rp
dmUoKSkKKyAgICAgICAgICAgIG1faW5wdXROb3RpZmljYXRpb25UaW1lci5zdGFydE9uZVNob3Qo
MF9zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRpc3BhdGNoUGxhdGZvcm1HYW1l
cGFkSW5wdXRBY3Rpdml0eSgpOworfQorCit2b2lkIFdQRUdhbWVwYWRQcm92aWRlcjo6c2NoZWR1
bGVJbnB1dE5vdGlmaWNhdGlvbihXUEVHYW1lcGFkJiBnYW1lcGFkLCBTaG91bGRNYWtlR2FtZXBh
ZHNWaXNpYmxlIHNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGUpCit7CisgICAgbV9sYXN0QWN0aXZl
R2FtZXBhZCA9IGNvbnN0X2Nhc3Q8c3RydWN0IHdwZV9nYW1lcGFkKj4oZ2FtZXBhZC53cGVHYW1l
cGFkKCkpOworCisgICAgaWYgKCFtX2lucHV0Tm90aWZpY2F0aW9uVGltZXIuaXNBY3RpdmUoKSkK
KyAgICAgICAgbV9pbnB1dE5vdGlmaWNhdGlvblRpbWVyLnN0YXJ0T25lU2hvdChpbnB1dE5vdGlm
aWNhdGlvbkRlbGF5KTsKKworICAgIGlmIChzaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlID09IFNo
b3VsZE1ha2VHYW1lcGFkc1Zpc2libGU6OlllcykKKyAgICAgICAgc2V0U2hvdWxkTWFrZUdhbWVw
YWRzVmlzaWJpbGUoKTsKK30KKworc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIFdQRUdhbWVwYWRQ
cm92aWRlcjo6aW5wdXRWaWV3KCkKK3sKKyAgICBpZiAoIW1fcHJvdmlkZXIgfHwgIW1fbGFzdEFj
dGl2ZUdhbWVwYWQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiB3cGVfZ2Ft
ZXBhZF9wcm92aWRlcl9nZXRfdmlld19iYWNrZW5kKG1fcHJvdmlkZXIuZ2V0KCksIG1fbGFzdEFj
dGl2ZUdhbWVwYWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVw
YWQvd3BlL1dQRUdhbWVwYWRQcm92aWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2Ft
ZXBhZC93cGUvV1BFR2FtZXBhZFByb3ZpZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU0N2M3MmY2YjkyY2Y3
Zjg2ZGM5MzJhZTY0ZDFlMmNkOTIwMDFiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWRQcm92aWRlci5oCkBAIC0wLDAgKzEs
ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgUkRLIE1hbmFnZW1lbnQgIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKworI2luY2x1ZGUgIkdhbWVw
YWRQcm92aWRlci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1J1
bkxvb3AuaD4KKworc3RydWN0IHdwZV9nYW1lcGFkX3Byb3ZpZGVyOworc3RydWN0IHdwZV92aWV3
X2JhY2tlbmQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV1BFR2FtZXBhZDsKKwor
Y2xhc3MgV1BFR2FtZXBhZFByb3ZpZGVyIGZpbmFsIDogcHVibGljIEdhbWVwYWRQcm92aWRlciB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV1BFR2FtZXBhZFByb3ZpZGVyKTsKKyAgICBmcmll
bmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8V1BFR2FtZXBhZFByb3ZpZGVyPjsKKworcHVibGljOgor
ICAgIHN0YXRpYyBXUEVHYW1lcGFkUHJvdmlkZXImIHNpbmdsZXRvbigpOworCisgICAgdmlydHVh
bCB+V1BFR2FtZXBhZFByb3ZpZGVyKCk7CisKKyAgICB2b2lkIHN0YXJ0TW9uaXRvcmluZ0dhbWVw
YWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCYpIGZpbmFsOworICAgIHZvaWQgc3RvcE1vbml0b3Jp
bmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJDbGllbnQmKSBmaW5hbDsKKyAgICBjb25zdCBWZWN0
b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRmb3JtR2FtZXBhZHMoKSBmaW5hbCB7IHJldHVybiBt
X2dhbWVwYWRWZWN0b3I7IH0KKworICAgIGVudW0gY2xhc3MgU2hvdWxkTWFrZUdhbWVwYWRzVmlz
aWJsZSA6IGJvb2wgeyBObywKKyAgICAgICAgWWVzIH07CisgICAgdm9pZCBzY2hlZHVsZUlucHV0
Tm90aWZpY2F0aW9uKFdQRUdhbWVwYWQmLCBTaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlKTsKKwor
ICAgIHN0cnVjdCB3cGVfdmlld19iYWNrZW5kKiBpbnB1dFZpZXcoKTsKKworcHJpdmF0ZToKKyAg
ICBXUEVHYW1lcGFkUHJvdmlkZXIoKTsKKworICAgIHZvaWQgZ2FtZXBhZENvbm5lY3RlZCh1bnNp
Z25lZCk7CisgICAgdm9pZCBnYW1lcGFkRGlzY29ubmVjdGVkKHVuc2lnbmVkKTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V1BFR2FtZXBhZD4gcmVtb3ZlR2FtZXBhZEZvcklkKHVuc2lnbmVkKTsKKwor
ICAgIHVuc2lnbmVkIGluZGV4Rm9yTmV3bHlDb25uZWN0ZWREZXZpY2UoKTsKKyAgICB2b2lkIGlu
aXRpYWxHYW1lcGFkc0Nvbm5lY3RlZFRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIGlucHV0Tm90aWZp
Y2F0aW9uVGltZXJGaXJlZCgpOworCisgICAgVmVjdG9yPFBsYXRmb3JtR2FtZXBhZCo+IG1fZ2Ft
ZXBhZFZlY3RvcjsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8V1BFR2Ft
ZXBhZD4+IG1fZ2FtZXBhZE1hcDsKKyAgICBib29sIG1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVk
IHsgZmFsc2UgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxzdHJ1Y3Qgd3BlX2dhbWVwYWRfcHJv
dmlkZXIsIHZvaWQgKCopKHN0cnVjdCB3cGVfZ2FtZXBhZF9wcm92aWRlciopPiBtX3Byb3ZpZGVy
OworICAgIHN0cnVjdCB3cGVfZ2FtZXBhZCogbV9sYXN0QWN0aXZlR2FtZXBhZCB7IG51bGxwdHIg
fTsKKworICAgIFJ1bkxvb3A6OlRpbWVyPFdQRUdhbWVwYWRQcm92aWRlcj4gbV9pbml0aWFsR2Ft
ZXBhZHNDb25uZWN0ZWRUaW1lcjsKKyAgICBSdW5Mb29wOjpUaW1lcjxXUEVHYW1lcGFkUHJvdmlk
ZXI+IG1faW5wdXROb3RpZmljYXRpb25UaW1lcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKaW5kZXggYWUy
MTgxMDg4ZjgyMjE1OTRjOWEyYjRmYmU1ZDk5ZjJiNjkzNmQ2Ny4uNzE1YzAyOThkNjNkZTdhMDJj
YWI2YThhMWVhZTY4NzQ4ZWQwN2NkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
V1BFLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CkBAIC0yMDEsNiArMjAx
LDggQEAgVUlQcm9jZXNzL0F1dG9tYXRpb24vbGlid3BlL1dlYkF1dG9tYXRpb25TZXNzaW9uTGli
V1BFLmNwcAogCiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYVByb3h5
Q29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKIAorVUlQcm9jZXNzL0dhbWVwYWQvd3BlL1VJR2FtZXBh
ZFByb3ZpZGVyV1BFLmNwcAorCiBVSVByb2Nlc3MvZ2VvY2x1ZS9HZW9jbHVlR2VvbG9jYXRpb25Q
cm92aWRlci5jcHAKIAogVUlQcm9jZXNzL2dsaWIvV2ViUGFnZVByb3h5R0xpYi5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwCmluZGV4IDUxNjQ1OWIzMTQw
OWM3MDYxZTU0NmZkZDAyYjk4ZWRlMzRiYTZmM2QuLmM1Y2Q0ZWQ3ODRhZTk0NWE0ODZiZDc2Zjlm
MDg5MWI5N2U3YzQ1N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvV1BFVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVW
aWV3LmNwcApAQCAtMzksMTIgKzM5LDIwIEBACiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCiAj
aW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbXBvc2l0aW9u
VW5kZXJsaW5lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XUEVHYW1lcGFkUHJvdmlkZXIuaD4KICNp
bmNsdWRlIDx3cGUvd3BlLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSBXS1dQRSB7CiAKK3N0YXRpYyBWZWN0
b3I8Vmlldyo+JiB2aWV3c1ZlY3RvcigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZl
Y3RvcjxWaWV3Kj4+IHZlY3RvcjsKKyAgICByZXR1cm4gdmVjdG9yOworfQorCiBWaWV3OjpWaWV3
KHN0cnVjdCB3cGVfdmlld19iYWNrZW5kKiBiYWNrZW5kLCBjb25zdCBBUEk6OlBhZ2VDb25maWd1
cmF0aW9uJiBiYXNlQ29uZmlndXJhdGlvbikKICAgICA6IG1fY2xpZW50KG1ha2VVbmlxdWU8QVBJ
OjpWaWV3Q2xpZW50PigpKQogICAgICwgbV90b3VjaEdlc3R1cmVDb250cm9sbGVyKG1ha2VVbmlx
dWU8VG91Y2hHZXN0dXJlQ29udHJvbGxlcj4oKSkKQEAgLTI5MywxMCArMzAxLDEzIEBAIFZpZXc6
OlZpZXcoc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQSTo6UGFnZUNv
bmZpZ3VyYXRpb24mIGJhc2VDCiAgICAgd3BlX3ZpZXdfYmFja2VuZF9pbml0aWFsaXplKG1fYmFj
a2VuZCk7CiAKICAgICBtX3BhZ2VQcm94eS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKKworICAgIHZp
ZXdzVmVjdG9yKCkuYXBwZW5kKHRoaXMpOwogfQogCiBWaWV3Ojp+VmlldygpCiB7CisgICAgdmll
d3NWZWN0b3IoKS5yZW1vdmVBbGwodGhpcyk7CiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpCiAg
ICAgaWYgKG1fYWNjZXNzaWJsZSkKICAgICAgICAgd2Via2l0V2ViVmlld0FjY2Vzc2libGVTZXRX
ZWJWaWV3KG1fYWNjZXNzaWJsZS5nZXQoKSwgbnVsbHB0cik7CkBAIC0zODIsNiArMzkzLDEzIEBA
IHZvaWQgVmlldzo6c2V0Vmlld1N0YXRlKE9wdGlvblNldDxXZWJDb3JlOjpBY3Rpdml0eVN0YXRl
OjpGbGFnPiBmbGFncykKIAogICAgIGlmIChjaGFuZ2VkRmxhZ3MpCiAgICAgICAgIG1fcGFnZVBy
b3h5LT5hY3Rpdml0eVN0YXRlRGlkQ2hhbmdlKGNoYW5nZWRGbGFncyk7CisKKyAgICBpZiAoIXZp
ZXdzVmVjdG9yKCkuaXNFbXB0eSgpICYmIHZpZXdTdGF0ZSgpLmNvbnRhaW5zKFdlYkNvcmU6OkFj
dGl2aXR5U3RhdGU6OklzVmlzaWJsZSkpIHsKKyAgICAgICAgaWYgKHZpZXdzVmVjdG9yKCkuZmly
c3QoKSAhPSB0aGlzKSB7CisgICAgICAgICAgICB2aWV3c1ZlY3RvcigpLnJlbW92ZUFsbCh0aGlz
KTsKKyAgICAgICAgICAgIHZpZXdzVmVjdG9yKCkuaW5zZXJ0KDAsIHRoaXMpOworICAgICAgICB9
CisgICAgfQogfQogCiB2b2lkIFZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoc3RydWN0IHdwZV9p
bnB1dF9rZXlib2FyZF9ldmVudCogZXZlbnQpCkBAIC00MjksNCArNDQ3LDM1IEBAIFdlYktpdFdl
YlZpZXdBY2Nlc3NpYmxlKiBWaWV3OjphY2Nlc3NpYmxlKCkgY29uc3QKIH0KICNlbmRpZgogCisj
aWYgRU5BQkxFKEdBTUVQQUQpCitXZWJLaXQ6OldlYlBhZ2VQcm94eSogVmlldzo6cGxhdGZvcm1X
ZWJQYWdlUHJveHlGb3JHYW1lcGFkSW5wdXQoKQoreworICAgIGNvbnN0IGF1dG8mIHZpZXdzID0g
dmlld3NWZWN0b3IoKTsKKyAgICBpZiAodmlld3MuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIHN0cnVjdCB3cGVfdmlld19iYWNrZW5kKiB2aWV3QmFja2VuZCA9IFdl
YkNvcmU6OldQRUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkuaW5wdXRWaWV3KCk7CisKKyAg
ICBzaXplX3QgaW5kZXggPSBub3RGb3VuZDsKKworICAgIGlmICh2aWV3QmFja2VuZCkgeworICAg
ICAgICBpbmRleCA9IHZpZXdzLmZpbmRJZihbJl0oVmlldyogdmlldykgeworICAgICAgICAgICAg
cmV0dXJuIHZpZXctPmJhY2tlbmQoKSA9PSB2aWV3QmFja2VuZAorICAgICAgICAgICAgICAgICYm
IHZpZXctPnZpZXdTdGF0ZSgpLmNvbnRhaW5zKFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzVmlz
aWJsZSkKKyAgICAgICAgICAgICAgICAmJiB2aWV3LT52aWV3U3RhdGUoKS5jb250YWlucyhXZWJD
b3JlOjpBY3Rpdml0eVN0YXRlOjpJc0ZvY3VzZWQpOworICAgICAgICB9KTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpbmRleCA9IHZpZXdzLmZpbmRJZihbXShWaWV3KiB2aWV3KSB7CisgICAgICAg
ICAgICByZXR1cm4gdmlldy0+dmlld1N0YXRlKCkuY29udGFpbnMoV2ViQ29yZTo6QWN0aXZpdHlT
dGF0ZTo6SXNWaXNpYmxlKQorICAgICAgICAgICAgICAgICYmIHZpZXctPnZpZXdTdGF0ZSgpLmNv
bnRhaW5zKFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzRm9jdXNlZCk7CisgICAgICAgIH0pOwor
ICAgIH0KKworICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuICYodmll
d3NbaW5kZXhdLT5wYWdlKCkpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisjZW5kaWYKKwog
fSAvLyBuYW1lc3BhY2UgV0tXUEUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvV1BFVmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVW
aWV3LmgKaW5kZXggYWEwZTAzMDYyOWQ1NjI3MTIxOWFhMTczODMxM2M1YmU4YWVmYzJjMC4uZWU2
OWRiMmE1NTJmNzQwZmVlMTk5OGZkZTJlODE2M2YyNDc2MzRlMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmgKQEAgLTEwOCw2ICsxMDgsOSBAQCBwdWJsaWM6CiAj
ZW5kaWYKIAogICAgIFdlYktpdDo6VG91Y2hHZXN0dXJlQ29udHJvbGxlciYgdG91Y2hHZXN0dXJl
Q29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuICptX3RvdWNoR2VzdHVyZUNvbnRyb2xsZXI7IH0K
KyNpZiBFTkFCTEUoR0FNRVBBRCkKKyAgICBzdGF0aWMgV2ViS2l0OjpXZWJQYWdlUHJveHkqIHBs
YXRmb3JtV2ViUGFnZVByb3h5Rm9yR2FtZXBhZElucHV0KCk7CisjZW5kaWYKIAogcHJpdmF0ZToK
ICAgICBWaWV3KHN0cnVjdCB3cGVfdmlld19iYWNrZW5kKiwgY29uc3QgQVBJOjpQYWdlQ29uZmln
dXJhdGlvbiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvR2FtZXBhZC9V
SUdhbWVwYWRQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL1VJ
R2FtZXBhZFByb3ZpZGVyLmNwcAppbmRleCA5N2Q3YzQyZDc5YzVlYjM3ZDc2MWRjZjcxNmE3Mjhm
YWY2NGMyM2JhLi4wMTFjNzI3OWVmOGU1NzU0ZjYxMGJlN2QzNTBlYzhmMzhmM2E4N2NkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL1VJR2FtZXBhZFByb3ZpZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL1VJR2FtZXBhZFByb3Zp
ZGVyLmNwcApAQCAtMTk5LDcgKzE5OSw3IEBAIFZlY3RvcjxHYW1lcGFkRGF0YT4gVUlHYW1lcGFk
UHJvdmlkZXI6OnNuYXBzaG90R2FtZXBhZHMoKQogICAgIH0pOwogfQogCi0jaWYgIVBMQVRGT1JN
KENPQ09BKSAmJiAhKFVTRShNQU5FVFRFKSAmJiBPUyhMSU5VWCkpCisjaWYgIVBMQVRGT1JNKENP
Q09BKSAmJiAhKFVTRShNQU5FVFRFKSAmJiBPUyhMSU5VWCkpICYmICFQTEFURk9STShXUEUpCiAK
IHZvaWQgVUlHYW1lcGFkUHJvdmlkZXI6OnBsYXRmb3JtU2V0RGVmYXVsdEdhbWVwYWRQcm92aWRl
cigpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL3dwZS9V
SUdhbWVwYWRQcm92aWRlcldQRS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFk
L3dwZS9VSUdhbWVwYWRQcm92aWRlcldQRS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTMyZjAxZTUxZTNlZDNl
YzllYTUzZTdjZmZjODM0MGE0NmRkN2NhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0dhbWVwYWQvd3BlL1VJR2FtZXBhZFByb3ZpZGVyV1BFLmNwcApAQCAtMCww
ICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJV
SUdhbWVwYWRQcm92aWRlci5oIgorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlICJX
UEVWaWV3LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL1dQRUdhbWVwYWRQcm92aWRlci5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgVUlH
YW1lcGFkUHJvdmlkZXI6OnBsYXRmb3JtU2V0RGVmYXVsdEdhbWVwYWRQcm92aWRlcigpCit7Cisg
ICAgaWYgKEdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkuaXNNb2NrR2FtZXBhZFByb3ZpZGVy
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdhbWVwYWRQcm92aWRlcjo6c2V0U2hhcmVkUHJv
dmlkZXIoV1BFR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKSk7Cit9CisKK1dlYlBhZ2VQcm94
eSogVUlHYW1lcGFkUHJvdmlkZXI6OnBsYXRmb3JtV2ViUGFnZVByb3h5Rm9yR2FtZXBhZElucHV0
KCkKK3sKKyAgICByZXR1cm4gV0tXUEU6OlZpZXc6OnBsYXRmb3JtV2ViUGFnZVByb3h5Rm9yR2Ft
ZXBhZElucHV0KCk7Cit9CisKK3ZvaWQgVUlHYW1lcGFkUHJvdmlkZXI6OnBsYXRmb3JtU3RvcE1v
bml0b3JpbmdJbnB1dCgpCit7Cit9CisKK3ZvaWQgVUlHYW1lcGFkUHJvdmlkZXI6OnBsYXRmb3Jt
U3RhcnRNb25pdG9yaW5nSW5wdXQoKQoreworfQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQ
QUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZSBiL1NvdXJjZS9j
bWFrZS9PcHRpb25zV1BFLmNtYWtlCmluZGV4IGY1MWI3NWYxZjRkN2RmNzhkZDdhZWM2MzA3Mjhm
Nzg2NjhhOWU3YTMuLjIwMmQxMmM0OGM5MTU5NTU0YzU5NmIwM2I1ZjRjYzU3YjQ5YjJmNTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFr
ZS9PcHRpb25zV1BFLmNtYWtlCkBAIC01MSw2ICs1MSw3IEBAIFdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfUEFJTlRJTkdfQVBJIFBSSVZBVEUgJHtFTkFCTEVfRVhQ
RVJJCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX1RZUEVEX09N
IFBSSVZBVEUgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfREFS
S19NT0RFX0NTUyBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX0ZJTFRFUlNfTEVWRUxfMiBQUklWQVRFIE9OKQorV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX0dBTUVQQUQgUFJJVkFURSAke0VOQUJMRV9FWFBFUklNRU5UQUxf
RkVBVFVSRVN9KQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0dQVV9Q
Uk9DRVNTIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX0lOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZFTlRJT04gUFJJVkFURSBPTikKIFdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9MQVlFUl9CQVNFRF9TVkdfRU5HSU5FIFBS
SVZBVEUgT04pCkBAIC0yNDcsNyArMjQ4LDYgQEAgaWYgKEVOQUJMRV9XRUJYUikKICAgICBpZiAo
Tk9UIE9QRU5YUl9GT1VORCkKICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiT3BlblhSIGlz
IHJlcXVpcmVkIHRvIGVuYWJsZSBXZWJYUiBzdXBwb3J0LiIpCiAgICAgZW5kaWYgKCkKLSAgICBT
RVRfQU5EX0VYUE9TRV9UT19CVUlMRChFTkFCTEVfR0FNRVBBRCBPTikKICAgICBTRVRfQU5EX0VY
UE9TRV9UT19CVUlMRChVU0VfT1BFTlhSICR7T3BlblhSX0ZPVU5EfSkKICAgICBTRVRfQU5EX0VY
UE9TRV9UT19CVUlMRChYUl9VU0VfUExBVEZPUk1fRUdMIFRSVUUpCiAgICAgU0VUX0FORF9FWFBP
U0VfVE9fQlVJTEQoWFJfVVNFX0dSQVBISUNTX0FQSV9PUEVOR0wgVFJVRSkKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1ODFh
NTAyNzc3YjlhYmIwZDRlNjdiOWUxOTExYmU5MmRhMWM5NjUyLi5hNjIwNGNiMDcyZDQzMmE5MDU0
MGFlZjhiOWRkYTM1NWQ1NTFlY2U5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDUtMDQg
IFbDrWN0b3IgTWFudWVsIErDoXF1ZXogTGVhbCAgPHZqYXF1ZXpAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbV1BFXSBBZGQgZ2FtZXBhZCBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzA2MzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGVkIFdQRSBleHBlY3RhdGlvbnMgZm9yIGdhbWVw
YWQgQVBJLgorCisgICAgICAgICogcGxhdGZvcm0vd3BlL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIw
MjItMDUtMDQgIFppcmFuIFN1biAgPHpzdW5AaWdhbGlhLmNvbT4KIAogICAgICAgICBbSW5wdXRF
bGVtZW50XSBTZWxlY3Rpb24gYWZ0ZXIgdHlwZSBjaGFuZ2UgbmVlZHMgdG8gZm9sbG93IEhUTUwg
c3BlY2lmaWNhdGlvbgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd3BlL1Rlc3RF
eHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93cGUvVGVzdEV4cGVjdGF0aW9ucwpp
bmRleCA3YjdjOTFiODYyODAzYTIyYmQ1MWUxYzY1NGU2MGY4NzkwMTdkNzBjLi43NGI0MmU5MmM4
YWI4OGYxMDc4ZjU1MThmMTEyZmJlZTE1ZGU0NjE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS93cGUvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
cGUvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNjAzLDEwICs2MDMsNiBAQCB3ZWJraXQub3JnL2IvMjE3
MzY5IGZhc3QvY2FudmFzL2ZpbGwtdGV4dC13aXRoLWZvbnQtZmVhdHVyZXMuaHRtbCBbIEltYWdl
T25seUZhaQogCiB3ZWJraXQub3JnL2IvMjE3MzcwIGZhc3QvZXZlbnRzL3NldERyYWdJbWFnZS1l
bGVtZW50LW5vbi1udWxsYWJsZS5odG1sIFsgRmFpbHVyZSBdCiAKLSMgRU5BQkxFX0dBTUVQQUQg
bm90IGVuYWJsZWQuCi13ZWJraXQub3JnL2IvMjEzMTMxIGdhbWVwYWQgWyBTa2lwIF0KLXdlYmtp
dC5vcmcvYi8yMTMxMzEgaHR0cC90ZXN0cy9taXNjL2dhbWVwYWRzLWluc2VjdXJlLmh0bWwgWyBT
a2lwIF0KLQogIyBXZWJYUgogd2Via2l0Lm9yZy9iLzIyNTQ4MyBbIFJlbGVhc2UgXSBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL2V2ZW50c19pbnB1dF9zb3VyY2VfcmVjcmVh
dGlvbi5odHRwcy5odG1sIFsgUGFzcyBdCiB3ZWJraXQub3JnL2IvMjI1NDgzIFsgUmVsZWFzZSBd
IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIvZXZlbnRzX2lucHV0X3NvdXJj
ZXNfY2hhbmdlLmh0dHBzLmh0bWwgWyBQYXNzIF0KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0No
YW5nZUxvZwppbmRleCAyMGVlNjAyMGIyYWMyOWM1YWJiZmQ2MDNjNTUxM2Q0YmU1ZDBkOWQxLi41
OThkNjM4YTVjOGUwYTVjZjIwZGI1OGVlZDI5ZmNlNDU2NzY1NDljIDEwMDY0NAotLS0gYS9DaGFu
Z2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDUtMDQgIFbDrWN0
b3IgTWFudWVsIErDoXF1ZXogTGVhbCAgPHZqYXF1ZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBb
V1BFXSBBZGQgZ2FtZXBhZCBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzA2MzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBFbmFibGUgR2FtZXBhZCBBUEkgYXMgZXhwZXJpbWVudGFsIGZlYXR1
cmUuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZToKKwogMjAyMi0w
NS0wMiAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVXBk
YXRlIHlpamlhJ3MgaW5mbyBpbiBjb25zdHJpYnV0b3JzCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459107</attachid>
            <date>2022-05-10 04:22:33 -0700</date>
            <delta_ts>2022-05-13 21:17:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230630-20220510132232.patch</filename>
            <type>text/plain</type>
            <size>34020</size>
            <attacher name="Víctor M. Jáquez L.">vjaquez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjk0MDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmVjOWVmY2Q5ZWFjZjEw
ODM3MDFkOWEzMWMzNGIxM2NhMzk2YzE0NC4uNjNlMTI5ZjhmN2Q5YjZmNjc1ZWM1NTJmOGQ2ODM3
ODE5MDFmYzc5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDIyLTA1LTEwICBWw61j
dG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W1dQRV0gQWRkIGdhbWVwYWQgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEdhbXBlcGFkIEFQSSBmb3IgV1BFLgorCisgICAg
ICAgIE9yaWdpbmFsIHBhdGNoIGJ5IEV1Z2VuZSBNdXRhdmNoaSA8SWV2Z2VuX011dGF2Y2hpQGNv
bWNhc3QuY29tPi4KKworICAgICAgICBObyBuZXcgdGVzdHMuIENvbmZpcm1lZCBieSBleGlzdGlu
ZyB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3JtV1BFLmNtYWtlOgorICAgICAgICAqIFNvdXJj
ZXNXUEUudHh0OgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldQRUdhbWVwYWQ6OldQRUdhbWVwYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6V1BFR2FtZXBhZDo6fldQRUdhbWVwYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6V1BFR2FtZXBhZDo6YnV0dG9uUHJlc3NlZE9yUmVsZWFzZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6V1BFR2FtZXBhZDo6YWJzb2x1dGVBeGlzQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z2FtZXBhZC93cGUvV1BFR2FtZXBhZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1l
cGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldQRUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OldQRUdh
bWVwYWRQcm92aWRlcjo6V1BFR2FtZXBhZFByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldQ
RUdhbWVwYWRQcm92aWRlcjo6fldQRUdhbWVwYWRQcm92aWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXUEVHYW1lcGFkUHJvdmlkZXI6OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKToKKyAgICAgICAg
KFdlYkNvcmU6OldQRUdhbWVwYWRQcm92aWRlcjo6c3RvcE1vbml0b3JpbmdHYW1lcGFkcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXUEVHYW1lcGFkUHJvdmlkZXI6OmdhbWVwYWRDb25uZWN0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6V1BFR2FtZXBhZFByb3ZpZGVyOjpnYW1lcGFkRGlzY29ubmVjdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OldQRUdhbWVwYWRQcm92aWRlcjo6aW5kZXhGb3JOZXdseUNv
bm5lY3RlZERldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpXUEVHYW1lcGFkUHJvdmlkZXI6OnJl
bW92ZUdhbWVwYWRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpXUEVHYW1lcGFkUHJvdmlkZXI6
OmluaXRpYWxHYW1lcGFkc0Nvbm5lY3RlZFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
V1BFR2FtZXBhZFByb3ZpZGVyOjppbnB1dE5vdGlmaWNhdGlvblRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6V1BFR2FtZXBhZFByb3ZpZGVyOjpzY2hlZHVsZUlucHV0Tm90aWZpY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OldQRUdhbWVwYWRQcm92aWRlcjo6aW5wdXRWaWV3KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuaDogQWRkZWQu
CisKIDIwMjItMDUtMDkgIFJvYiBCdWlzICA8cmJ1aXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBD
aGVjayBpZiBub2RlIGlzIGNvbm5lY3RlZCBhZnRlciBjYWxsaW5nIG1lcmdlV2l0aE5laWdoYm9y
aW5nTGlzdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKaW5kZXggOTg4MzIyMGUzYzJlYTNjMTdjZTgxZTFlZGJlMTFjZDRhMGQy
NzE3ZC4uOGZiNWJhMWMwZmIyMWJhNWIxMWUyNWQ1YmRmNGZlMzcxNWRkYjA2ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzMCBAQAorMjAyMi0wNS0wNCAgVsOtY3RvciBNYW51ZWwgSsOhcXVleiBMZWFs
ICA8dmphcXVlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXUEVdIEFkZCBnYW1lcGFkIHN1cHBv
cnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDYz
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhhbmRs
ZSBhIHZlY3RvciBvZiBjcmVhdGVkIHZpZXdzIGluIG9yZGVyIHRvIHNlbGVjdCB0aGUgb25lIHdo
ZXJlIGdhbWVwYWRzIGFyZSBhY3RpdmUuCisKKyAgICAgICAgT3JpZ2luYWwgcGF0Y2ggYnkgRXVn
ZW5lIE11dGF2Y2hpIDxJZXZnZW5fTXV0YXZjaGlAY29tY2FzdC5jb20+CisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLgorCisgICAgICAgICogU291cmNlc1dQRS50eHQ6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS93cGUvV1BFVmlldy5jcHA6CisgICAgICAgIChXS1dQRTo6bV9iYWNrZW5kKToKKyAg
ICAgICAgKFdLV1BFOjpWaWV3Ojp+Vmlldyk6CisgICAgICAgIChXS1dQRTo6Vmlldzo6c2V0Vmll
d1N0YXRlKToKKyAgICAgICAgKFdLV1BFOjpWaWV3OjpwbGF0Zm9ybVdlYlBhZ2VQcm94eUZvckdh
bWVwYWRJbnB1dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9HYW1lcGFkL1VJR2FtZXBhZFByb3ZpZGVyLmNwcDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvR2FtZXBhZC93cGUvVUlHYW1lcGFkUHJvdmlkZXJXUEUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6VUlHYW1lcGFkUHJvdmlkZXI6OnBsYXRmb3JtU2V0RGVmYXVsdEdh
bWVwYWRQcm92aWRlcik6CisgICAgICAgIChXZWJLaXQ6OlVJR2FtZXBhZFByb3ZpZGVyOjpwbGF0
Zm9ybVdlYlBhZ2VQcm94eUZvckdhbWVwYWRJbnB1dCk6CisgICAgICAgIChXZWJLaXQ6OlVJR2Ft
ZXBhZFByb3ZpZGVyOjpwbGF0Zm9ybVN0b3BNb25pdG9yaW5nSW5wdXQpOgorICAgICAgICAoV2Vi
S2l0OjpVSUdhbWVwYWRQcm92aWRlcjo6cGxhdGZvcm1TdGFydE1vbml0b3JpbmdJbnB1dCk6CisK
IDIwMjItMDUtMDcgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAg
ICAgICAgW2lPU10gQWRqdXN0IHNvbWUgdmlld3BvcnQgYmVoYXZpb3JzIHdoZW4gbXVsdGl0YXNr
aW5nIG1vZGUgaXMgZW5hYmxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1X
UEUuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5jbWFrZQppbmRleCA5ZDAyMWEx
YTg4N2ZiMDY3NzliMDYzYjUyNWFjOTg1ZjhmNGJhMzdhLi5lNzVmMGJiNjcxM2JlNGEyZDBhOWI1
ZTAzMGZjMzBjYWJmZWNjMGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQ
RS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5jbWFrZQpAQCAtMTM5LDMg
KzEzOSw5IEBAIGlmIChVU0VfTElCR0JNKQogICAgICAgICAke0xJQkRSTV9MSUJSQVJJRVN9CiAg
ICAgKQogZW5kaWYgKCkKKworaWYgKEVOQUJMRV9HQU1FUEFEKQorICAgIGxpc3QoQVBQRU5EIFdl
YkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUworICAgICAgICBwbGF0Zm9ybS9nYW1lcGFk
L3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuaAorICAgICkKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUu
dHh0CmluZGV4IDNjNjRiZmQ5ZTJhNWVkNTZmZmQ2MWY2YzBlMWE0MmY3OGM5ZTcyNmIuLjg1ZWMw
MGZhYTBkYTI2ZTg2ODJiMjc1ZDAxY2JiM2QyNjQzMjZlMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNXUEUudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0
CkBAIC02MSw2ICs2MSw5IEBAIHBsYXRmb3JtL1VzZXJBZ2VudFF1aXJrcy5jcHAKIHBsYXRmb3Jt
L2Fkd2FpdGEvU2Nyb2xsYmFyVGhlbWVBZHdhaXRhLmNwcAogcGxhdGZvcm0vYWR3YWl0YS9UaGVt
ZUFkd2FpdGEuY3BwCiAKK3BsYXRmb3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWQuY3BwCitwbGF0
Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuY3BwCisKIHBsYXRmb3JtL2dlbmVy
aWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJHZW5lcmljLmNwcAogCiBwbGF0Zm9ybS9ncmFwaGljcy9B
TkdMRVdlYktpdEJyaWRnZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dhbWVwYWQvd3BlL1dQRUdhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2Ft
ZXBhZC93cGUvV1BFR2FtZXBhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDEyNDQ0ZTQzMThhZDgwZWYwNzA3
MDNkNTc1NzQ1NWIxYTNmMTYxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWQuY3BwCkBAIC0wLDAgKzEsODkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgUkRLIE1hbmFnZW1lbnQgIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldQRUdhbWVwYWQuaCIKKworI2lmIEVOQUJMRShHQU1FUEFE
KQorCisjaW5jbHVkZSAiV1BFR2FtZXBhZFByb3ZpZGVyLmgiCisjaW5jbHVkZSA8d3BlL3dwZS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dQRUdhbWVwYWQ6OldQRUdhbWVwYWQodW5zaWdu
ZWQgZ2FtZXBhZElkLCB1bnNpZ25lZCBpbmRleCkKKyAgICA6IFBsYXRmb3JtR2FtZXBhZChpbmRl
eCkKKyAgICAsIG1fYnV0dG9uVmFsdWVzKFdQRV9HQU1FUEFEX0JVVFRPTl9DT1VOVCwgU2hhcmVk
R2FtZXBhZFZhbHVlKDAuMCkpCisgICAgLCBtX2F4aXNWYWx1ZXMoV1BFX0dBTUVQQURfQVhJU19D
T1VOVCwgU2hhcmVkR2FtZXBhZFZhbHVlKDAuMCkpCisgICAgLCBtX2dhbWVwYWQod3BlX2dhbWVw
YWRfY3JlYXRlKGdhbWVwYWRJZCksIHdwZV9nYW1lcGFkX2Rlc3Ryb3kpCit7CisgICAgQVNTRVJU
KG1fZ2FtZXBhZCk7CisKKyAgICBtX2Nvbm5lY3RUaW1lID0gbV9sYXN0VXBkYXRlVGltZSA9IE1v
bm90b25pY1RpbWU6Om5vdygpOworCisgICAgbV9pZCA9IFN0cmluZzo6ZnJvbVVURjgod3BlX2dh
bWVwYWRfZ2V0X2lkKG1fZ2FtZXBhZC5nZXQoKSkpOworICAgIG1fbWFwcGluZyA9IFN0cmluZzo6
ZnJvbVVURjgoInN0YW5kYXJkIik7CisKKyAgICBzdGF0aWMgc3RydWN0IHdwZV9nYW1lcGFkX2Ns
aWVudF9pbnRlcmZhY2Ugc19jbGllbnQgPSB7CisgICAgICAgIC8vIGJ1dHRvbl9ldmVudAorICAg
ICAgICBbXSh2b2lkKiBkYXRhLCBlbnVtIHdwZV9nYW1lcGFkX2J1dHRvbiBidXR0b24sIGJvb2wg
cHJlc3NlZCkgeworICAgICAgICAgICAgYXV0byYgc2VsZiA9ICpzdGF0aWNfY2FzdDxXUEVHYW1l
cGFkKj4oZGF0YSk7CisgICAgICAgICAgICBzZWxmLmJ1dHRvblByZXNzZWRPclJlbGVhc2VkKHN0
YXRpY19jYXN0PGludD4oYnV0dG9uKSwgcHJlc3NlZCk7CisgICAgICAgIH0sCisgICAgICAgIC8v
IGF4aXNfZXZlbnQKKyAgICAgICAgW10odm9pZCogZGF0YSwgZW51bSB3cGVfZ2FtZXBhZF9heGlz
IGF4aXMsIGRvdWJsZSB2YWx1ZSkgeworICAgICAgICAgICAgYXV0byYgc2VsZiA9ICpzdGF0aWNf
Y2FzdDxXUEVHYW1lcGFkKj4oZGF0YSk7CisgICAgICAgICAgICBzZWxmLmFic29sdXRlQXhpc0No
YW5nZWQoc3RhdGljX2Nhc3Q8aW50PihheGlzKSwgdmFsdWUpOworICAgICAgICB9LAorICAgICAg
ICBudWxscHRyLCBudWxscHRyLCBudWxscHRyLAorICAgIH07CisgICAgd3BlX2dhbWVwYWRfc2V0
X2NsaWVudChtX2dhbWVwYWQuZ2V0KCksICZzX2NsaWVudCwgdGhpcyk7Cit9CisKK1dQRUdhbWVw
YWQ6On5XUEVHYW1lcGFkKCkKK3sKKyAgICB3cGVfZ2FtZXBhZF9zZXRfY2xpZW50KG1fZ2FtZXBh
ZC5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7Cit9CisKK3ZvaWQgV1BFR2FtZXBhZDo6YnV0dG9u
UHJlc3NlZE9yUmVsZWFzZWQoaW50IGJ1dHRvbiwgYm9vbCBwcmVzc2VkKQoreworICAgIG1fbGFz
dFVwZGF0ZVRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBtX2J1dHRvblZhbHVlc1ti
dXR0b25dLnNldFZhbHVlKHByZXNzZWQgPyAxLjAgOiAwLjApOworCisgICAgV1BFR2FtZXBhZFBy
b3ZpZGVyOjpzaW5nbGV0b24oKS5zY2hlZHVsZUlucHV0Tm90aWZpY2F0aW9uKCp0aGlzLCBwcmVz
c2VkID8gV1BFR2FtZXBhZFByb3ZpZGVyOjpTaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlOjpZZXMg
OiBXUEVHYW1lcGFkUHJvdmlkZXI6OlNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGU6Ok5vKTsKK30K
Kwordm9pZCBXUEVHYW1lcGFkOjphYnNvbHV0ZUF4aXNDaGFuZ2VkKGludCBheGlzLCBkb3VibGUg
dmFsdWUpCit7CisgICAgbV9sYXN0VXBkYXRlVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwor
ICAgIG1fYXhpc1ZhbHVlc1theGlzXS5zZXRWYWx1ZSh2YWx1ZSk7CisKKyAgICBXUEVHYW1lcGFk
UHJvdmlkZXI6OnNpbmdsZXRvbigpLnNjaGVkdWxlSW5wdXROb3RpZmljYXRpb24oKnRoaXMsIFdQ
RUdhbWVwYWRQcm92aWRlcjo6U2hvdWxkTWFrZUdhbWVwYWRzVmlzaWJsZTo6Tm8pOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvd3BlL1dQRUdhbWVwYWQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40YWJkNzg0ZDFmZWM3NWMyNTgxOTE1YWVhNjZjYjU4M2QwMjU3ODU4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC93cGUvV1BFR2FtZXBhZC5o
CkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgUkRLIE1hbmFnZW1l
bnQgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMu
TC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKworI2lu
Y2x1ZGUgIlBsYXRmb3JtR2FtZXBhZC5oIgorCitzdHJ1Y3Qgd3BlX2dhbWVwYWQ7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV1BFR2FtZXBhZCBmaW5hbCA6IHB1YmxpYyBQbGF0Zm9y
bUdhbWVwYWQgeworcHVibGljOgorICAgIFdQRUdhbWVwYWQodW5zaWduZWQsIHVuc2lnbmVkKTsK
KyAgICB2aXJ0dWFsIH5XUEVHYW1lcGFkKCk7CisKKyAgICBjb25zdCBWZWN0b3I8U2hhcmVkR2Ft
ZXBhZFZhbHVlPiYgYXhpc1ZhbHVlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYXhpc1ZhbHVl
czsgfQorICAgIGNvbnN0IFZlY3RvcjxTaGFyZWRHYW1lcGFkVmFsdWU+JiBidXR0b25WYWx1ZXMo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2J1dHRvblZhbHVlczsgfQorCisgICAgY29uc3Qgc3Ry
dWN0IHdwZV9nYW1lcGFkKiB3cGVHYW1lcGFkKCkgY29uc3QgeyByZXR1cm4gbV9nYW1lcGFkLmdl
dCgpOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBidXR0b25QcmVzc2VkT3JSZWxlYXNlZChpbnQs
IGJvb2wpOworICAgIHZvaWQgYWJzb2x1dGVBeGlzQ2hhbmdlZChpbnQsIGRvdWJsZSk7CisKKyAg
ICBWZWN0b3I8U2hhcmVkR2FtZXBhZFZhbHVlPiBtX2J1dHRvblZhbHVlczsKKyAgICBWZWN0b3I8
U2hhcmVkR2FtZXBhZFZhbHVlPiBtX2F4aXNWYWx1ZXM7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
c3RydWN0IHdwZV9nYW1lcGFkLCB2b2lkKCopKHN0cnVjdCB3cGVfZ2FtZXBhZCopPiBtX2dhbWVw
YWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FN
RVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvd3BlL1dQ
RUdhbWVwYWRQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL3dw
ZS9XUEVHYW1lcGFkUHJvdmlkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkM2M1MjFhZDkyNWQ4OGMyNjAz
OTc4MTE3NTM3ZmY0NDZiN2IxMmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuY3BwCkBAIC0wLDAgKzEsMjIy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFJESyBNYW5hZ2VtZW50ICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIyIElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXUEVHYW1lcGFkUHJvdmlkZXIuaCIKKwor
I2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSAiR2FtZXBhZFByb3ZpZGVyQ2xpZW50Lmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIldQRUdhbWVwYWQuaCIKKyNpbmNsdWRl
IDx3cGUvd3BlLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IFNlY29uZHMgY29ubmVjdGlvbkRlbGF5SW50ZXJ2
YWwgeyA1MDBfbXMgfTsKK3N0YXRpYyBjb25zdCBTZWNvbmRzIGlucHV0Tm90aWZpY2F0aW9uRGVs
YXkgeyA1MF9tcyB9OworCitXUEVHYW1lcGFkUHJvdmlkZXImIFdQRUdhbWVwYWRQcm92aWRlcjo6
c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V1BFR2FtZXBhZFByb3Zp
ZGVyPiBzaGFyZWRQcm92aWRlcjsKKyAgICByZXR1cm4gc2hhcmVkUHJvdmlkZXI7Cit9CisKK1dQ
RUdhbWVwYWRQcm92aWRlcjo6V1BFR2FtZXBhZFByb3ZpZGVyKCkKKyAgICA6IG1fcHJvdmlkZXIo
d3BlX2dhbWVwYWRfcHJvdmlkZXJfY3JlYXRlKCksIHdwZV9nYW1lcGFkX3Byb3ZpZGVyX2Rlc3Ry
b3kpCisgICAgLCBtX2luaXRpYWxHYW1lcGFkc0Nvbm5lY3RlZFRpbWVyKFJ1bkxvb3A6OmN1cnJl
bnQoKSwgdGhpcywgJldQRUdhbWVwYWRQcm92aWRlcjo6aW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVk
VGltZXJGaXJlZCkKKyAgICAsIG1faW5wdXROb3RpZmljYXRpb25UaW1lcihSdW5Mb29wOjpjdXJy
ZW50KCksIHRoaXMsICZXUEVHYW1lcGFkUHJvdmlkZXI6OmlucHV0Tm90aWZpY2F0aW9uVGltZXJG
aXJlZCkKK3sKKyAgICBzdGF0aWMgc3RydWN0IHdwZV9nYW1lcGFkX3Byb3ZpZGVyX2NsaWVudF9p
bnRlcmZhY2Ugc19jbGllbnQgPSB7CisgICAgICAgIC8vIGNvbm5lY3RlZAorICAgICAgICBbXSh2
b2lkKiBkYXRhLCB1bnNpZ25lZCBnYW1lcGFkSWQpIHsKKyAgICAgICAgICAgIGF1dG8mIHByb3Zp
ZGVyID0gKnN0YXRpY19jYXN0PFdQRUdhbWVwYWRQcm92aWRlcio+KGRhdGEpOworICAgICAgICAg
ICAgcHJvdmlkZXIuZ2FtZXBhZENvbm5lY3RlZChnYW1lcGFkSWQpOworICAgICAgICB9LAorICAg
ICAgICAvLyBkaXNjb25uZWN0ZWQKKyAgICAgICAgW10odm9pZCogZGF0YSwgdW5zaWduZWQgZ2Ft
ZXBhZElkKSB7CisgICAgICAgICAgICBhdXRvJiBwcm92aWRlciA9ICpzdGF0aWNfY2FzdDxXUEVH
YW1lcGFkUHJvdmlkZXIqPihkYXRhKTsKKyAgICAgICAgICAgIHByb3ZpZGVyLmdhbWVwYWREaXNj
b25uZWN0ZWQoZ2FtZXBhZElkKTsKKyAgICAgICAgfSwKKyAgICAgICAgbnVsbHB0ciwgbnVsbHB0
ciwgbnVsbHB0ciwKKyAgICB9OworCisgICAgd3BlX2dhbWVwYWRfcHJvdmlkZXJfc2V0X2NsaWVu
dChtX3Byb3ZpZGVyLmdldCgpLCAmc19jbGllbnQsIHRoaXMpOworfQorCitXUEVHYW1lcGFkUHJv
dmlkZXI6On5XUEVHYW1lcGFkUHJvdmlkZXIoKQoreworICAgIHdwZV9nYW1lcGFkX3Byb3ZpZGVy
X3NldF9jbGllbnQobV9wcm92aWRlci5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7Cit9CisKK3Zv
aWQgV1BFR2FtZXBhZFByb3ZpZGVyOjpzdGFydE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJv
dmlkZXJDbGllbnQmIGNsaWVudCkKK3sKKyAgICBpZiAoIW1fcHJvdmlkZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIGJvb2wgc2hvdWxkT3BlbkFuZFNjaGVkdWxlTWFuYWdlciA9IG1fY2xpZW50
cy5pc0VtcHR5KCk7CisKKyAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7
CisgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKKworICAgIGlmICghc2hvdWxkT3BlbkFuZFNj
aGVkdWxlTWFuYWdlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fZ2FtZXBhZFZl
Y3Rvci5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2dhbWVwYWRNYXAuaXNFbXB0eSgpKTsKKwor
ICAgIG1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkID0gZmFsc2U7CisKKyAgICAvLyBBbnkgY29u
bmVjdGlvbnMgd2UgYXJlIG5vdGlmaWVkIG9mIHdpdGhpbiB0aGUgY29ubmVjdGlvbkRlbGF5SW50
ZXJ2YWwgb2YgbGlzdGVuaW5nIGxpa2VseSByZXByZXNlbnQKKyAgICAvLyBkZXZpY2VzIHRoYXQg
d2VyZSBhbHJlYWR5IGNvbm5lY3RlZCwgc28gd2Ugc3VwcHJlc3Mgbm90aWZ5aW5nIGNsaWVudHMg
b2YgdGhlc2UuCisgICAgbV9pbml0aWFsR2FtZXBhZHNDb25uZWN0ZWRUaW1lci5zdGFydE9uZVNo
b3QoY29ubmVjdGlvbkRlbGF5SW50ZXJ2YWwpOworCisgICAgd3BlX2dhbWVwYWRfcHJvdmlkZXJf
c3RhcnQobV9wcm92aWRlci5nZXQoKSk7Cit9CisKK3ZvaWQgV1BFR2FtZXBhZFByb3ZpZGVyOjpz
dG9wTW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCYgY2xpZW50KQorewor
ICAgIGlmICghbV9wcm92aWRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fY2xp
ZW50cy5jb250YWlucygmY2xpZW50KSk7CisKKyAgICBib29sIHNob3VsZENsb3NlQW5kVW5zY2hl
ZHVsZU1hbmFnZXIgPSBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpICYmIG1fY2xpZW50cy5pc0Vt
cHR5KCk7CisgICAgaWYgKCFzaG91bGRDbG9zZUFuZFVuc2NoZWR1bGVNYW5hZ2VyKQorICAgICAg
ICByZXR1cm47CisKKyAgICB3cGVfZ2FtZXBhZF9wcm92aWRlcl9zdG9wKG1fcHJvdmlkZXIuZ2V0
KCkpOworCisgICAgbV9nYW1lcGFkVmVjdG9yLmNsZWFyKCk7CisgICAgbV9nYW1lcGFkTWFwLmNs
ZWFyKCk7CisgICAgbV9pbml0aWFsR2FtZXBhZHNDb25uZWN0ZWRUaW1lci5zdG9wKCk7CisgICAg
bV9sYXN0QWN0aXZlR2FtZXBhZCA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV1BFR2FtZXBhZFByb3Zp
ZGVyOjpnYW1lcGFkQ29ubmVjdGVkKHVuc2lnbmVkIGlkKQoreworICAgIEFTU0VSVCghbV9nYW1l
cGFkTWFwLmdldChpZCkpOworICAgIEFTU0VSVChtX3Byb3ZpZGVyKTsKKworICAgIExPRyhHYW1l
cGFkLCAiV1BFR2FtZXBhZFByb3ZpZGVyIGRldmljZSAldSBhZGRlZCIsIGlkKTsKKworICAgIHVu
c2lnbmVkIGluZGV4ID0gaW5kZXhGb3JOZXdseUNvbm5lY3RlZERldmljZSgpOworICAgIGF1dG8g
Z2FtZXBhZCA9IG1ha2VVbmlxdWU8V1BFR2FtZXBhZD4oaWQsIGluZGV4KTsKKworICAgIGlmICht
X2dhbWVwYWRWZWN0b3Iuc2l6ZSgpIDw9IGluZGV4KQorICAgICAgICBtX2dhbWVwYWRWZWN0b3Iu
Z3JvdyhpbmRleCArIDEpOworCisgICAgbV9nYW1lcGFkVmVjdG9yW2luZGV4XSA9IGdhbWVwYWQu
Z2V0KCk7CisgICAgbV9nYW1lcGFkTWFwLnNldChpZCwgV1RGTW92ZShnYW1lcGFkKSk7CisKKyAg
ICBpZiAoIW1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkKSB7CisgICAgICAgIC8vIFRoaXMgYWRk
ZWQgZGV2aWNlIGlzIHRoZSByZXN1bHQgb2YgdXMgc3RhcnRpbmcgdG8gbW9uaXRvciBnYW1lcGFk
cy4KKyAgICAgICAgLy8gV2UnbGwgZ2V0IG5vdGlmaWVkIG9mIGFsbCBjb25uZWN0ZWQgZGV2aWNl
cyBkdXJpbmcgdGhpcyBjdXJyZW50IHNwaW4gb2YgdGhlIHJ1bmxvb3AKKyAgICAgICAgLy8gYW5k
IHRoZSBjbGllbnQgc2hvdWxkIGJlIHRvbGQgdGhleSB3ZXJlIGFscmVhZHkgY29ubmVjdGVkLgor
ICAgICAgICAvLyBUaGUgbV9jb25uZWN0aW9uRGVsYXlUaW1lciBmaXJlcyBpbiBhIHN1YnNlcXVl
bnQgc3BpbiBvZiB0aGUgcnVubG9vcCBhZnRlciB3aGljaAorICAgICAgICAvLyBhbnkgY29ubmVj
dGlvbiBldmVudHMgYXJlIGFjdHVhbCBuZXcgZGV2aWNlcyBhbmQgY2FuIHRyaWdnZXIgZ2FtZXBh
ZCB2aXNpYmlsaXR5LgorICAgICAgICBpZiAoIW1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGlt
ZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIG1faW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGlt
ZXIuc3RhcnRPbmVTaG90KDBfcyk7CisgICAgfQorCisgICAgYXV0byBldmVudFZpc2liaWxpdHkg
PSBtX2luaXRpYWxHYW1lcGFkc0Nvbm5lY3RlZCA/IEV2ZW50TWFrZXNHYW1lcGFkc1Zpc2libGU6
OlllcyA6IEV2ZW50TWFrZXNHYW1lcGFkc1Zpc2libGU6Ok5vOworICAgIGZvciAoYXV0byYgY2xp
ZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPnBsYXRmb3JtR2FtZXBhZENvbm5lY3Rl
ZCgqbV9nYW1lcGFkVmVjdG9yW2luZGV4XSwgZXZlbnRWaXNpYmlsaXR5KTsKK30KKwordm9pZCBX
UEVHYW1lcGFkUHJvdmlkZXI6OmdhbWVwYWREaXNjb25uZWN0ZWQodW5zaWduZWQgaWQpCit7Cisg
ICAgTE9HKEdhbWVwYWQsICJXUEVHYW1lcGFkUHJvdmlkZXIgZGV2aWNlICV1IHJlbW92ZWQiLCBp
ZCk7CisKKyAgICBhdXRvIHJlbW92ZWRHYW1lcGFkID0gcmVtb3ZlR2FtZXBhZEZvcklkKGlkKTsK
KyAgICBBU1NFUlQocmVtb3ZlZEdhbWVwYWQpOworCisgICAgaWYgKHJlbW92ZWRHYW1lcGFkLT53
cGVHYW1lcGFkKCkgPT0gbV9sYXN0QWN0aXZlR2FtZXBhZCkKKyAgICAgICAgbV9sYXN0QWN0aXZl
R2FtZXBhZCA9IG51bGxwdHI7CisKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1fY2xpZW50cykK
KyAgICAgICAgY2xpZW50LT5wbGF0Zm9ybUdhbWVwYWREaXNjb25uZWN0ZWQoKnJlbW92ZWRHYW1l
cGFkKTsKK30KKwordW5zaWduZWQgV1BFR2FtZXBhZFByb3ZpZGVyOjppbmRleEZvck5ld2x5Q29u
bmVjdGVkRGV2aWNlKCkKK3sKKyAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgd2hpbGUgKGlu
ZGV4IDwgbV9nYW1lcGFkVmVjdG9yLnNpemUoKSAmJiBtX2dhbWVwYWRWZWN0b3JbaW5kZXhdKQor
ICAgICAgICArK2luZGV4OworCisgICAgcmV0dXJuIGluZGV4OworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8V1BFR2FtZXBhZD4gV1BFR2FtZXBhZFByb3ZpZGVyOjpyZW1vdmVHYW1lcGFkRm9ySWQodW5z
aWduZWQgaWQpCit7CisgICAgYXV0byByZW1vdmVkR2FtZXBhZCA9IG1fZ2FtZXBhZE1hcC50YWtl
KGlkKTsKKyAgICBBU1NFUlQocmVtb3ZlZEdhbWVwYWQpOworCisgICAgYXV0byBpbmRleCA9IG1f
Z2FtZXBhZFZlY3Rvci5maW5kKHJlbW92ZWRHYW1lcGFkLmdldCgpKTsKKyAgICBpZiAoaW5kZXgg
IT0gbm90Rm91bmQpCisgICAgICAgIG1fZ2FtZXBhZFZlY3RvcltpbmRleF0gPSBudWxscHRyOwor
CisgICAgcmV0dXJuIHJlbW92ZWRHYW1lcGFkOworfQorCit2b2lkIFdQRUdhbWVwYWRQcm92aWRl
cjo6aW5pdGlhbEdhbWVwYWRzQ29ubmVjdGVkVGltZXJGaXJlZCgpCit7CisgICAgbV9pbml0aWFs
R2FtZXBhZHNDb25uZWN0ZWQgPSB0cnVlOworfQorCit2b2lkIFdQRUdhbWVwYWRQcm92aWRlcjo6
aW5wdXROb3RpZmljYXRpb25UaW1lckZpcmVkKCkKK3sKKyAgICBpZiAoIW1faW5pdGlhbEdhbWVw
YWRzQ29ubmVjdGVkKSB7CisgICAgICAgIGlmICghbV9pbnB1dE5vdGlmaWNhdGlvblRpbWVyLmlz
QWN0aXZlKCkpCisgICAgICAgICAgICBtX2lucHV0Tm90aWZpY2F0aW9uVGltZXIuc3RhcnRPbmVT
aG90KDBfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkaXNwYXRjaFBsYXRmb3Jt
R2FtZXBhZElucHV0QWN0aXZpdHkoKTsKK30KKwordm9pZCBXUEVHYW1lcGFkUHJvdmlkZXI6OnNj
aGVkdWxlSW5wdXROb3RpZmljYXRpb24oV1BFR2FtZXBhZCYgZ2FtZXBhZCwgU2hvdWxkTWFrZUdh
bWVwYWRzVmlzaWJsZSBzaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlKQoreworICAgIG1fbGFzdEFj
dGl2ZUdhbWVwYWQgPSBjb25zdF9jYXN0PHN0cnVjdCB3cGVfZ2FtZXBhZCo+KGdhbWVwYWQud3Bl
R2FtZXBhZCgpKTsKKworICAgIGlmICghbV9pbnB1dE5vdGlmaWNhdGlvblRpbWVyLmlzQWN0aXZl
KCkpCisgICAgICAgIG1faW5wdXROb3RpZmljYXRpb25UaW1lci5zdGFydE9uZVNob3QoaW5wdXRO
b3RpZmljYXRpb25EZWxheSk7CisKKyAgICBpZiAoc2hvdWxkTWFrZUdhbWVwYWRzVmlzaWJsZSA9
PSBTaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlOjpZZXMpCisgICAgICAgIHNldFNob3VsZE1ha2VH
YW1lcGFkc1Zpc2liaWxlKCk7Cit9CisKK3N0cnVjdCB3cGVfdmlld19iYWNrZW5kKiBXUEVHYW1l
cGFkUHJvdmlkZXI6OmlucHV0VmlldygpCit7CisgICAgaWYgKCFtX3Byb3ZpZGVyIHx8ICFtX2xh
c3RBY3RpdmVHYW1lcGFkKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gd3Bl
X2dhbWVwYWRfcHJvdmlkZXJfZ2V0X3ZpZXdfYmFja2VuZChtX3Byb3ZpZGVyLmdldCgpLCBtX2xh
c3RBY3RpdmVHYW1lcGFkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
YW1lcGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dhbWVwYWQvd3BlL1dQRUdhbWVwYWRQcm92aWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyYzQ2ZGE2MTE2
NTU2NjNhZDY0N2JjNDQ4ZTM3MGMwNjFkOGJjYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL3dwZS9XUEVHYW1lcGFkUHJvdmlkZXIuaApAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFJESyBNYW5hZ2VtZW50ICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIyIElnYWxpYSBTLkwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlICJH
YW1lcGFkUHJvdmlkZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9SdW5Mb29wLmg+CisKK3N0cnVjdCB3cGVfZ2FtZXBhZF9wcm92aWRlcjsKK3N0cnVjdCB3cGVf
dmlld19iYWNrZW5kOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdQRUdhbWVwYWQ7
CisKK2NsYXNzIFdQRUdhbWVwYWRQcm92aWRlciBmaW5hbCA6IHB1YmxpYyBHYW1lcGFkUHJvdmlk
ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdQRUdhbWVwYWRQcm92aWRlcik7CisgICAg
ZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFdQRUdhbWVwYWRQcm92aWRlcj47CisKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgV1BFR2FtZXBhZFByb3ZpZGVyJiBzaW5nbGV0b24oKTsKKworICAgIHZp
cnR1YWwgfldQRUdhbWVwYWRQcm92aWRlcigpOworCisgICAgdm9pZCBzdGFydE1vbml0b3JpbmdH
YW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJDbGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BNb25p
dG9yaW5nR2FtZXBhZHMoR2FtZXBhZFByb3ZpZGVyQ2xpZW50JikgZmluYWw7CisgICAgY29uc3Qg
VmVjdG9yPFBsYXRmb3JtR2FtZXBhZCo+JiBwbGF0Zm9ybUdhbWVwYWRzKCkgZmluYWwgeyByZXR1
cm4gbV9nYW1lcGFkVmVjdG9yOyB9CisKKyAgICBlbnVtIGNsYXNzIFNob3VsZE1ha2VHYW1lcGFk
c1Zpc2libGUgOiBib29sIHsgTm8sCisgICAgICAgIFllcyB9OworICAgIHZvaWQgc2NoZWR1bGVJ
bnB1dE5vdGlmaWNhdGlvbihXUEVHYW1lcGFkJiwgU2hvdWxkTWFrZUdhbWVwYWRzVmlzaWJsZSk7
CisKKyAgICBzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogaW5wdXRWaWV3KCk7CisKK3ByaXZhdGU6
CisgICAgV1BFR2FtZXBhZFByb3ZpZGVyKCk7CisKKyAgICB2b2lkIGdhbWVwYWRDb25uZWN0ZWQo
dW5zaWduZWQpOworICAgIHZvaWQgZ2FtZXBhZERpc2Nvbm5lY3RlZCh1bnNpZ25lZCk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFdQRUdhbWVwYWQ+IHJlbW92ZUdhbWVwYWRGb3JJZCh1bnNpZ25lZCk7
CisKKyAgICB1bnNpZ25lZCBpbmRleEZvck5ld2x5Q29ubmVjdGVkRGV2aWNlKCk7CisgICAgdm9p
ZCBpbml0aWFsR2FtZXBhZHNDb25uZWN0ZWRUaW1lckZpcmVkKCk7CisgICAgdm9pZCBpbnB1dE5v
dGlmaWNhdGlvblRpbWVyRmlyZWQoKTsKKworICAgIFZlY3RvcjxQbGF0Zm9ybUdhbWVwYWQqPiBt
X2dhbWVwYWRWZWN0b3I7CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPFdQ
RUdhbWVwYWQ+PiBtX2dhbWVwYWRNYXA7CisgICAgYm9vbCBtX2luaXRpYWxHYW1lcGFkc0Nvbm5l
Y3RlZCB7IGZhbHNlIH07CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RydWN0IHdwZV9nYW1lcGFk
X3Byb3ZpZGVyLCB2b2lkICgqKShzdHJ1Y3Qgd3BlX2dhbWVwYWRfcHJvdmlkZXIqKT4gbV9wcm92
aWRlcjsKKyAgICBzdHJ1Y3Qgd3BlX2dhbWVwYWQqIG1fbGFzdEFjdGl2ZUdhbWVwYWQgeyBudWxs
cHRyIH07CisKKyAgICBSdW5Mb29wOjpUaW1lcjxXUEVHYW1lcGFkUHJvdmlkZXI+IG1faW5pdGlh
bEdhbWVwYWRzQ29ubmVjdGVkVGltZXI7CisgICAgUnVuTG9vcDo6VGltZXI8V1BFR2FtZXBhZFBy
b3ZpZGVyPiBtX2lucHV0Tm90aWZpY2F0aW9uVGltZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU291cmNlc1dQRS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CmluZGV4
IGFlMjE4MTA4OGY4MjIxNTk0YzlhMmI0ZmJlNWQ5OWYyYjY5MzZkNjcuLjcxNWMwMjk4ZDYzZGU3
YTAyY2FiNmE4YTFlYWU2ODc0OGVkMDdjZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291
cmNlc1dQRS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dApAQCAtMjAxLDYg
KzIwMSw4IEBAIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL2xpYndwZS9XZWJBdXRvbWF0aW9uU2Vzc2lv
bkxpYldQRS5jcHAKIAogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFQ
cm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCiAKK1VJUHJvY2Vzcy9HYW1lcGFkL3dwZS9VSUdh
bWVwYWRQcm92aWRlcldQRS5jcHAKKwogVUlQcm9jZXNzL2dlb2NsdWUvR2VvY2x1ZUdlb2xvY2F0
aW9uUHJvdmlkZXIuY3BwCiAKIFVJUHJvY2Vzcy9nbGliL1dlYlBhZ2VQcm94eUdMaWIuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcAppbmRleCA1MTY0NTli
MzE0MDljNzA2MWU1NDZmZGQwMmI5OGVkZTM0YmE2ZjNkLi5lNGIyMDdhOTVhYmJlYjQ2YmU5M2Y4
YjE3ZmE0ZDk0YWI1NzdjOTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvd3BlL1dQRVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUv
V1BFVmlldy5jcHAKQEAgLTM5LDEyICszOSwyMiBAQAogI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5o
IgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db21wb3Np
dGlvblVuZGVybGluZS5oPgorI2lmIEVOQUJMRShHQU1FUEFEKQorI2luY2x1ZGUgPFdlYkNvcmUv
V1BFR2FtZXBhZFByb3ZpZGVyLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3cGUvd3BlLmg+CisjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAK
IG5hbWVzcGFjZSBXS1dQRSB7CiAKK3N0YXRpYyBWZWN0b3I8Vmlldyo+JiB2aWV3c1ZlY3Rvcigp
Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZlY3RvcjxWaWV3Kj4+IHZlY3RvcjsKKyAg
ICByZXR1cm4gdmVjdG9yOworfQorCiBWaWV3OjpWaWV3KHN0cnVjdCB3cGVfdmlld19iYWNrZW5k
KiBiYWNrZW5kLCBjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0aW9uJiBiYXNlQ29uZmlndXJhdGlv
bikKICAgICA6IG1fY2xpZW50KG1ha2VVbmlxdWU8QVBJOjpWaWV3Q2xpZW50PigpKQogICAgICwg
bV90b3VjaEdlc3R1cmVDb250cm9sbGVyKG1ha2VVbmlxdWU8VG91Y2hHZXN0dXJlQ29udHJvbGxl
cj4oKSkKQEAgLTI5MywxMCArMzAzLDEzIEBAIFZpZXc6OlZpZXcoc3RydWN0IHdwZV92aWV3X2Jh
Y2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mIGJhc2VDCiAgICAg
d3BlX3ZpZXdfYmFja2VuZF9pbml0aWFsaXplKG1fYmFja2VuZCk7CiAKICAgICBtX3BhZ2VQcm94
eS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKKworICAgIHZpZXdzVmVjdG9yKCkuYXBwZW5kKHRoaXMp
OwogfQogCiBWaWV3Ojp+VmlldygpCiB7CisgICAgdmlld3NWZWN0b3IoKS5yZW1vdmVBbGwodGhp
cyk7CiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpCiAgICAgaWYgKG1fYWNjZXNzaWJsZSkKICAg
ICAgICAgd2Via2l0V2ViVmlld0FjY2Vzc2libGVTZXRXZWJWaWV3KG1fYWNjZXNzaWJsZS5nZXQo
KSwgbnVsbHB0cik7CkBAIC0zODIsNiArMzk1LDEzIEBAIHZvaWQgVmlldzo6c2V0Vmlld1N0YXRl
KE9wdGlvblNldDxXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpGbGFnPiBmbGFncykKIAogICAgIGlm
IChjaGFuZ2VkRmxhZ3MpCiAgICAgICAgIG1fcGFnZVByb3h5LT5hY3Rpdml0eVN0YXRlRGlkQ2hh
bmdlKGNoYW5nZWRGbGFncyk7CisKKyAgICBpZiAoIXZpZXdzVmVjdG9yKCkuaXNFbXB0eSgpICYm
IHZpZXdTdGF0ZSgpLmNvbnRhaW5zKFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzVmlzaWJsZSkp
IHsKKyAgICAgICAgaWYgKHZpZXdzVmVjdG9yKCkuZmlyc3QoKSAhPSB0aGlzKSB7CisgICAgICAg
ICAgICB2aWV3c1ZlY3RvcigpLnJlbW92ZUFsbCh0aGlzKTsKKyAgICAgICAgICAgIHZpZXdzVmVj
dG9yKCkuaW5zZXJ0KDAsIHRoaXMpOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIFZpZXc6
OmhhbmRsZUtleWJvYXJkRXZlbnQoc3RydWN0IHdwZV9pbnB1dF9rZXlib2FyZF9ldmVudCogZXZl
bnQpCkBAIC00MjksNCArNDQ5LDM1IEBAIFdlYktpdFdlYlZpZXdBY2Nlc3NpYmxlKiBWaWV3Ojph
Y2Nlc3NpYmxlKCkgY29uc3QKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKEdBTUVQQUQpCitXZWJL
aXQ6OldlYlBhZ2VQcm94eSogVmlldzo6cGxhdGZvcm1XZWJQYWdlUHJveHlGb3JHYW1lcGFkSW5w
dXQoKQoreworICAgIGNvbnN0IGF1dG8mIHZpZXdzID0gdmlld3NWZWN0b3IoKTsKKyAgICBpZiAo
dmlld3MuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHN0cnVjdCB3
cGVfdmlld19iYWNrZW5kKiB2aWV3QmFja2VuZCA9IFdlYkNvcmU6OldQRUdhbWVwYWRQcm92aWRl
cjo6c2luZ2xldG9uKCkuaW5wdXRWaWV3KCk7CisKKyAgICBzaXplX3QgaW5kZXggPSBub3RGb3Vu
ZDsKKworICAgIGlmICh2aWV3QmFja2VuZCkgeworICAgICAgICBpbmRleCA9IHZpZXdzLmZpbmRJ
ZihbJl0oVmlldyogdmlldykgeworICAgICAgICAgICAgcmV0dXJuIHZpZXctPmJhY2tlbmQoKSA9
PSB2aWV3QmFja2VuZAorICAgICAgICAgICAgICAgICYmIHZpZXctPnZpZXdTdGF0ZSgpLmNvbnRh
aW5zKFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzVmlzaWJsZSkKKyAgICAgICAgICAgICAgICAm
JiB2aWV3LT52aWV3U3RhdGUoKS5jb250YWlucyhXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc0Zv
Y3VzZWQpOworICAgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbmRleCA9IHZpZXdz
LmZpbmRJZihbXShWaWV3KiB2aWV3KSB7CisgICAgICAgICAgICByZXR1cm4gdmlldy0+dmlld1N0
YXRlKCkuY29udGFpbnMoV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6SXNWaXNpYmxlKQorICAgICAg
ICAgICAgICAgICYmIHZpZXctPnZpZXdTdGF0ZSgpLmNvbnRhaW5zKFdlYkNvcmU6OkFjdGl2aXR5
U3RhdGU6OklzRm9jdXNlZCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIGlmIChpbmRleCAh
PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuICYodmlld3NbaW5kZXhdLT5wYWdlKCkpOworCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV0tXUEUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmgKaW5kZXggYWEwZTAzMDYyOWQ1
NjI3MTIxOWFhMTczODMxM2M1YmU4YWVmYzJjMC4uZWU2OWRiMmE1NTJmNzQwZmVlMTk5OGZkZTJl
ODE2M2YyNDc2MzRlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dw
ZS9XUEVWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3
LmgKQEAgLTEwOCw2ICsxMDgsOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIFdlYktpdDo6VG91
Y2hHZXN0dXJlQ29udHJvbGxlciYgdG91Y2hHZXN0dXJlQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0
dXJuICptX3RvdWNoR2VzdHVyZUNvbnRyb2xsZXI7IH0KKyNpZiBFTkFCTEUoR0FNRVBBRCkKKyAg
ICBzdGF0aWMgV2ViS2l0OjpXZWJQYWdlUHJveHkqIHBsYXRmb3JtV2ViUGFnZVByb3h5Rm9yR2Ft
ZXBhZElucHV0KCk7CisjZW5kaWYKIAogcHJpdmF0ZToKICAgICBWaWV3KHN0cnVjdCB3cGVfdmll
d19iYWNrZW5kKiwgY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvR2FtZXBhZC9VSUdhbWVwYWRQcm92aWRlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL1VJR2FtZXBhZFByb3ZpZGVyLmNwcAppbmRl
eCA5N2Q3YzQyZDc5YzVlYjM3ZDc2MWRjZjcxNmE3MjhmYWY2NGMyM2JhLi4wMTFjNzI3OWVmOGU1
NzU0ZjYxMGJlN2QzNTBlYzhmMzhmM2E4N2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9HYW1lcGFkL1VJR2FtZXBhZFByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9HYW1lcGFkL1VJR2FtZXBhZFByb3ZpZGVyLmNwcApAQCAtMTk5LDcgKzE5OSw3
IEBAIFZlY3RvcjxHYW1lcGFkRGF0YT4gVUlHYW1lcGFkUHJvdmlkZXI6OnNuYXBzaG90R2FtZXBh
ZHMoKQogICAgIH0pOwogfQogCi0jaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhKFVTRShNQU5FVFRF
KSAmJiBPUyhMSU5VWCkpCisjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhKFVTRShNQU5FVFRFKSAm
JiBPUyhMSU5VWCkpICYmICFQTEFURk9STShXUEUpCiAKIHZvaWQgVUlHYW1lcGFkUHJvdmlkZXI6
OnBsYXRmb3JtU2V0RGVmYXVsdEdhbWVwYWRQcm92aWRlcigpCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL3dwZS9VSUdhbWVwYWRQcm92aWRlcldQRS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL3dwZS9VSUdhbWVwYWRQcm92aWRlcldQ
RS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzc3NDJmNDQ2N2Y0MjIzNzkxYzM2OGZhNGY5MDk0MmVkZTRkMTI4
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0dhbWVwYWQvd3Bl
L1VJR2FtZXBhZFByb3ZpZGVyV1BFLmNwcApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVSUdhbWVwYWRQcm92aWRlci5oIgorCisj
aWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlICJXUEVWaWV3LmgiCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL1dQRUdhbWVwYWRQcm92aWRlci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgVUlHYW1lcGFkUHJvdmlkZXI6OnBsYXRmb3Jt
U2V0RGVmYXVsdEdhbWVwYWRQcm92aWRlcigpCit7CisgICAgaWYgKEdhbWVwYWRQcm92aWRlcjo6
c2luZ2xldG9uKCkuaXNNb2NrR2FtZXBhZFByb3ZpZGVyKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEdhbWVwYWRQcm92aWRlcjo6c2V0U2hhcmVkUHJvdmlkZXIoV1BFR2FtZXBhZFByb3ZpZGVy
OjpzaW5nbGV0b24oKSk7Cit9CisKK1dlYlBhZ2VQcm94eSogVUlHYW1lcGFkUHJvdmlkZXI6OnBs
YXRmb3JtV2ViUGFnZVByb3h5Rm9yR2FtZXBhZElucHV0KCkKK3sKKyAgICByZXR1cm4gV0tXUEU6
OlZpZXc6OnBsYXRmb3JtV2ViUGFnZVByb3h5Rm9yR2FtZXBhZElucHV0KCk7Cit9CisKK3ZvaWQg
VUlHYW1lcGFkUHJvdmlkZXI6OnBsYXRmb3JtU3RvcE1vbml0b3JpbmdJbnB1dCgpCit7Cit9CisK
K3ZvaWQgVUlHYW1lcGFkUHJvdmlkZXI6OnBsYXRmb3JtU3RhcnRNb25pdG9yaW5nSW5wdXQoKQor
eworfQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
Y21ha2UvT3B0aW9uc1dQRS5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCmlu
ZGV4IGY1MWI3NWYxZjRkN2RmNzhkZDdhZWM2MzA3MjhmNzg2NjhhOWU3YTMuLjk5MjVjNGZkODY0
ZjU1ZTVkYzIxYzNhMjBjODY4ZTRhZjQyN2UxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9P
cHRpb25zV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCkBAIC03
MSw3ICs3MSwxMSBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0hB
UkVBQkxFX1JFU09VUkNFIFBSSVZBVEUgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfVEhVTkRFUiBQUklWQVRFICR7RU5BQkxFX0RFVkVMT1BFUl9NT0RFfSkKIFdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9UT1VDSF9FVkVOVFMgUFJJVkFU
RSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJfUlRDIFBS
SVZBVEUgJHtFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTfSkKLVdFQktJVF9PUFRJT05fREVG
QVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJYUiBQUklWQVRFICR7RU5BQkxFX0VYUEVSSU1FTlRB
TF9GRUFUVVJFU30pCisKK2lmICgke0VOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVN9IEFORCAi
JHtXUEVfVkVSU0lPTn0iIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAiMS4xMy4wIikKKyAgICBXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfR0FNRVBBRCBQVUJMSUMgT04pCisg
ICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQlhSIFBSSVZBVEUg
T04pCitlbmRpZiAoKQogCiAjIFB1YmxpYyBvcHRpb25zIHNwZWNpZmljIHRvIHRoZSBXUEUgcG9y
dC4gRG8gbm90IGFkZCBhbnkgb3B0aW9ucyBoZXJlIHVubGVzcwogIyB0aGVyZSBpcyBhIHN0cm9u
ZyByZWFzb24gd2Ugc2hvdWxkIHN1cHBvcnQgY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBvcHRp
b24sCkBAIC0xOTAsNiArMTk0LDEwIEBAIGlmIChFTkFCTEVfQUNDRVNTSUJJTElUWSkKICAgICBl
bmRpZiAoKQogZW5kaWYgKCkKIAoraWYgKEVOQUJMRV9HQU1FUEFEIEFORCAoTk9UICgiJHtXUEVf
VkVSU0lPTn0iIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAiMS4xMy4wIikpKQorICAgIG1lc3NhZ2Uo
RkFUQUxfRVJST1IgImxpYndwZT49MS4xMyBpcyByZXF1aXJlZCBmb3IgRU5BQkxFX0dBTUVQQUQi
KQorZW5kaWYgKCkKKwogaWYgKFVTRV9KUEVHWEwpCiAgICAgZmluZF9wYWNrYWdlKEpQRUdYTCkK
ICAgICBpZiAoTk9UIEpQRUdYTF9GT1VORCkKQEAgLTI0MywxMSArMjUxLDEzIEBAIGVuZGlmICgp
CiAKIAogaWYgKEVOQUJMRV9XRUJYUikKKyAgICBpZiAoTk9UIEVOQUJMRV9HQU1FUEFEKQorICAg
ICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJHYW1lcGFkIGlzIHJlcXVpcmVkIHRvIGJlIGVuYWJs
ZWQgZm9yIFdlYlhSIHN1cHBvcnQuIikKKyAgICBlbmRpZiAoKQogICAgIGZpbmRfcGFja2FnZShP
cGVuWFIgMS4wLjkpCiAgICAgaWYgKE5PVCBPUEVOWFJfRk9VTkQpCiAgICAgICAgIG1lc3NhZ2Uo
RkFUQUxfRVJST1IgIk9wZW5YUiBpcyByZXF1aXJlZCB0byBlbmFibGUgV2ViWFIgc3VwcG9ydC4i
KQogICAgIGVuZGlmICgpCi0gICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoRU5BQkxFX0dBTUVQ
QUQgT04pCiAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX09QRU5YUiAke09wZW5YUl9G
T1VORH0pCiAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoWFJfVVNFX1BMQVRGT1JNX0VHTCBU
UlVFKQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFhSX1VTRV9HUkFQSElDU19BUElfT1BF
TkdMIFRSVUUpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggYWJjODBmYzIxYjYzOTg3YTAwMzUwY2YyMDNkMDc0ZWRlYzM2MDE5
OC4uN2RlYTE3N2QyYTgwYjAyMzBmODhjMTU1NWYwM2I1NTYxYTYxYjQ5MiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDIyLTA1LTA0ICBWw61jdG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFx
dWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW1dQRV0gQWRkIGdhbWVwYWQgc3VwcG9ydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNjMwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBXUEUg
ZXhwZWN0YXRpb25zIGZvciBnYW1lcGFkIEFQSS4KKworICAgICAgICAqIHBsYXRmb3JtL3dwZS9U
ZXN0RXhwZWN0YXRpb25zOgorCiAyMDIyLTA1LTA5ICBPcmlvbCBCcnVmYXUgIDxvYnJ1ZmF1QGln
YWxpYS5jb20+CiAKICAgICAgICAgW2Nzc29tXSBEb24ndCBpbmRleCBwZXJzcGVjdGl2ZS90cmFu
c2Zvcm0tb3JpZ2luLSogaW4gY29tcHV0ZWQgc3R5bGVzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93cGUvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dw
ZS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDdiN2M5MWI4NjI4MDNhMjJiZDUxZTFjNjU0ZTYwZjg3
OTAxN2Q3MGMuLjc0YjQyZTkyYzhhYjg4ZjEwNzhmNTUxOGYxMTJmYmVlMTVkZTQ2MTcgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dwZS9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3dwZS9UZXN0RXhwZWN0YXRpb25zCkBAIC02MDMsMTAgKzYwMyw2
IEBAIHdlYmtpdC5vcmcvYi8yMTczNjkgZmFzdC9jYW52YXMvZmlsbC10ZXh0LXdpdGgtZm9udC1m
ZWF0dXJlcy5odG1sIFsgSW1hZ2VPbmx5RmFpCiAKIHdlYmtpdC5vcmcvYi8yMTczNzAgZmFzdC9l
dmVudHMvc2V0RHJhZ0ltYWdlLWVsZW1lbnQtbm9uLW51bGxhYmxlLmh0bWwgWyBGYWlsdXJlIF0K
IAotIyBFTkFCTEVfR0FNRVBBRCBub3QgZW5hYmxlZC4KLXdlYmtpdC5vcmcvYi8yMTMxMzEgZ2Ft
ZXBhZCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIxMzEzMSBodHRwL3Rlc3RzL21pc2MvZ2FtZXBh
ZHMtaW5zZWN1cmUuaHRtbCBbIFNraXAgXQotCiAjIFdlYlhSCiB3ZWJraXQub3JnL2IvMjI1NDgz
IFsgUmVsZWFzZSBdIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIvZXZlbnRz
X2lucHV0X3NvdXJjZV9yZWNyZWF0aW9uLmh0dHBzLmh0bWwgWyBQYXNzIF0KIHdlYmtpdC5vcmcv
Yi8yMjU0ODMgWyBSZWxlYXNlIF0gaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4
ci9ldmVudHNfaW5wdXRfc291cmNlc19jaGFuZ2UuaHR0cHMuaHRtbCBbIFBhc3MgXQpkaWZmIC0t
Z2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDgwYzUwZmQwMjFkODI5ZmEyMTYzNWJl
MDVmNzI1ZmZiN2QxOTk1NzAuLmE5ZWJmOTI2NGZmMDRhY2Q3OTIxNGIyYzMzM2E5MGI2ZmI0ZjMx
YTUgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBA
QAorMjAyMi0wNS0xMCAgVsOtY3RvciBNYW51ZWwgSsOhcXVleiBMZWFsICA8dmphcXVlekBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtXUEVdIEFkZCBnYW1lcGFkIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDYzMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZSBHYW1lcGFkIEFQSSBh
cyBleHBlcmltZW50YWwgZmVhdHVyZSBhbmQgb25seSBpZiBsaW5rZWQgbGlid3BlIHZlcnNpb24g
aXMgZ3JlYXRlciBvcgorICAgICAgICBlcXVhbCB0aGFuIDEuMTMuIEJ1dCBXZWJYUiBhbHNvIGRl
cGVuZHMgb24gZ2FtZXBhZCBmZWF0dXJlLCB3aGljaCBoYXMgaXRzIG93bgorICAgICAgICBpbXBs
ZW1lbnRhdGlvbiwgYnV0IHVzZXMgZ2FtZXBhZCBiYXNlIGNsYXNzZXMuIFNpbmNlIHRoZXJlJ3Mg
bm8gd2F5IHRvIGVuYWJsZSBXZWJYUiB3aXRob3V0CisgICAgICAgIGdhbWVwYWQsIGFuZCBub3cg
Z2FtZXBhZCB1c2VzIGxpYndwZSBlcXVhbCBvciBncmVhdGVyIHRoYW4gMS4xMywgdGhlbiBXZWJY
UiBpdCdzIGVuYWJsZWQgaWYKKyAgICAgICAgdGhlIGNvbmRpdGlvbiBmb3IgZ2FtZXBhZCBpcyBh
bHNvIGF2YWlsYWJsZS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtl
OgorCiAyMDIyLTA1LTA5ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIEludHJvZHVjdGlvbi5tZDogRXhwbGFpbiBhY3RpdmUgRE9NIG9iamVjdHMK
</data>
<flag name="review"
          id="488121"
          type_id="1"
          status="?"
          setter="vjaquez"
    />
    <flag name="commit-queue"
          id="488414"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>