<?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>209230</bug_id>
          
          <creation_ts>2020-03-18 07:50:44 -0700</creation_ts>
          <short_desc>[GTK][WPE] Enable kinetic scrolling with async scrolling</short_desc>
          <delta_ts>2020-03-27 05:55:14 -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>Compositing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>208638</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Lord">clord</reporter>
          <assigned_to name="Chris Lord">clord</assigned_to>
          <cc>aperez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>jamesr</cc>
    
    <cc>koivisto</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1631131</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-03-18 07:50:44 -0700</bug_when>
    <thetext>Currently, there is kinetic scrolling code used in the non-async rendering path in WebKitGtk, but enabling async rendering will mean that code is bypassed. It would be good to enable kinetic scrolling in this situation and share the existing code to avoid duplication. This would also allow kinetic scrolling in WPE (which is the real goal).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631178</commentid>
    <comment_count>1</comment_count>
      <attachid>393862</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-03-18 08:59:06 -0700</bug_when>
    <thetext>Created attachment 393862
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631180</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-03-18 09:00:49 -0700</bug_when>
    <thetext>I think the 2 style errors are in keeping with the rest of the file and the immediate surrounds of the two lines too, but let me know if there&apos;s something I can do to fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631615</commentid>
    <comment_count>3</comment_count>
      <attachid>393862</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-03-19 05:44:12 -0700</bug_when>
    <thetext>Comment on attachment 393862
Patch

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

&gt; Source/WebCore/ChangeLog:38
&gt; +

I miss an explanation of changes made to several of these files. I don&apos;t have time for detailed review, sorry, but I can add a few comments.

&gt; Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp:189
&gt; +void ScrollingTreeScrollingNode::stopScrollAnimations()
&gt; +{
&gt; +}

This empty impl can be moved to the header.

&gt; Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:39
&gt; +#if ENABLE(KINETIC_SCROLLING)
&gt; +#include &quot;ScrollAnimationKinetic.h&quot;
&gt; +#endif

For ifdefed headers we don&apos;t follow the alphabetic order, move this after the unconditional includes block,

&gt; Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:127
&gt; -        scrollBy({ wheelEvent.deltaX(), -wheelEvent.deltaY() });
&gt; +        scrollBy({ -wheelEvent.deltaX(), -wheelEvent.deltaY() });

This is bug #208638, but Zan told me that breaks touch scrolling, I don&apos;t know why.

&gt; Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h:44
&gt; +#if ENABLE(KINETIC_SCROLLING)
&gt; +class ScrollAnimationKinetic;
&gt; +#endif

I don&apos;t think we need ifdefs for forward declarations.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:109
&gt; +    : m_scrollExtentsFunction(scrollExtentsFunction)

WTFMove(scrollExtentsFunction)

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:113
&gt;  {
&gt;  }

Now that animation timer is a RunLoop::Timer we should give it a priority.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:68
&gt; +using ScrollExtentsCallback = std::function&lt;ScrollExtents(void)&gt;;
&gt; +using NotifyPositionChangedCallback = std::function&lt;void(FloatPoint&amp;&amp;)&gt;;

Is this correctly indented? I think we can use Function instead of std::function to make sure they aren&apos;t copyable.

&gt; Source/WebKit/UIProcess/API/wpe/ScrollGestureController.cpp:61
&gt; -            m_axisEvent.x_axis = m_offset.x - touchPoint-&gt;x;
&gt; +            m_axisEvent.x_axis = -(m_offset.x - touchPoint-&gt;x);

This might explain why touch scrolling was broken with bug #208638</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631616</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-03-19 05:54:56 -0700</bug_when>
    <thetext>Thanks for the mini-review Carlos :)

(In reply to Carlos Garcia Campos from comment #3)
&gt; Comment on attachment 393862 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=393862&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:38
&gt; &gt; +
&gt; 
&gt; I miss an explanation of changes made to several of these files. I don&apos;t
&gt; have time for detailed review, sorry, but I can add a few comments.

My bad, I should have put more detail here - will do so.

&gt; &gt; Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp:189
&gt; &gt; +void ScrollingTreeScrollingNode::stopScrollAnimations()
&gt; &gt; +{
&gt; &gt; +}
&gt; 
&gt; This empty impl can be moved to the header.

If I move it to the header, I get a style warning (although I already get a style warning for the other two functions added and the file already seems to ignore this particular style requirement, so maybe I should here too)

&gt; &gt; Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:39
&gt; &gt; +#if ENABLE(KINETIC_SCROLLING)
&gt; &gt; +#include &quot;ScrollAnimationKinetic.h&quot;
&gt; &gt; +#endif
&gt; 
&gt; For ifdefed headers we don&apos;t follow the alphabetic order, move this after
&gt; the unconditional includes block,

Okidokes.

&gt; &gt; Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:127
&gt; &gt; -        scrollBy({ wheelEvent.deltaX(), -wheelEvent.deltaY() });
&gt; &gt; +        scrollBy({ -wheelEvent.deltaX(), -wheelEvent.deltaY() });
&gt; 
&gt; This is bug #208638, but Zan told me that breaks touch scrolling, I don&apos;t
&gt; know why.

Indeed, the change you mention below is why.

&gt; &gt; Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h:44
&gt; &gt; +#if ENABLE(KINETIC_SCROLLING)
&gt; &gt; +class ScrollAnimationKinetic;
&gt; &gt; +#endif
&gt; 
&gt; I don&apos;t think we need ifdefs for forward declarations.

Okidokes

&gt; &gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:109
&gt; &gt; +    : m_scrollExtentsFunction(scrollExtentsFunction)
&gt; 
&gt; WTFMove(scrollExtentsFunction)

Good spot.

&gt; &gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:113
&gt; &gt;  {
&gt; &gt;  }
&gt; 
&gt; Now that animation timer is a RunLoop::Timer we should give it a priority.

Any suggestions about this? Every other similar use I could find via grep in the codebase doesn&apos;t set any kind of priority.

&gt; &gt; Source/WebCore/platform/ScrollAnimationKinetic.h:68
&gt; &gt; +using ScrollExtentsCallback = std::function&lt;ScrollExtents(void)&gt;;
&gt; &gt; +using NotifyPositionChangedCallback = std::function&lt;void(FloatPoint&amp;&amp;)&gt;;
&gt; 
&gt; Is this correctly indented? I think we can use Function instead of
&gt; std::function to make sure they aren&apos;t copyable.

I believe so. At least, I don&apos;t get any warnings and it matches formatting in several other files. I was following what was there before regarding use of std::function, but can change both to WTF::Function.

&gt; &gt; Source/WebKit/UIProcess/API/wpe/ScrollGestureController.cpp:61
&gt; &gt; -            m_axisEvent.x_axis = m_offset.x - touchPoint-&gt;x;
&gt; &gt; +            m_axisEvent.x_axis = -(m_offset.x - touchPoint-&gt;x);
&gt; 
&gt; This might explain why touch scrolling was broken with bug #208638

Yes, this is the cause after applying the above fix - and judging on other similar event handling code, I believe this is the right fix for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631631</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-03-19 06:52:08 -0700</bug_when>
    <thetext>(In reply to Chris Lord from comment #4)
&gt; Thanks for the mini-review Carlos :)
&gt; 
&gt; (In reply to Carlos Garcia Campos from comment #3)
&gt; &gt; Comment on attachment 393862 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=393862&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:38
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; I miss an explanation of changes made to several of these files. I don&apos;t
&gt; &gt; have time for detailed review, sorry, but I can add a few comments.
&gt; 
&gt; My bad, I should have put more detail here - will do so.

Thanks. I see now that ScrollAnimator is not available in the case of async scrolling. That needs to be explained in the changelog, please.

&gt; &gt; &gt; Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp:189
&gt; &gt; &gt; +void ScrollingTreeScrollingNode::stopScrollAnimations()
&gt; &gt; &gt; +{
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; This empty impl can be moved to the header.
&gt; 
&gt; If I move it to the header, I get a style warning (although I already get a
&gt; style warning for the other two functions added and the file already seems
&gt; to ignore this particular style requirement, so maybe I should here too)

What warning exactly?

&gt; &gt; &gt; Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:39
&gt; &gt; &gt; +#if ENABLE(KINETIC_SCROLLING)
&gt; &gt; &gt; +#include &quot;ScrollAnimationKinetic.h&quot;
&gt; &gt; &gt; +#endif
&gt; &gt; 
&gt; &gt; For ifdefed headers we don&apos;t follow the alphabetic order, move this after
&gt; &gt; the unconditional includes block,
&gt; 
&gt; Okidokes.
&gt; 
&gt; &gt; &gt; Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:127
&gt; &gt; &gt; -        scrollBy({ wheelEvent.deltaX(), -wheelEvent.deltaY() });
&gt; &gt; &gt; +        scrollBy({ -wheelEvent.deltaX(), -wheelEvent.deltaY() });
&gt; &gt; 
&gt; &gt; This is bug #208638, but Zan told me that breaks touch scrolling, I don&apos;t
&gt; &gt; know why.
&gt; 
&gt; Indeed, the change you mention below is why.
&gt; 
&gt; &gt; &gt; Source/WebCore/page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h:44
&gt; &gt; &gt; +#if ENABLE(KINETIC_SCROLLING)
&gt; &gt; &gt; +class ScrollAnimationKinetic;
&gt; &gt; &gt; +#endif
&gt; &gt; 
&gt; &gt; I don&apos;t think we need ifdefs for forward declarations.
&gt; 
&gt; Okidokes
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:109
&gt; &gt; &gt; +    : m_scrollExtentsFunction(scrollExtentsFunction)
&gt; &gt; 
&gt; &gt; WTFMove(scrollExtentsFunction)
&gt; 
&gt; Good spot.
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:113
&gt; &gt; &gt;  {
&gt; &gt; &gt;  }
&gt; &gt; 
&gt; &gt; Now that animation timer is a RunLoop::Timer we should give it a priority.
&gt; 
&gt; Any suggestions about this? Every other similar use I could find via grep in
&gt; the codebase doesn&apos;t set any kind of priority.

Include &lt;wtf/glib/RunLoopSourcePriority.h&gt; and then simply m_animationTimer.setPriority(). I think we can use LayerFlushTimer or add a new priority for this (even if it has the same value).

&gt; &gt; &gt; Source/WebCore/platform/ScrollAnimationKinetic.h:68
&gt; &gt; &gt; +using ScrollExtentsCallback = std::function&lt;ScrollExtents(void)&gt;;
&gt; &gt; &gt; +using NotifyPositionChangedCallback = std::function&lt;void(FloatPoint&amp;&amp;)&gt;;
&gt; &gt; 
&gt; &gt; Is this correctly indented? I think we can use Function instead of
&gt; &gt; std::function to make sure they aren&apos;t copyable.
&gt; 
&gt; I believe so. At least, I don&apos;t get any warnings and it matches formatting
&gt; in several other files. I was following what was there before regarding use
&gt; of std::function, but can change both to WTF::Function.

This code was added before WTF::Function existed.

&gt; &gt; &gt; Source/WebKit/UIProcess/API/wpe/ScrollGestureController.cpp:61
&gt; &gt; &gt; -            m_axisEvent.x_axis = m_offset.x - touchPoint-&gt;x;
&gt; &gt; &gt; +            m_axisEvent.x_axis = -(m_offset.x - touchPoint-&gt;x);
&gt; &gt; 
&gt; &gt; This might explain why touch scrolling was broken with bug #208638
&gt; 
&gt; Yes, this is the cause after applying the above fix - and judging on other
&gt; similar event handling code, I believe this is the right fix for it.

Let&apos;s move this to the other patch then and land it before this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631634</commentid>
    <comment_count>6</comment_count>
      <attachid>393862</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-03-19 07:02:34 -0700</bug_when>
    <thetext>Comment on attachment 393862
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:68
&gt;&gt;&gt; +using NotifyPositionChangedCallback = std::function&lt;void(FloatPoint&amp;&amp;)&gt;;
&gt;&gt; 
&gt;&gt; Is this correctly indented? I think we can use Function instead of std::function to make sure they aren&apos;t copyable.
&gt; 
&gt; I believe so. At least, I don&apos;t get any warnings and it matches formatting in several other files. I was following what was there before regarding use of std::function, but can change both to WTF::Function.

These type aliases have to be indented like the rest of the declarations inside this class.

&gt; Source/WebKit/Shared/libwpe/WebEventFactory.cpp:182
&gt; +    if (event-&gt;type == wpe_input_touch_event_type_null) {
&gt; +        return WebWheelEvent(WebEvent::Wheel, position, position,
&gt; +            delta, wheelTicks, phase, momentumPhase,
&gt; +            WebWheelEvent::ScrollByPixelWheelEvent,
&gt; +            OptionSet&lt;WebEvent::Modifier&gt; { }, wallTimeForEventTime(event-&gt;time));
&gt; +    }

From where are touch events coming into `createWebWheelEvent()`? Why are null events expected to be handled here?

&gt;&gt;&gt; Source/WebKit/UIProcess/API/wpe/ScrollGestureController.cpp:61
&gt;&gt;&gt; +            m_axisEvent.x_axis = -(m_offset.x - touchPoint-&gt;x);
&gt;&gt; 
&gt;&gt; This might explain why touch scrolling was broken with bug #208638
&gt; 
&gt; Yes, this is the cause after applying the above fix - and judging on other similar event handling code, I believe this is the right fix for it.

This breaks horizontal touch scrolling.

&gt; Source/WebKit/UIProcess/API/wpe/WPEView.cpp:178
&gt; -                    struct wpe_input_axis_event* axisEvent = scrollGestureController.axisEvent();
&gt; -                    if (axisEvent-&gt;type != wpe_input_axis_event_type_null)
&gt; -                        page.handleWheelEvent(WebKit::NativeWebWheelEvent(axisEvent, page.deviceScaleFactor()));
&gt; +                    page.handleWheelEvent(WebKit::NativeWebWheelEvent(scrollGestureController.axisEvent(), page.deviceScaleFactor(), scrollGestureController.phase(), WebWheelEvent::Phase::PhaseNone));

Why are null events being handled?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631638</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-03-19 07:11:04 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #6)
&gt; Comment on attachment 393862 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=393862&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:68
&gt; &gt;&gt;&gt; +using NotifyPositionChangedCallback = std::function&lt;void(FloatPoint&amp;&amp;)&gt;;
&gt; &gt;&gt; 
&gt; &gt;&gt; Is this correctly indented? I think we can use Function instead of std::function to make sure they aren&apos;t copyable.
&gt; &gt; 
&gt; &gt; I believe so. At least, I don&apos;t get any warnings and it matches formatting in several other files. I was following what was there before regarding use of std::function, but can change both to WTF::Function.
&gt; 
&gt; These type aliases have to be indented like the rest of the declarations
&gt; inside this class.

Will change.

&gt; &gt; Source/WebKit/Shared/libwpe/WebEventFactory.cpp:182
&gt; &gt; +    if (event-&gt;type == wpe_input_touch_event_type_null) {
&gt; &gt; +        return WebWheelEvent(WebEvent::Wheel, position, position,
&gt; &gt; +            delta, wheelTicks, phase, momentumPhase,
&gt; &gt; +            WebWheelEvent::ScrollByPixelWheelEvent,
&gt; &gt; +            OptionSet&lt;WebEvent::Modifier&gt; { }, wallTimeForEventTime(event-&gt;time));
&gt; &gt; +    }
&gt; 
&gt; From where are touch events coming into `createWebWheelEvent()`? Why are
&gt; null events expected to be handled here?

The scroll gesture controller synthesises a null axis event on release - I guess we could give it any type we liked, but null made sense to me.

&gt; &gt;&gt;&gt; Source/WebKit/UIProcess/API/wpe/ScrollGestureController.cpp:61
&gt; &gt;&gt;&gt; +            m_axisEvent.x_axis = -(m_offset.x - touchPoint-&gt;x);
&gt; &gt;&gt; 
&gt; &gt;&gt; This might explain why touch scrolling was broken with bug #208638
&gt; &gt; 
&gt; &gt; Yes, this is the cause after applying the above fix - and judging on other similar event handling code, I believe this is the right fix for it.
&gt; 
&gt; This breaks horizontal touch scrolling.

Seems fine with the corresponding changes in handleWheelEvent to the scrollBy calls. I certainly don&apos;t notice anything wrong when testing it.

&gt; &gt; Source/WebKit/UIProcess/API/wpe/WPEView.cpp:178
&gt; &gt; -                    struct wpe_input_axis_event* axisEvent = scrollGestureController.axisEvent();
&gt; &gt; -                    if (axisEvent-&gt;type != wpe_input_axis_event_type_null)
&gt; &gt; -                        page.handleWheelEvent(WebKit::NativeWebWheelEvent(axisEvent, page.deviceScaleFactor()));
&gt; &gt; +                    page.handleWheelEvent(WebKit::NativeWebWheelEvent(scrollGestureController.axisEvent(), page.deviceScaleFactor(), scrollGestureController.phase(), WebWheelEvent::Phase::PhaseNone));
&gt; 
&gt; Why are null events being handled?

(see above) - in short, we need to handle release events. I can change this to be axis events instead of null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631672</commentid>
    <comment_count>8</comment_count>
      <attachid>393862</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-03-19 09:09:08 -0700</bug_when>
    <thetext>Comment on attachment 393862
Patch

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

&gt;&gt;&gt; Source/WebKit/Shared/libwpe/WebEventFactory.cpp:182
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; From where are touch events coming into `createWebWheelEvent()`? Why are null events expected to be handled here?
&gt; 
&gt; The scroll gesture controller synthesises a null axis event on release - I guess we could give it any type we liked, but null made sense to me.

If needed, null is fine, but the test should be using wpe_input_axis_event_type_null, not the touch equivalent (even if it has the same 0 value).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633819</commentid>
    <comment_count>9</comment_count>
      <attachid>394478</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-03-25 03:04:47 -0700</bug_when>
    <thetext>Created attachment 394478
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634355</commentid>
    <comment_count>10</comment_count>
      <attachid>394478</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-03-26 08:49:54 -0700</bug_when>
    <thetext>Comment on attachment 394478
Patch

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

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:146
&gt; +    auto first = m_scrollHistory[0].timestamp();
&gt; +    auto last = m_scrollHistory.rbegin()-&gt;timestamp();

These Vector lookups should use first() and last().

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:149
&gt; +    if (last == first)
&gt; +        return { };

Furthermore, the `last - first` difference can be computed early, tested here to be above-zero, and then used in the return statement.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:157
&gt; +    return FloatPoint(accumDelta.x() * -1 / (last - first).value(), accumDelta.y() * -1 / (last - first).value());

The -1 can be incorporated as a sign into the accumDelta value lookup.

Given this is all existing code being moved around, you could take this polishing up in a different patch.

&gt; Source/WebKit/UIProcess/API/wpe/ScrollGestureController.cpp:92
&gt;  #if WPE_CHECK_VERSION(1, 5, 0)
&gt;              m_axisEvent.base = {
&gt; -                wpe_input_axis_event_type_null,
&gt; -                0, 0, 0, 0, 0, 0
&gt; +                m_axisEvent.base.type,
&gt; +                touchPoint-&gt;time, m_start.x, m_start.y,
&gt; +                0, 0, 0
&gt;              };
&gt;              m_axisEvent.x_axis = m_axisEvent.y_axis = 0;
&gt;  #else
&gt;              m_axisEvent = {
&gt; -                wpe_input_axis_event_type_null,
&gt; -                0, 0, 0, 0, 0, 0
&gt; +                wpe_input_axis_event_type_motion,
&gt; +                touchPoint-&gt;time, m_start.x, m_start.y,
&gt; +                0, 0, 0
&gt;              };
&gt;  #endif

These two changes don&apos;t seem aligned. The first one is maintaining the event type, the second one is overriding it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634768</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-03-27 01:48:26 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #10)
&gt; Comment on attachment 394478 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=394478&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:146
&gt; &gt; +    auto first = m_scrollHistory[0].timestamp();
&gt; &gt; +    auto last = m_scrollHistory.rbegin()-&gt;timestamp();
&gt; 
&gt; These Vector lookups should use first() and last().
&gt; 
&gt; &gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:149
&gt; &gt; +    if (last == first)
&gt; &gt; +        return { };
&gt; 
&gt; Furthermore, the `last - first` difference can be computed early, tested
&gt; here to be above-zero, and then used in the return statement.
&gt; 
&gt; &gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:157
&gt; &gt; +    return FloatPoint(accumDelta.x() * -1 / (last - first).value(), accumDelta.y() * -1 / (last - first).value());
&gt; 
&gt; The -1 can be incorporated as a sign into the accumDelta value lookup.
&gt; 
&gt; Given this is all existing code being moved around, you could take this
&gt; polishing up in a different patch.

Yes, a separate patch I think - I need to look at Gtk, if this is essentially copy-pasted from there, I&apos;d like to avoid changing it in any way that makes it read differently (I expect the first/last bits are fine though).

&gt; &gt; Source/WebKit/UIProcess/API/wpe/ScrollGestureController.cpp:92
&gt; &gt;  #if WPE_CHECK_VERSION(1, 5, 0)
&gt; &gt;              m_axisEvent.base = {
&gt; &gt; -                wpe_input_axis_event_type_null,
&gt; &gt; -                0, 0, 0, 0, 0, 0
&gt; &gt; +                m_axisEvent.base.type,
&gt; &gt; +                touchPoint-&gt;time, m_start.x, m_start.y,
&gt; &gt; +                0, 0, 0
&gt; &gt;              };
&gt; &gt;              m_axisEvent.x_axis = m_axisEvent.y_axis = 0;
&gt; &gt;  #else
&gt; &gt;              m_axisEvent = {
&gt; &gt; -                wpe_input_axis_event_type_null,
&gt; &gt; -                0, 0, 0, 0, 0, 0
&gt; &gt; +                wpe_input_axis_event_type_motion,
&gt; &gt; +                touchPoint-&gt;time, m_start.x, m_start.y,
&gt; &gt; +                0, 0, 0
&gt; &gt;              };
&gt; &gt;  #endif
&gt; 
&gt; These two changes don&apos;t seem aligned. The first one is maintaining the event
&gt; type, the second one is overriding it.

In the second case, the type can only ever be type_motion, where as there are two types in &gt;=1.5 - you&apos;re right that this reads confusingly though, so I&apos;ll just do the same in both blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634769</commentid>
    <comment_count>12</comment_count>
      <attachid>394712</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-03-27 02:01:39 -0700</bug_when>
    <thetext>Created attachment 394712
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634770</commentid>
    <comment_count>13</comment_count>
      <attachid>394712</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-03-27 02:08:09 -0700</bug_when>
    <thetext>Comment on attachment 394712
Patch

Already reviewed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634797</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-03-27 05:54:43 -0700</bug_when>
    <thetext>Committed r259112: &lt;https://trac.webkit.org/changeset/259112&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 394712.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634798</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-27 05:55:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/60964765&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393862</attachid>
            <date>2020-03-18 08:59:06 -0700</date>
            <delta_ts>2020-03-25 03:04:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209230-20200318155905.patch</filename>
            <type>text/plain</type>
            <size>41630</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4MzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDM5NWQ3ZmY2MWQ2MGMz
YWVkZTNjYjJlMDNmMDUxOTEwOTFmMTVkZC4uOTZiZGMwOTFjNzc2NTI3NzVjMWRlZjUzOGRkYWY2
MDEyMTIxNDBmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIwLTAzLTE4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEVuYWJsZSBr
aW5ldGljIHNjcm9sbGluZyB3aXRoIGFzeW5jIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5MjMwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGV4aXN0aW5nIGtpbmV0aWMgc2Nyb2xs
aW5nIGNvZGUgb24gYXN5bmMgcmVuZGVyaW5nIHBhdGggZm9yIEdUSyBhbmQgV1BFLgorCisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnNjcm9sbFRvKToKKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oOgorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZU5pY29zaWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZU5pY29zaWE6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVOaWNvc2lh
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVOaWNv
c2lhOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVOaWNvc2lhOjpzdG9wU2Nyb2xsQW5pbWF0aW9ucyk6CisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvbmljb3NpYS9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
Tmljb3NpYS5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZU5pY29zaWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZU5pY29zaWE6OlNjcm9sbGluZ1RyZWVPdmVy
Zmxvd1Njcm9sbGluZ05vZGVOaWNvc2lhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVOaWNvc2lhOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVOaWNvc2lhOjpz
dG9wU2Nyb2xsQW5pbWF0aW9ucyk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbmljb3NpYS9T
Y3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTmljb3NpYS5oOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0aW9uS2luZXRpYzo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYyk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjphcHBlbmRUb1Njcm9sbEhpc3RvcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6Y2xlYXJTY3JvbGxIaXN0
b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OmNvbXB1dGVW
ZWxvY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzdGFy
dCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmljLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6U2Nyb2xsQW5pbWF0b3JHZW5lcmljKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6c2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJp
Yzo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdl
bmVyaWM6OndpbGxFbmRMaXZlUmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yR2VuZXJpYzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5oOgorCiAyMDIwLTAz
LTEyICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBGb2N1c0Nv
bnRyb2xsZXI6OnNldEZvY3VzZWRFbGVtZW50KCkgc2hvdWxkIHRlbGwgY2xpZW50IG9mIHJlZm9j
dXNlZCBlbGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBmNGI4MTU0MjM3NGM3YTU3ZGQ5ZDk2ZTVjNTZjODc4
NjIzZGQ1ZTkuLjVkOTk5ZDI4NmY0ZGVhNWRjNWNhZGJkOWZhOTVhMjZjMzlhOTJhMGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMjAtMDMtMTggIENocmlzIExvcmQgIDxjbG9yZEBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gRW5hYmxlIGtpbmV0aWMgc2Nyb2xsaW5nIHdp
dGggYXN5bmMgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDkyMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBVc2Uga2luZXRpYyBzY3JvbGxpbmcgY29kZSBvbiBhc3luYyByZW5kZXJpbmcg
cGF0aAorCisgICAgICAgICogU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaDoKKyAgICAgICAg
KiBTaGFyZWQvV2ViRXZlbnQuaDoKKyAgICAgICAgKiBTaGFyZWQvV2ViV2hlZWxFdmVudC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYldoZWVsRXZlbnQ6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYldoZWVsRXZlbnQ6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL2xpYndw
ZS9OYXRpdmVXZWJXaGVlbEV2ZW50TGliV1BFLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmF0aXZl
V2ViV2hlZWxFdmVudDo6TmF0aXZlV2ViV2hlZWxFdmVudCk6CisgICAgICAgICogU2hhcmVkL2xp
YndwZS9XZWJFdmVudEZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rv
cnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQpOgorICAgICAgICAqIFNoYXJlZC9saWJ3cGUvV2ViRXZl
bnRGYWN0b3J5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3VjaEV2ZW50
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9TY3JvbGxHZXN0dXJlQ29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlNjcm9sbEdlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVFdmVu
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIu
aDoKKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6OnBoYXNlKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcDoKKyAgICAgICAgKFdLV1BFOjpt
X2JhY2tlbmQpOgorCiAyMDIwLTAzLTEyICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBHZXRXZWJDb3JlU3RhdGlzdGlj
cyBtZXNzYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAKaW5kZXggZWEyOGUwOTU1MzAzMDk0ZjYz
ZDNmZmE2NWNlMGI4NTliYmVlMjkwMy4uZTA4MDI0MDkxY2MzNzQyODJkMDQ1NWYxY2Q0MjhkNTEw
ZDFmYjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcApAQCAtMTY5LDYgKzE2OSw5IEBAIHZv
aWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnNjcm9sbFRvKGNvbnN0IEZsb2F0UG9pbnQm
IHBvc2l0aW9uLCBTY3JvbGxUeXBlCiAgICAgaWYgKHBvc2l0aW9uID09IG1fY3VycmVudFNjcm9s
bFBvc2l0aW9uKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoc2Nyb2xsVHlwZSA9PSBTY3Jv
bGxUeXBlOjpQcm9ncmFtbWF0aWMpCisgICAgICAgIHN0b3BTY3JvbGxBbmltYXRpb25zKCk7CisK
ICAgICBzY3JvbGxpbmdUcmVlKCkuc2V0SXNIYW5kbGluZ1Byb2dyYW1tYXRpY1Njcm9sbChzY3Jv
bGxUeXBlID09IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYyk7CiAgICAgCiAgICAgbV9jdXJyZW50
U2Nyb2xsUG9zaXRpb24gPSBhZGp1c3RlZFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBjbGFtcCk7
CkBAIC0xODEsNiArMTg0LDEwIEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnNj
cm9sbFRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBTY3JvbGxUeXBlCiAgICAgc2Nyb2xs
aW5nVHJlZSgpLnNldElzSGFuZGxpbmdQcm9ncmFtbWF0aWNTY3JvbGwoZmFsc2UpOwogfQogCit2
b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjpzdG9wU2Nyb2xsQW5pbWF0aW9ucygpCit7
Cit9CisKIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OmN1cnJlbnRTY3JvbGxQb3Np
dGlvbkNoYW5nZWQoKQogewogICAgIHJlcG9zaXRpb25TY3JvbGxpbmdMYXllcnMoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZS5oCmluZGV4IDJiNDJlNDM2ZjJjYzliOTRmZjA2Njc1ZTc3ODY2YjBkYzAzZmU3
ZTMuLjk5YzJjYmMxNjY0MzgzZmZlOGQ1MTQ5MjZlYmEzMDVkMjEwYjI0ZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGUuaApAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY3JvbGxUbyhj
b25zdCBGbG9hdFBvaW50JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENs
YW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwogICAgIHZvaWQgc2Nyb2xsQnkoY29u
c3QgRmxvYXRTaXplJiwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7
CiAKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFNjcm9sbEFuaW1hdGlvbnMoKTsKKwogICAgIHZvaWQg
d2FzU2Nyb2xsZWRCeURlbGVnYXRlZFNjcm9sbGluZyhjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlv
biwgT3B0aW9uYWw8RmxvYXRSZWN0PiBvdmVycmlkZUxheW91dFZpZXdwb3J0ID0geyB9LCBTY3Jv
bGxpbmdMYXllclBvc2l0aW9uQWN0aW9uID0gU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6
U3luYyk7CiAgICAgCiAjaWYgRU5BQkxFKFNDUk9MTElOR19USFJFQUQpCkBAIC03NSw2ICs3Nyw4
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhUGFyYW1ldGVycy5ob3Jpem9udGFsU2Ny
b2xsYmFySGlkZGVuQnlTdHlsZTsgfQogICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRkZW5C
eVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMudmVydGlj
YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlOyB9CisgICAgYm9vbCBjYW5IYXZlSG9yaXpvbnRhbFNj
cm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzLmhvcml6
b250YWxTY3JvbGxiYXJNb2RlICE9IFNjcm9sbGJhckFsd2F5c09mZjsgfQorICAgIGJvb2wgY2Fu
SGF2ZVZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYVBh
cmFtZXRlcnMudmVydGljYWxTY3JvbGxiYXJNb2RlICE9IFNjcm9sbGJhckFsd2F5c09mZjsgfQog
ICAgIGJvb2wgY2FuSGF2ZVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVB
cmVhUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSAhPSBTY3JvbGxiYXJBbHdheXNP
ZmYgfHwgbV9zY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxiYXJNb2RlICE9
IFNjcm9sbGJhckFsd2F5c09mZjsgfQogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU5pY29zaWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbmljb3NpYS9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTmljb3NpYS5j
cHAKaW5kZXggNWZlNGVhNTM2M2M4YTZkMzFkODM5ZWY0ZWMxZmFhYjE2MDk4YzMwMi4uZDA0ZTI2
NWMwMjgzMjg5ZmUwY2M3YTIzMmZhYzNmNjU2YmQxMGUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvbmljb3NpYS9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlTmljb3NpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbmljb3Np
YS9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTmljb3NpYS5jcHAKQEAgLTM0LDYgKzM0
LDkgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiTmljb3NpYVBsYXRmb3JtTGF5ZXIuaCIKKyNpZiBFTkFCTEUoS0lORVRJQ19TQ1JPTExJ
TkcpCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oIgorI2VuZGlmCiAjaW5jbHVk
ZSAiU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaCIKICNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlLmgiCiAKQEAgLTQ3LDYgKzUwLDIwIEBAIFJlZjxTY3JvbGxpbmdUcmVlRnJhbWVTY3Jv
bGxpbmdOb2RlPiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTmljb3NpYTo6Y3JlCiBT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTmljb3NpYTo6U2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZU5pY29zaWEoU2Nyb2xsaW5nVHJlZSYgc2Nyb2xsaW5nVHJlZSwgU2Nyb2xs
aW5nTm9kZVR5cGUgbm9kZVR5cGUsIFNjcm9sbGluZ05vZGVJRCBub2RlSUQpCiAgICAgOiBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKHNjcm9sbGluZ1RyZWUsIG5vZGVUeXBlLCBub2Rl
SUQpCiB7CisjaWYgRU5BQkxFKEtJTkVUSUNfU0NST0xMSU5HKQorICAgIG1fa2luZXRpY0FuaW1h
dGlvbiA9IG1ha2VVbmlxdWU8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4oCisgICAgICAgIFt0aGlz
XSgpIC0+IFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OlNjcm9sbEV4dGVudHMgeworICAgICAgICAg
ICAgcmV0dXJuIHsgSW50UG9pbnQobWluaW11bVNjcm9sbFBvc2l0aW9uKCkpLCBJbnRQb2ludCht
YXhpbXVtU2Nyb2xsUG9zaXRpb24oKSkgfTsKKyAgICAgICAgfSwKKyAgICAgICAgW3RoaXNdKEZs
b2F0UG9pbnQmJiBwb3NpdGlvbikgeworICAgICAgICAgICAgYXV0byogc2Nyb2xsTGF5ZXIgPSBz
dGF0aWNfY2FzdDxOaWNvc2lhOjpQbGF0Zm9ybUxheWVyKj4oc2Nyb2xsZWRDb250ZW50c0xheWVy
KCkpOworICAgICAgICAgICAgQVNTRVJUKHNjcm9sbExheWVyKTsKKyAgICAgICAgICAgIGF1dG8m
IGNvbXBvc2l0aW9uTGF5ZXIgPSBkb3duY2FzdDxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPigq
c2Nyb2xsTGF5ZXIpOworCisgICAgICAgICAgICBhdXRvIHVwZGF0ZVNjb3BlID0gY29tcG9zaXRp
b25MYXllci5jcmVhdGVVcGRhdGVTY29wZSgpOworICAgICAgICAgICAgc2Nyb2xsVG8ocG9zaXRp
b24pOworICAgICAgICB9KTsKKyNlbmRpZgogfQogCiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlTmljb3NpYTo6flNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVOaWNvc2lhKCkg
PSBkZWZhdWx0OwpAQCAtMTA3LDggKzEyNCwyNCBAQCBTY3JvbGxpbmdFdmVudFJlc3VsdCBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTmljb3NpYTo6aGFuZGxlV2hlZWxFdmVudChjbwog
ICAgICAgICBhdXRvJiBjb21wb3NpdGlvbkxheWVyID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29tcG9z
aXRpb25MYXllcj4oKnNjcm9sbExheWVyKTsKIAogICAgICAgICBhdXRvIHVwZGF0ZVNjb3BlID0g
Y29tcG9zaXRpb25MYXllci5jcmVhdGVVcGRhdGVTY29wZSgpOwotICAgICAgICBzY3JvbGxCeSh7
IHdoZWVsRXZlbnQuZGVsdGFYKCksIC13aGVlbEV2ZW50LmRlbHRhWSgpIH0pOworICAgICAgICBz
Y3JvbGxCeSh7IC13aGVlbEV2ZW50LmRlbHRhWCgpLCAtd2hlZWxFdmVudC5kZWx0YVkoKSB9KTsK
KworI2lmIEVOQUJMRShLSU5FVElDX1NDUk9MTElORykKKyAgICAgICAgbV9raW5ldGljQW5pbWF0
aW9uLT5hcHBlbmRUb1Njcm9sbEhpc3Rvcnkod2hlZWxFdmVudCk7CisjZW5kaWYKKyAgICB9CisK
KyNpZiBFTkFCTEUoS0lORVRJQ19TQ1JPTExJTkcpCisgICAgbV9raW5ldGljQW5pbWF0aW9uLT5z
dG9wKCk7CisgICAgaWYgKHdoZWVsRXZlbnQuaXNFbmRPZk5vbk1vbWVudHVtU2Nyb2xsKCkpIHsK
KyAgICAgICAgbV9raW5ldGljQW5pbWF0aW9uLT5zdGFydChjdXJyZW50U2Nyb2xsUG9zaXRpb24o
KSwgbV9raW5ldGljQW5pbWF0aW9uLT5jb21wdXRlVmVsb2NpdHkoKSwgY2FuSGF2ZUhvcml6b250
YWxTY3JvbGxiYXIoKSwgY2FuSGF2ZVZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgICAgICBtX2tp
bmV0aWNBbmltYXRpb24tPmNsZWFyU2Nyb2xsSGlzdG9yeSgpOwogICAgIH0KKyAgICBpZiAod2hl
ZWxFdmVudC5pc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkpIHsKKyAgICAgICAgbV9r
aW5ldGljQW5pbWF0aW9uLT5zdGFydChjdXJyZW50U2Nyb2xsUG9zaXRpb24oKSwgd2hlZWxFdmVu
dC5zd2lwZVZlbG9jaXR5KCksIGNhbkhhdmVIb3Jpem9udGFsU2Nyb2xsYmFyKCksIGNhbkhhdmVW
ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgbV9raW5ldGljQW5pbWF0aW9uLT5jbGVhclNj
cm9sbEhpc3RvcnkoKTsKKyAgICB9CisjZW5kaWYKIAogICAgIHNjcm9sbGluZ1RyZWUoKS5zZXRP
ckNsZWFyTGF0Y2hlZE5vZGUod2hlZWxFdmVudCwgc2Nyb2xsaW5nTm9kZUlEKCkpOwogCkBAIC0x
MTYsNiArMTQ5LDE0IEBAIFNjcm9sbGluZ0V2ZW50UmVzdWx0IFNjcm9sbGluZ1RyZWVGcmFtZVNj
cm9sbGluZ05vZGVOaWNvc2lhOjpoYW5kbGVXaGVlbEV2ZW50KGNvCiAgICAgcmV0dXJuIFNjcm9s
bGluZ0V2ZW50UmVzdWx0OjpEaWRIYW5kbGVFdmVudDsKIH0KIAordm9pZCBTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlTmljb3NpYTo6c3RvcFNjcm9sbEFuaW1hdGlvbnMoKQoreworI2lm
IEVOQUJMRShLSU5FVElDX1NDUk9MTElORykKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0b3Ao
KTsKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPmNsZWFyU2Nyb2xsSGlzdG9yeSgpOworI2VuZGlm
Cit9CisKIEZsb2F0UG9pbnQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU5pY29zaWE6
OmFkanVzdGVkU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIFNjcm9s
bENsYW1waW5nIGNsYW1waW5nKSBjb25zdAogewogICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRp
b24ocm91bmRmKHBvc2l0aW9uLngoKSksIHJvdW5kZihwb3NpdGlvbi55KCkpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZU5pY29zaWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L25pY29zaWEvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU5pY29zaWEuaAppbmRleCAx
NzE2ODdkYjgyYTc2NzY4YzIwOGJhY2FhMmMwMTZjY2YzNmM3NDNhLi42ZWQ5ZWI2MTZmOTExMDc0
MjJiODFlN2Q5YjI1ZjNkNTQ0OTM4ZDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9uaWNvc2lhL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVOaWNvc2lh
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbmljb3NpYS9TY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlTmljb3NpYS5oCkBAIC0zOSw2ICszOSw5IEBAIGNsYXNzIENv
bXBvc2l0aW9uTGF5ZXI7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKyNpZiBFTkFCTEUoS0lO
RVRJQ19TQ1JPTExJTkcpCitjbGFzcyBTY3JvbGxBbmltYXRpb25LaW5ldGljOworI2VuZGlmCiAK
IGNsYXNzIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVOaWNvc2lhIGZpbmFsIDogcHVi
bGljIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUgewogcHVibGljOgpAQCAtNTMsNiAr
NTYsOCBAQCBwcml2YXRlOgogCiAgICAgU2Nyb2xsaW5nRXZlbnRSZXN1bHQgaGFuZGxlV2hlZWxF
dmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKIAorICAgIHZvaWQgc3Rv
cFNjcm9sbEFuaW1hdGlvbnMoKSBvdmVycmlkZTsKKwogICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRT
Y3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiwgU2Nyb2xsQ2xhbXBpbmcpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgdm9pZCBjdXJyZW50U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCkgb3ZlcnJp
ZGU7CkBAIC02Niw2ICs3MSwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxOaWNvc2lhOjpDb21w
b3NpdGlvbkxheWVyPiBtX2NvbnRlbnRTaGFkb3dMYXllcjsKICAgICBSZWZQdHI8Tmljb3NpYTo6
Q29tcG9zaXRpb25MYXllcj4gbV9oZWFkZXJMYXllcjsKICAgICBSZWZQdHI8Tmljb3NpYTo6Q29t
cG9zaXRpb25MYXllcj4gbV9mb290ZXJMYXllcjsKKworI2lmIEVOQUJMRShLSU5FVElDX1NDUk9M
TElORykKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4gbV9raW5l
dGljQW5pbWF0aW9uOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Njcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVOaWNvc2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZU5pY29z
aWEuY3BwCmluZGV4IDBiN2RlOTRkOGUwZDU1ZDE3YWU4MGU0ZWExMGRjMmQyZDIzMTVjMzIuLjcy
Yjg3Zjg5MDEzNzE2NDBkNDNjYjEyYTY4NmVkNTEyYWJmNTBjMDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZU5pY29zaWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L25pY29zaWEvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZU5pY29zaWEuY3BwCkBA
IC0zMiw2ICszMiw5IEBACiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKE5JQ09T
SUEpCiAKICNpbmNsdWRlICJOaWNvc2lhUGxhdGZvcm1MYXllci5oIgorI2lmIEVOQUJMRShLSU5F
VElDX1NDUk9MTElORykKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25LaW5ldGljLmgiCisjZW5k
aWYKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZS5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGluZ1RyZWUuaCIKIApAQCAtNDUsNiArNDgsMjAgQEAgUmVmPFNjcm9sbGlu
Z1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGU+IFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVOaWNvc2kKIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVOaWNvc2lhOjpT
Y3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTmljb3NpYShTY3JvbGxpbmdUcmVlJiBz
Y3JvbGxpbmdUcmVlLCBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKQogICAgIDogU2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZShzY3JvbGxpbmdUcmVlLCBub2RlSUQpCiB7CisjaWYgRU5B
QkxFKEtJTkVUSUNfU0NST0xMSU5HKQorICAgIG1fa2luZXRpY0FuaW1hdGlvbiA9IG1ha2VVbmlx
dWU8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4oCisgICAgICAgIFt0aGlzXSgpIC0+IFNjcm9sbEFu
aW1hdGlvbktpbmV0aWM6OlNjcm9sbEV4dGVudHMgeworICAgICAgICAgICAgcmV0dXJuIHsgSW50
UG9pbnQobWluaW11bVNjcm9sbFBvc2l0aW9uKCkpLCBJbnRQb2ludChtYXhpbXVtU2Nyb2xsUG9z
aXRpb24oKSkgfTsKKyAgICAgICAgfSwKKyAgICAgICAgW3RoaXNdKEZsb2F0UG9pbnQmJiBwb3Np
dGlvbikgeworICAgICAgICAgICAgYXV0byogc2Nyb2xsTGF5ZXIgPSBzdGF0aWNfY2FzdDxOaWNv
c2lhOjpQbGF0Zm9ybUxheWVyKj4oc2Nyb2xsZWRDb250ZW50c0xheWVyKCkpOworICAgICAgICAg
ICAgQVNTRVJUKHNjcm9sbExheWVyKTsKKyAgICAgICAgICAgIGF1dG8mIGNvbXBvc2l0aW9uTGF5
ZXIgPSBkb3duY2FzdDxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPigqc2Nyb2xsTGF5ZXIpOwor
CisgICAgICAgICAgICBhdXRvIHVwZGF0ZVNjb3BlID0gY29tcG9zaXRpb25MYXllci5jcmVhdGVV
cGRhdGVTY29wZSgpOworICAgICAgICAgICAgc2Nyb2xsVG8ocG9zaXRpb24pOworICAgICAgICB9
KTsKKyNlbmRpZgogfQogCiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTmljb3Np
YTo6flNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVOaWNvc2lhKCkgPSBkZWZhdWx0
OwpAQCAtOTMsMTQgKzExMCwzOCBAQCBTY3JvbGxpbmdFdmVudFJlc3VsdCBTY3JvbGxpbmdUcmVl
T3ZlcmZsb3dTY3JvbGxpbmdOb2RlTmljb3NpYTo6aGFuZGxlV2hlZWxFdmVudAogICAgICAgICBh
dXRvJiBjb21wb3NpdGlvbkxheWVyID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXll
cj4oKnNjcm9sbExheWVyKTsKIAogICAgICAgICBhdXRvIHVwZGF0ZVNjb3BlID0gY29tcG9zaXRp
b25MYXllci5jcmVhdGVVcGRhdGVTY29wZSgpOwotICAgICAgICBzY3JvbGxCeSh7IHdoZWVsRXZl
bnQuZGVsdGFYKCksIC13aGVlbEV2ZW50LmRlbHRhWSgpIH0pOworICAgICAgICBzY3JvbGxCeSh7
IC13aGVlbEV2ZW50LmRlbHRhWCgpLCAtd2hlZWxFdmVudC5kZWx0YVkoKSB9KTsKKworI2lmIEVO
QUJMRShLSU5FVElDX1NDUk9MTElORykKKyAgICAgICAgbV9raW5ldGljQW5pbWF0aW9uLT5hcHBl
bmRUb1Njcm9sbEhpc3Rvcnkod2hlZWxFdmVudCk7CisjZW5kaWYKKyAgICB9CisKKyNpZiBFTkFC
TEUoS0lORVRJQ19TQ1JPTExJTkcpCisgICAgbV9raW5ldGljQW5pbWF0aW9uLT5zdG9wKCk7Cisg
ICAgaWYgKHdoZWVsRXZlbnQuaXNFbmRPZk5vbk1vbWVudHVtU2Nyb2xsKCkpIHsKKyAgICAgICAg
bV9raW5ldGljQW5pbWF0aW9uLT5zdGFydChjdXJyZW50U2Nyb2xsUG9zaXRpb24oKSwgbV9raW5l
dGljQW5pbWF0aW9uLT5jb21wdXRlVmVsb2NpdHkoKSwgY2FuSGF2ZUhvcml6b250YWxTY3JvbGxi
YXIoKSwgY2FuSGF2ZVZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgICAgICBtX2tpbmV0aWNBbmlt
YXRpb24tPmNsZWFyU2Nyb2xsSGlzdG9yeSgpOwogICAgIH0KKyAgICBpZiAod2hlZWxFdmVudC5p
c1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkpIHsKKyAgICAgICAgbV9raW5ldGljQW5p
bWF0aW9uLT5zdGFydChjdXJyZW50U2Nyb2xsUG9zaXRpb24oKSwgd2hlZWxFdmVudC5zd2lwZVZl
bG9jaXR5KCksIGNhbkhhdmVIb3Jpem9udGFsU2Nyb2xsYmFyKCksIGNhbkhhdmVWZXJ0aWNhbFNj
cm9sbGJhcigpKTsKKyAgICAgICAgbV9raW5ldGljQW5pbWF0aW9uLT5jbGVhclNjcm9sbEhpc3Rv
cnkoKTsKKyAgICB9CisjZW5kaWYKIAogICAgIHNjcm9sbGluZ1RyZWUoKS5zZXRPckNsZWFyTGF0
Y2hlZE5vZGUod2hlZWxFdmVudCwgc2Nyb2xsaW5nTm9kZUlEKCkpOwogCiAgICAgcmV0dXJuIFNj
cm9sbGluZ0V2ZW50UmVzdWx0OjpEaWRIYW5kbGVFdmVudDsKIH0KIAordm9pZCBTY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTmljb3NpYTo6c3RvcFNjcm9sbEFuaW1hdGlvbnMoKQor
eworI2lmIEVOQUJMRShLSU5FVElDX1NDUk9MTElORykKKyAgICBtX2tpbmV0aWNBbmltYXRpb24t
PnN0b3AoKTsKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPmNsZWFyU2Nyb2xsSGlzdG9yeSgpOwor
I2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShB
U1lOQ19TQ1JPTExJTkcpICYmIFVTRShOSUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvbmljb3NpYS9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdO
b2RlTmljb3NpYS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbmljb3NpYS9TY3Jv
bGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTmljb3NpYS5oCmluZGV4IGExZjljODEyZTY4
OTViYWNiMTMxMjJhYzJiYWE1NDdiY2JkMWExYTcuLjE5MWZhMWY2NWU0OTQ4NDQyZWE0MjVmMzJk
NTdmZWQ0NWFkYTkzMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L25pY29zaWEvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZU5pY29zaWEuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Njcm9sbGluZ1RyZWVPdmVy
Zmxvd1Njcm9sbGluZ05vZGVOaWNvc2lhLmgKQEAgLTMzLDYgKzMzLDkgQEAKICNpbmNsdWRlICJT
Y3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKKyNpZiBFTkFCTEUoS0lORVRJQ19TQ1JPTExJTkcpCitjbGFzcyBTY3JvbGxBbmltYXRpb25L
aW5ldGljOworI2VuZGlmCiAKIGNsYXNzIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05v
ZGVOaWNvc2lhIGZpbmFsIDogcHVibGljIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05v
ZGUgewogcHVibGljOgpAQCAtNDksNiArNTIsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlcG9z
aXRpb25TY3JvbGxpbmdMYXllcnMoKSBvdmVycmlkZTsKIAogICAgIFNjcm9sbGluZ0V2ZW50UmVz
dWx0IGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHN0b3BTY3JvbGxBbmltYXRpb25zKCkgb3ZlcnJpZGU7CisKKyNpZiBFTkFC
TEUoS0lORVRJQ19TQ1JPTExJTkcpCisgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlv
bktpbmV0aWM+IG1fa2luZXRpY0FuaW1hdGlvbjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0aW9uS2luZXRpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRp
b25LaW5ldGljLmNwcAppbmRleCBhYzlmMmYwZjM3ZjFlODA1ODYwZjAzNmI0MmIwZDAyNzYyMGMx
ZGUyLi5hNmFhMjE1M2FjZTJjMGU4NWE4MWNkNGQ2YjliOTQwODk3Nzk3MGEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcApAQCAt
MjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1h
dGlvbktpbmV0aWMuaCIKIAotI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAKIC8qCiAgKiBQZXJBeGlzRGF0YSBpcyBhIHBvcnQgb2Yg
R3RrS2luZXRpY1Njcm9sbGluZyBhcyBvZiBHVEsrIDMuMjAsCkBAIC02NSw2ICs2NSw3IEBAIHN0
YXRpYyBjb25zdCBkb3VibGUgZGVjZWxGcmljdGlvbiA9IDQ7CiBzdGF0aWMgY29uc3QgZG91Ymxl
IGZyYW1lUmF0ZSA9IDYwOwogc3RhdGljIGNvbnN0IFNlY29uZHMgdGlja1RpbWUgPSAxX3MgLyBm
cmFtZVJhdGU7CiBzdGF0aWMgY29uc3QgU2Vjb25kcyBtaW5pbXVtVGltZXJJbnRlcnZhbCB7IDFf
bXMgfTsKK3N0YXRpYyBjb25zdCBTZWNvbmRzIHNjcm9sbENhcHR1cmVUaHJlc2hvbGQgeyAxNTBf
bXMgfTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMDQsMTAgKzEwNSwxMCBAQCBib29s
IFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OlBlckF4aXNEYXRhOjphbmltYXRlU2Nyb2xsKFNlY29u
ZHMgdGltZURlbHRhKQogICAgIHJldHVybiBtX3ZlbG9jaXR5OwogfQogCi1TY3JvbGxBbmltYXRp
b25LaW5ldGljOjpTY3JvbGxBbmltYXRpb25LaW5ldGljKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxh
YmxlQXJlYSwgc3RkOjpmdW5jdGlvbjx2b2lkKEZsb2F0UG9pbnQmJik+JiYgbm90aWZ5UG9zaXRp
b25DaGFuZ2VkRnVuY3Rpb24pCi0gICAgOiBTY3JvbGxBbmltYXRpb24oc2Nyb2xsYWJsZUFyZWEp
CitTY3JvbGxBbmltYXRpb25LaW5ldGljOjpTY3JvbGxBbmltYXRpb25LaW5ldGljKFNjcm9sbEV4
dGVudHNDYWxsYmFjayYmIHNjcm9sbEV4dGVudHNGdW5jdGlvbiwgTm90aWZ5UG9zaXRpb25DaGFu
Z2VkQ2FsbGJhY2smJiBub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbikKKyAgICA6IG1fc2Ny
b2xsRXh0ZW50c0Z1bmN0aW9uKHNjcm9sbEV4dGVudHNGdW5jdGlvbikKICAgICAsIG1fbm90aWZ5
UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb24oV1RGTW92ZShub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5j
dGlvbikpCi0gICAgLCBtX2FuaW1hdGlvblRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0aW9uS2lu
ZXRpYzo6YW5pbWF0aW9uVGltZXJGaXJlZCkKKyAgICAsIG1fYW5pbWF0aW9uVGltZXIoUnVuTG9v
cDo6Y3VycmVudCgpLCB0aGlzLCAmU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6YW5pbWF0aW9uVGlt
ZXJGaXJlZCkKIHsKIH0KIApAQCAtMTIwLDYgKzEyMSw0MCBAQCB2b2lkIFNjcm9sbEFuaW1hdGlv
bktpbmV0aWM6OnN0b3AoKQogICAgIG1fdmVydGljYWxEYXRhID0gV1RGOjpudWxsb3B0OwogfQog
Cit2b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OmFwcGVuZFRvU2Nyb2xsSGlzdG9yeShjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQoreworICAgIG1fc2Nyb2xsSGlzdG9yeS5yZW1v
dmVBbGxNYXRjaGluZyhbJmV2ZW50XSAoUGxhdGZvcm1XaGVlbEV2ZW50JiBvdGhlckV2ZW50KSAt
PiBib29sIHsKKyAgICAgICAgcmV0dXJuIChldmVudC50aW1lc3RhbXAoKSAtIG90aGVyRXZlbnQu
dGltZXN0YW1wKCkpID4gc2Nyb2xsQ2FwdHVyZVRocmVzaG9sZDsKKyAgICB9KTsKKworICAgIG1f
c2Nyb2xsSGlzdG9yeS5hcHBlbmQoZXZlbnQpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdGlvbktp
bmV0aWM6OmNsZWFyU2Nyb2xsSGlzdG9yeSgpCit7CisgICAgbV9zY3JvbGxIaXN0b3J5LmNsZWFy
KCk7Cit9CisKK0Zsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6Y29tcHV0ZVZlbG9j
aXR5KCkKK3sKKyAgICBpZiAobV9zY3JvbGxIaXN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgIGF1dG8gZmlyc3QgPSBtX3Njcm9sbEhpc3RvcnlbMF0udGltZXN0YW1w
KCk7CisgICAgYXV0byBsYXN0ID0gbV9zY3JvbGxIaXN0b3J5LnJiZWdpbigpLT50aW1lc3RhbXAo
KTsKKworICAgIGlmIChsYXN0ID09IGZpcnN0KQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
RmxvYXRQb2ludCBhY2N1bURlbHRhOworICAgIGZvciAoY29uc3QgYXV0byYgc2Nyb2xsRXZlbnQg
OiBtX3Njcm9sbEhpc3RvcnkpCisgICAgICAgIGFjY3VtRGVsdGEgKz0gRmxvYXRQb2ludChzY3Jv
bGxFdmVudC5kZWx0YVgoKSwgc2Nyb2xsRXZlbnQuZGVsdGFZKCkpOworCisgICAgbV9zY3JvbGxI
aXN0b3J5LmNsZWFyKCk7CisKKyAgICByZXR1cm4gRmxvYXRQb2ludChhY2N1bURlbHRhLngoKSAq
IC0xIC8gKGxhc3QgLSBmaXJzdCkudmFsdWUoKSwgYWNjdW1EZWx0YS55KCkgKiAtMSAvIChsYXN0
IC0gZmlyc3QpLnZhbHVlKCkpOworfQorCiB2b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OnN0
YXJ0KGNvbnN0IEZsb2F0UG9pbnQmIGluaXRpYWxQb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludCYg
dmVsb2NpdHksIGJvb2wgbWF5SFNjcm9sbCwgYm9vbCBtYXlWU2Nyb2xsKQogewogICAgIHN0b3Ao
KTsKQEAgLTEyOSwxNCArMTY0LDE1IEBAIHZvaWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6c3Rh
cnQoY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbFBvc2l0aW9uLCBjb25zdCBGbG9hCiAgICAgaWYg
KCF2ZWxvY2l0eS54KCkgJiYgIXZlbG9jaXR5LnkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAg
YXV0byBleHRlbnRzID0gbV9zY3JvbGxFeHRlbnRzRnVuY3Rpb24oKTsKICAgICBpZiAobWF5SFNj
cm9sbCkgewotICAgICAgICBtX2hvcml6b250YWxEYXRhID0gUGVyQXhpc0RhdGEobV9zY3JvbGxh
YmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54KCksCi0gICAgICAgICAgICBtX3Njcm9s
bGFibGVBcmVhLm1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSwKKyAgICAgICAgbV9ob3Jpem9u
dGFsRGF0YSA9IFBlckF4aXNEYXRhKGV4dGVudHMubWluaW11bVNjcm9sbFBvc2l0aW9uLngoKSwK
KyAgICAgICAgICAgIGV4dGVudHMubWF4aW11bVNjcm9sbFBvc2l0aW9uLngoKSwKICAgICAgICAg
ICAgIGluaXRpYWxQb3NpdGlvbi54KCksIHZlbG9jaXR5LngoKSk7CiAgICAgfQogICAgIGlmICht
YXlWU2Nyb2xsKSB7Ci0gICAgICAgIG1fdmVydGljYWxEYXRhID0gUGVyQXhpc0RhdGEobV9zY3Jv
bGxhYmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCksCi0gICAgICAgICAgICBtX3Nj
cm9sbGFibGVBcmVhLm1heGltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSwKKyAgICAgICAgbV92ZXJ0
aWNhbERhdGEgPSBQZXJBeGlzRGF0YShleHRlbnRzLm1pbmltdW1TY3JvbGxQb3NpdGlvbi55KCks
CisgICAgICAgICAgICBleHRlbnRzLm1heGltdW1TY3JvbGxQb3NpdGlvbi55KCksCiAgICAgICAg
ICAgICBpbml0aWFsUG9zaXRpb24ueSgpLCB2ZWxvY2l0eS55KCkpOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oCmluZGV4IGNm
ZDMzY2U1YjQ5NThkNDJhMDc1NDg0MTZlMTM2YzQwOTUyNTU0MDAuLmE0NTMwNzY3MGRiMDkwOWI3
ZmRiM2FkNmNkNjBkMjUzZjkxYTAwMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmgKQEAgLTI3LDE1ICsyNywxNiBAQAogCiAjaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbi5oIgotI2luY2x1ZGUg
IlRpbWVyLmgiCiAKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUnVu
TG9vcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNjcm9sbGFibGVBcmVhOwor
Y2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogCi1jbGFzcyBTY3JvbGxBbmltYXRpb25LaW5ldGlj
IGZpbmFsOiBwdWJsaWMgU2Nyb2xsQW5pbWF0aW9uIHsKK2NsYXNzIFNjcm9sbEFuaW1hdGlvbktp
bmV0aWMgZmluYWwgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHJpdmF0ZToKICAg
ICBjbGFzcyBQZXJBeGlzRGF0YSB7CiAgICAgcHVibGljOgpAQCAtNTgsMjMgKzU5LDM3IEBAIHBy
aXZhdGU6CiAgICAgfTsKIAogcHVibGljOgotICAgIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMoU2Ny
b2xsYWJsZUFyZWEmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoRmxvYXRQb2ludCYmKT4mJiBub3RpZnlQ
b3NpdGlvbkNoYW5nZWRGdW5jdGlvbik7CisgICAgc3RydWN0IFNjcm9sbEV4dGVudHMgeworICAg
ICAgICBJbnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRpb247CisgICAgICAgIEludFBvaW50IG1h
eGltdW1TY3JvbGxQb3NpdGlvbjsKKyAgICB9OworCit1c2luZyBTY3JvbGxFeHRlbnRzQ2FsbGJh
Y2sgPSBzdGQ6OmZ1bmN0aW9uPFNjcm9sbEV4dGVudHModm9pZCk+OwordXNpbmcgTm90aWZ5UG9z
aXRpb25DaGFuZ2VkQ2FsbGJhY2sgPSBzdGQ6OmZ1bmN0aW9uPHZvaWQoRmxvYXRQb2ludCYmKT47
CisKKyAgICBTY3JvbGxBbmltYXRpb25LaW5ldGljKFNjcm9sbEV4dGVudHNDYWxsYmFjayYmLCBO
b3RpZnlQb3NpdGlvbkNoYW5nZWRDYWxsYmFjayYmKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmlt
YXRpb25LaW5ldGljKCk7CiAKKyAgICB2b2lkIGFwcGVuZFRvU2Nyb2xsSGlzdG9yeShjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmKTsKKyAgICB2b2lkIGNsZWFyU2Nyb2xsSGlzdG9yeSgpOworICAg
IEZsb2F0UG9pbnQgY29tcHV0ZVZlbG9jaXR5KCk7CisKICAgICB2b2lkIHN0YXJ0KGNvbnN0IEZs
b2F0UG9pbnQmIGluaXRpYWxQb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgdmVsb2NpdHksIGJv
b2wgbWF5SFNjcm9sbCwgYm9vbCBtYXlWU2Nyb2xsKTsKKyAgICB2b2lkIHN0b3AoKTsKIAogcHJp
dmF0ZToKLSAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvblRpbWVy
RmlyZWQoKTsKIAotICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChGbG9hdFBvaW50JiYpPiBtX25vdGlm
eVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uOworICAgIFNjcm9sbEV4dGVudHNDYWxsYmFjayBtX3Nj
cm9sbEV4dGVudHNGdW5jdGlvbjsKKyAgICBOb3RpZnlQb3NpdGlvbkNoYW5nZWRDYWxsYmFjayBt
X25vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uOwogCiAgICAgT3B0aW9uYWw8UGVyQXhpc0Rh
dGE+IG1faG9yaXpvbnRhbERhdGE7CiAgICAgT3B0aW9uYWw8UGVyQXhpc0RhdGE+IG1fdmVydGlj
YWxEYXRhOwogCiAgICAgTW9ub3RvbmljVGltZSBtX3N0YXJ0VGltZTsKLSAgICBUaW1lciBtX2Fu
aW1hdGlvblRpbWVyOworICAgIFJ1bkxvb3A6OlRpbWVyPFNjcm9sbEFuaW1hdGlvbktpbmV0aWM+
IG1fYW5pbWF0aW9uVGltZXI7CiAgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOworICAgIFZlY3Rv
cjxQbGF0Zm9ybVdoZWVsRXZlbnQ+IG1fc2Nyb2xsSGlzdG9yeTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMv
U2Nyb2xsQW5pbWF0b3JHZW5lcmljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVy
aWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmljLmNwcAppbmRleCAyMDhhZjdiODQ3OWVjYWVmNTUzMGNj
YzU1N2I3MzZlYmFiY2JjYjhmLi5mMTUwOTNjNTZhMWVhM2ZkNzJkZDQ0MTQyNTVkZWVjNDcxN2Ew
MTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFu
aW1hdG9yR2VuZXJpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9T
Y3JvbGxBbmltYXRvckdlbmVyaWMuY3BwCkBAIC00MCw3ICs0MCw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RhdGljIGNvbnN0IFNlY29uZHMgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9u
RHVyYXRpb24geyAxX3MgfTsKIHN0YXRpYyBjb25zdCBTZWNvbmRzIG92ZXJmbG93U2Nyb2xsYmFy
c0FuaW1hdGlvbkhpZGVEZWxheSB7IDJfcyB9Owotc3RhdGljIGNvbnN0IFNlY29uZHMgc2Nyb2xs
Q2FwdHVyZVRocmVzaG9sZCB7IDE1MF9tcyB9OwogCiBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5p
bWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVB
cmVhKQogewpAQCAtNTEsMTMgKzUwLDE3IEBAIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6U2Nyb2xs
QW5pbWF0b3JHZW5lcmljKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKICAgICA6IFNj
cm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQogICAgICwgbV9vdmVybGF5U2Nyb2xsYmFyQW5p
bWF0aW9uVGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRvckdlbmVyaWM6Om92ZXJsYXlTY3JvbGxi
YXJBbmltYXRpb25UaW1lckZpcmVkKQogewotICAgIG1fa2luZXRpY0FuaW1hdGlvbiA9IG1ha2VV
bmlxdWU8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4obV9zY3JvbGxhYmxlQXJlYSwgW3RoaXNdKEZs
b2F0UG9pbnQmJiBwb3NpdGlvbikgeworICAgIG1fa2luZXRpY0FuaW1hdGlvbiA9IG1ha2VVbmlx
dWU8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4oCisgICAgICAgIFt0aGlzXSgpIC0+IFNjcm9sbEFu
aW1hdGlvbktpbmV0aWM6OlNjcm9sbEV4dGVudHMgeworICAgICAgICAgICAgcmV0dXJuIHsgbV9z
Y3JvbGxhYmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKSwgbV9zY3JvbGxhYmxlQXJlYS5t
YXhpbXVtU2Nyb2xsUG9zaXRpb24oKSB9OworICAgICAgICB9LAorICAgICAgICBbdGhpc10oRmxv
YXRQb2ludCYmIHBvc2l0aW9uKSB7CiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCi0gICAg
ICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKLSAgICAgICAgICAgIG1fc21vb3RoQW5pbWF0aW9u
LT5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICAgICAgaWYgKG1fc21vb3Ro
QW5pbWF0aW9uKQorICAgICAgICAgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT5zZXRDdXJyZW50
UG9zaXRpb24ocG9zaXRpb24pOwogI2VuZGlmCi0gICAgICAgIHVwZGF0ZVBvc2l0aW9uKFdURk1v
dmUocG9zaXRpb24pKTsKLSAgICB9KTsKKyAgICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uKFdURk1v
dmUocG9zaXRpb24pKTsKKyAgICAgICAgfSk7CiAKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElO
RykKICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkpCkBAIC05
NCw3ICs5Nyw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpzY3JvbGxUb09mZnNldFdp
dGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2ZmCiB7CiAgICAgRmxvYXRQb2ludCBw
b3NpdGlvbiA9IFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQob2Zmc2V0
LCB0b0Zsb2F0U2l6ZShtX3Njcm9sbGFibGVBcmVhLnNjcm9sbE9yaWdpbigpKSk7CiAgICAgbV9r
aW5ldGljQW5pbWF0aW9uLT5zdG9wKCk7Ci0gICAgbV9zY3JvbGxIaXN0b3J5LmNsZWFyKCk7Cisg
ICAgbV9raW5ldGljQW5pbWF0aW9uLT5jbGVhclNjcm9sbEhpc3RvcnkoKTsKIAogI2lmIEVOQUJM
RShTTU9PVEhfU0NST0xMSU5HKQogICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKQEAgLTEwNCw1
NiArMTA3LDMwIEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpzY3JvbGxUb09mZnNldFdp
dGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2ZmCiAgICAgdXBkYXRlUG9zaXRpb24o
V1RGTW92ZShwb3NpdGlvbikpOwogfQogCi1GbG9hdFBvaW50IFNjcm9sbEFuaW1hdG9yR2VuZXJp
Yzo6Y29tcHV0ZVZlbG9jaXR5KCkKLXsKLSAgICBpZiAobV9zY3JvbGxIaXN0b3J5LmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGF1dG8gZmlyc3QgPSBtX3Njcm9sbEhpc3Rv
cnlbMF0udGltZXN0YW1wKCk7Ci0gICAgYXV0byBsYXN0ID0gbV9zY3JvbGxIaXN0b3J5LnJiZWdp
bigpLT50aW1lc3RhbXAoKTsKLQotICAgIGlmIChsYXN0ID09IGZpcnN0KQotICAgICAgICByZXR1
cm4geyB9OwotCi0gICAgRmxvYXRQb2ludCBhY2N1bURlbHRhOwotICAgIGZvciAoY29uc3QgYXV0
byYgc2Nyb2xsRXZlbnQgOiBtX3Njcm9sbEhpc3RvcnkpCi0gICAgICAgIGFjY3VtRGVsdGEgKz0g
RmxvYXRQb2ludChzY3JvbGxFdmVudC5kZWx0YVgoKSwgc2Nyb2xsRXZlbnQuZGVsdGFZKCkpOwot
Ci0gICAgbV9zY3JvbGxIaXN0b3J5LmNsZWFyKCk7Ci0KLSAgICByZXR1cm4gRmxvYXRQb2ludChh
Y2N1bURlbHRhLngoKSAqIC0xIC8gKGxhc3QgLSBmaXJzdCkudmFsdWUoKSwgYWNjdW1EZWx0YS55
KCkgKiAtMSAvIChsYXN0IC0gZmlyc3QpLnZhbHVlKCkpOwotfQotCiBib29sIFNjcm9sbEFuaW1h
dG9yR2VuZXJpYzo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2
ZW50KQogewogICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c3RvcCgpOwogCi0gICAgbV9zY3JvbGxI
aXN0b3J5LnJlbW92ZUFsbE1hdGNoaW5nKFsmZXZlbnRdIChQbGF0Zm9ybVdoZWVsRXZlbnQmIG90
aGVyRXZlbnQpIC0+IGJvb2wgewotICAgICAgICByZXR1cm4gKGV2ZW50LnRpbWVzdGFtcCgpIC0g
b3RoZXJFdmVudC50aW1lc3RhbXAoKSkgPiBzY3JvbGxDYXB0dXJlVGhyZXNob2xkOwotICAgIH0p
OwotCiAjaWYgRU5BQkxFKEtJTkVUSUNfU0NST0xMSU5HKQogICAgIGlmIChldmVudC5pc0VuZE9m
Tm9uTW9tZW50dW1TY3JvbGwoKSkgewogICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGFkZCB0
aGUgZXZlbnQgdG8gdGhlIGhpc3RvcnkgYXMgaXRzIGRlbHRhIHdpbGwgYmUgKDAsIDApLgotICAg
ICAgICBzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRpb25LaW5ldGljKj4obV9raW5ldGljQW5pbWF0
aW9uLmdldCgpKS0+c3RhcnQobV9jdXJyZW50UG9zaXRpb24sIGNvbXB1dGVWZWxvY2l0eSgpLCBt
X3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxiYXIoKSwgbV9zY3JvbGxhYmxlQXJlYS52
ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgbV9raW5ldGljQW5pbWF0aW9uLT5zdGFydCht
X2N1cnJlbnRQb3NpdGlvbiwgbV9raW5ldGljQW5pbWF0aW9uLT5jb21wdXRlVmVsb2NpdHkoKSwg
bV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIG1fc2Nyb2xsYWJsZUFyZWEu
dmVydGljYWxTY3JvbGxiYXIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBp
ZiAoZXZlbnQuaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpKSB7Ci0gICAgICAgIG1f
c2Nyb2xsSGlzdG9yeS5jbGVhcigpOwotICAgICAgICBzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRp
b25LaW5ldGljKj4obV9raW5ldGljQW5pbWF0aW9uLmdldCgpKS0+c3RhcnQobV9jdXJyZW50UG9z
aXRpb24sIGV2ZW50LnN3aXBlVmVsb2NpdHkoKSwgbV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFs
U2Nyb2xsYmFyKCksIG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTY3JvbGxiYXIoKSk7CisgICAg
ICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+Y2xlYXJTY3JvbGxIaXN0b3J5KCk7CisgICAgICAgIG1f
a2luZXRpY0FuaW1hdGlvbi0+c3RhcnQobV9jdXJyZW50UG9zaXRpb24sIGV2ZW50LnN3aXBlVmVs
b2NpdHkoKSwgbV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIG1fc2Nyb2xs
YWJsZUFyZWEudmVydGljYWxTY3JvbGxiYXIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KLSNlbmRpZgogCi0gICAgbV9zY3JvbGxIaXN0b3J5LmFwcGVuZChldmVudCk7CisgICAgbV9r
aW5ldGljQW5pbWF0aW9uLT5hcHBlbmRUb1Njcm9sbEhpc3RvcnkoZXZlbnQpOworI2VuZGlmCiAK
ICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQoZXZlbnQpOwogfQog
CiB2b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6d2lsbEVuZExpdmVSZXNpemUoKQogewotICAg
IG1fa2luZXRpY0FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKLQogI2lmIEVOQUJM
RShTTU9PVEhfU0NST0xMSU5HKQogICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKICAgICAgICAg
bV9zbW9vdGhBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CkBAIC0xNjksOCArMTQ2
LDYgQEAgdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OnVwZGF0ZVBvc2l0aW9uKEZsb2F0UG9p
bnQmJiBwb3NpdGlvbikKIAogdm9pZCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OmRpZEFkZFZlcnRp
Y2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewotICAgIG1fa2luZXRpY0FuaW1h
dGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKLQogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xM
SU5HKQogICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKICAgICAgICAgbV9zbW9vdGhBbmltYXRp
b24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CkBAIC0xODYsOCArMTYxLDYgQEAgdm9pZCBTY3Jv
bGxBbmltYXRvckdlbmVyaWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Ny
b2xsYmFyKQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6ZGlkQWRkSG9yaXpvbnRhbFNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKLSAgICBtX2tpbmV0aWNBbmltYXRpb24t
PnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7Ci0KICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykK
ICAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCiAgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT51
cGRhdGVWaXNpYmxlTGVuZ3RocygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmljLmgKaW5kZXggZjlmY2E4NmYzNzU5ODFj
YjFkMWVlMDcwNGQwMTc5ZThmNjIyMTkwZi4uNmE4OTUzODlkMjRiMmJjMGM0ZmE1ZTg5MDQ2MzI0
YWM0N2RiNGJmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9T
Y3JvbGxBbmltYXRvckdlbmVyaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5l
cmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5oCkBAIC0zNiw2ICszNiw3IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFNjcm9sbEFuaW1hdGlvbjsKK2NsYXNzIFNjcm9sbEFuaW1hdGlv
bktpbmV0aWM7CiAKIGNsYXNzIFNjcm9sbEFuaW1hdG9yR2VuZXJpYyBmaW5hbCA6IHB1YmxpYyBT
Y3JvbGxBbmltYXRvciB7CiBwdWJsaWM6CkBAIC03MSwxNSArNzIsMTIgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGhpZGVPdmVybGF5U2Nyb2xsYmFycygpOwogICAgIHZvaWQgdXBkYXRlT3ZlcmxheVNj
cm9sbGJhcnNPcGFjaXR5KCk7CiAKLSAgICBGbG9hdFBvaW50IGNvbXB1dGVWZWxvY2l0eSgpOwot
CiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAgICAgdm9pZCBlbnN1cmVTbW9vdGhTY3Jv
bGxpbmdBbmltYXRpb24oKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb24+
IG1fc21vb3RoQW5pbWF0aW9uOwogI2VuZGlmCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFu
aW1hdGlvbj4gbV9raW5ldGljQW5pbWF0aW9uOwotICAgIFZlY3RvcjxQbGF0Zm9ybVdoZWVsRXZl
bnQ+IG1fc2Nyb2xsSGlzdG9yeTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9u
S2luZXRpYz4gbV9raW5ldGljQW5pbWF0aW9uOwogICAgIFNjcm9sbGJhciogbV9ob3Jpem9udGFs
T3ZlcmxheVNjcm9sbGJhciB7IG51bGxwdHIgfTsKICAgICBTY3JvbGxiYXIqIG1fdmVydGljYWxP
dmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9vdmVybGF5U2Nyb2xsYmFy
c0xvY2tlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRp
dmVXZWJXaGVlbEV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2
ZW50LmgKaW5kZXggMTQ4ZDcwOTAwOWMzMjgyZjU2ZGE4OTM3NjNmNDc4MjFlZGUyNWE1MC4uMzk5
MWE0NzlmMWYxZDE4NTAwNzE2NzA0ODBjMGMzMDM4MjVjYzA5MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaApAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAg
ICAgTmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCopOwogICAgIE5hdGl2ZVdlYldoZWVsRXZl
bnQoR2RrRXZlbnQqLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhhc2Ug
bW9tZW50dW1QaGFzZSk7CiAjZWxpZiBVU0UoTElCV1BFKQotICAgIE5hdGl2ZVdlYldoZWVsRXZl
bnQoc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3Ip
OworICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50Kiwg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIFdlYldoZWVsRXZlbnQ6OlBoYXNlLCBXZWJXaGVlbEV2
ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNlKTsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICBOYXRp
dmVXZWJXaGVlbEV2ZW50KEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0pOwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJFdmVudC5oIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViRXZlbnQuaAppbmRleCAyMjRlZjUxNTY3ZmRmNWViNzMyMWEzNDEx
ZmFjY2QyODNiNWIyODEzLi4xOTZkYzg5MTA3ZTUwZGYyMjAyYzMyNWI0YjVmYzZiMjI1Njk3ZTk3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJFdmVudC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYkV2ZW50LmgKQEAgLTIwNSw3ICsyMDUsNyBAQCBwdWJsaWM6CiAg
ICAgV2ViV2hlZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24s
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tzLCBH
cmFudWxhcml0eSwgT3B0aW9uU2V0PE1vZGlmaWVyPiwgV2FsbFRpbWUgdGltZXN0YW1wKTsKICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICBXZWJXaGVlbEV2ZW50KFR5cGUsIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0
aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFNpemUmIHdoZWVsVGlja3MsIEdyYW51bGFyaXR5LCBib29sIGRpcmVjdGlvbkludmVydGVkRnJv
bURldmljZSwgUGhhc2UsIFBoYXNlIG1vbWVudHVtUGhhc2UsIGJvb2wgaGFzUHJlY2lzZVNjcm9s
bGluZ0RlbHRhcywgdWludDMyX3Qgc2Nyb2xsQ291bnQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYgdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhLCBPcHRpb25TZXQ8TW9kaWZpZXI+LCBXYWxs
VGltZSB0aW1lc3RhbXApOwotI2VsaWYgUExBVEZPUk0oR1RLKQorI2VsaWYgUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShXUEUpCiAgICAgV2ViV2hlZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3Np
dGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJiB3aGVlbFRpY2tzLCBQaGFzZSwgUGhhc2UgbW9tZW50dW1QaGFzZSwgR3JhbnVsYXJp
dHksIE9wdGlvblNldDxNb2RpZmllcj4sIFdhbGxUaW1lIHRpbWVzdGFtcCk7CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJXaGVlbEV2ZW50LmNwcAppbmRleCAyNDE0NDY1Njg2ZTU3ZGFk
MWRmNDhhMjczNjc2Zjg5NDgwYzIyMWJiLi5mYWJkNGY3NzM0YjYwNWYwOTA2NDdjMDRjNmJhNzFi
OTcyODBiZjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJXaGVlbEV2ZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJXaGVlbEV2ZW50LmNwcApAQCAtNjUs
NyArNjUsNyBAQCBXZWJXaGVlbEV2ZW50OjpXZWJXaGVlbEV2ZW50KFR5cGUgdHlwZSwgY29uc3Qg
SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRQb2ludAogewogICAgIEFTU0VSVChpc1doZWVs
RXZlbnRUeXBlKHR5cGUpKTsKIH0KLSNlbGlmIFBMQVRGT1JNKEdUSykKKyNlbGlmIFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oV1BFKQogV2ViV2hlZWxFdmVudDo6V2ViV2hlZWxFdmVudChUeXBl
IHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBv
c2l0aW9uLCBjb25zdCBGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBGbG9hdFNpemUmIHdoZWVsVGlj
a3MsIFBoYXNlIHBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBHcmFudWxhcml0eSBncmFudWxh
cml0eSwgT3B0aW9uU2V0PE1vZGlmaWVyPiBtb2RpZmllcnMsIFdhbGxUaW1lIHRpbWVzdGFtcCkK
ICAgICA6IFdlYkV2ZW50KHR5cGUsIG1vZGlmaWVycywgdGltZXN0YW1wKQogICAgICwgbV9wb3Np
dGlvbihwb3NpdGlvbikKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBXZWJXaGVlbEV2ZW50OjplbmNv
ZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgbV93aGVlbFRp
Y2tzOwogICAgIGVuY29kZXIgPDwgbV9ncmFudWxhcml0eTsKICAgICBlbmNvZGVyIDw8IG1fZGly
ZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlOwotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9S
TShHVEspCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
V1BFKQogICAgIGVuY29kZXIgPDwgbV9waGFzZTsKICAgICBlbmNvZGVyIDw8IG1fbW9tZW50dW1Q
aGFzZTsKICNlbmRpZgpAQCAtMTE4LDcgKzExOCw3IEBAIGJvb2wgV2ViV2hlZWxFdmVudDo6ZGVj
b2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgV2ViV2hlZWxFdmVudCYgdCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUodC5tX2RpcmVjdGlvbkludmVydGVk
RnJvbURldmljZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSNpZiBQTEFURk9STShDT0NPQSkg
fHwgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKFdQRSkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHQubV9waGFzZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHQubV9tb21lbnR1bVBo
YXNlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2xpYndwZS9OYXRpdmVXZWJX
aGVlbEV2ZW50TGliV1BFLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2xpYndwZS9OYXRpdmVX
ZWJXaGVlbEV2ZW50TGliV1BFLmNwcAppbmRleCBiYTk2MmVkNGRjYzZmM2UxNzYxNzM5ZWU2M2Nk
NDhhM2M1YWE3OGI5Li43YWY4MTIzOGZkMDBlZTNjNTAyMWJmNmE5NTI5ZDYwOTU5NmJhODNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9saWJ3cGUvTmF0aXZlV2ViV2hlZWxFdmVu
dExpYldQRS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbGlid3BlL05hdGl2ZVdlYldo
ZWVsRXZlbnRMaWJXUEUuY3BwCkBAIC0zMiw4ICszMiw4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCi1OYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KHN0cnVjdCB3cGVf
aW5wdXRfYXhpc19ldmVudCogZXZlbnQsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQotICAgIDog
V2ViV2hlZWxFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQs
IGRldmljZVNjYWxlRmFjdG9yKSkKK05hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVs
RXZlbnQoc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiBldmVudCwgZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFz
ZSBtb21lbnR1bVBoYXNlKQorICAgIDogV2ViV2hlZWxFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNy
ZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQsIGRldmljZVNjYWxlRmFjdG9yLCBwaGFzZSwgbW9tZW50
dW1QaGFzZSkpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2xpYndw
ZS9XZWJFdmVudEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbGlid3BlL1dlYkV2
ZW50RmFjdG9yeS5jcHAKaW5kZXggOTY2MDY0YjA1NGRkYzJhNjAzMzJkM2I2ODViMzIzZThiOTI5
ODIzZC4uZmM0N2ViYWU0M2U2NjU4ODRhYTk1NzllYjExMGJmOWQ5YzY1ZTc0ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbGlid3BlL1dlYkV2ZW50RmFjdG9yeS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvbGlid3BlL1dlYkV2ZW50RmFjdG9yeS5jcHAKQEAgLTE0Miw3
ICsxNDIsNyBAQCBXZWJNb3VzZUV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VF
dmVudChzdHJ1Y3Qgd3BlX2lucHV0X3BvaW50ZXJfZXZlbgogICAgICAgICAwLCAwLCAwLCBjbGlj
a0NvdW50LCBtb2RpZmllcnNGb3JFdmVudE1vZGlmaWVycyhldmVudC0+bW9kaWZpZXJzKSwgd2Fs
bFRpbWVGb3JFdmVudFRpbWUoZXZlbnQtPnRpbWUpKTsKIH0KIAotV2ViV2hlZWxFdmVudCBXZWJF
dmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2
ZW50KiBldmVudCwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCitXZWJXaGVlbEV2ZW50IFdlYkV2
ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZl
bnQqIGV2ZW50LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgV2ViV2hlZWxFdmVudDo6UGhhc2Ug
cGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpCiB7CiAgICAgV2ViQ29y
ZTo6SW50UG9pbnQgcG9zaXRpb24oZXZlbnQtPngsIGV2ZW50LT55KTsKICAgICBwb3NpdGlvbi5z
Y2FsZSgxIC8gZGV2aWNlU2NhbGVGYWN0b3IpOwpAQCAtMTY4LDExICsxNjgsMTkgQEAgV2ViV2hl
ZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoc3RydWN0IHdwZV9p
bnB1dF9heGlzX2V2ZW50KgogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIFdlYldoZWVsRXZl
bnQoV2ViRXZlbnQ6OldoZWVsLCBwb3NpdGlvbiwgcG9zaXRpb24sCi0gICAgICAgICAgICBkZWx0
YSwgd2hlZWxUaWNrcywgV2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsCisg
ICAgICAgICAgICBkZWx0YSwgd2hlZWxUaWNrcywgcGhhc2UsIG1vbWVudHVtUGhhc2UsCisgICAg
ICAgICAgICBXZWJXaGVlbEV2ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwKICAgICAgICAg
ICAgIE9wdGlvblNldDxXZWJFdmVudDo6TW9kaWZpZXI+IHsgfSwgd2FsbFRpbWVGb3JFdmVudFRp
bWUoZXZlbnQtPnRpbWUpKTsKICAgICB9CiAjZW5kaWYKIAorICAgIGlmIChldmVudC0+dHlwZSA9
PSB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfdHlwZV9udWxsKSB7CisgICAgICAgIHJldHVybiBXZWJX
aGVlbEV2ZW50KFdlYkV2ZW50OjpXaGVlbCwgcG9zaXRpb24sIHBvc2l0aW9uLAorICAgICAgICAg
ICAgZGVsdGEsIHdoZWVsVGlja3MsIHBoYXNlLCBtb21lbnR1bVBoYXNlLAorICAgICAgICAgICAg
V2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsCisgICAgICAgICAgICBPcHRp
b25TZXQ8V2ViRXZlbnQ6Ok1vZGlmaWVyPiB7IH0sIHdhbGxUaW1lRm9yRXZlbnRUaW1lKGV2ZW50
LT50aW1lKSk7CisgICAgfQorCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXJkLWNvZGUg
dGhpcy4KICAgICBlbnVtIEF4aXMgewogICAgICAgICBWZXJ0aWNhbCwKQEAgLTIwMCw3ICsyMDgs
OCBAQCBXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChz
dHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQqCiAgICAgfTsKIAogICAgIHJldHVybiBXZWJXaGVl
bEV2ZW50KFdlYkV2ZW50OjpXaGVlbCwgcG9zaXRpb24sIHBvc2l0aW9uLAotICAgICAgICBkZWx0
YSwgd2hlZWxUaWNrcywgV2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsCisg
ICAgICAgIGRlbHRhLCB3aGVlbFRpY2tzLCBwaGFzZSwgbW9tZW50dW1QaGFzZSwKKyAgICAgICAg
V2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsCiAgICAgICAgIE9wdGlvblNl
dDxXZWJFdmVudDo6TW9kaWZpZXI+IHsgfSwgd2FsbFRpbWVGb3JFdmVudFRpbWUoZXZlbnQtPnRp
bWUpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbGlid3BlL1dlYkV2
ZW50RmFjdG9yeS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbGlid3BlL1dlYkV2ZW50RmFjdG9y
eS5oCmluZGV4IDM1OGJlM2VkOTA3M2FjN2Y4MjBjY2EwY2U2ZjY4NjRmMDlhZTM0ODAuLjRiNzg3
OTRiM2Q0NWJmMzhmNzMwNDQ4YThjMWVlODNhNWE1MWJhYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL2xpYndwZS9XZWJFdmVudEZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9saWJ3cGUvV2ViRXZlbnRGYWN0b3J5LmgKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3Mg
V2ViRXZlbnRGYWN0b3J5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgV2ViS2V5Ym9hcmRFdmVudCBj
cmVhdGVXZWJLZXlib2FyZEV2ZW50KHN0cnVjdCB3cGVfaW5wdXRfa2V5Ym9hcmRfZXZlbnQqLCBj
b25zdCBTdHJpbmcmLCBib29sIGhhbmRsZWRCeUlucHV0TWV0aG9kLCBPcHRpb25hbDxWZWN0b3I8
V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+PiYmLCBPcHRpb25hbDxFZGl0aW5nUmFuZ2U+
JiYpOwogICAgIHN0YXRpYyBXZWJNb3VzZUV2ZW50IGNyZWF0ZVdlYk1vdXNlRXZlbnQoc3RydWN0
IHdwZV9pbnB1dF9wb2ludGVyX2V2ZW50KiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpOwotICAg
IHN0YXRpYyBXZWJXaGVlbEV2ZW50IGNyZWF0ZVdlYldoZWVsRXZlbnQoc3RydWN0IHdwZV9pbnB1
dF9heGlzX2V2ZW50KiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIHN0YXRpYyBXZWJX
aGVlbEV2ZW50IGNyZWF0ZVdlYldoZWVsRXZlbnQoc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50
KiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIFdlYldoZWVsRXZlbnQ6OlBoYXNlLCBXZWJXaGVl
bEV2ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNlKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQog
ICAgIHN0YXRpYyBXZWJUb3VjaEV2ZW50IGNyZWF0ZVdlYlRvdWNoRXZlbnQoc3RydWN0IHdwZV9p
bnB1dF90b3VjaF9ldmVudCosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKTsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcApp
bmRleCBiOGQyOWM0ZjlkNzQxNTU3OWI0ZDc2MzUxOThlMTMxNGU2Y2QxZmRjLi5jOGI0MWY0MDc3
NzRkMjMzN2U5OWNjN2Y5MTUxZWM2NWJlM2ZjNTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMjE3LDcgKzIxNyw3IEBA
IHZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJU
b3VjaEV2ZW50JiB0b3VjaEV2ZW50LCBiCiAgICAgaWYgKHNjcm9sbEdlc3R1cmVDb250cm9sbGVy
LmhhbmRsZUV2ZW50KHRvdWNoUG9pbnQpKSB7CiAgICAgICAgIHN0cnVjdCB3cGVfaW5wdXRfYXhp
c19ldmVudCogYXhpc0V2ZW50ID0gc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuYXhpc0V2ZW50KCk7
CiAgICAgICAgIGlmIChheGlzRXZlbnQtPnR5cGUgIT0gd3BlX2lucHV0X2F4aXNfZXZlbnRfdHlw
ZV9udWxsKQotICAgICAgICAgICAgcGFnZS5oYW5kbGVXaGVlbEV2ZW50KFdlYktpdDo6TmF0aXZl
V2ViV2hlZWxFdmVudChheGlzRXZlbnQsIG1fdmlldy5wYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3Io
KSkpOworICAgICAgICAgICAgcGFnZS5oYW5kbGVXaGVlbEV2ZW50KFdlYktpdDo6TmF0aXZlV2Vi
V2hlZWxFdmVudChheGlzRXZlbnQsIG1fdmlldy5wYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwg
V2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBo
YXNlTm9uZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuY3Bw
CmluZGV4IDUyYzNiNDQ5MGU0MjhiODk4NTZhNjQwZGY3N2Q1Zjk5NzEzZjIxMzMuLjMxM2NkOTE4
OTFmYjM1ZjFiYzhjNGU1ODZmYTlhZmJjODEyNGFmZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuY3Bw
CkBAIC01OCw3ICs1OCw3IEBAIGJvb2wgU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2
ZW50KGNvbnN0IHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfcmF3CiAgICAgICAgICAgICAg
ICAgdG91Y2hQb2ludC0+dGltZSwgbV9zdGFydC54LCBtX3N0YXJ0LnksCiAgICAgICAgICAgICAg
ICAgMCwgMCwgMCwKICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBtX2F4aXNFdmVudC54X2F4
aXMgPSBtX29mZnNldC54IC0gdG91Y2hQb2ludC0+eDsKKyAgICAgICAgICAgIG1fYXhpc0V2ZW50
LnhfYXhpcyA9IC0obV9vZmZzZXQueCAtIHRvdWNoUG9pbnQtPngpOwogICAgICAgICAgICAgbV9h
eGlzRXZlbnQueV9heGlzID0gLShtX29mZnNldC55IC0gdG91Y2hQb2ludC0+eSk7CiAjZWxzZQog
ICAgICAgICAgICAgbV9heGlzRXZlbnQgPSB7CkBAIC02OSw2ICs2OSw3IEBAIGJvb2wgU2Nyb2xs
R2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KGNvbnN0IHN0cnVjdCB3cGVfaW5wdXRfdG91
Y2hfZXZlbnRfcmF3CiAjZW5kaWYKICAgICAgICAgICAgIG1fb2Zmc2V0LnggPSB0b3VjaFBvaW50
LT54OwogICAgICAgICAgICAgbV9vZmZzZXQueSA9IHRvdWNoUG9pbnQtPnk7CisgICAgICAgICAg
ICBtX3BoYXNlID0gV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQ2hhbmdlZDsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc4
LDE1ICs3OSwxOSBAQCBib29sIFNjcm9sbEdlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVFdmVudChj
b25zdCBzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50X3JhdwogI2lmIFdQRV9DSEVDS19WRVJT
SU9OKDEsIDUsIDApCiAgICAgICAgICAgICBtX2F4aXNFdmVudC5iYXNlID0gewogICAgICAgICAg
ICAgICAgIHdwZV9pbnB1dF9heGlzX2V2ZW50X3R5cGVfbnVsbCwKLSAgICAgICAgICAgICAgICAw
LCAwLCAwLCAwLCAwLCAwCisgICAgICAgICAgICAgICAgdG91Y2hQb2ludC0+dGltZSwgbV9zdGFy
dC54LCBtX3N0YXJ0LnksCisgICAgICAgICAgICAgICAgMCwgMCwgMAogICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgIG1fYXhpc0V2ZW50LnhfYXhpcyA9IG1fYXhpc0V2ZW50LnlfYXhpcyA9IDA7
CiAjZWxzZQogICAgICAgICAgICAgbV9heGlzRXZlbnQgPSB7CiAgICAgICAgICAgICAgICAgd3Bl
X2lucHV0X2F4aXNfZXZlbnRfdHlwZV9udWxsLAotICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAs
IDAsIDAKKyAgICAgICAgICAgICAgICB0b3VjaFBvaW50LT50aW1lLCBtX3N0YXJ0LngsIG1fc3Rh
cnQueSwKKyAgICAgICAgICAgICAgICAwLCAwLCAwCiAgICAgICAgICAgICB9OwogI2VuZGlmCisg
ICAgICAgICAgICBtX29mZnNldC54ID0gbV9vZmZzZXQueSA9IDA7CisgICAgICAgICAgICBtX3Bo
YXNlID0gV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlRW5kZWQ7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVDb250cm9sbGVyLmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVDb250cm9sbGVy
LmgKaW5kZXggMjM0ZTk0YTFjYzhlYWFjY2QyNDUyNGM1ZWY1NmFkYjViOGRlYTk4Zi4uMmQ4N2Y5
NWMyNGVjNWEzOWI3ZjEwZGU2YWE1NWVkZTgyNmExNjg4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL3dwZS9TY3JvbGxHZXN0dXJlQ29udHJvbGxlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaApA
QCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIldlYkV2ZW50Lmgi
CiAjaW5jbHVkZSA8d3BlL3dwZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQzLDYgKzQ0
LDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgV2ViV2hlZWxFdmVudDo6UGhhc2Ug
cGhhc2UoKSB7IHJldHVybiBtX3BoYXNlOyB9CisKICAgICBib29sIGlzSGFuZGxpbmcoKSBjb25z
dCB7IHJldHVybiBtX2hhbmRsaW5nOyB9CiAgICAgYm9vbCBoYW5kbGVFdmVudChjb25zdCBzdHJ1
Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50X3JhdyopOwogCkBAIC02NCw2ICs2Nyw3IEBAIHByaXZh
dGU6CiAjZWxzZQogICAgIHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCBtX2F4aXNFdmVudDsK
ICNlbmRpZgorICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1fcGhhc2UgeyBXZWJXaGVlbEV2ZW50
OjpQaGFzZTo6UGhhc2VOb25lIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwCmluZGV4IDk1YWIxNzZlODNm
NTk3MTRiMzVlNWQ3NGIyOGMxNGExMjM3ZTU3MGMuLmNjODFlZWM2YmY3MmEyMDc1Yzg2MTFmODA3
NmU5MmI4OGZlNmQ3ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvV1BFVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVW
aWV3LmNwcApAQCAtMTYxLDcgKzE2MSw3IEBAIFZpZXc6OlZpZXcoc3RydWN0IHdwZV92aWV3X2Jh
Y2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mIGJhc2VDCiAgICAg
ICAgIFtdKHZvaWQqIGRhdGEsIHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCogZXZlbnQpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGF1dG8mIHBhZ2UgPSByZWludGVycHJldF9jYXN0PFZpZXcq
PihkYXRhKS0+cGFnZSgpOwotICAgICAgICAgICAgcGFnZS5oYW5kbGVXaGVlbEV2ZW50KFdlYktp
dDo6TmF0aXZlV2ViV2hlZWxFdmVudChldmVudCwgcGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7
CisgICAgICAgICAgICBwYWdlLmhhbmRsZVdoZWVsRXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJXaGVl
bEV2ZW50KGV2ZW50LCBwYWdlLmRldmljZVNjYWxlRmFjdG9yKCksIFdlYldoZWVsRXZlbnQ6OlBo
YXNlOjpQaGFzZU5vbmUsIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZU5vbmUpKTsKICAgICAg
ICAgfSwKICAgICAgICAgLy8gaGFuZGxlX3RvdWNoX2V2ZW50CiAgICAgICAgIFtdKHZvaWQqIGRh
dGEsIHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnQqIGV2ZW50KQpAQCAtMTc1LDkgKzE3NSw3
IEBAIFZpZXc6OlZpZXcoc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQ
STo6UGFnZUNvbmZpZ3VyYXRpb24mIGJhc2VDCiAgICAgICAgICAgICBpZiAoc2Nyb2xsR2VzdHVy
ZUNvbnRyb2xsZXIuaXNIYW5kbGluZygpKSB7CiAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0
IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXcqIHRvdWNoUG9pbnQgPSB0b3VjaEV2ZW50Lm5hdGl2
ZUZhbGxiYWNrVG91Y2hQb2ludCgpOwogICAgICAgICAgICAgICAgIGlmICh0b3VjaFBvaW50LT50
eXBlICE9IHdwZV9pbnB1dF90b3VjaF9ldmVudF90eXBlX251bGwgJiYgc2Nyb2xsR2VzdHVyZUNv
bnRyb2xsZXIuaGFuZGxlRXZlbnQodG91Y2hQb2ludCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
c3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiBheGlzRXZlbnQgPSBzY3JvbGxHZXN0dXJlQ29u
dHJvbGxlci5heGlzRXZlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF4aXNFdmVudC0+
dHlwZSAhPSB3cGVfaW5wdXRfYXhpc19ldmVudF90eXBlX251bGwpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBwYWdlLmhhbmRsZVdoZWVsRXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJXaGVlbEV2ZW50
KGF4aXNFdmVudCwgcGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgICAgICAgICAgICAg
ICAgIHBhZ2UuaGFuZGxlV2hlZWxFdmVudChXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQoc2Ny
b2xsR2VzdHVyZUNvbnRyb2xsZXIuYXhpc0V2ZW50KCksIHBhZ2UuZGV2aWNlU2NhbGVGYWN0b3Io
KSwgc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIucGhhc2UoKSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6
OlBoYXNlTm9uZSkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394478</attachid>
            <date>2020-03-25 03:04:47 -0700</date>
            <delta_ts>2020-03-27 02:01:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209230-20200325100445.patch</filename>
            <type>text/plain</type>
            <size>40952</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4ODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg4NTRlOWFkMDU4ODgw
YTg4ODExNGMzZDUwYWJjMTdkMDMyOWU1My4uOThjMWEzMzM1OTNiZGZkNGY3NWU5YzQ5Zjk0OTU4
NDQyNGNkMTA5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIwLTAzLTI1ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEVuYWJsZSBr
aW5ldGljIHNjcm9sbGluZyB3aXRoIGFzeW5jIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5MjMwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgU2Nyb2xsQW5pbWF0aW9uS2lu
ZXRpYyBzbyB0aGF0IGl0IG5vIGxvbmdlciBkZXBlbmRzIG9uCisgICAgICAgIFNjcm9sbGFibGVB
cmVhLCB1c2VzIFJ1bkxvb3A6OlRpbWVyIGFuZCBpcyByZXNwb25zaWJsZSBmb3IgdHJhY2tpbmcK
KyAgICAgICAgdGhlIGhpc3Rvcnkgb2Ygc2Nyb2xsIGV2ZW50cy4gVGhpcyBhbGxvd3MgaXQgdG8g
YmUgdXNlZCBpbgorICAgICAgICBTY3JvbGxpbmdUcmVlKlNjcm9sbGluZ05vZGVOaWNvc2lhIHRv
IHByb3ZpZGUga2luZXRpYyBzY3JvbGxpbmcgd2hlbgorICAgICAgICBhc3luYyBzY3JvbGxpbmcg
aXMgZW5hYmxlZCwgb24gR1RLIGFuZCBXUEUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGlz
IGp1c3QgZW5hYmxlcyBleGlzdGluZyBmdW5jdGlvbmFsaXR5IGluIG1vcmUgc2l0dWF0aW9ucy4K
KworICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjpzY3JvbGxU
byk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUu
aDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Njcm9sbGluZ1RyZWVGcmFtZVNj
cm9sbGluZ05vZGVOaWNvc2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVOaWNvc2lhOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
Tmljb3NpYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlTmljb3NpYTo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTmljb3NpYTo6c3RvcFNjcm9sbEFuaW1hdGlvbnMpOgor
ICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZU5pY29zaWEuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Njcm9s
bGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVOaWNvc2lhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVOaWNvc2lhOjpTY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTmljb3NpYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTmljb3NpYTo6aGFuZGxlV2hlZWxFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTmlj
b3NpYTo6c3RvcFNjcm9sbEFuaW1hdGlvbnMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL25p
Y29zaWEvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZU5pY29zaWEuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWMpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6YXBwZW5kVG9TY3JvbGxIaXN0
b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OmNsZWFyU2Ny
b2xsSGlzdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjpj
b21wdXRlVmVsb2NpdHkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uS2luZXRp
Yzo6c3RhcnQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OlNjcm9sbEFuaW1hdG9yR2Vu
ZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OnNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckdlbmVyaWM6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JHZW5lcmljOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckdlbmVyaWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6
CisgICAgICAgICogcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuaDoKKwog
MjAyMC0wMy0yMyAgQ2hhcmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dTdHJlYW1lcl0gRmFpbCBncmFjZWZ1bGx5IGluIHRoZSBhYnNlbmNlIG9mIGEgV2ViVlRU
IGVuY29kZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM0YjE2MTkwZGE3ZDIwZjVjNTU2YTczNGUxZDgwZWViZjAy
MTdhNTQuLjA3YWE4YmEyODNkYTVlMzQyNWRiNjAwYzAyYjFhOTY2NjFhNjhjODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzMgQEAKKzIwMjAtMDMtMjUgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gRW5hYmxlIGtpbmV0aWMgc2Nyb2xsaW5nIHdpdGgg
YXN5bmMgc2Nyb2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDkyMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBNb2RpZnkgV1BFIG1vdXNld2hlZWwgZXZlbnQgZGVsaXZlcnkgc28gdGhhdCBpdCBp
bmNsdWRlcyB0aGUgbmVjZXNzYXJ5CisgICAgICAgIHBoYXNlcyBuZWVkZWQgdG8gaW5mZXIgcHJl
c3MvcmVsZWFzZSB0aW1lcyBhbmQgYWxsb3cgZm9yIGtpbmV0aWMKKyAgICAgICAgc2Nyb2xsaW5n
LgorCisgICAgICAgICogU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaDoKKyAgICAgICAgKiBT
aGFyZWQvV2ViRXZlbnQuaDoKKyAgICAgICAgKiBTaGFyZWQvV2ViV2hlZWxFdmVudC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYldoZWVsRXZlbnQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYldoZWVsRXZlbnQ6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL2xpYndwZS9O
YXRpdmVXZWJXaGVlbEV2ZW50TGliV1BFLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmF0aXZlV2Vi
V2hlZWxFdmVudDo6TmF0aXZlV2ViV2hlZWxFdmVudCk6CisgICAgICAgICogU2hhcmVkL2xpYndw
ZS9XZWJFdmVudEZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rvcnk6
OmNyZWF0ZVdlYldoZWVsRXZlbnQpOgorICAgICAgICAqIFNoYXJlZC9saWJ3cGUvV2ViRXZlbnRG
YWN0b3J5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3VjaEV2ZW50KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9TY3JvbGxHZXN0dXJlQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlNjcm9sbEdlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVFdmVudCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaDoK
KyAgICAgICAgKFdlYktpdDo6U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6OnBoYXNlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcDoKKyAgICAgICAgKFdLV1BFOjptX2Jh
Y2tlbmQpOgorCiAyMDIwLTAzLTIzICBDaHJpcyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbV1BFXSBBc3luY1Njcm9sbGluZzogaG9yaXpvbnRhbCBzY3JvbGxpbmcgaXMgaW52
ZXJ0ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcAppbmRleCBlYTI4ZTA5NTUzMDMwOTRmNjNkM2Zm
YTY1Y2UwYjg1OWJiZWUyOTAzLi5lOGU2N2U5MGJhODg2MmZiZDAyZDJkMTljODI3ZGQ1YzlkNWQz
ZjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCkBAIC0xNjksNiArMTY5LDkgQEAgdm9pZCBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6c2Nyb2xsVG8oY29uc3QgRmxvYXRQb2ludCYgcG9z
aXRpb24sIFNjcm9sbFR5cGUKICAgICBpZiAocG9zaXRpb24gPT0gbV9jdXJyZW50U2Nyb2xsUG9z
aXRpb24pCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChzY3JvbGxUeXBlID09IFNjcm9sbFR5
cGU6OlByb2dyYW1tYXRpYykKKyAgICAgICAgc3RvcFNjcm9sbEFuaW1hdGlvbnMoKTsKKwogICAg
IHNjcm9sbGluZ1RyZWUoKS5zZXRJc0hhbmRsaW5nUHJvZ3JhbW1hdGljU2Nyb2xsKHNjcm9sbFR5
cGUgPT0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljKTsKICAgICAKICAgICBtX2N1cnJlbnRTY3Jv
bGxQb3NpdGlvbiA9IGFkanVzdGVkU2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIGNsYW1wKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZS5oCmluZGV4IDJiNDJlNDM2ZjJjYzliOTRmZjA2Njc1ZTc3ODY2YjBkYzAz
ZmU3ZTMuLmU4OTVjNmQ4MDMzNjQxNmM3YmY1ZmIwOGUzMWM4MTBiMDZlZmU5YzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGUuaApAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY3JvbGxU
byhjb25zdCBGbG9hdFBvaW50JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9s
bENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwogICAgIHZvaWQgc2Nyb2xsQnko
Y29uc3QgRmxvYXRTaXplJiwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBl
ZCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFNjcm9sbEFuaW1hdGlvbnMoKSB7IH07CisKICAg
ICB2b2lkIHdhc1Njcm9sbGVkQnlEZWxlZ2F0ZWRTY3JvbGxpbmcoY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24sIE9wdGlvbmFsPEZsb2F0UmVjdD4gb3ZlcnJpZGVMYXlvdXRWaWV3cG9ydCA9IHsg
fSwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbiA9IFNjcm9sbGluZ0xheWVyUG9zaXRpb25B
Y3Rpb246OlN5bmMpOwogICAgIAogI2lmIEVOQUJMRShTQ1JPTExJTkdfVEhSRUFEKQpAQCAtNzUs
NiArNzcsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5C
eVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMuaG9yaXpv
bnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGU7IH0KICAgICBib29sIHZlcnRpY2FsU2Nyb2xsYmFy
SGlkZGVuQnlTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJz
LnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZTsgfQorICAgIGJvb2wgY2FuSGF2ZUhvcml6
b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhUGFyYW1ldGVy
cy5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSAhPSBTY3JvbGxiYXJBbHdheXNPZmY7IH0KKyAgICBi
b29sIGNhbkhhdmVWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJs
ZUFyZWFQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSAhPSBTY3JvbGxiYXJBbHdheXNP
ZmY7IH0KICAgICBib29sIGNhbkhhdmVTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jv
bGxhYmxlQXJlYVBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgIT0gU2Nyb2xsYmFy
QWx3YXlzT2ZmIHx8IG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsYmFy
TW9kZSAhPSBTY3JvbGxiYXJBbHdheXNPZmY7IH0KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Nj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVOaWNvc2lhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU5p
Y29zaWEuY3BwCmluZGV4IGE2YTUzNzdkMDE0YWNlYzgyMzE4M2UwOWI1MGUxYzk0MzhiMTc3M2Eu
LjhkZmFhMmQyMGQwM2MzMDIyYjA3Y2VjMzJkNmIyY2NhMDJkNzE5ZWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZU5pY29zaWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L25pY29zaWEvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU5pY29zaWEuY3BwCkBAIC0z
Nyw2ICszNywxMCBAQAogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2Rl
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgogCisjaWYgRU5BQkxFKEtJTkVUSUNfU0NS
T0xMSU5HKQorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbktpbmV0aWMuaCIKKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlZjxTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
PiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTmljb3NpYTo6Y3JlYXRlKFNjcm9sbGlu
Z1RyZWUmIHNjcm9sbGluZ1RyZWUsIFNjcm9sbGluZ05vZGVUeXBlIG5vZGVUeXBlLCBTY3JvbGxp
bmdOb2RlSUQgbm9kZUlEKQpAQCAtNDcsNiArNTEsMjAgQEAgUmVmPFNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGU+IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVOaWNvc2lhOjpj
cmUKIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVOaWNvc2lhOjpTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlTmljb3NpYShTY3JvbGxpbmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBT
Y3JvbGxpbmdOb2RlVHlwZSBub2RlVHlwZSwgU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkKICAgICA6
IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUoc2Nyb2xsaW5nVHJlZSwgbm9kZVR5cGUs
IG5vZGVJRCkKIHsKKyNpZiBFTkFCTEUoS0lORVRJQ19TQ1JPTExJTkcpCisgICAgbV9raW5ldGlj
QW5pbWF0aW9uID0gbWFrZVVuaXF1ZTxTY3JvbGxBbmltYXRpb25LaW5ldGljPigKKyAgICAgICAg
W3RoaXNdKCkgLT4gU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6U2Nyb2xsRXh0ZW50cyB7CisgICAg
ICAgICAgICByZXR1cm4geyBJbnRQb2ludChtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSksIEludFBv
aW50KG1heGltdW1TY3JvbGxQb3NpdGlvbigpKSB9OworICAgICAgICB9LAorICAgICAgICBbdGhp
c10oRmxvYXRQb2ludCYmIHBvc2l0aW9uKSB7CisgICAgICAgICAgICBhdXRvKiBzY3JvbGxMYXll
ciA9IHN0YXRpY19jYXN0PE5pY29zaWE6OlBsYXRmb3JtTGF5ZXIqPihzY3JvbGxlZENvbnRlbnRz
TGF5ZXIoKSk7CisgICAgICAgICAgICBBU1NFUlQoc2Nyb2xsTGF5ZXIpOworICAgICAgICAgICAg
YXV0byYgY29tcG9zaXRpb25MYXllciA9IGRvd25jYXN0PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5
ZXI+KCpzY3JvbGxMYXllcik7CisKKyAgICAgICAgICAgIGF1dG8gdXBkYXRlU2NvcGUgPSBjb21w
b3NpdGlvbkxheWVyLmNyZWF0ZVVwZGF0ZVNjb3BlKCk7CisgICAgICAgICAgICBzY3JvbGxUbyhw
b3NpdGlvbik7CisgICAgICAgIH0pOworI2VuZGlmCiB9CiAKIFNjcm9sbGluZ1RyZWVGcmFtZVNj
cm9sbGluZ05vZGVOaWNvc2lhOjp+U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU5pY29z
aWEoKSA9IGRlZmF1bHQ7CkBAIC0xMDgsMTQgKzEyNiwzOCBAQCBTY3JvbGxpbmdFdmVudFJlc3Vs
dCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTmljb3NpYTo6aGFuZGxlV2hlZWxFdmVu
dChjbwogCiAgICAgICAgIGF1dG8gdXBkYXRlU2NvcGUgPSBjb21wb3NpdGlvbkxheWVyLmNyZWF0
ZVVwZGF0ZVNjb3BlKCk7CiAgICAgICAgIHNjcm9sbEJ5KHsgLXdoZWVsRXZlbnQuZGVsdGFYKCks
IC13aGVlbEV2ZW50LmRlbHRhWSgpIH0pOworCisjaWYgRU5BQkxFKEtJTkVUSUNfU0NST0xMSU5H
KQorICAgICAgICBtX2tpbmV0aWNBbmltYXRpb24tPmFwcGVuZFRvU2Nyb2xsSGlzdG9yeSh3aGVl
bEV2ZW50KTsKKyNlbmRpZgogICAgIH0KIAorI2lmIEVOQUJMRShLSU5FVElDX1NDUk9MTElORykK
KyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0b3AoKTsKKyAgICBpZiAod2hlZWxFdmVudC5pc0Vu
ZE9mTm9uTW9tZW50dW1TY3JvbGwoKSkgeworICAgICAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0
YXJ0KGN1cnJlbnRTY3JvbGxQb3NpdGlvbigpLCBtX2tpbmV0aWNBbmltYXRpb24tPmNvbXB1dGVW
ZWxvY2l0eSgpLCBjYW5IYXZlSG9yaXpvbnRhbFNjcm9sbGJhcigpLCBjYW5IYXZlVmVydGljYWxT
Y3JvbGxiYXIoKSk7CisgICAgICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+Y2xlYXJTY3JvbGxIaXN0
b3J5KCk7CisgICAgfQorICAgIGlmICh3aGVlbEV2ZW50LmlzVHJhbnNpdGlvbmluZ1RvTW9tZW50
dW1TY3JvbGwoKSkgeworICAgICAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0YXJ0KGN1cnJlbnRT
Y3JvbGxQb3NpdGlvbigpLCB3aGVlbEV2ZW50LnN3aXBlVmVsb2NpdHkoKSwgY2FuSGF2ZUhvcml6
b250YWxTY3JvbGxiYXIoKSwgY2FuSGF2ZVZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgICAgICBt
X2tpbmV0aWNBbmltYXRpb24tPmNsZWFyU2Nyb2xsSGlzdG9yeSgpOworICAgIH0KKyNlbmRpZgor
CiAgICAgc2Nyb2xsaW5nVHJlZSgpLnNldE9yQ2xlYXJMYXRjaGVkTm9kZSh3aGVlbEV2ZW50LCBz
Y3JvbGxpbmdOb2RlSUQoKSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byByZXR1cm4g
d2hldGhlciB0aGUgZXZlbnQgd2FzIGhhbmRsZWQuCiAgICAgcmV0dXJuIFNjcm9sbGluZ0V2ZW50
UmVzdWx0OjpEaWRIYW5kbGVFdmVudDsKIH0KIAordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3Jv
bGxpbmdOb2RlTmljb3NpYTo6c3RvcFNjcm9sbEFuaW1hdGlvbnMoKQoreworI2lmIEVOQUJMRShL
SU5FVElDX1NDUk9MTElORykKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0b3AoKTsKKyAgICBt
X2tpbmV0aWNBbmltYXRpb24tPmNsZWFyU2Nyb2xsSGlzdG9yeSgpOworI2VuZGlmCit9CisKIEZs
b2F0UG9pbnQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU5pY29zaWE6OmFkanVzdGVk
U2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIFNjcm9sbENsYW1waW5n
IGNsYW1waW5nKSBjb25zdAogewogICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb24ocm91bmRm
KHBvc2l0aW9uLngoKSksIHJvdW5kZihwb3NpdGlvbi55KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZU5pY29zaWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEv
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU5pY29zaWEuaAppbmRleCAxNzE2ODdkYjgy
YTc2NzY4YzIwOGJhY2FhMmMwMTZjY2YzNmM3NDNhLi5kYWQxYWNkZDc2M2MwNjczMGIwNWY0NTIw
NTM3OTQzOTViYTY4MTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9uaWNvc2lhL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVOaWNvc2lhLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbmljb3NpYS9TY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlTmljb3NpYS5oCkBAIC0zOSw2ICszOSw3IEBAIGNsYXNzIENvbXBvc2l0aW9u
TGF5ZXI7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNjcm9sbEFuaW1hdGlvbktp
bmV0aWM7CiAKIGNsYXNzIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVOaWNvc2lhIGZp
bmFsIDogcHVibGljIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUgewogcHVibGljOgpA
QCAtNTMsNiArNTQsOCBAQCBwcml2YXRlOgogCiAgICAgU2Nyb2xsaW5nRXZlbnRSZXN1bHQgaGFu
ZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKIAorICAg
IHZvaWQgc3RvcFNjcm9sbEFuaW1hdGlvbnMoKSBvdmVycmlkZTsKKwogICAgIEZsb2F0UG9pbnQg
YWRqdXN0ZWRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiwgU2Nyb2xsQ2xhbXBpbmcp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBjdXJyZW50U2Nyb2xsUG9zaXRpb25DaGFuZ2Vk
KCkgb3ZlcnJpZGU7CkBAIC02Niw2ICs2OSwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxOaWNv
c2lhOjpDb21wb3NpdGlvbkxheWVyPiBtX2NvbnRlbnRTaGFkb3dMYXllcjsKICAgICBSZWZQdHI8
Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9oZWFkZXJMYXllcjsKICAgICBSZWZQdHI8Tmlj
b3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9mb290ZXJMYXllcjsKKworI2lmIEVOQUJMRShLSU5F
VElDX1NDUk9MTElORykKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uS2luZXRp
Yz4gbV9raW5ldGljQW5pbWF0aW9uOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Nj
cm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVOaWNvc2lhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZU5pY29zaWEuY3BwCmluZGV4IDFkZWZkNTQ0MzQxODM5MTQ3YzI2ZDE0MjZiZWMxNmFlNGFl
YjMxOTcuLjcyYjg3Zjg5MDEzNzE2NDBkNDNjYjEyYTY4NmVkNTEyYWJmNTBjMDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZU92
ZXJmbG93U2Nyb2xsaW5nTm9kZU5pY29zaWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZU5pY29z
aWEuY3BwCkBAIC0zMiw2ICszMiw5IEBACiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYg
VVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJOaWNvc2lhUGxhdGZvcm1MYXllci5oIgorI2lmIEVO
QUJMRShLSU5FVElDX1NDUk9MTElORykKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25LaW5ldGlj
LmgiCisjZW5kaWYKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZS5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWUuaCIKIApAQCAtNDUsNiArNDgsMjAgQEAgUmVm
PFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGU+IFNjcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGVOaWNvc2kKIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVO
aWNvc2lhOjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTmljb3NpYShTY3JvbGxp
bmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKQogICAgIDogU2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZShzY3JvbGxpbmdUcmVlLCBub2RlSUQpCiB7
CisjaWYgRU5BQkxFKEtJTkVUSUNfU0NST0xMSU5HKQorICAgIG1fa2luZXRpY0FuaW1hdGlvbiA9
IG1ha2VVbmlxdWU8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4oCisgICAgICAgIFt0aGlzXSgpIC0+
IFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OlNjcm9sbEV4dGVudHMgeworICAgICAgICAgICAgcmV0
dXJuIHsgSW50UG9pbnQobWluaW11bVNjcm9sbFBvc2l0aW9uKCkpLCBJbnRQb2ludChtYXhpbXVt
U2Nyb2xsUG9zaXRpb24oKSkgfTsKKyAgICAgICAgfSwKKyAgICAgICAgW3RoaXNdKEZsb2F0UG9p
bnQmJiBwb3NpdGlvbikgeworICAgICAgICAgICAgYXV0byogc2Nyb2xsTGF5ZXIgPSBzdGF0aWNf
Y2FzdDxOaWNvc2lhOjpQbGF0Zm9ybUxheWVyKj4oc2Nyb2xsZWRDb250ZW50c0xheWVyKCkpOwor
ICAgICAgICAgICAgQVNTRVJUKHNjcm9sbExheWVyKTsKKyAgICAgICAgICAgIGF1dG8mIGNvbXBv
c2l0aW9uTGF5ZXIgPSBkb3duY2FzdDxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPigqc2Nyb2xs
TGF5ZXIpOworCisgICAgICAgICAgICBhdXRvIHVwZGF0ZVNjb3BlID0gY29tcG9zaXRpb25MYXll
ci5jcmVhdGVVcGRhdGVTY29wZSgpOworICAgICAgICAgICAgc2Nyb2xsVG8ocG9zaXRpb24pOwor
ICAgICAgICB9KTsKKyNlbmRpZgogfQogCiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdO
b2RlTmljb3NpYTo6flNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVOaWNvc2lhKCkg
PSBkZWZhdWx0OwpAQCAtOTQsMTMgKzExMSwzNyBAQCBTY3JvbGxpbmdFdmVudFJlc3VsdCBTY3Jv
bGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTmljb3NpYTo6aGFuZGxlV2hlZWxFdmVudAog
CiAgICAgICAgIGF1dG8gdXBkYXRlU2NvcGUgPSBjb21wb3NpdGlvbkxheWVyLmNyZWF0ZVVwZGF0
ZVNjb3BlKCk7CiAgICAgICAgIHNjcm9sbEJ5KHsgLXdoZWVsRXZlbnQuZGVsdGFYKCksIC13aGVl
bEV2ZW50LmRlbHRhWSgpIH0pOworCisjaWYgRU5BQkxFKEtJTkVUSUNfU0NST0xMSU5HKQorICAg
ICAgICBtX2tpbmV0aWNBbmltYXRpb24tPmFwcGVuZFRvU2Nyb2xsSGlzdG9yeSh3aGVlbEV2ZW50
KTsKKyNlbmRpZgorICAgIH0KKworI2lmIEVOQUJMRShLSU5FVElDX1NDUk9MTElORykKKyAgICBt
X2tpbmV0aWNBbmltYXRpb24tPnN0b3AoKTsKKyAgICBpZiAod2hlZWxFdmVudC5pc0VuZE9mTm9u
TW9tZW50dW1TY3JvbGwoKSkgeworICAgICAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0YXJ0KGN1
cnJlbnRTY3JvbGxQb3NpdGlvbigpLCBtX2tpbmV0aWNBbmltYXRpb24tPmNvbXB1dGVWZWxvY2l0
eSgpLCBjYW5IYXZlSG9yaXpvbnRhbFNjcm9sbGJhcigpLCBjYW5IYXZlVmVydGljYWxTY3JvbGxi
YXIoKSk7CisgICAgICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+Y2xlYXJTY3JvbGxIaXN0b3J5KCk7
CiAgICAgfQorICAgIGlmICh3aGVlbEV2ZW50LmlzVHJhbnNpdGlvbmluZ1RvTW9tZW50dW1TY3Jv
bGwoKSkgeworICAgICAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0YXJ0KGN1cnJlbnRTY3JvbGxQ
b3NpdGlvbigpLCB3aGVlbEV2ZW50LnN3aXBlVmVsb2NpdHkoKSwgY2FuSGF2ZUhvcml6b250YWxT
Y3JvbGxiYXIoKSwgY2FuSGF2ZVZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgICAgICBtX2tpbmV0
aWNBbmltYXRpb24tPmNsZWFyU2Nyb2xsSGlzdG9yeSgpOworICAgIH0KKyNlbmRpZgogCiAgICAg
c2Nyb2xsaW5nVHJlZSgpLnNldE9yQ2xlYXJMYXRjaGVkTm9kZSh3aGVlbEV2ZW50LCBzY3JvbGxp
bmdOb2RlSUQoKSk7CiAKICAgICByZXR1cm4gU2Nyb2xsaW5nRXZlbnRSZXN1bHQ6OkRpZEhhbmRs
ZUV2ZW50OwogfQogCit2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVOaWNv
c2lhOjpzdG9wU2Nyb2xsQW5pbWF0aW9ucygpCit7CisjaWYgRU5BQkxFKEtJTkVUSUNfU0NST0xM
SU5HKQorICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c3RvcCgpOworICAgIG1fa2luZXRpY0FuaW1h
dGlvbi0+Y2xlYXJTY3JvbGxIaXN0b3J5KCk7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKE5JQ09T
SUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Nj
cm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVOaWNvc2lhLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05v
ZGVOaWNvc2lhLmgKaW5kZXggYTFmOWM4MTJlNjg5NWJhY2IxMzEyMmFjMmJhYTU0N2JjYmQxYTFh
Ny4uZTZmNDYxYTlmNmU2YTNmNDcyY2Q4NjBjZGY1ZjhhNzZhZTFkOTZkNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbmljb3NpYS9TY3JvbGxpbmdUcmVlT3ZlcmZs
b3dTY3JvbGxpbmdOb2RlTmljb3NpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZU5pY29zaWEuaApA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU2Nyb2xsQW5pbWF0aW9uS2lu
ZXRpYzsKIAogY2xhc3MgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZU5pY29zaWEg
ZmluYWwgOiBwdWJsaWMgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZSB7CiBwdWJs
aWM6CkBAIC00OSw2ICs1MCwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVwb3NpdGlvblNjcm9s
bGluZ0xheWVycygpIG92ZXJyaWRlOwogCiAgICAgU2Nyb2xsaW5nRXZlbnRSZXN1bHQgaGFuZGxl
V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKKworICAgIHZv
aWQgc3RvcFNjcm9sbEFuaW1hdGlvbnMoKSBvdmVycmlkZTsKKworI2lmIEVOQUJMRShLSU5FVElD
X1NDUk9MTElORykKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4g
bV9raW5ldGljQW5pbWF0aW9uOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5l
dGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMu
Y3BwCmluZGV4IGFjOWYyZjBmMzdmMWU4MDU4NjBmMDM2YjQyYjBkMDI3NjIwYzFkZTIuLmVjZDk3
YzY0NjEyMDVkMzMwOTVmM2VhODczMzcyNjMwZjdlYjI3MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3BwCkBAIC0yNiw3ICsyNiw4
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9uS2luZXRp
Yy5oIgogCi0jaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdo
ZWVsRXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4K
IAogLyoKICAqIFBlckF4aXNEYXRhIGlzIGEgcG9ydCBvZiBHdGtLaW5ldGljU2Nyb2xsaW5nIGFz
IG9mIEdUSysgMy4yMCwKQEAgLTY1LDYgKzY2LDcgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBkZWNl
bEZyaWN0aW9uID0gNDsKIHN0YXRpYyBjb25zdCBkb3VibGUgZnJhbWVSYXRlID0gNjA7CiBzdGF0
aWMgY29uc3QgU2Vjb25kcyB0aWNrVGltZSA9IDFfcyAvIGZyYW1lUmF0ZTsKIHN0YXRpYyBjb25z
dCBTZWNvbmRzIG1pbmltdW1UaW1lckludGVydmFsIHsgMV9tcyB9Oworc3RhdGljIGNvbnN0IFNl
Y29uZHMgc2Nyb2xsQ2FwdHVyZVRocmVzaG9sZCB7IDE1MF9tcyB9OwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTEwNCwxMSArMTA2LDEyIEBAIGJvb2wgU2Nyb2xsQW5pbWF0aW9uS2luZXRp
Yzo6UGVyQXhpc0RhdGE6OmFuaW1hdGVTY3JvbGwoU2Vjb25kcyB0aW1lRGVsdGEpCiAgICAgcmV0
dXJuIG1fdmVsb2NpdHk7CiB9CiAKLVNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OlNjcm9sbEFuaW1h
dGlvbktpbmV0aWMoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoRmxvYXRQb2ludCYmKT4mJiBub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbikKLSAg
ICA6IFNjcm9sbEFuaW1hdGlvbihzY3JvbGxhYmxlQXJlYSkKK1Njcm9sbEFuaW1hdGlvbktpbmV0
aWM6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWMoU2Nyb2xsRXh0ZW50c0NhbGxiYWNrJiYgc2Nyb2xs
RXh0ZW50c0Z1bmN0aW9uLCBOb3RpZnlQb3NpdGlvbkNoYW5nZWRDYWxsYmFjayYmIG5vdGlmeVBv
c2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKQorICAgIDogbV9zY3JvbGxFeHRlbnRzRnVuY3Rpb24oV1RG
TW92ZShzY3JvbGxFeHRlbnRzRnVuY3Rpb24pKQogICAgICwgbV9ub3RpZnlQb3NpdGlvbkNoYW5n
ZWRGdW5jdGlvbihXVEZNb3ZlKG5vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKSkKLSAgICAs
IG1fYW5pbWF0aW9uVGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRpb25LaW5ldGljOjphbmltYXRp
b25UaW1lckZpcmVkKQorICAgICwgbV9hbmltYXRpb25UaW1lcihSdW5Mb29wOjpjdXJyZW50KCks
IHRoaXMsICZTY3JvbGxBbmltYXRpb25LaW5ldGljOjphbmltYXRpb25UaW1lckZpcmVkKQogewor
ICAgIG1fYW5pbWF0aW9uVGltZXIuc2V0UHJpb3JpdHkoV1RGOjpSdW5Mb29wU291cmNlUHJpb3Jp
dHk6OkRpc3BsYXlSZWZyZXNoTW9uaXRvclRpbWVyKTsKIH0KIAogU2Nyb2xsQW5pbWF0aW9uS2lu
ZXRpYzo6flNjcm9sbEFuaW1hdGlvbktpbmV0aWMoKSA9IGRlZmF1bHQ7CkBAIC0xMjAsNiArMTIz
LDQwIEBAIHZvaWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6c3RvcCgpCiAgICAgbV92ZXJ0aWNh
bERhdGEgPSBXVEY6Om51bGxvcHQ7CiB9CiAKK3ZvaWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6
YXBwZW5kVG9TY3JvbGxIaXN0b3J5KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQpCit7
CisgICAgbV9zY3JvbGxIaXN0b3J5LnJlbW92ZUFsbE1hdGNoaW5nKFsmZXZlbnRdIChQbGF0Zm9y
bVdoZWVsRXZlbnQmIG90aGVyRXZlbnQpIC0+IGJvb2wgeworICAgICAgICByZXR1cm4gKGV2ZW50
LnRpbWVzdGFtcCgpIC0gb3RoZXJFdmVudC50aW1lc3RhbXAoKSkgPiBzY3JvbGxDYXB0dXJlVGhy
ZXNob2xkOworICAgIH0pOworCisgICAgbV9zY3JvbGxIaXN0b3J5LmFwcGVuZChldmVudCk7Cit9
CisKK3ZvaWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6Y2xlYXJTY3JvbGxIaXN0b3J5KCkKK3sK
KyAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsKK30KKworRmxvYXRQb2ludCBTY3JvbGxBbmlt
YXRpb25LaW5ldGljOjpjb21wdXRlVmVsb2NpdHkoKQoreworICAgIGlmIChtX3Njcm9sbEhpc3Rv
cnkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBmaXJzdCA9IG1f
c2Nyb2xsSGlzdG9yeVswXS50aW1lc3RhbXAoKTsKKyAgICBhdXRvIGxhc3QgPSBtX3Njcm9sbEhp
c3RvcnkucmJlZ2luKCktPnRpbWVzdGFtcCgpOworCisgICAgaWYgKGxhc3QgPT0gZmlyc3QpCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICBGbG9hdFBvaW50IGFjY3VtRGVsdGE7CisgICAgZm9y
IChjb25zdCBhdXRvJiBzY3JvbGxFdmVudCA6IG1fc2Nyb2xsSGlzdG9yeSkKKyAgICAgICAgYWNj
dW1EZWx0YSArPSBGbG9hdFBvaW50KHNjcm9sbEV2ZW50LmRlbHRhWCgpLCBzY3JvbGxFdmVudC5k
ZWx0YVkoKSk7CisKKyAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsKKworICAgIHJldHVybiBG
bG9hdFBvaW50KGFjY3VtRGVsdGEueCgpICogLTEgLyAobGFzdCAtIGZpcnN0KS52YWx1ZSgpLCBh
Y2N1bURlbHRhLnkoKSAqIC0xIC8gKGxhc3QgLSBmaXJzdCkudmFsdWUoKSk7Cit9CisKIHZvaWQg
U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6c3RhcnQoY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbFBv
c2l0aW9uLCBjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSwgYm9vbCBtYXlIU2Nyb2xsLCBib29s
IG1heVZTY3JvbGwpCiB7CiAgICAgc3RvcCgpOwpAQCAtMTI5LDE0ICsxNjYsMTUgQEAgdm9pZCBT
Y3JvbGxBbmltYXRpb25LaW5ldGljOjpzdGFydChjb25zdCBGbG9hdFBvaW50JiBpbml0aWFsUG9z
aXRpb24sIGNvbnN0IEZsb2EKICAgICBpZiAoIXZlbG9jaXR5LngoKSAmJiAhdmVsb2NpdHkueSgp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvIGV4dGVudHMgPSBtX3Njcm9sbEV4dGVudHNG
dW5jdGlvbigpOwogICAgIGlmIChtYXlIU2Nyb2xsKSB7Ci0gICAgICAgIG1faG9yaXpvbnRhbERh
dGEgPSBQZXJBeGlzRGF0YShtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlvbigp
LngoKSwKLSAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkueCgpLAorICAgICAgICBtX2hvcml6b250YWxEYXRhID0gUGVyQXhpc0RhdGEoZXh0ZW50cy5t
aW5pbXVtU2Nyb2xsUG9zaXRpb24ueCgpLAorICAgICAgICAgICAgZXh0ZW50cy5tYXhpbXVtU2Ny
b2xsUG9zaXRpb24ueCgpLAogICAgICAgICAgICAgaW5pdGlhbFBvc2l0aW9uLngoKSwgdmVsb2Np
dHkueCgpKTsKICAgICB9CiAgICAgaWYgKG1heVZTY3JvbGwpIHsKLSAgICAgICAgbV92ZXJ0aWNh
bERhdGEgPSBQZXJBeGlzRGF0YShtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlv
bigpLnkoKSwKLSAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbFBvc2l0
aW9uKCkueSgpLAorICAgICAgICBtX3ZlcnRpY2FsRGF0YSA9IFBlckF4aXNEYXRhKGV4dGVudHMu
bWluaW11bVNjcm9sbFBvc2l0aW9uLnkoKSwKKyAgICAgICAgICAgIGV4dGVudHMubWF4aW11bVNj
cm9sbFBvc2l0aW9uLnkoKSwKICAgICAgICAgICAgIGluaXRpYWxQb3NpdGlvbi55KCksIHZlbG9j
aXR5LnkoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRpb25LaW5ldGljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRpb25LaW5ldGljLmgKaW5kZXggY2ZkMzNjZTViNDk1OGQ0MmEwNzU0ODQxNmUxMzZjNDA5
NTI1NTQwMC4uY2YyNWU3OThjZDViMDZiMzk1MWIwMmE2NzMwMWEwMjUxOTY1MTMxNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaApAQCAt
MjcsMTUgKzI3LDE2IEBACiAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiU2Ny
b2xsQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKIAogI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CitjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiAKLWNs
YXNzIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMgZmluYWw6IHB1YmxpYyBTY3JvbGxBbmltYXRpb24g
eworY2xhc3MgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYyBmaW5hbCB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwcml2YXRlOgogICAgIGNsYXNzIFBlckF4aXNEYXRhIHsKICAgICBwdWJs
aWM6CkBAIC01OCwyMyArNTksMzcgQEAgcHJpdmF0ZToKICAgICB9OwogCiBwdWJsaWM6Ci0gICAg
U2Nyb2xsQW5pbWF0aW9uS2luZXRpYyhTY3JvbGxhYmxlQXJlYSYsIHN0ZDo6ZnVuY3Rpb248dm9p
ZChGbG9hdFBvaW50JiYpPiYmIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKTsKKyAgICBz
dHJ1Y3QgU2Nyb2xsRXh0ZW50cyB7CisgICAgICAgIEludFBvaW50IG1pbmltdW1TY3JvbGxQb3Np
dGlvbjsKKyAgICAgICAgSW50UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0aW9uOworICAgIH07CisK
KyAgICB1c2luZyBTY3JvbGxFeHRlbnRzQ2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9uPFNjcm9sbEV4
dGVudHModm9pZCk+OworICAgIHVzaW5nIE5vdGlmeVBvc2l0aW9uQ2hhbmdlZENhbGxiYWNrID0g
V1RGOjpGdW5jdGlvbjx2b2lkKEZsb2F0UG9pbnQmJik+OworCisgICAgU2Nyb2xsQW5pbWF0aW9u
S2luZXRpYyhTY3JvbGxFeHRlbnRzQ2FsbGJhY2smJiwgTm90aWZ5UG9zaXRpb25DaGFuZ2VkQ2Fs
bGJhY2smJik7CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0aW9uS2luZXRpYygpOwogCisgICAg
dm9pZCBhcHBlbmRUb1Njcm9sbEhpc3RvcnkoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Cisg
ICAgdm9pZCBjbGVhclNjcm9sbEhpc3RvcnkoKTsKKyAgICBGbG9hdFBvaW50IGNvbXB1dGVWZWxv
Y2l0eSgpOworCiAgICAgdm9pZCBzdGFydChjb25zdCBGbG9hdFBvaW50JiBpbml0aWFsUG9zaXRp
b24sIGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5LCBib29sIG1heUhTY3JvbGwsIGJvb2wgbWF5
VlNjcm9sbCk7CisgICAgdm9pZCBzdG9wKCk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBzdG9wKCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBhbmltYXRpb25UaW1lckZpcmVkKCk7CiAKLSAgICBzdGQ6OmZ1
bmN0aW9uPHZvaWQoRmxvYXRQb2ludCYmKT4gbV9ub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlv
bjsKKyAgICBTY3JvbGxFeHRlbnRzQ2FsbGJhY2sgbV9zY3JvbGxFeHRlbnRzRnVuY3Rpb247Cisg
ICAgTm90aWZ5UG9zaXRpb25DaGFuZ2VkQ2FsbGJhY2sgbV9ub3RpZnlQb3NpdGlvbkNoYW5nZWRG
dW5jdGlvbjsKIAogICAgIE9wdGlvbmFsPFBlckF4aXNEYXRhPiBtX2hvcml6b250YWxEYXRhOwog
ICAgIE9wdGlvbmFsPFBlckF4aXNEYXRhPiBtX3ZlcnRpY2FsRGF0YTsKIAogICAgIE1vbm90b25p
Y1RpbWUgbV9zdGFydFRpbWU7Ci0gICAgVGltZXIgbV9hbmltYXRpb25UaW1lcjsKKyAgICBSdW5M
b29wOjpUaW1lcjxTY3JvbGxBbmltYXRpb25LaW5ldGljPiBtX2FuaW1hdGlvblRpbWVyOwogICAg
IEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKKyAgICBWZWN0b3I8UGxhdGZvcm1XaGVlbEV2ZW50PiBt
X3Njcm9sbEhpc3Rvcnk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJp
Yy5jcHAKaW5kZXggMjA4YWY3Yjg0NzllY2FlZjU1MzBjY2M1NTdiNzM2ZWJhYmNiY2I4Zi4uZjE1
MDkzYzU2YTFlYTNmZDcyZGQ0NDE0MjU1ZGVlYzQ3MTdhMDE1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmljLmNw
cApAQCAtNDAsNyArNDAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBT
ZWNvbmRzIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uIHsgMV9zIH07CiBzdGF0
aWMgY29uc3QgU2Vjb25kcyBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXkgeyAy
X3MgfTsKLXN0YXRpYyBjb25zdCBTZWNvbmRzIHNjcm9sbENhcHR1cmVUaHJlc2hvbGQgeyAxNTBf
bXMgfTsKIAogc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6
Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKIHsKQEAgLTUxLDEzICs1MCwx
NyBAQCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYyhTY3JvbGxh
YmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxl
QXJlYSkKICAgICAsIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyKCp0aGlzLCAmU2Ny
b2xsQW5pbWF0b3JHZW5lcmljOjpvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXJGaXJlZCkK
IHsKLSAgICBtX2tpbmV0aWNBbmltYXRpb24gPSBtYWtlVW5pcXVlPFNjcm9sbEFuaW1hdGlvbktp
bmV0aWM+KG1fc2Nyb2xsYWJsZUFyZWEsIFt0aGlzXShGbG9hdFBvaW50JiYgcG9zaXRpb24pIHsK
KyAgICBtX2tpbmV0aWNBbmltYXRpb24gPSBtYWtlVW5pcXVlPFNjcm9sbEFuaW1hdGlvbktpbmV0
aWM+KAorICAgICAgICBbdGhpc10oKSAtPiBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpTY3JvbGxF
eHRlbnRzIHsKKyAgICAgICAgICAgIHJldHVybiB7IG1fc2Nyb2xsYWJsZUFyZWEubWluaW11bVNj
cm9sbFBvc2l0aW9uKCksIG1fc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbFBvc2l0aW9uKCkg
fTsKKyAgICAgICAgfSwKKyAgICAgICAgW3RoaXNdKEZsb2F0UG9pbnQmJiBwb3NpdGlvbikgewog
I2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQotICAgICAgICBpZiAobV9zbW9vdGhBbmltYXRp
b24pCi0gICAgICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+c2V0Q3VycmVudFBvc2l0aW9uKHBv
c2l0aW9uKTsKKyAgICAgICAgICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAgICAg
ICAgICBtX3Ntb290aEFuaW1hdGlvbi0+c2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uKTsKICNl
bmRpZgotICAgICAgICB1cGRhdGVQb3NpdGlvbihXVEZNb3ZlKHBvc2l0aW9uKSk7Ci0gICAgfSk7
CisgICAgICAgICAgICB1cGRhdGVQb3NpdGlvbihXVEZNb3ZlKHBvc2l0aW9uKSk7CisgICAgICAg
IH0pOwogCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAgICAgaWYgKHNjcm9sbGFibGVB
cmVhLnNjcm9sbEFuaW1hdG9yRW5hYmxlZCgpKQpAQCAtOTQsNyArOTcsNyBAQCB2b2lkIFNjcm9s
bEFuaW1hdG9yR2VuZXJpYzo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIG9mZgogewogICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBTY3JvbGxhYmxlQXJl
YTo6c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCwgdG9GbG9hdFNpemUobV9zY3JvbGxh
YmxlQXJlYS5zY3JvbGxPcmlnaW4oKSkpOwogICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c3RvcCgp
OwotICAgIG1fc2Nyb2xsSGlzdG9yeS5jbGVhcigpOworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+
Y2xlYXJTY3JvbGxIaXN0b3J5KCk7CiAKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAg
ICBpZiAobV9zbW9vdGhBbmltYXRpb24pCkBAIC0xMDQsNTYgKzEwNywzMCBAQCB2b2lkIFNjcm9s
bEFuaW1hdG9yR2VuZXJpYzo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIG9mZgogICAgIHVwZGF0ZVBvc2l0aW9uKFdURk1vdmUocG9zaXRpb24pKTsKIH0K
IAotRmxvYXRQb2ludCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OmNvbXB1dGVWZWxvY2l0eSgpCi17
Ci0gICAgaWYgKG1fc2Nyb2xsSGlzdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB7IH07
Ci0KLSAgICBhdXRvIGZpcnN0ID0gbV9zY3JvbGxIaXN0b3J5WzBdLnRpbWVzdGFtcCgpOwotICAg
IGF1dG8gbGFzdCA9IG1fc2Nyb2xsSGlzdG9yeS5yYmVnaW4oKS0+dGltZXN0YW1wKCk7Ci0KLSAg
ICBpZiAobGFzdCA9PSBmaXJzdCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIEZsb2F0UG9p
bnQgYWNjdW1EZWx0YTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNjcm9sbEV2ZW50IDogbV9zY3Jv
bGxIaXN0b3J5KQotICAgICAgICBhY2N1bURlbHRhICs9IEZsb2F0UG9pbnQoc2Nyb2xsRXZlbnQu
ZGVsdGFYKCksIHNjcm9sbEV2ZW50LmRlbHRhWSgpKTsKLQotICAgIG1fc2Nyb2xsSGlzdG9yeS5j
bGVhcigpOwotCi0gICAgcmV0dXJuIEZsb2F0UG9pbnQoYWNjdW1EZWx0YS54KCkgKiAtMSAvIChs
YXN0IC0gZmlyc3QpLnZhbHVlKCksIGFjY3VtRGVsdGEueSgpICogLTEgLyAobGFzdCAtIGZpcnN0
KS52YWx1ZSgpKTsKLX0KLQogYm9vbCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OmhhbmRsZVdoZWVs
RXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkKIHsKICAgICBtX2tpbmV0aWNB
bmltYXRpb24tPnN0b3AoKTsKIAotICAgIG1fc2Nyb2xsSGlzdG9yeS5yZW1vdmVBbGxNYXRjaGlu
ZyhbJmV2ZW50XSAoUGxhdGZvcm1XaGVlbEV2ZW50JiBvdGhlckV2ZW50KSAtPiBib29sIHsKLSAg
ICAgICAgcmV0dXJuIChldmVudC50aW1lc3RhbXAoKSAtIG90aGVyRXZlbnQudGltZXN0YW1wKCkp
ID4gc2Nyb2xsQ2FwdHVyZVRocmVzaG9sZDsKLSAgICB9KTsKLQogI2lmIEVOQUJMRShLSU5FVElD
X1NDUk9MTElORykKICAgICBpZiAoZXZlbnQuaXNFbmRPZk5vbk1vbWVudHVtU2Nyb2xsKCkpIHsK
ICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBhZGQgdGhlIGV2ZW50IHRvIHRoZSBoaXN0b3J5
IGFzIGl0cyBkZWx0YSB3aWxsIGJlICgwLCAwKS4KLSAgICAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xs
QW5pbWF0aW9uS2luZXRpYyo+KG1fa2luZXRpY0FuaW1hdGlvbi5nZXQoKSktPnN0YXJ0KG1fY3Vy
cmVudFBvc2l0aW9uLCBjb21wdXRlVmVsb2NpdHkoKSwgbV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9u
dGFsU2Nyb2xsYmFyKCksIG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTY3JvbGxiYXIoKSk7Cisg
ICAgICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c3RhcnQobV9jdXJyZW50UG9zaXRpb24sIG1fa2lu
ZXRpY0FuaW1hdGlvbi0+Y29tcHV0ZVZlbG9jaXR5KCksIG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpv
bnRhbFNjcm9sbGJhcigpLCBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGV2ZW50LmlzVHJhbnNpdGlvbmlu
Z1RvTW9tZW50dW1TY3JvbGwoKSkgewotICAgICAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsK
LSAgICAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYyo+KG1fa2luZXRpY0Fu
aW1hdGlvbi5nZXQoKSktPnN0YXJ0KG1fY3VycmVudFBvc2l0aW9uLCBldmVudC5zd2lwZVZlbG9j
aXR5KCksIG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNjcm9sbGJhcigpLCBtX3Njcm9sbGFi
bGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgICAgICBtX2tpbmV0aWNBbmltYXRpb24t
PmNsZWFyU2Nyb2xsSGlzdG9yeSgpOworICAgICAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0YXJ0
KG1fY3VycmVudFBvc2l0aW9uLCBldmVudC5zd2lwZVZlbG9jaXR5KCksIG1fc2Nyb2xsYWJsZUFy
ZWEuaG9yaXpvbnRhbFNjcm9sbGJhcigpLCBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xs
YmFyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0jZW5kaWYKIAotICAgIG1fc2Ny
b2xsSGlzdG9yeS5hcHBlbmQoZXZlbnQpOworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+YXBwZW5k
VG9TY3JvbGxIaXN0b3J5KGV2ZW50KTsKKyNlbmRpZgogCiAgICAgcmV0dXJuIFNjcm9sbEFuaW1h
dG9yOjpoYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvckdl
bmVyaWM6OndpbGxFbmRMaXZlUmVzaXplKCkKIHsKLSAgICBtX2tpbmV0aWNBbmltYXRpb24tPnVw
ZGF0ZVZpc2libGVMZW5ndGhzKCk7Ci0KICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAg
ICBpZiAobV9zbW9vdGhBbmltYXRpb24pCiAgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT51cGRh
dGVWaXNpYmxlTGVuZ3RocygpOwpAQCAtMTY5LDggKzE0Niw2IEBAIHZvaWQgU2Nyb2xsQW5pbWF0
b3JHZW5lcmljOjp1cGRhdGVQb3NpdGlvbihGbG9hdFBvaW50JiYgcG9zaXRpb24pCiAKIHZvaWQg
U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIq
IHNjcm9sbGJhcikKIHsKLSAgICBtX2tpbmV0aWNBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5n
dGhzKCk7Ci0KICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBpZiAobV9zbW9vdGhB
bmltYXRpb24pCiAgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3Ro
cygpOwpAQCAtMTg2LDggKzE2MSw2IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpkaWRB
ZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIAogdm9pZCBTY3JvbGxB
bmltYXRvckdlbmVyaWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCiB7Ci0gICAgbV9raW5ldGljQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3Rocygp
OwotCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAgICAgaWYgKG1fc21vb3RoQW5pbWF0
aW9uKQogICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0
b3JHZW5lcmljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1h
dG9yR2VuZXJpYy5oCmluZGV4IGY5ZmNhODZmMzc1OTgxY2IxZDFlZTA3MDRkMDE3OWU4ZjYyMjE5
MGYuLjZhODk1Mzg5ZDI0YjJiYzBjNGZhNWU4OTA0NjMyNGFjNDdkYjRiZjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmljLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVy
aWMuaApAQCAtMzYsNiArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3Jv
bGxBbmltYXRpb247CitjbGFzcyBTY3JvbGxBbmltYXRpb25LaW5ldGljOwogCiBjbGFzcyBTY3Jv
bGxBbmltYXRvckdlbmVyaWMgZmluYWwgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgewogcHVibGlj
OgpAQCAtNzEsMTUgKzcyLDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBoaWRlT3ZlcmxheVNjcm9s
bGJhcnMoKTsKICAgICB2b2lkIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOwogCi0g
ICAgRmxvYXRQb2ludCBjb21wdXRlVmVsb2NpdHkoKTsKLQogI2lmIEVOQUJMRShTTU9PVEhfU0NS
T0xMSU5HKQogICAgIHZvaWQgZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9uKCk7CiAKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX3Ntb290aEFuaW1hdGlvbjsKICNl
bmRpZgotICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb24+IG1fa2luZXRpY0FuaW1h
dGlvbjsKLSAgICBWZWN0b3I8UGxhdGZvcm1XaGVlbEV2ZW50PiBtX3Njcm9sbEhpc3Rvcnk7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlvbktpbmV0aWM+IG1fa2luZXRpY0FuaW1h
dGlvbjsKICAgICBTY3JvbGxiYXIqIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgeyBudWxs
cHRyIH07CiAgICAgU2Nyb2xsYmFyKiBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhciB7IG51bGxw
dHIgfTsKICAgICBib29sIG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQgeyBmYWxzZSB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oCmluZGV4IDE0OGQ3MDkwMDlj
MzI4MmY1NmRhODkzNzYzZjQ3ODIxZWRlMjVhNTAuLjM5OTFhNDc5ZjFmMWQxODUwMDcxNjcwNDgw
YzBjMzAzODI1Y2MwOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdl
YldoZWVsRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2
ZW50LmgKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQo
R2RrRXZlbnQqKTsKICAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiwgV2ViV2hlZWxF
dmVudDo6UGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpOwogI2VsaWYg
VVNFKExJQldQRSkKLSAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KHN0cnVjdCB3cGVfaW5wdXRfYXhp
c19ldmVudCosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICBOYXRpdmVXZWJXaGVlbEV2
ZW50KHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
LCBXZWJXaGVlbEV2ZW50OjpQaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhhc2UgbW9tZW50dW1QaGFz
ZSk7CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgTmF0aXZlV2ViV2hlZWxFdmVudChIV05ELCBV
SU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkV2ZW50
LmgKaW5kZXggMjI0ZWY1MTU2N2ZkZjVlYjczMjFhMzQxMWZhY2NkMjgzYjViMjgxMy4uMTk2ZGM4
OTEwN2U1MGRmMjIwMmMzMjViNGI1ZmM2YjIyNTY5N2U5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2ViRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJFdmVu
dC5oCkBAIC0yMDUsNyArMjA1LDcgQEAgcHVibGljOgogICAgIFdlYldoZWVsRXZlbnQoVHlwZSwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgZGVsdGEsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHksIE9wdGlvblNldDxN
b2RpZmllcj4sIFdhbGxUaW1lIHRpbWVzdGFtcCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAg
V2ViV2hlZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tzLCBHcmFu
dWxhcml0eSwgYm9vbCBkaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UsIFBoYXNlLCBQaGFzZSBt
b21lbnR1bVBoYXNlLCBib29sIGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMsIHVpbnQzMl90IHNj
cm9sbENvdW50LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHVuYWNjZWxlcmF0ZWRTY3JvbGxp
bmdEZWx0YSwgT3B0aW9uU2V0PE1vZGlmaWVyPiwgV2FsbFRpbWUgdGltZXN0YW1wKTsKLSNlbGlm
IFBMQVRGT1JNKEdUSykKKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQogICAg
IFdlYldoZWVsRXZlbnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgUGhh
c2UsIFBoYXNlIG1vbWVudHVtUGhhc2UsIEdyYW51bGFyaXR5LCBPcHRpb25TZXQ8TW9kaWZpZXI+
LCBXYWxsVGltZSB0aW1lc3RhbXApOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViV2hl
ZWxFdmVudC5jcHAKaW5kZXggMjQxNDQ2NTY4NmU1N2RhZDFkZjQ4YTI3MzY3NmY4OTQ4MGMyMjFi
Yi4uZmFiZDRmNzczNGI2MDVmMDkwNjQ3YzA0YzZiYTcxYjk3MjgwYmY0OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgV2ViV2hlZWxFdmVu
dDo6V2ViV2hlZWxFdmVudChUeXBlIHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29u
c3QgSW50UG9pbnQKIHsKICAgICBBU1NFUlQoaXNXaGVlbEV2ZW50VHlwZSh0eXBlKSk7CiB9Ci0j
ZWxpZiBQTEFURk9STShHVEspCisjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkK
IFdlYldoZWVsRXZlbnQ6OldlYldoZWVsRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBJbnRQb2ludCYg
cG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgRmxvYXRTaXpl
JiBkZWx0YSwgY29uc3QgRmxvYXRTaXplJiB3aGVlbFRpY2tzLCBQaGFzZSBwaGFzZSwgUGhhc2Ug
bW9tZW50dW1QaGFzZSwgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIE9wdGlvblNldDxNb2RpZmll
cj4gbW9kaWZpZXJzLCBXYWxsVGltZSB0aW1lc3RhbXApCiAgICAgOiBXZWJFdmVudCh0eXBlLCBt
b2RpZmllcnMsIHRpbWVzdGFtcCkKICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCkBAIC05MSw3
ICs5MSw3IEBAIHZvaWQgV2ViV2hlZWxFdmVudDo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKICAgICBlbmNvZGVyIDw8IG1fd2hlZWxUaWNrczsKICAgICBlbmNvZGVyIDw8IG1f
Z3JhbnVsYXJpdHk7CiAgICAgZW5jb2RlciA8PCBtX2RpcmVjdGlvbkludmVydGVkRnJvbURldmlj
ZTsKLSNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKENP
Q09BKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICBlbmNvZGVyIDw8IG1f
cGhhc2U7CiAgICAgZW5jb2RlciA8PCBtX21vbWVudHVtUGhhc2U7CiAjZW5kaWYKQEAgLTExOCw3
ICsxMTgsNyBAQCBib29sIFdlYldoZWVsRXZlbnQ6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29k
ZXIsIFdlYldoZWVsRXZlbnQmIHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHQubV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQ
TEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZSh0Lm1fcGhhc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZSh0Lm1fbW9tZW50dW1QaGFzZSkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9saWJ3cGUvTmF0aXZlV2ViV2hlZWxFdmVudExpYldQRS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9saWJ3cGUvTmF0aXZlV2ViV2hlZWxFdmVudExpYldQRS5jcHAK
aW5kZXggYmE5NjJlZDRkY2M2ZjNlMTc2MTczOWVlNjNjZDQ4YTNjNWFhNzhiOS4uN2FmODEyMzhm
ZDAwZWUzYzUwMjFiZjZhOTUyOWQ2MDk1OTZiYTgzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvbGlid3BlL05hdGl2ZVdlYldoZWVsRXZlbnRMaWJXUEUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL2xpYndwZS9OYXRpdmVXZWJXaGVlbEV2ZW50TGliV1BFLmNwcApAQCAt
MzIsOCArMzIsOCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotTmF0aXZlV2ViV2hlZWxFdmVu
dDo6TmF0aXZlV2ViV2hlZWxFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQqIGV2ZW50
LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKLSAgICA6IFdlYldoZWVsRXZlbnQoV2ViRXZlbnRG
YWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGV2ZW50LCBkZXZpY2VTY2FsZUZhY3RvcikpCitO
YXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KHN0cnVjdCB3cGVfaW5wdXRf
YXhpc19ldmVudCogZXZlbnQsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBXZWJXaGVlbEV2ZW50
OjpQaGFzZSBwaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhhc2UgbW9tZW50dW1QaGFzZSkKKyAgICA6
IFdlYldoZWVsRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGV2ZW50
LCBkZXZpY2VTY2FsZUZhY3RvciwgcGhhc2UsIG1vbWVudHVtUGhhc2UpKQogewogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9saWJ3cGUvV2ViRXZlbnRGYWN0b3J5LmNwcCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL2xpYndwZS9XZWJFdmVudEZhY3RvcnkuY3BwCmluZGV4IDk2
NjA2NGIwNTRkZGMyYTYwMzMyZDNiNjg1YjMyM2U4YjkyOTgyM2QuLjYxNTU2MjU5N2VkZTJkZTU4
ZTdjYzczNWNkZTM4NDEwMzA5NzI3MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L2xpYndwZS9XZWJFdmVudEZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2xp
YndwZS9XZWJFdmVudEZhY3RvcnkuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgV2ViTW91c2VFdmVu
dCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoc3RydWN0IHdwZV9pbnB1dF9w
b2ludGVyX2V2ZW4KICAgICAgICAgMCwgMCwgMCwgY2xpY2tDb3VudCwgbW9kaWZpZXJzRm9yRXZl
bnRNb2RpZmllcnMoZXZlbnQtPm1vZGlmaWVycyksIHdhbGxUaW1lRm9yRXZlbnRUaW1lKGV2ZW50
LT50aW1lKSk7CiB9CiAKLVdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJX
aGVlbEV2ZW50KHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCogZXZlbnQsIGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yKQorV2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldo
ZWVsRXZlbnQoc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiBldmVudCwgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQ
aGFzZSBtb21lbnR1bVBoYXNlKQogewogICAgIFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9uKGV2
ZW50LT54LCBldmVudC0+eSk7CiAgICAgcG9zaXRpb24uc2NhbGUoMSAvIGRldmljZVNjYWxlRmFj
dG9yKTsKQEAgLTE2OCw3ICsxNjgsOCBAQCBXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6
Y3JlYXRlV2ViV2hlZWxFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQqCiAgICAgICAg
IH0KIAogICAgICAgICByZXR1cm4gV2ViV2hlZWxFdmVudChXZWJFdmVudDo6V2hlZWwsIHBvc2l0
aW9uLCBwb3NpdGlvbiwKLSAgICAgICAgICAgIGRlbHRhLCB3aGVlbFRpY2tzLCBXZWJXaGVlbEV2
ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwKKyAgICAgICAgICAgIGRlbHRhLCB3aGVlbFRp
Y2tzLCBwaGFzZSwgbW9tZW50dW1QaGFzZSwKKyAgICAgICAgICAgIFdlYldoZWVsRXZlbnQ6OlNj
cm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LAogICAgICAgICAgICAgT3B0aW9uU2V0PFdlYkV2ZW50OjpN
b2RpZmllcj4geyB9LCB3YWxsVGltZUZvckV2ZW50VGltZShldmVudC0+dGltZSkpOwogICAgIH0K
ICNlbmRpZgpAQCAtMjAwLDcgKzIwMSw4IEBAIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5
OjpjcmVhdGVXZWJXaGVlbEV2ZW50KHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCoKICAgICB9
OwogCiAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBwb3NpdGlvbiwg
cG9zaXRpb24sCi0gICAgICAgIGRlbHRhLCB3aGVlbFRpY2tzLCBXZWJXaGVlbEV2ZW50OjpTY3Jv
bGxCeVBpeGVsV2hlZWxFdmVudCwKKyAgICAgICAgZGVsdGEsIHdoZWVsVGlja3MsIHBoYXNlLCBt
b21lbnR1bVBoYXNlLAorICAgICAgICBXZWJXaGVlbEV2ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxF
dmVudCwKICAgICAgICAgT3B0aW9uU2V0PFdlYkV2ZW50OjpNb2RpZmllcj4geyB9LCB3YWxsVGlt
ZUZvckV2ZW50VGltZShldmVudC0+dGltZSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9saWJ3cGUvV2ViRXZlbnRGYWN0b3J5LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9saWJ3cGUvV2ViRXZlbnRGYWN0b3J5LmgKaW5kZXggMzU4YmUzZWQ5MDczYWM3ZjgyMGNjYTBj
ZTZmNjg2NGYwOWFlMzQ4MC4uNGI3ODc5NGIzZDQ1YmYzOGY3MzA0NDhhOGMxZWU4M2E1YTUxYmFh
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbGlid3BlL1dlYkV2ZW50RmFjdG9y
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2xpYndwZS9XZWJFdmVudEZhY3RvcnkuaApA
QCAtNDAsNyArNDAsNyBAQCBjbGFzcyBXZWJFdmVudEZhY3RvcnkgewogcHVibGljOgogICAgIHN0
YXRpYyBXZWJLZXlib2FyZEV2ZW50IGNyZWF0ZVdlYktleWJvYXJkRXZlbnQoc3RydWN0IHdwZV9p
bnB1dF9rZXlib2FyZF9ldmVudCosIGNvbnN0IFN0cmluZyYsIGJvb2wgaGFuZGxlZEJ5SW5wdXRN
ZXRob2QsIE9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4+JiYs
IE9wdGlvbmFsPEVkaXRpbmdSYW5nZT4mJik7CiAgICAgc3RhdGljIFdlYk1vdXNlRXZlbnQgY3Jl
YXRlV2ViTW91c2VFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X3BvaW50ZXJfZXZlbnQqLCBmbG9hdCBk
ZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgc3RhdGljIFdlYldoZWVsRXZlbnQgY3JlYXRlV2ViV2hl
ZWxFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQqLCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3Rvcik7CisgICAgc3RhdGljIFdlYldoZWVsRXZlbnQgY3JlYXRlV2ViV2hlZWxFdmVudChzdHJ1
Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQqLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgV2ViV2hl
ZWxFdmVudDo6UGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpOwogI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgc3RhdGljIFdlYlRvdWNoRXZlbnQgY3JlYXRlV2Vi
VG91Y2hFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50KiwgZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IGI4ZDI5YzRmOWQ3NDE1NTc5YjRkNzYzNTE5OGUx
MzE0ZTZjZDFmZGMuLmM4YjQxZjQwNzc3NGQyMzM3ZTk5Y2M3ZjkxNTFlYzY1YmUzZmM1MzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwu
Y3BwCkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3Vj
aEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmIHRvdWNoRXZlbnQsIGIKICAgICBpZiAo
c2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaGFuZGxlRXZlbnQodG91Y2hQb2ludCkpIHsKICAgICAg
ICAgc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiBheGlzRXZlbnQgPSBzY3JvbGxHZXN0dXJl
Q29udHJvbGxlci5heGlzRXZlbnQoKTsKICAgICAgICAgaWYgKGF4aXNFdmVudC0+dHlwZSAhPSB3
cGVfaW5wdXRfYXhpc19ldmVudF90eXBlX251bGwpCi0gICAgICAgICAgICBwYWdlLmhhbmRsZVdo
ZWVsRXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJXaGVlbEV2ZW50KGF4aXNFdmVudCwgbV92aWV3LnBh
Z2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgICAgICAgICBwYWdlLmhhbmRsZVdoZWVs
RXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJXaGVlbEV2ZW50KGF4aXNFdmVudCwgbV92aWV3LnBhZ2Uo
KS5kZXZpY2VTY2FsZUZhY3RvcigpLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lLCBX
ZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2Vz
dHVyZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9TY3Jv
bGxHZXN0dXJlQ29udHJvbGxlci5jcHAKaW5kZXggYjJjZTdlMmZjM2M0OTU0MTcyZTQ4NGM2YjBj
MTg3ODg2OWNlNzVjYS4uM2EyZmExZDY3NTczOWY3ZDljYjRjODlhZTk1YWNjZjllYzAxMWJiMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9TY3JvbGxHZXN0dXJl
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9TY3Jv
bGxHZXN0dXJlQ29udHJvbGxlci5jcHAKQEAgLTY5LDYgKzY5LDcgQEAgYm9vbCBTY3JvbGxHZXN0
dXJlQ29udHJvbGxlcjo6aGFuZGxlRXZlbnQoY29uc3Qgc3RydWN0IHdwZV9pbnB1dF90b3VjaF9l
dmVudF9yYXcKICNlbmRpZgogICAgICAgICAgICAgbV9vZmZzZXQueCA9IHRvdWNoUG9pbnQtPng7
CiAgICAgICAgICAgICBtX29mZnNldC55ID0gdG91Y2hQb2ludC0+eTsKKyAgICAgICAgICAgIG1f
cGhhc2UgPSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzcsMTYg
Kzc4LDIwIEBAIGJvb2wgU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KGNvbnN0
IHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfcmF3CiAgICAgICAgICAgICBtX2hhbmRsaW5n
ID0gZmFsc2U7CiAjaWYgV1BFX0NIRUNLX1ZFUlNJT04oMSwgNSwgMCkKICAgICAgICAgICAgIG1f
YXhpc0V2ZW50LmJhc2UgPSB7Ci0gICAgICAgICAgICAgICAgd3BlX2lucHV0X2F4aXNfZXZlbnRf
dHlwZV9udWxsLAotICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAKKyAgICAgICAgICAg
ICAgICBtX2F4aXNFdmVudC5iYXNlLnR5cGUsCisgICAgICAgICAgICAgICAgdG91Y2hQb2ludC0+
dGltZSwgbV9zdGFydC54LCBtX3N0YXJ0LnksCisgICAgICAgICAgICAgICAgMCwgMCwgMAogICAg
ICAgICAgICAgfTsKICAgICAgICAgICAgIG1fYXhpc0V2ZW50LnhfYXhpcyA9IG1fYXhpc0V2ZW50
LnlfYXhpcyA9IDA7CiAjZWxzZQogICAgICAgICAgICAgbV9heGlzRXZlbnQgPSB7Ci0gICAgICAg
ICAgICAgICAgd3BlX2lucHV0X2F4aXNfZXZlbnRfdHlwZV9udWxsLAotICAgICAgICAgICAgICAg
IDAsIDAsIDAsIDAsIDAsIDAKKyAgICAgICAgICAgICAgICB3cGVfaW5wdXRfYXhpc19ldmVudF90
eXBlX21vdGlvbiwKKyAgICAgICAgICAgICAgICB0b3VjaFBvaW50LT50aW1lLCBtX3N0YXJ0Lngs
IG1fc3RhcnQueSwKKyAgICAgICAgICAgICAgICAwLCAwLCAwCiAgICAgICAgICAgICB9OwogI2Vu
ZGlmCisgICAgICAgICAgICBtX29mZnNldC54ID0gbV9vZmZzZXQueSA9IDA7CisgICAgICAgICAg
ICBtX3BoYXNlID0gV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlRW5kZWQ7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVDb250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVDb250
cm9sbGVyLmgKaW5kZXggMjM0ZTk0YTFjYzhlYWFjY2QyNDUyNGM1ZWY1NmFkYjViOGRlYTk4Zi4u
MmQ4N2Y5NWMyNGVjNWEzOWI3ZjEwZGU2YWE1NWVkZTgyNmExNjg4YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9TY3JvbGxHZXN0dXJlQ29udHJvbGxlci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xs
ZXIuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIldlYkV2
ZW50LmgiCiAjaW5jbHVkZSA8d3BlL3dwZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQz
LDYgKzQ0LDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgV2ViV2hlZWxFdmVudDo6
UGhhc2UgcGhhc2UoKSB7IHJldHVybiBtX3BoYXNlOyB9CisKICAgICBib29sIGlzSGFuZGxpbmco
KSBjb25zdCB7IHJldHVybiBtX2hhbmRsaW5nOyB9CiAgICAgYm9vbCBoYW5kbGVFdmVudChjb25z
dCBzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50X3JhdyopOwogCkBAIC02NCw2ICs2Nyw3IEBA
IHByaXZhdGU6CiAjZWxzZQogICAgIHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCBtX2F4aXNF
dmVudDsKICNlbmRpZgorICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1fcGhhc2UgeyBXZWJXaGVl
bEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwCmluZGV4IDk1YWIx
NzZlODNmNTk3MTRiMzVlNWQ3NGIyOGMxNGExMjM3ZTU3MGMuLmNjODFlZWM2YmY3MmEyMDc1Yzg2
MTFmODA3NmU5MmI4OGZlNmQ3ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvV1BFVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dw
ZS9XUEVWaWV3LmNwcApAQCAtMTYxLDcgKzE2MSw3IEBAIFZpZXc6OlZpZXcoc3RydWN0IHdwZV92
aWV3X2JhY2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mIGJhc2VD
CiAgICAgICAgIFtdKHZvaWQqIGRhdGEsIHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCogZXZl
bnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8mIHBhZ2UgPSByZWludGVycHJldF9jYXN0
PFZpZXcqPihkYXRhKS0+cGFnZSgpOwotICAgICAgICAgICAgcGFnZS5oYW5kbGVXaGVlbEV2ZW50
KFdlYktpdDo6TmF0aXZlV2ViV2hlZWxFdmVudChldmVudCwgcGFnZS5kZXZpY2VTY2FsZUZhY3Rv
cigpKSk7CisgICAgICAgICAgICBwYWdlLmhhbmRsZVdoZWVsRXZlbnQoV2ViS2l0OjpOYXRpdmVX
ZWJXaGVlbEV2ZW50KGV2ZW50LCBwYWdlLmRldmljZVNjYWxlRmFjdG9yKCksIFdlYldoZWVsRXZl
bnQ6OlBoYXNlOjpQaGFzZU5vbmUsIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZU5vbmUpKTsK
ICAgICAgICAgfSwKICAgICAgICAgLy8gaGFuZGxlX3RvdWNoX2V2ZW50CiAgICAgICAgIFtdKHZv
aWQqIGRhdGEsIHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnQqIGV2ZW50KQpAQCAtMTc1LDkg
KzE3NSw3IEBAIFZpZXc6OlZpZXcoc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIGJhY2tlbmQsIGNv
bnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mIGJhc2VDCiAgICAgICAgICAgICBpZiAoc2Nyb2xs
R2VzdHVyZUNvbnRyb2xsZXIuaXNIYW5kbGluZygpKSB7CiAgICAgICAgICAgICAgICAgY29uc3Qg
c3RydWN0IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXcqIHRvdWNoUG9pbnQgPSB0b3VjaEV2ZW50
Lm5hdGl2ZUZhbGxiYWNrVG91Y2hQb2ludCgpOwogICAgICAgICAgICAgICAgIGlmICh0b3VjaFBv
aW50LT50eXBlICE9IHdwZV9pbnB1dF90b3VjaF9ldmVudF90eXBlX251bGwgJiYgc2Nyb2xsR2Vz
dHVyZUNvbnRyb2xsZXIuaGFuZGxlRXZlbnQodG91Y2hQb2ludCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiBheGlzRXZlbnQgPSBzY3JvbGxHZXN0
dXJlQ29udHJvbGxlci5heGlzRXZlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF4aXNF
dmVudC0+dHlwZSAhPSB3cGVfaW5wdXRfYXhpc19ldmVudF90eXBlX251bGwpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBwYWdlLmhhbmRsZVdoZWVsRXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJXaGVl
bEV2ZW50KGF4aXNFdmVudCwgcGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgICAgICAg
ICAgICAgICAgIHBhZ2UuaGFuZGxlV2hlZWxFdmVudChXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZl
bnQoc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuYXhpc0V2ZW50KCksIHBhZ2UuZGV2aWNlU2NhbGVG
YWN0b3IoKSwgc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIucGhhc2UoKSwgV2ViV2hlZWxFdmVudDo6
UGhhc2U6OlBoYXNlTm9uZSkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394712</attachid>
            <date>2020-03-27 02:01:39 -0700</date>
            <delta_ts>2020-03-27 05:54:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209230-20200327090138.patch</filename>
            <type>text/plain</type>
            <size>40936</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4ODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg4NTRlOWFkMDU4ODgw
YTg4ODExNGMzZDUwYWJjMTdkMDMyOWU1My4uMmVlM2FhMmYyMGMzMzUwNjdhMGVkYjExYmRhYmQ2
ZWRiODJkNTliNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIwLTAzLTI1ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEVuYWJsZSBr
aW5ldGljIHNjcm9sbGluZyB3aXRoIGFzeW5jIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5MjMwCisKKyAgICAgICAgUmV2aWV3ZWQg
Ynkgxb1hbiBEb2JlcsWhZWsuCisKKyAgICAgICAgUmVmYWN0b3IgU2Nyb2xsQW5pbWF0aW9uS2lu
ZXRpYyBzbyB0aGF0IGl0IG5vIGxvbmdlciBkZXBlbmRzIG9uCisgICAgICAgIFNjcm9sbGFibGVB
cmVhLCB1c2VzIFJ1bkxvb3A6OlRpbWVyIGFuZCBpcyByZXNwb25zaWJsZSBmb3IgdHJhY2tpbmcK
KyAgICAgICAgdGhlIGhpc3Rvcnkgb2Ygc2Nyb2xsIGV2ZW50cy4gVGhpcyBhbGxvd3MgaXQgdG8g
YmUgdXNlZCBpbgorICAgICAgICBTY3JvbGxpbmdUcmVlKlNjcm9sbGluZ05vZGVOaWNvc2lhIHRv
IHByb3ZpZGUga2luZXRpYyBzY3JvbGxpbmcgd2hlbgorICAgICAgICBhc3luYyBzY3JvbGxpbmcg
aXMgZW5hYmxlZCwgb24gR1RLIGFuZCBXUEUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGlz
IGp1c3QgZW5hYmxlcyBleGlzdGluZyBmdW5jdGlvbmFsaXR5IGluIG1vcmUgc2l0dWF0aW9ucy4K
KworICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjpzY3JvbGxU
byk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUu
aDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Njcm9sbGluZ1RyZWVGcmFtZVNj
cm9sbGluZ05vZGVOaWNvc2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVOaWNvc2lhOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
Tmljb3NpYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlTmljb3NpYTo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTmljb3NpYTo6c3RvcFNjcm9sbEFuaW1hdGlvbnMpOgor
ICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZU5pY29zaWEuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Njcm9s
bGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVOaWNvc2lhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVOaWNvc2lhOjpTY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTmljb3NpYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTmljb3NpYTo6aGFuZGxlV2hlZWxFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTmlj
b3NpYTo6c3RvcFNjcm9sbEFuaW1hdGlvbnMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL25p
Y29zaWEvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZU5pY29zaWEuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWMpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6YXBwZW5kVG9TY3JvbGxIaXN0
b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OmNsZWFyU2Ny
b2xsSGlzdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjpj
b21wdXRlVmVsb2NpdHkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uS2luZXRp
Yzo6c3RhcnQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OlNjcm9sbEFuaW1hdG9yR2Vu
ZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckdlbmVyaWM6OnNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckdlbmVyaWM6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JHZW5lcmljOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckdlbmVyaWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYzo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6
CisgICAgICAgICogcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuaDoKKwog
MjAyMC0wMy0yMyAgQ2hhcmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dTdHJlYW1lcl0gRmFpbCBncmFjZWZ1bGx5IGluIHRoZSBhYnNlbmNlIG9mIGEgV2ViVlRU
IGVuY29kZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM0YjE2MTkwZGE3ZDIwZjVjNTU2YTczNGUxZDgwZWViZjAy
MTdhNTQuLmNhNzg0ZWFlNzNlZGQ0NTI1NmZjZjMyN2FlODdmZWU0YTE5NzRlNjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzMgQEAKKzIwMjAtMDMtMjUgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gRW5hYmxlIGtpbmV0aWMgc2Nyb2xsaW5nIHdpdGgg
YXN5bmMgc2Nyb2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDkyMzAKKworICAgICAgICBSZXZpZXdlZCBieSDFvWFuIERvYmVyxaFlay4KKwor
ICAgICAgICBNb2RpZnkgV1BFIG1vdXNld2hlZWwgZXZlbnQgZGVsaXZlcnkgc28gdGhhdCBpdCBp
bmNsdWRlcyB0aGUgbmVjZXNzYXJ5CisgICAgICAgIHBoYXNlcyBuZWVkZWQgdG8gaW5mZXIgcHJl
c3MvcmVsZWFzZSB0aW1lcyBhbmQgYWxsb3cgZm9yIGtpbmV0aWMKKyAgICAgICAgc2Nyb2xsaW5n
LgorCisgICAgICAgICogU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaDoKKyAgICAgICAgKiBT
aGFyZWQvV2ViRXZlbnQuaDoKKyAgICAgICAgKiBTaGFyZWQvV2ViV2hlZWxFdmVudC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYldoZWVsRXZlbnQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYldoZWVsRXZlbnQ6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL2xpYndwZS9O
YXRpdmVXZWJXaGVlbEV2ZW50TGliV1BFLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmF0aXZlV2Vi
V2hlZWxFdmVudDo6TmF0aXZlV2ViV2hlZWxFdmVudCk6CisgICAgICAgICogU2hhcmVkL2xpYndw
ZS9XZWJFdmVudEZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rvcnk6
OmNyZWF0ZVdlYldoZWVsRXZlbnQpOgorICAgICAgICAqIFNoYXJlZC9saWJ3cGUvV2ViRXZlbnRG
YWN0b3J5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3VjaEV2ZW50KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9TY3JvbGxHZXN0dXJlQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlNjcm9sbEdlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVFdmVudCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaDoK
KyAgICAgICAgKFdlYktpdDo6U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6OnBoYXNlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcDoKKyAgICAgICAgKFdLV1BFOjptX2Jh
Y2tlbmQpOgorCiAyMDIwLTAzLTIzICBDaHJpcyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbV1BFXSBBc3luY1Njcm9sbGluZzogaG9yaXpvbnRhbCBzY3JvbGxpbmcgaXMgaW52
ZXJ0ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcAppbmRleCBlYTI4ZTA5NTUzMDMwOTRmNjNkM2Zm
YTY1Y2UwYjg1OWJiZWUyOTAzLi5lOGU2N2U5MGJhODg2MmZiZDAyZDJkMTljODI3ZGQ1YzlkNWQz
ZjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCkBAIC0xNjksNiArMTY5LDkgQEAgdm9pZCBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6c2Nyb2xsVG8oY29uc3QgRmxvYXRQb2ludCYgcG9z
aXRpb24sIFNjcm9sbFR5cGUKICAgICBpZiAocG9zaXRpb24gPT0gbV9jdXJyZW50U2Nyb2xsUG9z
aXRpb24pCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChzY3JvbGxUeXBlID09IFNjcm9sbFR5
cGU6OlByb2dyYW1tYXRpYykKKyAgICAgICAgc3RvcFNjcm9sbEFuaW1hdGlvbnMoKTsKKwogICAg
IHNjcm9sbGluZ1RyZWUoKS5zZXRJc0hhbmRsaW5nUHJvZ3JhbW1hdGljU2Nyb2xsKHNjcm9sbFR5
cGUgPT0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljKTsKICAgICAKICAgICBtX2N1cnJlbnRTY3Jv
bGxQb3NpdGlvbiA9IGFkanVzdGVkU2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIGNsYW1wKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZS5oCmluZGV4IDJiNDJlNDM2ZjJjYzliOTRmZjA2Njc1ZTc3ODY2YjBkYzAz
ZmU3ZTMuLmU4OTVjNmQ4MDMzNjQxNmM3YmY1ZmIwOGUzMWM4MTBiMDZlZmU5YzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGUuaApAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY3JvbGxU
byhjb25zdCBGbG9hdFBvaW50JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9s
bENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwogICAgIHZvaWQgc2Nyb2xsQnko
Y29uc3QgRmxvYXRTaXplJiwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBl
ZCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFNjcm9sbEFuaW1hdGlvbnMoKSB7IH07CisKICAg
ICB2b2lkIHdhc1Njcm9sbGVkQnlEZWxlZ2F0ZWRTY3JvbGxpbmcoY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24sIE9wdGlvbmFsPEZsb2F0UmVjdD4gb3ZlcnJpZGVMYXlvdXRWaWV3cG9ydCA9IHsg
fSwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbiA9IFNjcm9sbGluZ0xheWVyUG9zaXRpb25B
Y3Rpb246OlN5bmMpOwogICAgIAogI2lmIEVOQUJMRShTQ1JPTExJTkdfVEhSRUFEKQpAQCAtNzUs
NiArNzcsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5C
eVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMuaG9yaXpv
bnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGU7IH0KICAgICBib29sIHZlcnRpY2FsU2Nyb2xsYmFy
SGlkZGVuQnlTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJz
LnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZTsgfQorICAgIGJvb2wgY2FuSGF2ZUhvcml6
b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhUGFyYW1ldGVy
cy5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSAhPSBTY3JvbGxiYXJBbHdheXNPZmY7IH0KKyAgICBi
b29sIGNhbkhhdmVWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJs
ZUFyZWFQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSAhPSBTY3JvbGxiYXJBbHdheXNP
ZmY7IH0KICAgICBib29sIGNhbkhhdmVTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jv
bGxhYmxlQXJlYVBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgIT0gU2Nyb2xsYmFy
QWx3YXlzT2ZmIHx8IG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsYmFy
TW9kZSAhPSBTY3JvbGxiYXJBbHdheXNPZmY7IH0KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Nj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVOaWNvc2lhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU5p
Y29zaWEuY3BwCmluZGV4IGE2YTUzNzdkMDE0YWNlYzgyMzE4M2UwOWI1MGUxYzk0MzhiMTc3M2Eu
LjhkZmFhMmQyMGQwM2MzMDIyYjA3Y2VjMzJkNmIyY2NhMDJkNzE5ZWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZU5pY29zaWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L25pY29zaWEvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU5pY29zaWEuY3BwCkBAIC0z
Nyw2ICszNywxMCBAQAogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2Rl
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgogCisjaWYgRU5BQkxFKEtJTkVUSUNfU0NS
T0xMSU5HKQorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbktpbmV0aWMuaCIKKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlZjxTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
PiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTmljb3NpYTo6Y3JlYXRlKFNjcm9sbGlu
Z1RyZWUmIHNjcm9sbGluZ1RyZWUsIFNjcm9sbGluZ05vZGVUeXBlIG5vZGVUeXBlLCBTY3JvbGxp
bmdOb2RlSUQgbm9kZUlEKQpAQCAtNDcsNiArNTEsMjAgQEAgUmVmPFNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGU+IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVOaWNvc2lhOjpj
cmUKIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVOaWNvc2lhOjpTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlTmljb3NpYShTY3JvbGxpbmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBT
Y3JvbGxpbmdOb2RlVHlwZSBub2RlVHlwZSwgU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkKICAgICA6
IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUoc2Nyb2xsaW5nVHJlZSwgbm9kZVR5cGUs
IG5vZGVJRCkKIHsKKyNpZiBFTkFCTEUoS0lORVRJQ19TQ1JPTExJTkcpCisgICAgbV9raW5ldGlj
QW5pbWF0aW9uID0gbWFrZVVuaXF1ZTxTY3JvbGxBbmltYXRpb25LaW5ldGljPigKKyAgICAgICAg
W3RoaXNdKCkgLT4gU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6U2Nyb2xsRXh0ZW50cyB7CisgICAg
ICAgICAgICByZXR1cm4geyBJbnRQb2ludChtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSksIEludFBv
aW50KG1heGltdW1TY3JvbGxQb3NpdGlvbigpKSB9OworICAgICAgICB9LAorICAgICAgICBbdGhp
c10oRmxvYXRQb2ludCYmIHBvc2l0aW9uKSB7CisgICAgICAgICAgICBhdXRvKiBzY3JvbGxMYXll
ciA9IHN0YXRpY19jYXN0PE5pY29zaWE6OlBsYXRmb3JtTGF5ZXIqPihzY3JvbGxlZENvbnRlbnRz
TGF5ZXIoKSk7CisgICAgICAgICAgICBBU1NFUlQoc2Nyb2xsTGF5ZXIpOworICAgICAgICAgICAg
YXV0byYgY29tcG9zaXRpb25MYXllciA9IGRvd25jYXN0PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5
ZXI+KCpzY3JvbGxMYXllcik7CisKKyAgICAgICAgICAgIGF1dG8gdXBkYXRlU2NvcGUgPSBjb21w
b3NpdGlvbkxheWVyLmNyZWF0ZVVwZGF0ZVNjb3BlKCk7CisgICAgICAgICAgICBzY3JvbGxUbyhw
b3NpdGlvbik7CisgICAgICAgIH0pOworI2VuZGlmCiB9CiAKIFNjcm9sbGluZ1RyZWVGcmFtZVNj
cm9sbGluZ05vZGVOaWNvc2lhOjp+U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU5pY29z
aWEoKSA9IGRlZmF1bHQ7CkBAIC0xMDgsMTQgKzEyNiwzOCBAQCBTY3JvbGxpbmdFdmVudFJlc3Vs
dCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTmljb3NpYTo6aGFuZGxlV2hlZWxFdmVu
dChjbwogCiAgICAgICAgIGF1dG8gdXBkYXRlU2NvcGUgPSBjb21wb3NpdGlvbkxheWVyLmNyZWF0
ZVVwZGF0ZVNjb3BlKCk7CiAgICAgICAgIHNjcm9sbEJ5KHsgLXdoZWVsRXZlbnQuZGVsdGFYKCks
IC13aGVlbEV2ZW50LmRlbHRhWSgpIH0pOworCisjaWYgRU5BQkxFKEtJTkVUSUNfU0NST0xMSU5H
KQorICAgICAgICBtX2tpbmV0aWNBbmltYXRpb24tPmFwcGVuZFRvU2Nyb2xsSGlzdG9yeSh3aGVl
bEV2ZW50KTsKKyNlbmRpZgogICAgIH0KIAorI2lmIEVOQUJMRShLSU5FVElDX1NDUk9MTElORykK
KyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0b3AoKTsKKyAgICBpZiAod2hlZWxFdmVudC5pc0Vu
ZE9mTm9uTW9tZW50dW1TY3JvbGwoKSkgeworICAgICAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0
YXJ0KGN1cnJlbnRTY3JvbGxQb3NpdGlvbigpLCBtX2tpbmV0aWNBbmltYXRpb24tPmNvbXB1dGVW
ZWxvY2l0eSgpLCBjYW5IYXZlSG9yaXpvbnRhbFNjcm9sbGJhcigpLCBjYW5IYXZlVmVydGljYWxT
Y3JvbGxiYXIoKSk7CisgICAgICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+Y2xlYXJTY3JvbGxIaXN0
b3J5KCk7CisgICAgfQorICAgIGlmICh3aGVlbEV2ZW50LmlzVHJhbnNpdGlvbmluZ1RvTW9tZW50
dW1TY3JvbGwoKSkgeworICAgICAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0YXJ0KGN1cnJlbnRT
Y3JvbGxQb3NpdGlvbigpLCB3aGVlbEV2ZW50LnN3aXBlVmVsb2NpdHkoKSwgY2FuSGF2ZUhvcml6
b250YWxTY3JvbGxiYXIoKSwgY2FuSGF2ZVZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgICAgICBt
X2tpbmV0aWNBbmltYXRpb24tPmNsZWFyU2Nyb2xsSGlzdG9yeSgpOworICAgIH0KKyNlbmRpZgor
CiAgICAgc2Nyb2xsaW5nVHJlZSgpLnNldE9yQ2xlYXJMYXRjaGVkTm9kZSh3aGVlbEV2ZW50LCBz
Y3JvbGxpbmdOb2RlSUQoKSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byByZXR1cm4g
d2hldGhlciB0aGUgZXZlbnQgd2FzIGhhbmRsZWQuCiAgICAgcmV0dXJuIFNjcm9sbGluZ0V2ZW50
UmVzdWx0OjpEaWRIYW5kbGVFdmVudDsKIH0KIAordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3Jv
bGxpbmdOb2RlTmljb3NpYTo6c3RvcFNjcm9sbEFuaW1hdGlvbnMoKQoreworI2lmIEVOQUJMRShL
SU5FVElDX1NDUk9MTElORykKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0b3AoKTsKKyAgICBt
X2tpbmV0aWNBbmltYXRpb24tPmNsZWFyU2Nyb2xsSGlzdG9yeSgpOworI2VuZGlmCit9CisKIEZs
b2F0UG9pbnQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU5pY29zaWE6OmFkanVzdGVk
U2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIFNjcm9sbENsYW1waW5n
IGNsYW1waW5nKSBjb25zdAogewogICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb24ocm91bmRm
KHBvc2l0aW9uLngoKSksIHJvdW5kZihwb3NpdGlvbi55KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZU5pY29zaWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEv
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU5pY29zaWEuaAppbmRleCAxNzE2ODdkYjgy
YTc2NzY4YzIwOGJhY2FhMmMwMTZjY2YzNmM3NDNhLi5kYWQxYWNkZDc2M2MwNjczMGIwNWY0NTIw
NTM3OTQzOTViYTY4MTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9uaWNvc2lhL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVOaWNvc2lhLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbmljb3NpYS9TY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlTmljb3NpYS5oCkBAIC0zOSw2ICszOSw3IEBAIGNsYXNzIENvbXBvc2l0aW9u
TGF5ZXI7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNjcm9sbEFuaW1hdGlvbktp
bmV0aWM7CiAKIGNsYXNzIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVOaWNvc2lhIGZp
bmFsIDogcHVibGljIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUgewogcHVibGljOgpA
QCAtNTMsNiArNTQsOCBAQCBwcml2YXRlOgogCiAgICAgU2Nyb2xsaW5nRXZlbnRSZXN1bHQgaGFu
ZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKIAorICAg
IHZvaWQgc3RvcFNjcm9sbEFuaW1hdGlvbnMoKSBvdmVycmlkZTsKKwogICAgIEZsb2F0UG9pbnQg
YWRqdXN0ZWRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiwgU2Nyb2xsQ2xhbXBpbmcp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBjdXJyZW50U2Nyb2xsUG9zaXRpb25DaGFuZ2Vk
KCkgb3ZlcnJpZGU7CkBAIC02Niw2ICs2OSwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxOaWNv
c2lhOjpDb21wb3NpdGlvbkxheWVyPiBtX2NvbnRlbnRTaGFkb3dMYXllcjsKICAgICBSZWZQdHI8
Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9oZWFkZXJMYXllcjsKICAgICBSZWZQdHI8Tmlj
b3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9mb290ZXJMYXllcjsKKworI2lmIEVOQUJMRShLSU5F
VElDX1NDUk9MTElORykKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uS2luZXRp
Yz4gbV9raW5ldGljQW5pbWF0aW9uOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Nj
cm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVOaWNvc2lhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZU5pY29zaWEuY3BwCmluZGV4IDFkZWZkNTQ0MzQxODM5MTQ3YzI2ZDE0MjZiZWMxNmFlNGFl
YjMxOTcuLjcyYjg3Zjg5MDEzNzE2NDBkNDNjYjEyYTY4NmVkNTEyYWJmNTBjMDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZU92
ZXJmbG93U2Nyb2xsaW5nTm9kZU5pY29zaWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZU5pY29z
aWEuY3BwCkBAIC0zMiw2ICszMiw5IEBACiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYg
VVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJOaWNvc2lhUGxhdGZvcm1MYXllci5oIgorI2lmIEVO
QUJMRShLSU5FVElDX1NDUk9MTElORykKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25LaW5ldGlj
LmgiCisjZW5kaWYKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZS5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWUuaCIKIApAQCAtNDUsNiArNDgsMjAgQEAgUmVm
PFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGU+IFNjcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGVOaWNvc2kKIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVO
aWNvc2lhOjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTmljb3NpYShTY3JvbGxp
bmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKQogICAgIDogU2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZShzY3JvbGxpbmdUcmVlLCBub2RlSUQpCiB7
CisjaWYgRU5BQkxFKEtJTkVUSUNfU0NST0xMSU5HKQorICAgIG1fa2luZXRpY0FuaW1hdGlvbiA9
IG1ha2VVbmlxdWU8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4oCisgICAgICAgIFt0aGlzXSgpIC0+
IFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OlNjcm9sbEV4dGVudHMgeworICAgICAgICAgICAgcmV0
dXJuIHsgSW50UG9pbnQobWluaW11bVNjcm9sbFBvc2l0aW9uKCkpLCBJbnRQb2ludChtYXhpbXVt
U2Nyb2xsUG9zaXRpb24oKSkgfTsKKyAgICAgICAgfSwKKyAgICAgICAgW3RoaXNdKEZsb2F0UG9p
bnQmJiBwb3NpdGlvbikgeworICAgICAgICAgICAgYXV0byogc2Nyb2xsTGF5ZXIgPSBzdGF0aWNf
Y2FzdDxOaWNvc2lhOjpQbGF0Zm9ybUxheWVyKj4oc2Nyb2xsZWRDb250ZW50c0xheWVyKCkpOwor
ICAgICAgICAgICAgQVNTRVJUKHNjcm9sbExheWVyKTsKKyAgICAgICAgICAgIGF1dG8mIGNvbXBv
c2l0aW9uTGF5ZXIgPSBkb3duY2FzdDxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPigqc2Nyb2xs
TGF5ZXIpOworCisgICAgICAgICAgICBhdXRvIHVwZGF0ZVNjb3BlID0gY29tcG9zaXRpb25MYXll
ci5jcmVhdGVVcGRhdGVTY29wZSgpOworICAgICAgICAgICAgc2Nyb2xsVG8ocG9zaXRpb24pOwor
ICAgICAgICB9KTsKKyNlbmRpZgogfQogCiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdO
b2RlTmljb3NpYTo6flNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVOaWNvc2lhKCkg
PSBkZWZhdWx0OwpAQCAtOTQsMTMgKzExMSwzNyBAQCBTY3JvbGxpbmdFdmVudFJlc3VsdCBTY3Jv
bGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTmljb3NpYTo6aGFuZGxlV2hlZWxFdmVudAog
CiAgICAgICAgIGF1dG8gdXBkYXRlU2NvcGUgPSBjb21wb3NpdGlvbkxheWVyLmNyZWF0ZVVwZGF0
ZVNjb3BlKCk7CiAgICAgICAgIHNjcm9sbEJ5KHsgLXdoZWVsRXZlbnQuZGVsdGFYKCksIC13aGVl
bEV2ZW50LmRlbHRhWSgpIH0pOworCisjaWYgRU5BQkxFKEtJTkVUSUNfU0NST0xMSU5HKQorICAg
ICAgICBtX2tpbmV0aWNBbmltYXRpb24tPmFwcGVuZFRvU2Nyb2xsSGlzdG9yeSh3aGVlbEV2ZW50
KTsKKyNlbmRpZgorICAgIH0KKworI2lmIEVOQUJMRShLSU5FVElDX1NDUk9MTElORykKKyAgICBt
X2tpbmV0aWNBbmltYXRpb24tPnN0b3AoKTsKKyAgICBpZiAod2hlZWxFdmVudC5pc0VuZE9mTm9u
TW9tZW50dW1TY3JvbGwoKSkgeworICAgICAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0YXJ0KGN1
cnJlbnRTY3JvbGxQb3NpdGlvbigpLCBtX2tpbmV0aWNBbmltYXRpb24tPmNvbXB1dGVWZWxvY2l0
eSgpLCBjYW5IYXZlSG9yaXpvbnRhbFNjcm9sbGJhcigpLCBjYW5IYXZlVmVydGljYWxTY3JvbGxi
YXIoKSk7CisgICAgICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+Y2xlYXJTY3JvbGxIaXN0b3J5KCk7
CiAgICAgfQorICAgIGlmICh3aGVlbEV2ZW50LmlzVHJhbnNpdGlvbmluZ1RvTW9tZW50dW1TY3Jv
bGwoKSkgeworICAgICAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0YXJ0KGN1cnJlbnRTY3JvbGxQ
b3NpdGlvbigpLCB3aGVlbEV2ZW50LnN3aXBlVmVsb2NpdHkoKSwgY2FuSGF2ZUhvcml6b250YWxT
Y3JvbGxiYXIoKSwgY2FuSGF2ZVZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgICAgICBtX2tpbmV0
aWNBbmltYXRpb24tPmNsZWFyU2Nyb2xsSGlzdG9yeSgpOworICAgIH0KKyNlbmRpZgogCiAgICAg
c2Nyb2xsaW5nVHJlZSgpLnNldE9yQ2xlYXJMYXRjaGVkTm9kZSh3aGVlbEV2ZW50LCBzY3JvbGxp
bmdOb2RlSUQoKSk7CiAKICAgICByZXR1cm4gU2Nyb2xsaW5nRXZlbnRSZXN1bHQ6OkRpZEhhbmRs
ZUV2ZW50OwogfQogCit2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVOaWNv
c2lhOjpzdG9wU2Nyb2xsQW5pbWF0aW9ucygpCit7CisjaWYgRU5BQkxFKEtJTkVUSUNfU0NST0xM
SU5HKQorICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c3RvcCgpOworICAgIG1fa2luZXRpY0FuaW1h
dGlvbi0+Y2xlYXJTY3JvbGxIaXN0b3J5KCk7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKE5JQ09T
SUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Nj
cm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVOaWNvc2lhLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05v
ZGVOaWNvc2lhLmgKaW5kZXggYTFmOWM4MTJlNjg5NWJhY2IxMzEyMmFjMmJhYTU0N2JjYmQxYTFh
Ny4uZTZmNDYxYTlmNmU2YTNmNDcyY2Q4NjBjZGY1ZjhhNzZhZTFkOTZkNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbmljb3NpYS9TY3JvbGxpbmdUcmVlT3ZlcmZs
b3dTY3JvbGxpbmdOb2RlTmljb3NpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZU5pY29zaWEuaApA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU2Nyb2xsQW5pbWF0aW9uS2lu
ZXRpYzsKIAogY2xhc3MgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZU5pY29zaWEg
ZmluYWwgOiBwdWJsaWMgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZSB7CiBwdWJs
aWM6CkBAIC00OSw2ICs1MCwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVwb3NpdGlvblNjcm9s
bGluZ0xheWVycygpIG92ZXJyaWRlOwogCiAgICAgU2Nyb2xsaW5nRXZlbnRSZXN1bHQgaGFuZGxl
V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKKworICAgIHZv
aWQgc3RvcFNjcm9sbEFuaW1hdGlvbnMoKSBvdmVycmlkZTsKKworI2lmIEVOQUJMRShLSU5FVElD
X1NDUk9MTElORykKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4g
bV9raW5ldGljQW5pbWF0aW9uOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5l
dGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMu
Y3BwCmluZGV4IGFjOWYyZjBmMzdmMWU4MDU4NjBmMDM2YjQyYjBkMDI3NjIwYzFkZTIuLmVjZDk3
YzY0NjEyMDVkMzMwOTVmM2VhODczMzcyNjMwZjdlYjI3MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3BwCkBAIC0yNiw3ICsyNiw4
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9uS2luZXRp
Yy5oIgogCi0jaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdo
ZWVsRXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4K
IAogLyoKICAqIFBlckF4aXNEYXRhIGlzIGEgcG9ydCBvZiBHdGtLaW5ldGljU2Nyb2xsaW5nIGFz
IG9mIEdUSysgMy4yMCwKQEAgLTY1LDYgKzY2LDcgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBkZWNl
bEZyaWN0aW9uID0gNDsKIHN0YXRpYyBjb25zdCBkb3VibGUgZnJhbWVSYXRlID0gNjA7CiBzdGF0
aWMgY29uc3QgU2Vjb25kcyB0aWNrVGltZSA9IDFfcyAvIGZyYW1lUmF0ZTsKIHN0YXRpYyBjb25z
dCBTZWNvbmRzIG1pbmltdW1UaW1lckludGVydmFsIHsgMV9tcyB9Oworc3RhdGljIGNvbnN0IFNl
Y29uZHMgc2Nyb2xsQ2FwdHVyZVRocmVzaG9sZCB7IDE1MF9tcyB9OwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTEwNCwxMSArMTA2LDEyIEBAIGJvb2wgU2Nyb2xsQW5pbWF0aW9uS2luZXRp
Yzo6UGVyQXhpc0RhdGE6OmFuaW1hdGVTY3JvbGwoU2Vjb25kcyB0aW1lRGVsdGEpCiAgICAgcmV0
dXJuIG1fdmVsb2NpdHk7CiB9CiAKLVNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OlNjcm9sbEFuaW1h
dGlvbktpbmV0aWMoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoRmxvYXRQb2ludCYmKT4mJiBub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbikKLSAg
ICA6IFNjcm9sbEFuaW1hdGlvbihzY3JvbGxhYmxlQXJlYSkKK1Njcm9sbEFuaW1hdGlvbktpbmV0
aWM6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWMoU2Nyb2xsRXh0ZW50c0NhbGxiYWNrJiYgc2Nyb2xs
RXh0ZW50c0Z1bmN0aW9uLCBOb3RpZnlQb3NpdGlvbkNoYW5nZWRDYWxsYmFjayYmIG5vdGlmeVBv
c2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKQorICAgIDogbV9zY3JvbGxFeHRlbnRzRnVuY3Rpb24oV1RG
TW92ZShzY3JvbGxFeHRlbnRzRnVuY3Rpb24pKQogICAgICwgbV9ub3RpZnlQb3NpdGlvbkNoYW5n
ZWRGdW5jdGlvbihXVEZNb3ZlKG5vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKSkKLSAgICAs
IG1fYW5pbWF0aW9uVGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRpb25LaW5ldGljOjphbmltYXRp
b25UaW1lckZpcmVkKQorICAgICwgbV9hbmltYXRpb25UaW1lcihSdW5Mb29wOjpjdXJyZW50KCks
IHRoaXMsICZTY3JvbGxBbmltYXRpb25LaW5ldGljOjphbmltYXRpb25UaW1lckZpcmVkKQogewor
ICAgIG1fYW5pbWF0aW9uVGltZXIuc2V0UHJpb3JpdHkoV1RGOjpSdW5Mb29wU291cmNlUHJpb3Jp
dHk6OkRpc3BsYXlSZWZyZXNoTW9uaXRvclRpbWVyKTsKIH0KIAogU2Nyb2xsQW5pbWF0aW9uS2lu
ZXRpYzo6flNjcm9sbEFuaW1hdGlvbktpbmV0aWMoKSA9IGRlZmF1bHQ7CkBAIC0xMjAsNiArMTIz
LDQwIEBAIHZvaWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6c3RvcCgpCiAgICAgbV92ZXJ0aWNh
bERhdGEgPSBXVEY6Om51bGxvcHQ7CiB9CiAKK3ZvaWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6
YXBwZW5kVG9TY3JvbGxIaXN0b3J5KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQpCit7
CisgICAgbV9zY3JvbGxIaXN0b3J5LnJlbW92ZUFsbE1hdGNoaW5nKFsmZXZlbnRdIChQbGF0Zm9y
bVdoZWVsRXZlbnQmIG90aGVyRXZlbnQpIC0+IGJvb2wgeworICAgICAgICByZXR1cm4gKGV2ZW50
LnRpbWVzdGFtcCgpIC0gb3RoZXJFdmVudC50aW1lc3RhbXAoKSkgPiBzY3JvbGxDYXB0dXJlVGhy
ZXNob2xkOworICAgIH0pOworCisgICAgbV9zY3JvbGxIaXN0b3J5LmFwcGVuZChldmVudCk7Cit9
CisKK3ZvaWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6Y2xlYXJTY3JvbGxIaXN0b3J5KCkKK3sK
KyAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsKK30KKworRmxvYXRQb2ludCBTY3JvbGxBbmlt
YXRpb25LaW5ldGljOjpjb21wdXRlVmVsb2NpdHkoKQoreworICAgIGlmIChtX3Njcm9sbEhpc3Rv
cnkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBmaXJzdCA9IG1f
c2Nyb2xsSGlzdG9yeVswXS50aW1lc3RhbXAoKTsKKyAgICBhdXRvIGxhc3QgPSBtX3Njcm9sbEhp
c3RvcnkucmJlZ2luKCktPnRpbWVzdGFtcCgpOworCisgICAgaWYgKGxhc3QgPT0gZmlyc3QpCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICBGbG9hdFBvaW50IGFjY3VtRGVsdGE7CisgICAgZm9y
IChjb25zdCBhdXRvJiBzY3JvbGxFdmVudCA6IG1fc2Nyb2xsSGlzdG9yeSkKKyAgICAgICAgYWNj
dW1EZWx0YSArPSBGbG9hdFBvaW50KHNjcm9sbEV2ZW50LmRlbHRhWCgpLCBzY3JvbGxFdmVudC5k
ZWx0YVkoKSk7CisKKyAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsKKworICAgIHJldHVybiBG
bG9hdFBvaW50KGFjY3VtRGVsdGEueCgpICogLTEgLyAobGFzdCAtIGZpcnN0KS52YWx1ZSgpLCBh
Y2N1bURlbHRhLnkoKSAqIC0xIC8gKGxhc3QgLSBmaXJzdCkudmFsdWUoKSk7Cit9CisKIHZvaWQg
U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6c3RhcnQoY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbFBv
c2l0aW9uLCBjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSwgYm9vbCBtYXlIU2Nyb2xsLCBib29s
IG1heVZTY3JvbGwpCiB7CiAgICAgc3RvcCgpOwpAQCAtMTI5LDE0ICsxNjYsMTUgQEAgdm9pZCBT
Y3JvbGxBbmltYXRpb25LaW5ldGljOjpzdGFydChjb25zdCBGbG9hdFBvaW50JiBpbml0aWFsUG9z
aXRpb24sIGNvbnN0IEZsb2EKICAgICBpZiAoIXZlbG9jaXR5LngoKSAmJiAhdmVsb2NpdHkueSgp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvIGV4dGVudHMgPSBtX3Njcm9sbEV4dGVudHNG
dW5jdGlvbigpOwogICAgIGlmIChtYXlIU2Nyb2xsKSB7Ci0gICAgICAgIG1faG9yaXpvbnRhbERh
dGEgPSBQZXJBeGlzRGF0YShtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlvbigp
LngoKSwKLSAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkueCgpLAorICAgICAgICBtX2hvcml6b250YWxEYXRhID0gUGVyQXhpc0RhdGEoZXh0ZW50cy5t
aW5pbXVtU2Nyb2xsUG9zaXRpb24ueCgpLAorICAgICAgICAgICAgZXh0ZW50cy5tYXhpbXVtU2Ny
b2xsUG9zaXRpb24ueCgpLAogICAgICAgICAgICAgaW5pdGlhbFBvc2l0aW9uLngoKSwgdmVsb2Np
dHkueCgpKTsKICAgICB9CiAgICAgaWYgKG1heVZTY3JvbGwpIHsKLSAgICAgICAgbV92ZXJ0aWNh
bERhdGEgPSBQZXJBeGlzRGF0YShtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlv
bigpLnkoKSwKLSAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbFBvc2l0
aW9uKCkueSgpLAorICAgICAgICBtX3ZlcnRpY2FsRGF0YSA9IFBlckF4aXNEYXRhKGV4dGVudHMu
bWluaW11bVNjcm9sbFBvc2l0aW9uLnkoKSwKKyAgICAgICAgICAgIGV4dGVudHMubWF4aW11bVNj
cm9sbFBvc2l0aW9uLnkoKSwKICAgICAgICAgICAgIGluaXRpYWxQb3NpdGlvbi55KCksIHZlbG9j
aXR5LnkoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRpb25LaW5ldGljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRpb25LaW5ldGljLmgKaW5kZXggY2ZkMzNjZTViNDk1OGQ0MmEwNzU0ODQxNmUxMzZjNDA5
NTI1NTQwMC4uY2YyNWU3OThjZDViMDZiMzk1MWIwMmE2NzMwMWEwMjUxOTY1MTMxNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaApAQCAt
MjcsMTUgKzI3LDE2IEBACiAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiU2Ny
b2xsQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKIAogI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CitjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiAKLWNs
YXNzIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMgZmluYWw6IHB1YmxpYyBTY3JvbGxBbmltYXRpb24g
eworY2xhc3MgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYyBmaW5hbCB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwcml2YXRlOgogICAgIGNsYXNzIFBlckF4aXNEYXRhIHsKICAgICBwdWJs
aWM6CkBAIC01OCwyMyArNTksMzcgQEAgcHJpdmF0ZToKICAgICB9OwogCiBwdWJsaWM6Ci0gICAg
U2Nyb2xsQW5pbWF0aW9uS2luZXRpYyhTY3JvbGxhYmxlQXJlYSYsIHN0ZDo6ZnVuY3Rpb248dm9p
ZChGbG9hdFBvaW50JiYpPiYmIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKTsKKyAgICBz
dHJ1Y3QgU2Nyb2xsRXh0ZW50cyB7CisgICAgICAgIEludFBvaW50IG1pbmltdW1TY3JvbGxQb3Np
dGlvbjsKKyAgICAgICAgSW50UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0aW9uOworICAgIH07CisK
KyAgICB1c2luZyBTY3JvbGxFeHRlbnRzQ2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9uPFNjcm9sbEV4
dGVudHModm9pZCk+OworICAgIHVzaW5nIE5vdGlmeVBvc2l0aW9uQ2hhbmdlZENhbGxiYWNrID0g
V1RGOjpGdW5jdGlvbjx2b2lkKEZsb2F0UG9pbnQmJik+OworCisgICAgU2Nyb2xsQW5pbWF0aW9u
S2luZXRpYyhTY3JvbGxFeHRlbnRzQ2FsbGJhY2smJiwgTm90aWZ5UG9zaXRpb25DaGFuZ2VkQ2Fs
bGJhY2smJik7CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0aW9uS2luZXRpYygpOwogCisgICAg
dm9pZCBhcHBlbmRUb1Njcm9sbEhpc3RvcnkoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Cisg
ICAgdm9pZCBjbGVhclNjcm9sbEhpc3RvcnkoKTsKKyAgICBGbG9hdFBvaW50IGNvbXB1dGVWZWxv
Y2l0eSgpOworCiAgICAgdm9pZCBzdGFydChjb25zdCBGbG9hdFBvaW50JiBpbml0aWFsUG9zaXRp
b24sIGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5LCBib29sIG1heUhTY3JvbGwsIGJvb2wgbWF5
VlNjcm9sbCk7CisgICAgdm9pZCBzdG9wKCk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBzdG9wKCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBhbmltYXRpb25UaW1lckZpcmVkKCk7CiAKLSAgICBzdGQ6OmZ1
bmN0aW9uPHZvaWQoRmxvYXRQb2ludCYmKT4gbV9ub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlv
bjsKKyAgICBTY3JvbGxFeHRlbnRzQ2FsbGJhY2sgbV9zY3JvbGxFeHRlbnRzRnVuY3Rpb247Cisg
ICAgTm90aWZ5UG9zaXRpb25DaGFuZ2VkQ2FsbGJhY2sgbV9ub3RpZnlQb3NpdGlvbkNoYW5nZWRG
dW5jdGlvbjsKIAogICAgIE9wdGlvbmFsPFBlckF4aXNEYXRhPiBtX2hvcml6b250YWxEYXRhOwog
ICAgIE9wdGlvbmFsPFBlckF4aXNEYXRhPiBtX3ZlcnRpY2FsRGF0YTsKIAogICAgIE1vbm90b25p
Y1RpbWUgbV9zdGFydFRpbWU7Ci0gICAgVGltZXIgbV9hbmltYXRpb25UaW1lcjsKKyAgICBSdW5M
b29wOjpUaW1lcjxTY3JvbGxBbmltYXRpb25LaW5ldGljPiBtX2FuaW1hdGlvblRpbWVyOwogICAg
IEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKKyAgICBWZWN0b3I8UGxhdGZvcm1XaGVlbEV2ZW50PiBt
X3Njcm9sbEhpc3Rvcnk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJp
Yy5jcHAKaW5kZXggMjA4YWY3Yjg0NzllY2FlZjU1MzBjY2M1NTdiNzM2ZWJhYmNiY2I4Zi4uZjE1
MDkzYzU2YTFlYTNmZDcyZGQ0NDE0MjU1ZGVlYzQ3MTdhMDE1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmljLmNw
cApAQCAtNDAsNyArNDAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBT
ZWNvbmRzIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uIHsgMV9zIH07CiBzdGF0
aWMgY29uc3QgU2Vjb25kcyBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXkgeyAy
X3MgfTsKLXN0YXRpYyBjb25zdCBTZWNvbmRzIHNjcm9sbENhcHR1cmVUaHJlc2hvbGQgeyAxNTBf
bXMgfTsKIAogc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6
Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKIHsKQEAgLTUxLDEzICs1MCwx
NyBAQCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OlNjcm9sbEFuaW1hdG9yR2VuZXJpYyhTY3JvbGxh
YmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxl
QXJlYSkKICAgICAsIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyKCp0aGlzLCAmU2Ny
b2xsQW5pbWF0b3JHZW5lcmljOjpvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXJGaXJlZCkK
IHsKLSAgICBtX2tpbmV0aWNBbmltYXRpb24gPSBtYWtlVW5pcXVlPFNjcm9sbEFuaW1hdGlvbktp
bmV0aWM+KG1fc2Nyb2xsYWJsZUFyZWEsIFt0aGlzXShGbG9hdFBvaW50JiYgcG9zaXRpb24pIHsK
KyAgICBtX2tpbmV0aWNBbmltYXRpb24gPSBtYWtlVW5pcXVlPFNjcm9sbEFuaW1hdGlvbktpbmV0
aWM+KAorICAgICAgICBbdGhpc10oKSAtPiBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpTY3JvbGxF
eHRlbnRzIHsKKyAgICAgICAgICAgIHJldHVybiB7IG1fc2Nyb2xsYWJsZUFyZWEubWluaW11bVNj
cm9sbFBvc2l0aW9uKCksIG1fc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbFBvc2l0aW9uKCkg
fTsKKyAgICAgICAgfSwKKyAgICAgICAgW3RoaXNdKEZsb2F0UG9pbnQmJiBwb3NpdGlvbikgewog
I2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQotICAgICAgICBpZiAobV9zbW9vdGhBbmltYXRp
b24pCi0gICAgICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+c2V0Q3VycmVudFBvc2l0aW9uKHBv
c2l0aW9uKTsKKyAgICAgICAgICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAgICAg
ICAgICBtX3Ntb290aEFuaW1hdGlvbi0+c2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uKTsKICNl
bmRpZgotICAgICAgICB1cGRhdGVQb3NpdGlvbihXVEZNb3ZlKHBvc2l0aW9uKSk7Ci0gICAgfSk7
CisgICAgICAgICAgICB1cGRhdGVQb3NpdGlvbihXVEZNb3ZlKHBvc2l0aW9uKSk7CisgICAgICAg
IH0pOwogCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAgICAgaWYgKHNjcm9sbGFibGVB
cmVhLnNjcm9sbEFuaW1hdG9yRW5hYmxlZCgpKQpAQCAtOTQsNyArOTcsNyBAQCB2b2lkIFNjcm9s
bEFuaW1hdG9yR2VuZXJpYzo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIG9mZgogewogICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBTY3JvbGxhYmxlQXJl
YTo6c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCwgdG9GbG9hdFNpemUobV9zY3JvbGxh
YmxlQXJlYS5zY3JvbGxPcmlnaW4oKSkpOwogICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c3RvcCgp
OwotICAgIG1fc2Nyb2xsSGlzdG9yeS5jbGVhcigpOworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+
Y2xlYXJTY3JvbGxIaXN0b3J5KCk7CiAKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAg
ICBpZiAobV9zbW9vdGhBbmltYXRpb24pCkBAIC0xMDQsNTYgKzEwNywzMCBAQCB2b2lkIFNjcm9s
bEFuaW1hdG9yR2VuZXJpYzo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIG9mZgogICAgIHVwZGF0ZVBvc2l0aW9uKFdURk1vdmUocG9zaXRpb24pKTsKIH0K
IAotRmxvYXRQb2ludCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OmNvbXB1dGVWZWxvY2l0eSgpCi17
Ci0gICAgaWYgKG1fc2Nyb2xsSGlzdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB7IH07
Ci0KLSAgICBhdXRvIGZpcnN0ID0gbV9zY3JvbGxIaXN0b3J5WzBdLnRpbWVzdGFtcCgpOwotICAg
IGF1dG8gbGFzdCA9IG1fc2Nyb2xsSGlzdG9yeS5yYmVnaW4oKS0+dGltZXN0YW1wKCk7Ci0KLSAg
ICBpZiAobGFzdCA9PSBmaXJzdCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIEZsb2F0UG9p
bnQgYWNjdW1EZWx0YTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNjcm9sbEV2ZW50IDogbV9zY3Jv
bGxIaXN0b3J5KQotICAgICAgICBhY2N1bURlbHRhICs9IEZsb2F0UG9pbnQoc2Nyb2xsRXZlbnQu
ZGVsdGFYKCksIHNjcm9sbEV2ZW50LmRlbHRhWSgpKTsKLQotICAgIG1fc2Nyb2xsSGlzdG9yeS5j
bGVhcigpOwotCi0gICAgcmV0dXJuIEZsb2F0UG9pbnQoYWNjdW1EZWx0YS54KCkgKiAtMSAvIChs
YXN0IC0gZmlyc3QpLnZhbHVlKCksIGFjY3VtRGVsdGEueSgpICogLTEgLyAobGFzdCAtIGZpcnN0
KS52YWx1ZSgpKTsKLX0KLQogYm9vbCBTY3JvbGxBbmltYXRvckdlbmVyaWM6OmhhbmRsZVdoZWVs
RXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkKIHsKICAgICBtX2tpbmV0aWNB
bmltYXRpb24tPnN0b3AoKTsKIAotICAgIG1fc2Nyb2xsSGlzdG9yeS5yZW1vdmVBbGxNYXRjaGlu
ZyhbJmV2ZW50XSAoUGxhdGZvcm1XaGVlbEV2ZW50JiBvdGhlckV2ZW50KSAtPiBib29sIHsKLSAg
ICAgICAgcmV0dXJuIChldmVudC50aW1lc3RhbXAoKSAtIG90aGVyRXZlbnQudGltZXN0YW1wKCkp
ID4gc2Nyb2xsQ2FwdHVyZVRocmVzaG9sZDsKLSAgICB9KTsKLQogI2lmIEVOQUJMRShLSU5FVElD
X1NDUk9MTElORykKICAgICBpZiAoZXZlbnQuaXNFbmRPZk5vbk1vbWVudHVtU2Nyb2xsKCkpIHsK
ICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBhZGQgdGhlIGV2ZW50IHRvIHRoZSBoaXN0b3J5
IGFzIGl0cyBkZWx0YSB3aWxsIGJlICgwLCAwKS4KLSAgICAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xs
QW5pbWF0aW9uS2luZXRpYyo+KG1fa2luZXRpY0FuaW1hdGlvbi5nZXQoKSktPnN0YXJ0KG1fY3Vy
cmVudFBvc2l0aW9uLCBjb21wdXRlVmVsb2NpdHkoKSwgbV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9u
dGFsU2Nyb2xsYmFyKCksIG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTY3JvbGxiYXIoKSk7Cisg
ICAgICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c3RhcnQobV9jdXJyZW50UG9zaXRpb24sIG1fa2lu
ZXRpY0FuaW1hdGlvbi0+Y29tcHV0ZVZlbG9jaXR5KCksIG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpv
bnRhbFNjcm9sbGJhcigpLCBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGV2ZW50LmlzVHJhbnNpdGlvbmlu
Z1RvTW9tZW50dW1TY3JvbGwoKSkgewotICAgICAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsK
LSAgICAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYyo+KG1fa2luZXRpY0Fu
aW1hdGlvbi5nZXQoKSktPnN0YXJ0KG1fY3VycmVudFBvc2l0aW9uLCBldmVudC5zd2lwZVZlbG9j
aXR5KCksIG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNjcm9sbGJhcigpLCBtX3Njcm9sbGFi
bGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgICAgICBtX2tpbmV0aWNBbmltYXRpb24t
PmNsZWFyU2Nyb2xsSGlzdG9yeSgpOworICAgICAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0YXJ0
KG1fY3VycmVudFBvc2l0aW9uLCBldmVudC5zd2lwZVZlbG9jaXR5KCksIG1fc2Nyb2xsYWJsZUFy
ZWEuaG9yaXpvbnRhbFNjcm9sbGJhcigpLCBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xs
YmFyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0jZW5kaWYKIAotICAgIG1fc2Ny
b2xsSGlzdG9yeS5hcHBlbmQoZXZlbnQpOworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+YXBwZW5k
VG9TY3JvbGxIaXN0b3J5KGV2ZW50KTsKKyNlbmRpZgogCiAgICAgcmV0dXJuIFNjcm9sbEFuaW1h
dG9yOjpoYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvckdl
bmVyaWM6OndpbGxFbmRMaXZlUmVzaXplKCkKIHsKLSAgICBtX2tpbmV0aWNBbmltYXRpb24tPnVw
ZGF0ZVZpc2libGVMZW5ndGhzKCk7Ci0KICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAg
ICBpZiAobV9zbW9vdGhBbmltYXRpb24pCiAgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT51cGRh
dGVWaXNpYmxlTGVuZ3RocygpOwpAQCAtMTY5LDggKzE0Niw2IEBAIHZvaWQgU2Nyb2xsQW5pbWF0
b3JHZW5lcmljOjp1cGRhdGVQb3NpdGlvbihGbG9hdFBvaW50JiYgcG9zaXRpb24pCiAKIHZvaWQg
U2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIq
IHNjcm9sbGJhcikKIHsKLSAgICBtX2tpbmV0aWNBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5n
dGhzKCk7Ci0KICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBpZiAobV9zbW9vdGhB
bmltYXRpb24pCiAgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3Ro
cygpOwpAQCAtMTg2LDggKzE2MSw2IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JHZW5lcmljOjpkaWRB
ZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIAogdm9pZCBTY3JvbGxB
bmltYXRvckdlbmVyaWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCiB7Ci0gICAgbV9raW5ldGljQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3Rocygp
OwotCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAgICAgaWYgKG1fc21vb3RoQW5pbWF0
aW9uKQogICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0
b3JHZW5lcmljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1h
dG9yR2VuZXJpYy5oCmluZGV4IGY5ZmNhODZmMzc1OTgxY2IxZDFlZTA3MDRkMDE3OWU4ZjYyMjE5
MGYuLjZhODk1Mzg5ZDI0YjJiYzBjNGZhNWU4OTA0NjMyNGFjNDdkYjRiZjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmljLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVy
aWMuaApAQCAtMzYsNiArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3Jv
bGxBbmltYXRpb247CitjbGFzcyBTY3JvbGxBbmltYXRpb25LaW5ldGljOwogCiBjbGFzcyBTY3Jv
bGxBbmltYXRvckdlbmVyaWMgZmluYWwgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgewogcHVibGlj
OgpAQCAtNzEsMTUgKzcyLDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBoaWRlT3ZlcmxheVNjcm9s
bGJhcnMoKTsKICAgICB2b2lkIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOwogCi0g
ICAgRmxvYXRQb2ludCBjb21wdXRlVmVsb2NpdHkoKTsKLQogI2lmIEVOQUJMRShTTU9PVEhfU0NS
T0xMSU5HKQogICAgIHZvaWQgZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9uKCk7CiAKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX3Ntb290aEFuaW1hdGlvbjsKICNl
bmRpZgotICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb24+IG1fa2luZXRpY0FuaW1h
dGlvbjsKLSAgICBWZWN0b3I8UGxhdGZvcm1XaGVlbEV2ZW50PiBtX3Njcm9sbEhpc3Rvcnk7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlvbktpbmV0aWM+IG1fa2luZXRpY0FuaW1h
dGlvbjsKICAgICBTY3JvbGxiYXIqIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgeyBudWxs
cHRyIH07CiAgICAgU2Nyb2xsYmFyKiBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhciB7IG51bGxw
dHIgfTsKICAgICBib29sIG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQgeyBmYWxzZSB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oCmluZGV4IDE0OGQ3MDkwMDlj
MzI4MmY1NmRhODkzNzYzZjQ3ODIxZWRlMjVhNTAuLjM5OTFhNDc5ZjFmMWQxODUwMDcxNjcwNDgw
YzBjMzAzODI1Y2MwOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdl
YldoZWVsRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2
ZW50LmgKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQo
R2RrRXZlbnQqKTsKICAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiwgV2ViV2hlZWxF
dmVudDo6UGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpOwogI2VsaWYg
VVNFKExJQldQRSkKLSAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KHN0cnVjdCB3cGVfaW5wdXRfYXhp
c19ldmVudCosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICBOYXRpdmVXZWJXaGVlbEV2
ZW50KHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
LCBXZWJXaGVlbEV2ZW50OjpQaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhhc2UgbW9tZW50dW1QaGFz
ZSk7CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgTmF0aXZlV2ViV2hlZWxFdmVudChIV05ELCBV
SU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkV2ZW50
LmgKaW5kZXggMjI0ZWY1MTU2N2ZkZjVlYjczMjFhMzQxMWZhY2NkMjgzYjViMjgxMy4uMTk2ZGM4
OTEwN2U1MGRmMjIwMmMzMjViNGI1ZmM2YjIyNTY5N2U5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2ViRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJFdmVu
dC5oCkBAIC0yMDUsNyArMjA1LDcgQEAgcHVibGljOgogICAgIFdlYldoZWVsRXZlbnQoVHlwZSwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgZGVsdGEsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHksIE9wdGlvblNldDxN
b2RpZmllcj4sIFdhbGxUaW1lIHRpbWVzdGFtcCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAg
V2ViV2hlZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tzLCBHcmFu
dWxhcml0eSwgYm9vbCBkaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UsIFBoYXNlLCBQaGFzZSBt
b21lbnR1bVBoYXNlLCBib29sIGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMsIHVpbnQzMl90IHNj
cm9sbENvdW50LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHVuYWNjZWxlcmF0ZWRTY3JvbGxp
bmdEZWx0YSwgT3B0aW9uU2V0PE1vZGlmaWVyPiwgV2FsbFRpbWUgdGltZXN0YW1wKTsKLSNlbGlm
IFBMQVRGT1JNKEdUSykKKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQogICAg
IFdlYldoZWVsRXZlbnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgUGhh
c2UsIFBoYXNlIG1vbWVudHVtUGhhc2UsIEdyYW51bGFyaXR5LCBPcHRpb25TZXQ8TW9kaWZpZXI+
LCBXYWxsVGltZSB0aW1lc3RhbXApOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViV2hl
ZWxFdmVudC5jcHAKaW5kZXggMjQxNDQ2NTY4NmU1N2RhZDFkZjQ4YTI3MzY3NmY4OTQ4MGMyMjFi
Yi4uZmFiZDRmNzczNGI2MDVmMDkwNjQ3YzA0YzZiYTcxYjk3MjgwYmY0OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgV2ViV2hlZWxFdmVu
dDo6V2ViV2hlZWxFdmVudChUeXBlIHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29u
c3QgSW50UG9pbnQKIHsKICAgICBBU1NFUlQoaXNXaGVlbEV2ZW50VHlwZSh0eXBlKSk7CiB9Ci0j
ZWxpZiBQTEFURk9STShHVEspCisjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkK
IFdlYldoZWVsRXZlbnQ6OldlYldoZWVsRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBJbnRQb2ludCYg
cG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgRmxvYXRTaXpl
JiBkZWx0YSwgY29uc3QgRmxvYXRTaXplJiB3aGVlbFRpY2tzLCBQaGFzZSBwaGFzZSwgUGhhc2Ug
bW9tZW50dW1QaGFzZSwgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIE9wdGlvblNldDxNb2RpZmll
cj4gbW9kaWZpZXJzLCBXYWxsVGltZSB0aW1lc3RhbXApCiAgICAgOiBXZWJFdmVudCh0eXBlLCBt
b2RpZmllcnMsIHRpbWVzdGFtcCkKICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCkBAIC05MSw3
ICs5MSw3IEBAIHZvaWQgV2ViV2hlZWxFdmVudDo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKICAgICBlbmNvZGVyIDw8IG1fd2hlZWxUaWNrczsKICAgICBlbmNvZGVyIDw8IG1f
Z3JhbnVsYXJpdHk7CiAgICAgZW5jb2RlciA8PCBtX2RpcmVjdGlvbkludmVydGVkRnJvbURldmlj
ZTsKLSNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKENP
Q09BKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICBlbmNvZGVyIDw8IG1f
cGhhc2U7CiAgICAgZW5jb2RlciA8PCBtX21vbWVudHVtUGhhc2U7CiAjZW5kaWYKQEAgLTExOCw3
ICsxMTgsNyBAQCBib29sIFdlYldoZWVsRXZlbnQ6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29k
ZXIsIFdlYldoZWVsRXZlbnQmIHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHQubV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQ
TEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZSh0Lm1fcGhhc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZSh0Lm1fbW9tZW50dW1QaGFzZSkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9saWJ3cGUvTmF0aXZlV2ViV2hlZWxFdmVudExpYldQRS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9saWJ3cGUvTmF0aXZlV2ViV2hlZWxFdmVudExpYldQRS5jcHAK
aW5kZXggYmE5NjJlZDRkY2M2ZjNlMTc2MTczOWVlNjNjZDQ4YTNjNWFhNzhiOS4uN2FmODEyMzhm
ZDAwZWUzYzUwMjFiZjZhOTUyOWQ2MDk1OTZiYTgzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvbGlid3BlL05hdGl2ZVdlYldoZWVsRXZlbnRMaWJXUEUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL2xpYndwZS9OYXRpdmVXZWJXaGVlbEV2ZW50TGliV1BFLmNwcApAQCAt
MzIsOCArMzIsOCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotTmF0aXZlV2ViV2hlZWxFdmVu
dDo6TmF0aXZlV2ViV2hlZWxFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQqIGV2ZW50
LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKLSAgICA6IFdlYldoZWVsRXZlbnQoV2ViRXZlbnRG
YWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGV2ZW50LCBkZXZpY2VTY2FsZUZhY3RvcikpCitO
YXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KHN0cnVjdCB3cGVfaW5wdXRf
YXhpc19ldmVudCogZXZlbnQsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBXZWJXaGVlbEV2ZW50
OjpQaGFzZSBwaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhhc2UgbW9tZW50dW1QaGFzZSkKKyAgICA6
IFdlYldoZWVsRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGV2ZW50
LCBkZXZpY2VTY2FsZUZhY3RvciwgcGhhc2UsIG1vbWVudHVtUGhhc2UpKQogewogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9saWJ3cGUvV2ViRXZlbnRGYWN0b3J5LmNwcCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL2xpYndwZS9XZWJFdmVudEZhY3RvcnkuY3BwCmluZGV4IDk2
NjA2NGIwNTRkZGMyYTYwMzMyZDNiNjg1YjMyM2U4YjkyOTgyM2QuLjYxNTU2MjU5N2VkZTJkZTU4
ZTdjYzczNWNkZTM4NDEwMzA5NzI3MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L2xpYndwZS9XZWJFdmVudEZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2xp
YndwZS9XZWJFdmVudEZhY3RvcnkuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgV2ViTW91c2VFdmVu
dCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoc3RydWN0IHdwZV9pbnB1dF9w
b2ludGVyX2V2ZW4KICAgICAgICAgMCwgMCwgMCwgY2xpY2tDb3VudCwgbW9kaWZpZXJzRm9yRXZl
bnRNb2RpZmllcnMoZXZlbnQtPm1vZGlmaWVycyksIHdhbGxUaW1lRm9yRXZlbnRUaW1lKGV2ZW50
LT50aW1lKSk7CiB9CiAKLVdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJX
aGVlbEV2ZW50KHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCogZXZlbnQsIGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yKQorV2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldo
ZWVsRXZlbnQoc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiBldmVudCwgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQ
aGFzZSBtb21lbnR1bVBoYXNlKQogewogICAgIFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9uKGV2
ZW50LT54LCBldmVudC0+eSk7CiAgICAgcG9zaXRpb24uc2NhbGUoMSAvIGRldmljZVNjYWxlRmFj
dG9yKTsKQEAgLTE2OCw3ICsxNjgsOCBAQCBXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6
Y3JlYXRlV2ViV2hlZWxFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQqCiAgICAgICAg
IH0KIAogICAgICAgICByZXR1cm4gV2ViV2hlZWxFdmVudChXZWJFdmVudDo6V2hlZWwsIHBvc2l0
aW9uLCBwb3NpdGlvbiwKLSAgICAgICAgICAgIGRlbHRhLCB3aGVlbFRpY2tzLCBXZWJXaGVlbEV2
ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwKKyAgICAgICAgICAgIGRlbHRhLCB3aGVlbFRp
Y2tzLCBwaGFzZSwgbW9tZW50dW1QaGFzZSwKKyAgICAgICAgICAgIFdlYldoZWVsRXZlbnQ6OlNj
cm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LAogICAgICAgICAgICAgT3B0aW9uU2V0PFdlYkV2ZW50OjpN
b2RpZmllcj4geyB9LCB3YWxsVGltZUZvckV2ZW50VGltZShldmVudC0+dGltZSkpOwogICAgIH0K
ICNlbmRpZgpAQCAtMjAwLDcgKzIwMSw4IEBAIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5
OjpjcmVhdGVXZWJXaGVlbEV2ZW50KHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCoKICAgICB9
OwogCiAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBwb3NpdGlvbiwg
cG9zaXRpb24sCi0gICAgICAgIGRlbHRhLCB3aGVlbFRpY2tzLCBXZWJXaGVlbEV2ZW50OjpTY3Jv
bGxCeVBpeGVsV2hlZWxFdmVudCwKKyAgICAgICAgZGVsdGEsIHdoZWVsVGlja3MsIHBoYXNlLCBt
b21lbnR1bVBoYXNlLAorICAgICAgICBXZWJXaGVlbEV2ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxF
dmVudCwKICAgICAgICAgT3B0aW9uU2V0PFdlYkV2ZW50OjpNb2RpZmllcj4geyB9LCB3YWxsVGlt
ZUZvckV2ZW50VGltZShldmVudC0+dGltZSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9saWJ3cGUvV2ViRXZlbnRGYWN0b3J5LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9saWJ3cGUvV2ViRXZlbnRGYWN0b3J5LmgKaW5kZXggMzU4YmUzZWQ5MDczYWM3ZjgyMGNjYTBj
ZTZmNjg2NGYwOWFlMzQ4MC4uNGI3ODc5NGIzZDQ1YmYzOGY3MzA0NDhhOGMxZWU4M2E1YTUxYmFh
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbGlid3BlL1dlYkV2ZW50RmFjdG9y
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2xpYndwZS9XZWJFdmVudEZhY3RvcnkuaApA
QCAtNDAsNyArNDAsNyBAQCBjbGFzcyBXZWJFdmVudEZhY3RvcnkgewogcHVibGljOgogICAgIHN0
YXRpYyBXZWJLZXlib2FyZEV2ZW50IGNyZWF0ZVdlYktleWJvYXJkRXZlbnQoc3RydWN0IHdwZV9p
bnB1dF9rZXlib2FyZF9ldmVudCosIGNvbnN0IFN0cmluZyYsIGJvb2wgaGFuZGxlZEJ5SW5wdXRN
ZXRob2QsIE9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4+JiYs
IE9wdGlvbmFsPEVkaXRpbmdSYW5nZT4mJik7CiAgICAgc3RhdGljIFdlYk1vdXNlRXZlbnQgY3Jl
YXRlV2ViTW91c2VFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X3BvaW50ZXJfZXZlbnQqLCBmbG9hdCBk
ZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgc3RhdGljIFdlYldoZWVsRXZlbnQgY3JlYXRlV2ViV2hl
ZWxFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQqLCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3Rvcik7CisgICAgc3RhdGljIFdlYldoZWVsRXZlbnQgY3JlYXRlV2ViV2hlZWxFdmVudChzdHJ1
Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQqLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgV2ViV2hl
ZWxFdmVudDo6UGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpOwogI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgc3RhdGljIFdlYlRvdWNoRXZlbnQgY3JlYXRlV2Vi
VG91Y2hFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50KiwgZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IGI4ZDI5YzRmOWQ3NDE1NTc5YjRkNzYzNTE5OGUx
MzE0ZTZjZDFmZGMuLmM4YjQxZjQwNzc3NGQyMzM3ZTk5Y2M3ZjkxNTFlYzY1YmUzZmM1MzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwu
Y3BwCkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3Vj
aEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmIHRvdWNoRXZlbnQsIGIKICAgICBpZiAo
c2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaGFuZGxlRXZlbnQodG91Y2hQb2ludCkpIHsKICAgICAg
ICAgc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiBheGlzRXZlbnQgPSBzY3JvbGxHZXN0dXJl
Q29udHJvbGxlci5heGlzRXZlbnQoKTsKICAgICAgICAgaWYgKGF4aXNFdmVudC0+dHlwZSAhPSB3
cGVfaW5wdXRfYXhpc19ldmVudF90eXBlX251bGwpCi0gICAgICAgICAgICBwYWdlLmhhbmRsZVdo
ZWVsRXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJXaGVlbEV2ZW50KGF4aXNFdmVudCwgbV92aWV3LnBh
Z2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgICAgICAgICBwYWdlLmhhbmRsZVdoZWVs
RXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJXaGVlbEV2ZW50KGF4aXNFdmVudCwgbV92aWV3LnBhZ2Uo
KS5kZXZpY2VTY2FsZUZhY3RvcigpLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lLCBX
ZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2Vz
dHVyZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9TY3Jv
bGxHZXN0dXJlQ29udHJvbGxlci5jcHAKaW5kZXggYjJjZTdlMmZjM2M0OTU0MTcyZTQ4NGM2YjBj
MTg3ODg2OWNlNzVjYS4uODcyOTBlMzJjZWI1MTUzMjQyOTlkY2YzYTg3NTBlZDJiMjRkNTNhYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9TY3JvbGxHZXN0dXJl
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9TY3Jv
bGxHZXN0dXJlQ29udHJvbGxlci5jcHAKQEAgLTY5LDYgKzY5LDcgQEAgYm9vbCBTY3JvbGxHZXN0
dXJlQ29udHJvbGxlcjo6aGFuZGxlRXZlbnQoY29uc3Qgc3RydWN0IHdwZV9pbnB1dF90b3VjaF9l
dmVudF9yYXcKICNlbmRpZgogICAgICAgICAgICAgbV9vZmZzZXQueCA9IHRvdWNoUG9pbnQtPng7
CiAgICAgICAgICAgICBtX29mZnNldC55ID0gdG91Y2hQb2ludC0+eTsKKyAgICAgICAgICAgIG1f
cGhhc2UgPSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzcsMTYg
Kzc4LDIwIEBAIGJvb2wgU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KGNvbnN0
IHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfcmF3CiAgICAgICAgICAgICBtX2hhbmRsaW5n
ID0gZmFsc2U7CiAjaWYgV1BFX0NIRUNLX1ZFUlNJT04oMSwgNSwgMCkKICAgICAgICAgICAgIG1f
YXhpc0V2ZW50LmJhc2UgPSB7Ci0gICAgICAgICAgICAgICAgd3BlX2lucHV0X2F4aXNfZXZlbnRf
dHlwZV9udWxsLAotICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAKKyAgICAgICAgICAg
ICAgICBtX2F4aXNFdmVudC5iYXNlLnR5cGUsCisgICAgICAgICAgICAgICAgdG91Y2hQb2ludC0+
dGltZSwgbV9zdGFydC54LCBtX3N0YXJ0LnksCisgICAgICAgICAgICAgICAgMCwgMCwgMAogICAg
ICAgICAgICAgfTsKICAgICAgICAgICAgIG1fYXhpc0V2ZW50LnhfYXhpcyA9IG1fYXhpc0V2ZW50
LnlfYXhpcyA9IDA7CiAjZWxzZQogICAgICAgICAgICAgbV9heGlzRXZlbnQgPSB7Ci0gICAgICAg
ICAgICAgICAgd3BlX2lucHV0X2F4aXNfZXZlbnRfdHlwZV9udWxsLAotICAgICAgICAgICAgICAg
IDAsIDAsIDAsIDAsIDAsIDAKKyAgICAgICAgICAgICAgICBtX2F4aXNFdmVudC50eXBlLAorICAg
ICAgICAgICAgICAgIHRvdWNoUG9pbnQtPnRpbWUsIG1fc3RhcnQueCwgbV9zdGFydC55LAorICAg
ICAgICAgICAgICAgIDAsIDAsIDAKICAgICAgICAgICAgIH07CiAjZW5kaWYKKyAgICAgICAgICAg
IG1fb2Zmc2V0LnggPSBtX29mZnNldC55ID0gMDsKKyAgICAgICAgICAgIG1fcGhhc2UgPSBXZWJX
aGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VFbmRlZDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaAppbmRleCAy
MzRlOTRhMWNjOGVhYWNjZDI0NTI0YzVlZjU2YWRiNWI4ZGVhOThmLi4yZDg3Zjk1YzI0ZWM1YTM5
YjdmMTBkZTZhYTU1ZWRlODI2YTE2ODhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL3dwZS9TY3JvbGxHZXN0dXJlQ29udHJvbGxlci5oCkBAIC0yNSw2ICsy
NSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiV2ViRXZlbnQuaCIKICNpbmNsdWRl
IDx3cGUvd3BlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDMsNiArNDQsOCBAQCBwdWJs
aWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZSBwaGFzZSgpIHsg
cmV0dXJuIG1fcGhhc2U7IH0KKwogICAgIGJvb2wgaXNIYW5kbGluZygpIGNvbnN0IHsgcmV0dXJu
IG1faGFuZGxpbmc7IH0KICAgICBib29sIGhhbmRsZUV2ZW50KGNvbnN0IHN0cnVjdCB3cGVfaW5w
dXRfdG91Y2hfZXZlbnRfcmF3Kik7CiAKQEAgLTY0LDYgKzY3LDcgQEAgcHJpdmF0ZToKICNlbHNl
CiAgICAgc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50IG1fYXhpc0V2ZW50OwogI2VuZGlmCisg
ICAgV2ViV2hlZWxFdmVudDo6UGhhc2UgbV9waGFzZSB7IFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQ
aGFzZU5vbmUgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5jcHAKaW5kZXggOTVhYjE3NmU4M2Y1OTcxNGIzNWU1
ZDc0YjI4YzE0YTEyMzdlNTcwYy4uY2M4MWVlYzZiZjcyYTIwNzVjODYxMWY4MDc2ZTkyYjg4ZmU2
ZDc4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwCkBA
IC0xNjEsNyArMTYxLDcgQEAgVmlldzo6VmlldyhzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogYmFj
a2VuZCwgY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYgYmFzZUMKICAgICAgICAgW10odm9p
ZCogZGF0YSwgc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiBldmVudCkKICAgICAgICAgewog
ICAgICAgICAgICAgYXV0byYgcGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Vmlldyo+KGRhdGEpLT5w
YWdlKCk7Ci0gICAgICAgICAgICBwYWdlLmhhbmRsZVdoZWVsRXZlbnQoV2ViS2l0OjpOYXRpdmVX
ZWJXaGVlbEV2ZW50KGV2ZW50LCBwYWdlLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKKyAgICAgICAg
ICAgIHBhZ2UuaGFuZGxlV2hlZWxFdmVudChXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQoZXZl
bnQsIHBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNl
Tm9uZSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZSkpOwogICAgICAgICB9LAogICAg
ICAgICAvLyBoYW5kbGVfdG91Y2hfZXZlbnQKICAgICAgICAgW10odm9pZCogZGF0YSwgc3RydWN0
IHdwZV9pbnB1dF90b3VjaF9ldmVudCogZXZlbnQpCkBAIC0xNzUsOSArMTc1LDcgQEAgVmlldzo6
VmlldyhzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogYmFja2VuZCwgY29uc3QgQVBJOjpQYWdlQ29u
ZmlndXJhdGlvbiYgYmFzZUMKICAgICAgICAgICAgIGlmIChzY3JvbGxHZXN0dXJlQ29udHJvbGxl
ci5pc0hhbmRsaW5nKCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgd3BlX2lucHV0
X3RvdWNoX2V2ZW50X3JhdyogdG91Y2hQb2ludCA9IHRvdWNoRXZlbnQubmF0aXZlRmFsbGJhY2tU
b3VjaFBvaW50KCk7CiAgICAgICAgICAgICAgICAgaWYgKHRvdWNoUG9pbnQtPnR5cGUgIT0gd3Bl
X2lucHV0X3RvdWNoX2V2ZW50X3R5cGVfbnVsbCAmJiBzY3JvbGxHZXN0dXJlQ29udHJvbGxlci5o
YW5kbGVFdmVudCh0b3VjaFBvaW50KSkgewotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgd3Bl
X2lucHV0X2F4aXNfZXZlbnQqIGF4aXNFdmVudCA9IHNjcm9sbEdlc3R1cmVDb250cm9sbGVyLmF4
aXNFdmVudCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYXhpc0V2ZW50LT50eXBlICE9IHdw
ZV9pbnB1dF9heGlzX2V2ZW50X3R5cGVfbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBh
Z2UuaGFuZGxlV2hlZWxFdmVudChXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQoYXhpc0V2ZW50
LCBwYWdlLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFnZS5o
YW5kbGVXaGVlbEV2ZW50KFdlYktpdDo6TmF0aXZlV2ViV2hlZWxFdmVudChzY3JvbGxHZXN0dXJl
Q29udHJvbGxlci5heGlzRXZlbnQoKSwgcGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpLCBzY3JvbGxH
ZXN0dXJlQ29udHJvbGxlci5waGFzZSgpLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VOb25l
KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>