<?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>113786</bug_id>
          
          <creation_ts>2013-04-02 08:32:47 -0700</creation_ts>
          <short_desc>Throttle compositing layer flushes during page loading</short_desc>
          <delta_ts>2013-04-05 14:18:50 -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>Layout and Rendering</component>
          <version>528+ (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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>barraclough</cc>
    
    <cc>cmuppala</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>japhet</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>867872</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-04-02 08:32:47 -0700</bug_when>
    <thetext>Page content can change rapidly during page loading triggering excessive repaints. We should avoid this unnecessary work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867908</commentid>
    <comment_count>1</comment_count>
      <attachid>196155</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-04-02 09:07:32 -0700</bug_when>
    <thetext>Created attachment 196155
possible patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867912</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-04-02 09:09:10 -0700</bug_when>
    <thetext>Attachment 196155 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/loader/FrameLoader.cpp&apos;, u&apos;Source/WebCore/loader/FrameLoader.h&apos;, u&apos;Source/WebCore/loader/ProgressTracker.cpp&apos;, u&apos;Source/WebCore/loader/ProgressTracker.h&apos;, u&apos;Source/WebCore/page/FrameView.cpp&apos;, u&apos;Source/WebCore/page/FrameView.h&apos;, u&apos;Source/WebCore/platform/graphics/Region.cpp&apos;, u&apos;Source/WebCore/platform/graphics/Region.h&apos;, u&apos;Source/WebCore/platform/graphics/TiledBacking.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/TileController.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/TileController.mm&apos;]&quot; exit_code: 1
Source/WebCore/platform/graphics/ca/mac/TileController.h:165:  The parameter name &quot;rect&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867913</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-04-02 09:09:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/13226643&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867922</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-04-02 09:16:04 -0700</bug_when>
    <thetext>Should we do this for other compositing layers too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867925</commentid>
    <comment_count>5</comment_count>
      <attachid>196155</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-04-02 09:22:15 -0700</bug_when>
    <thetext>Comment on attachment 196155
possible patch

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

I gave the same kinds of comments that I would for cases where you planned to land it; hope they are helpful.

&gt; Source/WebCore/ChangeLog:12
&gt; +        (WebCore):

If you’d be willing, please take a moment to remove the bogus lines like this one listing just class names that the prepare-ChangeLog script adds.

Even better, find someone to fix the darned script!

&gt; Source/WebCore/loader/ProgressTracker.cpp:54
&gt; +static const double activeProgressTimerHeartbeatRate = 0.1;

I’d call this progressHeartbeatInterval.

Since this is a time in seconds, I don’t think it should be called a “rate”. It should probably be called an “interval”. I’m also not sure what the word “active” adds here.

I’d like to see a comment explaining the concept behind the constants; why did you choose these values. That can help people make intelligent choices about changing or not changing them in the future.

&gt; Source/WebCore/loader/ProgressTracker.cpp:55
&gt; +static const unsigned maximumHeartbeatsWithNoProgress= 4;

Missing space before &quot;=&quot; sign.

&gt; Source/WebCore/loader/ProgressTracker.cpp:284
&gt; +    return m_progressValue &amp;&amp; m_progressValue &lt; finalProgressValue &amp;&amp; m_heartbeatsWithNoProgress &lt; maximumHeartbeatsWithNoProgress;

I think this be &lt;= maximumHeartbeatsWithNoProgress given the name of that constant. Or we could name the constant something different.

&gt; Source/WebCore/loader/ProgressTracker.cpp:294
&gt; +//    unsigned delta = unsigned(m_totalBytesReceived - m_totalBytesReceivedBeforePreviousHeartbeat);

If you did want to land this we’d want to remove all commented lines, but since this is a work in progress, I won’t belabor that point.

&gt; Source/WebCore/loader/ProgressTracker.cpp:298
&gt; +    m_originatingProgressFrame-&gt;loader()-&gt;loadProgressingStatusChanged();

Can we optimize this to only run if the boolean state of isLoadProgressing() actually changed, rather than leaving that to callers? Is that an important optimization?

&gt; Source/WebCore/loader/ProgressTracker.cpp:302
&gt; +    if (!m_progressValue || m_progressValue &gt;= finalProgressValue)
&gt; +        m_progressHeartbeatTimer.stop();

I don’t understand the reason for stopping the timer if m_progressValue is 0. Since it’s not self-evident it probably needs a comment.

&gt; Source/WebCore/page/FrameView.cpp:2288
&gt; +    if (TiledBacking* tiledBacking = this-&gt;tiledBacking())
&gt; +        tiledBacking-&gt;disableRepaintThrottlingTemporarilyForInteraction();

I’d normally call a local variable with such a tight scope just “backing”; my rule of thumb is that names can be more terse and ambiguous if they have very small scopes. Certainly not an important point, and there’s also an argument for using a variable name with the identical title to the member function for clarity.

&gt; Source/WebCore/platform/graphics/Region.cpp:130
&gt; +void Region::clear()
&gt; +{
&gt; +    m_bounds = IntRect();
&gt; +    m_shape = Shape();
&gt; +}

Should this be an inline function?

&gt; Source/WebCore/platform/graphics/ca/mac/TileController.mm:153
&gt; +void TileController::setRepaintThrottlingEnabled(bool b)

I’d name this “enabled” instead of “b”.

&gt; Source/WebCore/platform/graphics/ca/mac/TileController.mm:260
&gt; +    // The delaying will start on top of the runloop.
&gt; +    static const double throttledRepaintDelay = .5;

Normally we’d want a comment saying why 0.5 seconds is a good interval and we’d put this at the top of the file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867975</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-04-02 10:14:19 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Should we do this for other compositing layers too?

Probably, though I was going to look into it separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867988</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-04-02 10:25:11 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; Should we do this for other compositing layers too?
&gt; 
&gt; Probably, though I was going to look into it separately.

Thinking about this more, I think you&apos;re adding an unnecessary layer of repaint rect caching. GraphicsLayerCA already has a cache of repaint rects, and there is one for the tile cache layer. We just need to not have GraphicsLayerCA flush those repaint rects down to the TiledBacking, which happens at flush time.

So maybe we should really just throttle compositing layer flushes during page load, which will have the side-effect of throttling repaints.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>868022</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-04-02 10:53:01 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; So maybe we should really just throttle compositing layer flushes during page load, which will have the side-effect of throttling repaints.

Sounds plausible. Is all that code already safe to be wildly out of sync with the current state of renderlayer/object tree?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>868027</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-04-02 10:56:26 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; So maybe we should really just throttle compositing layer flushes during page load, which will have the side-effect of throttling repaints.
&gt; 
&gt; Sounds plausible. Is all that code already safe to be wildly out of sync with the current state of renderlayer/object tree?

Throttling flushes will allow the CALayer tree to get out of sync with the GraphicsLayer tree, which is fine. The only thing that might be an issue is the layer registered with the ScrollingCoordinator; we might have to also throttle scrolling tree commits (which, ideally, would be tied to layer flushes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869839</commentid>
    <comment_count>10</comment_count>
      <attachid>196647</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-04-05 10:17:04 -0700</bug_when>
    <thetext>Created attachment 196647
throttle layer flushes instead of repaints</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869918</commentid>
    <comment_count>11</comment_count>
      <attachid>196647</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-04-05 11:50:24 -0700</bug_when>
    <thetext>Comment on attachment 196647
throttle layer flushes instead of repaints

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

&gt; Source/WebCore/ChangeLog:24
&gt; +            Track if the document load is progressing. This is done with a heartbeat timer that checks every 100ms if we have received more than 1k of data.

Is that bytes for just the main resource, or any resources?

&gt; Source/WebCore/ChangeLog:25
&gt; +            If four heartbeats pass without progress then we consider the load stalled.

This doesn&apos;t agree with static const unsigned maximumHeartbeatsWithNoProgress= 3;

&gt; Source/WebCore/page/FrameView.cpp:2325
&gt; +void FrameView::updateLayerFlushThrottling(bool isLoadProgressing)
&gt; +{
&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; +    if (RenderView* view = renderView())
&gt; +        view-&gt;compositor()-&gt;setLayerFlushThrottlingEnabled(isLoadProgressing);
&gt; +#else
&gt; +    UNUSED_PARAM(isLoadProgressing);
&gt; +#endif
&gt; +}

Every frame has a RLC. Will this do throttling in every frame, or just the main frame? How does the ProgressTracker stuff interact with different frames?

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:3074
&gt; +    if ((!hadUncommittedChanged || couldThrottleLayerFlush != canThrottleLayerFlush()) &amp;&amp; m_client)

couldThrottleLayerFlush != canThrottleLayerFlush() is really confusing. Why is this necessary, since the notifyFlushRequired() can detect changes that should not be throttled?

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:3198
&gt; +void RenderLayerCompositor::startLayerFlushThrottlingTimerIfNeeded()
&gt; +{
&gt; +    m_layerFlushThrottlingTemporarilyDisabledForInteraction = false;
&gt; +    m_layerFlushThrottlingTimer.stop();
&gt; +    if (!m_layerFlushThrottlingEnabled)
&gt; +        return;
&gt; +    m_layerFlushThrottlingTimer.startOneShot(throttledLayerFlushDelay);
&gt; +}

This isn&apos;t a layerFlushThrottlingTimer, it&apos;s just a layerFlushTimer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869941</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-04-05 12:09:20 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Is that bytes for just the main resource, or any resources?

Any resource.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:25
&gt; &gt; +            If four heartbeats pass without progress then we consider the load stalled.
&gt; 
&gt; This doesn&apos;t agree with static const unsigned maximumHeartbeatsWithNoProgress= 3;

It kinda does. The variable name is bad though.

&gt; Every frame has a RLC. Will this do throttling in every frame, or just the main frame? How does the ProgressTracker stuff interact with different frames?

Just the main frame for now. ProgressTracker is per page.

&gt; &gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:3074
&gt; &gt; +    if ((!hadUncommittedChanged || couldThrottleLayerFlush != canThrottleLayerFlush()) &amp;&amp; m_client)
&gt; 
&gt; couldThrottleLayerFlush != canThrottleLayerFlush() is really confusing. Why is this necessary, since the notifyFlushRequired() can detect changes that should not be throttled?

notifyFlushRequired() would not get called if there were existing changes and canThrottleLayerFlush() went from true to false. However the hadUncommittedChanges optimization does not seems that important in any case and could perhaps just be removed.

&gt; This isn&apos;t a layerFlushThrottlingTimer, it&apos;s just a layerFlushTimer.

I did rename it to other direction. It is only used for throttling so it seemed better to include that information. I can change it back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870049</commentid>
    <comment_count>13</comment_count>
      <attachid>196674</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-04-05 13:38:45 -0700</bug_when>
    <thetext>Created attachment 196674
with some light renaming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870074</commentid>
    <comment_count>14</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-04-05 14:18:50 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/147797</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196155</attachid>
            <date>2013-04-02 09:07:32 -0700</date>
            <delta_ts>2013-04-05 10:17:04 -0700</delta_ts>
            <desc>possible patch</desc>
            <filename>repaint-throttling-2.patch</filename>
            <type>text/plain</type>
            <size>18342</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NzQzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDEzLTA0LTAyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBUaHJvdHRsZSByZXBhaW50cyBk
dXJpbmcgcGFnZSBsb2FkaW5nIGluIHRpbGUgY29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNzg2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBQYWdlIGNvbnRlbnQgY2FuIGNo
YW5nZSByYXBpZGx5IGR1cmluZyBwYWdlIGxvYWRpbmcgdHJpZ2dlcmluZyBleGNlc3NpdmUgcmVw
YWludHMuIFdlIHNob3VsZCBhdm9pZCB0aGlzIHVubmVjZXNzYXJ5IHdvcmsuCisKKyAgICAgICAg
KiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6
OmxvYWRQcm9ncmVzc2luZ1N0YXR1c0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6CisgICAgICAgIChGcmFtZUxvYWRlcik6CisgICAg
ICAgICogbG9hZGVyL1Byb2dyZXNzVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlByb2dyZXNzVHJhY2tlcjo6UHJvZ3Jlc3NUcmFja2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlByb2dyZXNzVHJhY2tlcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UHJvZ3Jlc3NUcmFja2VyOjpwcm9ncmVzc1N0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UHJv
Z3Jlc3NUcmFja2VyOjpmaW5hbFByb2dyZXNzQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6
UHJvZ3Jlc3NUcmFja2VyOjppc0xvYWRQcm9ncmVzc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpQ
cm9ncmVzc1RyYWNrZXI6OnByb2dyZXNzSGVhcnRiZWF0VGltZXJGaXJlZCk6CisgICAgICAgICog
bG9hZGVyL1Byb2dyZXNzVHJhY2tlci5oOgorICAgICAgICAoUHJvZ3Jlc3NUcmFja2VyKToKKyAg
ICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6
OnJlc2V0RGVmZXJyZWRSZXBhaW50RGVsYXkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
Ojp1cGRhdGVUaWxlZEJhY2tpbmdSZXBhaW50VGhyb3R0bGluZyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICAoRnJhbWVWaWV3KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVnaW9uOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
Z2lvbjo6aW50ZXJzZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uaDoK
KyAgICAgICAgKFJlZ2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNr
aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9sbGVy
Lmg6CisgICAgICAgIChUaWxlQ29udHJvbGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvbWFjL1RpbGVDb250cm9sbGVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRy
b2xsZXI6OlRpbGVDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVy
OjpzZXRSZXBhaW50VGhyb3R0bGluZ0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6ZGlzYWJsZVJlcGFpbnRUaHJvdHRsaW5nVGVt
cG9yYXJpbHlGb3JJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxl
cjo6aXNUaHJvdHRsaW5nUmVwYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xs
ZXI6OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVy
OjppbnZhbGlkYXRlVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OmZs
dXNoUGVuZGluZ1JlcGFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpz
dGFydFBlbmRpbmdSZXBhaW50VGltZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
Q29udHJvbGxlcjo6cGVuZGluZ1JlcGFpbnRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVDb250cm9sbGVyOjpkcmF3TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRy
b2xsZXI6OnJldmFsaWRhdGVUaWxlcyk6CisKIDIwMTMtMDQtMDIgIENocmlzIEZsZWl6YWNoICA8
Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogTmVlZCB0byBnZXQgbGluZSB0aGlj
a25lc3MgZnJvbSBmcmFjdGlvbiBvbiB3ZWIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcAkocmV2aXNpb24gMTQ3NDM5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzNyw2ICszMzM3LDEyIEBAIE5ldHdv
cmtpbmdDb250ZXh0KiBGcmFtZUxvYWRlcjo6bmV0d29ya2kKICAgICByZXR1cm4gbV9uZXR3b3Jr
aW5nQ29udGV4dC5nZXQoKTsKIH0KIAordm9pZCBGcmFtZUxvYWRlcjo6bG9hZFByb2dyZXNzaW5n
U3RhdHVzQ2hhbmdlZCgpCit7CisgICAgYm9vbCBpc0xvYWRQcm9ncmVzc2luZyA9IG1fZnJhbWUt
PnBhZ2UoKS0+cHJvZ3Jlc3MoKS0+aXNMb2FkUHJvZ3Jlc3NpbmcoKTsKKyAgICBtX2ZyYW1lLT5w
YWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnVwZGF0ZVRpbGVkQmFja2luZ1JlcGFpbnRUaHJv
dHRsaW5nKGlzTG9hZFByb2dyZXNzaW5nKTsKK30KKwogdm9pZCBGcmFtZUxvYWRlcjo6cmVwb3J0
TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKIHsK
ICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3Jl
TWVtb3J5VHlwZXM6OkxvYWRlcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
aAkocmV2aXNpb24gMTQ3NDM5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Niw2ICsyODYsOCBAQCBwdWJsaWM6CiAKICAgICBOZXR3
b3JraW5nQ29udGV4dCogbmV0d29ya2luZ0NvbnRleHQoKSBjb25zdDsKIAorICAgIHZvaWQgbG9h
ZFByb2dyZXNzaW5nU3RhdHVzQ2hhbmdlZCgpOworCiAgICAgY29uc3QgS1VSTCYgcHJldmlvdXNV
UkwoKSBjb25zdCB7IHJldHVybiBtX3ByZXZpb3VzVVJMOyB9CiAKICAgICB2b2lkIHJlcG9ydE1l
bW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Qcm9ncmVzc1RyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Qcm9ncmVzc1RyYWNrZXIuY3BwCShyZXZpc2lvbiAxNDc0MzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUHJvZ3Jlc3NUcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEs
NiArNTEsMTAgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBmaW5hbFByb2dyZXNzVmFsdWUgPQogCiBz
dGF0aWMgY29uc3QgaW50IHByb2dyZXNzSXRlbURlZmF1bHRFc3RpbWF0ZWRMZW5ndGggPSAxMDI0
ICogMTY7CiAKK3N0YXRpYyBjb25zdCBkb3VibGUgYWN0aXZlUHJvZ3Jlc3NUaW1lckhlYXJ0YmVh
dFJhdGUgPSAwLjE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUhlYXJ0YmVhdHNXaXRo
Tm9Qcm9ncmVzcz0gNDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW51bXVtQnl0ZXNQZXJIZWFy
dGJlYXRGb3JQcm9ncmVzcyA9IDEwMjQ7CisKIHN0cnVjdCBQcm9ncmVzc0l0ZW0gewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFByb2dyZXNzSXRlbSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgpAQCAtNzQsNiArNzgsOSBAQCBQcm9ncmVzc1RyYWNrZXI6OlByb2dyZXNzVHJh
Y2tlcigpCiAgICAgLCBtX2ZpbmFsUHJvZ3Jlc3NDaGFuZ2VkU2VudChmYWxzZSkKICAgICAsIG1f
cHJvZ3Jlc3NWYWx1ZSgwKQogICAgICwgbV9udW1Qcm9ncmVzc1RyYWNrZWRGcmFtZXMoMCkKKyAg
ICAsIG1fcHJvZ3Jlc3NIZWFydGJlYXRUaW1lcih0aGlzLCAmUHJvZ3Jlc3NUcmFja2VyOjpwcm9n
cmVzc0hlYXJ0YmVhdFRpbWVyRmlyZWQpCisgICAgLCBtX2hlYXJ0YmVhdHNXaXRoTm9Qcm9ncmVz
cygwKQorICAgICwgbV90b3RhbEJ5dGVzUmVjZWl2ZWRCZWZvcmVQcmV2aW91c0hlYXJ0YmVhdCgw
KQogewogfQogCkBAIC0xMDMsNiArMTEwLDEwIEBAIHZvaWQgUHJvZ3Jlc3NUcmFja2VyOjpyZXNl
dCgpCiAgICAgbV9maW5hbFByb2dyZXNzQ2hhbmdlZFNlbnQgPSBmYWxzZTsKICAgICBtX251bVBy
b2dyZXNzVHJhY2tlZEZyYW1lcyA9IDA7CiAgICAgbV9vcmlnaW5hdGluZ1Byb2dyZXNzRnJhbWUg
PSAwOworCisgICAgbV9oZWFydGJlYXRzV2l0aE5vUHJvZ3Jlc3MgPSAwOworICAgIG1fdG90YWxC
eXRlc1JlY2VpdmVkQmVmb3JlUHJldmlvdXNIZWFydGJlYXQgPSAwOworICAgIG1fcHJvZ3Jlc3NI
ZWFydGJlYXRUaW1lci5zdG9wKCk7CiB9CiAKIHZvaWQgUHJvZ3Jlc3NUcmFja2VyOjpwcm9ncmVz
c1N0YXJ0ZWQoRnJhbWUqIGZyYW1lKQpAQCAtMTE1LDYgKzEyNiw4IEBAIHZvaWQgUHJvZ3Jlc3NU
cmFja2VyOjpwcm9ncmVzc1N0YXJ0ZWQoRnIKICAgICAgICAgcmVzZXQoKTsKICAgICAgICAgbV9w
cm9ncmVzc1ZhbHVlID0gaW5pdGlhbFByb2dyZXNzVmFsdWU7CiAgICAgICAgIG1fb3JpZ2luYXRp
bmdQcm9ncmVzc0ZyYW1lID0gZnJhbWU7CisKKyAgICAgICAgbV9wcm9ncmVzc0hlYXJ0YmVhdFRp
bWVyLnN0YXJ0UmVwZWF0aW5nKGFjdGl2ZVByb2dyZXNzVGltZXJIZWFydGJlYXRSYXRlKTsKICAg
ICAKICAgICAgICAgbV9vcmlnaW5hdGluZ1Byb2dyZXNzRnJhbWUtPmxvYWRlcigpLT5jbGllbnQo
KS0+cG9zdFByb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbigpOwogICAgIH0KQEAgLTE1Nyw2ICsx
NzAsOCBAQCB2b2lkIFByb2dyZXNzVHJhY2tlcjo6ZmluYWxQcm9ncmVzc0NvbXBsCiAKICAgICBm
cmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5zZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KHRydWUp
OwogICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPnBvc3RQcm9ncmVzc0ZpbmlzaGVkTm90
aWZpY2F0aW9uKCk7CisgICAgZnJhbWUtPmxvYWRlcigpLT5sb2FkUHJvZ3Jlc3NpbmdTdGF0dXND
aGFuZ2VkKCk7CisKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyYW1lU3RvcHBlZExv
YWRpbmcoZnJhbWUuZ2V0KCkpOwogfQogCkBAIC0yNjQsNSArMjc5LDI3IEBAIHVuc2lnbmVkIGxv
bmcgUHJvZ3Jlc3NUcmFja2VyOjpjcmVhdGVVbmkKICAgICByZXR1cm4gKytzX3VuaXF1ZUlkZW50
aWZpZXI7CiB9CiAKK2Jvb2wgUHJvZ3Jlc3NUcmFja2VyOjppc0xvYWRQcm9ncmVzc2luZygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcHJvZ3Jlc3NWYWx1ZSAmJiBtX3Byb2dyZXNzVmFsdWUgPCBm
aW5hbFByb2dyZXNzVmFsdWUgJiYgbV9oZWFydGJlYXRzV2l0aE5vUHJvZ3Jlc3MgPCBtYXhpbXVt
SGVhcnRiZWF0c1dpdGhOb1Byb2dyZXNzOworfQorCit2b2lkIFByb2dyZXNzVHJhY2tlcjo6cHJv
Z3Jlc3NIZWFydGJlYXRUaW1lckZpcmVkKFRpbWVyPFByb2dyZXNzVHJhY2tlcj4qKQoreworICAg
IGlmIChtX3RvdGFsQnl0ZXNSZWNlaXZlZCA8IG1fdG90YWxCeXRlc1JlY2VpdmVkQmVmb3JlUHJl
dmlvdXNIZWFydGJlYXQgKyBtaW51bXVtQnl0ZXNQZXJIZWFydGJlYXRGb3JQcm9ncmVzcykKKyAg
ICAgICAgKyttX2hlYXJ0YmVhdHNXaXRoTm9Qcm9ncmVzczsKKyAgICBlbHNlCisgICAgICAgIG1f
aGVhcnRiZWF0c1dpdGhOb1Byb2dyZXNzID0gMDsKKworLy8gICAgdW5zaWduZWQgZGVsdGEgPSB1
bnNpZ25lZChtX3RvdGFsQnl0ZXNSZWNlaXZlZCAtIG1fdG90YWxCeXRlc1JlY2VpdmVkQmVmb3Jl
UHJldmlvdXNIZWFydGJlYXQpOworCisgICAgbV90b3RhbEJ5dGVzUmVjZWl2ZWRCZWZvcmVQcmV2
aW91c0hlYXJ0YmVhdCA9IG1fdG90YWxCeXRlc1JlY2VpdmVkOworCisgICAgbV9vcmlnaW5hdGlu
Z1Byb2dyZXNzRnJhbWUtPmxvYWRlcigpLT5sb2FkUHJvZ3Jlc3NpbmdTdGF0dXNDaGFuZ2VkKCk7
CisKKy8vICAgIGZwcmludGYoc3RkZXJyLCAiaXNMb2FkUHJvZ3Jlc3NpbmcgJWQgJWYgJWRcbiIs
IGlzTG9hZFByb2dyZXNzaW5nKCksIG1fcHJvZ3Jlc3NWYWx1ZSwgZGVsdGEpOworICAgIGlmICgh
bV9wcm9ncmVzc1ZhbHVlIHx8IG1fcHJvZ3Jlc3NWYWx1ZSA+PSBmaW5hbFByb2dyZXNzVmFsdWUp
CisgICAgICAgIG1fcHJvZ3Jlc3NIZWFydGJlYXRUaW1lci5zdG9wKCk7Cit9CiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Qcm9ncmVzc1RyYWNrZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJvZ3Jlc3NUcmFja2VyLmgJKHJldmlzaW9uIDE0NzQzOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Qcm9ncmVzc1RyYWNrZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBQcm9ncmVzc1RyYWNrZXJfaAogI2RlZmluZSBQ
cm9ncmVzc1RyYWNrZXJfaAogCisjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CkBAIC01OCwxMSArNTksMTUgQEAgcHVibGljOgogICAgIGxvbmcgbG9uZyB0b3RhbFBh
Z2VBbmRSZXNvdXJjZUJ5dGVzVG9Mb2FkKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbFBhZ2VBbmRS
ZXNvdXJjZUJ5dGVzVG9Mb2FkOyB9CiAgICAgbG9uZyBsb25nIHRvdGFsQnl0ZXNSZWNlaXZlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fdG90YWxCeXRlc1JlY2VpdmVkOyB9CiAKKyAgICBib29sIGlzTG9h
ZFByb2dyZXNzaW5nKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgUHJvZ3Jlc3NUcmFja2VyKCk7
CiAKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgdm9pZCBmaW5hbFByb2dyZXNzQ29tcGxldGUoKTsK
KworICAgIHZvaWQgcHJvZ3Jlc3NIZWFydGJlYXRUaW1lckZpcmVkKFRpbWVyPFByb2dyZXNzVHJh
Y2tlcj4qKTsKICAgICAKICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBzX3VuaXF1ZUlkZW50aWZp
ZXI7CiAgICAgCkBAIC03OCw2ICs4MywxMCBAQCBwcml2YXRlOgogICAgIAogICAgIGludCBtX251
bVByb2dyZXNzVHJhY2tlZEZyYW1lczsKICAgICBIYXNoTWFwPHVuc2lnbmVkIGxvbmcsIE93blB0
cjxQcm9ncmVzc0l0ZW0+ID4gbV9wcm9ncmVzc0l0ZW1zOworCisgICAgVGltZXI8UHJvZ3Jlc3NU
cmFja2VyPiBtX3Byb2dyZXNzSGVhcnRiZWF0VGltZXI7CisgICAgdW5zaWduZWQgbV9oZWFydGJl
YXRzV2l0aE5vUHJvZ3Jlc3M7CisgICAgbG9uZyBsb25nIG1fdG90YWxCeXRlc1JlY2VpdmVkQmVm
b3JlUHJldmlvdXNIZWFydGJlYXQ7CiB9OwogICAgIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAkocmV2aXNpb24gMTQ3NDM5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgzLDYgKzIyODMsMTAgQEAgdm9pZCBGcmFt
ZVZpZXc6OnJlc2V0RGVmZXJyZWRSZXBhaW50RGVsYQogICAgICAgICBpZiAoIW1fZGVmZXJyaW5n
UmVwYWludHMpCiAgICAgICAgICAgICBkb0RlZmVycmVkUmVwYWludHMoKTsKICAgICB9CisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChUaWxlZEJhY2tpbmcqIHRpbGVk
QmFja2luZyA9IHRoaXMtPnRpbGVkQmFja2luZygpKQorICAgICAgICB0aWxlZEJhY2tpbmctPmRp
c2FibGVSZXBhaW50VGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rpb24oKTsKKyNlbmRp
ZgogfQogCiBkb3VibGUgRnJhbWVWaWV3OjphZGp1c3RlZERlZmVycmVkUmVwYWludERlbGF5KCkg
Y29uc3QKQEAgLTIzMTAsNiArMjMxNCwxNiBAQCB2b2lkIEZyYW1lVmlldzo6ZW5kRGlzYWJsZVJl
cGFpbnRzKCkKICAgICBtX2Rpc2FibGVSZXBhaW50cy0tOwogfQogCit2b2lkIEZyYW1lVmlldzo6
dXBkYXRlVGlsZWRCYWNraW5nUmVwYWludFRocm90dGxpbmcoYm9vbCBpc0xvYWRQcm9ncmVzc2lu
ZykKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKFRpbGVkQmFj
a2luZyogdGlsZWRCYWNraW5nID0gdGhpcy0+dGlsZWRCYWNraW5nKCkpCisgICAgICAgIHRpbGVk
QmFja2luZy0+c2V0UmVwYWludFRocm90dGxpbmdFbmFibGVkKGlzTG9hZFByb2dyZXNzaW5nKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGlzTG9hZFByb2dyZXNzaW5nKTsKKyNlbmRpZgorfQor
CiB2b2lkIEZyYW1lVmlldzo6bGF5b3V0VGltZXJGaXJlZChUaW1lcjxGcmFtZVZpZXc+KikKIHsK
ICNpZmRlZiBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmgJKHJldmlzaW9uIDE0NzQzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw2ICsyMzYsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzdGFydERlZmVycmVkUmVwYWludFRpbWVyKGRvdWJsZSBkZWxheSk7CiAgICAgdm9pZCByZXNl
dERlZmVycmVkUmVwYWludERlbGF5KCk7CiAKKyAgICB2b2lkIHVwZGF0ZVRpbGVkQmFja2luZ1Jl
cGFpbnRUaHJvdHRsaW5nKGJvb2wgaXNMb2FkUHJvZ3Jlc3NpbmcpOworCiAgICAgdm9pZCBiZWdp
bkRpc2FibGVSZXBhaW50cygpOwogICAgIHZvaWQgZW5kRGlzYWJsZVJlcGFpbnRzKCk7CiAgICAg
Ym9vbCByZXBhaW50c0Rpc2FibGVkKCkgeyByZXR1cm4gbV9kaXNhYmxlUmVwYWludHMgPiAwOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAJKHJl
dmlzaW9uIDE0NzQzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlZ2lv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw2ICsxMjMsMTIgQEAgdW5zaWduZWQgUmVnaW9u
Ojp0b3RhbEFyZWEoKSBjb25zdAogICAgIHJldHVybiB0b3RhbEFyZWE7CiB9CiAKK3ZvaWQgUmVn
aW9uOjpjbGVhcigpCit7CisgICAgbV9ib3VuZHMgPSBJbnRSZWN0KCk7CisgICAgbV9zaGFwZSA9
IFNoYXBlKCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENvbXBhcmVPcGVyYXRpb24+CiBib29s
IFJlZ2lvbjo6U2hhcGU6OmNvbXBhcmVTaGFwZXMoY29uc3QgU2hhcGUmIGFTaGFwZSwgY29uc3Qg
U2hhcGUmIGJTaGFwZSkKIHsKQEAgLTU1NSw4ICs1NjEsNyBAQCB2b2lkIFJlZ2lvbjo6aW50ZXJz
ZWN0KGNvbnN0IFJlZ2lvbiYgcmVnCiAgICAgaWYgKG1fYm91bmRzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIGlmICghbV9ib3VuZHMuaW50ZXJzZWN0cyhyZWdpb24ubV9ib3VuZHMp
KSB7Ci0gICAgICAgIG1fc2hhcGUgPSBTaGFwZSgpOwotICAgICAgICBtX2JvdW5kcyA9IEludFJl
Y3QoKTsKKyAgICAgICAgY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgJKHJldmlzaW9uIDE0NzQz
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OCw2ICs1OCw4IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIHRvdGFsQXJl
YSgpIGNvbnN0OwogCisgICAgdm9pZCBjbGVhcigpOworCiAjaWZuZGVmIE5ERUJVRwogICAgIHZv
aWQgZHVtcCgpIGNvbnN0OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9UaWxlZEJhY2tpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaAkocmV2aXNpb24gMTQ3NDM5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgzLDYgKzgzLDkgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgZG91YmxlIHJldGFp
bmVkVGlsZUJhY2tpbmdTdG9yZU1lbW9yeSgpIGNvbnN0ID0gMDsKIAorICAgIHZpcnR1YWwgdm9p
ZCBzZXRSZXBhaW50VGhyb3R0bGluZ0VuYWJsZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBkaXNhYmxlUmVwYWludFRocm90dGxpbmdUZW1wb3JhcmlseUZvckludGVyYWN0aW9uKCkgPSAw
OworCiAgICAgLy8gRXhwb3NlZCBmb3IgdGVzdGluZwogICAgIHZpcnR1YWwgSW50UmVjdCB0aWxl
Q292ZXJhZ2VSZWN0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlR3JpZEV4
dGVudCgpIGNvbnN0ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL21hYy9UaWxlQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5oCShyZXZpc2lvbiAxNDc0Mzkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNvbnRyb2xs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgogI2luY2x1ZGUgIkludFBvaW50SGFzaC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNp
bmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKICNpbmNsdWRlICJU
aW1lci5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgpAQCAtMTI4LDYgKzEyOSw4IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCBJbnRSZWN0IHRpbGVDb3ZlcmFnZVJlY3QoKSBjb25zdCBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIENBTGF5ZXIgKnRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIoKSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsaW5nTW9kZUluZGljYXRpb24oU2Ny
b2xsaW5nTW9kZUluZGljYXRpb24pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRSZXBh
aW50VGhyb3R0bGluZ0VuYWJsZWQoYm9vbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRp
c2FibGVSZXBhaW50VGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rpb24oKSBPVkVSUklE
RTsKIAogICAgIEludFJlY3QgYm91bmRzKCkgY29uc3Q7CiAKQEAgLTE1OSw3ICsxNjIsMTIgQEAg
cHJpdmF0ZToKICAgICBUaWxlQ29ob3J0IG5ld2VzdFRpbGVDb2hvcnQoKSBjb25zdDsKICAgICBU
aWxlQ29ob3J0IG9sZGVzdFRpbGVDb2hvcnQoKSBjb25zdDsKIAorICAgIHZvaWQgaW52YWxpZGF0
ZVRpbGVzKGNvbnN0IEludFJlY3QmIHJlY3QpOwogICAgIHZvaWQgc2V0VGlsZU5lZWRzRGlzcGxh
eUluUmVjdChjb25zdCBUaWxlSW5kZXgmLCBUaWxlSW5mbyYsIGNvbnN0IEludFJlY3QmIHJlcGFp
bnRSZWN0SW5UaWxlQ29vcmRzLCBjb25zdCBJbnRSZWN0JiBjb3ZlcmFnZVJlY3RJblRpbGVDb29y
ZHMpOworICAgIGJvb2wgaXNUaHJvdHRsaW5nUmVwYWludHMoKSBjb25zdDsKKyAgICB2b2lkIGZs
dXNoUGVuZGluZ1JlcGFpbnRzKCk7CisgICAgdm9pZCBzdGFydFBlbmRpbmdSZXBhaW50VGltZXJJ
Zk5lZWRlZCgpOworICAgIHZvaWQgcGVuZGluZ1JlcGFpbnRUaW1lckZpcmVkKFRpbWVyPFRpbGVD
b250cm9sbGVyPiopOwogCiAgICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5ZXJBdEluZGV4KGNvbnN0
IFRpbGVJbmRleCYpIGNvbnN0OwogICAgIFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+IGNyZWF0ZVRp
bGVMYXllcihjb25zdCBJbnRSZWN0Jik7CkBAIC0yMDksNiArMjE3LDExIEBAIHByaXZhdGU6CiAg
ICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IG1fdGlsZURlYnVnQm9yZGVyQ29sb3I7CiAgICAgZmxv
YXQgbV90aWxlRGVidWdCb3JkZXJXaWR0aDsKICAgICBTY3JvbGxpbmdNb2RlSW5kaWNhdGlvbiBt
X2luZGljYXRvck1vZGU7CisKKyAgICBSZWdpb24gbV9wZW5kaW5nUmVwYWludFJlZ2lvbjsKKyAg
ICBUaW1lcjxUaWxlQ29udHJvbGxlcj4gbV9wZW5kaW5nUmVwYWludFRpbWVyOworICAgIGJvb2wg
bV9yZXBhaW50VGhyb3R0bGluZ0VuYWJsZWQ7CisgICAgYm9vbCBtX3JlcGFpbnRUaHJvdHRsaW5n
VGVtcG9yYXJpbHlEaXNhYmxlZEZvckludGVyYWN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1Rp
bGVDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbQkocmV2aXNpb24gMTQ3NDM5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9sbGVyLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDkgQEAgVGlsZUNvbnRyb2xsZXI6OlRpbGVDb250
cm9sbGVyKFdlYlRpbGVkQgogICAgICwgbV9jbGlwc1RvRXhwb3NlZFJlY3QoZmFsc2UpCiAgICAg
LCBtX3RpbGVEZWJ1Z0JvcmRlcldpZHRoKDApCiAgICAgLCBtX2luZGljYXRvck1vZGUoVGhyZWFk
ZWRTY3JvbGxpbmdJbmRpY2F0aW9uKQorICAgICwgbV9wZW5kaW5nUmVwYWludFRpbWVyKHRoaXMs
ICZUaWxlQ29udHJvbGxlcjo6cGVuZGluZ1JlcGFpbnRUaW1lckZpcmVkKQorICAgICwgbV9yZXBh
aW50VGhyb3R0bGluZ0VuYWJsZWQoZmFsc2UpCisgICAgLCBtX3JlcGFpbnRUaHJvdHRsaW5nVGVt
cG9yYXJpbHlEaXNhYmxlZEZvckludGVyYWN0aW9uKGZhbHNlKQogewogICAgIFtDQVRyYW5zYWN0
aW9uIGJlZ2luXTsKICAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwpA
QCAtMTQ3LDEyICsxNTAsNDQgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6dGlsZUNhY2hlTGF5ZXJC
b3VuZAogICAgIHNjaGVkdWxlVGlsZVJldmFsaWRhdGlvbigwKTsKIH0KIAordm9pZCBUaWxlQ29u
dHJvbGxlcjo6c2V0UmVwYWludFRocm90dGxpbmdFbmFibGVkKGJvb2wgYikKK3sKKyAgICBtX3Jl
cGFpbnRUaHJvdHRsaW5nRW5hYmxlZCA9IGI7CisgICAgaWYgKG1fcmVwYWludFRocm90dGxpbmdF
bmFibGVkKQorICAgICAgICByZXR1cm47CisvLyAgICBpZiAoIW1fcGVuZGluZ1JlcGFpbnRSZWdp
b24uaXNFbXB0eSgpKQorLy8gICAgICAgIGZwcmludGYoc3RkZXJyLCAic2V0UmVwYWludFRocm90
dGxpbmdFbmFibGVkKGZhbHNlKS0+Iik7CisgICAgZmx1c2hQZW5kaW5nUmVwYWludHMoKTsKK30K
Kwordm9pZCBUaWxlQ29udHJvbGxlcjo6ZGlzYWJsZVJlcGFpbnRUaHJvdHRsaW5nVGVtcG9yYXJp
bHlGb3JJbnRlcmFjdGlvbigpCit7CisgICAgaWYgKG1fcmVwYWludFRocm90dGxpbmdUZW1wb3Jh
cmlseURpc2FibGVkRm9ySW50ZXJhY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBtX3JlcGFp
bnRUaHJvdHRsaW5nVGVtcG9yYXJpbHlEaXNhYmxlZEZvckludGVyYWN0aW9uID0gdHJ1ZTsKKy8v
ICAgIGZwcmludGYoc3RkZXJyLCAiZGlzYWJsZVJlcGFpbnRUaHJvdHRsaW5nVGVtcG9yYXJpbHlG
b3JJbnRlcmFjdGlvbigpXG4iKTsKK30KKworYm9vbCBUaWxlQ29udHJvbGxlcjo6aXNUaHJvdHRs
aW5nUmVwYWludHMoKSBjb25zdAoreworICAgIGlmICghbV9yZXBhaW50VGhyb3R0bGluZ0VuYWJs
ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fcGVuZGluZ1JlcGFpbnRUaW1l
ci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fcmVwYWludFRo
cm90dGxpbmdUZW1wb3JhcmlseURpc2FibGVkRm9ySW50ZXJhY3Rpb24pIHsKKy8vICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgImlzVGhyb3R0bGluZ1JlcGFpbnRzKCkgbV9yZXBhaW50VGhyb3R0bGlu
Z1RlbXBvcmFyaWx5RGlzYWJsZWRGb3JJbnRlcmFjdGlvbiA9IHRydWVcbiIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIFRpbGVDb250
cm9sbGVyOjpzZXROZWVkc0Rpc3BsYXkoKQogewogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7
CiAgICAgICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOwogICAgIH0K
KyAgICBtX3BlbmRpbmdSZXBhaW50UmVnaW9uLmNsZWFyKCk7CiB9CiAKIHZvaWQgVGlsZUNvbnRy
b2xsZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtMTYw
LDYgKzE5NSwyNCBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlCiAg
ICAgaWYgKG1fdGlsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNU
aHJvdHRsaW5nUmVwYWludHMoKSkgeworLy8gICAgICAgIGZwcmludGYoc3RkZXJyLCAic2V0TmVl
ZHNEaXNwbGF5SW5SZWN0OiBkZWxheWVkIHJlcGFpbnRcbiIpOworICAgICAgICBtX3BlbmRpbmdS
ZXBhaW50UmVnaW9uLnVuaXRlKHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1f
cGVuZGluZ1JlcGFpbnRUaW1lci5zdG9wKCk7CisgICAgaWYgKCFtX3BlbmRpbmdSZXBhaW50UmVn
aW9uLmlzRW1wdHkoKSkgeworICAgICAgICBtX3BlbmRpbmdSZXBhaW50UmVnaW9uLnVuaXRlKHJl
Y3QpOworLy8gICAgICAgIGlmICghbV9wZW5kaW5nUmVwYWludFJlZ2lvbi5pc0VtcHR5KCkpCisv
LyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAic2V0TmVlZHNEaXNwbGF5SW5SZWN0LT4iKTsK
KyAgICAgICAgZmx1c2hQZW5kaW5nUmVwYWludHMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpbnZhbGlkYXRlVGlsZXMocmVjdCk7Cit9CisKK3ZvaWQgVGlsZUNvbnRyb2xsZXI6Omlu
dmFsaWRhdGVUaWxlcyhjb25zdCBJbnRSZWN0JiByZWN0KQorewogICAgIEZsb2F0UmVjdCBzY2Fs
ZWRSZWN0KHJlY3QpOwogICAgIHNjYWxlZFJlY3Quc2NhbGUobV9zY2FsZSk7CiAgICAgSW50UmVj
dCByZXBhaW50UmVjdEluVGlsZUNvb3JkcyhlbmNsb3NpbmdJbnRSZWN0KHNjYWxlZFJlY3QpKTsK
QEAgLTE4Niw2ICsyMzksMzUgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0TmVlZHNEaXNwbGF5
SW5SZQogICAgICAgICBzZXRUaWxlTmVlZHNEaXNwbGF5SW5SZWN0KGl0LT5rZXksIGl0LT52YWx1
ZSwgcmVwYWludFJlY3RJblRpbGVDb29yZHMsIG1fcHJpbWFyeVRpbGVDb3ZlcmFnZVJlY3QpOwog
fQogCit2b2lkIFRpbGVDb250cm9sbGVyOjpmbHVzaFBlbmRpbmdSZXBhaW50cygpCit7CisgICAg
bV9wZW5kaW5nUmVwYWludFRpbWVyLnN0b3AoKTsKKyAgICBpZiAobV9wZW5kaW5nUmVwYWludFJl
Z2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKy8vICAgIGZwcmludGYoc3RkZXJyLCAi
Zmx1c2hQZW5kaW5nUmVwYWludHNcbiIpOworICAgIFZlY3RvcjxJbnRSZWN0PiBwZW5kaW5nUmVj
dHMgPSBtX3BlbmRpbmdSZXBhaW50UmVnaW9uLnJlY3RzKCk7CisgICAgbV9wZW5kaW5nUmVwYWlu
dFJlZ2lvbi5jbGVhcigpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwZW5kaW5nUmVj
dHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGludmFsaWRhdGVUaWxlcyhwZW5kaW5nUmVjdHNbaV0p
OworfQorCit2b2lkIFRpbGVDb250cm9sbGVyOjpzdGFydFBlbmRpbmdSZXBhaW50VGltZXJJZk5l
ZWRlZCgpCit7CisgICAgbV9yZXBhaW50VGhyb3R0bGluZ1RlbXBvcmFyaWx5RGlzYWJsZWRGb3JJ
bnRlcmFjdGlvbiA9IGZhbHNlOworICAgIGlmICghbV9yZXBhaW50VGhyb3R0bGluZ0VuYWJsZWQg
fHwgbV9wZW5kaW5nUmVwYWludFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAvLyBUaGUgZGVsYXlpbmcgd2lsbCBzdGFydCBvbiB0b3Agb2YgdGhlIHJ1bmxvb3AuCisgICAg
c3RhdGljIGNvbnN0IGRvdWJsZSB0aHJvdHRsZWRSZXBhaW50RGVsYXkgPSAuNTsKKyAgICBtX3Bl
bmRpbmdSZXBhaW50VGltZXIuc3RhcnRPbmVTaG90KHRocm90dGxlZFJlcGFpbnREZWxheSk7Cit9
CisKK3ZvaWQgVGlsZUNvbnRyb2xsZXI6OnBlbmRpbmdSZXBhaW50VGltZXJGaXJlZChUaW1lcjxU
aWxlQ29udHJvbGxlcj4qKQoreworLy8gICAgaWYgKCFtX3BlbmRpbmdSZXBhaW50UmVnaW9uLmlz
RW1wdHkoKSkKKy8vICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInBlbmRpbmdSZXBhaW50VGltZXJG
aXJlZC0+Iik7CisgICAgZmx1c2hQZW5kaW5nUmVwYWludHMoKTsKK30KKwogdm9pZCBUaWxlQ29u
dHJvbGxlcjo6c2V0VGlsZU5lZWRzRGlzcGxheUluUmVjdChjb25zdCBUaWxlSW5kZXgmIHRpbGVJ
bmRleCwgVGlsZUluZm8mIHRpbGVJbmZvLCBjb25zdCBJbnRSZWN0JiByZXBhaW50UmVjdEluVGls
ZUNvb3JkcywgY29uc3QgSW50UmVjdCYgY292ZXJhZ2VSZWN0SW5UaWxlQ29vcmRzKQogewogICAg
IFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gdGlsZUluZm8ubGF5ZXIuZ2V0KCk7CkBAIC0yMjgs
NiArMzEwLDggQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6ZHJhd0xheWVyKFdlYlRpbGVMYQogCiAg
ICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIAorICAgIHN0YXJ0UGVuZGluZ1Jl
cGFpbnRUaW1lcklmTmVlZGVkKCk7CisKICAgICBkcmF3UmVwYWludENvdW50ZXIobGF5ZXIsIGNv
bnRleHQpOwogfQogCkBAIC03MjUsNiArODA5LDExIEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnJl
dmFsaWRhdGVUaWxlcyhUaWwKIAogICAgIGlmIChkaXJ0eVJlY3RzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOworCisvLyAgICBpZiAoIW1fcGVuZGluZ1JlcGFpbnRSZWdpb24uaXNFbXB0eSgp
KQorLy8gICAgICAgIGZwcmludGYoc3RkZXJyLCAicmV2YWxpZGF0ZVRpbGVzLT4iKTsKKyAgICBm
bHVzaFBlbmRpbmdSZXBhaW50cygpOworCiAgICAgcGxhdGZvcm1MYXllci0+b3duZXIoKS0+cGxh
dGZvcm1DQUxheWVyRGlkQ3JlYXRlVGlsZXMoZGlydHlSZWN0cyk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196647</attachid>
            <date>2013-04-05 10:17:04 -0700</date>
            <delta_ts>2013-04-05 13:38:45 -0700</delta_ts>
            <desc>throttle layer flushes instead of repaints</desc>
            <filename>layer-flush-throttling-3.patch</filename>
            <type>text/plain</type>
            <size>22322</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0Nzc0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBACisyMDEzLTA0LTA1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBUaHJvdHRsZSBjb21wb3NpdGlu
ZyBsYXllciBmbHVzaGVzIGR1cmluZyBwYWdlIGxvYWRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzc4NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUGFnZSBjb250ZW50IGNhbiBjaGFu
Z2UgcmFwaWRseSBkdXJpbmcgcGFnZSBsb2FkaW5nIHRyaWdnZXJpbmcgZXhjZXNzaXZlIGxheWVy
IGZsdXNoZXMgYW5kIHJlcGFpbnRpbmcuIFdlIHNob3VsZCBhdm9pZCB0aGlzIHVubmVjZXNzYXJ5
IHdvcmsuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIHJlZHVjZXMgbGF5ZXIgZmx1c2hl
cyAoYW5kIHBhaW50aW5nKSBkdXJpbmcgbG9hZGluZyBieSA1MC03MCUgb24gbWFueSBwb3B1bGFy
IHBhZ2VzLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkUHJvZ3Jlc3NpbmdTdGF0dXNDaGFuZ2VkKTogICAgICAg
IAorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRlci9Qcm9n
cmVzc1RyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvZ3Jlc3NUcmFja2VyOjpQcm9n
cmVzc1RyYWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6UHJvZ3Jlc3NUcmFja2VyOjpyZXNldCk6
CisgICAgICAgIChXZWJDb3JlOjpQcm9ncmVzc1RyYWNrZXI6OnByb2dyZXNzU3RhcnRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQcm9ncmVzc1RyYWNrZXI6OmZpbmFsUHJvZ3Jlc3NDb21wbGV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpQcm9ncmVzc1RyYWNrZXI6OmlzTG9hZFByb2dyZXNzaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlByb2dyZXNzVHJhY2tlcjo6cHJvZ3Jlc3NIZWFydGJlYXRUaW1l
ckZpcmVkKToKKyAgICAgICAgKiBsb2FkZXIvUHJvZ3Jlc3NUcmFja2VyLmg6CisgICAgICAgIAor
ICAgICAgICAgICAgVHJhY2sgaWYgdGhlIGRvY3VtZW50IGxvYWQgaXMgcHJvZ3Jlc3NpbmcuIFRo
aXMgaXMgZG9uZSB3aXRoIGEgaGVhcnRiZWF0IHRpbWVyIHRoYXQgY2hlY2tzIGV2ZXJ5IDEwMG1z
IGlmIHdlIGhhdmUgcmVjZWl2ZWQgbW9yZSB0aGFuIDFrIG9mIGRhdGEuCisgICAgICAgICAgICBJ
ZiBmb3VyIGhlYXJ0YmVhdHMgcGFzcyB3aXRob3V0IHByb2dyZXNzIHRoZW4gd2UgY29uc2lkZXIg
dGhlIGxvYWQgc3RhbGxlZC4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cmVzZXREZWZlcnJlZFJlcGFpbnREZWxheSk6CisgICAg
ICAgIAorICAgICAgICAgICAgRGlzYWJsZSB0aHJvdHRsaW5nIHRlbXBvcmFyeSBvbiB1c2VyIGlu
dGVyYWN0aW9uIHNvIHRoZSBwYWdlIHN0YXlzIGFzIHJlc3BvbnNpdmUgYXMgcG9zc2libGUgZXZl
biBkdXJpbmcgbG9hZGluZy4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVM
YXllckZsdXNoVGhyb3R0bGluZyk6CisgICAgICAgIAorICAgICAgICAgICAgRW5hYmxlIHRocm90
dGxpbmcgd2hlbiB0aGUgbG9hZCBpcyBwcm9ncmVzc2luZywgZGlzYWJsZSBvdGhlcndpc2UuCisK
KyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmNhblRo
cm90dGxlTGF5ZXJGbHVzaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhp
Y3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cGxhdGZv
cm1DQUxheWVyRGlkQ3JlYXRlVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjpjYW5UaHJvdHRsZUxheWVyRmx1c2gpOgorICAgICAgICAKKyAgICAgICAgICAgIERvbid0
IHRocm90dGxlIGlmIG5ldyB0aWxlcyBoYXZlIGJlZW4gYWRkZWQgYnkgdGhlIHRpbGUgY29udHJv
bGxlci4gVGhleSBtYXkgaGF2ZSBzdGFsZSBjb250ZW50IGFuZCBuZWVkIHRvIGJlIGZsdXNoZWQg
aW1tZWRpYXRlbHkuCisKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6bm90ZUxh
eWVyUHJvcGVydHlDaGFuZ2VkKToKKyAgICAgICAgCisgICAgICAgICAgICBTZXQgdGhlIG5ldyBU
aWxlc0FkZGVkIGNoYW5nZSBmbGFnLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
R3JhcGhpY3NMYXllckNBLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6Om5vdGlmeUZsdXNo
UmVxdWlyZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpSZW5kZXJMYXllckNv
bXBvc2l0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpub3Rp
ZnlGbHVzaFJlcXVpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRv
cjo6c2NoZWR1bGVMYXllckZsdXNoTm93KToKKyAgICAgICAgCisgICAgICAgICAgICBGYWN0b3Ig
dGhlIGFjdHVhbCBmbHVzaCBzY2hlZHVsaW5nIHRvIHByaXZhdGUgZnVuY3Rpb24uCisKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2NoZWR1bGVMYXllckZsdXNoKToK
KyAgICAgICAgCisgICAgICAgICAgICBNYXJrIHRoZSBjb21wb3NpdG9yIGZvciBmbHVzaCBhbmQg
cmV0dXJuIHdpdGhvdXQgZmx1c2hpbmcgaWYgdGhlIGZsdXNoZXMgYXJlIGN1cnJlbnRseSBiZWlu
ZyB0aHJvdHRsZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6
Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKToKKyAgICAgICAgCisgICAgICAgICAgICBBZnRlciBh
IGZsdXNoLCBzdGFydCB0aGUgdGhyb3R0aW5nIHRpbWVyIChjdXJyZW50bHkgMC41cykgY29hbGVz
Y2luZyB0aGUgc3Vic2VxdWVudCBmbHVzaGVzLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmRpZENoYW5nZVZpc2libGVSZWN0KToKKyAgICAgICAgCisgICAgICAg
ICAgICBEbyBpbW1lZGlhdGVseSBmbHVzaCBpZiBuZWVkZWQuCisKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0TGF5ZXJGbHVzaFRocm90dGxpbmdFbmFibGVkKToK
KyAgICAgICAgCisgICAgICAgICAgICBGbHVzaCBpbW1lZGlhdGVseSBpZiBkaXNhYmxlZC4KKwor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaXNhYmxlTGF5ZXJGbHVz
aFRocm90dGxpbmdUZW1wb3JhcmlseUZvckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6aXNUaHJvdHRsaW5nTGF5ZXJGbHVzaGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6c3RhcnRMYXllckZsdXNoVGhyb3R0
bGluZ1RpbWVySWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpsYXllckZsdXNoVGhyb3R0bGluZ1RpbWVyRmlyZWQpOgorICAgICAgICAKKyAgICAgICAg
ICAgIEZsdXNoIHdoZW4gdGhlIHRpbWVyIGZpcmVzIHRpbWVyLgorCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oOgorCiAyMDEzLTA0LTA1ICBSeW9zdWtlIE5pd2Eg
IDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBDaHJvbWl1bSBjb2RlIGZyb20g
V2ViQ29yZS9wYWdlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJl
dmlzaW9uIDE0NzYyMikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzMzcsNiArMzMzNywxMiBAQCBOZXR3b3JraW5nQ29udGV4dCog
RnJhbWVMb2FkZXI6Om5ldHdvcmtpCiAgICAgcmV0dXJuIG1fbmV0d29ya2luZ0NvbnRleHQuZ2V0
KCk7CiB9CiAKK3ZvaWQgRnJhbWVMb2FkZXI6OmxvYWRQcm9ncmVzc2luZ1N0YXR1c0NoYW5nZWQo
KQoreworICAgIGJvb2wgaXNMb2FkUHJvZ3Jlc3NpbmcgPSBtX2ZyYW1lLT5wYWdlKCktPnByb2dy
ZXNzKCktPmlzTG9hZFByb2dyZXNzaW5nKCk7CisgICAgbV9mcmFtZS0+cGFnZSgpLT5tYWluRnJh
bWUoKS0+dmlldygpLT51cGRhdGVMYXllckZsdXNoVGhyb3R0bGluZyhpc0xvYWRQcm9ncmVzc2lu
Zyk7Cit9CisKIHZvaWQgRnJhbWVMb2FkZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGlu
Zm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpMb2FkZXIpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDE0NzYyMikKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODYsNiArMjg2LDggQEAgcHVibGljOgogCiAgICAgTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtp
bmdDb250ZXh0KCkgY29uc3Q7CiAKKyAgICB2b2lkIGxvYWRQcm9ncmVzc2luZ1N0YXR1c0NoYW5n
ZWQoKTsKKwogICAgIGNvbnN0IEtVUkwmIHByZXZpb3VzVVJMKCkgY29uc3QgeyByZXR1cm4gbV9w
cmV2aW91c1VSTDsgfQogCiAgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJ
bmZvKikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJvZ3Jlc3NUcmFja2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJvZ3Jlc3NUcmFja2Vy
LmNwcAkocmV2aXNpb24gMTQ3NjIyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Byb2dyZXNz
VHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDEzIEBAIHN0YXRpYyBjb25z
dCBkb3VibGUgZmluYWxQcm9ncmVzc1ZhbHVlID0KIAogc3RhdGljIGNvbnN0IGludCBwcm9ncmVz
c0l0ZW1EZWZhdWx0RXN0aW1hdGVkTGVuZ3RoID0gMTAyNCAqIDE2OwogCisvLyBDaGVjayBpZiB0
aGUgbG9hZCBpcyBwcm9ncmVzc2luZyB0aGlzIG9mdGVuLgorc3RhdGljIGNvbnN0IGRvdWJsZSBw
cm9ncmVzc0hlYXJ0YmVhdEludGVydmFsID0gMC4xOworLy8gSG93IG1hbnkgaGVhcnRiZWF0cyBt
dXN0IHBhc3Mgd2l0aG91dCBwcm9ncmVzcyBiZWZvcmUgZGVjaWRpbmcgdGhlIGxvYWQgaXMgY3Vy
cmVudGx5IHN0YWxsZWQuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUhlYXJ0YmVhdHNX
aXRoTm9Qcm9ncmVzcz0gMzsKKy8vIEhvdyBtYW55IGJ5dGVzIGFyZSByZXF1aXJlZCBiZXR3ZWVu
IGhlYXJ0YmVhdHMgdG8gY29uc2lkZXIgaXQgcHJvZ3Jlc3MuCitzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbWludW11bUJ5dGVzUGVySGVhcnRiZWF0Rm9yUHJvZ3Jlc3MgPSAxMDI0OworCiBzdHJ1Y3Qg
UHJvZ3Jlc3NJdGVtIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQcm9ncmVzc0l0ZW0pOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTc0LDYgKzgxLDkgQEAgUHJvZ3Jl
c3NUcmFja2VyOjpQcm9ncmVzc1RyYWNrZXIoKQogICAgICwgbV9maW5hbFByb2dyZXNzQ2hhbmdl
ZFNlbnQoZmFsc2UpCiAgICAgLCBtX3Byb2dyZXNzVmFsdWUoMCkKICAgICAsIG1fbnVtUHJvZ3Jl
c3NUcmFja2VkRnJhbWVzKDApCisgICAgLCBtX3Byb2dyZXNzSGVhcnRiZWF0VGltZXIodGhpcywg
JlByb2dyZXNzVHJhY2tlcjo6cHJvZ3Jlc3NIZWFydGJlYXRUaW1lckZpcmVkKQorICAgICwgbV9o
ZWFydGJlYXRzV2l0aE5vUHJvZ3Jlc3MoMCkKKyAgICAsIG1fdG90YWxCeXRlc1JlY2VpdmVkQmVm
b3JlUHJldmlvdXNIZWFydGJlYXQoMCkKIHsKIH0KIApAQCAtMTAzLDYgKzExMywxMCBAQCB2b2lk
IFByb2dyZXNzVHJhY2tlcjo6cmVzZXQoKQogICAgIG1fZmluYWxQcm9ncmVzc0NoYW5nZWRTZW50
ID0gZmFsc2U7CiAgICAgbV9udW1Qcm9ncmVzc1RyYWNrZWRGcmFtZXMgPSAwOwogICAgIG1fb3Jp
Z2luYXRpbmdQcm9ncmVzc0ZyYW1lID0gMDsKKworICAgIG1faGVhcnRiZWF0c1dpdGhOb1Byb2dy
ZXNzID0gMDsKKyAgICBtX3RvdGFsQnl0ZXNSZWNlaXZlZEJlZm9yZVByZXZpb3VzSGVhcnRiZWF0
ID0gMDsKKyAgICBtX3Byb2dyZXNzSGVhcnRiZWF0VGltZXIuc3RvcCgpOwogfQogCiB2b2lkIFBy
b2dyZXNzVHJhY2tlcjo6cHJvZ3Jlc3NTdGFydGVkKEZyYW1lKiBmcmFtZSkKQEAgLTExNSw3ICsx
MjksMTAgQEAgdm9pZCBQcm9ncmVzc1RyYWNrZXI6OnByb2dyZXNzU3RhcnRlZChGcgogICAgICAg
ICByZXNldCgpOwogICAgICAgICBtX3Byb2dyZXNzVmFsdWUgPSBpbml0aWFsUHJvZ3Jlc3NWYWx1
ZTsKICAgICAgICAgbV9vcmlnaW5hdGluZ1Byb2dyZXNzRnJhbWUgPSBmcmFtZTsKLSAgICAKKwor
ICAgICAgICBtX3Byb2dyZXNzSGVhcnRiZWF0VGltZXIuc3RhcnRSZXBlYXRpbmcocHJvZ3Jlc3NI
ZWFydGJlYXRJbnRlcnZhbCk7CisgICAgICAgIG1fb3JpZ2luYXRpbmdQcm9ncmVzc0ZyYW1lLT5s
b2FkZXIoKS0+bG9hZFByb2dyZXNzaW5nU3RhdHVzQ2hhbmdlZCgpOworCiAgICAgICAgIG1fb3Jp
Z2luYXRpbmdQcm9ncmVzc0ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPnBvc3RQcm9ncmVzc1N0
YXJ0ZWROb3RpZmljYXRpb24oKTsKICAgICB9CiAgICAgbV9udW1Qcm9ncmVzc1RyYWNrZWRGcmFt
ZXMrKzsKQEAgLTE1Nyw2ICsxNzQsOCBAQCB2b2lkIFByb2dyZXNzVHJhY2tlcjo6ZmluYWxQcm9n
cmVzc0NvbXBsCiAKICAgICBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5zZXRNYWluRnJhbWVE
b2N1bWVudFJlYWR5KHRydWUpOwogICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPnBvc3RQ
cm9ncmVzc0ZpbmlzaGVkTm90aWZpY2F0aW9uKCk7CisgICAgZnJhbWUtPmxvYWRlcigpLT5sb2Fk
UHJvZ3Jlc3NpbmdTdGF0dXNDaGFuZ2VkKCk7CisKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmZyYW1lU3RvcHBlZExvYWRpbmcoZnJhbWUuZ2V0KCkpOwogfQogCkBAIC0yNjQsNSArMjgz
LDI0IEBAIHVuc2lnbmVkIGxvbmcgUHJvZ3Jlc3NUcmFja2VyOjpjcmVhdGVVbmkKICAgICByZXR1
cm4gKytzX3VuaXF1ZUlkZW50aWZpZXI7CiB9CiAKK2Jvb2wgUHJvZ3Jlc3NUcmFja2VyOjppc0xv
YWRQcm9ncmVzc2luZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJvZ3Jlc3NWYWx1ZSAmJiBt
X3Byb2dyZXNzVmFsdWUgPCBmaW5hbFByb2dyZXNzVmFsdWUgJiYgbV9oZWFydGJlYXRzV2l0aE5v
UHJvZ3Jlc3MgPD0gbWF4aW11bUhlYXJ0YmVhdHNXaXRoTm9Qcm9ncmVzczsKK30KKwordm9pZCBQ
cm9ncmVzc1RyYWNrZXI6OnByb2dyZXNzSGVhcnRiZWF0VGltZXJGaXJlZChUaW1lcjxQcm9ncmVz
c1RyYWNrZXI+KikKK3sKKyAgICBpZiAobV90b3RhbEJ5dGVzUmVjZWl2ZWQgPCBtX3RvdGFsQnl0
ZXNSZWNlaXZlZEJlZm9yZVByZXZpb3VzSGVhcnRiZWF0ICsgbWludW11bUJ5dGVzUGVySGVhcnRi
ZWF0Rm9yUHJvZ3Jlc3MpCisgICAgICAgICsrbV9oZWFydGJlYXRzV2l0aE5vUHJvZ3Jlc3M7Cisg
ICAgZWxzZQorICAgICAgICBtX2hlYXJ0YmVhdHNXaXRoTm9Qcm9ncmVzcyA9IDA7CisKKyAgICBt
X3RvdGFsQnl0ZXNSZWNlaXZlZEJlZm9yZVByZXZpb3VzSGVhcnRiZWF0ID0gbV90b3RhbEJ5dGVz
UmVjZWl2ZWQ7CisKKyAgICBtX29yaWdpbmF0aW5nUHJvZ3Jlc3NGcmFtZS0+bG9hZGVyKCktPmxv
YWRQcm9ncmVzc2luZ1N0YXR1c0NoYW5nZWQoKTsKKworICAgIGlmIChtX3Byb2dyZXNzVmFsdWUg
Pj0gZmluYWxQcm9ncmVzc1ZhbHVlKQorICAgICAgICBtX3Byb2dyZXNzSGVhcnRiZWF0VGltZXIu
c3RvcCgpOworfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJvZ3Jlc3NUcmFj
a2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Byb2dyZXNzVHJhY2tl
ci5oCShyZXZpc2lvbiAxNDc2MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJvZ3Jlc3NU
cmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgUHJvZ3Jl
c3NUcmFja2VyX2gKICNkZWZpbmUgUHJvZ3Jlc3NUcmFja2VyX2gKIAorI2luY2x1ZGUgIlRpbWVy
LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNTgsMTEgKzU5LDE1IEBAIHB1YmxpYzoK
ICAgICBsb25nIGxvbmcgdG90YWxQYWdlQW5kUmVzb3VyY2VCeXRlc1RvTG9hZCgpIGNvbnN0IHsg
cmV0dXJuIG1fdG90YWxQYWdlQW5kUmVzb3VyY2VCeXRlc1RvTG9hZDsgfQogICAgIGxvbmcgbG9u
ZyB0b3RhbEJ5dGVzUmVjZWl2ZWQoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsQnl0ZXNSZWNlaXZl
ZDsgfQogCisgICAgYm9vbCBpc0xvYWRQcm9ncmVzc2luZygpIGNvbnN0OworCiBwcml2YXRlOgog
ICAgIFByb2dyZXNzVHJhY2tlcigpOwogCiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgZmlu
YWxQcm9ncmVzc0NvbXBsZXRlKCk7CisKKyAgICB2b2lkIHByb2dyZXNzSGVhcnRiZWF0VGltZXJG
aXJlZChUaW1lcjxQcm9ncmVzc1RyYWNrZXI+Kik7CiAgICAgCiAgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgc191bmlxdWVJZGVudGlmaWVyOwogICAgIApAQCAtNzgsNiArODMsMTAgQEAgcHJpdmF0
ZToKICAgICAKICAgICBpbnQgbV9udW1Qcm9ncmVzc1RyYWNrZWRGcmFtZXM7CiAgICAgSGFzaE1h
cDx1bnNpZ25lZCBsb25nLCBPd25QdHI8UHJvZ3Jlc3NJdGVtPiA+IG1fcHJvZ3Jlc3NJdGVtczsK
KworICAgIFRpbWVyPFByb2dyZXNzVHJhY2tlcj4gbV9wcm9ncmVzc0hlYXJ0YmVhdFRpbWVyOwor
ICAgIHVuc2lnbmVkIG1faGVhcnRiZWF0c1dpdGhOb1Byb2dyZXNzOworICAgIGxvbmcgbG9uZyBt
X3RvdGFsQnl0ZXNSZWNlaXZlZEJlZm9yZVByZXZpb3VzSGVhcnRiZWF0OwogfTsKICAgICAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDE0NzYyMikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI4Myw2
ICsyMjgzLDEwIEBAIHZvaWQgRnJhbWVWaWV3OjpyZXNldERlZmVycmVkUmVwYWludERlbGEKICAg
ICAgICAgaWYgKCFtX2RlZmVycmluZ1JlcGFpbnRzKQogICAgICAgICAgICAgZG9EZWZlcnJlZFJl
cGFpbnRzKCk7CiAgICAgfQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBp
ZiAoUmVuZGVyVmlldyogdmlldyA9IHJlbmRlclZpZXcoKSkKKyAgICAgICAgdmlldy0+Y29tcG9z
aXRvcigpLT5kaXNhYmxlTGF5ZXJGbHVzaFRocm90dGxpbmdUZW1wb3JhcmlseUZvckludGVyYWN0
aW9uKCk7CisjZW5kaWYKIH0KIAogZG91YmxlIEZyYW1lVmlldzo6YWRqdXN0ZWREZWZlcnJlZFJl
cGFpbnREZWxheSgpIGNvbnN0CkBAIC0yMzEwLDYgKzIzMTQsMTYgQEAgdm9pZCBGcmFtZVZpZXc6
OmVuZERpc2FibGVSZXBhaW50cygpCiAgICAgbV9kaXNhYmxlUmVwYWludHMtLTsKIH0KIAordm9p
ZCBGcmFtZVZpZXc6OnVwZGF0ZUxheWVyRmx1c2hUaHJvdHRsaW5nKGJvb2wgaXNMb2FkUHJvZ3Jl
c3NpbmcpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChSZW5k
ZXJWaWV3KiB2aWV3ID0gcmVuZGVyVmlldygpKQorICAgICAgICB2aWV3LT5jb21wb3NpdG9yKCkt
PnNldExheWVyRmx1c2hUaHJvdHRsaW5nRW5hYmxlZChpc0xvYWRQcm9ncmVzc2luZyk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShpc0xvYWRQcm9ncmVzc2luZyk7CisjZW5kaWYKK30KKwogdm9p
ZCBGcmFtZVZpZXc6OmxheW91dFRpbWVyRmlyZWQoVGltZXI8RnJhbWVWaWV3PiopCiB7CiAjaWZk
ZWYgSU5TVFJVTUVOVF9MQVlPVVRfU0NIRURVTElORwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCShyZXZpc2lvbiAxNDc2MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNiArMjM2LDggQEAgcHVibGljOgogICAgIHZvaWQgc3Rh
cnREZWZlcnJlZFJlcGFpbnRUaW1lcihkb3VibGUgZGVsYXkpOwogICAgIHZvaWQgcmVzZXREZWZl
cnJlZFJlcGFpbnREZWxheSgpOwogCisgICAgdm9pZCB1cGRhdGVMYXllckZsdXNoVGhyb3R0bGlu
Zyhib29sIGlzTG9hZFByb2dyZXNzaW5nKTsKKwogICAgIHZvaWQgYmVnaW5EaXNhYmxlUmVwYWlu
dHMoKTsKICAgICB2b2lkIGVuZERpc2FibGVSZXBhaW50cygpOwogICAgIGJvb2wgcmVwYWludHNE
aXNhYmxlZCgpIHsgcmV0dXJuIG1fZGlzYWJsZVJlcGFpbnRzID4gMDsgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAkocmV2aXNp
b24gMTQ3NjIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzcsNiArNDM3LDggQEAgcHVibGljOgogCiAgICAg
dm9pZCB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKIAorICAgIHZpcnR1YWwgYm9vbCBjYW5UaHJv
dHRsZUxheWVyRmx1c2goKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgdmlydHVhbCB2
b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAogcHJvdGVj
dGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiAxNDc2MjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTEwLDkgKzExMTAsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGxhdGZvcm1D
QUxheWVyRGlkCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkaXJ0eVJlY3RzLnNpemUoKTsg
KytpKQogICAgICAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QoZGlydHlSZWN0c1tpXSk7CiAKLSAg
ICAvLyBFbnN1cmUgdGhhdCB0aGUgbGF5b3V0IGlzIHVwIHRvIGRhdGUgYmVmb3JlIGFueSBpbmRp
dmlkdWFsIHRpbGVzIGFyZSBwYWludGVkIGJ5IHRlbGxpbmcgdGhlIGNsaWVudAotICAgIC8vIHRo
YXQgaXQgbmVlZHMgdG8gZmx1c2ggaXRzIGxheWVyIHN0YXRlLCB3aGljaCB3aWxsIGVuZCB1cCBz
Y2hlZHVsaW5nIHRoZSBsYXllciBmbHVzaGVyLgotICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJl
cXVpcmVkKHRoaXMpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChUaWxlc0FkZGVkKTsK
IH0KIAogZmxvYXQgR3JhcGhpY3NMYXllckNBOjpwbGF0Zm9ybUNBTGF5ZXJEZXZpY2VTY2FsZUZh
Y3RvcigpCkBAIC0zMDYwLDEyICszMDU4LDIxIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpub3Rl
U3VibGF5ZXJzQ2hhbmcKICAgICBwcm9wYWdhdGVMYXllckNoYW5nZVRvUmVwbGljYXMoKTsKIH0K
IAorYm9vbCBHcmFwaGljc0xheWVyQ0E6OmNhblRocm90dGxlTGF5ZXJGbHVzaCgpIGNvbnN0Cit7
CisgICAgLy8gVGlsZSBsYXllcnMgYXJlIGN1cnJlbnRseSBwbGFpbiBDQSBsYXllcnMsIGF0dGFj
aGVkIGRpcmVjdGx5IGJ5IFRpbGVDb250cm9sbGVyLiBUaGV5IHJlcXVpcmUgaW1tZWRpYXRlIGZs
dXNoIGFzIHRoZXkgbWF5IGNvbnRhaW4gZ2FyYmFnZS4KKyAgICByZXR1cm4gIShtX3VuY29tbWl0
dGVkQ2hhbmdlcyAmIFRpbGVzQWRkZWQpOworfQorCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6bm90
ZUxheWVyUHJvcGVydHlDaGFuZ2VkKExheWVyQ2hhbmdlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgaWYg
KCFtX3VuY29tbWl0dGVkQ2hhbmdlcyAmJiBtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPm5v
dGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7CisgICAgYm9vbCBoYWRVbmNvbW1pdHRlZENoYW5nZWQg
PSAhIW1fdW5jb21taXR0ZWRDaGFuZ2VzOworICAgIGJvb2wgY291bGRUaHJvdHRsZUxheWVyRmx1
c2ggPSBjYW5UaHJvdHRsZUxheWVyRmx1c2goKTsKIAogICAgIG1fdW5jb21taXR0ZWRDaGFuZ2Vz
IHw9IGZsYWdzOworCisgICAgaWYgKCghaGFkVW5jb21taXR0ZWRDaGFuZ2VkIHx8IGNvdWxkVGhy
b3R0bGVMYXllckZsdXNoICE9IGNhblRocm90dGxlTGF5ZXJGbHVzaCgpKSAmJiBtX2NsaWVudCkK
KyAgICAgICAgbV9jbGllbnQtPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7CiB9CiAKIGRvdWJs
ZSBHcmFwaGljc0xheWVyQ0E6OmJhY2tpbmdTdG9yZU1lbW9yeUVzdGltYXRlKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5oCShyZXZpc2lvbiAxNDc2MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDYg
KzI1NCw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIHJlY3Vyc2l2ZVZpc2libGVSZWN0Q2hhbmdl
UmVxdWlyZXNGbHVzaChjb25zdCBUcmFuc2Zvcm1TdGF0ZSYpIGNvbnN0OwogCisgICAgdmlydHVh
bCBib29sIGNhblRocm90dGxlTGF5ZXJGbHVzaCgpIGNvbnN0OworCiAgICAgLy8gVXNlZCB0byB0
cmFjayB0aGUgcGF0aCBkb3duIHRoZSB0cmVlIGZvciByZXBsaWNhIGxheWVycy4KICAgICBzdHJ1
Y3QgUmVwbGljYVN0YXRlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhSZXBsaWNh
RGVwdGggPSAxNjsKQEAgLTM5Nyw3ICszOTksOCBAQCBwcml2YXRlOgogICAgICAgICBDb250ZW50
c1Zpc2liaWxpdHlDaGFuZ2VkID0gMSA8PCAyNSwKICAgICAgICAgVmlzaWJsZVJlY3RDaGFuZ2Vk
ID0gMSA8PCAyNiwKICAgICAgICAgRmlsdGVyc0NoYW5nZWQgPSAxIDw8IDI3LAotICAgICAgICBE
ZWJ1Z0luZGljYXRvcnNDaGFuZ2VkID0gMSA8PCAyOAorICAgICAgICBUaWxlc0FkZGVkID0gMSA8
IDI4LAorICAgICAgICBEZWJ1Z0luZGljYXRvcnNDaGFuZ2VkID0gMSA8PCAyOQogICAgIH07CiAg
ICAgdHlwZWRlZiB1bnNpZ25lZCBMYXllckNoYW5nZUZsYWdzOwogICAgIHZvaWQgbm90ZUxheWVy
UHJvcGVydHlDaGFuZ2VkKExheWVyQ2hhbmdlRmxhZ3MgZmxhZ3MpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDE0
NzYyMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTU0LDEwICsyMTU0LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjpub3RpZnlBbmltYXRpb24KICAgICByZW5kZXJlcigpLT5hbmltYXRpb24oKS0+bm90
aWZ5QW5pbWF0aW9uU3RhcnRlZChyZW5kZXJlcigpLCB0aW1lKTsKIH0KIAotdm9pZCBSZW5kZXJM
YXllckJhY2tpbmc6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopCit2
b2lkIFJlbmRlckxheWVyQmFja2luZzo6bm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFwaGlj
c0xheWVyKiBsYXllcikKIHsKLSAgICBpZiAoIXJlbmRlcmVyKCktPmRvY3VtZW50QmVpbmdEZXN0
cm95ZWQoKSkKLSAgICAgICAgY29tcG9zaXRvcigpLT5zY2hlZHVsZUxheWVyRmx1c2goKTsKKyAg
ICBpZiAocmVuZGVyZXIoKS0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKQorICAgICAgICByZXR1
cm47CisgICAgY29tcG9zaXRvcigpLT5zY2hlZHVsZUxheWVyRmx1c2gobGF5ZXItPmNhblRocm90
dGxlTGF5ZXJGbHVzaCgpKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6Om5vdGlmeUZs
dXNoQmVmb3JlRGlzcGxheVJlZnJlc2goY29uc3QgR3JhcGhpY3NMYXllciogbGF5ZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcAkocmV2aXNpb24gMTQ3NjIyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDEwICs4NCwxMiBAQCBi
b29sIFdlYkNvcmVIYXMzRFJlbmRlcmluZyA9IHRydWU7CiAjZGVmaW5lIFdURl9VU0VfQ09NUE9T
SVRJTkdfRk9SX1NNQUxMX0NBTlZBU0VTIDEKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgaW50IGNh
bnZhc0FyZWFUaHJlc2hvbGRSZXF1aXJpbmdDb21wb3NpdGluZyA9IDUwICogMTAwOwotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25zdCBpbnQgY2FudmFzQXJlYVRocmVzaG9sZFJl
cXVpcmluZ0NvbXBvc2l0aW5nID0gNTAgKiAxMDA7CisvLyBEdXJpbmcgcGFnZSBsb2FkaW5nIGRl
bGF5IGxheWVyIGZsdXNoZXMgdXAgdG8gdGhpcyBtYW55IHNlY29uZHMgdG8gYWxsb3cgdGhlbSBj
b2FsZXNjZSwgcmVkdWNpbmcgd29ya2xvYWQuCitzdGF0aWMgY29uc3QgZG91YmxlIHRocm90dGxl
ZExheWVyRmx1c2hEZWxheSA9IC41OworCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBj
bGFzcyBSZW5kZXJMYXllckNvbXBvc2l0b3I6Ok92ZXJsYXBNYXAgewpAQCAtMjExLDYgKzIxMywx
MCBAQCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OlJlbmRlckxheWVyQ29tcG9zCiAgICAgLCBtX2lz
VHJhY2tpbmdSZXBhaW50cyhmYWxzZSkKICAgICAsIG1fbGF5ZXJzV2l0aFRpbGVkQmFja2luZ0Nv
dW50KDApCiAgICAgLCBtX3Jvb3RMYXllckF0dGFjaG1lbnQoUm9vdExheWVyVW5hdHRhY2hlZCkK
KyAgICAsIG1fbGF5ZXJGbHVzaFRocm90dGxpbmdUaW1lcih0aGlzLCAmUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpsYXllckZsdXNoVGhyb3R0bGluZ1RpbWVyRmlyZWQpCisgICAgLCBtX2xheWVyRmx1
c2hUaHJvdHRsaW5nRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fbGF5ZXJGbHVzaFRocm90dGxpbmdU
ZW1wb3JhcmlseURpc2FibGVkRm9ySW50ZXJhY3Rpb24oZmFsc2UpCisgICAgLCBtX2hhc1BlbmRp
bmdMYXllckZsdXNoKGZhbHNlKQogI2lmICFMT0dfRElTQUJMRUQKICAgICAsIG1fcm9vdExheWVy
VXBkYXRlQ291bnQoMCkKICAgICAsIG1fb2JsaWdhdGVDb21wb3NpdGVkTGF5ZXJDb3VudCgwKQpA
QCAtMzE3LDEyICszMjMsMjcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmN1c3RvbVBv
c2l0aQogICAgIHBvc2l0aW9uID0gLXNjcm9sbFBvc2l0aW9uOwogfQogCi12b2lkIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6c2NoZWR1bGVMYXllckZsdXNoKCkKK3ZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGxheWVyKQor
eworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaChsYXllci0+Y2FuVGhyb3R0bGVMYXllckZsdXNoKCkp
OworfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2NoZWR1bGVMYXllckZsdXNoTm93
KCkKIHsKKyAgICBtX2hhc1BlbmRpbmdMYXllckZsdXNoID0gZmFsc2U7CiAgICAgaWYgKFBhZ2Uq
IHBhZ2UgPSB0aGlzLT5wYWdlKCkpCiAgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+
c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKIH0KIAordm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaChib29sIGNhblRocm90dGxlKQoreworICAgIGlm
IChjYW5UaHJvdHRsZSAmJiBpc1Rocm90dGxpbmdMYXllckZsdXNoZXMoKSkgeworICAgICAgICBt
X2hhc1BlbmRpbmdMYXllckZsdXNoID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBzY2hlZHVsZUxheWVyRmx1c2hOb3coKTsKK30KKwogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyhib29sIGlzRmx1c2hSb290KQogewogICAgIC8v
IEZyYW1lVmlldzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCkgZmx1
c2hlcyBlYWNoIHN1YmZyYW1lLApAQCAtMzYxLDYgKzM4Miw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpmbHVzaFBlbmRpbmcKICAgICAgICAgCiAgICAgICAgIG1fdmlld3BvcnRDb25z
dHJhaW5lZExheWVyc05lZWRpbmdVcGRhdGUuY2xlYXIoKTsKICAgICB9CisgICAgc3RhcnRMYXll
ckZsdXNoVGhyb3R0bGluZ1RpbWVySWZOZWVkZWQoKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmRpZEZsdXNoQ2hhbmdlc0ZvckxheWVyKFJlbmRlckxheWVyKiBsYXllciwgY29u
c3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKQEAgLTM4NCw4ICs0MDYsOSBAQCB2b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkQ2hhbmdlVmlzCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBtX2NsaXBMYXllciA/IEludFJlY3QoSW50UG9pbnQo
KSwgZnJhbWVWaWV3LT5jb250ZW50c1NpemUoKSkgOiBmcmFtZVZpZXctPnZpc2libGVDb250ZW50
UmVjdCgpOwotICAgIGlmIChyb290TGF5ZXItPnZpc2libGVSZWN0Q2hhbmdlUmVxdWlyZXNGbHVz
aCh2aXNpYmxlUmVjdCkpCi0gICAgICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIGlmICgh
cm9vdExheWVyLT52aXNpYmxlUmVjdENoYW5nZVJlcXVpcmVzRmx1c2godmlzaWJsZVJlY3QpKQor
ICAgICAgICByZXR1cm47CisgICAgc2NoZWR1bGVMYXllckZsdXNoTm93KCk7CiB9CiAKIHZvaWQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpub3RpZnlGbHVzaEJlZm9yZURpc3BsYXlSZWZyZXNoKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqKQpAQCAtMzEzNiw2ICszMTU5LDUxIEBAIFBhZ2UqIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6cGFnZSgpIGNvbnMKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnNldExheWVyRmx1c2hUaHJvdHRsaW5nRW5hYmxlZChib29sIGVu
YWJsZWQpCit7CisgICAgbV9sYXllckZsdXNoVGhyb3R0bGluZ0VuYWJsZWQgPSBlbmFibGVkOwor
ICAgIGlmIChtX2xheWVyRmx1c2hUaHJvdHRsaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fbGF5ZXJGbHVzaFRocm90dGxpbmdUaW1lci5zdG9wKCk7CisgICAgaWYgKCFtX2hhc1Bl
bmRpbmdMYXllckZsdXNoKQorICAgICAgICByZXR1cm47CisgICAgc2NoZWR1bGVMYXllckZsdXNo
Tm93KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaXNhYmxlTGF5ZXJGbHVz
aFRocm90dGxpbmdUZW1wb3JhcmlseUZvckludGVyYWN0aW9uKCkKK3sKKyAgICBpZiAobV9sYXll
ckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5RGlzYWJsZWRGb3JJbnRlcmFjdGlvbikKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fbGF5ZXJGbHVzaFRocm90dGxpbmdUZW1wb3JhcmlseURpc2FibGVk
Rm9ySW50ZXJhY3Rpb24gPSB0cnVlOworfQorCitib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
aXNUaHJvdHRsaW5nTGF5ZXJGbHVzaGVzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbGF5ZXJGbHVz
aFRocm90dGxpbmdFbmFibGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2xh
eWVyRmx1c2hUaHJvdHRsaW5nVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChtX2xheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlEaXNhYmxlZEZvcklu
dGVyYWN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzdGFydExheWVyRmx1c2hUaHJvdHRsaW5nVGlt
ZXJJZk5lZWRlZCgpCit7CisgICAgbV9sYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5RGlz
YWJsZWRGb3JJbnRlcmFjdGlvbiA9IGZhbHNlOworICAgIG1fbGF5ZXJGbHVzaFRocm90dGxpbmdU
aW1lci5zdG9wKCk7CisgICAgaWYgKCFtX2xheWVyRmx1c2hUaHJvdHRsaW5nRW5hYmxlZCkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fbGF5ZXJGbHVzaFRocm90dGxpbmdUaW1lci5zdGFydE9uZVNo
b3QodGhyb3R0bGVkTGF5ZXJGbHVzaERlbGF5KTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmxheWVyRmx1c2hUaHJvdHRsaW5nVGltZXJGaXJlZChUaW1lcjxSZW5kZXJMYXllckNv
bXBvc2l0b3I+KikKK3sKKyAgICBpZiAoIW1faGFzUGVuZGluZ0xheWVyRmx1c2gpCisgICAgICAg
IHJldHVybjsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2hOb3coKTsKK30KKwogdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9y
eU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2Jq
ZWN0SW5mbywgdGhpcywgUGxhdGZvcm1NZW1vcnlUeXBlczo6UmVuZGVyaW5nKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHJl
dmlzaW9uIDE0NzYyMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBAIHB1YmxpYzoKICAg
ICAKICAgICAvLyBHcmFwaGljc0xheWVycyBidWZmZXIgc3RhdGUsIHdoaWNoIGdldHMgcHVzaGVk
IHRvIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtIGxheWVycwogICAgIC8vIGF0IHNwZWNpZmljIHRp
bWVzLgotICAgIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgdm9pZCBzY2hlZHVsZUxh
eWVyRmx1c2goYm9vbCBjYW5UaHJvdHRsZSk7CiAgICAgdm9pZCBmbHVzaFBlbmRpbmdMYXllckNo
YW5nZXMoYm9vbCBpc0ZsdXNoUm9vdCA9IHRydWUpOwogICAgIAogICAgIC8vIGZsdXNoUGVuZGlu
Z0xheWVyQ2hhbmdlcygpIGZsdXNoZXMgdGhlIGVudGlyZSBHcmFwaGljc0xheWVyIHRyZWUsIHdo
aWNoIGNhbiBjcm9zcyBmcmFtZSBib3VuZGFyaWVzLgpAQCAtMjc3LDEzICsyNzcsMTYgQEAgcHVi
bGljOgogICAgIGJvb2wgaGFzTm9uTWFpbkxheWVyc1dpdGhUaWxlZEJhY2tpbmcoKSBjb25zdCB7
IHJldHVybiBtX2xheWVyc1dpdGhUaWxlZEJhY2tpbmdDb3VudDsgfQogCiAgICAgQ29tcG9zaXRp
bmdSZWFzb25zIHJlYXNvbnNGb3JDb21wb3NpdGluZyhjb25zdCBSZW5kZXJMYXllciopIGNvbnN0
OwotICAgIAorCisgICAgdm9pZCBzZXRMYXllckZsdXNoVGhyb3R0bGluZ0VuYWJsZWQoYm9vbCk7
CisgICAgdm9pZCBkaXNhYmxlTGF5ZXJGbHVzaFRocm90dGxpbmdUZW1wb3JhcmlseUZvckludGVy
YWN0aW9uKCk7CisKIHByaXZhdGU6CiAgICAgY2xhc3MgT3ZlcmxhcE1hcDsKIAogICAgIC8vIEdy
YXBoaWNzTGF5ZXJDbGllbnQgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5
QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlKSBPVkVSUklERSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFwaGljc0xh
eWVyKikgT1ZFUlJJREUgeyBzY2hlZHVsZUxheWVyRmx1c2goKTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhp
Y3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmKSBP
VkVSUklERTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1RyYWNraW5nUmVwYWludHMoKSBjb25zdCBP
VkVSUklERTsKQEAgLTM4MCw2ICszODMsMTEgQEAgcHJpdmF0ZToKICAgICBib29sIHJlcXVpcmVz
Q29udGVudFNoYWRvd0xheWVyKCkgY29uc3Q7CiAjZW5kaWYKIAorICAgIHZvaWQgc2NoZWR1bGVM
YXllckZsdXNoTm93KCk7CisgICAgYm9vbCBpc1Rocm90dGxpbmdMYXllckZsdXNoZXMoKSBjb25z
dDsKKyAgICB2b2lkIHN0YXJ0TGF5ZXJGbHVzaFRocm90dGxpbmdUaW1lcklmTmVlZGVkKCk7Cisg
ICAgdm9pZCBsYXllckZsdXNoVGhyb3R0bGluZ1RpbWVyRmlyZWQoVGltZXI8UmVuZGVyTGF5ZXJD
b21wb3NpdG9yPiopOworCiAjaWYgIUxPR19ESVNBQkxFRAogICAgIGNvbnN0IGNoYXIqIGxvZ1Jl
YXNvbnNGb3JDb21wb3NpdGluZyhjb25zdCBSZW5kZXJMYXllciopOwogICAgIHZvaWQgbG9nTGF5
ZXJJbmZvKGNvbnN0IFJlbmRlckxheWVyKiwgaW50IGRlcHRoKTsKQEAgLTQ0MSw2ICs0NDksMTEg
QEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxHcmFwaGljc0xheWVyVXBkYXRlcj4gbV9sYXllclVw
ZGF0ZXI7IC8vIFVwZGF0ZXMgdGlsZWQgbGF5ZXIgdmlzaWJsZSBhcmVhIHBlcmlvZGljYWxseSB3
aGlsZSBhbmltYXRpb25zIGFyZSBydW5uaW5nLgogCisgICAgVGltZXI8UmVuZGVyTGF5ZXJDb21w
b3NpdG9yPiBtX2xheWVyRmx1c2hUaHJvdHRsaW5nVGltZXI7CisgICAgYm9vbCBtX2xheWVyRmx1
c2hUaHJvdHRsaW5nRW5hYmxlZDsKKyAgICBib29sIG1fbGF5ZXJGbHVzaFRocm90dGxpbmdUZW1w
b3JhcmlseURpc2FibGVkRm9ySW50ZXJhY3Rpb247CisgICAgYm9vbCBtX2hhc1BlbmRpbmdMYXll
ckZsdXNoOworCiAjaWYgIUxPR19ESVNBQkxFRAogICAgIGludCBtX3Jvb3RMYXllclVwZGF0ZUNv
dW50OwogICAgIGludCBtX29ibGlnYXRlQ29tcG9zaXRlZExheWVyQ291bnQ7IC8vIGNvdW50IG9m
IGxheWVyIHRoYXQgaGF2ZSB0byBiZSBjb21wb3NpdGVkLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196674</attachid>
            <date>2013-04-05 13:38:45 -0700</date>
            <delta_ts>2013-04-05 13:42:57 -0700</delta_ts>
            <desc>with some light renaming</desc>
            <filename>layer-flush-throttling-4.patch</filename>
            <type>text/plain</type>
            <size>22205</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0Nzc0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBACisyMDEzLTA0LTA1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBUaHJvdHRsZSBjb21wb3NpdGlu
ZyBsYXllciBmbHVzaGVzIGR1cmluZyBwYWdlIGxvYWRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzc4NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUGFnZSBjb250ZW50IGNhbiBjaGFu
Z2UgcmFwaWRseSBkdXJpbmcgcGFnZSBsb2FkaW5nIHRyaWdnZXJpbmcgZXhjZXNzaXZlIGxheWVy
IGZsdXNoZXMgYW5kIHJlcGFpbnRpbmcuIFdlIHNob3VsZCBhdm9pZCB0aGlzIHVubmVjZXNzYXJ5
IHdvcmsuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIHJlZHVjZXMgbGF5ZXIgZmx1c2hl
cyAoYW5kIHBhaW50aW5nKSBkdXJpbmcgbG9hZGluZyBieSA1MC03MCUgb24gbWFueSBwb3B1bGFy
IHBhZ2VzLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkUHJvZ3Jlc3NpbmdTdGF0dXNDaGFuZ2VkKTogICAgICAg
IAorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRlci9Qcm9n
cmVzc1RyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvZ3Jlc3NUcmFja2VyOjpQcm9n
cmVzc1RyYWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6UHJvZ3Jlc3NUcmFja2VyOjpyZXNldCk6
CisgICAgICAgIChXZWJDb3JlOjpQcm9ncmVzc1RyYWNrZXI6OnByb2dyZXNzU3RhcnRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQcm9ncmVzc1RyYWNrZXI6OmZpbmFsUHJvZ3Jlc3NDb21wbGV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpQcm9ncmVzc1RyYWNrZXI6OmlzTG9hZFByb2dyZXNzaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlByb2dyZXNzVHJhY2tlcjo6cHJvZ3Jlc3NIZWFydGJlYXRUaW1l
ckZpcmVkKToKKyAgICAgICAgKiBsb2FkZXIvUHJvZ3Jlc3NUcmFja2VyLmg6CisgICAgICAgIAor
ICAgICAgICAgICAgVHJhY2sgaWYgdGhlIGRvY3VtZW50IGxvYWQgaXMgcHJvZ3Jlc3NpbmcuIFRo
aXMgaXMgZG9uZSB3aXRoIGEgaGVhcnRiZWF0IHRpbWVyIHRoYXQgY2hlY2tzIGV2ZXJ5IDEwMG1z
IGlmIHdlIGhhdmUgcmVjZWl2ZWQgbW9yZSB0aGFuIDFrIG9mIGRhdGEuCisgICAgICAgICAgICBJ
ZiBmb3VyIGhlYXJ0YmVhdHMgcGFzcyB3aXRob3V0IHByb2dyZXNzIHRoZW4gd2UgY29uc2lkZXIg
dGhlIGxvYWQgc3RhbGxlZC4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cmVzZXREZWZlcnJlZFJlcGFpbnREZWxheSk6CisgICAg
ICAgIAorICAgICAgICAgICAgRGlzYWJsZSB0aHJvdHRsaW5nIHRlbXBvcmFyeSBvbiB1c2VyIGlu
dGVyYWN0aW9uIHNvIHRoZSBwYWdlIHN0YXlzIGFzIHJlc3BvbnNpdmUgYXMgcG9zc2libGUgZXZl
biBkdXJpbmcgbG9hZGluZy4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVM
YXllckZsdXNoVGhyb3R0bGluZyk6CisgICAgICAgIAorICAgICAgICAgICAgRW5hYmxlIHRocm90
dGxpbmcgd2hlbiB0aGUgbG9hZCBpcyBwcm9ncmVzc2luZywgZGlzYWJsZSBvdGhlcndpc2UuCisK
KyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmNhblRo
cm90dGxlTGF5ZXJGbHVzaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhp
Y3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cGxhdGZv
cm1DQUxheWVyRGlkQ3JlYXRlVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjpjYW5UaHJvdHRsZUxheWVyRmx1c2gpOgorICAgICAgICAKKyAgICAgICAgICAgIERvbid0
IHRocm90dGxlIGlmIG5ldyB0aWxlcyBoYXZlIGJlZW4gYWRkZWQgYnkgdGhlIHRpbGUgY29udHJv
bGxlci4gVGhleSBtYXkgaGF2ZSBzdGFsZSBjb250ZW50IGFuZCBuZWVkIHRvIGJlIGZsdXNoZWQg
aW1tZWRpYXRlbHkuCisKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6bm90ZUxh
eWVyUHJvcGVydHlDaGFuZ2VkKToKKyAgICAgICAgCisgICAgICAgICAgICBTZXQgdGhlIG5ldyBU
aWxlc0FkZGVkIGNoYW5nZSBmbGFnLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
R3JhcGhpY3NMYXllckNBLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6Om5vdGlmeUZsdXNo
UmVxdWlyZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpSZW5kZXJMYXllckNv
bXBvc2l0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpub3Rp
ZnlGbHVzaFJlcXVpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRv
cjo6c2NoZWR1bGVMYXllckZsdXNoTm93KToKKyAgICAgICAgCisgICAgICAgICAgICBGYWN0b3Ig
dGhlIGFjdHVhbCBmbHVzaCBzY2hlZHVsaW5nIHRvIHByaXZhdGUgZnVuY3Rpb24uCisKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2NoZWR1bGVMYXllckZsdXNoKToK
KyAgICAgICAgCisgICAgICAgICAgICBNYXJrIHRoZSBjb21wb3NpdG9yIGZvciBmbHVzaCBhbmQg
cmV0dXJuIHdpdGhvdXQgZmx1c2hpbmcgaWYgdGhlIGZsdXNoZXMgYXJlIGN1cnJlbnRseSBiZWlu
ZyB0aHJvdHRsZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6
Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKToKKyAgICAgICAgCisgICAgICAgICAgICBBZnRlciBh
IGZsdXNoLCBzdGFydCB0aGUgdGhyb3R0aW5nIHRpbWVyIChjdXJyZW50bHkgMC41cykgY29hbGVz
Y2luZyB0aGUgc3Vic2VxdWVudCBmbHVzaGVzLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmRpZENoYW5nZVZpc2libGVSZWN0KToKKyAgICAgICAgCisgICAgICAg
ICAgICBEbyBpbW1lZGlhdGVseSBmbHVzaCBpZiBuZWVkZWQuCisKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0TGF5ZXJGbHVzaFRocm90dGxpbmdFbmFibGVkKToK
KyAgICAgICAgCisgICAgICAgICAgICBGbHVzaCBpbW1lZGlhdGVseSBpZiBkaXNhYmxlZC4KKwor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaXNhYmxlTGF5ZXJGbHVz
aFRocm90dGxpbmdUZW1wb3JhcmlseUZvckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6aXNUaHJvdHRsaW5nTGF5ZXJGbHVzaGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6c3RhcnRMYXllckZsdXNoVGltZXJJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVy
Rmx1c2hUaW1lckZpcmVkKToKKyAgICAgICAgCisgICAgICAgICAgICBGbHVzaCB3aGVuIHRoZSB0
aW1lciBmaXJlcyB0aW1lci4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuaDoKKwogMjAxMy0wNC0wNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBSZW1vdmUgQ2hyb21pdW0gY29kZSBmcm9tIFdlYkNvcmUvcGFnZQpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAxNDc2MjIpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzM3LDYgKzMzMzcsMTIgQEAgTmV0d29ya2luZ0NvbnRleHQqIEZyYW1lTG9hZGVyOjpuZXR3b3Jr
aQogICAgIHJldHVybiBtX25ldHdvcmtpbmdDb250ZXh0LmdldCgpOwogfQogCit2b2lkIEZyYW1l
TG9hZGVyOjpsb2FkUHJvZ3Jlc3NpbmdTdGF0dXNDaGFuZ2VkKCkKK3sKKyAgICBib29sIGlzTG9h
ZFByb2dyZXNzaW5nID0gbV9mcmFtZS0+cGFnZSgpLT5wcm9ncmVzcygpLT5pc0xvYWRQcm9ncmVz
c2luZygpOworICAgIG1fZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dXBkYXRl
TGF5ZXJGbHVzaFRocm90dGxpbmcoaXNMb2FkUHJvZ3Jlc3NpbmcpOworfQorCiB2b2lkIEZyYW1l
TG9hZGVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJ
bmZvKSBjb25zdAogewogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8s
IHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6TG9hZGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiAxNDc2MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjg2LDYgKzI4Niw4IEBAIHB1Ymxp
YzoKIAogICAgIE5ldHdvcmtpbmdDb250ZXh0KiBuZXR3b3JraW5nQ29udGV4dCgpIGNvbnN0Owog
CisgICAgdm9pZCBsb2FkUHJvZ3Jlc3NpbmdTdGF0dXNDaGFuZ2VkKCk7CisKICAgICBjb25zdCBL
VVJMJiBwcmV2aW91c1VSTCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJldmlvdXNVUkw7IH0KIAogICAg
IHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Byb2dyZXNzVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Byb2dyZXNzVHJhY2tlci5jcHAJKHJldmlzaW9uIDE0NzYy
MikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Qcm9ncmVzc1RyYWNrZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MSw2ICs1MSwxMyBAQCBzdGF0aWMgY29uc3QgZG91YmxlIGZpbmFsUHJvZ3Jl
c3NWYWx1ZSA9CiAKIHN0YXRpYyBjb25zdCBpbnQgcHJvZ3Jlc3NJdGVtRGVmYXVsdEVzdGltYXRl
ZExlbmd0aCA9IDEwMjQgKiAxNjsKIAorLy8gQ2hlY2sgaWYgdGhlIGxvYWQgaXMgcHJvZ3Jlc3Np
bmcgdGhpcyBvZnRlbi4KK3N0YXRpYyBjb25zdCBkb3VibGUgcHJvZ3Jlc3NIZWFydGJlYXRJbnRl
cnZhbCA9IDAuMTsKKy8vIEhvdyBtYW55IGhlYXJ0YmVhdHMgbXVzdCBwYXNzIHdpdGhvdXQgcHJv
Z3Jlc3MgYmVmb3JlIGRlY2lkaW5nIHRoZSBsb2FkIGlzIGN1cnJlbnRseSBzdGFsbGVkLgorc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGxvYWRTdGFsbGVkSGVhcnRiZWF0Q291bnQgPSA0OworLy8gSG93
IG1hbnkgYnl0ZXMgYXJlIHJlcXVpcmVkIGJldHdlZW4gaGVhcnRiZWF0cyB0byBjb25zaWRlciBp
dCBwcm9ncmVzcy4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW51bXVtQnl0ZXNQZXJIZWFydGJl
YXRGb3JQcm9ncmVzcyA9IDEwMjQ7CisKIHN0cnVjdCBQcm9ncmVzc0l0ZW0gewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFByb2dyZXNzSXRlbSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgpAQCAtNzQsNiArODEsOSBAQCBQcm9ncmVzc1RyYWNrZXI6OlByb2dyZXNzVHJhY2tl
cigpCiAgICAgLCBtX2ZpbmFsUHJvZ3Jlc3NDaGFuZ2VkU2VudChmYWxzZSkKICAgICAsIG1fcHJv
Z3Jlc3NWYWx1ZSgwKQogICAgICwgbV9udW1Qcm9ncmVzc1RyYWNrZWRGcmFtZXMoMCkKKyAgICAs
IG1fcHJvZ3Jlc3NIZWFydGJlYXRUaW1lcih0aGlzLCAmUHJvZ3Jlc3NUcmFja2VyOjpwcm9ncmVz
c0hlYXJ0YmVhdFRpbWVyRmlyZWQpCisgICAgLCBtX2hlYXJ0YmVhdHNXaXRoTm9Qcm9ncmVzcygw
KQorICAgICwgbV90b3RhbEJ5dGVzUmVjZWl2ZWRCZWZvcmVQcmV2aW91c0hlYXJ0YmVhdCgwKQog
ewogfQogCkBAIC0xMDMsNiArMTEzLDEwIEBAIHZvaWQgUHJvZ3Jlc3NUcmFja2VyOjpyZXNldCgp
CiAgICAgbV9maW5hbFByb2dyZXNzQ2hhbmdlZFNlbnQgPSBmYWxzZTsKICAgICBtX251bVByb2dy
ZXNzVHJhY2tlZEZyYW1lcyA9IDA7CiAgICAgbV9vcmlnaW5hdGluZ1Byb2dyZXNzRnJhbWUgPSAw
OworCisgICAgbV9oZWFydGJlYXRzV2l0aE5vUHJvZ3Jlc3MgPSAwOworICAgIG1fdG90YWxCeXRl
c1JlY2VpdmVkQmVmb3JlUHJldmlvdXNIZWFydGJlYXQgPSAwOworICAgIG1fcHJvZ3Jlc3NIZWFy
dGJlYXRUaW1lci5zdG9wKCk7CiB9CiAKIHZvaWQgUHJvZ3Jlc3NUcmFja2VyOjpwcm9ncmVzc1N0
YXJ0ZWQoRnJhbWUqIGZyYW1lKQpAQCAtMTE1LDcgKzEyOSwxMCBAQCB2b2lkIFByb2dyZXNzVHJh
Y2tlcjo6cHJvZ3Jlc3NTdGFydGVkKEZyCiAgICAgICAgIHJlc2V0KCk7CiAgICAgICAgIG1fcHJv
Z3Jlc3NWYWx1ZSA9IGluaXRpYWxQcm9ncmVzc1ZhbHVlOwogICAgICAgICBtX29yaWdpbmF0aW5n
UHJvZ3Jlc3NGcmFtZSA9IGZyYW1lOwotICAgIAorCisgICAgICAgIG1fcHJvZ3Jlc3NIZWFydGJl
YXRUaW1lci5zdGFydFJlcGVhdGluZyhwcm9ncmVzc0hlYXJ0YmVhdEludGVydmFsKTsKKyAgICAg
ICAgbV9vcmlnaW5hdGluZ1Byb2dyZXNzRnJhbWUtPmxvYWRlcigpLT5sb2FkUHJvZ3Jlc3NpbmdT
dGF0dXNDaGFuZ2VkKCk7CisKICAgICAgICAgbV9vcmlnaW5hdGluZ1Byb2dyZXNzRnJhbWUtPmxv
YWRlcigpLT5jbGllbnQoKS0+cG9zdFByb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbigpOwogICAg
IH0KICAgICBtX251bVByb2dyZXNzVHJhY2tlZEZyYW1lcysrOwpAQCAtMTU3LDYgKzE3NCw4IEBA
IHZvaWQgUHJvZ3Jlc3NUcmFja2VyOjpmaW5hbFByb2dyZXNzQ29tcGwKIAogICAgIGZyYW1lLT5s
b2FkZXIoKS0+Y2xpZW50KCktPnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkodHJ1ZSk7CiAgICAg
ZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+cG9zdFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRp
b24oKTsKKyAgICBmcmFtZS0+bG9hZGVyKCktPmxvYWRQcm9ncmVzc2luZ1N0YXR1c0NoYW5nZWQo
KTsKKwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVTdG9wcGVkTG9hZGluZyhm
cmFtZS5nZXQoKSk7CiB9CiAKQEAgLTI2NCw1ICsyODMsMjQgQEAgdW5zaWduZWQgbG9uZyBQcm9n
cmVzc1RyYWNrZXI6OmNyZWF0ZVVuaQogICAgIHJldHVybiArK3NfdW5pcXVlSWRlbnRpZmllcjsK
IH0KIAorYm9vbCBQcm9ncmVzc1RyYWNrZXI6OmlzTG9hZFByb2dyZXNzaW5nKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcm9ncmVzc1ZhbHVlICYmIG1fcHJvZ3Jlc3NWYWx1ZSA8IGZpbmFsUHJv
Z3Jlc3NWYWx1ZSAmJiBtX2hlYXJ0YmVhdHNXaXRoTm9Qcm9ncmVzcyA8IGxvYWRTdGFsbGVkSGVh
cnRiZWF0Q291bnQ7Cit9CisKK3ZvaWQgUHJvZ3Jlc3NUcmFja2VyOjpwcm9ncmVzc0hlYXJ0YmVh
dFRpbWVyRmlyZWQoVGltZXI8UHJvZ3Jlc3NUcmFja2VyPiopCit7CisgICAgaWYgKG1fdG90YWxC
eXRlc1JlY2VpdmVkIDwgbV90b3RhbEJ5dGVzUmVjZWl2ZWRCZWZvcmVQcmV2aW91c0hlYXJ0YmVh
dCArIG1pbnVtdW1CeXRlc1BlckhlYXJ0YmVhdEZvclByb2dyZXNzKQorICAgICAgICArK21faGVh
cnRiZWF0c1dpdGhOb1Byb2dyZXNzOworICAgIGVsc2UKKyAgICAgICAgbV9oZWFydGJlYXRzV2l0
aE5vUHJvZ3Jlc3MgPSAwOworCisgICAgbV90b3RhbEJ5dGVzUmVjZWl2ZWRCZWZvcmVQcmV2aW91
c0hlYXJ0YmVhdCA9IG1fdG90YWxCeXRlc1JlY2VpdmVkOworCisgICAgbV9vcmlnaW5hdGluZ1By
b2dyZXNzRnJhbWUtPmxvYWRlcigpLT5sb2FkUHJvZ3Jlc3NpbmdTdGF0dXNDaGFuZ2VkKCk7CisK
KyAgICBpZiAobV9wcm9ncmVzc1ZhbHVlID49IGZpbmFsUHJvZ3Jlc3NWYWx1ZSkKKyAgICAgICAg
bV9wcm9ncmVzc0hlYXJ0YmVhdFRpbWVyLnN0b3AoKTsKK30KIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Byb2dyZXNzVHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Qcm9ncmVzc1RyYWNrZXIuaAkocmV2aXNpb24gMTQ3NjIyKQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL1Byb2dyZXNzVHJhY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw3IEBACiAjaWZuZGVmIFByb2dyZXNzVHJhY2tlcl9oCiAjZGVmaW5lIFByb2dyZXNzVHJh
Y2tlcl9oCiAKKyNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAg
LTU4LDExICs1OSwxNSBAQCBwdWJsaWM6CiAgICAgbG9uZyBsb25nIHRvdGFsUGFnZUFuZFJlc291
cmNlQnl0ZXNUb0xvYWQoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsUGFnZUFuZFJlc291cmNlQnl0
ZXNUb0xvYWQ7IH0KICAgICBsb25nIGxvbmcgdG90YWxCeXRlc1JlY2VpdmVkKCkgY29uc3QgeyBy
ZXR1cm4gbV90b3RhbEJ5dGVzUmVjZWl2ZWQ7IH0KIAorICAgIGJvb2wgaXNMb2FkUHJvZ3Jlc3Np
bmcoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBQcm9ncmVzc1RyYWNrZXIoKTsKIAogICAgIHZv
aWQgcmVzZXQoKTsKICAgICB2b2lkIGZpbmFsUHJvZ3Jlc3NDb21wbGV0ZSgpOworCisgICAgdm9p
ZCBwcm9ncmVzc0hlYXJ0YmVhdFRpbWVyRmlyZWQoVGltZXI8UHJvZ3Jlc3NUcmFja2VyPiopOwog
ICAgIAogICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNfdW5pcXVlSWRlbnRpZmllcjsKICAgICAK
QEAgLTc4LDYgKzgzLDEwIEBAIHByaXZhdGU6CiAgICAgCiAgICAgaW50IG1fbnVtUHJvZ3Jlc3NU
cmFja2VkRnJhbWVzOwogICAgIEhhc2hNYXA8dW5zaWduZWQgbG9uZywgT3duUHRyPFByb2dyZXNz
SXRlbT4gPiBtX3Byb2dyZXNzSXRlbXM7CisKKyAgICBUaW1lcjxQcm9ncmVzc1RyYWNrZXI+IG1f
cHJvZ3Jlc3NIZWFydGJlYXRUaW1lcjsKKyAgICB1bnNpZ25lZCBtX2hlYXJ0YmVhdHNXaXRoTm9Q
cm9ncmVzczsKKyAgICBsb25nIGxvbmcgbV90b3RhbEJ5dGVzUmVjZWl2ZWRCZWZvcmVQcmV2aW91
c0hlYXJ0YmVhdDsKIH07CiAgICAgCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CShyZXZpc2lvbiAxNDc2MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyODMsNiArMjI4MywxMCBAQCB2b2lkIEZyYW1lVmlldzo6cmVz
ZXREZWZlcnJlZFJlcGFpbnREZWxhCiAgICAgICAgIGlmICghbV9kZWZlcnJpbmdSZXBhaW50cykK
ICAgICAgICAgICAgIGRvRGVmZXJyZWRSZXBhaW50cygpOwogICAgIH0KKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSByZW5kZXJWaWV3
KCkpCisgICAgICAgIHZpZXctPmNvbXBvc2l0b3IoKS0+ZGlzYWJsZUxheWVyRmx1c2hUaHJvdHRs
aW5nVGVtcG9yYXJpbHlGb3JJbnRlcmFjdGlvbigpOworI2VuZGlmCiB9CiAKIGRvdWJsZSBGcmFt
ZVZpZXc6OmFkanVzdGVkRGVmZXJyZWRSZXBhaW50RGVsYXkoKSBjb25zdApAQCAtMjMxMCw2ICsy
MzE0LDE2IEBAIHZvaWQgRnJhbWVWaWV3OjplbmREaXNhYmxlUmVwYWludHMoKQogICAgIG1fZGlz
YWJsZVJlcGFpbnRzLS07CiB9CiAKK3ZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVMYXllckZsdXNoVGhy
b3R0bGluZyhib29sIGlzTG9hZFByb2dyZXNzaW5nKQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHJlbmRlclZpZXcoKSkKKyAg
ICAgICAgdmlldy0+Y29tcG9zaXRvcigpLT5zZXRMYXllckZsdXNoVGhyb3R0bGluZ0VuYWJsZWQo
aXNMb2FkUHJvZ3Jlc3NpbmcpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaXNMb2FkUHJvZ3Jl
c3NpbmcpOworI2VuZGlmCit9CisKIHZvaWQgRnJhbWVWaWV3OjpsYXlvdXRUaW1lckZpcmVkKFRp
bWVyPEZyYW1lVmlldz4qKQogewogI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMTQ3NjIyKQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDYgKzIzNiw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0RGVmZXJyZWRSZXBhaW50VGltZXIoZG91YmxlIGRl
bGF5KTsKICAgICB2b2lkIHJlc2V0RGVmZXJyZWRSZXBhaW50RGVsYXkoKTsKIAorICAgIHZvaWQg
dXBkYXRlTGF5ZXJGbHVzaFRocm90dGxpbmcoYm9vbCBpc0xvYWRQcm9ncmVzc2luZyk7CisKICAg
ICB2b2lkIGJlZ2luRGlzYWJsZVJlcGFpbnRzKCk7CiAgICAgdm9pZCBlbmREaXNhYmxlUmVwYWlu
dHMoKTsKICAgICBib29sIHJlcGFpbnRzRGlzYWJsZWQoKSB7IHJldHVybiBtX2Rpc2FibGVSZXBh
aW50cyA+IDA7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyLmgJKHJldmlzaW9uIDE0NzYyMikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDM3LDYg
KzQzNyw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiAK
KyAgICB2aXJ0dWFsIGJvb2wgY2FuVGhyb3R0bGVMYXllckZsdXNoKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKwogICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmpl
Y3RJbmZvKikgY29uc3Q7CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAkocmV2aXNp
b24gMTQ3NjIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhp
Y3NMYXllckNBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExMCw5ICsxMTEwLDcgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllckRpZAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZGlydHlSZWN0cy5zaXplKCk7ICsraSkKICAgICAgICAgc2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGRpcnR5UmVjdHNbaV0pOwogCi0gICAgLy8gRW5zdXJlIHRoYXQgdGhlIGxheW91dCBpcyB1
cCB0byBkYXRlIGJlZm9yZSBhbnkgaW5kaXZpZHVhbCB0aWxlcyBhcmUgcGFpbnRlZCBieSB0ZWxs
aW5nIHRoZSBjbGllbnQKLSAgICAvLyB0aGF0IGl0IG5lZWRzIHRvIGZsdXNoIGl0cyBsYXllciBz
dGF0ZSwgd2hpY2ggd2lsbCBlbmQgdXAgc2NoZWR1bGluZyB0aGUgbGF5ZXIgZmx1c2hlci4KLSAg
ICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKKyAgICBub3RlTGF5ZXJQcm9w
ZXJ0eUNoYW5nZWQoVGlsZXNBZGRlZCk7CiB9CiAKIGZsb2F0IEdyYXBoaWNzTGF5ZXJDQTo6cGxh
dGZvcm1DQUxheWVyRGV2aWNlU2NhbGVGYWN0b3IoKQpAQCAtMzA2MCwxMiArMzA1OCwyMiBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJDQTo6bm90ZVN1YmxheWVyc0NoYW5nCiAgICAgcHJvcGFnYXRlTGF5
ZXJDaGFuZ2VUb1JlcGxpY2FzKCk7CiB9CiAKK2Jvb2wgR3JhcGhpY3NMYXllckNBOjpjYW5UaHJv
dHRsZUxheWVyRmx1c2goKSBjb25zdAoreworICAgIC8vIFRpbGUgbGF5ZXJzIGFyZSBjdXJyZW50
bHkgcGxhaW4gQ0EgbGF5ZXJzLCBhdHRhY2hlZCBkaXJlY3RseSBieSBUaWxlQ29udHJvbGxlci4g
VGhleSByZXF1aXJlIGltbWVkaWF0ZSBmbHVzaCBhcyB0aGV5IG1heSBjb250YWluIGdhcmJhZ2Uu
CisgICAgcmV0dXJuICEobV91bmNvbW1pdHRlZENoYW5nZXMgJiBUaWxlc0FkZGVkKTsKK30KKwog
dm9pZCBHcmFwaGljc0xheWVyQ0E6Om5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChMYXllckNoYW5n
ZUZsYWdzIGZsYWdzKQogewotICAgIGlmICghbV91bmNvbW1pdHRlZENoYW5nZXMgJiYgbV9jbGll
bnQpCi0gICAgICAgIG1fY2xpZW50LT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOworICAgIGJv
b2wgaGFkVW5jb21taXR0ZWRDaGFuZ2VzID0gISFtX3VuY29tbWl0dGVkQ2hhbmdlczsKKyAgICBi
b29sIG9sZENhblRocm90dGxlTGF5ZXJGbHVzaCA9IGNhblRocm90dGxlTGF5ZXJGbHVzaCgpOwog
CiAgICAgbV91bmNvbW1pdHRlZENoYW5nZXMgfD0gZmxhZ3M7CisKKyAgICBib29sIG5lZWRzRmx1
c2ggPSAhaGFkVW5jb21taXR0ZWRDaGFuZ2VzIHx8IG9sZENhblRocm90dGxlTGF5ZXJGbHVzaCAh
PSBjYW5UaHJvdHRsZUxheWVyRmx1c2goKTsKKyAgICBpZiAobmVlZHNGbHVzaCAmJiBtX2NsaWVu
dCkKKyAgICAgICAgbV9jbGllbnQtPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7CiB9CiAKIGRv
dWJsZSBHcmFwaGljc0xheWVyQ0E6OmJhY2tpbmdTdG9yZU1lbW9yeUVzdGltYXRlKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dy
YXBoaWNzTGF5ZXJDQS5oCShyZXZpc2lvbiAxNDc2MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaAkod29ya2luZyBjb3B5KQpAQCAtMjU0
LDYgKzI1NCw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIHJlY3Vyc2l2ZVZpc2libGVSZWN0Q2hh
bmdlUmVxdWlyZXNGbHVzaChjb25zdCBUcmFuc2Zvcm1TdGF0ZSYpIGNvbnN0OwogCisgICAgdmly
dHVhbCBib29sIGNhblRocm90dGxlTGF5ZXJGbHVzaCgpIGNvbnN0OworCiAgICAgLy8gVXNlZCB0
byB0cmFjayB0aGUgcGF0aCBkb3duIHRoZSB0cmVlIGZvciByZXBsaWNhIGxheWVycy4KICAgICBz
dHJ1Y3QgUmVwbGljYVN0YXRlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhSZXBs
aWNhRGVwdGggPSAxNjsKQEAgLTM5Nyw3ICszOTksOCBAQCBwcml2YXRlOgogICAgICAgICBDb250
ZW50c1Zpc2liaWxpdHlDaGFuZ2VkID0gMSA8PCAyNSwKICAgICAgICAgVmlzaWJsZVJlY3RDaGFu
Z2VkID0gMSA8PCAyNiwKICAgICAgICAgRmlsdGVyc0NoYW5nZWQgPSAxIDw8IDI3LAotICAgICAg
ICBEZWJ1Z0luZGljYXRvcnNDaGFuZ2VkID0gMSA8PCAyOAorICAgICAgICBUaWxlc0FkZGVkID0g
MSA8IDI4LAorICAgICAgICBEZWJ1Z0luZGljYXRvcnNDaGFuZ2VkID0gMSA8PCAyOQogICAgIH07
CiAgICAgdHlwZWRlZiB1bnNpZ25lZCBMYXllckNoYW5nZUZsYWdzOwogICAgIHZvaWQgbm90ZUxh
eWVyUHJvcGVydHlDaGFuZ2VkKExheWVyQ2hhbmdlRmxhZ3MgZmxhZ3MpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9u
IDE0NzYyMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTU0LDEwICsyMTU0LDExIEBAIHZvaWQgUmVuZGVyTGF5
ZXJCYWNraW5nOjpub3RpZnlBbmltYXRpb24KICAgICByZW5kZXJlcigpLT5hbmltYXRpb24oKS0+
bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChyZW5kZXJlcigpLCB0aW1lKTsKIH0KIAotdm9pZCBSZW5k
ZXJMYXllckJhY2tpbmc6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciop
Cit2b2lkIFJlbmRlckxheWVyQmFja2luZzo6bm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFw
aGljc0xheWVyKiBsYXllcikKIHsKLSAgICBpZiAoIXJlbmRlcmVyKCktPmRvY3VtZW50QmVpbmdE
ZXN0cm95ZWQoKSkKLSAgICAgICAgY29tcG9zaXRvcigpLT5zY2hlZHVsZUxheWVyRmx1c2goKTsK
KyAgICBpZiAocmVuZGVyZXIoKS0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgY29tcG9zaXRvcigpLT5zY2hlZHVsZUxheWVyRmx1c2gobGF5ZXItPmNhblRo
cm90dGxlTGF5ZXJGbHVzaCgpKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6Om5vdGlm
eUZsdXNoQmVmb3JlRGlzcGxheVJlZnJlc2goY29uc3QgR3JhcGhpY3NMYXllciogbGF5ZXIpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAkocmV2aXNpb24gMTQ3NjIyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDEwICs4NCwxMiBA
QCBib29sIFdlYkNvcmVIYXMzRFJlbmRlcmluZyA9IHRydWU7CiAjZGVmaW5lIFdURl9VU0VfQ09N
UE9TSVRJTkdfRk9SX1NNQUxMX0NBTlZBU0VTIDEKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgaW50
IGNhbnZhc0FyZWFUaHJlc2hvbGRSZXF1aXJpbmdDb21wb3NpdGluZyA9IDUwICogMTAwOwotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25zdCBpbnQgY2FudmFzQXJlYVRocmVzaG9s
ZFJlcXVpcmluZ0NvbXBvc2l0aW5nID0gNTAgKiAxMDA7CisvLyBEdXJpbmcgcGFnZSBsb2FkaW5n
IGRlbGF5IGxheWVyIGZsdXNoZXMgdXAgdG8gdGhpcyBtYW55IHNlY29uZHMgdG8gYWxsb3cgdGhl
bSBjb2FsZXNjZSwgcmVkdWNpbmcgd29ya2xvYWQuCitzdGF0aWMgY29uc3QgZG91YmxlIHRocm90
dGxlZExheWVyRmx1c2hEZWxheSA9IC41OworCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
CiBjbGFzcyBSZW5kZXJMYXllckNvbXBvc2l0b3I6Ok92ZXJsYXBNYXAgewpAQCAtMjExLDYgKzIx
MywxMCBAQCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OlJlbmRlckxheWVyQ29tcG9zCiAgICAgLCBt
X2lzVHJhY2tpbmdSZXBhaW50cyhmYWxzZSkKICAgICAsIG1fbGF5ZXJzV2l0aFRpbGVkQmFja2lu
Z0NvdW50KDApCiAgICAgLCBtX3Jvb3RMYXllckF0dGFjaG1lbnQoUm9vdExheWVyVW5hdHRhY2hl
ZCkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmxheWVyRmx1c2hUaW1lckZpcmVkKQorICAgICwgbV9sYXllckZsdXNoVGhyb3R0bGluZ0VuYWJs
ZWQoZmFsc2UpCisgICAgLCBtX2xheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlEaXNhYmxl
ZEZvckludGVyYWN0aW9uKGZhbHNlKQorICAgICwgbV9oYXNQZW5kaW5nTGF5ZXJGbHVzaChmYWxz
ZSkKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgLCBtX3Jvb3RMYXllclVwZGF0ZUNvdW50KDApCiAg
ICAgLCBtX29ibGlnYXRlQ29tcG9zaXRlZExheWVyQ291bnQoMCkKQEAgLTMxNywxMiArMzIzLDI3
IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjdXN0b21Qb3NpdGkKICAgICBwb3NpdGlv
biA9IC1zY3JvbGxQb3NpdGlvbjsKIH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNj
aGVkdWxlTGF5ZXJGbHVzaCgpCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bm90aWZ5Rmx1
c2hSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBzY2hlZHVsZUxh
eWVyRmx1c2gobGF5ZXItPmNhblRocm90dGxlTGF5ZXJGbHVzaCgpKTsKK30KKwordm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaE5vdygpCiB7CisgICAgbV9oYXNQ
ZW5kaW5nTGF5ZXJGbHVzaCA9IGZhbHNlOwogICAgIGlmIChQYWdlKiBwYWdlID0gdGhpcy0+cGFn
ZSgpKQogICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPnNjaGVkdWxlQ29tcG9zaXRp
bmdMYXllckZsdXNoKCk7CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY2hlZHVs
ZUxheWVyRmx1c2goYm9vbCBjYW5UaHJvdHRsZSkKK3sKKyAgICBpZiAoY2FuVGhyb3R0bGUgJiYg
aXNUaHJvdHRsaW5nTGF5ZXJGbHVzaGVzKCkpIHsKKyAgICAgICAgbV9oYXNQZW5kaW5nTGF5ZXJG
bHVzaCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2NoZWR1bGVMYXllckZs
dXNoTm93KCk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMoYm9vbCBpc0ZsdXNoUm9vdCkKIHsKICAgICAvLyBGcmFtZVZpZXc6OmZsdXNo
Q29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpIGZsdXNoZXMgZWFjaCBzdWJmcmFt
ZSwKQEAgLTM2MSw2ICszODIsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Zmx1c2hQ
ZW5kaW5nCiAgICAgICAgIAogICAgICAgICBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnNOZWVk
aW5nVXBkYXRlLmNsZWFyKCk7CiAgICAgfQorICAgIHN0YXJ0TGF5ZXJGbHVzaFRpbWVySWZOZWVk
ZWQoKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZEZsdXNoQ2hhbmdlc0Zv
ckxheWVyKFJlbmRlckxheWVyKiBsYXllciwgY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NM
YXllcikKQEAgLTM4NCw4ICs0MDYsOSBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlk
Q2hhbmdlVmlzCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBt
X2NsaXBMYXllciA/IEludFJlY3QoSW50UG9pbnQoKSwgZnJhbWVWaWV3LT5jb250ZW50c1NpemUo
KSkgOiBmcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwotICAgIGlmIChyb290TGF5ZXIt
PnZpc2libGVSZWN0Q2hhbmdlUmVxdWlyZXNGbHVzaCh2aXNpYmxlUmVjdCkpCi0gICAgICAgIHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIGlmICghcm9vdExheWVyLT52aXNpYmxlUmVjdENoYW5n
ZVJlcXVpcmVzRmx1c2godmlzaWJsZVJlY3QpKQorICAgICAgICByZXR1cm47CisgICAgc2NoZWR1
bGVMYXllckZsdXNoTm93KCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpub3Rp
ZnlGbHVzaEJlZm9yZURpc3BsYXlSZWZyZXNoKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKQpAQCAtMzEz
Niw2ICszMTU5LDUxIEBAIFBhZ2UqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFnZSgpIGNvbnMK
ICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldExheWVy
Rmx1c2hUaHJvdHRsaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9sYXllckZsdXNo
VGhyb3R0bGluZ0VuYWJsZWQgPSBlbmFibGVkOworICAgIGlmIChtX2xheWVyRmx1c2hUaHJvdHRs
aW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3Ao
KTsKKyAgICBpZiAoIW1faGFzUGVuZGluZ0xheWVyRmx1c2gpCisgICAgICAgIHJldHVybjsKKyAg
ICBzY2hlZHVsZUxheWVyRmx1c2hOb3coKTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmRpc2FibGVMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rpb24o
KQoreworICAgIGlmIChtX2xheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlEaXNhYmxlZEZv
ckludGVyYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgbV9sYXllckZsdXNoVGhyb3R0bGlu
Z1RlbXBvcmFyaWx5RGlzYWJsZWRGb3JJbnRlcmFjdGlvbiA9IHRydWU7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjppc1Rocm90dGxpbmdMYXllckZsdXNoZXMoKSBjb25zdAorewor
ICAgIGlmICghbV9sYXllckZsdXNoVGhyb3R0bGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAobV9sYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5RGlz
YWJsZWRGb3JJbnRlcmFjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c3RhcnRMYXllckZsdXNoVGlt
ZXJJZk5lZWRlZCgpCit7CisgICAgbV9sYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5RGlz
YWJsZWRGb3JJbnRlcmFjdGlvbiA9IGZhbHNlOworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3Ao
KTsKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRocm90dGxpbmdFbmFibGVkKQorICAgICAgICByZXR1
cm47CisgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90KHRocm90dGxlZExheWVyRmx1
c2hEZWxheSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllckZsdXNoVGlt
ZXJGaXJlZChUaW1lcjxSZW5kZXJMYXllckNvbXBvc2l0b3I+KikKK3sKKyAgICBpZiAoIW1faGFz
UGVuZGluZ0xheWVyRmx1c2gpCisgICAgICAgIHJldHVybjsKKyAgICBzY2hlZHVsZUxheWVyRmx1
c2hOb3coKTsKK30KKwogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcG9ydE1lbW9yeVVz
YWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVt
b3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgUGxhdGZvcm1NZW1vcnlU
eXBlczo6UmVuZGVyaW5nKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHJldmlzaW9uIDE0NzYyMikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTI2LDcgKzEyNiw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBHcmFwaGljc0xheWVycyBidWZm
ZXIgc3RhdGUsIHdoaWNoIGdldHMgcHVzaGVkIHRvIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtIGxh
eWVycwogICAgIC8vIGF0IHNwZWNpZmljIHRpbWVzLgotICAgIHZvaWQgc2NoZWR1bGVMYXllckZs
dXNoKCk7CisgICAgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goYm9vbCBjYW5UaHJvdHRsZSk7CiAg
ICAgdm9pZCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoYm9vbCBpc0ZsdXNoUm9vdCA9IHRydWUp
OwogICAgIAogICAgIC8vIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpIGZsdXNoZXMgdGhlIGVu
dGlyZSBHcmFwaGljc0xheWVyIHRyZWUsIHdoaWNoIGNhbiBjcm9zcyBmcmFtZSBib3VuZGFyaWVz
LgpAQCAtMjc3LDEzICsyNzcsMTYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzTm9uTWFpbkxheWVy
c1dpdGhUaWxlZEJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2xheWVyc1dpdGhUaWxlZEJhY2tp
bmdDb3VudDsgfQogCiAgICAgQ29tcG9zaXRpbmdSZWFzb25zIHJlYXNvbnNGb3JDb21wb3NpdGlu
Zyhjb25zdCBSZW5kZXJMYXllciopIGNvbnN0OwotICAgIAorCisgICAgdm9pZCBzZXRMYXllckZs
dXNoVGhyb3R0bGluZ0VuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBkaXNhYmxlTGF5ZXJGbHVzaFRo
cm90dGxpbmdUZW1wb3JhcmlseUZvckludGVyYWN0aW9uKCk7CisKIHByaXZhdGU6CiAgICAgY2xh
c3MgT3ZlcmxhcE1hcDsKIAogICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQgaW1wbGVtZW50YXRp
b24KICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGlj
c0xheWVyKiwgZG91YmxlKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1
c2hSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikgT1ZFUlJJREUgeyBzY2hlZHVsZUxheWVy
Rmx1c2goKTsgfQorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhj
b25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50
aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgYm9vbCBp
c1RyYWNraW5nUmVwYWludHMoKSBjb25zdCBPVkVSUklERTsKQEAgLTM4MCw2ICszODMsMTEgQEAg
cHJpdmF0ZToKICAgICBib29sIHJlcXVpcmVzQ29udGVudFNoYWRvd0xheWVyKCkgY29uc3Q7CiAj
ZW5kaWYKIAorICAgIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoTm93KCk7CisgICAgYm9vbCBpc1Ro
cm90dGxpbmdMYXllckZsdXNoZXMoKSBjb25zdDsKKyAgICB2b2lkIHN0YXJ0TGF5ZXJGbHVzaFRp
bWVySWZOZWVkZWQoKTsKKyAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKFRpbWVyPFJlbmRl
ckxheWVyQ29tcG9zaXRvcj4qKTsKKwogI2lmICFMT0dfRElTQUJMRUQKICAgICBjb25zdCBjaGFy
KiBsb2dSZWFzb25zRm9yQ29tcG9zaXRpbmcoY29uc3QgUmVuZGVyTGF5ZXIqKTsKICAgICB2b2lk
IGxvZ0xheWVySW5mbyhjb25zdCBSZW5kZXJMYXllciosIGludCBkZXB0aCk7CkBAIC00NDEsNiAr
NDQ5LDExIEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8R3JhcGhpY3NMYXllclVwZGF0ZXI+IG1f
bGF5ZXJVcGRhdGVyOyAvLyBVcGRhdGVzIHRpbGVkIGxheWVyIHZpc2libGUgYXJlYSBwZXJpb2Rp
Y2FsbHkgd2hpbGUgYW5pbWF0aW9ucyBhcmUgcnVubmluZy4KIAorICAgIFRpbWVyPFJlbmRlckxh
eWVyQ29tcG9zaXRvcj4gbV9sYXllckZsdXNoVGltZXI7CisgICAgYm9vbCBtX2xheWVyRmx1c2hU
aHJvdHRsaW5nRW5hYmxlZDsKKyAgICBib29sIG1fbGF5ZXJGbHVzaFRocm90dGxpbmdUZW1wb3Jh
cmlseURpc2FibGVkRm9ySW50ZXJhY3Rpb247CisgICAgYm9vbCBtX2hhc1BlbmRpbmdMYXllckZs
dXNoOworCiAjaWYgIUxPR19ESVNBQkxFRAogICAgIGludCBtX3Jvb3RMYXllclVwZGF0ZUNvdW50
OwogICAgIGludCBtX29ibGlnYXRlQ29tcG9zaXRlZExheWVyQ291bnQ7IC8vIGNvdW50IG9mIGxh
eWVyIHRoYXQgaGF2ZSB0byBiZSBjb21wb3NpdGVkLgo=
</data>
<flag name="review"
          id="218796"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>