<?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>81106</bug_id>
          
          <creation_ts>2012-03-14 07:48:55 -0700</creation_ts>
          <short_desc>[chromium] Infrastructure to allow animating layers to be only partially updated</short_desc>
          <delta_ts>2012-03-20 07:42:51 -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>WebKit Misc.</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>79536</blocked>
    
    <blocked>81437</blocked>
    
    <blocked>81484</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>vollick</reporter>
          <assigned_to>vollick</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>epenner</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>578378</commentid>
    <comment_count>0</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-03-14 07:48:55 -0700</bug_when>
    <thetext>We need up-to-date opacity and transform values to do proper culling on the main thread. Copying these values back from the impl thread introduces unacceptable latency. A better solution is to freshen these values on the main thread as necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578629</commentid>
    <comment_count>1</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-14 12:14:35 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; We need up-to-date opacity and transform values to do proper culling on the main thread. Copying these values back from the impl thread introduces unacceptable latency. A better solution is to freshen these values on the main thread as necessary.

Lets talk on VC when you get to doing this. I&apos;m not sure I follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578954</commentid>
    <comment_count>2</comment_count>
      <attachid>131961</attachid>
    <who name="">vollick</who>
    <bug_when>2012-03-14 17:05:43 -0700</bug_when>
    <thetext>Created attachment 131961
Patch

This will fix the issue mentioned in 80744 as well as providing more reliable values for main thread culling code.

Highlights:
 - CCLayerAnimationController and CCLayerAnimationControllerImpl have been merged (so that the controllers can be ticked on the main thread).
   - PLEASE NOTE:
     o CCLayerAnimationController::purgeFinishedAnimations(..) now creates animation finished events (which now hold the final, animated value).
     o CCLayerAnimationController::pushAnimationUpdatesTo(..) no longer pulls back any information from the impl thread. In particular, we no longer need to keep track of which animations finished on the impl thread. CCActiveAnimation::AnimationSignature was used only for this purpose and has been removed.
     o Although the animations are ticked on both threads, we only send animation events in response to things that happen on the impl thread. For that reason, passing in a vector of animation events to CCLayerAnimationController::animate is now optional (it takes a pointer that is null when called from the main thread).
 - CCLayerImpl and LayerChromium both implement CCLayerAnimationControllerClient
    - thing to note, CCLayerImpl&apos;s implementation allows animations to affect the live opacity and transform, but LayerChromium&apos;s modify animatedOpacity and animatedTransform so animations do _not_ affect a LayerChromium&apos;s opacity and transform (the real values are set when animations complete).
 - LayerChromium::setAnimationEvent now sets final values in response to animation finished events.
 - GraphicsLayerChromium does not need to remove animation names from its name-to-id map, and this functionality has been removed (from here and from CCLayerAnimationDelegate).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578960</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-14 17:09:49 -0700</bug_when>
    <thetext>It seems pretty dodgy to tick animations on the main thread the same way we do on the impl side.  On the main thread side, if we have an active animation we have to prepare a frame that is valid for some set of future frames of the animation (since we won&apos;t get a tick for each frame that we actually produce).  That&apos;s a pretty different problem from the one on the impl thread, where we can do work like calculate geometry + do culling after each and every tick.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579120</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-14 21:51:26 -0700</bug_when>
    <thetext>Let me expand a bit.  My goal here is to try to enable the animation system for CSS animations as soon as possible in chrome.  I think we&apos;re really close to that point and getting that last step would be awesome for everything.  I&apos;d like to get to a minimum viable state for enabling by default first and then refine from there.

Today, when we have a CSS animation/transition active we update everything on the main thread.  This means we get a chance to paint and do culling+viewport calculations for every intermediate frame in the animation and don&apos;t run the risk of culling something out that should be visible or clipping something that is inside the viewport (unless those systems have bugs independent of animations).  This is great for correctness but kind of sucks performance-wise since we&apos;re relying on the style system to update animations and we have to get sufficient time on the main thread on every frame of the animation or we hitch.

Once we start processing animations on the impl thread things get a little trickier - we can&apos;t necessarily tick on the main thread while the animation is active, but the impl thread will keep on going.  This means we might expose some part of a layer that culled or clipped out the last time we ran a commit.  If we don&apos;t have that content, we flash currently.  I don&apos;t think this is acceptable for our default behavior, so we have to do something about it before we can turn this on.  Keep in mind that lots of people are designing + testing pages with animations in Safari, which doesn&apos;t produce these sorts of flashes when content is exposed (since they just raster a whole bunch of stuff).  If it flashes in chromium and not in Safari people will (rightly) consider that a bug in chromium no matter how good the framerate is or how resource-slim we are.

With that in mind, there are a few ways to approach the problem.  One is to simply produce all the content that we might need on the main thread once we know there is an animation active so we can run the rest of the animation on the thread.  This would be perfect except that we can&apos;t always afford the resources to hold the textures or the time to raster as much content as we&apos;d like.  Another option is to raster a best guess on the main thread and then hitch on the impl thread if we hit content that we don&apos;t have instead of producing a frame lacking some content.  This is A-OK behavior wise, since it&apos;s no worse than what we have today (if the main thread blocks, you hitch) but we don&apos;t have logic for it AFAIK.

Longer term I think we want to make intelligent guesses on the main thread based on what content the animation will expose as it runs.  To do this we definitely need to have good knowledge about what the animation is going to do on the main thread before we raster.  However, I don&apos;t think that this should be a blocker for enabling the threaded animation path by default.  Safari isn&apos;t really doing much in this area so there&apos;s an existence proof that we can hit the use cases that people are designing for today and then refine from there.

Long story short I think being able to have more direct access to the animation curves from the main thread is a great thing to have long term but it&apos;s not going to let us turn this on.  In order to get to a minimum viable state I think we should:

1.) Not produce frames from the impl thread if we&apos;re lacking content due to an animation because we culled or clipped part of the layer the last time we were on the main thread.  Instead, stall drawing from the impl thread until we get a commit that has new data.
2.) Raster enough content on the main thread when we know that animations are active so we don&apos;t hit the hitch introduced by (1) too often.

(1) is a purely impl-side patch.  (2) can be done in many ways and it&apos;s fundamentally a problem of heuristics.  For opacity animations I think this is as simple as ignoring the opacity for layers that have active animations on opacity (don&apos;t skip it for having opacity==0, don&apos;t consider it opaque for culling).  For transforms it&apos;s harder.  Most layers are probably small enough that we can just raster the whole thing (and that&apos;s what Safari does up to some fairly large layer size) but it won&apos;t work in all cases.  Many of the cases are simply sliding layers around or rotating them in place, though.

Interpolating to a given place when doing the main thread raster can be helpful as part of (2) but it doesn&apos;t address (1) and IMO isn&apos;t going to be all we need.  I think we&apos;ll end up having to look at the state over time in order to make the best choices for rastering on the main thread.  Many transform animations can be bounded pretty easily - if the animation is just translating Y from 0 to 50 we can easily calculate the visible and cull areas for the entire animation.  Some animations are going to be crazy keyframe things with blending and be a real mess to figure out.  I think we&apos;ll be better of tackling this problem piece by piece.

Let me know if this jibes with your thinking, Nat.  As far as what blocks https://bugs.webkit.org/show_bug.cgi?id=79536, I think we definitely need a (1) for that bug and we can have other bugs improve on the situation but I don&apos;t think that we necessarily need to do anything in regards to (2) before we flip the switch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579133</commentid>
    <comment_count>5</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-14 22:20:32 -0700</bug_when>
    <thetext>I believe Dana has a patch that will simply stop paint culling an animating layer. Ian posted a patch for always-calcDrawEtc&apos;ing opaque layers. These two things are the real blockers for b79536.

I agree that this bug does not strictly block b79536. Lets get those first two done and in the bag.

We do need to start messing around with this, as I suspect we need something along these lines to get good performance. On Android w/ Gmail, Eric reported that we have a substantial hitch at animation start because we do a ton of uploads. There are two reasons:
1. The new layer gets put in its final location, so we paint it.
2. The layer moving out gets moved offscreen right away, so as I understand it, we promptly discard its textures even though its still onscreen.

I imagine Dana&apos;s patch might fix #2 but I assume #1 will still happen.

It may be we need more-agressive prepainting --- &quot;oh, this layer is offscreen but we&apos;ll paint it anyway becausue we have memory to burn.&quot; But, this needs the texture manager to come online fully, which is blocked on resolution of the front/backbuffer stuff. Which is not happening fast.

So, I think we need something on the main thread. This bug is probably poorly titled --- I&apos;ve updated it a bit. We can maybe put this behind a flag while we run the &quot;correct-enough&quot; implementation through a canary/android/etc.

Note, we need not just curves. We need blending/scheduling logic. Thats in the animation controller. The main thread probably cares less about the immediate value as much as &quot;the possible value range over the next 0.25 seconds&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580768</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-03-16 12:06:01 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; 1.) Not produce frames from the impl thread if we&apos;re lacking content due to an animation because we culled or clipped part of the layer the last time we were on the main thread.  Instead, stall drawing from the impl thread until we get a commit that has new data.

One note. This should probably &apos;not tick animations&apos; rather than &apos;not produce frames&apos; so that scrolling can still be unblocked.

(In reply to comment #5)
As a means of enabling in a limited fashion: Could we possibly determine if the animating layers are &apos;small enough&apos; and only enable animations that fit in memory?  I suppose even then we would want to cull them at some point (if the bounds of the entire their entire animation curve is offscreen)... 

Animations that can be completely pre-loaded will perform a lot better, especially if we delay the start time until all loading has completed. So it seems like a distinction between streaming and fully-pre-loaded would be good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581144</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-16 17:37:54 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; 1.) Not produce frames from the impl thread if we&apos;re lacking content due to an animation because we culled or clipped part of the layer the last time we were on the main thread.  Instead, stall drawing from the impl thread until we get a commit that has new data.
&gt; 
&gt; One note. This should probably &apos;not tick animations&apos; rather than &apos;not produce frames&apos; so that scrolling can still be unblocked.

If we&apos;re lacking content, we can&apos;t make any frames due to scrolling either or they will be lacking content.  So we can&apos;t produce any frames at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581177</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-03-16 18:14:42 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; 1.) Not produce frames from the impl thread if we&apos;re lacking content due to an animation because we culled or clipped part of the layer the last time we were on the main thread.  Instead, stall drawing from the impl thread until we get a commit that has new data.
&gt; &gt; 
&gt; &gt; One note. This should probably &apos;not tick animations&apos; rather than &apos;not produce frames&apos; so that scrolling can still be unblocked.
&gt; 
&gt; If we&apos;re lacking content, we can&apos;t make any frames due to scrolling either or they will be lacking content.  So we can&apos;t produce any frames at all.

I think there is a distinction between content missing due to scrolling vs content missing due to animations. Even right now, with animations running on the webkit thread, it is easy to get missing animating content due to scrolling (the same way that it is missing for other scrolled content).  So allowing scrolling won&apos;t be a change from the status quo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581347</commentid>
    <comment_count>9</comment_count>
      <attachid>132465</attachid>
    <who name="">vollick</who>
    <bug_when>2012-03-17 12:06:15 -0700</bug_when>
    <thetext>Created attachment 132465
Patch

(In reply to comment #4)
Freshened patch.

&gt; 1.) Not produce frames from the impl thread if we&apos;re lacking content due to an animation because we culled or clipped part of the layer the last time we were on the main thread.  Instead, stall drawing from the impl thread until we get a commit that has new data.
&gt; (1) is a purely impl-side patch.

As I understand it, (1) is saying that if we&apos;re about to draw invalid textures during an impl thread animation, we should stop and wait for a valid frame from the main thread. This assumes that the main thread can and will produce this frame, but I don&apos;t think it can right now. The style system will tell the main thread what the target value of an animation is, but will not continue to supply us with intermediate values. In order for the main thread to create this frame, it will need to know the current animated values. So I think that (1) involves three patches:

a) (81437) Don&apos;t draw invalid textures while animating (this will cause us to hitch until the end of the animation, currently).
b) (This patch) during a commit, get the current animated values.
c) (no bug yet) Use the animated values to paint, cull, and commit, if necessary.

I think this also means that this patch is a blocker for 79536.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581377</commentid>
    <comment_count>10</comment_count>
      <attachid>132465</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-17 14:38:31 -0700</bug_when>
    <thetext>Comment on attachment 132465
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:546
&gt; +void LayerChromium::setAnimatedOpacity(float animatedOpacity)

Spoke offline with Ian and leaving a comment here on what we thought.

It probably makes more sense to just update the &quot;real&quot; values with the animating values, and drop these animatedOpacity/animatedTransform things. This mimics the behaviour of a non-accelerated animation now. And since our goal is to make a correct frame for some time in the animation (when impl needs help), we&apos;d just end up special-casing a lot of code to use these values instead.

There&apos;s some logic that needs to go in when setting opacity during an animation, to not setNeedsCommit for changes due to animation, but that&apos;s reasonable to do IMO.

I think it could make sense to save the target transform, so that we can figure out the target visibleLayerRect, for prepainting. But it&apos;s not something we need to do in the first version of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581469</commentid>
    <comment_count>11</comment_count>
      <attachid>132495</attachid>
    <who name="">vollick</who>
    <bug_when>2012-03-18 11:14:05 -0700</bug_when>
    <thetext>Created attachment 132495
Patch

Update patch so that m_opacity and m_transform are modified directly by animations on the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581486</commentid>
    <comment_count>12</comment_count>
      <attachid>132495</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-18 13:20:14 -0700</bug_when>
    <thetext>Comment on attachment 132495
Patch

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

some nits for you :)

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:548
&gt; +    m_opacity = animatedOpacity;

I think these deserve a comment saying why it&apos;s not using setOpacity().

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:63
&gt; +    virtual float animatedOpacity() const { return m_opacity; }

Is this needed, since both threads set m_opacity now?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:65
&gt; +    virtual const TransformationMatrix&amp; animatedTransform() const { return m_transform; }

ditto?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:215
&gt;      // We may have added an animation during the tree sync. This will cause hostImpl to visit its controllers.

both sides visit them now i guess?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:394
&gt;      // We may have added an animation during the tree sync. This will cause hostImpl to visit its controllers.

ditto?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581493</commentid>
    <comment_count>13</comment_count>
      <attachid>132495</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-18 14:55:22 -0700</bug_when>
    <thetext>Comment on attachment 132495
Patch

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

Seems pretty reasonable. Dana&apos;s comments are good, I&apos;ve added some more in a similar vein.

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:608
&gt; +    case CCAnimationEvent::Started: {
&gt; +        m_layerAnimationDelegate-&gt;notifyAnimationStarted(wallClockTime);
&gt; +        break;

we normally don&apos;t put braces on case : sections unless we need block scoping for a local var

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:185
&gt; +void CCLayerAnimationController::add(PassOwnPtr&lt;CCActiveAnimation&gt; anim)

don&apos;t abbreviate parameter/variable names. &apos;animation&apos; would be fine here

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:410
&gt; +            } // switch
&gt; +        } // if running
&gt; +    } // for each animation

we don&apos;t typically comment ends of blocks like this. this function doesn&apos;t seem long enough to need these, but if there are functions with enough nesting levels to require comments that&apos;s when we would normally break bits out into helper functions

&gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerTest.cpp:181
&gt; +    EXPECT_EQ(0.5f, dummy.animatedOpacity());

don&apos;t think you need the trailing &quot;f&quot;s for this and the other floating point constants in this patch

&gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerTest.cpp:201
&gt; +    controller-&gt;animate(0.5, events.get()); // second anim starts NOW.

if it&apos;s worth having a comment, it&apos;s probably worth expanding out to a sentence with complete words

&gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerTest.cpp:228
&gt; +    // The the float animation should have started at time 1 and should be done.

typo &quot;The the&quot;

&gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerTest.cpp:248
&gt; +    // Anims with id 1 should both start now.

Animations please</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581552</commentid>
    <comment_count>14</comment_count>
      <attachid>132518</attachid>
    <who name="">vollick</who>
    <bug_when>2012-03-18 18:35:26 -0700</bug_when>
    <thetext>Created attachment 132518
Patch

I&apos;ve r?&apos;d again because of some of the renaming I did in response to these reviews.

(In reply to comment #12)
&gt; (From update of attachment 132495 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132495&amp;action=review
&gt;
&gt; some nits for you :)
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:548
&gt; &gt; +    m_opacity = animatedOpacity;
&gt;
&gt; I think these deserve a comment saying why it&apos;s not using setOpacity().
Good call. Added.
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:63
&gt; &gt; +    virtual float animatedOpacity() const { return m_opacity; }
&gt;
&gt; Is this needed, since both threads set m_opacity now?
It definitely doesn&apos;t need to be called opacity, but it does need to be part of the interface.
I&apos;ve made opacity() and transform() part of the interface again, and renamed
setAnimatedTransform to setTransformFromAnimation (likewise for opacity). At the moment,
it looks like these special setters are still required.
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:65
&gt; &gt; +    virtual const TransformationMatrix&amp; animatedTransform() const { return m_transform; }
&gt;
&gt; ditto?
Fixed.
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:215
&gt; &gt;      // We may have added an animation during the tree sync. This will cause hostImpl to visit its controllers.
&gt;
&gt; both sides visit them now i guess?
Thanks for catching this. I&apos;ve updated the comments.
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:394
&gt; &gt;      // We may have added an animation during the tree sync. This will cause hostImpl to visit its controllers.
&gt;
&gt; ditto?
Fixed.

(In reply to comment #12)
&gt; (From update of attachment 132495 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132495&amp;action=review
&gt;
&gt; some nits for you :)
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:548
&gt; &gt; +    m_opacity = animatedOpacity;
&gt;
&gt; I think these deserve a comment saying why it&apos;s not using setOpacity().
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:63
&gt; &gt; +    virtual float animatedOpacity() const { return m_opacity; }
&gt;
&gt; Is this needed, since both threads set m_opacity now?
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:65
&gt; &gt; +    virtual const TransformationMatrix&amp; animatedTransform() const { return m_transform; }
&gt;
&gt; ditto?
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:215
&gt; &gt;      // We may have added an animation during the tree sync. This will cause hostImpl to visit its controllers.
&gt;
&gt; both sides visit them now i guess?
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:394
&gt; &gt;      // We may have added an animation during the tree sync. This will cause hostImpl to visit its controllers.
&gt;
&gt; ditto?

(In reply to comment #13)
&gt; (From update of attachment 132495 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132495&amp;action=review
&gt;
&gt; Seems pretty reasonable. Dana&apos;s comments are good, I&apos;ve added some more in a similar vein.
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:608
&gt; &gt; +    case CCAnimationEvent::Started: {
&gt; &gt; +        m_layerAnimationDelegate-&gt;notifyAnimationStarted(wallClockTime);
&gt; &gt; +        break;
&gt;
&gt; we normally don&apos;t put braces on case : sections unless we need block scoping for a local var
&gt;
Fixed.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:185
&gt; &gt; +void CCLayerAnimationController::add(PassOwnPtr&lt;CCActiveAnimation&gt; anim)
&gt;
&gt; don&apos;t abbreviate parameter/variable names. &apos;animation&apos; would be fine here
Done.
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:410
&gt; &gt; +            } // switch
&gt; &gt; +        } // if running
&gt; &gt; +    } // for each animation
&gt;
&gt; we don&apos;t typically comment ends of blocks like this. this function doesn&apos;t seem long enough to need these, but if there are functions with enough nesting levels to require comments that&apos;s when we would normally break bits out into helper functions
Make sense. Removed.
&gt;
&gt; &gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerTest.cpp:181
&gt; &gt; +    EXPECT_EQ(0.5f, dummy.animatedOpacity());
&gt;
&gt; don&apos;t think you need the trailing &quot;f&quot;s for this and the other floating point constants in this patch
Fixed.
&gt;
&gt; &gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerTest.cpp:201
&gt; &gt; +    controller-&gt;animate(0.5, events.get()); // second anim starts NOW.
&gt;
&gt; if it&apos;s worth having a comment, it&apos;s probably worth expanding out to a sentence with complete words
You&apos;re right -- that&apos;s an awful comment. Fixed.
&gt;
&gt; &gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerTest.cpp:228
&gt; &gt; +    // The the float animation should have started at time 1 and should be done.
&gt;
&gt; typo &quot;The the&quot;
&gt;
Fixed.
&gt; &gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerTest.cpp:248
&gt; &gt; +    // Anims with id 1 should both start now.
&gt;
&gt; Animations please
Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581777</commentid>
    <comment_count>15</comment_count>
      <attachid>132579</attachid>
    <who name="">vollick</who>
    <bug_when>2012-03-19 07:37:43 -0700</bug_when>
    <thetext>Created attachment 132579
Patch

Freshening patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582058</commentid>
    <comment_count>16</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-03-19 12:32:53 -0700</bug_when>
    <thetext>*** Bug 80745 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582596</commentid>
    <comment_count>17</comment_count>
      <attachid>132579</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-19 18:54:54 -0700</bug_when>
    <thetext>Comment on attachment 132579
Patch

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

Looking good!  A few comments inline.

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:547
&gt; +

nit: extra newline

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:30
&gt; +#include &quot;TransformOperations.h&quot;

are we using this #include anywhere?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:43
&gt; +class TransformOperations;

I don&apos;t see this forward declaration being used anywhere - can we remove it?  I think it&apos;s nice if this class doesn&apos;t have to depend on TransformOperations

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:396
&gt; +    m_pendingBeginFrameRequest = adoptPtr(new BeginFrameAndCommitState(monotonicallyIncreasingTime()));

I think I made this change in a different way in another patch.

Unfortunately on the main thread we need to use a currentTime() based clock - stuff like requestAnimationFrame needs it.  We plan to change that eventually, but for now you either have to use that clock or add some renormalizing logic before you pass the time into the CCLayerTreeHostClient.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.h:95
&gt; +        BeginFrameAndCommitState(double frameBeginTime) : frameBeginTime(frameBeginTime) { }

explicit, prz</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583020</commentid>
    <comment_count>18</comment_count>
      <attachid>132816</attachid>
    <who name="">vollick</who>
    <bug_when>2012-03-20 06:45:16 -0700</bug_when>
    <thetext>Created attachment 132816
Patch

(In reply to comment #17)
&gt; (From update of attachment 132579 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132579&amp;action=review
&gt;
&gt; Looking good!  A few comments inline.
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:547
&gt; &gt; +
&gt;
&gt; nit: extra newline
&gt;
Fixed.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:30
&gt; &gt; +#include &quot;TransformOperations.h&quot;
&gt;
&gt; are we using this #include anywhere?
&gt;
Nope. Removed.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:43
&gt; &gt; +class TransformOperations;
&gt;
&gt; I don&apos;t see this forward declaration being used anywhere - can we remove it?  I think it&apos;s nice if this class doesn&apos;t have to depend on TransformOperations
&gt;
Removed.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:396
&gt; &gt; +    m_pendingBeginFrameRequest = adoptPtr(new BeginFrameAndCommitState(monotonicallyIncreasingTime()));
&gt;
&gt; I think I made this change in a different way in another patch.
&gt;
&gt; Unfortunately on the main thread we need to use a currentTime() based clock - stuff like requestAnimationFrame needs it.  We plan to change that eventually, but for now you either have to use that clock or add some renormalizing logic before you pass the time into the CCLayerTreeHostClient.
&gt;
It also turned out that we get to CCLayerTreeHost::updateAnimations(frameBeginTime) along another code path that
passes the currentTime() rather than the monotonicallyIncreasingTime().

I&apos;ve reverted these changes and I grab the monotonicallyIncreasingTime() in updateAnimations instead.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.h:95
&gt; &gt; +        BeginFrameAndCommitState(double frameBeginTime) : frameBeginTime(frameBeginTime) { }
&gt;
&gt; explicit, prz

Reverted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583061</commentid>
    <comment_count>19</comment_count>
      <attachid>132816</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-20 07:42:45 -0700</bug_when>
    <thetext>Comment on attachment 132816
Patch

Clearing flags on attachment: 132816

Committed r111393: &lt;http://trac.webkit.org/changeset/111393&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583062</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-20 07:42:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131961</attachid>
            <date>2012-03-14 17:05:43 -0700</date>
            <delta_ts>2012-03-17 12:06:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81106-20120314200542.patch</filename>
            <type>text/plain</type>
            <size>148674</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTA1ZTgxZDc3N2FkNTE2
YjQzN2RmZjAxMmQ1NzkxZGMyZmVlOTk3ZC4uMTBhYTlhOGI5MWMyZGFmZjcyNGUyNGM4NjkzNTY4
ODE1YmE1ZjA5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MyBAQAorMjAxMi0wMy0xNCAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFRp
Y2sgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMTA2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFpbnRhaW5zIGEgZnJlc2hlciBh
bmltYXRlZCBvcGFjaXR5IGFuZCB0cmFuc2Zvcm0gdmFsdWUgb24gdGhlCisgICAgICAgIG1haW4g
dGhyZWFkIGZvciB1c2UgYnkgdGhlIGN1bGxpbmcgY29kZS4gVGhpcyB3aWxsIGFsc28gYWRkcmVz
cworICAgICAgICBpc3N1ZSA4MDc0NC4KKworICAgICAgICBUZXN0ZWQgaW4gQ0NMYXllclRyZWVI
b3N0VGVzdERvTm90U2tpcExheWVyc1dpdGhBbmltYXRlZE9wYWNpdHkKKworICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGlj
c0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoR3JhcGhpY3NMYXllckNocm9taXVt
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6b3BhY2l0eUlzQW5pbWF0aW5nKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6dHJhbnNmb3Jt
SXNBbmltYXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3Bl
cnRpZXNUbyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRBbmltYXRlZE9w
YWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0QW5pbWF0ZWRUcmFu
c2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnNldExheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpoYXNBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0QW5pbWF0aW9uRXZlbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9t
aXVtOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjphbmltYXRlZE9wYWNp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6YW5pbWF0ZWRUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Ym91bmRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyQ2hyb21pdW06OmRyYXdPcGFjaXR5SXNBbmltYXRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RHJhd09wYWNpdHlJc0FuaW1hdGluZyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6UmVuZGVyU3VyZmFj
ZUNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJT
dXJmYWNlQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1
bTo6ZHJhd09wYWNpdHlJc0FuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJm
YWNlQ2hyb21pdW06OnNldERyYXdPcGFjaXR5SXNBbmltYXRpbmcpOgorICAgICAgICAoUmVuZGVy
U3VyZmFjZUNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5oOgorICAgICAgICAoQ0NBY3RpdmVBbmltYXRpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5pbWF0aW9uRXZlbnQ6OkNDQW5pbWF0aW9uRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NBbmltYXRpb25FdmVudDo6dG9GbG9hdEFuaW1hdGlvbkZp
bmlzaGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBbmltYXRpb25FdmVudDo6dG9UcmFu
c2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5pbWF0
aW9uU3RhcnRlZEV2ZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDo6Q0NBbmltYXRpb25TdGFydGVkRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Q0NG
bG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGbG9hdEFu
aW1hdGlvbkZpbmlzaGVkRXZlbnQ6On5DQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudDo6dHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6
OkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6On5DQ1RyYW5zZm9ybUFuaW1hdGlvbkZp
bmlzaGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1BbmltYXRpb25GaW5p
c2hlZEV2ZW50Ojp0eXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FuaW1hdGlvbkV2ZW50cy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvbkV2ZW50Ojp0YXJnZXRQcm9wZXJ0eSk6CisgICAgICAgIChDQ0FuaW1h
dGlvbkV2ZW50KToKKyAgICAgICAgKENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50KToKKyAgICAgICAg
KENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRmxv
YXRBbmltYXRpb25GaW5pc2hlZEV2ZW50OjpmaW5hbFZhbHVlKToKKyAgICAgICAgKENDVHJhbnNm
b3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9y
bUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OmZpbmFsVmFsdWUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpwdXNoQW5pbWF0aW9uVXBkYXRlc1RvKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpoYXNBY3RpdmVB
bmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6
OmlzQW5pbWF0aW5nUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OnB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb25zQ29tcGxl
dGVkT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2spOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdG
b3JTdGFydFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc29sdmVDb25mbGljdHMp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1cmdlRmlu
aXNoZWRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjp0aWNrQW5pbWF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQ6On5DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckNsaWVudCk6CisgICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uRGVsZWdhdGUuaDoKKyAgICAgICAgKENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJbXBsOjpzZXRBbmltYXRlZE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0QW5pbWF0ZWRUcmFuc2Zvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6Om9wYWNpdHlJc0FuaW1hdGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJhbnNmb3JtSXNBbmltYXRpbmcpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAg
IChDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6YW5pbWF0ZWRP
cGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphbmltYXRlZFRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6b3BhY2l0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6ZHJhd09wYWNpdHlJc0FuaW1hdGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0RHJhd09wYWNpdHlJc0FuaW1hdGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpsYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0OjpkaWRCZWNvbWVJbnZpc2libGVPbkltcGxUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUxheWVycyk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
YW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmxheWVyU2hvdWxkQmVTa2lwcGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnN1YnRyZWVTaG91bGRC
ZVNraXBwZWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNo
cm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eUludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OmFuaW1hdGVMYXllcnNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoQ0NMYXll
clRyZWVIb3N0SW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6
Q0NSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6
ZHJhd09wYWNpdHlJc0FuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZh
Y2U6OnNldERyYXdPcGFjaXR5SXNBbmltYXRpbmcpOgorICAgICAgICAoQ0NSZW5kZXJTdXJmYWNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnNjaGVkdWxlZEFjdGlvbkJl
Z2luRnJhbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkUHJveHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OkJlZ2luRnJhbWVB
bmRDb21taXRTdGF0ZTo6QmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlKToKKwogMjAxMi0wMy0xMyAg
R2F2aW4gUGV0ZXJzICA8Z2F2aW5wQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXggYW4gZW51
bWVyYXRpb24gbmFtZSBpbiBSZWFzb25zRnJhbWVDYW5ub3RCZUluUGFnZUNhY2hlLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCBjZWViN2RiMGI0YWQ4ZDFiNmY4ZDc0YjI0YzYyYmYwNDk5
MTQwNTEzLi5mMmJkMTM5ODAwOWFkN2Q1NDVjZDExOWI5ODA5ZTFiMTM2NmQ2ZjM5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTAzLTE0ICBJYW4gVm9s
bGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gVGljayBh
Y2NlbGVyYXRlZCBhbmltYXRpb25zIG9uIHRoZSBtYWluIHRocmVhZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODExMDYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAq
IHRlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6
RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudDo6RmFrZUxheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckNsaWVudCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyQW5pbWF0aW9u
Q29udHJvbGxlckNsaWVudDo6fkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQpOgor
ICAgICAgICAqIHRlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oOgorICAgICAgICAoRmFrZUxh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFr
ZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudDo6c2V0QW5pbWF0ZWRPcGFjaXR5KToKKyAg
ICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50Ojph
bmltYXRlZE9wYWNpdHkpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJDbGllbnQ6OnNldEFuaW1hdGVkVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50OjphbmltYXRlZFRyYW5z
Zm9ybSk6CisgICAgICAgICogdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVz
dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNUKToKKyAgICAgICAgKFdlYktp
dFRlc3RzKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdEFkZEFuaW1hdGlvbjo6Q0NMYXllclRyZWVIb3N0
VGVzdEFkZEFuaW1hdGlvbik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RBZGRB
bmltYXRpb246OmFuaW1hdGVMYXllcnMpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0VGVzdEFk
ZEFuaW1hdGlvbik6CisgICAgICAgIChXVEYpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0VGVz
dERvTm90U2tpcExheWVyc1dpdGhBbmltYXRlZE9wYWNpdHkpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0RG9Ob3RTa2lwTGF5ZXJzV2l0aEFuaW1hdGVkT3BhY2l0eTo6Q0NMYXll
clRyZWVIb3N0VGVzdERvTm90U2tpcExheWVyc1dpdGhBbmltYXRlZE9wYWNpdHkpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0RG9Ob3RTa2lwTGF5ZXJzV2l0aEFuaW1hdGVkT3Bh
Y2l0eTo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdERvTm90
U2tpcExheWVyc1dpdGhBbmltYXRlZE9wYWNpdHk6OmFuaW1hdGVMYXllcnMpOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0RG9Ob3RTa2lwTGF5ZXJzV2l0aEFuaW1hdGVkT3BhY2l0
eTo6Y29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdERvTm90U2tpcExheWVyc1dpdGhBbmltYXRlZE9wYWNpdHk6OmFmdGVyVGVzdCk6Cisg
ICAgICAgIChXVEY6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMvVHJlZVN5bmNocm9uaXplclRl
c3QuY3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXRU
ZXN0czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaEFuaW1hdGlvblVwZGF0ZXNU
byk6CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVCk6CisKIDIwMTItMDMtMTMgIEtpbnVrbyBZ
YXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFsbG93IFdlYkZpbGVDaG9v
c2VyIHRvIHJldHVybiBleHRyYSBmaWxlIGluZm8gKGxpa2UgZGlzcGxheU5hbWUpIGluIGFkZGl0
aW9uIHRvIG1lcmUgZmlsZSBwYXRocwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDg3OGM0NjVlYmZkZDI5
Y2RjYWZlOTY2ODEwYWZhYjZlZmFkY2QyMWEuLmJjMGRlZTc3NDU4MDljNGQwNGY2ZmRlMTNjYjdm
OTZhNWQ2YWUwMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM0NjIsOCArMzQ2Miw2IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRp
b25DdXJ2ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAnLAotICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbC5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDRjODE4NTNi
ODIwMTE2NTgxMmI0YTNkMzUxOTEzMTRiNjA0Zjk3ZWIuLmRiMGJhMWMyYzlkMjI0OTJjYzUyOWJm
YzEyYTUyZGU5MzYwZmY0YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNw
cApAQCAtNzQ5LDE2ICs3NDksNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bm90aWZ5
QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKQogICAgICAgICBtX2NsaWVudC0+bm90
aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aGlzLCBzdGFydFRpbWUpOwogfQogCi12b2lkIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6bm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoaW50IGFuaW1hdGlvbklkKQot
ewotICAgIGZvciAoQW5pbWF0aW9uSWRNYXA6Oml0ZXJhdG9yIGlkSXRlciA9IG1fYW5pbWF0aW9u
SWRNYXAuYmVnaW4oKTsgaWRJdGVyICE9IG1fYW5pbWF0aW9uSWRNYXAuZW5kKCk7ICsraWRJdGVy
KSB7Ci0gICAgICAgIGlmIChpZEl0ZXItPnNlY29uZCA9PSBhbmltYXRpb25JZCkgewotICAgICAg
ICAgICAgbV9hbmltYXRpb25JZE1hcC5yZW1vdmUoaWRJdGVyKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVy
Q2hyb21pdW0uaAppbmRleCA0Y2NhODJhODg3YmUyODU5OWFmMTQ3NDE3ZWNhYmM3ODcxOTQ5Zjlj
Li45MWE0NTVhNTQxZTY2ZjlkODc2YmU2YWNlNjExZmM4YTBmYWM0N2E1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtMTE2LDcgKzExNiw2IEBAIHB1YmxpYzoKIAogICAg
IC8vIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKTsKLSAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoaW50IGFuaW1hdGlvbklkKTsKIAogICAg
IC8vIEV4cG9zZWQgZm9yIHRlc3RzLgogICAgIExheWVyQ2hyb21pdW0qIGNvbnRlbnRzTGF5ZXIo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5ZXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHAKaW5kZXggZjk3Mzg4MGZkMTc1YjFhNDkzNmEyZWZmNDE3NmY0Y2JmMWU3YzlmNS4uNmFl
NWI5ODQzYjA5ZGFmNDI5MTJiZDE1ZjU0YzY3MDUxYjczMTFiMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSgpCiAg
ICAgOiBtX25lZWRzRGlzcGxheShmYWxzZSkKICAgICAsIG1fbGF5ZXJJZChzX25leHRMYXllcklk
KyspCiAgICAgLCBtX3BhcmVudCgwKQotICAgICwgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpKQorICAgICwgbV9sYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSh0aGlzKSkK
ICAgICAsIG1fc2Nyb2xsYWJsZShmYWxzZSkKICAgICAsIG1fc2hvdWxkU2Nyb2xsT25NYWluVGhy
ZWFkKGZhbHNlKQogICAgICwgbV9oYXZlV2hlZWxFdmVudEhhbmRsZXJzKGZhbHNlKQpAQCAtODAs
NiArODAsNyBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKCkKICAgICAsIG1fYWx3YXlz
UmVzZXJ2ZVRleHR1cmVzKGZhbHNlKQogICAgICwgbV9yZXBsaWNhTGF5ZXIoMCkKICAgICAsIG1f
ZHJhd09wYWNpdHkoMCkKKyAgICAsIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZyhmYWxzZSkKICAg
ICAsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9jb250ZW50c1NjYWxlKDEuMCkK
ICAgICAsIG1fbGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSgwKQpAQCAtOTYsNzAgKzk3LDYgQEAgTGF5
ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogICAgIHJlbW92ZUFsbENoaWxkcmVuKCk7CiB9
CiAKLWJvb2wgTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5p
bWF0aW9uLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCkK
LXsKLSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCB8fCAhbV9sYXllclRyZWVIb3N0LT5zZXR0aW5n
cygpLnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYm9vbCBhZGRlZEFuaW1hdGlvbiA9IG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5hZGRB
bmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24sIGFuaW1hdGlvbklkLCBncm91cElk
LCB0aW1lT2Zmc2V0KTsKLSAgICBpZiAoYWRkZWRBbmltYXRpb24pCi0gICAgICAgIHNldE5lZWRz
Q29tbWl0KCk7Ci0gICAgcmV0dXJuIGFkZGVkQW5pbWF0aW9uOwotfQotCi12b2lkIExheWVyQ2hy
b21pdW06OnBhdXNlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQp
Ci17Ci0gICAgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9uKGFuaW1h
dGlvbklkLCB0aW1lT2Zmc2V0KTsKLSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi12b2lkIExh
eWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQpCi17Ci0gICAgbV9s
YXllckFuaW1hdGlvbkNvbnRyb2xsZXItPnJlbW92ZUFuaW1hdGlvbihhbmltYXRpb25JZCk7Ci0g
ICAgc2V0TmVlZHNDb21taXQoKTsKLX0KLQotdm9pZCBMYXllckNocm9taXVtOjpzdXNwZW5kQW5p
bWF0aW9ucyhkb3VibGUgdGltZSkKLXsKLSAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+
c3VzcGVuZEFuaW1hdGlvbnModGltZSk7Ci0gICAgc2V0TmVlZHNDb21taXQoKTsKLX0KLQotdm9p
ZCBMYXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKCkKLXsKLSAgICBtX2xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOwotICAgIHNldE5lZWRzQ29tbWl0KCk7
Ci19Ci0KLXZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKFBh
c3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGxheWVyQW5pbWF0aW9uQ29udHJv
bGxlcikKLXsKLSAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlciA9IGxheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjsKLSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi1ib29sIExheWVyQ2hyb21p
dW06Omhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKTsKLX0KLQotdm9pZCBMYXllckNo
cm9taXVtOjpzZXRBbmltYXRpb25FdmVudChjb25zdCBDQ0FuaW1hdGlvbkV2ZW50JiBldmVudCwg
ZG91YmxlIHdhbGxDbG9ja1RpbWUpCi17Ci0gICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKLQot
ICAgIGNhc2UgQ0NBbmltYXRpb25FdmVudDo6U3RhcnRlZDogewotICAgICAgICBtX2xheWVyQW5p
bWF0aW9uRGVsZWdhdGUtPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQod2FsbENsb2NrVGltZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQ0NBbmltYXRpb25FdmVudDo6RmluaXNo
ZWQ6IHsKLSAgICAgICAgY29uc3QgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50KiBmaW5pc2hlZEV2
ZW50ID0gZXZlbnQudG9BbmltYXRpb25GaW5pc2hlZEV2ZW50KCk7Ci0gICAgICAgIG1fbGF5ZXJB
bmltYXRpb25EZWxlZ2F0ZS0+bm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoZmluaXNoZWRFdmVudC0+
YW5pbWF0aW9uSWQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIH0KLX0KLQogdm9p
ZCBMYXllckNocm9taXVtOjpzZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50KGJvb2wgaXNOb25Db21w
b3NpdGVkQ29udGVudCkKIHsKICAgICBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQgPSBpc05vbkNv
bXBvc2l0ZWRDb250ZW50OwpAQCAtMzg5LDYgKzMyNiwxMSBAQCB2b2lkIExheWVyQ2hyb21pdW06
OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCiti
b29sIExheWVyQ2hyb21pdW06Om9wYWNpdHlJc0FuaW1hdGluZygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5pc0FuaW1hdGluZ1Byb3BlcnR5KENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjpzZXRPcGFx
dWUoYm9vbCBvcGFxdWUpCiB7CiAgICAgaWYgKG1fb3BhcXVlID09IG9wYXF1ZSkKQEAgLTQyMSw2
ICszNjMsMTEgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCiti
b29sIExheWVyQ2hyb21pdW06OnRyYW5zZm9ybUlzQW5pbWF0aW5nKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPmlzQW5pbWF0aW5nUHJvcGVydHkoQ0NB
Y3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0
U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQogewogICAgIGlm
IChtX3Njcm9sbFBvc2l0aW9uID09IHNjcm9sbFBvc2l0aW9uKQpAQCAtNTIzLDEyICs0NzAsMTQg
QEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXll
cikKICAgICAgICAgbV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkNoYW5nZWQgPSBmYWxzZTsKICAg
ICB9CiAgICAgbGF5ZXItPnNldE9wYXF1ZShtX29wYXF1ZSk7Ci0gICAgbGF5ZXItPnNldE9wYWNp
dHkobV9vcGFjaXR5KTsKKyAgICBpZiAoIW9wYWNpdHlJc0FuaW1hdGluZygpKQorICAgICAgICBs
YXllci0+c2V0T3BhY2l0eShtX29wYWNpdHkpOwogICAgIGxheWVyLT5zZXRQb3NpdGlvbihtX3Bv
c2l0aW9uKTsKICAgICBsYXllci0+c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAg
bGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5z
ZXRTdWJsYXllclRyYW5zZm9ybShtX3N1YmxheWVyVHJhbnNmb3JtKTsKLSAgICBsYXllci0+c2V0
VHJhbnNmb3JtKG1fdHJhbnNmb3JtKTsKKyAgICBpZiAoIXRyYW5zZm9ybUlzQW5pbWF0aW5nKCkp
CisgICAgICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obV90cmFuc2Zvcm0pOwogICAgIGxheWVyLT5z
ZXRVcGRhdGVSZWN0KG1fdXBkYXRlUmVjdCk7CiAKICAgICBsYXllci0+c2V0U2Nyb2xsRGVsdGEo
bGF5ZXItPnNjcm9sbERlbHRhKCkgLSBsYXllci0+c2VudFNjcm9sbERlbHRhKCkpOwpAQCAtNTM5
LDcgKzQ4OCw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVy
SW1wbCogbGF5ZXIpCiAgICAgaWYgKHJlcGxpY2FMYXllcigpKQogICAgICAgICByZXBsaWNhTGF5
ZXIoKS0+cHVzaFByb3BlcnRpZXNUbyhsYXllci0+cmVwbGljYUxheWVyKCkpOwogCi0gICAgbV9s
YXllckFuaW1hdGlvbkNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhsYXllci0+bGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKCkpOworICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVy
LT5wdXNoQW5pbWF0aW9uVXBkYXRlc1RvKGxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIo
KSk7CiAKICAgICAvLyBSZXNldCBhbnkgc3RhdGUgdGhhdCBzaG91bGQgYmUgY2xlYXJlZCBmb3Ig
dGhlIG5leHQgdXBkYXRlLgogICAgIG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdCgpOwpAQCAtNTkz
LDYgKzU0Miw4OSBAQCBib29sIExheWVyQ2hyb21pdW06OmRlc2NlbmRhbnREcmF3c0NvbnRlbnQo
KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorCit2b2lkIExheWVyQ2hyb21pdW06OnNldEFuaW1h
dGVkT3BhY2l0eShmbG9hdCBhbmltYXRlZE9wYWNpdHkpCit7CisgICAgbV9hbmltYXRlZE9wYWNp
dHkgPSBhbmltYXRlZE9wYWNpdHk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0QW5pbWF0
ZWRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGFuaW1hdGVkVHJhbnNmb3Jt
KQoreworICAgIG1fYW5pbWF0ZWRUcmFuc2Zvcm0gPSBhbmltYXRlZFRyYW5zZm9ybTsKK30KKwor
Ym9vbCBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3Qm
IHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRp
b24sIGludCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KQorewor
ICAgIGlmICghbV9sYXllclRyZWVIb3N0IHx8ICFtX2xheWVyVHJlZUhvc3QtPnNldHRpbmdzKCku
dGhyZWFkZWRBbmltYXRpb25FbmFibGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBi
b29sIGFkZGVkQW5pbWF0aW9uID0gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPmFkZEFuaW1h
dGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRp
bWVPZmZzZXQpOworICAgIGlmIChhZGRlZEFuaW1hdGlvbikKKyAgICAgICAgc2V0TmVlZHNDb21t
aXQoKTsKKyAgICByZXR1cm4gYWRkZWRBbmltYXRpb247Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1
bTo6cGF1c2VBbmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBkb3VibGUgdGltZU9mZnNldCkKK3sK
KyAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+cGF1c2VBbmltYXRpb24oYW5pbWF0aW9u
SWQsIHRpbWVPZmZzZXQpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5ZXJD
aHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCkKK3sKKyAgICBtX2xheWVy
QW5pbWF0aW9uQ29udHJvbGxlci0+cmVtb3ZlQW5pbWF0aW9uKGFuaW1hdGlvbklkKTsKKyAgICBz
ZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRp
b25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5zdXNw
ZW5kQW5pbWF0aW9ucyh0aW1lKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIExh
eWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQoreworICAgIG1fbGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLT5yZXN1bWVBbmltYXRpb25zKCk7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30K
Kwordm9pZCBMYXllckNocm9taXVtOjpzZXRMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoUGFzc093
blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gbGF5ZXJBbmltYXRpb25Db250cm9sbGVy
KQoreworICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyID0gbGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6
aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllckFuaW1hdGlv
bkNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpOworfQorCit2b2lkIExheWVyQ2hyb21p
dW06OnNldEFuaW1hdGlvbkV2ZW50KGNvbnN0IENDQW5pbWF0aW9uRXZlbnQmIGV2ZW50LCBkb3Vi
bGUgd2FsbENsb2NrVGltZSkKK3sKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgeworCisgICAg
Y2FzZSBDQ0FuaW1hdGlvbkV2ZW50OjpTdGFydGVkOiB7CisgICAgICAgIG1fbGF5ZXJBbmltYXRp
b25EZWxlZ2F0ZS0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh3YWxsQ2xvY2tUaW1lKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBDQ0FuaW1hdGlvbkV2ZW50OjpGaW5pc2hlZEZs
b2F0QW5pbWF0aW9uOiB7CisgICAgICAgIGNvbnN0IENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2
ZW50KiBmaW5pc2hlZEV2ZW50ID0gZXZlbnQudG9GbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQo
KTsKKyAgICAgICAgQVNTRVJUKGZpbmlzaGVkRXZlbnQtPnRhcmdldFByb3BlcnR5KCkgPT0gQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpOworICAgICAgICBzZXRPcGFjaXR5KGZpbmlzaGVkRXZl
bnQtPmZpbmFsVmFsdWUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQ0NB
bmltYXRpb25FdmVudDo6RmluaXNoZWRUcmFuc2Zvcm1BbmltYXRpb246IHsKKyAgICAgICAgY29u
c3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50KiBmaW5pc2hlZEV2ZW50ID0gZXZl
bnQudG9UcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50KCk7CisgICAgICAgIEFTU0VSVChm
aW5pc2hlZEV2ZW50LT50YXJnZXRQcm9wZXJ0eSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpUcmFu
c2Zvcm0pOworICAgICAgICBzZXRUcmFuc2Zvcm0oZmluaXNoZWRFdmVudC0+ZmluYWxWYWx1ZSgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgfQorfQorCiB2b2lkIHNvcnRMYXllcnMo
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+OjppdGVyYXRvciwgdm9pZCopCiB7CiAgICAgLy8gQ3VycmVudGx5IHdl
IGRvbid0IHVzZSB6LW9yZGVyIHRvIGRlY2lkZSB3aGF0IHRvIHBhaW50LCBzbyB0aGVyZSdzIG5v
IG5lZWQgdG8gYWN0dWFsbHkgc29ydCBMYXllckNocm9taXVtcy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApp
bmRleCA4NmZkZjk1MTU2ODg5Mzc4YzNkNjJkMTkxOWE3OTVhMmNlMTI1MTZhLi4zYTFmZjBjMDg4
ODA4NTU5ZDNiOTBmMjgyYzMwZDZmYjk0NzU1MzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC00
Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAjaW5jbHVk
ZSAiU2hhZGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgor
I2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAKICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTU1LDcgKzU2LDYg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NBbmltYXRpb25FdmVudDsKLWNsYXNz
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOwogY2xhc3MgQ0NMYXllckFuaW1hdGlvbkRlbGVn
YXRlOwogY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CkBAIC02NSwx
MiArNjUsMjAgQEAgY2xhc3MgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTsKIAogLy8gQmFzZSBjbGFz
cyBmb3IgY29tcG9zaXRlZCBsYXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQg
ZnJvbQogLy8gdGhpcyBjbGFzcy4KLWNsYXNzIExheWVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291
bnRlZDxMYXllckNocm9taXVtPiB7CitjbGFzcyBMYXllckNocm9taXVtIDogcHVibGljIFJlZkNv
dW50ZWQ8TGF5ZXJDaHJvbWl1bT4sIHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNs
aWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY3Jl
YXRlKCk7CiAKICAgICB2aXJ0dWFsIH5MYXllckNocm9taXVtKCk7CiAKKyAgICAvLyBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgaW50
IGlkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcklkOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEFu
aW1hdGVkT3BhY2l0eShmbG9hdCk7CisgICAgdmlydHVhbCBmbG9hdCBhbmltYXRlZE9wYWNpdHko
KSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGVkT3BhY2l0eTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRBbmltYXRlZFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZp
cnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGFuaW1hdGVkVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV9hbmltYXRlZFRyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgY29uc3QgSW50
U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KKwogICAgIGNvbnN0IExh
eWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIGNvbnN0OwogICAgIExheWVyQ2hyb21pdW0qIHBhcmVu
dCgpIGNvbnN0OwogICAgIHZvaWQgYWRkQ2hpbGQoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPik7
CkBAIC05NCw3ICsxMDIsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBiYWNrZ3JvdW5kQ292ZXJzVmll
d3BvcnQoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb3ZlcnNWaWV3cG9ydDsgfQogCiAg
ICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYpOwotICAgIGNvbnN0IEludFNpemUmIGJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAgICAgdmlydHVhbCBJbnRTaXplIGNv
bnRlbnRCb3VuZHMoKSBjb25zdCB7IHJldHVybiBib3VuZHMoKTsgfQogCiAgICAgdm9pZCBzZXRN
YXNrc1RvQm91bmRzKGJvb2wpOwpAQCAtMTA5LDYgKzExNiw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc2V0T3BhY2l0eShmbG9hdCk7CiAgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fb3BhY2l0eTsgfQorICAgIGJvb2wgb3BhY2l0eUlzQW5pbWF0aW5nKCkgY29uc3Q7CiAKICAg
ICB2b2lkIHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwogICAgIGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmIGZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcnM7IH0KQEAg
LTEyNCw2ICsxMzIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQorICAgIGJvb2wgdHJhbnNm
b3JtSXNBbmltYXRpbmcoKSBjb25zdDsKIAogICAgIGNvbnN0IEludFJlY3QmIHZpc2libGVMYXll
clJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGVMYXllclJlY3Q7IH0KICAgICB2b2lkIHNl
dFZpc2libGVMYXllclJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUxheWVyUmVjdCkgeyBtX3Zp
c2libGVMYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0OyB9CkBAIC0xNzgsMTQgKzE4NywxNSBA
QCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvcywg
RnJhZ21lbnRTaGFkZXJDb2xvcj4gQm9yZGVyUHJvZ3JhbTsKIAotICAgIGludCBpZCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGF5ZXJJZDsgfQotCiAgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2UoKSB7
IG1fcmVuZGVyU3VyZmFjZS5jbGVhcigpOyB9CiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBy
ZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJTdXJmYWNlLmdldCgpOyB9CiAg
ICAgdm9pZCBjcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAKICAgICBmbG9hdCBkcmF3T3BhY2l0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHk7IH0KICAgICB2b2lkIHNldERyYXdPcGFjaXR5
KGZsb2F0IG9wYWNpdHkpIHsgbV9kcmF3T3BhY2l0eSA9IG9wYWNpdHk7IH0KKyAgICBib29sIGRy
YXdPcGFjaXR5SXNBbmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5SXNBbmlt
YXRpbmc7IH0KKyAgICB2b2lkIHNldERyYXdPcGFjaXR5SXNBbmltYXRpbmcoYm9vbCBkcmF3T3Bh
Y2l0eUlzQW5pbWF0aW5nKSB7IG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZyA9IGRyYXdPcGFjaXR5
SXNBbmltYXRpbmc7IH0KKwogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jbGlwUmVjdDsgfQogICAgIHZvaWQgc2V0Q2xpcFJlY3QoY29uc3QgSW50UmVjdCYg
Y2xpcFJlY3QpIHsgbV9jbGlwUmVjdCA9IGNsaXBSZWN0OyB9CiAgICAgUmVuZGVyU3VyZmFjZUNo
cm9taXVtKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRSZW5k
ZXJTdXJmYWNlOyB9CkBAIC0zMTIsNiArMzIyLDcgQEAgcHJpdmF0ZToKICAgICAvLyBUcmFuc2ll
bnQgcHJvcGVydGllcy4KICAgICBPd25QdHI8UmVuZGVyU3VyZmFjZUNocm9taXVtPiBtX3JlbmRl
clN1cmZhY2U7CiAgICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKKyAgICBib29sIG1fZHJhd09wYWNp
dHlJc0FuaW1hdGluZzsKICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CiAgICAgUmVuZGVyU3VyZmFj
ZUNocm9taXVtKiBtX3RhcmdldFJlbmRlclN1cmZhY2U7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbV9kcmF3VHJhbnNmb3JtOwpAQCAtMzIxLDYgKzMzMiwxMCBAQCBwcml2YXRlOgogCiAgICAg
Ym9vbCBtX3BhZ2VTY2FsZURpcnR5OwogCisgICAgLy8gVGhlc2UgdmFsdWVzIHdpbGwgYmUgdXBk
YXRlZCByZWd1bGFybHkgZHVyaW5nIGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMuCisgICAgZmxvYXQg
bV9hbmltYXRlZE9wYWNpdHk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9hbmltYXRlZFRy
YW5zZm9ybTsKKwogICAgIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSogbV9sYXllckFuaW1hdGlv
bkRlbGVnYXRlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAKaW5k
ZXggNjljZTk1MjZjOTFkN2I0N2NmNzE4NTdkNTY1OTNjNzhhNjMxNDkzOS4uMmU5OTk4YTdhMTE0
ZmY2ODFhZDJkYzY1YTQ2ZmE3ZmZlNTc3YzE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNl
Q2hyb21pdW0uY3BwCkBAIC00Miw2ICs0Miw3IEBAIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6UmVu
ZGVyU3VyZmFjZUNocm9taXVtKExheWVyQ2hyb21pdW0qIG93bmluZ0xheWVyKQogICAgICwgbV9t
YXNrTGF5ZXIoMCkKICAgICAsIG1fc2tpcHNEcmF3KGZhbHNlKQogICAgICwgbV9kcmF3T3BhY2l0
eSgxKQorICAgICwgbV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9uZWFy
ZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMoMCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFj
ZUNocm9taXVtLmgKaW5kZXggOTA0NTQyNWJjM2ZiZmYyM2M4MjFmZmZlOGE0YmIwNzM5NWIwZTI4
Yy4uM2EzMDRjMTg1ZDdmOTMyNTJmNDQzY2M0MjM0NjFjOTlhYjk3Y2RkZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNo
cm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTYzLDYgKzYzLDkgQEAgcHVibGljOgogICAgIGZs
b2F0IGRyYXdPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3T3BhY2l0eTsgfQogICAgIHZv
aWQgc2V0RHJhd09wYWNpdHkoZmxvYXQgZHJhd09wYWNpdHkpIHsgbV9kcmF3T3BhY2l0eSA9IGRy
YXdPcGFjaXR5OyB9CiAKKyAgICBib29sIGRyYXdPcGFjaXR5SXNBbmltYXRpbmcoKSBjb25zdCB7
IHJldHVybiBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmc7IH0KKyAgICB2b2lkIHNldERyYXdPcGFj
aXR5SXNBbmltYXRpbmcoYm9vbCBkcmF3T3BhY2l0eUlzQW5pbWF0aW5nKSB7IG1fZHJhd09wYWNp
dHlJc0FuaW1hdGluZyA9IGRyYXdPcGFjaXR5SXNBbmltYXRpbmc7IH0KKwogICAgIC8vIFRoaXMg
Z29lcyBmcm9tIGNvbnRlbnQgc3BhY2Ugd2l0aCB0aGUgb3JpZ2luIGluIHRoZSBjZW50ZXIgb2Yg
dGhlIHJlY3QgYmVpbmcgdHJhbnNmb3JtZWQgdG8gdGhlIHRhcmdldCBzcGFjZSB3aXRoIHRoZSBv
cmlnaW4gaW4gdGhlIHRvcCBsZWZ0IG9mIHRoZQogICAgIC8vIHJlY3QgYmVpbmcgdHJhbnNmb3Jt
ZWQuIFBvc2l0aW9uIHRoZSByZWN0IHNvIHRoYXQgdGhlIG9yaWdpbiBpcyBpbiB0aGUgY2VudGVy
IG9mIGl0IGJlZm9yZSBhcHBseWluZyB0aGlzIHRyYW5zZm9ybS4KICAgICBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5z
Zm9ybTsgfQpAQCAtOTksNiArMTAyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2tpcHNEcmF3
OwogCiAgICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKKyAgICBib29sIG1fZHJhd09wYWNpdHlJc0Fu
aW1hdGluZzsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07CiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV9yZXBsaWNhRHJhd1RyYW5zZm9ybTsKICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtX29yaWdpblRyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1h
dGlvbi5oCmluZGV4IDIwOTM0MjFhNzUwOGY5NWZmMzVjY2UxM2Y1NDU4NjJmMjRlZGYzZWQuLjlj
NjYzM2MzZTRjNmY5ZDZjNGU2YmJlM2ZkMzc2NWNiN2RiZTRlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NB
Y3RpdmVBbmltYXRpb24uaApAQCAtNjMsMTQgKzYzLDYgQEAgcHVibGljOgogICAgICAgICBPcGFj
aXR5CiAgICAgfTsKIAotICAgIHN0cnVjdCBBbmltYXRpb25TaWduYXR1cmUgewotICAgICAgICBB
bmltYXRpb25TaWduYXR1cmUoaW50IGdyb3VwSWQsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3Bl
cnR5KQotICAgICAgICAgICAgOiBncm91cElkKGdyb3VwSWQpCi0gICAgICAgICAgICAsIHRhcmdl
dFByb3BlcnR5KHRhcmdldFByb3BlcnR5KSB7IH0KLSAgICAgICAgaW50IGdyb3VwSWQ7Ci0gICAg
ICAgIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5OwotICAgIH07Ci0KICAgICBzdGF0aWMg
UGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlKFBhc3NPd25QdHI8Q0NBbmltYXRp
b25DdXJ2ZT4sIGludCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQsIFRhcmdldFByb3BlcnR5KTsK
IAogICAgIHZpcnR1YWwgfkNDQWN0aXZlQW5pbWF0aW9uKCk7CkBAIC0xMDQsOCArOTYsNiBAQCBw
dWJsaWM6CiAgICAgLy8gb2YgaXRlcmF0aW9ucywgcmV0dXJucyB0aGUgcmVsYXRpdmUgdGltZSBp
biB0aGUgY3VycmVudCBpdGVyYXRpb24uCiAgICAgZG91YmxlIHRyaW1UaW1lVG9DdXJyZW50SXRl
cmF0aW9uKGRvdWJsZSBub3cpIGNvbnN0OwogCi0gICAgQW5pbWF0aW9uU2lnbmF0dXJlIHNpZ25h
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIEFuaW1hdGlvblNpZ25hdHVyZShtX2dyb3VwLCBtX3Rhcmdl
dFByb3BlcnR5KTsgfQotCiAgICAgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY2xvbmVG
b3JJbXBsVGhyZWFkKCkgY29uc3Q7CiAKICAgICB2b2lkIHN5bmNocm9uaXplUHJvcGVydGllcyhD
Q0FjdGl2ZUFuaW1hdGlvbiopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVudHMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVudHMuY3BwCmlu
ZGV4IDlmNDE4NDRjYTA1ZDEzN2FjMWVkN2Q4ZjJhNzExOGY0NDQwNjY4MDEuLmI3N2QwMmJlZDlh
YzllMDIyZTFhNDVlY2JiYTBkNzQ2Yjc2MjdmNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlv
bkV2ZW50cy5jcHAKQEAgLTMwLDggKzMwLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1D
Q0FuaW1hdGlvbkV2ZW50OjpDQ0FuaW1hdGlvbkV2ZW50KGludCBsYXllcklkKQorQ0NBbmltYXRp
b25FdmVudDo6Q0NBbmltYXRpb25FdmVudChpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246
OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQogICAgIDogbV9sYXllcklkKGxheWVySWQp
CisgICAgLCBtX3RhcmdldFByb3BlcnR5KHRhcmdldFByb3BlcnR5KQogewogfQogCkBAIC00NSwx
OSArNDYsMjUgQEAgY29uc3QgQ0NBbmltYXRpb25TdGFydGVkRXZlbnQqIENDQW5pbWF0aW9uRXZl
bnQ6OnRvQW5pbWF0aW9uU3RhcnRlZEV2ZW50KCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgQ0NBbmltYXRpb25TdGFydGVkRXZlbnQqPih0aGlzKTsKIH0KIAotY29uc3QgQ0NB
bmltYXRpb25GaW5pc2hlZEV2ZW50KiBDQ0FuaW1hdGlvbkV2ZW50Ojp0b0FuaW1hdGlvbkZpbmlz
aGVkRXZlbnQoKSBjb25zdAorY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQqIEND
QW5pbWF0aW9uRXZlbnQ6OnRvRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50KCkgY29uc3QKIHsK
LSAgICBBU1NFUlQodHlwZSgpID09IEZpbmlzaGVkKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50Kj4odGhpcyk7CisgICAgQVNTRVJUKHR5cGUo
KSA9PSBGaW5pc2hlZEZsb2F0QW5pbWF0aW9uKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQqPih0aGlzKTsKIH0KIAotUGFzc093blB0
cjxDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudD4gQ0NBbmltYXRpb25TdGFydGVkRXZlbnQ6OmNyZWF0
ZShpbnQgbGF5ZXJJZCkKK2NvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCog
Q0NBbmltYXRpb25FdmVudDo6dG9UcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50KGxh
eWVySWQpKTsKKyAgICBBU1NFUlQodHlwZSgpID09IEZpbmlzaGVkVHJhbnNmb3JtQW5pbWF0aW9u
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25GaW5p
c2hlZEV2ZW50Kj4odGhpcyk7CiB9CiAKLUNDQW5pbWF0aW9uU3RhcnRlZEV2ZW50OjpDQ0FuaW1h
dGlvblN0YXJ0ZWRFdmVudChpbnQgbGF5ZXJJZCkKLSAgICA6IENDQW5pbWF0aW9uRXZlbnQobGF5
ZXJJZCkKK1Bhc3NPd25QdHI8Q0NBbmltYXRpb25TdGFydGVkRXZlbnQ+IENDQW5pbWF0aW9uU3Rh
cnRlZEV2ZW50OjpjcmVhdGUoaW50IGxheWVySWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQ
cm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDQW5p
bWF0aW9uU3RhcnRlZEV2ZW50KGxheWVySWQsIHRhcmdldFByb3BlcnR5KSk7Cit9CisKK0NDQW5p
bWF0aW9uU3RhcnRlZEV2ZW50OjpDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudChpbnQgbGF5ZXJJZCwg
Q0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQorICAgIDog
Q0NBbmltYXRpb25FdmVudChsYXllcklkLCB0YXJnZXRQcm9wZXJ0eSkKIHsKIH0KIApAQCAtNzAs
MjQgKzc3LDQ0IEBAIENDQW5pbWF0aW9uRXZlbnQ6OlR5cGUgQ0NBbmltYXRpb25TdGFydGVkRXZl
bnQ6OnR5cGUoKSBjb25zdAogICAgIHJldHVybiBTdGFydGVkOwogfQogCi1QYXNzT3duUHRyPEND
QW5pbWF0aW9uRmluaXNoZWRFdmVudD4gQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50OjpjcmVhdGUo
aW50IGxheWVySWQsIGludCBhbmltYXRpb25JZCkKK1Bhc3NPd25QdHI8Q0NGbG9hdEFuaW1hdGlv
bkZpbmlzaGVkRXZlbnQ+IENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50OjpjcmVhdGUoaW50
IGxheWVySWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0
eSwgZmxvYXQgZmluYWxWYWx1ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDRmxvYXRB
bmltYXRpb25GaW5pc2hlZEV2ZW50KGxheWVySWQsIHRhcmdldFByb3BlcnR5LCBmaW5hbFZhbHVl
KSk7Cit9CisKK0NDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50OjpDQ0Zsb2F0QW5pbWF0aW9u
RmluaXNoZWRFdmVudChpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3Bl
cnR5IHRhcmdldFByb3BlcnR5LCBmbG9hdCBmaW5hbFZhbHVlKQorICAgIDogQ0NBbmltYXRpb25F
dmVudChsYXllcklkLCB0YXJnZXRQcm9wZXJ0eSkKKyAgICAsIG1fZmluYWxWYWx1ZShmaW5hbFZh
bHVlKQoreworfQorCitDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudDo6fkNDRmxvYXRBbmlt
YXRpb25GaW5pc2hlZEV2ZW50KCkKK3sKK30KKworQ0NBbmltYXRpb25FdmVudDo6VHlwZSBDQ0Zs
b2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudDo6dHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZp
bmlzaGVkRmxvYXRBbmltYXRpb247Cit9CisKK1Bhc3NPd25QdHI8Q0NUcmFuc2Zvcm1BbmltYXRp
b25GaW5pc2hlZEV2ZW50PiBDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OmNyZWF0
ZShpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFBy
b3BlcnR5LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZmluYWxWYWx1ZSkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRmluaXNoZWRFdmVudChsYXllcklkLCBhbmlt
YXRpb25JZCkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NUcmFuc2Zvcm1BbmltYXRpb25G
aW5pc2hlZEV2ZW50KGxheWVySWQsIHRhcmdldFByb3BlcnR5LCBmaW5hbFZhbHVlKSk7CiB9CiAK
LUNDQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Q0NBbmltYXRpb25GaW5pc2hlZEV2ZW50KGludCBs
YXllcklkLCBpbnQgYW5pbWF0aW9uSWQpCi0gICAgOiBDQ0FuaW1hdGlvbkV2ZW50KGxheWVySWQp
Ci0gICAgLCBtX2FuaW1hdGlvbklkKGFuaW1hdGlvbklkKQorQ0NUcmFuc2Zvcm1BbmltYXRpb25G
aW5pc2hlZEV2ZW50OjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQoaW50IGxheWVy
SWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZpbmFsVmFsdWUpCisgICAgOiBDQ0FuaW1hdGlvbkV2
ZW50KGxheWVySWQsIHRhcmdldFByb3BlcnR5KQorICAgICwgbV9maW5hbFZhbHVlKGZpbmFsVmFs
dWUpCiB7CiB9CiAKLUNDQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6fkNDQW5pbWF0aW9uRmluaXNo
ZWRFdmVudCgpCitDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6On5DQ1RyYW5zZm9y
bUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQoKQogewogfQogCi1DQ0FuaW1hdGlvbkV2ZW50OjpUeXBl
IENDQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6dHlwZSgpIGNvbnN0CitDQ0FuaW1hdGlvbkV2ZW50
OjpUeXBlIENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6dHlwZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIEZpbmlzaGVkOworICAgIHJldHVybiBGaW5pc2hlZFRyYW5zZm9ybUFuaW1h
dGlvbjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVudHMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9u
RXZlbnRzLmgKaW5kZXggZGE5NGUxZTI3ZDEzODg0NWI4OTNkNTYwOGZiODZjNjRhYmY5YTI3OS4u
ZTI0Zjc1ZGM3YzFiM2VjNTI4NTAxOGNkZTFhZjk3YjgzYWE0ZDY5NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVu
dHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0FuaW1hdGlvbkV2ZW50cy5oCkBAIC0yNSwxNyArMjUsMjAgQEAKICNpZm5kZWYgQ0NBbmltYXRp
b25FdmVudHNfaAogI2RlZmluZSBDQ0FuaW1hdGlvbkV2ZW50c19oCiAKKyNpbmNsdWRlICJjYy9D
Q0FjdGl2ZUFuaW1hdGlvbi5oIgorCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NBbmlt
YXRpb25TdGFydGVkRXZlbnQ7Ci1jbGFzcyBDQ0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQ7CitjbGFz
cyBDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudDsKK2NsYXNzIENDVHJhbnNmb3JtQW5pbWF0
aW9uRmluaXNoZWRFdmVudDsKIAogY2xhc3MgQ0NBbmltYXRpb25FdmVudCB7CiBwdWJsaWM6Ci0g
ICAgZW51bSBUeXBlIHsgU3RhcnRlZCwgRmluaXNoZWQgfTsKKyAgICBlbnVtIFR5cGUgeyBTdGFy
dGVkLCBGaW5pc2hlZEZsb2F0QW5pbWF0aW9uLCBGaW5pc2hlZFRyYW5zZm9ybUFuaW1hdGlvbiB9
OwogCiAgICAgdmlydHVhbCB+Q0NBbmltYXRpb25FdmVudCgpOwogCkBAIC00Myw0NCArNDYsNjUg
QEAgcHVibGljOgogCiAgICAgaW50IGxheWVySWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7
IH0KIAorICAgIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UHJvcGVydHk7IH0KKwogICAgIGNvbnN0IENDQW5p
bWF0aW9uU3RhcnRlZEV2ZW50KiB0b0FuaW1hdGlvblN0YXJ0ZWRFdmVudCgpIGNvbnN0OwotICAg
IGNvbnN0IENDQW5pbWF0aW9uRmluaXNoZWRFdmVudCogdG9BbmltYXRpb25GaW5pc2hlZEV2ZW50
KCkgY29uc3Q7CisgICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQqIHRvRmxv
YXRBbmltYXRpb25GaW5pc2hlZEV2ZW50KCkgY29uc3Q7CisgICAgY29uc3QgQ0NUcmFuc2Zvcm1B
bmltYXRpb25GaW5pc2hlZEV2ZW50KiB0b1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQo
KSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIENDQW5pbWF0aW9uRXZlbnQoaW50IGxheWVySWQp
OworICAgIENDQW5pbWF0aW9uRXZlbnQoaW50IGxheWVySWQsIENDQWN0aXZlQW5pbWF0aW9uOjpU
YXJnZXRQcm9wZXJ0eSk7CiAKIHByaXZhdGU6CiAgICAgaW50IG1fbGF5ZXJJZDsKKyAgICBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgbV90YXJnZXRQcm9wZXJ0eTsKIH07CiAKIC8v
IEluZGljYXRlcyB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgc3RhcnRlZCBvbiBhIHBhcnRpY3VsYXIg
bGF5ZXIuCiBjbGFzcyBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudCA6IHB1YmxpYyBDQ0FuaW1hdGlv
bkV2ZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ0FuaW1hdGlvblN0YXJ0
ZWRFdmVudD4gY3JlYXRlKGludCBsYXllcklkKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0Fu
aW1hdGlvblN0YXJ0ZWRFdmVudD4gY3JlYXRlKGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VGFyZ2V0UHJvcGVydHkpOwogCiAgICAgdmlydHVhbCB+Q0NBbmltYXRpb25TdGFydGVkRXZl
bnQoKTsKIAogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAg
ZXhwbGljaXQgQ0NBbmltYXRpb25TdGFydGVkRXZlbnQoaW50IGxheWVySWQpOworICAgIENDQW5p
bWF0aW9uU3RhcnRlZEV2ZW50KGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0
UHJvcGVydHkpOwogfTsKIAotLy8gSW5kaWNhdGVzIHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBzdGFy
dGVkIG9uIGEgcGFydGljdWxhciBsYXllci4KLWNsYXNzIENDQW5pbWF0aW9uRmluaXNoZWRFdmVu
dCA6IHB1YmxpYyBDQ0FuaW1hdGlvbkV2ZW50IHsKKy8vIEluZGljYXRlcyB0aGF0IGEgZmxvYXQg
YW5pbWF0aW9uIGhhcyBjb21wbGV0ZWQuCitjbGFzcyBDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRF
dmVudCA6IHB1YmxpYyBDQ0FuaW1hdGlvbkV2ZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudD4gY3JlYXRlKGludCBsYXllcklk
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHksIGZsb2F0IGZpbmFsVmFsdWUpOwor
CisgICAgdmlydHVhbCB+Q0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQoKTsKKworICAgIHZp
cnR1YWwgVHlwZSB0eXBlKCkgY29uc3Q7CisKKyAgICBmbG9hdCBmaW5hbFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV9maW5hbFZhbHVlOyB9CisKK3ByaXZhdGU6CisgICAgQ0NGbG9hdEFuaW1hdGlv
bkZpbmlzaGVkRXZlbnQoaW50IGxheWVySWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9w
ZXJ0eSwgZmxvYXQgZmluYWxWYWx1ZSk7CisKKyAgICBmbG9hdCBtX2ZpbmFsVmFsdWU7Cit9Owor
CisvLyBJbmRpY2F0ZXMgdGhhdCBhIHRyYW5zZm9ybSBhbmltYXRpb24gaGFzIGNvbXBsZXRlZC4K
K2NsYXNzIENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCA6IHB1YmxpYyBDQ0FuaW1h
dGlvbkV2ZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ0FuaW1hdGlvbkZp
bmlzaGVkRXZlbnQ+IGNyZWF0ZShpbnQgbGF5ZXJJZCwgaW50IGFuaW1hdGlvbklkKTsKKyAgICBz
dGF0aWMgUGFzc093blB0cjxDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ+IGNyZWF0
ZShpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgZmluYWxWYWx1ZSk7CiAKLSAgICB2aXJ0dWFsIH5DQ0FuaW1h
dGlvbkZpbmlzaGVkRXZlbnQoKTsKKyAgICB2aXJ0dWFsIH5DQ1RyYW5zZm9ybUFuaW1hdGlvbkZp
bmlzaGVkRXZlbnQoKTsKIAogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3Q7CiAKLSAgICBp
bnQgYW5pbWF0aW9uSWQoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbklkOyB9CisgICAgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZpbmFsVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Zp
bmFsVmFsdWU7IH0KIAogcHJpdmF0ZToKLSAgICBDQ0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQoaW50
IGxheWVySWQsIGludCBhbmltYXRpb25JZCk7CisgICAgQ0NUcmFuc2Zvcm1BbmltYXRpb25GaW5p
c2hlZEV2ZW50KGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHks
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmaW5hbFZhbHVlKTsKIAotICAgIGludCBtX2Fu
aW1hdGlvbklkOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZmluYWxWYWx1ZTsKIH07CiAK
IHR5cGVkZWYgVmVjdG9yPE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50PiA+IENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwCmluZGV4IDMzNWQzYTU4ZTk4YWVkMjk3ZWU1NDA1NGI1NGQwNDg1MDg1MTcxYjIuLjM3
M2IwY2JiNjZhNzhmMzU0ZGNmNDRiYTgyYTdmNjYxMDY0NzgwMjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTI3LDkgKzI3LDEwIEBA
CiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUg
IkdyYXBoaWNzTGF5ZXIuaCIgLy8gZm9yIEtleWZyYW1lVmFsdWVMaXN0CisjaW5jbHVkZSAiVHJh
bnNmb3JtT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAj
aW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ0tleWZyYW1l
ZEFuaW1hdGlvbkN1cnZlLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KIApAQCAtNTYsMTAgKzU3LDYgQEAgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWwKICAg
ICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEaXJlY3Rpb25TZXQoKSAmJiBhbmltYXRp
b24tPmRpcmVjdGlvbigpID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRl
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBm
b3IgZGVsYXkKLSAgICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEZWxheVNldCgpICYm
IGFuaW1hdGlvbi0+ZGVsYXkoKSA+IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAg
Ly8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciBmaWxscyBmb3J3YXJkcyBhbmQgZmlsbHMgYmFja3dh
cmRzCiAgICAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24tPmlzRmlsbE1vZGVTZXQoKSAmJiAo
YW5pbWF0aW9uLT5maWxsc0ZvcndhcmRzKCkgfHwgYW5pbWF0aW9uLT5maWxsc0JhY2t3YXJkcygp
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDUsNyArMTAyLDggQEAgUGFzc093blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1l
VmFsdWVMaXN0JiB2YWwKIAogfSAvLyBuYW1lcGFjZQogCi1DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKQorQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCiB7CiB9CiAKQEAgLTEx
Myw5ICsxMTEsOSBAQCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6fkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKCkKIHsKIH0KIAotUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcj4gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpCitQYXNzT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3Jl
YXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik7CisgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcihjbGllbnQpKTsKIH0KIAog
Ym9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZy
YW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEludFNpemUmLCBjb25zdCBBbmltYXRpb24q
IGFuaW1hdGlvbiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZz
ZXQpCkBAIC0xNjcsMzIgKzE2NSw3MSBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpyZXN1bWVBbmltYXRpb25zKCkKIAogLy8gRW5zdXJlcyB0aGF0IHRoZSBsaXN0IG9mIGFjdGl2
ZSBhbmltYXRpb25zIG9uIHRoZSBtYWluIHRocmVhZCBhbmQgdGhlIGltcGwgdGhyZWFkCiAvLyBh
cmUga2VwdCBpbiBzeW5jLgotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3luY2hy
b25pemVBbmltYXRpb25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxl
ckltcGwpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uVXBk
YXRlc1RvKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKiBjb250cm9sbGVySW1wbCkKIHsKLSAg
ICByZW1vdmVDb21wbGV0ZWRBbmltYXRpb25zKGNvbnRyb2xsZXJJbXBsKTsKICAgICBwdXNoTmV3
QW5pbWF0aW9uc1RvSW1wbFRocmVhZChjb250cm9sbGVySW1wbCk7CiAgICAgcmVtb3ZlQW5pbWF0
aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChjb250cm9sbGVySW1wbCk7Ci0gICAgcHVzaEFuaW1h
dGlvblByb3BlcnRpZXMoY29udHJvbGxlckltcGwpOwogfQogCi12b2lkIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpyZW1vdmVDb21wbGV0ZWRBbmltYXRpb25zKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjphbmltYXRlKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1Zl
Y3RvciogZXZlbnRzKQoreworICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayht
b25vdG9uaWNUaW1lLCBldmVudHMpOworICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFy
dFRpbWUobW9ub3RvbmljVGltZSwgZXZlbnRzKTsKKyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5n
Rm9yVGFyZ2V0QXZhaWxhYmlsaXR5KG1vbm90b25pY1RpbWUsIGV2ZW50cyk7CisgICAgcmVzb2x2
ZUNvbmZsaWN0cyhtb25vdG9uaWNUaW1lKTsKKyAgICB0aWNrQW5pbWF0aW9ucyhtb25vdG9uaWNU
aW1lKTsKKyAgICBwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucyhldmVudHMpOworICAgIHN0YXJ0QW5p
bWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkobW9ub3RvbmljVGltZSwgZXZlbnRz
KTsKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkKFBhc3NPd25QdHI8
Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0pCit7CisgICAgbV9hY3RpdmVBbmltYXRpb25zLmFwcGVu
ZChhbmltKTsKK30KKworQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpnZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpU
YXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKIHsKLSAgICAvLyBBbnkgYW5pbWF0aW9ucyBm
aW5pc2hlZCBvbiB0aGUgaW1wbCB0aHJlYWQgYXJlIHJlbW92ZWQgZnJvbSB0aGUgbWFpbiB0aHJl
YWQncyBjb2xsZWN0aW9uLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udHJvbGxlcklt
cGwtPm1fZmluaXNoZWRBbmltYXRpb25zLnNpemUoKTsgKytpKQotICAgICAgICByZW1vdmUoY29u
dHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zW2ldLmdyb3VwSWQsIGNvbnRyb2xsZXJJ
bXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9uc1tpXS50YXJnZXRQcm9wZXJ0eSk7Ci0gICAgY29udHJv
bGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zLmNsZWFyKCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmICht
X2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3JvdXBJZCAmJiBtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisgICAgICAgICAg
ICByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpOworICAgIHJldHVybiAwOwogfQog
Ci12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoTmV3QW5pbWF0aW9uc1RvSW1w
bFRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQor
Ym9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29u
c3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgp
ICE9IENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjppc0FuaW1hdGluZ1Byb3BlcnR5KENDQWN0aXZlQW5pbWF0aW9u
OjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9u
OjpGaW5pc2hlZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3Rp
dmVBbmltYXRpb246OkFib3J0ZWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9w
ZXJ0eSgpID09IHRhcmdldFByb3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6cHVzaE5ld0FuaW1hdGlvbnNUb0ltcGxUaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIqIGNvbnRyb2xsZXJJbXBsKQogewogICAgIC8vIEFueSBuZXcgYW5pbWF0aW9ucyBvd25lZCBi
eSB0aGUgbWFpbiB0aHJlYWQncyBjb250cm9sbGVyIGFyZSBjbG9uZWQgYW5kIGFkZGUgdG8gdGhl
IGltcGwgdGhyZWFkJ3MgY29udHJvbGxlci4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWNvbnRyb2xsZXJJ
bXBsLT5nZXRBY3RpdmVBbmltYXRpb24obV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpLCBt
X2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpKQotICAgICAgICAgICAgY29u
dHJvbGxlckltcGwtPmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmNsb25lRm9ySW1wbFRocmVh
ZCgpKTsKKyAgICAgICAgaWYgKCFjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSwgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJn
ZXRQcm9wZXJ0eSgpKSkgeworICAgICAgICAgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0
b0FkZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmNsb25lRm9ySW1wbFRocmVhZCgpKTsKKyAgICAg
ICAgICAgIC8vIElmIHRoZSBhbmltYXRpb24gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyAtLSBzZXQg
aXQgdG8gYmUgd2FpdGluZyB1bnRpbCB0aGUgdGFyZ2V0IGlzIGF2YWlsYWJsZS4KKyAgICAgICAg
ICAgIC8vIFRoYXQgd2F5LCBpdCB3aWxsIGhhdmUgYSBjaGFuY2UgdG8gc3RhcnQgb24gdGhlIGlt
cGwgdGhyZWFkLiBPdGhlcndpc2UsIHdlIHdpbGwgbmV2ZXIgdGljayBhdCB0aGUKKyAgICAgICAg
ICAgIC8vIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBhbmltYXRpb24uCisgICAgICAgICAgICBpZiAo
dG9BZGQtPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcgfHwgdG9BZGQt
PnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCkKKyAgICAgICAgICAgICAg
ICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRB
dmFpbGFiaWxpdHksIDApOworICAgICAgICAgICAgY29udHJvbGxlckltcGwtPmFkZCh0b0FkZC5y
ZWxlYXNlKCkpOworICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpyZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCit2b2lkIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKiBjb250cm9sbGVySW1wbCkKIHsKICAgICAvLyBEZWxl
dGUgYWxsIGltcGwgdGhyZWFkIGFuaW1hdGlvbnMgZm9yIHdoaWNoIHRoZXJlIGlzIG5vIGNvcnJl
c3BvbmRpbmcgbWFpbiB0aHJlYWQgYW5pbWF0aW9uLgogICAgIC8vIEVhY2ggaXRlcmF0aW9uLCBj
b250cm9sbGVyLT5tX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpIGlzIGRlY3JlbWVudGVkIG9yIGkg
aXMgaW5jcmVtZW50ZWQKQEAgLTIwNiwzNiArMjQzLDE3MSBAQCB2b2lkIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKENDTGF5
ZXJBbgogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaEFu
aW1hdGlvblByb3BlcnRpZXMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9s
bGVySW1wbCkKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN0YXJ0QW5pbWF0aW9u
c1dhaXRpbmdGb3JOZXh0VGljayhkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVu
dHNWZWN0b3IqIGV2ZW50cykKIHsKLSAgICAvLyBEZWxldGUgYWxsIGltcGwgdGhyZWFkIGFuaW1h
dGlvbnMgZm9yIHdoaWNoIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgbWFpbiB0aHJlYWQgYW5p
bWF0aW9uLgotICAgIC8vIEVhY2ggaXRlcmF0aW9uLCBjb250cm9sbGVyLT5tX2FjdGl2ZUFuaW1h
dGlvbnMuc2l6ZSgpIGlzIGRlY3JlbWVudGVkIG9yIGkgaXMgaW5jcmVtZW50ZWQKLSAgICAvLyBn
dWFyYW50ZWVpbmcgcHJvZ3Jlc3MgdG93YXJkcyBsb29wIHRlcm1pbmF0aW9uLgotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkgewotICAgICAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogY3VycmVudEltcGwgPSBjb250
cm9sbGVySW1wbC0+bV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpOwotICAgICAgICBDQ0FjdGl2
ZUFuaW1hdGlvbiogY3VycmVudCA9IGdldEFjdGl2ZUFuaW1hdGlvbihjdXJyZW50SW1wbC0+Z3Jv
dXAoKSwgY3VycmVudEltcGwtPnRhcmdldFByb3BlcnR5KCkpOwotICAgICAgICBBU1NFUlQoY3Vy
cmVudCk7Ci0gICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAgY3VycmVudC0+c3luY2hy
b25pemVQcm9wZXJ0aWVzKGN1cnJlbnRJbXBsKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVB
bmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9y
TmV4dFRpY2spIHsKKyAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3Rh
dGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG1vbm90b25pY1RpbWUpOworICAgICAgICAg
ICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRTdGFydFRpbWUobW9ub3RvbmljVGltZSk7Cisg
ICAgICAgICAgICBpZiAoZXZlbnRzKQorICAgICAgICAgICAgICAgIGV2ZW50cy0+YXBwZW5kKEND
QW5pbWF0aW9uU3RhcnRlZEV2ZW50OjpjcmVhdGUobV9jbGllbnQtPmlkKCksIG1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSkpOworICAgICAgICB9CiAgICAgfQogfQogCi1D
Q0FjdGl2ZUFuaW1hdGlvbiogQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmdldEFjdGl2ZUFu
aW1hdGlvbihpbnQgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRh
cmdldFByb3BlcnR5KQordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3RhcnRBbmlt
YXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRp
b25FdmVudHNWZWN0b3IqIGV2ZW50cykKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cElkICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFy
Z2V0UHJvcGVydHkoKSA9PSB0YXJnZXRQcm9wZXJ0eSkKLSAgICAgICAgICAgIHJldHVybiBtX2Fj
dGl2ZUFuaW1hdGlvbnNbaV0uZ2V0KCk7Ci0gICAgcmV0dXJuIDA7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6
V2FpdGluZ0ZvclN0YXJ0VGltZSAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnN0YXJ0VGltZSgp
IDw9IG1vbm90b25pY1RpbWUpIHsKKyAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+
c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG1vbm90b25pY1RpbWUpOwor
ICAgICAgICAgICAgaWYgKGV2ZW50cykKKyAgICAgICAgICAgICAgICBldmVudHMtPmFwcGVuZChD
Q0FuaW1hdGlvblN0YXJ0ZWRFdmVudDo6Y3JlYXRlKG1fY2xpZW50LT5pZCgpLCBtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAot
dm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlKGludCBncm91cElkLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCit2b2lkIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZh
aWxhYmlsaXR5KGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvciog
ZXZlbnRzKQogeworICAgIC8vIEZpcnN0IGNvbGxlY3QgcnVubmluZyBwcm9wZXJ0aWVzLgorICAg
IFRhcmdldFByb3BlcnRpZXMgYmxvY2tlZFByb3BlcnRpZXM7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cElkICYmIG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSB0YXJnZXRQcm9wZXJ0eSkgewotICAgICAgICAg
ICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFu
aW1hdGlvbjo6UnVubmluZyB8fCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0g
Q0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkKQorICAgICAgICAgICAgYmxvY2tlZFByb3BlcnRp
ZXMuYWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSk7CisgICAgfQor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBD
Q0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSkgeworICAgICAg
ICAgICAgLy8gQ29sbGVjdCBhbGwgcHJvcGVydGllcyBmb3IgYW5pbWF0aW9ucyB3aXRoIHRoZSBz
YW1lIGdyb3VwIGlkICh0aGV5IHNob3VsZCBhbGwgYWxzbyBiZSBpbiB0aGUgbGlzdCBvZiBhbmlt
YXRpb25zKS4KKyAgICAgICAgICAgIFRhcmdldFByb3BlcnRpZXMgZW5xdWV1ZWRQcm9wZXJ0aWVz
OworICAgICAgICAgICAgZW5xdWV1ZWRQcm9wZXJ0aWVzLmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPnRhcmdldFByb3BlcnR5KCkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAx
OyBqIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAg
aWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBtX2FjdGl2ZUFuaW1hdGlvbnNb
al0tPmdyb3VwKCkpCisgICAgICAgICAgICAgICAgICAgIGVucXVldWVkUHJvcGVydGllcy5hZGQo
bV9hY3RpdmVBbmltYXRpb25zW2pdLT50YXJnZXRQcm9wZXJ0eSgpKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGludGVyc2VjdGlvbiBvZiB0aGUgbGlz
dCBvZiBwcm9wZXJ0aWVzIGFmZmVjdGVkIGJ5IHRoZSBncm91cCBhbmQgdGhlIGxpc3Qgb2YgY3Vy
cmVudGx5CisgICAgICAgICAgICAvLyBibG9ja2VkIHByb3BlcnRpZXMgaXMgbnVsbC4gSW4gYW55
IGNhc2UsIHRoZSBncm91cCdzIHRhcmdldCBwcm9wZXJ0aWVzIG5lZWQgdG8gYmUgYWRkZWQgdG8g
dGhlIGxpc3QKKyAgICAgICAgICAgIC8vIG9mIGJsb2NrZWQgcHJvcGVydGllcy4KKyAgICAgICAg
ICAgIGJvb2wgbnVsbEludGVyc2VjdGlvbiA9IHRydWU7CisgICAgICAgICAgICBmb3IgKFRhcmdl
dFByb3BlcnRpZXM6Oml0ZXJhdG9yIHBJdGVyID0gZW5xdWV1ZWRQcm9wZXJ0aWVzLmJlZ2luKCk7
IHBJdGVyICE9IGVucXVldWVkUHJvcGVydGllcy5lbmQoKTsgKytwSXRlcikgeworICAgICAgICAg
ICAgICAgIGlmICghYmxvY2tlZFByb3BlcnRpZXMuYWRkKCpwSXRlcikuc2Vjb25kKQorICAgICAg
ICAgICAgICAgICAgICBudWxsSW50ZXJzZWN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIElmIHRoZSBpbnRlcnNlY3Rpb24gaXMgbnVsbCwgdGhlbiB3ZSBhcmUg
ZnJlZSB0byBzdGFydCB0aGUgYW5pbWF0aW9ucyBpbiB0aGUgZ3JvdXAuCisgICAgICAgICAgICBp
ZiAobnVsbEludGVyc2VjdGlvbikgeworICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG1vbm90b25pY1Rp
bWUpOworICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0U3RhcnRUaW1l
KG1vbm90b25pY1RpbWUpOworICAgICAgICAgICAgICAgIGlmIChldmVudHMpCisgICAgICAgICAg
ICAgICAgICAgIGV2ZW50cy0+YXBwZW5kKENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50OjpjcmVhdGUo
bV9jbGllbnQtPmlkKCksIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSkp
OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5p
bWF0aW9ucy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVB
bmltYXRpb25zW2ldLT5ncm91cCgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRSdW5T
dGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbW9ub3RvbmljVGltZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnNldFN0YXJ0VGltZShtb25v
dG9uaWNUaW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6cmVzb2x2ZUNvbmZsaWN0cyhkb3VibGUgbW9ub3RvbmljVGltZSkKK3sKKyAg
ICAvLyBGaW5kIGFueSBhbmltYXRpb25zIHRoYXQgYXJlIGFuaW1hdGluZyB0aGUgc2FtZSBwcm9w
ZXJ0eSBhbmQgcmVzb2x2ZSB0aGUKKyAgICAvLyBjb25maWN0LiBXZSBjb3VsZCBldmVudHVhbGx5
IGJsZW5kLCBidXQgZm9yIG5vdyB3ZSdsbCBqdXN0IGFib3J0IHRoZQorICAgIC8vIHByZXZpb3Vz
IGFuaW1hdGlvbiAod2hlcmUgJ3ByZXZpb3VzJyBtZWFuczogKDEpIGhhcyBhIHByaW9yIHN0YXJ0
IHRpbWUgb3IKKyAgICAvLyAoMikgaGFzIGFuIGVxdWFsIHN0YXJ0IHRpbWUsIGJ1dCB3YXMgYWRk
ZWQgdG8gdGhlIHF1ZXVlIGVhcmxpZXIsIGkuZS4sCisgICAgLy8gaGFzIGEgbG93ZXIgaW5kZXgg
aW4gbV9hY3RpdmVBbmltYXRpb25zKS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0
aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRp
b25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nKSB7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6
ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2pdLT5y
dW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nICYmIG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnRhcmdl
dFByb3BlcnR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+c3RhcnRUaW1lKCkgPiBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnN0YXJ0VGltZSgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRSdW5TdGF0
ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgbW9ub3RvbmljVGltZSk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQsIG1vbm90b25pY1Rp
bWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
IH0KIAordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVyZ2VGaW5pc2hlZEFuaW1h
dGlvbnMoQ0NBbmltYXRpb25FdmVudHNWZWN0b3IqIGV2ZW50cykKK3sKKyAgICAvLyBFYWNoIGl0
ZXJhdGlvbiwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKSBkZWNyZWFzZXMgb3IgaSBpbmNyZW1l
bnRzLAorICAgIC8vIGd1YXJhbnRlZWluZyBwcm9ncmVzcyB0b3dhcmRzIGxvb3AgdGVybWluYXRp
b24uCisgICAgc2l6ZV90IGkgPSAwOworICAgIHdoaWxlIChpIDwgbV9hY3RpdmVBbmltYXRpb25z
LnNpemUoKSkgeworICAgICAgICBpbnQgZ3JvdXBJZCA9IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+
Z3JvdXAoKTsKKyAgICAgICAgYm9vbCBhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCA9IGZh
bHNlOworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5pc0ZpbmlzaGVkKCkpIHsK
KyAgICAgICAgICAgIGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsg
KytqKSB7CisgICAgICAgICAgICAgICAgaWYgKGdyb3VwSWQgPT0gbV9hY3RpdmVBbmltYXRpb25z
W2pdLT5ncm91cCgpICYmICFtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPmlzRmluaXNoZWQoKSkgewor
ICAgICAgICAgICAgICAgICAgICBhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlz
aGVkKSB7CisgICAgICAgICAgICAvLyBXZSBub3cgbmVlZCB0byByZW1vdmUgYWxsIGFuaW1hdGlv
bnMgd2l0aCB0aGUgc2FtZSBncm91cCBpZCBhcyBncm91cElkCisgICAgICAgICAgICAvLyAoYW5k
IHNlbmQgYWxvbmcgYW5pbWF0aW9uIGZpbmlzaGVkIG5vdGlmaWNhdGlvbnMsIGlmIG5lY2Vzc2Fy
eSkuCisgICAgICAgICAgICAvLyBFYWNoIGl0ZXJhdGlvbiwgbV9hY3RpdmVBbmltYXRpb25zLnNp
emUoKSBkZWNyZWFzZXMgb3IgaiBpbmNyZW1lbnRzLAorICAgICAgICAgICAgLy8gZ3VhcmFudGVl
aW5nIHByb2dyZXNzIHRvd2FyZHMgbG9vcCB0ZXJtaW5hdGlvbi4gQWxzbywgd2UgYXJlIGd1YXJh
bnRlZWQKKyAgICAgICAgICAgIC8vIHRvIHJlbW92ZSBhdCBsZWFzdCBvbmUgYWN0aXZlIGFuaW1h
dGlvbi4KKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpOyBqIDwgbV9hY3RpdmVBbmltYXRp
b25zLnNpemUoKTspIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3JvdXBJZCAhPSBtX2FjdGl2ZUFu
aW1hdGlvbnNbal0tPmdyb3VwKCkpCisgICAgICAgICAgICAgICAgICAgIGorKzsKKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50cykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnRhcmdldFBy
b3BlcnR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzLT5hcHBlbmQo
Q0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OmNyZWF0ZShtX2NsaWVudC0+aWQoKSwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHksIG1fY2xpZW50LT5hbmltYXRlZE9wYWNpdHkoKSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV2ZW50cy0+YXBwZW5kKENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVu
dDo6Y3JlYXRlKG1fY2xpZW50LT5pZCgpLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtLCBt
X2NsaWVudC0+YW5pbWF0ZWRUcmFuc2Zvcm0oKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGkrKzsKKyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnRp
Y2tBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1lKQoreworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICht
X2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OlJ1
bm5pbmcpIHsKKyAgICAgICAgICAgIGRvdWJsZSB0cmltbWVkID0gbV9hY3RpdmVBbmltYXRpb25z
W2ldLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbihtb25vdG9uaWNUaW1lKTsKKworICAgICAg
ICAgICAgc3dpdGNoIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpIHsK
KworICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtOiB7CisgICAg
ICAgICAgICAgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogdHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUgPSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmN1cnZlKCktPnRvVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtYXRyaXggPSB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS0+Z2V0VmFsdWUodHJpbW1lZCwg
bV9jbGllbnQtPmJvdW5kcygpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRp
b25zW2ldLT5pc0ZpbmlzaGVkQXQobW9ub3RvbmljVGltZSkpCisgICAgICAgICAgICAgICAgICAg
IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkZp
bmlzaGVkLCBtb25vdG9uaWNUaW1lKTsKKworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5zZXRB
bmltYXRlZFRyYW5zZm9ybShtYXRyaXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBjYXNlIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5OiB7
CisgICAgICAgICAgICAgICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlKiBmbG9hdEFuaW1h
dGlvbkN1cnZlID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT5jdXJ2ZSgpLT50b0Zsb2F0QW5pbWF0
aW9uQ3VydmUoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBvcGFjaXR5ID0gZmxvYXRB
bmltYXRpb25DdXJ2ZS0+Z2V0VmFsdWUodHJpbW1lZCk7CisgICAgICAgICAgICAgICAgaWYgKG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG1vbm90b25pY1RpbWUpKQorICAgICAg
ICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZl
QW5pbWF0aW9uOjpGaW5pc2hlZCwgbW9ub3RvbmljVGltZSk7CisKKyAgICAgICAgICAgICAgICBt
X2NsaWVudC0+c2V0QW5pbWF0ZWRPcGFjaXR5KG9wYWNpdHkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9IC8vIHN3aXRjaAorICAgICAgICB9
IC8vIGlmIHJ1bm5pbmcKKyAgICB9IC8vIGZvciBlYWNoIGFuaW1hdGlvbgorfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIuaAppbmRleCAwNjgyMTMwNDdmNDJhYzViMmEzMWIwYjY2ZGY3Mzc0NWQyYzVmMjI0Li5m
ZDQ1ZWNjNDI5ZGE3NGE4MDVlZTcxZmI5ZmUyZjQwY2NjNDljYmE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKQEAgLTI2LDI2ICsyNiw0MiBAQAog
I2RlZmluZSBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcl9oCiAKICNpbmNsdWRlICJjYy9DQ0Fj
dGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNs
dWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgogCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQW5pbWF0aW9uOwotY2xhc3MgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsOwogY2xhc3MgSW50U2l6ZTsKIGNsYXNzIEtleWZyYW1lVmFsdWVM
aXN0OworY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CitjbGFzcyBUcmFuc2Zvcm1PcGVyYXRp
b25zOworCitjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQoKSB7IH0KKwor
ICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRBbmlt
YXRlZE9wYWNpdHkoZmxvYXQpID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IGFuaW1hdGVkT3BhY2l0
eSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5pbWF0ZWRUcmFuc2Zvcm0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7CisgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgYW5pbWF0ZWRUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCA9IDA7Cit9OwogCiBjbGFzcyBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyPiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyQ2xpZW50Kik7CiAKICAgICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigp
OwogCi0gICAgLy8gVGhlc2UgYXJlIHZpcnR1YWwgZm9yIHRlc3RpbmcuCisgICAgLy8gVGhlc2Ug
bWV0aG9kcyBhcmUgdmlydHVhbCBmb3IgdGVzdGluZy4KICAgICB2aXJ0dWFsIGJvb2wgYWRkQW5p
bWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwg
Y29uc3QgQW5pbWF0aW9uKiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRp
bWVPZmZzZXQpOwogICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9u
SWQsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9u
KGludCBhbmltYXRpb25JZCk7CkBAIC01NCwyMiArNzAsNDEgQEAgcHVibGljOgogCiAgICAgLy8g
RW5zdXJlcyB0aGF0IHRoZSBsaXN0IG9mIGFjdGl2ZSBhbmltYXRpb25zIG9uIHRoZSBtYWluIHRo
cmVhZCBhbmQgdGhlIGltcGwgdGhyZWFkCiAgICAgLy8gYXJlIGtlcHQgaW4gc3luYy4gVGhpcyBm
dW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgaW1wbCB0aHJlYWQgY29udHJv
bGxlci4KLSAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVBbmltYXRpb25zKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbCopOworICAgIHZpcnR1YWwgdm9pZCBwdXNoQW5pbWF0aW9uVXBk
YXRlc1RvKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKik7CisKKyAgICB2b2lkIGFuaW1hdGUo
ZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKik7CiAKLSAgICBi
b29sIGhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9u
cy5zaXplKCk7IH0KKyAgICB2b2lkIGFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPik7
CisKKyAgICAvLyBSZXR1cm5zIHRoZSBhY3RpdmUgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBncm91
cCwgYW5pbWF0aW5nIHRoZSBnaXZlbiBwcm9wZXJ0eSBpZiBzdWNoIGFuCisgICAgLy8gYW5pbWF0
aW9uIGV4aXN0cy4KICAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKGlu
dCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOwogCisgICAgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBhbnkgYW5pbWF0aW9ucyB0aGF0IGhhdmUgbmVpdGhl
ciBmaW5pc2hlZCBub3IgYWJvcnRlZC4KKyAgICBib29sIGhhc0FjdGl2ZUFuaW1hdGlvbigpIGNv
bnN0OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGFuaW1hdGlvbiBjdXJy
ZW50bHkgYW5pbWF0aW5nIHRoZSBnaXZlbiBwcm9wZXJ0eSwgb3IKKyAgICAvLyBpZiB0aGVyZSBp
cyBhbiBhbmltYXRpb24gc2NoZWR1bGVkIHRvIGFuaW1hdGUgdGhpcyBwcm9wZXJ0eSBpbiB0aGUg
ZnV0dXJlLgorICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eShDQ0FjdGl2ZUFuaW1hdGlvbjo6
VGFyZ2V0UHJvcGVydHkpIGNvbnN0OworCiBwcm90ZWN0ZWQ6Ci0gICAgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIoKTsKKyAgICBleHBsaWNpdCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcihD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCopOwogCiBwcml2YXRlOgotICAgIHZvaWQg
cmVtb3ZlQ29tcGxldGVkQW5pbWF0aW9ucyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwq
KTsKLSAgICB2b2lkIHB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbCopOwotICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9u
TWFpblRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKLSAgICB2b2lkIHB1
c2hBbmltYXRpb25Qcm9wZXJ0aWVzKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOwor
ICAgIHR5cGVkZWYgSGFzaFNldDxpbnQ+IFRhcmdldFByb3BlcnRpZXM7CisKKyAgICB2b2lkIHB1
c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKik7
CisgICAgdm9pZCByZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyKik7CisKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdG
b3JOZXh0VGljayhkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3Iq
KTsKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91YmxlIG1v
bm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKik7CisgICAgdm9pZCBzdGFydEFu
aW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBtb25vdG9uaWNUaW1l
LCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciopOworICAgIHZvaWQgcmVzb2x2ZUNvbmZsaWN0cyhk
b3VibGUgbW9ub3RvbmljVGltZSk7CisgICAgdm9pZCBwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucyhD
Q0FuaW1hdGlvbkV2ZW50c1ZlY3RvciopOwogCi0gICAgdm9pZCByZW1vdmUoaW50IGdyb3VwSWQs
IENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CisgICAgdm9pZCB0aWNrQW5pbWF0
aW9ucyhkb3VibGUgbW9ub3RvbmljVGltZSk7CiAKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckNsaWVudCogbV9jbGllbnQ7CiAgICAgVmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gPiBtX2FjdGl2ZUFuaW1hdGlvbnM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZjA5ZGNmYWUwNjQyNWRhODNkZWU2ZmEwZjk2NjNmNzAyMzBjMGFlMi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbC5oIgotCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLSNpbmNsdWRl
ICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQSBj
b2xsZWN0aW9uIG9mIHByb3BlcnRpZXMuIFVzZWQgd2hlbiBkZXRlcmltaW5pbmcgaWYgYW5pbWF0
aW9ucyB3YWl0aW5nIGZvciB0YXJnZXQKLS8vIGF2YWlsaWJpbGl0eSBhcmUgYWJsZSB0byBydW4u
Ci10eXBlZGVmIEhhc2hTZXQ8aW50PiBUYXJnZXRQcm9wZXJ0aWVzOwotCi1QYXNzT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsOjpjcmVhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KiBjbGllbnQp
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwoY2xpZW50KSk7Ci19Ci0KLUNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENs
aWVudCogY2xpZW50KQotICAgIDogbV9jbGllbnQoY2xpZW50KQotewotfQotCi1DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoKQot
ewotfQotCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YW5pbWF0ZShkb3Vi
bGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImIGV2ZW50cykKLXsKLSAg
ICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2sobW9ub3RvbmljVGltZSwgZXZlbnRz
KTsKLSAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKG1vbm90b25pY1RpbWUs
IGV2ZW50cyk7Ci0gICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0
eShtb25vdG9uaWNUaW1lLCBldmVudHMpOwotICAgIHJlc29sdmVDb25mbGljdHMobW9ub3Rvbmlj
VGltZSk7Ci0gICAgdGlja0FuaW1hdGlvbnMobW9ub3RvbmljVGltZSk7Ci0gICAgcHVyZ2VGaW5p
c2hlZEFuaW1hdGlvbnMoZXZlbnRzKTsKLSAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFy
Z2V0QXZhaWxhYmlsaXR5KG1vbm90b25pY1RpbWUsIGV2ZW50cyk7Ci19Ci0KLXZvaWQgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjphZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gYW5pbSkKLXsKLSAgICBtX2FjdGl2ZUFuaW1hdGlvbnMuYXBwZW5kKGFuaW0pOwotfQotCi1D
Q0FjdGl2ZUFuaW1hdGlvbiogQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpnZXRBY3Rp
dmVBbmltYXRpb24oaW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0
eSBwcm9wZXJ0eSkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0
aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5n
cm91cCgpID09IGdyb3VwSWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0
eSgpID09IHByb3BlcnR5KQotICAgICAgICAgICAgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS5nZXQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjpoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdAotewotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmlt
YXRpb246OkZpbmlzaGVkICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSAhPSBD
Q0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZG91YmxlIG1vbm90b25p
Y1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiBldmVudHMpCi17Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
aWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlv
bjo6V2FpdGluZ0Zvck5leHRUaWNrKSB7Ci0gICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBtb25vdG9uaWNUaW1l
KTsKLSAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0U3RhcnRUaW1lKG1vbm90
b25pY1RpbWUpOwotICAgICAgICAgICAgZXZlbnRzLmFwcGVuZChDQ0FuaW1hdGlvblN0YXJ0ZWRF
dmVudDo6Y3JlYXRlKG1fY2xpZW50LT5pZCgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5n
Rm9yU3RhcnRUaW1lKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
ciYgZXZlbnRzKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRp
b25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1
blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUgJiYgbV9h
Y3RpdmVBbmltYXRpb25zW2ldLT5zdGFydFRpbWUoKSA8PSBtb25vdG9uaWNUaW1lKSB7Ci0gICAg
ICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0
aW9uOjpSdW5uaW5nLCBtb25vdG9uaWNUaW1lKTsKLSAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQo
Q0NBbmltYXRpb25TdGFydGVkRXZlbnQ6OmNyZWF0ZShtX2NsaWVudC0+aWQoKSkpOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3Rh
cnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShkb3VibGUgbW9ub3Rvbmlj
VGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImIGV2ZW50cykKLXsKLSAgICAvLyBGaXJzdCBj
b2xsZWN0IHJ1bm5pbmcgcHJvcGVydGllcy4KLSAgICBUYXJnZXRQcm9wZXJ0aWVzIGJsb2NrZWRQ
cm9wZXJ0aWVzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25z
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0
YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcgfHwgbV9hY3RpdmVBbmltYXRpb25z
W2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCkKLSAgICAgICAg
ICAgIGJsb2NrZWRQcm9wZXJ0aWVzLmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFBy
b3BlcnR5KCkpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVB
bmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFp
bGFiaWxpdHkpIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3QgYWxsIHByb3BlcnRpZXMgZm9yIGFu
aW1hdGlvbnMgd2l0aCB0aGUgc2FtZSBncm91cCBpZCAodGhleSBzaG91bGQgYWxsIGFsc28gYmUg
aW4gdGhlIGxpc3Qgb2YgYW5pbWF0aW9ucykuCi0gICAgICAgICAgICBUYXJnZXRQcm9wZXJ0aWVz
IGVucXVldWVkUHJvcGVydGllczsKLSAgICAgICAgICAgIGVucXVldWVkUHJvcGVydGllcy5hZGQo
bV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpKTsKLSAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraikg
ewotICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0g
bV9hY3RpdmVBbmltYXRpb25zW2pdLT5ncm91cCgpKQotICAgICAgICAgICAgICAgICAgICBlbnF1
ZXVlZFByb3BlcnRpZXMuYWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+dGFyZ2V0UHJvcGVydHko
KSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBpbnRl
cnNlY3Rpb24gb2YgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyBhZmZlY3RlZCBieSB0aGUgZ3JvdXAg
YW5kIHRoZSBsaXN0IG9mIGN1cnJlbnRseQotICAgICAgICAgICAgLy8gYmxvY2tlZCBwcm9wZXJ0
aWVzIGlzIG51bGwuIEluIGFueSBjYXNlLCB0aGUgZ3JvdXAncyB0YXJnZXQgcHJvcGVydGllcyBu
ZWVkIHRvIGJlIGFkZGVkIHRvIHRoZSBsaXN0Ci0gICAgICAgICAgICAvLyBvZiBibG9ja2VkIHBy
b3BlcnRpZXMuCi0gICAgICAgICAgICBib29sIG51bGxJbnRlcnNlY3Rpb24gPSB0cnVlOwotICAg
ICAgICAgICAgZm9yIChUYXJnZXRQcm9wZXJ0aWVzOjppdGVyYXRvciBwSXRlciA9IGVucXVldWVk
UHJvcGVydGllcy5iZWdpbigpOyBwSXRlciAhPSBlbnF1ZXVlZFByb3BlcnRpZXMuZW5kKCk7ICsr
cEl0ZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWJsb2NrZWRQcm9wZXJ0aWVzLmFkZCgqcEl0
ZXIpLnNlY29uZCkKLSAgICAgICAgICAgICAgICAgICAgbnVsbEludGVyc2VjdGlvbiA9IGZhbHNl
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJZiB0aGUgaW50ZXJzZWN0aW9uIGlz
IG51bGwsIHRoZW4gd2UgYXJlIGZyZWUgdG8gc3RhcnQgdGhlIGFuaW1hdGlvbnMgaW4gdGhlIGdy
b3VwLgotICAgICAgICAgICAgaWYgKG51bGxJbnRlcnNlY3Rpb24pIHsKLSAgICAgICAgICAgICAg
ICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpS
dW5uaW5nLCBtb25vdG9uaWNUaW1lKTsKLSAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPnNldFN0YXJ0VGltZShtb25vdG9uaWNUaW1lKTsKLSAgICAgICAgICAgICAgICBldmVu
dHMuYXBwZW5kKENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50OjpjcmVhdGUobV9jbGllbnQtPmlkKCkp
KTsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FjdGl2ZUFu
aW1hdGlvbnMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPmdyb3VwKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+c2V0UnVu
U3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG1vbm90b25pY1RpbWUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRTdGFydFRpbWUobW9u
b3RvbmljVGltZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjpyZXNvbHZlQ29uZmxpY3RzKGRvdWJsZSBtb25vdG9uaWNUaW1lKQot
ewotICAgIC8vIEZpbmQgYW55IGFuaW1hdGlvbnMgdGhhdCBhcmUgYW5pbWF0aW5nIHRoZSBzYW1l
IHByb3BlcnR5IGFuZCByZXNvbHZlIHRoZQotICAgIC8vIGNvbmZpY3QuIFdlIGNvdWxkIGV2ZW50
dWFsbHkgYmxlbmQsIGJ1dCBmb3Igbm93IHdlJ2xsIGp1c3QgYWJvcnQgdGhlCi0gICAgLy8gcHJl
dmlvdXMgYW5pbWF0aW9uICh3aGVyZSAncHJldmlvdXMnIG1lYW5zOiAoMSkgaGFzIGEgcHJpb3Ig
c3RhcnQgdGltZSBvcgotICAgIC8vICgyKSBoYXMgYW4gZXF1YWwgc3RhcnQgdGltZSwgYnV0IHdh
cyBhZGRlZCB0byB0aGUgcXVldWUgZWFybGllciwgaS5lLiwKLSAgICAvLyBoYXMgYSBsb3dlciBp
bmRleCBpbiBtX2FjdGl2ZUFuaW1hdGlvbnMpLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcpIHsK
LSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9u
cy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNb
al0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcgJiYgbV9hY3RpdmVB
bmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+
dGFyZ2V0UHJvcGVydHkoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmlt
YXRpb25zW2ldLT5zdGFydFRpbWUoKSA+IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+c3RhcnRUaW1l
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCBtb25vdG9uaWNUaW1lKTsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmlt
YXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgbW9ub3Rv
bmljVGltZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cHVyZ2VGaW5p
c2hlZEFuaW1hdGlvbnMoQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImIGV2ZW50cykKLXsKLSAgICAv
LyBFYWNoIGl0ZXJhdGlvbiwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKSBkZWNyZWFzZXMgb3Ig
aSBpbmNyZW1lbnRzLAotICAgIC8vIGd1YXJhbnRlZWluZyBwcm9ncmVzcyB0b3dhcmRzIGxvb3Ag
dGVybWluYXRpb24uCi0gICAgc2l6ZV90IGkgPSAwOwotICAgIHdoaWxlIChpIDwgbV9hY3RpdmVB
bmltYXRpb25zLnNpemUoKSkgewotICAgICAgICBib29sIGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZp
bmlzaGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlzRmlu
aXNoZWQoKSkgewotICAgICAgICAgICAgYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQgPSB0
cnVlOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgbV9hY3RpdmVBbmlt
YXRpb25zLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+Z3JvdXAoKSA9PSBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPmdyb3VwKCkgJiYgIW1f
YWN0aXZlQW5pbWF0aW9uc1tqXS0+aXNGaW5pc2hlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBpZiAoYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQpIHsKLSAgICAgICAgICAg
IGV2ZW50cy5hcHBlbmQoQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50OjpjcmVhdGUobV9jbGllbnQt
PmlkKCksIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aWQoKSkpOwotICAgICAgICAgICAgbV9maW5p
c2hlZEFuaW1hdGlvbnMuYXBwZW5kKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2lnbmF0dXJlKCkp
OwotICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBpKys7Ci0gICAgfQotfQotCi12b2lkIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbDo6dGlja0FuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY1RpbWUpCi17Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6UnVubmluZykgewotICAgICAgICAgICAgZG91YmxlIHRyaW1tZWQgPSBt
X2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKG1vbm90b25p
Y1RpbWUpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFy
Z2V0UHJvcGVydHkoKSkgewotCi0gICAgICAgICAgICBjYXNlIENDQWN0aXZlQW5pbWF0aW9uOjpU
cmFuc2Zvcm06IHsKLSAgICAgICAgICAgICAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlKiB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA9IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Y3Vy
dmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOwotICAgICAgICAgICAgICAgIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLT5n
ZXRWYWx1ZSh0cmltbWVkLCBtX2NsaWVudC0+Ym91bmRzKCkpOwotICAgICAgICAgICAgICAgIGlm
IChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlzRmluaXNoZWRBdChtb25vdG9uaWNUaW1lKSkKLSAg
ICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0Fj
dGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQsIG1vbm90b25pY1RpbWUpOwotCi0gICAgICAgICAgICAg
ICAgbV9jbGllbnQtPnNldFRyYW5zZm9ybShtYXRyaXgpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5OiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlKiBm
bG9hdEFuaW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT5jdXJ2ZSgpLT50b0Zs
b2F0QW5pbWF0aW9uQ3VydmUoKTsKLSAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBvcGFjaXR5
ID0gZmxvYXRBbmltYXRpb25DdXJ2ZS0+Z2V0VmFsdWUodHJpbW1lZCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG1vbm90b25pY1RpbWUp
KQotICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRl
KENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCwgbW9ub3RvbmljVGltZSk7Ci0KLSAgICAgICAg
ICAgICAgICBtX2NsaWVudC0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfSAvLyBzd2l0Y2gKLSAgICAgICAg
fSAvLyBpZiBydW5uaW5nCi0gICAgfSAvLyBmb3IgZWFjaCBhbmltYXRpb24KLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFjMDBlN2Fl
MTc4YzU3NzM2NjM3YjIyYmRhMmM5MjkyMjFkYTZmZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaAorKysgL2Rldi9udWxs
CkBAIC0xLDk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsX2gKLSNkZWZpbmUgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
X2gKLQotI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiY2MvQ0NB
bmltYXRpb25DdXJ2ZS5oIgotI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uRXZlbnRzLmgiCi0KLSNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw7Ci1jbGFzcyBJbnRTaXplOwotY2xhc3MgVHJhbnNmb3Jt
YXRpb25NYXRyaXg7Ci1jbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb25zOwotCi1jbGFzcyBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgfkND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCgpIHsgfQotCi0gICAgdmlydHVhbCBp
bnQgaWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KSA9IDA7Ci0gICAgdmlydHVhbCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7
Ci0gICAgdmlydHVhbCBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCA9IDA7Ci19OwotCi1j
bGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCk7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjcmVhdGUoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50Kik7Ci0KLSAgICB2aXJ0dWFsIH5DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoKTsKLQotICAgIHZvaWQgYW5pbWF0ZShkb3VibGUg
bW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImKTsKLQotICAgIHZvaWQgYWRk
KFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+KTsKLQotICAgIC8vIFJldHVybnMgdGhlIGFj
dGl2ZSBhbmltYXRpb24gaW4gdGhlIGdpdmVuIGdyb3VwLCBhbmltYXRpbmcgdGhlIGdpdmVuIHBy
b3BlcnR5IGlmIHN1Y2ggYW4KLSAgICAvLyBhbmltYXRpb24gZXhpc3RzLgotICAgIENDQWN0aXZl
QW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0
aW9uOjpUYXJnZXRQcm9wZXJ0eSk7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJl
IGFueSBhbmltYXRpb25zIHRoYXQgYXJlIG5laXRoZXIgZmluaXNoZWQgbm9yIGFib3J0ZWQuCi0g
ICAgYm9vbCBoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7Ci0KLSAgICAvLyBUaGUgYW5pbWF0
b3IgaXMgb3duZWQgYnkgdGhlIGxheWVyLgotICAgIGV4cGxpY2l0IENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqKTsKLQot
ICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBtb25vdG9u
aWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYpOwotICAgIHZvaWQgc3RhcnRBbmltYXRp
b25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25F
dmVudHNWZWN0b3ImKTsKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRB
dmFpbGFiaWxpdHkoZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9y
Jik7Ci0gICAgdm9pZCByZXNvbHZlQ29uZmxpY3RzKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKLSAg
ICB2b2lkIHB1cmdlRmluaXNoZWRBbmltYXRpb25zKENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJik7
Ci0KLSAgICB2b2lkIHRpY2tBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKLQotICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCogbV9jbGllbnQ7Ci0gICAgVmVj
dG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gPiBtX2FjdGl2ZUFuaW1hdGlvbnM7Ci0gICAg
VmVjdG9yPENDQWN0aXZlQW5pbWF0aW9uOjpBbmltYXRpb25TaWduYXR1cmU+IG1fZmluaXNoZWRB
bmltYXRpb25zOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsX2gKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
QW5pbWF0aW9uRGVsZWdhdGUuaAppbmRleCBhNzY0Y2MzN2JkY2M3ZWUzZTg5YTdlODcyYmVkMDI1
ZTYyY2IxZGE4Li40Yzg4YTkyMTFlYzQwNzNiYTdhNDk2MDM0N2VjMDFmYmNjODNkZDMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyQW5pbWF0aW9uRGVsZWdhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaApAQCAtMzEsNyArMzEs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUg
ewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJs
ZSB0aW1lKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvbkZpbmlzaGVkKGlu
dCBhbmltYXRpb25JZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwCmluZGV4IDhmNjA3ODA5NzJlNjBiOWQyZjA0NGFlMWQzYmQ2Y2Q2NjM5
YjNmYTguLjg3ZDJlMzVkNzg2YzgyNWEwNzZhOGUyNGRjYjA4ZTFhMTVjNGViYTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJMYXllckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgogI2luY2x1ZGUg
ImNjL0NDU29saWRDb2xvckRyYXdRdWFkLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CkBAIC02NCw5ICs2MywxMCBAQCBDQ0xheWVySW1wbDo6Q0NMYXllckltcGwoaW50IGlkKQog
ICAgICwgbV90YXJnZXRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX2RyYXdEZXB0aCgwKQogICAg
ICwgbV9kcmF3T3BhY2l0eSgwKQorICAgICwgbV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nKGZhbHNl
KQogICAgICwgbV9kZWJ1Z0JvcmRlckNvbG9yKDAsIDAsIDAsIDApCiAgICAgLCBtX2RlYnVnQm9y
ZGVyV2lkdGgoMCkKLSAgICAsIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9sYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSh0aGlzKSkKIHsK
ICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogfQpAQCAtMzA2LDYgKzMwNiwx
NiBAQCB2b2lkIENDTGF5ZXJJbXBsOjpyZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgp
CiAgICAgICAgIG1fY2hpbGRyZW5baV0tPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVl
KCk7CiB9CiAKK3ZvaWQgQ0NMYXllckltcGw6OnNldEFuaW1hdGVkT3BhY2l0eShmbG9hdCBhbmlt
YXRlZE9wYWNpdHkpCit7CisgICAgc2V0T3BhY2l0eShhbmltYXRlZE9wYWNpdHkpOworfQorCit2
b2lkIENDTGF5ZXJJbXBsOjpzZXRBbmltYXRlZFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgYW5pbWF0ZWRUcmFuc2Zvcm0pCit7CisgICAgc2V0VHJhbnNmb3JtKGFuaW1hdGVk
VHJhbnNmb3JtKTsKK30KKwogdm9pZCBDQ0xheWVySW1wbDo6c2V0Qm91bmRzKGNvbnN0IEludFNp
emUmIGJvdW5kcykKIHsKICAgICBpZiAobV9ib3VuZHMgPT0gYm91bmRzKQpAQCAtNDI0LDYgKzQz
NCwxMSBAQCB2b2lkIENDTGF5ZXJJbXBsOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpCiAgICAg
bm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkRm9yU3VidHJlZSgpOwogfQogCitib29sIENDTGF5ZXJJ
bXBsOjpvcGFjaXR5SXNBbmltYXRpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyQW5p
bWF0aW9uQ29udHJvbGxlci0+aXNBbmltYXRpbmdQcm9wZXJ0eShDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSk7Cit9CisKIHZvaWQgQ0NMYXllckltcGw6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0aW9uKQogewogICAgIGlmIChtX3Bvc2l0aW9uID09IHBvc2l0aW9uKQpAQCAt
NDYxLDYgKzQ3NiwxMSBAQCB2b2lkIENDTGF5ZXJJbXBsOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5n
ZWRGb3JTdWJ0cmVlKCk7CiB9CiAKK2Jvb2wgQ0NMYXllckltcGw6OnRyYW5zZm9ybUlzQW5pbWF0
aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPmlz
QW5pbWF0aW5nUHJvcGVydHkoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7Cit9CisKIHZv
aWQgQ0NMYXllckltcGw6OnNldERlYnVnQm9yZGVyQ29sb3IoQ29sb3IgZGVidWdCb3JkZXJDb2xv
cikKIHsKICAgICBpZiAobV9kZWJ1Z0JvcmRlckNvbG9yID09IGRlYnVnQm9yZGVyQ29sb3IpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuaAppbmRleCBmMWM3YjRlZTUxNzIyMWM0ODhhNmFmYzkzMmZiMDhjYzlm
Nzk0YzMxLi43MjVjM2E1ZjBmNzY5MzI1Zjg3M2Q3NzJhZTE4NWYxNzIyMjJlNmIzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmgKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJSZWdpb24uaCIKICNp
bmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
LSNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKKyNpbmNsdWRl
ICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVy
UGFzcy5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZS5oIgogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KQEAgLTQ3LDIzICs0NywyMyBAQCBjbGFzcyBDQ0xheWVyU29ydGVyOwogY2xhc3Mg
TGF5ZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIAotY2xhc3MgQ0NM
YXllckltcGwgOiBwdWJsaWMgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IHsK
K2NsYXNzIENDTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xp
ZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVySW1wbD4gY3JlYXRl
KGludCBpZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllckltcGwo
aWQpKTsKICAgICB9CiAKLSAgICAvLyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGll
bnQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB+Q0NMYXllckltcGwoKTsKKworICAgIC8v
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGltcGxlbWVudGF0aW9uLgogICAgIHZp
cnR1YWwgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcklkOyB9Ci0gICAgdmlydHVhbCB2
b2lkIHNldE9wYWNpdHkoZmxvYXQpOwotICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICB2aXJ0dWFsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQorICAg
IHZpcnR1YWwgdm9pZCBzZXRBbmltYXRlZE9wYWNpdHkoZmxvYXQpOworICAgIHZpcnR1YWwgZmxv
YXQgYW5pbWF0ZWRPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgdmly
dHVhbCB2b2lkIHNldEFuaW1hdGVkVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
Jik7CisgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgYW5pbWF0ZWRUcmFu
c2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQogICAgIHZpcnR1YWwgY29uc3Qg
SW50U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KIAotICAgIHZpcnR1
YWwgfkNDTGF5ZXJJbXBsKCk7Ci0KICAgICAvLyBUcmVlIHN0cnVjdHVyZS4KICAgICBDQ0xheWVy
SW1wbCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KICAgICBjb25zdCBWZWN0
b3I8T3duUHRyPENDTGF5ZXJJbXBsPiA+JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hp
bGRyZW47IH0KQEAgLTExOCw2ICsxMTgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0T3BhcXVl
KGJvb2wpOwogICAgIGJvb2wgb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KIAor
ICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7CisgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3BhY2l0eTsgfQorICAgIGJvb2wgb3BhY2l0eUlzQW5pbWF0aW5nKCkgY29uc3Q7
CisKICAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICBjb25zdCBG
bG9hdFBvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIApAQCAt
MTUxLDYgKzE1NSw5IEBAIHB1YmxpYzoKICAgICBmbG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fZHJhd09wYWNpdHk7IH0KICAgICB2b2lkIHNldERyYXdPcGFjaXR5KGZsb2F0IG9w
YWNpdHkpIHsgbV9kcmF3T3BhY2l0eSA9IG9wYWNpdHk7IH0KIAorICAgIGJvb2wgZHJhd09wYWNp
dHlJc0FuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZzsg
fQorICAgIHZvaWQgc2V0RHJhd09wYWNpdHlJc0FuaW1hdGluZyhib29sIGRyYXdPcGFjaXR5SXNB
bmltYXRpbmcpIHsgbV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nID0gZHJhd09wYWNpdHlJc0FuaW1h
dGluZzsgfQorCiAgICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBt
X2NsaXBSZWN0OyB9CiAgICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7
IG1fY2xpcFJlY3QgPSByZWN0OyB9CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRSZW5kZXJT
dXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRSZW5kZXJTdXJmYWNlOyB9CkBAIC0xOTks
NiArMjA2LDEwIEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRoZSByZWN0IGNvbnRhaW50YWlu
aW5nIHRoaXMgbGF5ZXIgaW4gdGhlIGN1cnJlbnQgdmlldydzIGNvb3JkaW5hdGUgc3lzdGVtLgog
ICAgIGNvbnN0IEludFJlY3QgZ2V0RHJhd1JlY3QoKSBjb25zdDsKIAorICAgIHZvaWQgc2V0VHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Cisg
ICAgYm9vbCB0cmFuc2Zvcm1Jc0FuaW1hdGluZygpIGNvbnN0OworCiAgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2RyYXdUcmFu
c2Zvcm07IH0KICAgICB2b2lkIHNldERyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCkgeyBtX2RyYXdUcmFuc2Zvcm0gPSBtYXRyaXg7IH0KICAgICBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgc2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBtX3NjcmVlblNwYWNlVHJhbnNmb3JtOyB9CkBAIC0yMTMsNyArMjI0LDcgQEAgcHVibGljOgog
ICAgIGJvb2wgbGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUHJv
cGVydHlDaGFuZ2VkOyB9CiAgICAgdm9pZCByZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJl
ZSgpOwogCi0gICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBsYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIoKSB7IHJldHVybiBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsg
fQorICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKiBsYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIoKSB7IHJldHVybiBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQogCiAgICAg
dmlydHVhbCBSZWdpb24gb3BhcXVlQ29udGVudHNSZWdpb24oKSBjb25zdCB7IHJldHVybiBSZWdp
b24oKTsgfTsKIApAQCAtMzEwLDYgKzMyMSw3IEBAIHByaXZhdGU6CiAgICAgLy8gdG8gc29ydCBs
YXllcnMgZnJvbSBiYWNrIHRvIGZyb250LgogICAgIGZsb2F0IG1fZHJhd0RlcHRoOwogICAgIGZs
b2F0IG1fZHJhd09wYWNpdHk7CisgICAgYm9vbCBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmc7CiAK
ICAgICAvLyBEZWJ1ZyBib3JkZXJzLgogICAgIENvbG9yIG1fZGVidWdCb3JkZXJDb2xvcjsKQEAg
LTM0MCw3ICszNTIsNyBAQCBwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJlY3Q7CiAK
ICAgICAvLyBNYW5hZ2VzIGFuaW1hdGlvbnMgZm9yIHRoaXMgbGF5ZXIuCi0gICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7
CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBtX2xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjsKIH07CiAKIHZvaWQgc29ydExheWVycyhWZWN0b3I8Q0NMYXllckltcGwqPjo6
aXRlcmF0b3IgZmlyc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+OjppdGVyYXRvciBlbmQsIENDTGF5
ZXJTb3J0ZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDM0YmNlMTE4
MTAwZmE1ZmEzOGQ5MzUyODIwZDU3MDhlOWZlZGRjYTIuLmQ1MDY2ZTUwMGU2ZjU1MGMxNjY3M2M5
ZDlhYmRiOTdiMzYwMmY0MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAt
MzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQu
aCIKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySXRlcmF0b3IuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmgiCkBAIC02NCw2ICs2NSw3IEBAIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVI
b3N0PiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVu
CiBDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQq
IGNsaWVudCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCiAgICAgOiBtX2NvbXBvc2l0b3JJ
ZGVudGlmaWVyKC0xKQogICAgICwgbV9hbmltYXRpbmcoZmFsc2UpCisgICAgLCBtX25lZWRzQW5p
bWF0ZUxheWVycyhmYWxzZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fZnJhbWVO
dW1iZXIoMCkKICAgICAsIG1fbGF5ZXJSZW5kZXJlckluaXRpYWxpemVkKGZhbHNlKQpAQCAtMTgx
LDYgKzE4Myw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVBbmltYXRpb25zKGRvdWJs
ZSBmcmFtZUJlZ2luVGltZSkKIHsKICAgICBtX2FuaW1hdGluZyA9IHRydWU7CiAgICAgbV9jbGll
bnQtPnVwZGF0ZUFuaW1hdGlvbnMoZnJhbWVCZWdpblRpbWUpOworICAgIGFuaW1hdGVMYXllcnMo
ZnJhbWVCZWdpblRpbWUpOwogICAgIG1fYW5pbWF0aW5nID0gZmFsc2U7CiB9CiAKQEAgLTIxMCw4
ICsyMTMsMTAgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVh
ZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBob3N0SW1wbC0+c2V0Um9vdExh
eWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVyKCksIGhvc3RJ
bXBsLT5yZWxlYXNlUm9vdExheWVyKCkpKTsKIAogICAgIC8vIFdlIG1heSBoYXZlIGFkZGVkIGFu
IGFuaW1hdGlvbiBkdXJpbmcgdGhlIHRyZWUgc3luYy4gVGhpcyB3aWxsIGNhdXNlIGhvc3RJbXBs
IHRvIHZpc2l0IGl0cyBjb250cm9sbGVycy4KLSAgICBpZiAocm9vdExheWVyKCkpCisgICAgaWYg
KHJvb3RMYXllcigpKSB7CiAgICAgICAgIGhvc3RJbXBsLT5zZXROZWVkc0FuaW1hdGVMYXllcnMo
KTsKKyAgICAgICAgbV9uZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVlOworICAgIH0KIAogICAgIGhv
c3RJbXBsLT5zZXRTb3VyY2VGcmFtZU51bWJlcihmcmFtZU51bWJlcigpKTsKICAgICBob3N0SW1w
bC0+c2V0Vmlld3BvcnRTaXplKHZpZXdwb3J0U2l6ZSgpKTsKQEAgLTM4Nyw4ICszOTIsMTAgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRocmVhZChDQ0xh
eWVyVHJlZUhvc3RJbXBsKiBob3N0SW0KICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVT
eW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5yZWxl
YXNlUm9vdExheWVyKCkpKTsKIAogICAgIC8vIFdlIG1heSBoYXZlIGFkZGVkIGFuIGFuaW1hdGlv
biBkdXJpbmcgdGhlIHRyZWUgc3luYy4gVGhpcyB3aWxsIGNhdXNlIGhvc3RJbXBsIHRvIHZpc2l0
IGl0cyBjb250cm9sbGVycy4KLSAgICBpZiAocm9vdExheWVyKCkpCisgICAgaWYgKHJvb3RMYXll
cigpKSB7CiAgICAgICAgIGhvc3RJbXBsLT5zZXROZWVkc0FuaW1hdGVMYXllcnMoKTsKKyAgICAg
ICAgbV9uZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVlOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBv
c2l0aW9uLCBib29sIHVzZUFuY2hvciwgZmxvYXQgc2NhbGUsIGRvdWJsZSBkdXJhdGlvblNlYykK
QEAgLTU0NSw3ICs1NTIsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRl
bnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdAogICAgIENDTGF5ZXJJ
dGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KTsKICAgICBmb3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRl
cmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBpZiAoaXQucmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkgewot
ICAgICAgICAgICAgQVNTRVJUKGl0LT5yZW5kZXJTdXJmYWNlKCktPmRyYXdPcGFjaXR5KCkpOwor
ICAgICAgICAgICAgQVNTRVJUKGl0LT5yZW5kZXJTdXJmYWNlKCktPmRyYXdPcGFjaXR5KCkgfHwg
aXQtPm9wYWNpdHlJc0FuaW1hdGluZygpKTsKIAogICAgICAgICAgICAgb2NjbHVzaW9uVHJhY2tl
ci5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UoKml0LCBpdC0+cmVuZGVyU3VyZmFjZSgpKTsK
ICAgICAgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKCppdCwgcGFp
bnRUeXBlKTsKQEAgLTU2OCw3ICs1NzUsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQ0NUZQogICAg
IENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZtX3Vw
ZGF0ZUxpc3QpOwogICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVy
YXRvclR5cGU6OmJlZ2luKCZtX3VwZGF0ZUxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKLSAgICAgICAgICAg
IEFTU0VSVChpdC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpKTsKKyAgICAgICAgICAg
IEFTU0VSVChpdC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpIHx8IGl0LT5vcGFjaXR5
SXNBbmltYXRpbmcoKSk7CiAgICAgICAgICAgICBpZiAoaXQtPm1hc2tMYXllcigpKQogICAgICAg
ICAgICAgICAgIGl0LT5tYXNrTGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250
ZXh0LCB1cGRhdGVyKTsKIApAQCAtNjQxLDYgKzY0OCwzMyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6ZGVsZXRlVGV4dHVyZUFmdGVyQ29tbWl0KFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRl
eHR1cgogICAgIG1fZGVsZXRlVGV4dHVyZUFmdGVyQ29tbWl0TGlzdC5hcHBlbmQodGV4dHVyZSk7
CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlTGF5ZXJzKGRvdWJsZSBtb25vdG9u
aWNUaW1lKQoreworICAgIGlmICghbV9zZXR0aW5ncy50aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQg
fHwgIW1fbmVlZHNBbmltYXRlTGF5ZXJzIHx8ICFtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMi
LCB0aGlzLCAwKTsKKyAgICBtX25lZWRzQW5pbWF0ZUxheWVycyA9IGFuaW1hdGVMYXllcnNSZWN1
cnNpdmUobV9yb290TGF5ZXIuZ2V0KCksIG1vbm90b25pY1RpbWUpOworfQorCitib29sIENDTGF5
ZXJUcmVlSG9zdDo6YW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBjdXJyZW50
LCBkb3VibGUgbW9ub3RvbmljVGltZSkKK3sKKyAgICBib29sIHN1YnRyZWVOZWVkc0FuaW1hdGVM
YXllcnMgPSBmYWxzZTsKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciogY3VycmVudENv
bnRyb2xsZXIgPSBjdXJyZW50LT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBjdXJy
ZW50Q29udHJvbGxlci0+YW5pbWF0ZShtb25vdG9uaWNUaW1lLCAwKTsKKworICAgIC8vIElmIHRo
ZSBjdXJyZW50IGNvbnRyb2xsZXIgc3RpbGwgaGFzIGFuIGFjdGl2ZSBhbmltYXRpb24sIHdlIG11
c3QgY29udGludWUgYW5pbWF0aW5nIGxheWVycy4KKyAgICBpZiAoY3VycmVudENvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKQorICAgICAgICAgc3VidHJlZU5lZWRzQW5pbWF0ZUxheWVy
cyA9IHRydWU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnJlbnQtPmNoaWxkcmVu
KCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoY3Vy
cmVudC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgbW9ub3RvbmljVGltZSkpCisgICAgICAgICAgICBz
dWJ0cmVlTmVlZHNBbmltYXRlTGF5ZXJzID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gc3Vi
dHJlZU5lZWRzQW5pbWF0ZUxheWVyczsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldEFu
aW1hdGlvbkV2ZW50c1JlY3Vyc2l2ZShjb25zdCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYgZXZl
bnRzLCBMYXllckNocm9taXVtKiBsYXllciwgZG91YmxlIHdhbGxDbG9ja1RpbWUpCiB7CiAgICAg
Zm9yIChzaXplX3QgZXZlbnRJbmRleCA9IDA7IGV2ZW50SW5kZXggPCBldmVudHMuc2l6ZSgpOyAr
K2V2ZW50SW5kZXgpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggZDUyNjIyNjJk
NGYyY2NhNTQ0OTZjZmJiYTdhNTUwZGI5MzJiYTRhZS4uMjM2YWYwMTZiYjZiMTUzNzM5ZGJlMTY4
Y2FiMTAyM2ZkNjkyMDdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTIyNSwx
MSArMjI1LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXNlcnZlVGV4dHVyZXMoKTsKICAgICB2
b2lkIGNsZWFyUGVuZGluZ1VwZGF0ZSgpOwogCisgICAgdm9pZCBhbmltYXRlTGF5ZXJzKGRvdWJs
ZSBtb25vdG9uaWNUaW1lKTsKKyAgICBib29sIGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJD
aHJvbWl1bSogY3VycmVudCwgZG91YmxlIG1vbm90b25pY1RpbWUpOwogICAgIHZvaWQgc2V0QW5p
bWF0aW9uRXZlbnRzUmVjdXJzaXZlKGNvbnN0IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiwgTGF5
ZXJDaHJvbWl1bSosIGRvdWJsZSB3YWxsQ2xvY2tUaW1lKTsKIAogICAgIGludCBtX2NvbXBvc2l0
b3JJZGVudGlmaWVyOwogCiAgICAgYm9vbCBtX2FuaW1hdGluZzsKKyAgICBib29sIG1fbmVlZHNB
bmltYXRlTGF5ZXJzOwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBtX2NsaWVudDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggYzg2ZDc0ZDg2
MWRhZjRlNmUzMjVkMWM1M2ZkNDdmNDk4NjRmODZhOS4uNGUzMTc1MGFmZjE3ODJhNDk0ZTc4N2Fk
MTY4YzE5OGFkMTA3NjZmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21t
b24uY3BwCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJj
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBs
LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXll
clNvcnRlci5oIgpAQCAtODMsOCArODUsMTIgQEAgc3RhdGljIGJvb2wgbGF5ZXJTaG91bGRCZVNr
aXBwZWQoTGF5ZXJUeXBlKiBsYXllcikKICAgICAvLyBTb21lIGFkZGl0aW9uYWwgY29uZGl0aW9u
cyBuZWVkIHRvIGJlIGNvbXB1dGVkIGF0IGEgbGF0ZXIgcG9pbnQgYWZ0ZXIgdGhlIHJlY3Vyc2lv
biBpcyBmaW5pc2hlZC4KICAgICAvLyAgIC0gdGhlIGludGVyc2VjdGlvbiBvZiByZW5kZXIgc3Vy
ZmFjZSBjb250ZW50IGFuZCBsYXllciBjbGlwUmVjdCBpcyBlbXB0eQogICAgIC8vICAgLSB0aGUg
dmlzaWJsZUxheWVyUmVjdCBpcyBlbXB0eQorICAgIC8vCisgICAgLy8gTm90ZSwgaWYgdGhlIGxh
eWVyIHNob3VsZCBub3QgaGF2ZSBiZWVuIGRyYXduIGR1ZSB0byBiZWluZyBmdWxseSB0cmFuc3Bh
cmVudCwKKyAgICAvLyB3ZSB3b3VsZCBoYXZlIHNraXBwZWQgdGhlIGVudGlyZSBzdWJ0cmVlIGFu
ZCBuZXZlciBtYWRlIGl0IGludG8gdGhpcyBmdW5jdGlvbiwKKyAgICAvLyBzbyBpdCBpcyBzYWZl
IHRvIG9taXQgdGhpcyBjaGVjayBoZXJlLgogCi0gICAgaWYgKCFsYXllci0+ZHJhd3NDb250ZW50
KCkgfHwgIWxheWVyLT5vcGFjaXR5KCkgfHwgbGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkKKyAg
ICBpZiAoIWxheWVyLT5kcmF3c0NvbnRlbnQoKSB8fCBsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIFRoZSBsYXllciBzaG91bGQgbm90IGJl
IGRyYXduIGlmICgxKSBpdCBpcyBub3QgZG91YmxlLXNpZGVkIGFuZCAoMikgdGhlIGJhY2sgb2Yg
dGhlIGxheWVyIGlzIGZhY2luZyB0aGUgc2NyZWVuLgpAQCAtMTA1LDYgKzExMSwyNCBAQCBzdGF0
aWMgYm9vbCBsYXllclNob3VsZEJlU2tpcHBlZChMYXllclR5cGUqIGxheWVyKQogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+Citib29sIHN1YnRyZWVTaG91bGRCZVNraXBwZWQoTGF5
ZXJUeXBlKiBsYXllcikKK3sKKyAgICAvLyBUaGUgb3BhY2l0eSBvZiBhIGxheWVyIGFsd2F5cyBh
cHBsaWVzIHRvIGl0cyBjaGlsZHJlbiAoZWl0aGVyIGltcGxpY2l0bHkKKyAgICAvLyB2aWEgYSBy
ZW5kZXIgc3VyZmFjZSBvciBleHBsaWNpdGx5IGlmIHRoZSBwYXJlbnQgcHJlc2VydmVzIDNEKSwg
c28gdGhlCisgICAgLy8gZW50aXJlIHN1YnRyZWUgY2FuIGJlIHNraXBwZWQgaWYgdGhpcyBsYXll
ciBpcyBmdWxseSB0cmFuc3BhcmVudC4KKyAgICByZXR1cm4gIWxheWVyLT5vcGFjaXR5KCk7Cit9
CisKK3RlbXBsYXRlPD4KK2Jvb2wgc3VidHJlZVNob3VsZEJlU2tpcHBlZDxMYXllckNocm9taXVt
PihMYXllckNocm9taXVtKiBsYXllcikKK3sKKyAgICAvLyBJZiB0aGUgb3BhY2l0eSBpcyBiZWlu
ZyBhbmltYXRlZCB0aGVuIHRoZSBvcGFjaXR5IG9uIHRoZSBtYWluIHRocmVhZCBpcyB1bnJlbGlh
YmxlCisgICAgLy8gKHNpbmNlIHRoZSBpbXBsIHRocmVhZCBtYXkgYmUgdXNpbmcgYSBkaWZmZXJl
bnQgb3BhY2l0eSksIHNvIGl0IHNob3VsZCBub3QgYmUgdHJ1c3RlZC4KKyAgICAvLyBJbiBwYXJ0
aWN1bGFyLCBpdCBzaG91bGQgbm90IGNhdXNlIHRoZSBzdWJ0cmVlIHRvIGJlIHNraXBwZWQuCisg
ICAgcmV0dXJuICFsYXllci0+b3BhY2l0eSgpICYmICFsYXllci0+b3BhY2l0eUlzQW5pbWF0aW5n
KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KIHN0YXRpYyBib29sIHN1YnRy
ZWVTaG91bGRSZW5kZXJUb1NlcGFyYXRlU3VyZmFjZShMYXllclR5cGUqIGxheWVyLCBib29sIGF4
aXNBbGlnbmVkV2l0aFJlc3BlY3RUb1BhcmVudCkKIHsKICAgICAvLyBGSVhNRTogSWYgd2UgZGVj
aWRlIHRvIGNyZWF0ZSBhIHJlbmRlciBzdXJmYWNlIGhlcmUgd2hpbGUgdGhpcyBsYXllciBkb2Vz
CkBAIC0yMzAsMTQgKzI1NCwxNSBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAgIC8vICAg
ICAgICBTIGlzIHRoZSBzY2FsZSBhZGp1c3RtZW50ICh0byBzY2FsZSB1cCB0byB0aGUgbGF5ZXIg
c2l6ZSkKICAgICAvLwogCisgICAgaWYgKHN1YnRyZWVTaG91bGRCZVNraXBwZWQobGF5ZXIpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBmbG9hdCBkcmF3T3BhY2l0eSA9IGxheWVyLT5v
cGFjaXR5KCk7Ci0gICAgaWYgKGxheWVyLT5wYXJlbnQoKSAmJiBsYXllci0+cGFyZW50KCktPnBy
ZXNlcnZlczNEKCkpCisgICAgYm9vbCBkcmF3T3BhY2l0eUlzQW5pbWF0aW5nID0gbGF5ZXItPm9w
YWNpdHlJc0FuaW1hdGluZygpOworICAgIGlmIChsYXllci0+cGFyZW50KCkgJiYgbGF5ZXItPnBh
cmVudCgpLT5wcmVzZXJ2ZXMzRCgpKSB7CiAgICAgICAgIGRyYXdPcGFjaXR5ICo9IGxheWVyLT5w
YXJlbnQoKS0+ZHJhd09wYWNpdHkoKTsKLSAgICAvLyBUaGUgb3BhY2l0eSBvZiBhIGxheWVyIGFs
d2F5cyBhcHBsaWVzIHRvIGl0cyBjaGlsZHJlbiAoZWl0aGVyIGltcGxpY2l0bHkKLSAgICAvLyB2
aWEgYSByZW5kZXIgc3VyZmFjZSBvciBleHBsaWNpdGx5IGlmIHRoZSBwYXJlbnQgcHJlc2VydmVz
IDNEKSwgc28gdGhlCi0gICAgLy8gZW50aXJlIHN1YnRyZWUgY2FuIGJlIHNraXBwZWQgaWYgdGhp
cyBsYXllciBpcyBmdWxseSB0cmFuc3BhcmVudC4KLSAgICBpZiAoIWRyYXdPcGFjaXR5KQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRyYXdPcGFjaXR5SXNBbmltYXRpbmcgfD0gbGF5
ZXItPnBhcmVudCgpLT5kcmF3T3BhY2l0eUlzQW5pbWF0aW5nKCk7CisgICAgfQogCiAgICAgSW50
U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7CiAgICAgRmxvYXRQb2ludCBhbmNob3JQb2lu
dCA9IGxheWVyLT5hbmNob3JQb2ludCgpOwpAQCAtMjg2LDcgKzMxMSw5IEBAIHN0YXRpYyBib29s
IGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSog
bGF5ZXIsIExheWVyCiAKICAgICAgICAgLy8gVGhlIG9wYWNpdHkgdmFsdWUgaXMgbW92ZWQgZnJv
bSB0aGUgbGF5ZXIgdG8gaXRzIHN1cmZhY2UsIHNvIHRoYXQgdGhlIGVudGlyZSBzdWJ0cmVlIHBy
b3Blcmx5IGluaGVyaXRzIG9wYWNpdHkuCiAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldERyYXdP
cGFjaXR5KGRyYXdPcGFjaXR5KTsKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0RHJhd09wYWNp
dHlJc0FuaW1hdGluZyhkcmF3T3BhY2l0eUlzQW5pbWF0aW5nKTsKICAgICAgICAgbGF5ZXItPnNl
dERyYXdPcGFjaXR5KDEpOworICAgICAgICBsYXllci0+c2V0RHJhd09wYWNpdHlJc0FuaW1hdGlu
ZyhmYWxzZSk7CiAKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJPcmlnaW5UcmFu
c2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybTsKICAgICAgICAgbGF5ZXJPcmlnaW5UcmFuc2Zvcm0u
dHJhbnNsYXRlM2QoLTAuNSAqIGJvdW5kcy53aWR0aCgpLCAtMC41ICogYm91bmRzLmhlaWdodCgp
LCAwKTsKQEAgLTMyMCw2ICszNDcsNyBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAgICAg
ICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobGF5ZXItPmRyYXdUcmFu
c2Zvcm0oKS5tYXBSZWN0KGxheWVyUmVjdCkpOwogCiAgICAgICAgIGxheWVyLT5zZXREcmF3T3Bh
Y2l0eShkcmF3T3BhY2l0eSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eUlzQW5pbWF0
aW5nKGRyYXdPcGFjaXR5SXNBbmltYXRpbmcpOwogCiAgICAgICAgIGlmIChsYXllciAhPSByb290
TGF5ZXIpIHsKICAgICAgICAgICAgIEFTU0VSVChsYXllci0+cGFyZW50KCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCAwMDJlNzgyNmQzZTM2OWI5ZjgyNzcy
NGRkMDI2NWI3MDZkYmJmOTY5Li5kOTc1YjRkZjg2NGZkNmQyMDcyZGE0ZWIzZmYzN2NkODVjZDZm
ZjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMjg5LDE1
ICsyODksMTUgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpvcHRpbWl6ZVJlbmRlclBhc3Nl
cyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMpCiAgICAgUGxhdGZvcm1TdXBwb3J0OjpoaXN0b2dy
YW1DdXN0b21Db3VudHMoIlJlbmRlcmVyNC5waXhlbE92ZXJkcmF3Q3VsbGVkIiwgc3RhdGljX2Nh
c3Q8aW50Pihub3JtYWxpemF0aW9uICogb3ZlcmRyYXdDb3VudHMubV9waXhlbHNDdWxsZWQpLCAx
MDAsIDEwMDAwMDAsIDUwKTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRl
TGF5ZXJzUmVjdXJzaXZlKENDTGF5ZXJJbXBsKiBjdXJyZW50LCBkb3VibGUgbW9ub3RvbmljVGlt
ZSwgZG91YmxlIHdhbGxDbG9ja1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiBldmVudHMs
IGJvb2wmIGRpZEFuaW1hdGUsIGJvb2wmIG5lZWRzQW5pbWF0ZUxheWVycykKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShDQ0xheWVySW1wbCogY3VycmVu
dCwgZG91YmxlIG1vbm90b25pY1RpbWUsIGRvdWJsZSB3YWxsQ2xvY2tUaW1lLCBDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3RvciogZXZlbnRzLCBib29sJiBkaWRBbmltYXRlLCBib29sJiBuZWVkc0FuaW1h
dGVMYXllcnMpCiB7CiAgICAgYm9vbCBzdWJ0cmVlTmVlZHNBbmltYXRlTGF5ZXJzID0gZmFsc2U7
CiAKLSAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGN1cnJlbnRDb250cm9sbGVy
ID0gY3VycmVudC0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCk7CisgICAgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIqIGN1cnJlbnRDb250cm9sbGVyID0gY3VycmVudC0+bGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKCk7CiAKICAgICBib29sIGhhZEFjdGl2ZUFuaW1hdGlvbiA9IGN1cnJlbnRD
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKTsKICAgICBjdXJyZW50Q29udHJvbGxlci0+
YW5pbWF0ZShtb25vdG9uaWNUaW1lLCBldmVudHMpOwotICAgIGJvb2wgc3RhcnRlZEFuaW1hdGlv
biA9IGV2ZW50cy5zaXplKCkgPiAwOworICAgIGJvb2wgc3RhcnRlZEFuaW1hdGlvbiA9IGV2ZW50
cy0+c2l6ZSgpID4gMDsKIAogICAgIC8vIFdlIGFuaW1hdGVkIGlmIHdlIGVpdGhlciB0aWNrZWQg
YSBydW5uaW5nIGFuaW1hdGlvbiwgb3Igc3RhcnRlZCBhIG5ldyBhbmltYXRpb24uCiAgICAgaWYg
KGhhZEFjdGl2ZUFuaW1hdGlvbiB8fCBzdGFydGVkQW5pbWF0aW9uKQpAQCAtNzU5LDcgKzc1OSw3
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyhkb3VibGUgbW9ub3Rv
bmljVGltZSwgZG91YmxlIHdhbGxDbG9ja1RpCiAgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRz
VmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CiAK
ICAgICBib29sIGRpZEFuaW1hdGUgPSBmYWxzZTsKLSAgICBhbmltYXRlTGF5ZXJzUmVjdXJzaXZl
KG1fcm9vdExheWVySW1wbC5nZXQoKSwgbW9ub3RvbmljVGltZSwgd2FsbENsb2NrVGltZSwgKmV2
ZW50cywgZGlkQW5pbWF0ZSwgbV9uZWVkc0FuaW1hdGVMYXllcnMpOworICAgIGFuaW1hdGVMYXll
cnNSZWN1cnNpdmUobV9yb290TGF5ZXJJbXBsLmdldCgpLCBtb25vdG9uaWNUaW1lLCB3YWxsQ2xv
Y2tUaW1lLCBldmVudHMuZ2V0KCksIGRpZEFuaW1hdGUsIG1fbmVlZHNBbmltYXRlTGF5ZXJzKTsK
IAogICAgIGlmICghZXZlbnRzLT5pc0VtcHR5KCkpCiAgICAgICAgIG1fY2xpZW50LT5wb3N0QW5p
bWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKGV2ZW50cy5yZWxlYXNlKCksIHdh
bGxDbG9ja1RpbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDFj
ZmQwZmI2NzY2MDMwMzcyOGMxYTk2MTMzZWUzYzg0MDhiODc2Y2UuLjExNWU3ZmVhMjc0NTRkNGFh
ZDBhZTY4OGVhY2I2MDNkMDNkZjUzYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmgKQEAgLTE1Nyw3ICsxNTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdHJhY2tEYW1hZ2VG
b3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxp
c3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgY2FsY3VsYXRlUmVuZGVyUGFz
c2VzKENDUmVuZGVyUGFzc0xpc3QmLCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk7CiAgICAgdm9pZCBvcHRpbWl6ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0Jik7Ci0g
ICAgdm9pZCBhbmltYXRlTGF5ZXJzUmVjdXJzaXZlKENDTGF5ZXJJbXBsKiwgZG91YmxlIG1vbm90
b25pY1RpbWUsIGRvdWJsZSB3YWxsQ2xvY2tUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYs
IGJvb2wmIGRpZEFuaW1hdGUsIGJvb2wmIG5lZWRzQW5pbWF0ZUxheWVycyk7CisgICAgdm9pZCBh
bmltYXRlTGF5ZXJzUmVjdXJzaXZlKENDTGF5ZXJJbXBsKiwgZG91YmxlIG1vbm90b25pY1RpbWUs
IGRvdWJsZSB3YWxsQ2xvY2tUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciosIGJvb2wmIGRp
ZEFuaW1hdGUsIGJvb2wmIG5lZWRzQW5pbWF0ZUxheWVycyk7CiAgICAgSW50U2l6ZSBjb250ZW50
U2l6ZSgpIGNvbnN0OwogICAgIHZvaWQgc2VuZERpZExvc2VDb250ZXh0UmVjdXJzaXZlKENDTGF5
ZXJJbXBsKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCmluZGV4IDU0ZjBmZTgx
MDExODY0ZTFkOWY1YjljMjM2MGJmMGNiYzNjMzhhY2EuLjZmMGRhYTFlZWI2M2JiNmRhZTM1NjM3
MzAyZTI3MzljOWFlNWM1MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcApAQCAt
NTEsNiArNTEsNyBAQCBDQ1JlbmRlclN1cmZhY2U6OkNDUmVuZGVyU3VyZmFjZShDQ0xheWVySW1w
bCogb3duaW5nTGF5ZXIpCiAgICAgLCBtX3NraXBzRHJhdyhmYWxzZSkKICAgICAsIG1fc3VyZmFj
ZVByb3BlcnR5Q2hhbmdlZChmYWxzZSkKICAgICAsIG1fZHJhd09wYWNpdHkoMSkKKyAgICAsIG1f
ZHJhd09wYWNpdHlJc0FuaW1hdGluZyhmYWxzZSkKICAgICAsIG1fbmVhcmVzdEFuY2VzdG9yVGhh
dE1vdmVzUGl4ZWxzKDApCiB7CiAgICAgbV9kYW1hZ2VUcmFja2VyID0gQ0NEYW1hZ2VUcmFja2Vy
OjpjcmVhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggMTQxZWQyZDI0MGU2
NDAwZGI2MTFiZTk3Zjc0MDNmMTdkZTJmZGM4My4uYmUwZGM1MTUzMjBhYWViYWYwNzIzYzNjOTY4
MmZhMTE0MGIwMGIyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTY5LDYgKzY5
LDkgQEAgcHVibGljOgogICAgIGZsb2F0IGRyYXdPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9k
cmF3T3BhY2l0eTsgfQogICAgIHZvaWQgc2V0RHJhd09wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBt
X2RyYXdPcGFjaXR5ID0gb3BhY2l0eTsgfQogCisgICAgYm9vbCBkcmF3T3BhY2l0eUlzQW5pbWF0
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nOyB9CisgICAgdm9p
ZCBzZXREcmF3T3BhY2l0eUlzQW5pbWF0aW5nKGJvb2wgZHJhd09wYWNpdHlJc0FuaW1hdGluZykg
eyBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmcgPSBkcmF3T3BhY2l0eUlzQW5pbWF0aW5nOyB9CisK
ICAgICB2b2lkIHNldERyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRy
YXdUcmFuc2Zvcm0pIHsgbV9kcmF3VHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybTsgfQogICAgIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV9kcmF3VHJhbnNmb3JtOyB9CiAKQEAgLTEyOCw2ICsxMzEsNyBAQCBwcml2YXRlOgogCiAgICAg
T3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX2NvbnRlbnRzVGV4dHVyZTsKICAgICBmbG9hdCBtX2Ry
YXdPcGFjaXR5OworICAgIGJvb2wgbV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nOwogICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fb3Jp
Z2luVHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAppbmRleCBlMmNlNjc1ZTUw
NWE3NGExYjg0NTA0MWZhNjUzMzM4OWE1YTc0MGUyLi5hMmI1YzEyMzRlZDAwMDNmNmNkMWY3YWYy
MmY1MzA5MWZlYzk0NGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtMzkzLDgg
KzM5Myw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2NoZWR1bGVkQWN0aW9uQmVnaW5GcmFtZSgp
CiB7CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rp
b25CZWdpbkZyYW1lIik7CiAgICAgQVNTRVJUKCFtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdCk7
Ci0gICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QgPSBhZG9wdFB0cihuZXcgQmVnaW5GcmFt
ZUFuZENvbW1pdFN0YXRlKCkpOwotICAgIG1fcGVuZGluZ0JlZ2luRnJhbWVSZXF1ZXN0LT5mcmFt
ZUJlZ2luVGltZSA9IDA7CisgICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QgPSBhZG9wdFB0
cihuZXcgQmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlKG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZSgpKSk7CiAgICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QtPnNjcm9sbEluZm8gPSBtX2xh
eWVyVHJlZUhvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CiAKICAgICBtX21haW5UaHJl
YWRQcm94eS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5
OjpiZWdpbkZyYW1lKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKaW5kZXggOWU1MjRhNzYzZTI4
NTBmZDIwOWMxM2UzNTI2MTJlYzVjYTMwNDllMS4uYWFmMmY3MmJlMjI4MzdmNmViMDQ1MjdkMmFk
NTI3ZTFiYzdjNjI5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaApAQCAtOTIsNyArOTIsNyBA
QCBwcml2YXRlOgogCiAgICAgLy8gU2V0IG9uIGltcGwgdGhyZWFkLCByZWFkIG9uIG1haW4gdGhy
ZWFkLgogICAgIHN0cnVjdCBCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGUgewotICAgICAgICBCZWdp
bkZyYW1lQW5kQ29tbWl0U3RhdGUoKSA6IGZyYW1lQmVnaW5UaW1lKDApIHsgfQorICAgICAgICBC
ZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSA6IGZyYW1lQmVn
aW5UaW1lKGZyYW1lQmVnaW5UaW1lKSB7IH0KICAgICAgICAgZG91YmxlIGZyYW1lQmVnaW5UaW1l
OwogICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbzsKICAgICB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggMTQ3NjBhNDc4MmU5YzNhM2NjY2E3
NTllNGVmNTc2NWM2ODM3ZDNkZC4uMDdlYjRhNjdiMjhkNmIzMzZjOGRkNTBmYjRjYzMwNzJhOGRm
MGUzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02Nyw3ICs2Nyw2IEBACiAg
ICAgICAgICAgICAndGVzdHMvQ0NEZWxheUJhc2VkVGltZVNvdXJjZVRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwJywKLSAgICAgICAgICAg
ICd0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NM
YXllckl0ZXJhdG9yVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwCmluZGV4IGM5MjQwZTMxZmNjNmI3ZjAw
YzFiNjkzN2ZhNzY5MWJiMDNiNDVkYzMuLmMyMmU0MzIyYjkxNzg0ZjgyMWFjYzIyZDdkNjE2MzZk
ZTU2NWE4OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmlt
YXRpb25UZXN0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
QW5pbWF0aW9uVGVzdENvbW1vbi5jcHAKQEAgLTEwNiwxMiArMTA2LDEyIEBAIGZsb2F0IEZha2VG
bG9hdFRyYW5zaXRpb246OmdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAogICAgIHJldHVybiAo
MSAtIHRpbWUpICogbV9mcm9tICsgdGltZSAqIG1fdG87CiB9CiAKLUZha2VMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsQ2xpZW50OjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENs
aWVudCgpCitGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50OjpGYWtlTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyQ2xpZW50KCkKICAgICA6IG1fb3BhY2l0eSgwKQogewogfQogCi1GYWtl
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudDo6fkZha2VMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsQ2xpZW50KCkKK0Zha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQ6
On5GYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KCkKIHsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgKaW5k
ZXggZDEzZTc0Y2ExNzFlZTkzOWJjNjEwZjkzNGIwMzM4NmQxNjc2N2RjZS4uMjNhODhmN2Q2Y2M2
ODkyZDM4MzEyZjZiZWNiODk5ZDJjMzNhYzBjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oCkBAIC0yNiwxMiArMjYsMTEg
QEAKICNkZWZpbmUgQ0NBbmltYXRpb25UZXN0Q29tbW9uX2gKIAogI2luY2x1ZGUgImNjL0NDQW5p
bWF0aW9uQ3VydmUuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogCiAjaW5j
bHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIExheWVyQ2hyb21pdW07CiB9CiAKQEAgLTc3LDE2
ICs3NiwxNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fdG87CiB9OwogCi1jbGFzcyBGYWtlTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgeworY2xhc3MgRmFrZUxheWVyQW5pbWF0aW9u
Q29udHJvbGxlckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQoKTsKLSAgICB2aXJ0dWFsIH5GYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bENsaWVudCgpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQoKTsKKyAg
ICB2aXJ0dWFsIH5GYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KCk7CiAKKyAgICAv
LyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBpbXBsZW1lbnRhdGlvbgogICAgIHZp
cnR1YWwgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgZmxvYXQgb3Bh
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRP
cGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQotICAgIHZpcnR1
YWwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShj
b25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNm
b3JtID0gdHJhbnNmb3JtOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEFuaW1hdGVkT3BhY2l0eShm
bG9hdCBvcGFjaXR5KSB7IG1fb3BhY2l0eSA9IG9wYWNpdHk7IH0KKyAgICB2aXJ0dWFsIGZsb2F0
IGFuaW1hdGVkT3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQorICAgIHZpcnR1
YWwgdm9pZCBzZXRBbmltYXRlZFRyYW5zZm9ybShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9CisgICAgdmly
dHVhbCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgYW5pbWF0ZWRUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQogICAgIHZpcnR1YWwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KIAogcHJp
dmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlMWFlY2NjNTM5YTVkNTFkZmYxOGEyYmU3YzQyZWViYTE0NTdlZmJk
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgiCi0jaW5j
bHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCi0jaW5jbHVkZSAiY2Mv
Q0NBbmltYXRpb25DdXJ2ZS5oIgotI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uRXZlbnRzLmgiCi0j
aW5jbHVkZSA8Z21vY2svZ21vY2suaD4KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1l
c3BhY2UgV2ViS2l0VGVzdHM7Ci0KLW5hbWVzcGFjZSB7Ci0KLVBhc3NPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3Vy
dmU+IGN1cnZlLCBpbnQgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSBwcm9w
ZXJ0eSkKLXsKLSAgICByZXR1cm4gQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZSwgMCwg
aWQsIHByb3BlcnR5KTsKLX0KLQotLy8gVGVzdHMgdGhhdCB0cmFuc2l0aW9uaW5nIG9wYWNpdHkg
ZnJvbSAwIHRvIDEgd29ya3MgYXMgZXhwZWN0ZWQuCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxUcmFuc2l0aW9uKQotewotICAgIE93blB0cjxDQ0FuaW1h
dGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1Zl
Y3RvcikpOwotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15
OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIo
Ci0gICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkp
OwotCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmlt
YXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJl
bGVhc2UoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VR
KDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRz
KTsKLSAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBFWFBFQ1RfRkFMU0Uo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotfQotCi0vLyBUZXN0cyB0aGF0IHR3
byBxdWV1ZWQgYW5pbWF0aW9ucyBhZmZlY3RpbmcgdGhlIHNhbWUgcHJvcGVydHkgcnVuIGluIHNl
cXVlbmNlLgotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2aWFs
UXVldWluZykKLXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhh
ZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtlTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIGNvbnRyb2xsZXItPmFkZChj
cmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwg
MCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXIt
PmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRp
b24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNp
dHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDEs
IGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsK
LSAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBFWFBFQ1RfRkFMU0Uo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotfQotCi0vLyBUZXN0cyBpbnRlcnJ1
cHRpbmcgYSB0cmFuc2l0aW9uIHdpdGggYW5vdGhlciB0cmFuc2l0aW9uLgotVEVTVChDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBJbnRlcnJ1cHQpCi17Ci0gICAgT3duUHRyPEND
QW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yKSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQg
ZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJv
bGxlcigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1
bW15KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNU
X0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0KLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+
IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAg
dG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2ss
IDApOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwotCi0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgwLjUsICpldmVudHMpOyAvLyBzZWNvbmQgYW5pbSBzdGFydHMgTk9XLgot
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBF
WFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEu
NSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAg
RVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLX0KLQotLy8g
VGVzdHMgc2NoZWR1bGluZyB0d28gYW5pbWF0aW9ucyB0byBydW4gdG9nZXRoZXIgd2hlbiBvbmx5
IG9uZSBwcm9wZXJ0eSBpcyBmcmVlLgotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2hlbkFQcm9wZXJ0eUlzQmxvY2tlZCkKLXsKLSAgICBP
d25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmlt
YXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
PiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNy
ZWF0ZSgmZHVtbXkpKTsKLQotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMSwgQ0NBY3RpdmVB
bmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVB
bmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMiwgQ0NB
Y3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkp
LCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAgY29udHJvbGxlci0+YW5p
bWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKLSAgICAvLyBTaG91bGQgbm90IGhhdmUgc3Rh
cnRlZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQuCi0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5
KCkpOwotICAgIC8vIFRoZSB0aGUgZmxvYXQgYW5pbWF0aW9uIHNob3VsZCBoYXZlIHN0YXJ0ZWQg
YXQgdGltZSAxIGFuZCBzaG91bGQgYmUgZG9uZS4KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIs
ICpldmVudHMpOwotICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIEVYUEVD
VF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci19Ci0KLS8vIFRlc3Rz
IHNjaGVkdWxpbmcgdHdvIGFuaW1hdGlvbnMgdG8gcnVuIHRvZ2V0aGVyIHdpdGggZGlmZmVyZW50
IGxlbmd0aHMgYW5kIGFub3RoZXIKLS8vIGFuaW1hdGlvbiBxdWV1ZWQgdG8gc3RhcnQgd2hlbiB0
aGUgc2hvcnRlciBhbmltYXRpb24gZmluaXNoZXMgKHNob3VsZCB3YWl0Ci0vLyBmb3IgYm90aCB0
byBmaW5pc2gpLgotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hl
ZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCi17Ci0gICAgT3duUHRyPENDQW5pbWF0aW9u
RXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9y
KSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7Ci0g
ICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKLSAg
ICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0K
LSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBG
YWtlVHJhbnNmb3JtVHJhbnNpdGlvbigyKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zv
cm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAgIC8vIEFuaW1zIHdpdGggaWQgMSBzaG91bGQgYm90
aCBzdGFydCBub3cuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNU
X0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgLy8gVGhlIG9wYWNpdHkgYW5pbWF0aW9uIHNo
b3VsZCBoYXZlIGZpbmlzaGVkIGF0IHRpbWUgMSwgYnV0IHRoZSBncm91cAotICAgIC8vIG9mIGFu
aW1hdGlvbnMgd2l0aCBpZCAxIGRvbid0IGZpbmlzaCB1bnRpbCB0aW1lIDIgYmVjYXVzZSBvZiB0
aGUgbGVuZ3RoCi0gICAgLy8gb2YgdGhlIHRyYW5zZm9ybSBhbmltYXRpb24uCi0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKLSAgICAvLyBTaG91bGQgbm90IGhhdmUgc3RhcnRl
ZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQuCi0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkp
OwotCi0gICAgLy8gVGhlIHRoZSBzZWNvbmQgb3BhY2l0eSBhbmltYXRpb24gc2hvdWxkIHN0YXJ0
IGF0IHRpbWUgMiBhbmQgc2hvdWxkIGJlCi0gICAgLy8gZG9uZSBieSB0aW1lIDMKLSAgICBjb250
cm9sbGVyLT5hbmltYXRlKDMsICpldmVudHMpOwotICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5v
cGFjaXR5KCkpOwotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7Ci19Ci0KLS8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGlu
IHRoZSBmdXR1cmUuCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNj
aGVkdWxlQW5pbWF0aW9uKQotewotICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4g
ZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwotICAgIEZha2VM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotCi0gICAgT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOwotICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGlu
Z0ZvclN0YXJ0VGltZSwgMCk7Ci0gICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKLSAgICBjb250
cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLQotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwot
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX0VRKDEsIGR1
bW15Lm9wYWNpdHkoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKLX0KLQotLy8gVGVzdHMgc2NoZWR1bGluZyBhbiBhbmltYXRpb24gdG8gc3Rh
cnQgaW4gdGhlIGZ1dHVyZSB0aGF0J3MgaW50ZXJydXB0aW5nIGEgcnVubmluZyBhbmltYXRpb24u
Ci1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlZEFuaW1h
dGlvbkludGVycnVwdHNSdW5uaW5nQW5pbWF0aW9uKQotewotICAgIE93blB0cjxDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cikpOwotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15Owot
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0g
ICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwot
Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7Ci0KLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLjVmLCAwKSks
IDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgdG9BZGQtPnNldFJ1blN0YXRl
KENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKLSAgICB0b0FkZC0+
c2V0U3RhcnRUaW1lKDEpOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwot
Ci0gICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0cmFuc2l0aW9uIHNob3VsZCBzdGFydCBpbW1lZGlh
dGVseS4KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwotICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMCwg
ZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSwgKmV2ZW50cyk7
Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAg
IEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDEsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBj
b250cm9sbGVyLT5hbmltYXRlKDIsICpldmVudHMpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5v
cGFjaXR5KCkpOwotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7Ci19Ci0KLS8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGlu
IHRoZSBmdXR1cmUgdGhhdCBpbnRlcnJ1cHRzIGEgcnVubmluZyBhbmltYXRpb24KLS8vIGFuZCB0
aGVyZSBpcyB5ZXQgYW5vdGhlciBhbmltYXRpb24gcXVldWVkIHRvIHN0YXJ0IGxhdGVyLgotVEVT
VChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25J
bnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvbldpdGhBbmltSW5RdWV1ZSkKLXsKLSAgICBPd25QdHI8
Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25F
dmVudHNWZWN0b3IpKTsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVu
dCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250
cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgm
ZHVtbXkpKTsKLQotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOwotCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChj
cmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwg
MC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIHRvQWRkLT5z
ZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7Ci0g
ICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVs
ZWFzZSgpKTsKLQotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMC43NWYpKSwgMywgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAgIC8vIEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlv
biBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAq
ZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+
YW5pbWF0ZSgwLjUsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7
Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5v
cGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMywgKmV2ZW50cyk7Ci0gICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9F
USgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoNCwgKmV2ZW50
cyk7Ci0gICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIEVYUEVDVF9G
QUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci19Ci0KLS8vIFRlc3QgdGhh
dCBhIGxvb3BpbmcgYW5pbWF0aW9uIGxvb3BzIGFuZCBmb3IgdGhlIGNvcnJlY3QgbnVtYmVyIG9m
IGl0ZXJhdGlvbnMuCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRy
aXZpYWxMb29waW5nKQotewotICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZl
bnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwotICAgIEZha2VMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotCi0gICAgT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOwotICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKDMpOwotICAgIGNvbnRyb2xsZXItPmFkZCh0
b0FkZC5yZWxlYXNlKCkpOwotCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsK
LSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAg
RVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgx
LjI1LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMS43NSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXku
b3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIuMjUsICpldmVudHMpOwotICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBF
Q1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgy
Ljc1LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMywgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0
eSgpKTsKLQotICAgIC8vIEp1c3QgYmUgZXh0cmEgc3VyZS4KLSAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDQsICpldmVudHMpOwotICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwotfQot
Ci0vLyBUZXN0IHRoYXQgYW4gaW5maW5pdGVseSBsb29waW5nIGFuaW1hdGlvbiBkb2VzIGluZGVl
ZCBnbyB1bnRpbCBhYm9ydGVkLgotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxU
ZXN0LCBJbmZpbml0ZUxvb3BpbmcpCi17Ci0gICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7Ci0gICAg
RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRy
PENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKLSAgICAgICAgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0KLSAgICBjb25z
dCBpbnQgaWQgPSAxOwotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEp
KSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgdG9BZGQtPnNldEl0ZXJh
dGlvbnMoLTEpOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwotCi0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNp
dHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjI1LCAqZXZlbnRzKTsKLSAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VR
KDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSwg
KmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwotICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLQotICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMTA3Mzc0MTgyNC4yNSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjI1Ziwg
ZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuNzUs
ICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKLSAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0KLSAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9u
OjpBYm9ydGVkLCAwLjc1Zik7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci19
Ci0KLS8vIFRlc3QgdGhhdCBwYXVzaW5nIGFuZCByZXN1bWluZyB3b3JrIGFzIGV4cGVjdGVkLgot
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBQYXVzZVJlc3VtZSkKLXsK
LSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcg
Q0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIGNvbnN0IGludCBpZCA9IDE7Ci0gICAgY29udHJv
bGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJh
bnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9w
YWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsICpldmVudHMpOwotICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1Rf
RVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLQotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
PmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAg
ICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgMC41Zik7Ci0K
LSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC41Ziwg
ZHVtbXkub3BhY2l0eSgpKTsKLQotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2
ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9s
bGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+
c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDEwMjQpOwotCi0gICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgxMDI0LjI1LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1t
eS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNC41LCAqZXZlbnRzKTsK
LSAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAg
IEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwotfQotCi1URVNUKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbFRlc3QsIEFib3J0QUdyb3VwZWRBbmltYXRpb24pCi17Ci0gICAgT3du
UHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yKSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxD
bGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4g
Y29udHJvbGxlcigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVh
dGUoJmR1bW15KSk7Ci0KLSAgICBjb25zdCBpbnQgaWQgPSAxOwotICAgIGNvbnRyb2xsZXItPmFk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0
aW9uKDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAgICBjb250cm9s
bGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDIsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAg
Y29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigxLCAxLCAwLjc1ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOwotCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAs
IGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsK
LSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAg
RVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0KLSAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7Ci0gICAgY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSktPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCAx
KTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMSwgZHVt
bXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsICpldmVudHMpOwotICAg
IEVYUEVDVF9UUlVFKCFjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQ
RUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlclRlc3QuY3BwCmluZGV4IGM0ZjEwM2EzY2FmZTQ2OGU0YjhlNzk3ODZk
MmIyMTg3ZTQ1ZDdlYTEuLjhlYjA4NDBlZGFkZjJmYjYyZjk3N2NjNzkwZDY1NmFlNzYzMTBmODMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAKQEAgLTU2LDcgKzU2LDggQEAgUGFzc093
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8
Q0NBbmltYXRpb25DdXJ2ZT4KIAogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3Qs
IGNyZWF0ZU9wYWNpdHlBbmltYXRpb24pCiB7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUo
KSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBP
d25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKICAgICBjb25zdCBkb3VibGUgZHVyYXRp
b24gPSAxOwogICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFBy
b3BlcnR5T3BhY2l0eSk7CiAgICAgdmFsdWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1
ZSgwLCAwKSk7CkBAIC04Nyw3ICs4OCw4IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJUZXN0LCBjcmVhdGVPcGFjaXR5QW5pbWF0aW9uKQogCiBURVNUKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyVGVzdCwgY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uKQogewotICAgIE93blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6Y3JlYXRlKCkpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGll
bnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9s
bGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAgICAgY29u
c3QgZG91YmxlIGR1cmF0aW9uID0gMTsKICAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2
YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CiAKQEAgLTEyNCw5MiArMTI2
LDM3MCBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRlVHJhbnNm
b3JtQW5pbWF0aW9uKQogCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgc3lu
Y05ld0FuaW1hdGlvbikKIHsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENs
aWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBj
b250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVt
bXkpKTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpKTsKKyAgICBGYWtlTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15SW1wbDsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXJJbXBsKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpjcmVhdGUoJmR1bW15SW1wbCkpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJD
bGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250
cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKICAg
ICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgYWRkT3BhY2l0eVRyYW5zaXRpb25Ub0Nv
bnRyb2xsZXIoKmNvbnRyb2xsZXIsIDEsIDAsIDEpOwogCi0gICAgY29udHJvbGxlci0+c3luY2hy
b25pemVBbmltYXRpb25zKGNvbnRyb2xsZXJJbXBsLmdldCgpKTsKKyAgICBjb250cm9sbGVyLT5w
dXNoQW5pbWF0aW9uVXBkYXRlc1RvKGNvbnRyb2xsZXJJbXBsLmdldCgpKTsKIAogICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKICAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OldhaXRp
bmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRp
b24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKIH0KIAotVEVT
VChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIHN5bmNBbmltYXRpb25Qcm9wZXJ0aWVz
KQorLy8gVGVzdHMgdGhhdCB0cmFuc2l0aW9uaW5nIG9wYWNpdHkgZnJvbSAwIHRvIDEgd29ya3Mg
YXMgZXhwZWN0ZWQuCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgVHJpdmlh
bFRyYW5zaXRpb24pCiB7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGll
bnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29u
dHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15
KSk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSk7CisgICAgT3duUHRyPENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAg
ICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCisgICAgICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBFWFBF
Q1RfRkFMU0UoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQo
Y3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEs
IDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIGFkZE9wYWNp
dHlUcmFuc2l0aW9uVG9Db250cm9sbGVyKCpjb250cm9sbGVyLCAxLCAwLCAxKTsKKyAgICBjb250
cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAs
IGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9FUSgx
LCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KIAotICAgIGNvbnRyb2xsZXItPnN5bmNocm9uaXpl
QW5pbWF0aW9ucyhjb250cm9sbGVySW1wbC5nZXQoKSk7CisvLyBUZXN0cyB0aGF0IHR3byBxdWV1
ZWQgYW5pbWF0aW9ucyBhZmZlY3RpbmcgdGhlIHNhbWUgcHJvcGVydHkgcnVuIGluIHNlcXVlbmNl
LgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFRyaXZpYWxRdWV1aW5nKQor
eworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5l
dyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
PiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRl
KCZkdW1teSkpOwogCi0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFu
aW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIEVYUEVDVF9FUShD
Q0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgY29udHJvbGxl
ckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkt
PnJ1blN0YXRlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmlt
YXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgLy8gUHVzaCBhbiBhbmltYXRpb24g
cHJvcGVydHkgY2hhbmdlIHRvIHRoZSBpbXBsIHRocmVhZCAoc2hvdWxkIG5vdCBjYXVzZSBhbiBh
bmltYXRpb24gdG8gYmUgYWRkZWQpLgotICAgIGNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9uKDAs
IDApOwotICAgIGNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1w
bC5nZXQoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOworICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBF
Q1RfRVEoMCwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgp
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNU
X0VRKDAuNWYsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworfQogCi0gICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOwotICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2VkLCBjb250cm9s
bGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KS0+cnVuU3RhdGUoKSk7CisvLyBUZXN0cyBpbnRlcnJ1cHRpbmcgYSB0cmFuc2l0aW9uIHdpdGgg
YW5vdGhlciB0cmFuc2l0aW9uLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3Qs
IEludGVycnVwdCkKK3sKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50
cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAs
IGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisK
KyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZl
QW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2ssIDApOworICAgIGNvbnRyb2xsZXItPmFkZCh0
b0FkZC5yZWxlYXNlKCkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsIGV2ZW50cy5n
ZXQoKSk7IC8vIHNlY29uZCBhbmltIHN0YXJ0cyBOT1cuCisgICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgxLCBkdW1teS5hbmlt
YXRlZE9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjUsIGV2ZW50cy5nZXQo
KSk7CisgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBF
WFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQogCi1URVNU
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgc3luY0Fib3J0ZWRBbmltYXRpb24pCisv
LyBUZXN0cyBzY2hlZHVsaW5nIHR3byBhbmltYXRpb25zIHRvIHJ1biB0b2dldGhlciB3aGVuIG9u
bHkgb25lIHByb3BlcnR5IGlzIGZyZWUuCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
VGVzdCwgU2NoZWR1bGVUb2dldGhlcldoZW5BUHJvcGVydHlJc0Jsb2NrZWQpCiB7Ci0gICAgRmFr
ZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlckltcGwoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgT3duUHRyPENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpjcmVhdGUoKSk7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMo
YWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5p
bWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlckltcGwt
PmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAg
IGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VU
cmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkp
OworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3
IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5z
Zm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOwogCi0gICAgYWRkT3BhY2l0eVRyYW5zaXRpb25Ub0NvbnRyb2xsZXIoKmNv
bnRyb2xsZXIsIDEsIDAsIDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdl
dCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDEsIGV2ZW50cy5nZXQoKSk7CisgICAgLy8gU2hvdWxkIG5vdCBoYXZlIHN0
YXJ0ZWQgdGhlIGZsb2F0IHRyYW5zaXRpb24geWV0LgorICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkuYW5pbWF0
ZWRPcGFjaXR5KCkpOworICAgIC8vIFRoZSB0aGUgZmxvYXQgYW5pbWF0aW9uIHNob3VsZCBoYXZl
IHN0YXJ0ZWQgYXQgdGltZSAxIGFuZCBzaG91bGQgYmUgZG9uZS4KKyAgICBjb250cm9sbGVyLT5h
bmltYXRlKDIsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15LmFuaW1hdGVk
T3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOworfQogCi0gICAgY29udHJvbGxlci0+c3luY2hyb25pemVBbmltYXRpb25zKGNvbnRy
b2xsZXJJbXBsLmdldCgpKTsKKy8vIFRlc3RzIHNjaGVkdWxpbmcgdHdvIGFuaW1hdGlvbnMgdG8g
cnVuIHRvZ2V0aGVyIHdpdGggZGlmZmVyZW50IGxlbmd0aHMgYW5kIGFub3RoZXIKKy8vIGFuaW1h
dGlvbiBxdWV1ZWQgdG8gc3RhcnQgd2hlbiB0aGUgc2hvcnRlciBhbmltYXRpb24gZmluaXNoZXMg
KHNob3VsZCB3YWl0CisvLyBmb3IgYm90aCB0byBmaW5pc2gpLgorVEVTVChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlclRlc3QsIFNjaGVkdWxlVG9nZXRoZXJXaXRoQW5BbmltV2FpdGluZykKK3sK
KyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcg
Q0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4g
Y29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgm
ZHVtbXkpKTsKIAotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmlt
YXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBFWFBFQ1RfRVEoQ0NB
Y3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIGNvbnRyb2xsZXJJ
bXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5y
dW5TdGF0ZSgpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFk
b3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigyKSksIDEsIENDQWN0aXZlQW5pbWF0
aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0
aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwg
MiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIC8vIEFuaW1zIHdpdGggaWQg
MSBzaG91bGQgYm90aCBzdGFydCBub3cuCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVu
dHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIC8v
IFRoZSBvcGFjaXR5IGFuaW1hdGlvbiBzaG91bGQgaGF2ZSBmaW5pc2hlZCBhdCB0aW1lIDEsIGJ1
dCB0aGUgZ3JvdXAKKyAgICAvLyBvZiBhbmltYXRpb25zIHdpdGggaWQgMSBkb24ndCBmaW5pc2gg
dW50aWwgdGltZSAyIGJlY2F1c2Ugb2YgdGhlIGxlbmd0aAorICAgIC8vIG9mIHRoZSB0cmFuc2Zv
cm0gYW5pbWF0aW9uLgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgZXZlbnRzLmdldCgpKTsK
KyAgICAvLyBTaG91bGQgbm90IGhhdmUgc3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQu
CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAg
IEVYUEVDVF9FUSgxLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CiAKLSAgICBjb250cm9sbGVy
LT5yZW1vdmVBbmltYXRpb24oMCk7CisgICAgLy8gVGhlIHRoZSBzZWNvbmQgb3BhY2l0eSBhbmlt
YXRpb24gc2hvdWxkIHN0YXJ0IGF0IHRpbWUgMiBhbmQgc2hvdWxkIGJlCisgICAgLy8gZG9uZSBi
eSB0aW1lIDMKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMsIGV2ZW50cy5nZXQoKSk7CisgICAg
RVhQRUNUX0VRKDAuNWYsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFM
U0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworfQogCi0gICAgLy8gQWJvcnQg
YW4gYW5pbWF0aW9uIGZyb20gdGhlIG1haW4gdGhyZWFkLgotICAgIGNvbnRyb2xsZXItPnN5bmNo
cm9uaXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbC5nZXQoKSk7CisvLyBUZXN0cyBzY2hlZHVs
aW5nIGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlLgorVEVTVChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlclRlc3QsIFNjaGVkdWxlQW5pbWF0aW9uKQoreworICAgIE93blB0cjxD
Q0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2
ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVt
bXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAor
ICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCi0g
ICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+
IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9B
ZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAw
KTsKKyAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOworICAgIGNvbnRyb2xsZXItPmFkZCh0b0Fk
ZC5yZWxlYXNlKCkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkp
OworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAg
ICBFWFBFQ1RfRVEoMCwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15LmFuaW1hdGVkT3Bh
Y2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsIGV2ZW50cy5nZXQoKSk7CisgICAg
RVhQRUNUX0VRKDEsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQogCi1URVNUKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyVGVzdCwgc3luY0NvbXBsZXRlZEFuaW1hdGlvbikKKy8vIFRlc3RzIHNj
aGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUgdGhhdCdzIGludGVy
cnVwdGluZyBhIHJ1bm5pbmcgYW5pbWF0aW9uLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlclRlc3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5pbWF0aW9uKQog
ewotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAg
IE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXJJbXBsKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6Y3JlYXRlKCkpOworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZh
a2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgRVhQRUNUX0ZBTFNFKGNvbnRy
b2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKIAotICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9Db250cm9sbGVyKCpjb250
cm9sbGVyLCAxLCAwLCAxKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAw
LjVmLCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNl
dFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKKyAg
ICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOworICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxl
YXNlKCkpOwogCi0gICAgY29udHJvbGxlci0+c3luY2hyb25pemVBbmltYXRpb25zKGNvbnRyb2xs
ZXJJbXBsLmdldCgpKTsKKyAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5zaXRpb24gc2hvdWxk
IHN0YXJ0IGltbWVkaWF0ZWx5LgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdl
dCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
CisgICAgRVhQRUNUX0VRKDAsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDAuNSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5h
bmltYXRlZE9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCBldmVudHMuZ2V0
KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
KyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMiwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXku
YW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7Cit9CiAKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVySW1wbC0+Z2V0
QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgRVhQ
RUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCBj
b250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KS0+cnVuU3RhdGUoKSk7CisvLyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0
byBzdGFydCBpbiB0aGUgZnV0dXJlIHRoYXQgaW50ZXJydXB0cyBhIHJ1bm5pbmcgYW5pbWF0aW9u
CisvLyBhbmQgdGhlcmUgaXMgeWV0IGFub3RoZXIgYW5pbWF0aW9uIHF1ZXVlZCB0byBzdGFydCBs
YXRlci4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBTY2hlZHVsZWRBbmlt
YXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvbldpdGhBbmltSW5RdWV1ZSkKK3sKKyAgICBP
d25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmlt
YXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xp
ZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJv
bGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkp
KTsKIAotICAgIC8vIFN0ZXAgdGhyb3VnaCB0aGUgYW5pbWF0aW9uIHVudGlsIGl0IGlzIGZpbmlz
aGVkLiBBdCB0aGUgbmV4dCBzeW5jLCB0aGUgbWFpbiB0aHJlYWQncyBhbmltYXRpb24gc2hvdWxk
IGJlIGNsZWFyZWQuCisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihh
ZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRk
KGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigy
LCAwLjVmLCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQt
PnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsK
KyAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOworICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5y
ZWxlYXNlKCkpOworCisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihh
ZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAwLjc1ZikpLCAzLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0cmFuc2l0
aW9uIHNob3VsZCBzdGFydCBpbW1lZGlhdGVseS4KKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAs
IGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjI1
ZiwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsIGV2ZW50
cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOworICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgzLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXku
YW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoNCwgZXZlbnRzLmdl
dCgpKTsKKyAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworfQorCisv
LyBUZXN0IHRoYXQgYSBsb29waW5nIGFuaW1hdGlvbiBsb29wcyBhbmQgZm9yIHRoZSBjb3JyZWN0
IG51bWJlciBvZiBpdGVyYXRpb25zLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRl
c3QsIFRyaXZpYWxMb29waW5nKQorewogICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwotICAgIGNv
bnRyb2xsZXJJbXBsLT5hbmltYXRlKDAsICpldmVudHMpOwotICAgIGNvbnRyb2xsZXJJbXBsLT5h
bmltYXRlKDIsICpldmVudHMpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGll
bnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9s
bGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkp
OwogCi0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24o
MCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Cisg
ICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoMyk7CisgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJl
bGVhc2UoKSk7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7Cisg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVY
UEVDVF9FUSgwLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgxLjI1LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15LmFuaW1hdGVk
T3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUsIGV2ZW50cy5nZXQoKSk7
CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAg
IEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMi4yNSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5h
bmltYXRlZE9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLjc1LCBldmVudHMu
Z2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKKyAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDMsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXku
YW5pbWF0ZWRPcGFjaXR5KCkpOworCisgICAgLy8gSnVzdCBiZSBleHRyYSBzdXJlLgorICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoNCwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVt
bXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworfQorCisvLyBUZXN0IHRoYXQgYW4gaW5maW5pdGVseSBs
b29waW5nIGFuaW1hdGlvbiBkb2VzIGluZGVlZCBnbyB1bnRpbCBhYm9ydGVkLgorVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIEluZmluaXRlTG9vcGluZykKK3sKKyAgICBPd25Q
dHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRp
b25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50
IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxl
cigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsK
KworICAgIGNvbnN0IGludCBpZCA9IDE7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0
b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRp
b24oMSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICB0b0Fk
ZC0+c2V0SXRlcmF0aW9ucygtMSk7CisgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2Uo
KSk7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9F
USgwLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgx
LjI1LCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15LmFuaW1hdGVkT3BhY2l0
eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUsIGV2ZW50cy5nZXQoKSk7CisgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVD
VF9FUSgwLjc1ZiwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworCisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgxMDczNzQxODI0LjI1LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1
bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4
MjQuNzUsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkuYW5pbWF0ZWRPcGFj
aXR5KCkpOworCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9u
KGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmdldEFj
dGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5zZXRSdW5TdGF0
ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMC43NWYpOworICAgIEVYUEVDVF9GQUxTRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNzVmLCBk
dW1teS5hbmltYXRlZE9wYWNpdHkoKSk7Cit9CisKKy8vIFRlc3QgdGhhdCBwYXVzaW5nIGFuZCBy
ZXN1bWluZyB3b3JrIGFzIGV4cGVjdGVkLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
clRlc3QsIFBhdXNlUmVzdW1lKQoreworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZh
a2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOworCisgICAgY29uc3QgaW50IGlkID0gMTsK
KyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CisgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVD
VF9FUSgwLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwLjUsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5hbmltYXRlZE9wYWNp
dHkoKSk7CiAKLSAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxl
ckltcGwuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1h
dGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5n
ZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVu
U3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgMC41Zik7CiAKKyAgICBjb250cm9sbGVy
LT5hbmltYXRlKDEwMjQsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5hbmlt
YXRlZE9wYWNpdHkoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVB
bmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxl
ci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNl
dFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCAxMDI0KTsKKworICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMTAyNC4yNSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNzVmLCBk
dW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LjUs
IGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOwor
fQorCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgQWJvcnRBR3JvdXBlZEFu
aW1hdGlvbikKK3sKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhh
ZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIGNvbnN0IGludCBpZCA9IDE7CisgICAgY29udHJv
bGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9y
bVRyYW5zaXRpb24oMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAg
IGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VG
bG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNzVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7
CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAg
IEVYUEVDVF9FUSgwLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgxLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkuYW5pbWF0ZWRP
cGFjaXR5KCkpOworCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0
aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmdl
dEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5zZXRSdW5T
dGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMSk7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgxLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5
KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBF
Q1RfVFJVRSghY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9F
USgwLjc1ZiwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVz
dC5jcHAKaW5kZXggZmU3ODhmYmFlZWU3N2U3OTNhMDAzOGVjN2FmMjkyNjU1ZmZjNzQ2Yi4uYjNj
YmUzMTIwN2ZlMWQ4Njk5OTlmZjMxZjVkMmRjOTRkMzc3YjExNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC03NCw3
ICs3NCw2IEBAIHB1YmxpYzoKIAogICAgIC8vIEltcGxlbWVudGF0aW9uIG9mIENDTGF5ZXJBbmlt
YXRpb25EZWxlZ2F0ZQogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRv
dWJsZSB0aW1lKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uRmluaXNoZWQo
aW50IGFuaW1hdGlvbklkKSB7IH0KIH07CiAKIC8vIEFkYXB0cyBDQ0xheWVyVHJlZUhvc3RJbXBs
IGZvciB0ZXN0LiBSdW5zIHJlYWwgY29kZSwgdGhlbiBpbnZva2VzIHRlc3QgaG9va3MuCkBAIC04
OTMsNyArODkyLDYgQEAgcHVibGljOgogICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRp
b24oKQogICAgICAgICA6IG1fbnVtQW5pbWF0ZXMoMCkKICAgICAgICAgLCBtX3JlY2VpdmVkQW5p
bWF0aW9uU3RhcnRlZE5vdGlmaWNhdGlvbihmYWxzZSkKLSAgICAgICAgLCBtX3JlY2VpdmVkQW5p
bWF0aW9uRmluaXNoZWROb3RpZmljYXRpb24oZmFsc2UpCiAgICAgICAgICwgbV9zdGFydFRpbWUo
MCkKICAgICAgICAgLCBtX2ZpcnN0TW9ub3RvbmljVGltZSgwKQogICAgIHsKQEAgLTkxOCw3ICs5
MTYsNiBAQCBwdWJsaWM6CiAgICAgICAgIEVYUEVDVF9MVCgwLCBtX2ZpcnN0TW9ub3RvbmljVGlt
ZSk7CiAgICAgICAgIEVYUEVDVF9ORShtX3N0YXJ0VGltZSwgbV9maXJzdE1vbm90b25pY1RpbWUp
OwogICAgICAgICBFWFBFQ1RfVFJVRShtX3JlY2VpdmVkQW5pbWF0aW9uU3RhcnRlZE5vdGlmaWNh
dGlvbik7Ci0gICAgICAgIEVYUEVDVF9UUlVFKG1fcmVjZWl2ZWRBbmltYXRpb25GaW5pc2hlZE5v
dGlmaWNhdGlvbik7CiAgICAgICAgIGVuZFRlc3QoKTsKICAgICB9CiAKQEAgLTkyOCwxMSArOTI1
LDYgQEAgcHVibGljOgogICAgICAgICBtX3N0YXJ0VGltZSA9IHdhbGxDbG9ja1RpbWU7CiAgICAg
fQogCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvbkZpbmlzaGVkKGludCkKLSAgICB7
Ci0gICAgICAgIG1fcmVjZWl2ZWRBbmltYXRpb25GaW5pc2hlZE5vdGlmaWNhdGlvbiA9IHRydWU7
Ci0gICAgfQotCiAgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCiAgICAgewogICAgIH0KQEAg
LTk0MCw3ICs5MzIsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGludCBtX251bUFuaW1hdGVz
OwogICAgIGJvb2wgbV9yZWNlaXZlZEFuaW1hdGlvblN0YXJ0ZWROb3RpZmljYXRpb247Ci0gICAg
Ym9vbCBtX3JlY2VpdmVkQW5pbWF0aW9uRmluaXNoZWROb3RpZmljYXRpb247CiAgICAgZG91Ymxl
IG1fc3RhcnRUaW1lOwogICAgIGRvdWJsZSBtX2ZpcnN0TW9ub3RvbmljVGltZTsKIH07CkBAIC05
ODcsNiArOTc4LDQ4IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0VGlja0FuaW1hdGlvbldo
aWxlQmFja2dyb3VuZGVkLCBydW5NdWx0aVRocmVhZCkKICAgICBydW5UZXN0VGhyZWFkZWQoKTsK
IH0KIAorLy8gRW5zdXJlcyB0aGF0IHdoZW4gb3BhY2l0eSBpcyBiZWluZyBhbmltYXRlZCwgdGhp
cyB2YWx1ZSBkb2VzIG5vdCBjYXVzZSB0aGUgc3VidHJlZSB0byBiZSBza2lwcGVkLgorY2xhc3Mg
Q0NMYXllclRyZWVIb3N0VGVzdERvTm90U2tpcExheWVyc1dpdGhBbmltYXRlZE9wYWNpdHkgOiBw
dWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkgeworcHVibGljOgorICAgIENDTGF5
ZXJUcmVlSG9zdFRlc3REb05vdFNraXBMYXllcnNXaXRoQW5pbWF0ZWRPcGFjaXR5KCkKKyAgICAg
ICAgOiBtX251bUFuaW1hdGVzKDApCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBi
ZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+
c2V0RHJhd09wYWNpdHkoMC41KTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3cG9y
dFNpemUoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5
ZXIoKS0+c2V0T3BhY2l0eSgwKTsKKyAgICAgICAgcG9zdEFkZEFuaW1hdGlvblRvTWFpblRocmVh
ZCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJzKENDTGF5ZXJUcmVl
SG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsLCBkb3VibGUgbW9ub3RvbmljVGltZSkKKyAgICB7
CisgICAgICAgIG1fbnVtQW5pbWF0ZXMrKzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0Q29tcGxldGVPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqKQorICAgIHsKKyAgICAg
ICAgRVhQRUNUX05FKDAuNSwgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+ZHJhd09wYWNp
dHkoKSk7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0
ZXJUZXN0KCkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIGludCBtX251bUFuaW1hdGVz
OworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3REb05vdFNraXBMYXllcnNXaXRoQW5p
bWF0ZWRPcGFjaXR5LCBydW5NdWx0aVRocmVhZCkKK3sKKyAgICBydW5UZXN0VGhyZWFkZWQoKTsK
K30KKworCisKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxTaW1wbGUgOiBwdWJsaWMg
Q0NMYXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkgewogcHVibGljOgogICAgIENDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxTaW1wbGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAppbmRleCBlYjM4NTBkYWIxMjI2YjE0Yjcx
ZWIyNmEzYTUxMzJjZDJiYTYxMDAzLi42MzEzOWQ4MmNiODFiOWM0NjY3NTViM2FkMWU4ZjFkMTNk
Mzg2YzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5j
aHJvbml6ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVT
eW5jaHJvbml6ZXJUZXN0LmNwcApAQCAtOTYsMjIgKzk2LDIzIEBAIHByaXZhdGU6CiAKIGNsYXNz
IEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIgOiBwdWJsaWMgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEZha2VMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NPd25QdHI8RmFrZUxheWVy
QW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xp
ZW50KiBjbGllbnQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIoY2xpZW50KSk7CiAgICAgfQogCiAgICAgYm9vbCBzeW5j
aHJvbml6ZWRBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9zeW5jaHJvbml6ZWRBbmltYXRp
b25zOyB9CiAKIHByaXZhdGU6Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpCi0g
ICAgICAgIDogbV9zeW5jaHJvbml6ZWRBbmltYXRpb25zKGZhbHNlKQorICAgIGV4cGxpY2l0IEZh
a2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGll
bnQqIGNsaWVudCkKKyAgICAgICAgOiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcihjbGllbnQp
CisgICAgICAgICwgbV9zeW5jaHJvbml6ZWRBbmltYXRpb25zKGZhbHNlKQogICAgIHsKICAgICB9
CiAKLSAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVBbmltYXRpb25zKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCisgICAgdmlydHVhbCB2b2lkIHB1c2hB
bmltYXRpb25VcGRhdGVzVG8oQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXJJ
bXBsKQogICAgIHsKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN5bmNocm9u
aXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbCk7CisgICAgICAgIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpwdXNoQW5pbWF0aW9uVXBkYXRlc1RvKGNvbnRyb2xsZXJJbXBsKTsKICAgICAg
ICAgbV9zeW5jaHJvbml6ZWRBbmltYXRpb25zID0gdHJ1ZTsKICAgICB9CiAKQEAgLTMzOSw3ICsz
NDAsOCBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jaHJvbml6ZUFuaW1hdGlvbnMp
CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKIAotICAgIGxh
eWVyVHJlZVJvb3QtPnNldExheWVyQW5pbWF0aW9uQ29udHJvbGxlcihGYWtlTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpjcmVhdGUoKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckNsaWVudCBkdW1teTsKKyAgICBsYXllclRyZWVSb290LT5zZXRMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIoRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCiAg
ICAgRVhQRUNUX0ZBTFNFKHN0YXRpY19jYXN0PEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIq
PihsYXllclRyZWVSb290LT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSktPnN5bmNocm9uaXpl
ZEFuaW1hdGlvbnMoKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132465</attachid>
            <date>2012-03-17 12:06:15 -0700</date>
            <delta_ts>2012-03-18 11:13:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81106-20120317150613.patch</filename>
            <type>text/plain</type>
            <size>133100</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODM2ZGVhZGMwNzYxNWYy
N2NjMTU1NjI5MDgyMDAyNzQxODQzNWE1YS4uOThlNzJiNDkxNTIyODA0MzVhYzE3YzY3ODUzOWE1
YjQ0MDUzOTFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMyBAQAorMjAxMi0wMy0xNyAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIElu
ZnJhc3RydWN0dXJlIHRvIGFsbG93IGFuaW1hdGluZyBsYXllcnMgdG8gYmUgb25seSBwYXJ0aWFs
bHkgdXBkYXRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODExMDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUZXN0cyBmb3IgdGhlIG1haW4gYW5kIGltcGwgdGhyZWFkIGNvbnRyb2xsZXJzIGhhdmUgYmVl
biBjb21iaW5lZCBpbiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QKKworICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoR3JhcGhpY3NMYXllckNocm9t
aXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldEFuaW1h
dGVkT3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRBbmltYXRl
ZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjphZGRBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Omhhc0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRBbmltYXRpb25FdmVudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFuaW1hdGVk
T3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjphbmltYXRlZFRyYW5z
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpib3VuZHMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmg6Cisg
ICAgICAgIChDQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NB
bmltYXRpb25FdmVudDo6Q0NBbmltYXRpb25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Fu
aW1hdGlvbkV2ZW50Ojp0b0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0FuaW1hdGlvbkV2ZW50Ojp0b1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBbmltYXRpb25TdGFydGVkRXZlbnQ6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5pbWF0aW9uU3RhcnRl
ZEV2ZW50OjpDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zs
b2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
RmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50OjpDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudDo6fkND
RmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRmxvYXRB
bmltYXRpb25GaW5pc2hlZEV2ZW50Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNm
b3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Q0NUcmFuc2Zvcm1BbmltYXRpb25GaW5p
c2hlZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNo
ZWRFdmVudDo6fkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OnR5cGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5pbWF0aW9uRXZlbnQ6OnRh
cmdldFByb3BlcnR5KToKKyAgICAgICAgKENDQW5pbWF0aW9uRXZlbnQpOgorICAgICAgICAoQ0NB
bmltYXRpb25TdGFydGVkRXZlbnQpOgorICAgICAgICAoQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVk
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6
OmZpbmFsVmFsdWUpOgorICAgICAgICAoQ0NUcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6
ZmluYWxWYWx1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hBbmltYXRpb25VcGRhdGVz
VG8pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1h
dGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpnZXRBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6Omhhc0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNBbmltYXRpbmdQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0FuaW1h
dGlvbnNUb0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN0YXJ0QW5pbWF0aW9uc1dh
aXRpbmdGb3JOZXh0VGljayk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3RhcnRBbmltYXRpb25zV2FpdGlu
Z0ZvclRhcmdldEF2YWlsYWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6cmVzb2x2ZUNvbmZsaWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnRpY2tBbmltYXRpb25zKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckNsaWVudDo6fkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KToKKyAg
ICAgICAgKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZS5oOgorICAgICAgICAo
Q0NMYXllckFuaW1hdGlvbkRlbGVnYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNldEFuaW1h
dGVkT3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJbXBsOjpzZXRBbmltYXRlZFRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySW1wbDo6YW5pbWF0ZWRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjphbmltYXRlZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6b3Bh
Y2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpsYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGxUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpkaWRCZWNvbWVJbnZpc2libGVP
bkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjphbmltYXRl
TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0OjphbmltYXRlTGF5ZXJzUmVjdXJzaXZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVyc1JlY3Vy
c2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5
ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnNjaGVkdWxlZEFjdGlvbkJlZ2luRnJhbWUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OkJlZ2luRnJhbWVBbmRDb21taXRTdGF0ZTo6
QmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlKToKKwogMjAxMi0wMy0xNyAgTmlrb2xhcyBaaW1tZXJt
YW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBFbmFibGUgYW5pbVZhbCBzdXBw
b3J0IGZvciBTVkdOdW1iZXJPcHRpb25hbE51bWJlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCAzNTc5MWIyZjg4MDdhYTVkZDk1MGMwMWM1NGU4NjhmY2Q0YWE2MWY1Li5mYjllYzYyYThh
N2NkYTc2ZjQ2M2EwODE1ODYxYmE0YjEwODMzNDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTAzLTE3ICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW5mcmFzdHJ1Y3R1cmUgdG8gYWxsb3cg
YW5pbWF0aW5nIGxheWVycyB0byBiZSBvbmx5IHBhcnRpYWxseSB1cGRhdGVkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTEwNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAg
ICAgICogdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYktpdFRl
c3RzOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50OjpGYWtlTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyQ2xpZW50Ojp+RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVu
dCk6CisgICAgICAgICogdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmg6CisgICAgICAgIChG
YWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdFRlc3Rz
OjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50OjpzZXRBbmltYXRlZE9wYWNpdHkp
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGll
bnQ6OmFuaW1hdGVkT3BhY2l0eSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyQW5p
bWF0aW9uQ29udHJvbGxlckNsaWVudDo6c2V0QW5pbWF0ZWRUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQ6OmFuaW1hdGVk
VHJhbnNmb3JtKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlclRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAo
V2ViS2l0VGVzdHMpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0QWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dEFkZEFuaW1hdGlvbjo6YW5pbWF0ZUxheWVycyk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RU
ZXN0QWRkQW5pbWF0aW9uKToKKyAgICAgICAgKiB0ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5j
cHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdFRlc3Rz
OjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uVXBkYXRlc1RvKToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNUKToKKwogMjAxMi0wMy0xNiAgSmFtZXMgUm9iaW5z
b24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gVW5pZnkgdGhl
IGRyYXdpbmcgbG9naWMgZm9yIGRpZmZlcmVudCBsYXllciB0eXBlcyB0aGF0IG91dHB1dCB0ZXh0
dXJlcyB0byB0aGUgY29tcG9zaXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGE1ZTg0NTg4OWE5ZmIw
MjU2NDVjZThiODY1ZTkzNTdjNjVlOWZjYTAuLjA0YzRiYTYyYzk3Y2U4ZGNhYmRjMzg4NmU4ODA3
ZTE5NTEyN2YwYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM0ODIsOCArMzQ4Miw2IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRp
b25DdXJ2ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAnLAotICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbC5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDRjODE4NTNi
ODIwMTE2NTgxMmI0YTNkMzUxOTEzMTRiNjA0Zjk3ZWIuLmRiMGJhMWMyYzlkMjI0OTJjYzUyOWJm
YzEyYTUyZGU5MzYwZmY0YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNw
cApAQCAtNzQ5LDE2ICs3NDksNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bm90aWZ5
QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKQogICAgICAgICBtX2NsaWVudC0+bm90
aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aGlzLCBzdGFydFRpbWUpOwogfQogCi12b2lkIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6bm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoaW50IGFuaW1hdGlvbklkKQot
ewotICAgIGZvciAoQW5pbWF0aW9uSWRNYXA6Oml0ZXJhdG9yIGlkSXRlciA9IG1fYW5pbWF0aW9u
SWRNYXAuYmVnaW4oKTsgaWRJdGVyICE9IG1fYW5pbWF0aW9uSWRNYXAuZW5kKCk7ICsraWRJdGVy
KSB7Ci0gICAgICAgIGlmIChpZEl0ZXItPnNlY29uZCA9PSBhbmltYXRpb25JZCkgewotICAgICAg
ICAgICAgbV9hbmltYXRpb25JZE1hcC5yZW1vdmUoaWRJdGVyKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVy
Q2hyb21pdW0uaAppbmRleCA0Y2NhODJhODg3YmUyODU5OWFmMTQ3NDE3ZWNhYmM3ODcxOTQ5Zjlj
Li45MWE0NTVhNTQxZTY2ZjlkODc2YmU2YWNlNjExZmM4YTBmYWM0N2E1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtMTE2LDcgKzExNiw2IEBAIHB1YmxpYzoKIAogICAg
IC8vIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKTsKLSAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoaW50IGFuaW1hdGlvbklkKTsKIAogICAg
IC8vIEV4cG9zZWQgZm9yIHRlc3RzLgogICAgIExheWVyQ2hyb21pdW0qIGNvbnRlbnRzTGF5ZXIo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5ZXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHAKaW5kZXggZDRjYWQyNGE2MTNiNmE3OTU0OTM5ZDE0NTU5YjdlZmZiMWZjNjA4OS4uNmFl
NWI5ODQzYjA5ZGFmNDI5MTJiZDE1ZjU0YzY3MDUxYjczMTFiMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSgpCiAg
ICAgOiBtX25lZWRzRGlzcGxheShmYWxzZSkKICAgICAsIG1fbGF5ZXJJZChzX25leHRMYXllcklk
KyspCiAgICAgLCBtX3BhcmVudCgwKQotICAgICwgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpKQorICAgICwgbV9sYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSh0aGlzKSkK
ICAgICAsIG1fc2Nyb2xsYWJsZShmYWxzZSkKICAgICAsIG1fc2hvdWxkU2Nyb2xsT25NYWluVGhy
ZWFkKGZhbHNlKQogICAgICwgbV9oYXZlV2hlZWxFdmVudEhhbmRsZXJzKGZhbHNlKQpAQCAtOTcs
NzAgKzk3LDYgQEAgTGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogICAgIHJlbW92ZUFs
bENoaWxkcmVuKCk7CiB9CiAKLWJvb2wgTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKGNvbnN0
IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0
IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBkb3Vi
bGUgdGltZU9mZnNldCkKLXsKLSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCB8fCAhbV9sYXllclRy
ZWVIb3N0LT5zZXR0aW5ncygpLnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYm9vbCBhZGRlZEFuaW1hdGlvbiA9IG1fbGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24sIGFuaW1h
dGlvbklkLCBncm91cElkLCB0aW1lT2Zmc2V0KTsKLSAgICBpZiAoYWRkZWRBbmltYXRpb24pCi0g
ICAgICAgIHNldE5lZWRzQ29tbWl0KCk7Ci0gICAgcmV0dXJuIGFkZGVkQW5pbWF0aW9uOwotfQot
Ci12b2lkIExheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgZG91
YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPnBhdXNl
QW5pbWF0aW9uKGFuaW1hdGlvbklkLCB0aW1lT2Zmc2V0KTsKLSAgICBzZXROZWVkc0NvbW1pdCgp
OwotfQotCi12b2lkIExheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9u
SWQpCi17Ci0gICAgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPnJlbW92ZUFuaW1hdGlvbihh
bmltYXRpb25JZCk7Ci0gICAgc2V0TmVlZHNDb21taXQoKTsKLX0KLQotdm9pZCBMYXllckNocm9t
aXVtOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKLXsKLSAgICBtX2xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci0+c3VzcGVuZEFuaW1hdGlvbnModGltZSk7Ci0gICAgc2V0TmVlZHNDb21t
aXQoKTsKLX0KLQotdm9pZCBMYXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKCkKLXsKLSAg
ICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOwotICAgIHNl
dE5lZWRzQ29tbWl0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGxheWVy
QW5pbWF0aW9uQ29udHJvbGxlcikKLXsKLSAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlciA9
IGxheWVyQW5pbWF0aW9uQ29udHJvbGxlcjsKLSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi1i
b29sIExheWVyQ2hyb21pdW06Omhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKTsKLX0K
LQotdm9pZCBMYXllckNocm9taXVtOjpzZXRBbmltYXRpb25FdmVudChjb25zdCBDQ0FuaW1hdGlv
bkV2ZW50JiBldmVudCwgZG91YmxlIHdhbGxDbG9ja1RpbWUpCi17Ci0gICAgc3dpdGNoIChldmVu
dC50eXBlKCkpIHsKLQotICAgIGNhc2UgQ0NBbmltYXRpb25FdmVudDo6U3RhcnRlZDogewotICAg
ICAgICBtX2xheWVyQW5pbWF0aW9uRGVsZWdhdGUtPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQod2Fs
bENsb2NrVGltZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQ0NBbmltYXRp
b25FdmVudDo6RmluaXNoZWQ6IHsKLSAgICAgICAgY29uc3QgQ0NBbmltYXRpb25GaW5pc2hlZEV2
ZW50KiBmaW5pc2hlZEV2ZW50ID0gZXZlbnQudG9BbmltYXRpb25GaW5pc2hlZEV2ZW50KCk7Ci0g
ICAgICAgIG1fbGF5ZXJBbmltYXRpb25EZWxlZ2F0ZS0+bm90aWZ5QW5pbWF0aW9uRmluaXNoZWQo
ZmluaXNoZWRFdmVudC0+YW5pbWF0aW9uSWQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIH0KLX0KLQogdm9pZCBMYXllckNocm9taXVtOjpzZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50
KGJvb2wgaXNOb25Db21wb3NpdGVkQ29udGVudCkKIHsKICAgICBtX2lzTm9uQ29tcG9zaXRlZENv
bnRlbnQgPSBpc05vbkNvbXBvc2l0ZWRDb250ZW50OwpAQCAtNTM0LDEyICs0NzAsMTQgQEAgdm9p
ZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAg
ICAgICAgbV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkNoYW5nZWQgPSBmYWxzZTsKICAgICB9CiAg
ICAgbGF5ZXItPnNldE9wYXF1ZShtX29wYXF1ZSk7Ci0gICAgbGF5ZXItPnNldE9wYWNpdHkobV9v
cGFjaXR5KTsKKyAgICBpZiAoIW9wYWNpdHlJc0FuaW1hdGluZygpKQorICAgICAgICBsYXllci0+
c2V0T3BhY2l0eShtX29wYWNpdHkpOwogICAgIGxheWVyLT5zZXRQb3NpdGlvbihtX3Bvc2l0aW9u
KTsKICAgICBsYXllci0+c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAgbGF5ZXIt
PnNldFNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRTdWJs
YXllclRyYW5zZm9ybShtX3N1YmxheWVyVHJhbnNmb3JtKTsKLSAgICBsYXllci0+c2V0VHJhbnNm
b3JtKG1fdHJhbnNmb3JtKTsKKyAgICBpZiAoIXRyYW5zZm9ybUlzQW5pbWF0aW5nKCkpCisgICAg
ICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obV90cmFuc2Zvcm0pOwogICAgIGxheWVyLT5zZXRVcGRh
dGVSZWN0KG1fdXBkYXRlUmVjdCk7CiAKICAgICBsYXllci0+c2V0U2Nyb2xsRGVsdGEobGF5ZXIt
PnNjcm9sbERlbHRhKCkgLSBsYXllci0+c2VudFNjcm9sbERlbHRhKCkpOwpAQCAtNTUwLDcgKzQ4
OCw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCog
bGF5ZXIpCiAgICAgaWYgKHJlcGxpY2FMYXllcigpKQogICAgICAgICByZXBsaWNhTGF5ZXIoKS0+
cHVzaFByb3BlcnRpZXNUbyhsYXllci0+cmVwbGljYUxheWVyKCkpOwogCi0gICAgbV9sYXllckFu
aW1hdGlvbkNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhsYXllci0+bGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyKCkpOworICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5wdXNo
QW5pbWF0aW9uVXBkYXRlc1RvKGxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7CiAK
ICAgICAvLyBSZXNldCBhbnkgc3RhdGUgdGhhdCBzaG91bGQgYmUgY2xlYXJlZCBmb3IgdGhlIG5l
eHQgdXBkYXRlLgogICAgIG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdCgpOwpAQCAtNjA0LDYgKzU0
Miw4OSBAQCBib29sIExheWVyQ2hyb21pdW06OmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAorCit2b2lkIExheWVyQ2hyb21pdW06OnNldEFuaW1hdGVkT3Bh
Y2l0eShmbG9hdCBhbmltYXRlZE9wYWNpdHkpCit7CisgICAgbV9hbmltYXRlZE9wYWNpdHkgPSBh
bmltYXRlZE9wYWNpdHk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0QW5pbWF0ZWRUcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGFuaW1hdGVkVHJhbnNmb3JtKQorewor
ICAgIG1fYW5pbWF0ZWRUcmFuc2Zvcm0gPSBhbmltYXRlZFRyYW5zZm9ybTsKK30KKworYm9vbCBM
YXllckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVl
cywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGlu
dCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAgIGlm
ICghbV9sYXllclRyZWVIb3N0IHx8ICFtX2xheWVyVHJlZUhvc3QtPnNldHRpbmdzKCkudGhyZWFk
ZWRBbmltYXRpb25FbmFibGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGFk
ZGVkQW5pbWF0aW9uID0gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih2
YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRpbWVPZmZz
ZXQpOworICAgIGlmIChhZGRlZEFuaW1hdGlvbikKKyAgICAgICAgc2V0TmVlZHNDb21taXQoKTsK
KyAgICByZXR1cm4gYWRkZWRBbmltYXRpb247Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cGF1
c2VBbmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAgICBt
X2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+cGF1c2VBbmltYXRpb24oYW5pbWF0aW9uSWQsIHRp
bWVPZmZzZXQpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1
bTo6cmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCkKK3sKKyAgICBtX2xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci0+cmVtb3ZlQW5pbWF0aW9uKGFuaW1hdGlvbklkKTsKKyAgICBzZXROZWVk
c0NvbW1pdCgpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKGRv
dWJsZSB0aW1lKQoreworICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5zdXNwZW5kQW5p
bWF0aW9ucyh0aW1lKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIExheWVyQ2hy
b21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQoreworICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9s
bGVyLT5yZXN1bWVBbmltYXRpb25zKCk7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwordm9p
ZCBMYXllckNocm9taXVtOjpzZXRMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoUGFzc093blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gbGF5ZXJBbmltYXRpb25Db250cm9sbGVyKQorewor
ICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyID0gbGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6aGFzQWN0
aXZlQW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllckFuaW1hdGlvbkNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnNl
dEFuaW1hdGlvbkV2ZW50KGNvbnN0IENDQW5pbWF0aW9uRXZlbnQmIGV2ZW50LCBkb3VibGUgd2Fs
bENsb2NrVGltZSkKK3sKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgeworCisgICAgY2FzZSBD
Q0FuaW1hdGlvbkV2ZW50OjpTdGFydGVkOiB7CisgICAgICAgIG1fbGF5ZXJBbmltYXRpb25EZWxl
Z2F0ZS0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh3YWxsQ2xvY2tUaW1lKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBDQ0FuaW1hdGlvbkV2ZW50OjpGaW5pc2hlZEZsb2F0QW5p
bWF0aW9uOiB7CisgICAgICAgIGNvbnN0IENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50KiBm
aW5pc2hlZEV2ZW50ID0gZXZlbnQudG9GbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQoKTsKKyAg
ICAgICAgQVNTRVJUKGZpbmlzaGVkRXZlbnQtPnRhcmdldFByb3BlcnR5KCkgPT0gQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpOworICAgICAgICBzZXRPcGFjaXR5KGZpbmlzaGVkRXZlbnQtPmZp
bmFsVmFsdWUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQ0NBbmltYXRp
b25FdmVudDo6RmluaXNoZWRUcmFuc2Zvcm1BbmltYXRpb246IHsKKyAgICAgICAgY29uc3QgQ0NU
cmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50KiBmaW5pc2hlZEV2ZW50ID0gZXZlbnQudG9U
cmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50KCk7CisgICAgICAgIEFTU0VSVChmaW5pc2hl
ZEV2ZW50LT50YXJnZXRQcm9wZXJ0eSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0p
OworICAgICAgICBzZXRUcmFuc2Zvcm0oZmluaXNoZWRFdmVudC0+ZmluYWxWYWx1ZSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgfQorfQorCiB2b2lkIHNvcnRMYXllcnMoVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+OjppdGVyYXRvciwgdm9pZCopCiB7CiAgICAgLy8gQ3VycmVudGx5IHdlIGRvbid0
IHVzZSB6LW9yZGVyIHRvIGRlY2lkZSB3aGF0IHRvIHBhaW50LCBzbyB0aGVyZSdzIG5vIG5lZWQg
dG8gYWN0dWFsbHkgc29ydCBMYXllckNocm9taXVtcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCAw
MDgxNTBjYWJiOGM4MWUzNWZkY2VlY2ZmMDc1NGQxNmUxOTdiNTU3Li5lMmJmNTRlNTE4YzU0ZjFh
YTA0ZDQ4NzAyMDFhYmZlMDNlY2MxMDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC00Myw2ICs0
Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiU2hh
ZGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1
ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NPY2Ns
dXNpb25UcmFja2VyLmgiCiAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC01Niw3ICs1Nyw2
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDQW5pbWF0aW9uRXZlbnQ7Ci1jbGFz
cyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIENDTGF5ZXJBbmltYXRpb25EZWxl
Z2F0ZTsKIGNsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0OwpAQCAtNjYs
MTIgKzY2LDIwIEBAIGNsYXNzIFNjcm9sbGJhckxheWVyQ2hyb21pdW07CiAKIC8vIEJhc2UgY2xh
c3MgZm9yIGNvbXBvc2l0ZWQgbGF5ZXJzLiBTcGVjaWFsIGxheWVyIHR5cGVzIGFyZSBkZXJpdmVk
IGZyb20KIC8vIHRoaXMgY2xhc3MuCi1jbGFzcyBMYXllckNocm9taXVtIDogcHVibGljIFJlZkNv
dW50ZWQ8TGF5ZXJDaHJvbWl1bT4geworY2xhc3MgTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZD
b3VudGVkPExheWVyQ2hyb21pdW0+LCBwdWJsaWMgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJD
bGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IGNy
ZWF0ZSgpOwogCiAgICAgdmlydHVhbCB+TGF5ZXJDaHJvbWl1bSgpOwogCisgICAgLy8gQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIGlu
dCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRB
bmltYXRlZE9wYWNpdHkoZmxvYXQpOworICAgIHZpcnR1YWwgZmxvYXQgYW5pbWF0ZWRPcGFjaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRlZE9wYWNpdHk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0QW5pbWF0ZWRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2
aXJ0dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBhbmltYXRlZFRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fYW5pbWF0ZWRUcmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIGNvbnN0IElu
dFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CisKICAgICBjb25zdCBM
YXllckNocm9taXVtKiByb290TGF5ZXIoKSBjb25zdDsKICAgICBMYXllckNocm9taXVtKiBwYXJl
bnQoKSBjb25zdDsKICAgICB2b2lkIGFkZENoaWxkKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4p
OwpAQCAtOTUsNyArMTAzLDYgQEAgcHVibGljOgogICAgIGJvb2wgYmFja2dyb3VuZENvdmVyc1Zp
ZXdwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kQ292ZXJzVmlld3BvcnQ7IH0KIAog
ICAgIHZvaWQgc2V0Qm91bmRzKGNvbnN0IEludFNpemUmKTsKLSAgICBjb25zdCBJbnRTaXplJiBi
b3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQogICAgIHZpcnR1YWwgSW50U2l6ZSBj
b250ZW50Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gYm91bmRzKCk7IH0KIAogICAgIHZvaWQgc2V0
TWFza3NUb0JvdW5kcyhib29sKTsKQEAgLTE4MSw4ICsxODgsNiBAQCBwdWJsaWM6CiAKICAgICB0
eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvcywgRnJhZ21lbnRTaGFkZXJDb2xv
cj4gQm9yZGVyUHJvZ3JhbTsKIAotICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJ
ZDsgfQotCiAgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2UoKSB7IG1fcmVuZGVyU3VyZmFjZS5j
bGVhcigpOyB9CiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlKCkgY29u
c3QgeyByZXR1cm4gbV9yZW5kZXJTdXJmYWNlLmdldCgpOyB9CiAgICAgdm9pZCBjcmVhdGVSZW5k
ZXJTdXJmYWNlKCk7CkBAIC0zMjksNiArMzM0LDEwIEBAIHByaXZhdGU6CiAKICAgICBib29sIG1f
cGFnZVNjYWxlRGlydHk7CiAKKyAgICAvLyBUaGVzZSB2YWx1ZXMgd2lsbCBiZSB1cGRhdGVkIHJl
Z3VsYXJseSBkdXJpbmcgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucy4KKyAgICBmbG9hdCBtX2FuaW1h
dGVkT3BhY2l0eTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2FuaW1hdGVkVHJhbnNmb3Jt
OworCiAgICAgQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlKiBtX2xheWVyQW5pbWF0aW9uRGVsZWdh
dGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaAppbmRleCAyMDkzNDIxYTc1
MDhmOTVmZjM1Y2NlMTNmNTQ1ODYyZjI0ZWRmM2VkLi45YzY2MzNjM2U0YzZmOWQ2YzRlNmJiZTNm
ZDM3NjVjYjdkYmU0ZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgKQEAgLTYz
LDE0ICs2Myw2IEBAIHB1YmxpYzoKICAgICAgICAgT3BhY2l0eQogICAgIH07CiAKLSAgICBzdHJ1
Y3QgQW5pbWF0aW9uU2lnbmF0dXJlIHsKLSAgICAgICAgQW5pbWF0aW9uU2lnbmF0dXJlKGludCBn
cm91cElkLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKLSAgICAgICAgICAgIDogZ3Jv
dXBJZChncm91cElkKQotICAgICAgICAgICAgLCB0YXJnZXRQcm9wZXJ0eSh0YXJnZXRQcm9wZXJ0
eSkgeyB9Ci0gICAgICAgIGludCBncm91cElkOwotICAgICAgICBUYXJnZXRQcm9wZXJ0eSB0YXJn
ZXRQcm9wZXJ0eTsKLSAgICB9OwotCiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+IGNyZWF0ZShQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+LCBpbnQgYW5pbWF0aW9u
SWQsIGludCBncm91cElkLCBUYXJnZXRQcm9wZXJ0eSk7CiAKICAgICB2aXJ0dWFsIH5DQ0FjdGl2
ZUFuaW1hdGlvbigpOwpAQCAtMTA0LDggKzk2LDYgQEAgcHVibGljOgogICAgIC8vIG9mIGl0ZXJh
dGlvbnMsIHJldHVybnMgdGhlIHJlbGF0aXZlIHRpbWUgaW4gdGhlIGN1cnJlbnQgaXRlcmF0aW9u
LgogICAgIGRvdWJsZSB0cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbihkb3VibGUgbm93KSBjb25z
dDsKIAotICAgIEFuaW1hdGlvblNpZ25hdHVyZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBB
bmltYXRpb25TaWduYXR1cmUobV9ncm91cCwgbV90YXJnZXRQcm9wZXJ0eSk7IH0KLQogICAgIFBh
c3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNsb25lRm9ySW1wbFRocmVhZCgpIGNvbnN0Owog
CiAgICAgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnRpZXMoQ0NBY3RpdmVBbmltYXRpb24qKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QW5pbWF0aW9uRXZlbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmNwcAppbmRleCA5ZjQxODQ0Y2EwNWQxMzdhYzFl
ZDdkOGYyYTcxMThmNDQ0MDY2ODAxLi5iNzdkMDJiZWQ5YWM5ZTAyMmUxYTQ1ZWNiYmEwZDc0NmI3
NjI3ZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0FuaW1hdGlvbkV2ZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVudHMuY3BwCkBAIC0zMCw4ICsz
MCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NBbmltYXRpb25FdmVudDo6Q0NBbmlt
YXRpb25FdmVudChpbnQgbGF5ZXJJZCkKK0NDQW5pbWF0aW9uRXZlbnQ6OkNDQW5pbWF0aW9uRXZl
bnQoaW50IGxheWVySWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQ
cm9wZXJ0eSkKICAgICA6IG1fbGF5ZXJJZChsYXllcklkKQorICAgICwgbV90YXJnZXRQcm9wZXJ0
eSh0YXJnZXRQcm9wZXJ0eSkKIHsKIH0KIApAQCAtNDUsMTkgKzQ2LDI1IEBAIGNvbnN0IENDQW5p
bWF0aW9uU3RhcnRlZEV2ZW50KiBDQ0FuaW1hdGlvbkV2ZW50Ojp0b0FuaW1hdGlvblN0YXJ0ZWRF
dmVudCgpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENDQW5pbWF0aW9uU3Rh
cnRlZEV2ZW50Kj4odGhpcyk7CiB9CiAKLWNvbnN0IENDQW5pbWF0aW9uRmluaXNoZWRFdmVudCog
Q0NBbmltYXRpb25FdmVudDo6dG9BbmltYXRpb25GaW5pc2hlZEV2ZW50KCkgY29uc3QKK2NvbnN0
IENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50KiBDQ0FuaW1hdGlvbkV2ZW50Ojp0b0Zsb2F0
QW5pbWF0aW9uRmluaXNoZWRFdmVudCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHR5cGUoKSA9PSBG
aW5pc2hlZCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENDQW5pbWF0aW9uRmluaXNo
ZWRFdmVudCo+KHRoaXMpOworICAgIEFTU0VSVCh0eXBlKCkgPT0gRmluaXNoZWRGbG9hdEFuaW1h
dGlvbik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENDRmxvYXRBbmltYXRpb25GaW5p
c2hlZEV2ZW50Kj4odGhpcyk7CiB9CiAKLVBhc3NPd25QdHI8Q0NBbmltYXRpb25TdGFydGVkRXZl
bnQ+IENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50OjpjcmVhdGUoaW50IGxheWVySWQpCitjb25zdCBD
Q1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQqIENDQW5pbWF0aW9uRXZlbnQ6OnRvVHJh
bnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudChsYXllcklkKSk7CisgICAgQVNTRVJUKHR5
cGUoKSA9PSBGaW5pc2hlZFRyYW5zZm9ybUFuaW1hdGlvbik7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCo+KHRoaXMpOwogfQog
Ci1DQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDo6Q0NBbmltYXRpb25TdGFydGVkRXZlbnQoaW50IGxh
eWVySWQpCi0gICAgOiBDQ0FuaW1hdGlvbkV2ZW50KGxheWVySWQpCitQYXNzT3duUHRyPENDQW5p
bWF0aW9uU3RhcnRlZEV2ZW50PiBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDo6Y3JlYXRlKGludCBs
YXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkp
Cit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudChsYXll
cklkLCB0YXJnZXRQcm9wZXJ0eSkpOworfQorCitDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDo6Q0NB
bmltYXRpb25TdGFydGVkRXZlbnQoaW50IGxheWVySWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJn
ZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKKyAgICA6IENDQW5pbWF0aW9uRXZlbnQobGF5ZXJJ
ZCwgdGFyZ2V0UHJvcGVydHkpCiB7CiB9CiAKQEAgLTcwLDI0ICs3Nyw0NCBAQCBDQ0FuaW1hdGlv
bkV2ZW50OjpUeXBlIENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50Ojp0eXBlKCkgY29uc3QKICAgICBy
ZXR1cm4gU3RhcnRlZDsKIH0KIAotUGFzc093blB0cjxDQ0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQ+
IENDQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Y3JlYXRlKGludCBsYXllcklkLCBpbnQgYW5pbWF0
aW9uSWQpCitQYXNzT3duUHRyPENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50PiBDQ0Zsb2F0
QW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Y3JlYXRlKGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHksIGZsb2F0IGZpbmFsVmFsdWUpCit7
CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudChs
YXllcklkLCB0YXJnZXRQcm9wZXJ0eSwgZmluYWxWYWx1ZSkpOworfQorCitDQ0Zsb2F0QW5pbWF0
aW9uRmluaXNoZWRFdmVudDo6Q0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQoaW50IGxheWVy
SWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSwgZmxv
YXQgZmluYWxWYWx1ZSkKKyAgICA6IENDQW5pbWF0aW9uRXZlbnQobGF5ZXJJZCwgdGFyZ2V0UHJv
cGVydHkpCisgICAgLCBtX2ZpbmFsVmFsdWUoZmluYWxWYWx1ZSkKK3sKK30KKworQ0NGbG9hdEFu
aW1hdGlvbkZpbmlzaGVkRXZlbnQ6On5DQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudCgpCit7
Cit9CisKK0NDQW5pbWF0aW9uRXZlbnQ6OlR5cGUgQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZl
bnQ6OnR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBGaW5pc2hlZEZsb2F0QW5pbWF0aW9uOwor
fQorCitQYXNzT3duUHRyPENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudD4gQ0NUcmFu
c2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50OjpjcmVhdGUoaW50IGxheWVySWQsIENDQWN0aXZl
QW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIGZpbmFsVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0Fu
aW1hdGlvbkZpbmlzaGVkRXZlbnQobGF5ZXJJZCwgYW5pbWF0aW9uSWQpKTsKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudChsYXllcklkLCB0
YXJnZXRQcm9wZXJ0eSwgZmluYWxWYWx1ZSkpOwogfQogCi1DQ0FuaW1hdGlvbkZpbmlzaGVkRXZl
bnQ6OkNDQW5pbWF0aW9uRmluaXNoZWRFdmVudChpbnQgbGF5ZXJJZCwgaW50IGFuaW1hdGlvbklk
KQotICAgIDogQ0NBbmltYXRpb25FdmVudChsYXllcklkKQotICAgICwgbV9hbmltYXRpb25JZChh
bmltYXRpb25JZCkKK0NDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Q0NUcmFuc2Zv
cm1BbmltYXRpb25GaW5pc2hlZEV2ZW50KGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHksIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBmaW5hbFZhbHVlKQorICAgIDogQ0NBbmltYXRpb25FdmVudChsYXllcklkLCB0YXJnZXRQcm9w
ZXJ0eSkKKyAgICAsIG1fZmluYWxWYWx1ZShmaW5hbFZhbHVlKQogewogfQogCi1DQ0FuaW1hdGlv
bkZpbmlzaGVkRXZlbnQ6On5DQ0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQoKQorQ0NUcmFuc2Zvcm1B
bmltYXRpb25GaW5pc2hlZEV2ZW50Ojp+Q0NUcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50
KCkKIHsKIH0KIAotQ0NBbmltYXRpb25FdmVudDo6VHlwZSBDQ0FuaW1hdGlvbkZpbmlzaGVkRXZl
bnQ6OnR5cGUoKSBjb25zdAorQ0NBbmltYXRpb25FdmVudDo6VHlwZSBDQ1RyYW5zZm9ybUFuaW1h
dGlvbkZpbmlzaGVkRXZlbnQ6OnR5cGUoKSBjb25zdAogewotICAgIHJldHVybiBGaW5pc2hlZDsK
KyAgICByZXR1cm4gRmluaXNoZWRUcmFuc2Zvcm1BbmltYXRpb247CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkV2ZW50cy5oCmluZGV4IGRhOTRlMWUy
N2QxMzg4NDViODkzZDU2MDhmYjg2YzY0YWJmOWEyNzkuLmUyNGY3NWRjN2MxYjNlYzUyODUwMThj
ZGUxYWY5N2I4M2FhNGQ2OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVudHMuaApAQCAt
MjUsMTcgKzI1LDIwIEBACiAjaWZuZGVmIENDQW5pbWF0aW9uRXZlbnRzX2gKICNkZWZpbmUgQ0NB
bmltYXRpb25FdmVudHNfaAogCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKwog
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50OwotY2xh
c3MgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50OworY2xhc3MgQ0NGbG9hdEFuaW1hdGlvbkZpbmlz
aGVkRXZlbnQ7CitjbGFzcyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ7CiAKIGNs
YXNzIENDQW5pbWF0aW9uRXZlbnQgewogcHVibGljOgotICAgIGVudW0gVHlwZSB7IFN0YXJ0ZWQs
IEZpbmlzaGVkIH07CisgICAgZW51bSBUeXBlIHsgU3RhcnRlZCwgRmluaXNoZWRGbG9hdEFuaW1h
dGlvbiwgRmluaXNoZWRUcmFuc2Zvcm1BbmltYXRpb24gfTsKIAogICAgIHZpcnR1YWwgfkNDQW5p
bWF0aW9uRXZlbnQoKTsKIApAQCAtNDMsNDQgKzQ2LDY1IEBAIHB1YmxpYzoKIAogICAgIGludCBs
YXllcklkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcklkOyB9CiAKKyAgICBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3Rh
cmdldFByb3BlcnR5OyB9CisKICAgICBjb25zdCBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudCogdG9B
bmltYXRpb25TdGFydGVkRXZlbnQoKSBjb25zdDsKLSAgICBjb25zdCBDQ0FuaW1hdGlvbkZpbmlz
aGVkRXZlbnQqIHRvQW5pbWF0aW9uRmluaXNoZWRFdmVudCgpIGNvbnN0OworICAgIGNvbnN0IEND
RmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50KiB0b0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVu
dCgpIGNvbnN0OworICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCog
dG9UcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoK
LSAgICBDQ0FuaW1hdGlvbkV2ZW50KGludCBsYXllcklkKTsKKyAgICBDQ0FuaW1hdGlvbkV2ZW50
KGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOwogCiBwcml2
YXRlOgogICAgIGludCBtX2xheWVySWQ7CisgICAgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFBy
b3BlcnR5IG1fdGFyZ2V0UHJvcGVydHk7CiB9OwogCiAvLyBJbmRpY2F0ZXMgdGhhdCBhbiBhbmlt
YXRpb24gaGFzIHN0YXJ0ZWQgb24gYSBwYXJ0aWN1bGFyIGxheWVyLgogY2xhc3MgQ0NBbmltYXRp
b25TdGFydGVkRXZlbnQgOiBwdWJsaWMgQ0NBbmltYXRpb25FdmVudCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8Q0NBbmltYXRpb25TdGFydGVkRXZlbnQ+IGNyZWF0ZShpbnQgbGF5
ZXJJZCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NBbmltYXRpb25TdGFydGVkRXZlbnQ+IGNy
ZWF0ZShpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KTsKIAog
ICAgIHZpcnR1YWwgfkNDQW5pbWF0aW9uU3RhcnRlZEV2ZW50KCk7CiAKICAgICB2aXJ0dWFsIFR5
cGUgdHlwZSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IENDQW5pbWF0aW9uU3Rh
cnRlZEV2ZW50KGludCBsYXllcklkKTsKKyAgICBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudChpbnQg
bGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KTsKIH07CiAKLS8vIElu
ZGljYXRlcyB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgc3RhcnRlZCBvbiBhIHBhcnRpY3VsYXIgbGF5
ZXIuCi1jbGFzcyBDQ0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQgOiBwdWJsaWMgQ0NBbmltYXRpb25F
dmVudCB7CisvLyBJbmRpY2F0ZXMgdGhhdCBhIGZsb2F0IGFuaW1hdGlvbiBoYXMgY29tcGxldGVk
LgorY2xhc3MgQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQgOiBwdWJsaWMgQ0NBbmltYXRp
b25FdmVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NGbG9hdEFuaW1hdGlv
bkZpbmlzaGVkRXZlbnQ+IGNyZWF0ZShpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRh
cmdldFByb3BlcnR5LCBmbG9hdCBmaW5hbFZhbHVlKTsKKworICAgIHZpcnR1YWwgfkNDRmxvYXRB
bmltYXRpb25GaW5pc2hlZEV2ZW50KCk7CisKKyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0
OworCisgICAgZmxvYXQgZmluYWxWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmluYWxWYWx1ZTsg
fQorCitwcml2YXRlOgorICAgIENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50KGludCBsYXll
cklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHksIGZsb2F0IGZpbmFsVmFsdWUp
OworCisgICAgZmxvYXQgbV9maW5hbFZhbHVlOworfTsKKworLy8gSW5kaWNhdGVzIHRoYXQgYSB0
cmFuc2Zvcm0gYW5pbWF0aW9uIGhhcyBjb21wbGV0ZWQuCitjbGFzcyBDQ1RyYW5zZm9ybUFuaW1h
dGlvbkZpbmlzaGVkRXZlbnQgOiBwdWJsaWMgQ0NBbmltYXRpb25FdmVudCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8Q0NBbmltYXRpb25GaW5pc2hlZEV2ZW50PiBjcmVhdGUoaW50
IGxheWVySWQsIGludCBhbmltYXRpb25JZCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUcmFu
c2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50PiBjcmVhdGUoaW50IGxheWVySWQsIENDQWN0aXZl
QW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZp
bmFsVmFsdWUpOwogCi0gICAgdmlydHVhbCB+Q0NBbmltYXRpb25GaW5pc2hlZEV2ZW50KCk7Cisg
ICAgdmlydHVhbCB+Q0NUcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50KCk7CiAKICAgICB2
aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0OwogCi0gICAgaW50IGFuaW1hdGlvbklkKCkgY29uc3Qg
eyByZXR1cm4gbV9hbmltYXRpb25JZDsgfQorICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBmaW5hbFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9maW5hbFZhbHVlOyB9CiAKIHByaXZhdGU6
Ci0gICAgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50KGludCBsYXllcklkLCBpbnQgYW5pbWF0aW9u
SWQpOworICAgIENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudChpbnQgbGF5ZXJJZCwg
Q0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgZmluYWxWYWx1ZSk7CiAKLSAgICBpbnQgbV9hbmltYXRpb25JZDsKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtX2ZpbmFsVmFsdWU7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxPd25QdHI8
Q0NBbmltYXRpb25FdmVudD4gPiBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcAppbmRleCBjM2FmNDRkZjU2
YzVlYjk5OTVkNWMyZGIzOTg3MWM0MmQzZTUwZTlkLi4zNzNiMGNiYjY2YTc4ZjM1NGRjZjQ0YmE4
MmE3ZjY2MTA2NDc4MDIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIuY3BwCkBAIC0yNyw5ICsyNywxMCBAQAogI2luY2x1ZGUgImNjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiIC8vIGZv
ciBLZXlmcmFtZVZhbHVlTGlzdAorI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKKyNp
bmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5p
bWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIgotI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgogI2luY2x1ZGUgPHd0
Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKQEAgLTU2LDEwICs1
Nyw2IEBAIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsCiAgICAgaWYgKGFuaW1hdGlvbiAmJiBhbmlt
YXRpb24tPmlzRGlyZWN0aW9uU2V0KCkgJiYgYW5pbWF0aW9uLT5kaXJlY3Rpb24oKSA9PSBBbmlt
YXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIGRlbGF5Ci0gICAgaWYgKGFuaW1h
dGlvbiAmJiBhbmltYXRpb24tPmlzRGVsYXlTZXQoKSAmJiBhbmltYXRpb24tPmRlbGF5KCkgPiAw
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQogICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBm
b3IgZmlsbHMgZm9yd2FyZHMgYW5kIGZpbGxzIGJhY2t3YXJkcwogICAgIGlmIChhbmltYXRpb24g
JiYgYW5pbWF0aW9uLT5pc0ZpbGxNb2RlU2V0KCkgJiYgKGFuaW1hdGlvbi0+ZmlsbHNGb3J3YXJk
cygpIHx8IGFuaW1hdGlvbi0+ZmlsbHNCYWNrd2FyZHMoKSkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtMTA1LDcgKzEwMiw4IEBAIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsCiAKIH0gLy8g
bmFtZXBhY2UKIAotQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OkNDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyKCkKK0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCogY2xpZW50KQorICAg
IDogbV9jbGllbnQoY2xpZW50KQogewogfQogCkBAIC0xMTMsOSArMTExLDkgQEAgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpCiB7CiB9CiAK
LVBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpjcmVhdGUoKQorUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cj4gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZShDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckNsaWVudCogY2xpZW50KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIoY2xpZW50KSk7CiB9CiAKIGJvb2wgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI6OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0
LCBjb25zdCBJbnRTaXplJiwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGludCBhbmltYXRp
b25JZCwgaW50IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KQpAQCAtMTY3LDMyICsxNjUsNzEg
QEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucygpCiAK
IC8vIEVuc3VyZXMgdGhhdCB0aGUgbGlzdCBvZiBhY3RpdmUgYW5pbWF0aW9ucyBvbiB0aGUgbWFp
biB0aHJlYWQgYW5kIHRoZSBpbXBsIHRocmVhZAogLy8gYXJlIGtlcHQgaW4gc3luYy4KLXZvaWQg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN5bmNocm9uaXplQW5pbWF0aW9ucyhDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQordm9pZCBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6cHVzaEFuaW1hdGlvblVwZGF0ZXNUbyhDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlciogY29udHJvbGxlckltcGwpCiB7Ci0gICAgcmVtb3ZlQ29tcGxldGVkQW5pbWF0
aW9ucyhjb250cm9sbGVySW1wbCk7CiAgICAgcHVzaE5ld0FuaW1hdGlvbnNUb0ltcGxUaHJlYWQo
Y29udHJvbGxlckltcGwpOwogICAgIHJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJl
YWQoY29udHJvbGxlckltcGwpOwotICAgIHB1c2hBbmltYXRpb25Qcm9wZXJ0aWVzKGNvbnRyb2xs
ZXJJbXBsKTsKIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQ29t
cGxldGVkQW5pbWF0aW9ucyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xs
ZXJJbXBsKQordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0ZShkb3VibGUg
bW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IqIGV2ZW50cykKK3sKKyAgICBz
dGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2sobW9ub3RvbmljVGltZSwgZXZlbnRzKTsK
KyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKG1vbm90b25pY1RpbWUsIGV2
ZW50cyk7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSht
b25vdG9uaWNUaW1lLCBldmVudHMpOworICAgIHJlc29sdmVDb25mbGljdHMobW9ub3RvbmljVGlt
ZSk7CisgICAgdGlja0FuaW1hdGlvbnMobW9ub3RvbmljVGltZSk7CisgICAgcHVyZ2VGaW5pc2hl
ZEFuaW1hdGlvbnMoZXZlbnRzKTsKKyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0
QXZhaWxhYmlsaXR5KG1vbm90b25pY1RpbWUsIGV2ZW50cyk7Cit9CisKK3ZvaWQgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OmFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmlt
KQogewotICAgIC8vIEFueSBhbmltYXRpb25zIGZpbmlzaGVkIG9uIHRoZSBpbXBsIHRocmVhZCBh
cmUgcmVtb3ZlZCBmcm9tIHRoZSBtYWluIHRocmVhZCdzIGNvbGxlY3Rpb24uCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlvbnMuc2l6
ZSgpOyArK2kpCi0gICAgICAgIHJlbW92ZShjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1h
dGlvbnNbaV0uZ3JvdXBJZCwgY29udHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zW2ld
LnRhcmdldFByb3BlcnR5KTsKLSAgICBjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlv
bnMuY2xlYXIoKTsKKyAgICBtX2FjdGl2ZUFuaW1hdGlvbnMuYXBwZW5kKGFuaW0pOwogfQogCi12
b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRo
cmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQorQ0NB
Y3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpnZXRBY3RpdmVBbmlt
YXRpb24oaW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJn
ZXRQcm9wZXJ0eSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0
aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3Jv
dXAoKSA9PSBncm91cElkICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHko
KSA9PSB0YXJnZXRQcm9wZXJ0eSkKKyAgICAgICAgICAgIHJldHVybiBtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0uZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI6Omhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSAhPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6
RmluaXNoZWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpICE9IENDQWN0aXZl
QW5pbWF0aW9uOjpBYm9ydGVkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNB
bmltYXRpbmdQcm9wZXJ0eShDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0
UHJvcGVydHkpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFu
aW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+cnVuU3RhdGUoKSAhPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQgJiYgbV9hY3RpdmVB
bmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkICYm
IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSB0YXJnZXRQcm9wZXJ0
eSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hOZXdBbmltYXRpb25zVG9J
bXBsVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKiBjb250cm9sbGVySW1wbCkKIHsK
ICAgICAvLyBBbnkgbmV3IGFuaW1hdGlvbnMgb3duZWQgYnkgdGhlIG1haW4gdGhyZWFkJ3MgY29u
dHJvbGxlciBhcmUgY2xvbmVkIGFuZCBhZGRlIHRvIHRoZSBpbXBsIHRocmVhZCdzIGNvbnRyb2xs
ZXIuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgaWYgKCFjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9u
KG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSwgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50
YXJnZXRQcm9wZXJ0eSgpKSkKLSAgICAgICAgICAgIGNvbnRyb2xsZXJJbXBsLT5hZGQobV9hY3Rp
dmVBbmltYXRpb25zW2ldLT5jbG9uZUZvckltcGxUaHJlYWQoKSk7CisgICAgICAgIGlmICghY29u
dHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbihtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdy
b3VwKCksIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSkpIHsKKyAgICAg
ICAgICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQobV9hY3RpdmVBbmltYXRpb25z
W2ldLT5jbG9uZUZvckltcGxUaHJlYWQoKSk7CisgICAgICAgICAgICAvLyBJZiB0aGUgYW5pbWF0
aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MgLS0gc2V0IGl0IHRvIGJlIHdhaXRpbmcgdW50aWwg
dGhlIHRhcmdldCBpcyBhdmFpbGFibGUuCisgICAgICAgICAgICAvLyBUaGF0IHdheSwgaXQgd2ls
bCBoYXZlIGEgY2hhbmNlIHRvIHN0YXJ0IG9uIHRoZSBpbXBsIHRocmVhZC4gT3RoZXJ3aXNlLCB3
ZSB3aWxsIG5ldmVyIHRpY2sgYXQgdGhlCisgICAgICAgICAgICAvLyB2ZXJ5IGJlZ2lubmluZyBv
ZiB0aGUgYW5pbWF0aW9uLgorICAgICAgICAgICAgaWYgKHRvQWRkLT5ydW5TdGF0ZSgpID09IEND
QWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nIHx8IHRvQWRkLT5ydW5TdGF0ZSgpID09IENDQWN0aXZl
QW5pbWF0aW9uOjpQYXVzZWQpCisgICAgICAgICAgICAgICAgdG9BZGQtPnNldFJ1blN0YXRlKEND
QWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCAwKTsKKyAgICAg
ICAgICAgIGNvbnRyb2xsZXJJbXBsLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICAgICAgfQog
ICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0
aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwq
IGNvbnRyb2xsZXJJbXBsKQordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3Zl
QW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ciogY29udHJvbGxlckltcGwpCiB7CiAgICAgLy8gRGVsZXRlIGFsbCBpbXBsIHRocmVhZCBhbmlt
YXRpb25zIGZvciB3aGljaCB0aGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIG1haW4gdGhyZWFkIGFu
aW1hdGlvbi4KICAgICAvLyBFYWNoIGl0ZXJhdGlvbiwgY29udHJvbGxlci0+bV9hY3RpdmVBbmlt
YXRpb25zLnNpemUoKSBpcyBkZWNyZW1lbnRlZCBvciBpIGlzIGluY3JlbWVudGVkCkBAIC0yMDYs
NDUgKzI0MywxNzEgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5p
bWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChDQ0xheWVyQW4KICAgICB9CiB9CiAKLXZvaWQg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hBbmltYXRpb25Qcm9wZXJ0aWVzKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCit2b2lkIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZG91
YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKiBldmVudHMpCiB7Ci0g
ICAgLy8gRGVsZXRlIGFsbCBpbXBsIHRocmVhZCBhbmltYXRpb25zIGZvciB3aGljaCB0aGVyZSBp
cyBubyBjb3JyZXNwb25kaW5nIG1haW4gdGhyZWFkIGFuaW1hdGlvbi4KLSAgICAvLyBFYWNoIGl0
ZXJhdGlvbiwgY29udHJvbGxlci0+bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKSBpcyBkZWNyZW1l
bnRlZCBvciBpIGlzIGluY3JlbWVudGVkCi0gICAgLy8gZ3VhcmFudGVlaW5nIHByb2dyZXNzIHRv
d2FyZHMgbG9vcCB0ZXJtaW5hdGlvbi4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbnRy
b2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ0NB
Y3RpdmVBbmltYXRpb24qIGN1cnJlbnRJbXBsID0gY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5p
bWF0aW9uc1tpXS5nZXQoKTsKLSAgICAgICAgQ0NBY3RpdmVBbmltYXRpb24qIGN1cnJlbnQgPSBn
ZXRBY3RpdmVBbmltYXRpb24oY3VycmVudEltcGwtPmdyb3VwKCksIGN1cnJlbnRJbXBsLT50YXJn
ZXRQcm9wZXJ0eSgpKTsKLSAgICAgICAgQVNTRVJUKGN1cnJlbnQpOwotICAgICAgICBpZiAoY3Vy
cmVudCkKLSAgICAgICAgICAgIGN1cnJlbnQtPnN5bmNocm9uaXplUHJvcGVydGllcyhjdXJyZW50
SW1wbCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUo
KSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrKSB7CisgICAgICAgICAg
ICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpS
dW5uaW5nLCBtb25vdG9uaWNUaW1lKTsKKyAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+c2V0U3RhcnRUaW1lKG1vbm90b25pY1RpbWUpOworICAgICAgICAgICAgaWYgKGV2ZW50cykK
KyAgICAgICAgICAgICAgICBldmVudHMtPmFwcGVuZChDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDo6
Y3JlYXRlKG1fY2xpZW50LT5pZCgpLCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3Bl
cnR5KCkpKTsKKyAgICAgICAgfQogICAgIH0KIH0KIAotQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpnZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3VwSWQsIEND
QWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK3ZvaWQgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRp
bWUoZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKiBldmVudHMp
CiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3Jv
dXBJZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0
UHJvcGVydHkpCi0gICAgICAgICAgICByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgp
OwotICAgIHJldHVybiAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmlt
YXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUgJiYg
bV9hY3RpdmVBbmltYXRpb25zW2ldLT5zdGFydFRpbWUoKSA8PSBtb25vdG9uaWNUaW1lKSB7Cisg
ICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5p
bWF0aW9uOjpSdW5uaW5nLCBtb25vdG9uaWNUaW1lKTsKKyAgICAgICAgICAgIGlmIChldmVudHMp
CisgICAgICAgICAgICAgICAgZXZlbnRzLT5hcHBlbmQoQ0NBbmltYXRpb25TdGFydGVkRXZlbnQ6
OmNyZWF0ZShtX2NsaWVudC0+aWQoKSwgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9w
ZXJ0eSgpKSk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKLWJvb2wgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI6OmlzQW5pbWF0aW5nUHJvcGVydHkoQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFBy
b3BlcnR5IHRhcmdldFByb3BlcnR5KSBjb25zdAordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShkb3VibGUg
bW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IqIGV2ZW50cykKIHsKKyAgICAv
LyBGaXJzdCBjb2xsZWN0IHJ1bm5pbmcgcHJvcGVydGllcy4KKyAgICBUYXJnZXRQcm9wZXJ0aWVz
IGJsb2NrZWRQcm9wZXJ0aWVzOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVB
bmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkICYmIG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSAhPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCAm
JiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVy
dHkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZyB8fCBtX2Fj
dGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OkZpbmlz
aGVkKQorICAgICAgICAgICAgYmxvY2tlZFByb3BlcnRpZXMuYWRkKG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+dGFyZ2V0UHJvcGVydHkoKSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGlu
Z0ZvclRhcmdldEF2YWlsYWJpbGl0eSkgeworICAgICAgICAgICAgLy8gQ29sbGVjdCBhbGwgcHJv
cGVydGllcyBmb3IgYW5pbWF0aW9ucyB3aXRoIHRoZSBzYW1lIGdyb3VwIGlkICh0aGV5IHNob3Vs
ZCBhbGwgYWxzbyBiZSBpbiB0aGUgbGlzdCBvZiBhbmltYXRpb25zKS4KKyAgICAgICAgICAgIFRh
cmdldFByb3BlcnRpZXMgZW5xdWV1ZWRQcm9wZXJ0aWVzOworICAgICAgICAgICAgZW5xdWV1ZWRQ
cm9wZXJ0aWVzLmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpOwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgbV9hY3RpdmVBbmltYXRpb25z
LnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+Z3JvdXAoKSA9PSBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPmdyb3VwKCkpCisgICAgICAgICAg
ICAgICAgICAgIGVucXVldWVkUHJvcGVydGllcy5hZGQobV9hY3RpdmVBbmltYXRpb25zW2pdLT50
YXJnZXRQcm9wZXJ0eSgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sg
dG8gc2VlIGlmIGludGVyc2VjdGlvbiBvZiB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIGFmZmVjdGVk
IGJ5IHRoZSBncm91cCBhbmQgdGhlIGxpc3Qgb2YgY3VycmVudGx5CisgICAgICAgICAgICAvLyBi
bG9ja2VkIHByb3BlcnRpZXMgaXMgbnVsbC4gSW4gYW55IGNhc2UsIHRoZSBncm91cCdzIHRhcmdl
dCBwcm9wZXJ0aWVzIG5lZWQgdG8gYmUgYWRkZWQgdG8gdGhlIGxpc3QKKyAgICAgICAgICAgIC8v
IG9mIGJsb2NrZWQgcHJvcGVydGllcy4KKyAgICAgICAgICAgIGJvb2wgbnVsbEludGVyc2VjdGlv
biA9IHRydWU7CisgICAgICAgICAgICBmb3IgKFRhcmdldFByb3BlcnRpZXM6Oml0ZXJhdG9yIHBJ
dGVyID0gZW5xdWV1ZWRQcm9wZXJ0aWVzLmJlZ2luKCk7IHBJdGVyICE9IGVucXVldWVkUHJvcGVy
dGllcy5lbmQoKTsgKytwSXRlcikgeworICAgICAgICAgICAgICAgIGlmICghYmxvY2tlZFByb3Bl
cnRpZXMuYWRkKCpwSXRlcikuc2Vjb25kKQorICAgICAgICAgICAgICAgICAgICBudWxsSW50ZXJz
ZWN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBp
bnRlcnNlY3Rpb24gaXMgbnVsbCwgdGhlbiB3ZSBhcmUgZnJlZSB0byBzdGFydCB0aGUgYW5pbWF0
aW9ucyBpbiB0aGUgZ3JvdXAuCisgICAgICAgICAgICBpZiAobnVsbEludGVyc2VjdGlvbikgewor
ICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3Rp
dmVBbmltYXRpb246OlJ1bm5pbmcsIG1vbm90b25pY1RpbWUpOworICAgICAgICAgICAgICAgIG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0U3RhcnRUaW1lKG1vbm90b25pY1RpbWUpOworICAgICAg
ICAgICAgICAgIGlmIChldmVudHMpCisgICAgICAgICAgICAgICAgICAgIGV2ZW50cy0+YXBwZW5k
KENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50OjpjcmVhdGUobV9jbGllbnQtPmlkKCksIG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSkpOworICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraikgewor
ICAgICAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09
IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6
UnVubmluZywgbW9ub3RvbmljVGltZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FjdGl2
ZUFuaW1hdGlvbnNbal0tPnNldFN0YXJ0VGltZShtb25vdG9uaWNUaW1lKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OnJlbW92ZShpbnQgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3Bl
cnR5IHRhcmdldFByb3BlcnR5KQordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVz
b2x2ZUNvbmZsaWN0cyhkb3VibGUgbW9ub3RvbmljVGltZSkKIHsKKyAgICAvLyBGaW5kIGFueSBh
bmltYXRpb25zIHRoYXQgYXJlIGFuaW1hdGluZyB0aGUgc2FtZSBwcm9wZXJ0eSBhbmQgcmVzb2x2
ZSB0aGUKKyAgICAvLyBjb25maWN0LiBXZSBjb3VsZCBldmVudHVhbGx5IGJsZW5kLCBidXQgZm9y
IG5vdyB3ZSdsbCBqdXN0IGFib3J0IHRoZQorICAgIC8vIHByZXZpb3VzIGFuaW1hdGlvbiAod2hl
cmUgJ3ByZXZpb3VzJyBtZWFuczogKDEpIGhhcyBhIHByaW9yIHN0YXJ0IHRpbWUgb3IKKyAgICAv
LyAoMikgaGFzIGFuIGVxdWFsIHN0YXJ0IHRpbWUsIGJ1dCB3YXMgYWRkZWQgdG8gdGhlIHF1ZXVl
IGVhcmxpZXIsIGkuZS4sCisgICAgLy8gaGFzIGEgbG93ZXIgaW5kZXggaW4gbV9hY3RpdmVBbmlt
YXRpb25zKS4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5z
aXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgp
ID09IGdyb3VwSWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09
IHRhcmdldFByb3BlcnR5KSB7Ci0gICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMucmVtb3Zl
KGkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25z
W2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nKSB7CisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgp
OyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2pdLT5ydW5T
dGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nICYmIG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnRhcmdldFBy
b3BlcnR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+c3RhcnRUaW1lKCkgPiBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnN0YXJ0VGltZSgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRSdW5TdGF0ZShD
Q0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgbW9ub3RvbmljVGltZSk7CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQsIG1vbm90b25pY1RpbWUp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVyZ2VGaW5pc2hlZEFuaW1hdGlv
bnMoQ0NBbmltYXRpb25FdmVudHNWZWN0b3IqIGV2ZW50cykKK3sKKyAgICAvLyBFYWNoIGl0ZXJh
dGlvbiwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKSBkZWNyZWFzZXMgb3IgaSBpbmNyZW1lbnRz
LAorICAgIC8vIGd1YXJhbnRlZWluZyBwcm9ncmVzcyB0b3dhcmRzIGxvb3AgdGVybWluYXRpb24u
CisgICAgc2l6ZV90IGkgPSAwOworICAgIHdoaWxlIChpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNp
emUoKSkgeworICAgICAgICBpbnQgZ3JvdXBJZCA9IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3Jv
dXAoKTsKKyAgICAgICAgYm9vbCBhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCA9IGZhbHNl
OworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5pc0ZpbmlzaGVkKCkpIHsKKyAg
ICAgICAgICAgIGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytq
KSB7CisgICAgICAgICAgICAgICAgaWYgKGdyb3VwSWQgPT0gbV9hY3RpdmVBbmltYXRpb25zW2pd
LT5ncm91cCgpICYmICFtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPmlzRmluaXNoZWQoKSkgeworICAg
ICAgICAgICAgICAgICAgICBhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KKyAgICAgICAgaWYgKGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVk
KSB7CisgICAgICAgICAgICAvLyBXZSBub3cgbmVlZCB0byByZW1vdmUgYWxsIGFuaW1hdGlvbnMg
d2l0aCB0aGUgc2FtZSBncm91cCBpZCBhcyBncm91cElkCisgICAgICAgICAgICAvLyAoYW5kIHNl
bmQgYWxvbmcgYW5pbWF0aW9uIGZpbmlzaGVkIG5vdGlmaWNhdGlvbnMsIGlmIG5lY2Vzc2FyeSku
CisgICAgICAgICAgICAvLyBFYWNoIGl0ZXJhdGlvbiwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUo
KSBkZWNyZWFzZXMgb3IgaiBpbmNyZW1lbnRzLAorICAgICAgICAgICAgLy8gZ3VhcmFudGVlaW5n
IHByb2dyZXNzIHRvd2FyZHMgbG9vcCB0ZXJtaW5hdGlvbi4gQWxzbywgd2UgYXJlIGd1YXJhbnRl
ZWQKKyAgICAgICAgICAgIC8vIHRvIHJlbW92ZSBhdCBsZWFzdCBvbmUgYWN0aXZlIGFuaW1hdGlv
bi4KKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpOyBqIDwgbV9hY3RpdmVBbmltYXRpb25z
LnNpemUoKTspIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3JvdXBJZCAhPSBtX2FjdGl2ZUFuaW1h
dGlvbnNbal0tPmdyb3VwKCkpCisgICAgICAgICAgICAgICAgICAgIGorKzsKKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50cykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnRhcmdldFByb3Bl
cnR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzLT5hcHBlbmQoQ0NG
bG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OmNyZWF0ZShtX2NsaWVudC0+aWQoKSwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHksIG1fY2xpZW50LT5hbmltYXRlZE9wYWNpdHkoKSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV2ZW50cy0+YXBwZW5kKENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6
Y3JlYXRlKG1fY2xpZW50LT5pZCgpLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtLCBtX2Ns
aWVudC0+YW5pbWF0ZWRUcmFuc2Zvcm0oKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IGkrKzsKICAgICB9CiB9CiAKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnRpY2tB
bmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1lKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2Fj
dGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5p
bmcpIHsKKyAgICAgICAgICAgIGRvdWJsZSB0cmltbWVkID0gbV9hY3RpdmVBbmltYXRpb25zW2ld
LT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbihtb25vdG9uaWNUaW1lKTsKKworICAgICAgICAg
ICAgc3dpdGNoIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpIHsKKwor
ICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtOiB7CisgICAgICAg
ICAgICAgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogdHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmUgPSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtYXRyaXggPSB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS0+Z2V0VmFsdWUodHJpbW1lZCwgbV9j
bGllbnQtPmJvdW5kcygpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25z
W2ldLT5pc0ZpbmlzaGVkQXQobW9ub3RvbmljVGltZSkpCisgICAgICAgICAgICAgICAgICAgIG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkZpbmlz
aGVkLCBtb25vdG9uaWNUaW1lKTsKKworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5zZXRBbmlt
YXRlZFRyYW5zZm9ybShtYXRyaXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBjYXNlIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5OiB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlKiBmbG9hdEFuaW1hdGlv
bkN1cnZlID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT5jdXJ2ZSgpLT50b0Zsb2F0QW5pbWF0aW9u
Q3VydmUoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBvcGFjaXR5ID0gZmxvYXRBbmlt
YXRpb25DdXJ2ZS0+Z2V0VmFsdWUodHJpbW1lZCk7CisgICAgICAgICAgICAgICAgaWYgKG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG1vbm90b25pY1RpbWUpKQorICAgICAgICAg
ICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5p
bWF0aW9uOjpGaW5pc2hlZCwgbW9ub3RvbmljVGltZSk7CisKKyAgICAgICAgICAgICAgICBtX2Ns
aWVudC0+c2V0QW5pbWF0ZWRPcGFjaXR5KG9wYWNpdHkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9IC8vIHN3aXRjaAorICAgICAgICB9IC8v
IGlmIHJ1bm5pbmcKKyAgICB9IC8vIGZvciBlYWNoIGFuaW1hdGlvbgorfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIuaAppbmRleCBmMmY2NmViMjQ0ZWYwYWIyNzU3ZDI5MDU0ZjhjNDE5ZjQ2ZTRkOTBmLi5mZDQ1
ZWNjNDI5ZGE3NGE4MDVlZTcxZmI5ZmUyZjQwY2NjNDljYmE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKQEAgLTI2LDI2ICsyNiw0MiBAQAogI2Rl
ZmluZSBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcl9oCiAKICNpbmNsdWRlICJjYy9DQ0FjdGl2
ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNsdWRl
ICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgogCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQW5pbWF0aW9uOwotY2xhc3MgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOwogY2xhc3MgSW50U2l6ZTsKIGNsYXNzIEtleWZyYW1lVmFsdWVMaXN0
OworY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CitjbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb25z
OworCitjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQoKSB7IH0KKworICAg
IHZpcnR1YWwgaW50IGlkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRBbmltYXRl
ZE9wYWNpdHkoZmxvYXQpID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IGFuaW1hdGVkT3BhY2l0eSgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5pbWF0ZWRUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7CisgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgYW5pbWF0ZWRUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBj
b25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCA9IDA7Cit9OwogCiBjbGFzcyBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyPiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
Q2xpZW50Kik7CiAKICAgICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOwog
Ci0gICAgLy8gVGhlc2UgYXJlIHZpcnR1YWwgZm9yIHRlc3RpbmcuCisgICAgLy8gVGhlc2UgbWV0
aG9kcyBhcmUgdmlydHVhbCBmb3IgdGVzdGluZy4KICAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0
aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29u
c3QgQW5pbWF0aW9uKiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVP
ZmZzZXQpOwogICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQs
IGRvdWJsZSB0aW1lT2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGlu
dCBhbmltYXRpb25JZCk7CkBAIC01NCwyMyArNzAsNDEgQEAgcHVibGljOgogCiAgICAgLy8gRW5z
dXJlcyB0aGF0IHRoZSBsaXN0IG9mIGFjdGl2ZSBhbmltYXRpb25zIG9uIHRoZSBtYWluIHRocmVh
ZCBhbmQgdGhlIGltcGwgdGhyZWFkCiAgICAgLy8gYXJlIGtlcHQgaW4gc3luYy4gVGhpcyBmdW5j
dGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgaW1wbCB0aHJlYWQgY29udHJvbGxl
ci4KLSAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVBbmltYXRpb25zKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbCopOworICAgIHZpcnR1YWwgdm9pZCBwdXNoQW5pbWF0aW9uVXBkYXRl
c1RvKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKik7CisKKyAgICB2b2lkIGFuaW1hdGUoZG91
YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKik7CiAKLSAgICBib29s
IGhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9ucy5z
aXplKCk7IH0KKyAgICB2b2lkIGFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPik7CisK
KyAgICAvLyBSZXR1cm5zIHRoZSBhY3RpdmUgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBncm91cCwg
YW5pbWF0aW5nIHRoZSBnaXZlbiBwcm9wZXJ0eSBpZiBzdWNoIGFuCisgICAgLy8gYW5pbWF0aW9u
IGV4aXN0cy4KICAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKGludCBn
cm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOworCisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBhbnkgYW5pbWF0aW9ucyB0aGF0IGhhdmUgbmVpdGhlciBm
aW5pc2hlZCBub3IgYWJvcnRlZC4KKyAgICBib29sIGhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0
OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGFuaW1hdGlvbiBjdXJyZW50
bHkgYW5pbWF0aW5nIHRoZSBnaXZlbiBwcm9wZXJ0eSwgb3IKKyAgICAvLyBpZiB0aGVyZSBpcyBh
biBhbmltYXRpb24gc2NoZWR1bGVkIHRvIGFuaW1hdGUgdGhpcyBwcm9wZXJ0eSBpbiB0aGUgZnV0
dXJlLgogICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eShDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFy
Z2V0UHJvcGVydHkpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIoKTsKKyAgICBleHBsaWNpdCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcihDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCopOwogCiBwcml2YXRlOgotICAgIHZvaWQgcmVt
b3ZlQ29tcGxldGVkQW5pbWF0aW9ucyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsK
LSAgICB2b2lkIHB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbCopOwotICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFp
blRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKLSAgICB2b2lkIHB1c2hB
bmltYXRpb25Qcm9wZXJ0aWVzKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOworICAg
IHR5cGVkZWYgSGFzaFNldDxpbnQ+IFRhcmdldFByb3BlcnRpZXM7CisKKyAgICB2b2lkIHB1c2hO
ZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKik7Cisg
ICAgdm9pZCByZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyKik7CisKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JO
ZXh0VGljayhkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IqKTsK
KyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91YmxlIG1vbm90
b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKik7CisgICAgdm9pZCBzdGFydEFuaW1h
dGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBtb25vdG9uaWNUaW1lLCBD
Q0FuaW1hdGlvbkV2ZW50c1ZlY3RvciopOworICAgIHZvaWQgcmVzb2x2ZUNvbmZsaWN0cyhkb3Vi
bGUgbW9ub3RvbmljVGltZSk7CisgICAgdm9pZCBwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucyhDQ0Fu
aW1hdGlvbkV2ZW50c1ZlY3RvciopOwogCi0gICAgdm9pZCByZW1vdmUoaW50IGdyb3VwSWQsIEND
QWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CisgICAgdm9pZCB0aWNrQW5pbWF0aW9u
cyhkb3VibGUgbW9ub3RvbmljVGltZSk7CiAKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckNsaWVudCogbV9jbGllbnQ7CiAgICAgVmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4g
PiBtX2FjdGl2ZUFuaW1hdGlvbnM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOGE5ZTkxYjJlMmE0ZTQ1OWRlMGRlZjdmMTZlMjlkNDEwYWRkMzA1MC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbC5oIgotCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLSNpbmNsdWRlICJU
cmFuc2Zvcm1PcGVyYXRpb25zLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQSBjb2xs
ZWN0aW9uIG9mIHByb3BlcnRpZXMuIFVzZWQgd2hlbiBkZXRlcmltaW5pbmcgaWYgYW5pbWF0aW9u
cyB3YWl0aW5nIGZvciB0YXJnZXQKLS8vIGF2YWlsaWJpbGl0eSBhcmUgYWJsZSB0byBydW4uCi10
eXBlZGVmIEhhc2hTZXQ8aW50PiBUYXJnZXRQcm9wZXJ0aWVzOwotCi1QYXNzT3duUHRyPENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpjcmVhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KiBjbGllbnQpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwo
Y2xpZW50KSk7Ci19Ci0KLUNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVu
dCogY2xpZW50KQotICAgIDogbV9jbGllbnQoY2xpZW50KQotewotfQotCi1DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoKQotewot
fQotCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YW5pbWF0ZShkb3VibGUg
bW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImIGV2ZW50cykKLXsKLSAgICBz
dGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2sobW9ub3RvbmljVGltZSwgZXZlbnRzKTsK
LSAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKG1vbm90b25pY1RpbWUsIGV2
ZW50cyk7Ci0gICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSht
b25vdG9uaWNUaW1lLCBldmVudHMpOwotICAgIHJlc29sdmVDb25mbGljdHMobW9ub3RvbmljVGlt
ZSk7Ci0gICAgdGlja0FuaW1hdGlvbnMobW9ub3RvbmljVGltZSk7Ci0gICAgcHVyZ2VGaW5pc2hl
ZEFuaW1hdGlvbnMoZXZlbnRzKTsKLSAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0
QXZhaWxhYmlsaXR5KG1vbm90b25pY1RpbWUsIGV2ZW50cyk7Ci19Ci0KLXZvaWQgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsOjphZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4g
YW5pbSkKLXsKLSAgICBtX2FjdGl2ZUFuaW1hdGlvbnMuYXBwZW5kKGFuaW0pOwotfQotCi1DQ0Fj
dGl2ZUFuaW1hdGlvbiogQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpnZXRBY3RpdmVB
bmltYXRpb24oaW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSBw
cm9wZXJ0eSkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9u
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91
cCgpID09IGdyb3VwSWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgp
ID09IHByb3BlcnR5KQotICAgICAgICAgICAgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS5n
ZXQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdAotewotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRp
b246OkZpbmlzaGVkICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSAhPSBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsOjppc0FuaW1hdGluZ1Byb3BlcnR5KENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0
eSB0YXJnZXRQcm9wZXJ0eSkgY29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVBbmlt
YXRpb25zW2ldLT5ydW5TdGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCAmJiBt
X2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRpb246OkFi
b3J0ZWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdl
dFByb3BlcnR5KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5p
bWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRp
b25FdmVudHNWZWN0b3ImIGV2ZW50cykKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVBbmlt
YXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4
dFRpY2spIHsKLSAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUo
Q0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG1vbm90b25pY1RpbWUpOwotICAgICAgICAgICAg
bV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRTdGFydFRpbWUobW9ub3RvbmljVGltZSk7Ci0gICAg
ICAgICAgICBldmVudHMuYXBwZW5kKENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50OjpjcmVhdGUobV9j
bGllbnQtPmlkKCkpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91
YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiBldmVudHMpCi17Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPnN0YXJ0VGltZSgpIDw9IG1vbm90b25pY1RpbWUpIHsKLSAgICAgICAgICAgIG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG1v
bm90b25pY1RpbWUpOwotICAgICAgICAgICAgZXZlbnRzLmFwcGVuZChDQ0FuaW1hdGlvblN0YXJ0
ZWRFdmVudDo6Y3JlYXRlKG1fY2xpZW50LT5pZCgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0
aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3RvciYgZXZlbnRzKQotewotICAgIC8vIEZpcnN0IGNvbGxlY3QgcnVubmluZyBw
cm9wZXJ0aWVzLgotICAgIFRhcmdldFByb3BlcnRpZXMgYmxvY2tlZFByb3BlcnRpZXM7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2
ZUFuaW1hdGlvbjo6UnVubmluZyB8fCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkg
PT0gQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkKQotICAgICAgICAgICAgYmxvY2tlZFByb3Bl
cnRpZXMuYWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSk7Ci0gICAg
fQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9
PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSkgewotICAg
ICAgICAgICAgLy8gQ29sbGVjdCBhbGwgcHJvcGVydGllcyBmb3IgYW5pbWF0aW9ucyB3aXRoIHRo
ZSBzYW1lIGdyb3VwIGlkICh0aGV5IHNob3VsZCBhbGwgYWxzbyBiZSBpbiB0aGUgbGlzdCBvZiBh
bmltYXRpb25zKS4KLSAgICAgICAgICAgIFRhcmdldFByb3BlcnRpZXMgZW5xdWV1ZWRQcm9wZXJ0
aWVzOwotICAgICAgICAgICAgZW5xdWV1ZWRQcm9wZXJ0aWVzLmFkZChtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPnRhcmdldFByb3BlcnR5KCkpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkg
KyAxOyBqIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBtX2FjdGl2ZUFuaW1hdGlv
bnNbal0tPmdyb3VwKCkpCi0gICAgICAgICAgICAgICAgICAgIGVucXVldWVkUHJvcGVydGllcy5h
ZGQobV9hY3RpdmVBbmltYXRpb25zW2pdLT50YXJnZXRQcm9wZXJ0eSgpKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGludGVyc2VjdGlvbiBvZiB0aGUg
bGlzdCBvZiBwcm9wZXJ0aWVzIGFmZmVjdGVkIGJ5IHRoZSBncm91cCBhbmQgdGhlIGxpc3Qgb2Yg
Y3VycmVudGx5Ci0gICAgICAgICAgICAvLyBibG9ja2VkIHByb3BlcnRpZXMgaXMgbnVsbC4gSW4g
YW55IGNhc2UsIHRoZSBncm91cCdzIHRhcmdldCBwcm9wZXJ0aWVzIG5lZWQgdG8gYmUgYWRkZWQg
dG8gdGhlIGxpc3QKLSAgICAgICAgICAgIC8vIG9mIGJsb2NrZWQgcHJvcGVydGllcy4KLSAgICAg
ICAgICAgIGJvb2wgbnVsbEludGVyc2VjdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICBmb3IgKFRh
cmdldFByb3BlcnRpZXM6Oml0ZXJhdG9yIHBJdGVyID0gZW5xdWV1ZWRQcm9wZXJ0aWVzLmJlZ2lu
KCk7IHBJdGVyICE9IGVucXVldWVkUHJvcGVydGllcy5lbmQoKTsgKytwSXRlcikgewotICAgICAg
ICAgICAgICAgIGlmICghYmxvY2tlZFByb3BlcnRpZXMuYWRkKCpwSXRlcikuc2Vjb25kKQotICAg
ICAgICAgICAgICAgICAgICBudWxsSW50ZXJzZWN0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZSBpbnRlcnNlY3Rpb24gaXMgbnVsbCwgdGhlbiB3ZSBh
cmUgZnJlZSB0byBzdGFydCB0aGUgYW5pbWF0aW9ucyBpbiB0aGUgZ3JvdXAuCi0gICAgICAgICAg
ICBpZiAobnVsbEludGVyc2VjdGlvbikgewotICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG1vbm90b25p
Y1RpbWUpOwotICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0U3RhcnRU
aW1lKG1vbm90b25pY1RpbWUpOwotICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoQ0NBbmlt
YXRpb25TdGFydGVkRXZlbnQ6OmNyZWF0ZShtX2NsaWVudC0+aWQoKSkpOwotICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7
ICsraikgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5n
cm91cCgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6UnVubmluZywgbW9ub3RvbmljVGltZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnNldFN0YXJ0VGltZShtb25vdG9uaWNUaW1lKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OnJlc29sdmVDb25mbGljdHMoZG91YmxlIG1vbm90b25pY1RpbWUpCi17Ci0gICAgLy8gRmluZCBh
bnkgYW5pbWF0aW9ucyB0aGF0IGFyZSBhbmltYXRpbmcgdGhlIHNhbWUgcHJvcGVydHkgYW5kIHJl
c29sdmUgdGhlCi0gICAgLy8gY29uZmljdC4gV2UgY291bGQgZXZlbnR1YWxseSBibGVuZCwgYnV0
IGZvciBub3cgd2UnbGwganVzdCBhYm9ydCB0aGUKLSAgICAvLyBwcmV2aW91cyBhbmltYXRpb24g
KHdoZXJlICdwcmV2aW91cycgbWVhbnM6ICgxKSBoYXMgYSBwcmlvciBzdGFydCB0aW1lIG9yCi0g
ICAgLy8gKDIpIGhhcyBhbiBlcXVhbCBzdGFydCB0aW1lLCBidXQgd2FzIGFkZGVkIHRvIHRoZSBx
dWV1ZSBlYXJsaWVyLCBpLmUuLAotICAgIC8vIGhhcyBhIGxvd2VyIGluZGV4IGluIG1fYWN0aXZl
QW5pbWF0aW9ucykuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlv
bnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVu
U3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZykgewotICAgICAgICAgICAgZm9y
IChzaXplX3QgaiA9IGkgKyAxOyBqIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytqKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+cnVuU3RhdGUoKSA9
PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZyAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRh
cmdldFByb3BlcnR5KCkgPT0gbV9hY3RpdmVBbmltYXRpb25zW2pdLT50YXJnZXRQcm9wZXJ0eSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnN0YXJ0
VGltZSgpID4gbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zdGFydFRpbWUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVB
bmltYXRpb246OkFib3J0ZWQsIG1vbm90b25pY1RpbWUpOwotICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCBtb25vdG9uaWNUaW1lKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucyhD
Q0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYgZXZlbnRzKQotewotICAgIC8vIEVhY2ggaXRlcmF0aW9u
LCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpIGRlY3JlYXNlcyBvciBpIGluY3JlbWVudHMsCi0g
ICAgLy8gZ3VhcmFudGVlaW5nIHByb2dyZXNzIHRvd2FyZHMgbG9vcCB0ZXJtaW5hdGlvbi4KLSAg
ICBzaXplX3QgaSA9IDA7Ci0gICAgd2hpbGUgKGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgp
KSB7Ci0gICAgICAgIGJvb2wgYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQgPSBmYWxzZTsK
LSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZCgpKSB7Ci0gICAg
ICAgICAgICBhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCA9IHRydWU7Ci0gICAgICAgICAg
ICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyAr
K2opIHsKLSAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgp
ID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSAmJiAhbV9hY3RpdmVBbmltYXRpb25z
W2pdLT5pc0ZpbmlzaGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYWxsQW5pbXNXaXRoU2Ft
ZUlkQXJlRmluaXNoZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChhbGxB
bmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCkgewotICAgICAgICAgICAgZXZlbnRzLmFwcGVuZChD
Q0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OmNyZWF0ZShtX2NsaWVudC0+aWQoKSwgbV9hY3RpdmVB
bmltYXRpb25zW2ldLT5pZCgpKSk7Ci0gICAgICAgICAgICBtX2ZpbmlzaGVkQW5pbWF0aW9ucy5h
cHBlbmQobV9hY3RpdmVBbmltYXRpb25zW2ldLT5zaWduYXR1cmUoKSk7Ci0gICAgICAgICAgICBt
X2FjdGl2ZUFuaW1hdGlvbnMucmVtb3ZlKGkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IGkrKzsKLSAgICB9Ci19Ci0KLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjp0
aWNrQW5pbWF0aW9ucyhkb3VibGUgbW9ub3RvbmljVGltZSkKLXsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAo
bV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpS
dW5uaW5nKSB7Ci0gICAgICAgICAgICBkb3VibGUgdHJpbW1lZCA9IG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24obW9ub3RvbmljVGltZSk7Ci0KLSAgICAg
ICAgICAgIHN3aXRjaCAobV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpKSB7
Ci0KLSAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybTogewotICAg
ICAgICAgICAgICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIHRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT5jdXJ2ZSgpLT50b1RyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXggbWF0cml4ID0gdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUtPmdldFZhbHVlKHRyaW1tZWQs
IG1fY2xpZW50LT5ib3VuZHMoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG1vbm90b25pY1RpbWUpKQotICAgICAgICAgICAgICAgICAg
ICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpG
aW5pc2hlZCwgbW9ub3RvbmljVGltZSk7Ci0KLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0
VHJhbnNmb3JtKG1hdHJpeCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHk6IHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUqIGZsb2F0QW5pbWF0aW9uQ3Vy
dmUgPSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmN1cnZlKCktPnRvRmxvYXRBbmltYXRpb25DdXJ2
ZSgpOwotICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IG9wYWNpdHkgPSBmbG9hdEFuaW1hdGlv
bkN1cnZlLT5nZXRWYWx1ZSh0cmltbWVkKTsKLSAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVB
bmltYXRpb25zW2ldLT5pc0ZpbmlzaGVkQXQobW9ub3RvbmljVGltZSkpCi0gICAgICAgICAgICAg
ICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRp
b246OkZpbmlzaGVkLCBtb25vdG9uaWNUaW1lKTsKLQotICAgICAgICAgICAgICAgIG1fY2xpZW50
LT5zZXRPcGFjaXR5KG9wYWNpdHkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICB9IC8vIHN3aXRjaAotICAgICAgICB9IC8vIGlmIHJ1bm5pbmcK
LSAgICB9IC8vIGZvciBlYWNoIGFuaW1hdGlvbgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTM5NmJkOTU5MWZiNzQzMjVkODI1YjZh
ZjlhYWE0MTVhYWQwNTcxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxf
aAotI2RlZmluZSBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxfaAotCi0jaW5jbHVkZSAi
Y2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKLSNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgi
Ci0jaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25FdmVudHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKLWNs
YXNzIFRyYW5zZm9ybU9wZXJhdGlvbnM7Ci0KLWNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsQ2xpZW50KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHNldE9wYWNpdHkoZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFRy
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpID0gMDsKLSAgICB2aXJ0dWFsIGNv
bnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0ID0gMDsKLX07Ci0KLWNsYXNzIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNyZWF0ZShDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxDbGllbnQqKTsKLQotICAgIHZpcnR1YWwgfkNDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbCgpOwotCi0gICAgdm9pZCBhbmltYXRlKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBD
Q0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYpOwotCi0gICAgdm9pZCBhZGQoUGFzc093blB0cjxDQ0Fj
dGl2ZUFuaW1hdGlvbj4pOwotCi0gICAgLy8gUmV0dXJucyB0aGUgYWN0aXZlIGFuaW1hdGlvbiBp
biB0aGUgZ2l2ZW4gZ3JvdXAsIGFuaW1hdGluZyB0aGUgZ2l2ZW4gcHJvcGVydHkgaWYgc3VjaCBh
bgotICAgIC8vIGFuaW1hdGlvbiBleGlzdHMuCi0gICAgQ0NBY3RpdmVBbmltYXRpb24qIGdldEFj
dGl2ZUFuaW1hdGlvbihpbnQgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3Bl
cnR5KTsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgYW55IGFuaW1hdGlvbnMg
dGhhdCBhcmUgbmVpdGhlciBmaW5pc2hlZCBub3IgYWJvcnRlZC4KLSAgICBib29sIGhhc0FjdGl2
ZUFuaW1hdGlvbigpIGNvbnN0OwotCi0gICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5KENDQWN0
aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZnJp
ZW5kIGNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOwotCi0gICAgLy8gVGhlIGFuaW1h
dG9yIGlzIG93bmVkIGJ5IHRoZSBsYXllci4KLSAgICBleHBsaWNpdCBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50Kik7Ci0K
LSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhkb3VibGUgbW9ub3Rv
bmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImKTsKLSAgICB2b2lkIHN0YXJ0QW5pbWF0
aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9u
RXZlbnRzVmVjdG9yJik7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0
QXZhaWxhYmlsaXR5KGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
ciYpOwotICAgIHZvaWQgcmVzb2x2ZUNvbmZsaWN0cyhkb3VibGUgbW9ub3RvbmljVGltZSk7Ci0g
ICAgdm9pZCBwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucyhDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYp
OwotCi0gICAgdm9pZCB0aWNrQW5pbWF0aW9ucyhkb3VibGUgbW9ub3RvbmljVGltZSk7Ci0KLSAg
ICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqIG1fY2xpZW50OwotICAgIFZl
Y3RvcjxPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+ID4gbV9hY3RpdmVBbmltYXRpb25zOwotICAg
IFZlY3RvcjxDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uU2lnbmF0dXJlPiBtX2ZpbmlzaGVk
QW5pbWF0aW9uczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbF9oCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25EZWxlZ2F0
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkRlbGVnYXRlLmgKaW5kZXggYTc2NGNjMzdiZGNjN2VlM2U4OWE3ZTg3MmJlZDAy
NWU2MmNiMWRhOC4uNGM4OGE5MjExZWM0MDczYmE3YTQ5NjAzNDdlYzAxZmJjYzgzZGQzMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckFuaW1hdGlvbkRlbGVnYXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlLmgKQEAgLTMxLDcgKzMx
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRl
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3Vi
bGUgdGltZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25GaW5pc2hlZChp
bnQgYW5pbWF0aW9uSWQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmNwcAppbmRleCBhZDM0MGY4ZjFkZDNjNWQxNjMzNmVhOGYyODY0OWUxODBh
NThjZmU1Li41NzhjY2JjMDk1YTg1MzUzNDUxZWVmM2IyMmQyNGE5M2YwODNhNTNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNj
L0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRl
ICJjYy9DQ1F1YWRDdWxsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5o
IgpAQCAtNjgsNyArNjcsNyBAQCBDQ0xheWVySW1wbDo6Q0NMYXllckltcGwoaW50IGlkKQogICAg
ICwgbV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9kZWJ1Z0JvcmRlckNv
bG9yKDAsIDAsIDAsIDApCiAgICAgLCBtX2RlYnVnQm9yZGVyV2lkdGgoMCkKLSAgICAsIG1fbGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3Jl
YXRlKHRoaXMpKQorICAgICwgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSh0aGlzKSkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOwogfQpAQCAtMzA4LDYgKzMwNywxNiBAQCB2b2lkIENDTGF5ZXJJbXBsOjpy
ZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpCiAgICAgICAgIG1fY2hpbGRyZW5baV0t
PnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7CiB9CiAKK3ZvaWQgQ0NMYXllcklt
cGw6OnNldEFuaW1hdGVkT3BhY2l0eShmbG9hdCBhbmltYXRlZE9wYWNpdHkpCit7CisgICAgc2V0
T3BhY2l0eShhbmltYXRlZE9wYWNpdHkpOworfQorCit2b2lkIENDTGF5ZXJJbXBsOjpzZXRBbmlt
YXRlZFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgYW5pbWF0ZWRUcmFuc2Zv
cm0pCit7CisgICAgc2V0VHJhbnNmb3JtKGFuaW1hdGVkVHJhbnNmb3JtKTsKK30KKwogdm9pZCBD
Q0xheWVySW1wbDo6c2V0Qm91bmRzKGNvbnN0IEludFNpemUmIGJvdW5kcykKIHsKICAgICBpZiAo
bV9ib3VuZHMgPT0gYm91bmRzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggZTUxYTU5MmVhNzU4
MTFhODhkMDU2ZmRlY2ZiMDQwOTVmNWI4NmFjYy4uNjg5NzNjZjRkNWU5YTIxNDViZWI5ZDY2ODU4
MDQ5ZWI1NTRmMzYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0zMyw3ICszMyw3IEBACiAj
aW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIKICNpbmNsdWRlICJjYy9DQ1NoYXJlZFF1
YWRTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTQ4LDI4ICs0OCwyMyBAQCBj
bGFzcyBDQ1F1YWRDdWxsZXI7CiBjbGFzcyBMYXllckNocm9taXVtOwogY2xhc3MgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOwogCi1jbGFzcyBDQ0xheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxDbGllbnQgeworY2xhc3MgQ0NMYXllckltcGwgOiBwdWJsaWMgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBDQ0xheWVySW1wbChpZCkpOwogICAgIH0KIAotICAgIC8vIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFs
IGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJZDsgfQotCi0gICAgdmlydHVhbCB2b2lk
IHNldE9wYWNpdHkoZmxvYXQpOwotICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3BhY2l0eTsgfQotICAgIGJvb2wgb3BhY2l0eUlzQW5pbWF0aW5nKCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4Jik7Ci0gICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLSAgICBib29sIHRyYW5zZm9ybUlzQW5p
bWF0aW5nKCkgY29uc3Q7CisgICAgdmlydHVhbCB+Q0NMYXllckltcGwoKTsKIAorICAgIC8vIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1
YWwgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcklkOyB9CisgICAgdmlydHVhbCB2b2lk
IHNldEFuaW1hdGVkT3BhY2l0eShmbG9hdCk7CisgICAgdmlydHVhbCBmbG9hdCBhbmltYXRlZE9w
YWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
QW5pbWF0ZWRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2aXJ0
dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBhbmltYXRlZFRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAgICAgdmlydHVhbCBjb25zdCBJbnRTaXplJiBib3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQogCi0gICAgdmlydHVhbCB+Q0NMYXllcklt
cGwoKTsKLQogICAgIC8vIFRyZWUgc3RydWN0dXJlLgogICAgIENDTGF5ZXJJbXBsKiBwYXJlbnQo
KSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQogICAgIGNvbnN0IFZlY3RvcjxPd25QdHI8Q0NM
YXllckltcGw+ID4mIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQpAQCAt
MTI0LDYgKzExOSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRPcGFxdWUoYm9vbCk7CiAgICAg
Ym9vbCBvcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQogCisgICAgdm9pZCBzZXRP
cGFjaXR5KGZsb2F0KTsKKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFj
aXR5OyB9CisgICAgYm9vbCBvcGFjaXR5SXNBbmltYXRpbmcoKSBjb25zdDsKKwogICAgIHZvaWQg
c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpOwogICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogCkBAIC0yMDgsNiArMjA3LDEw
IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRoZSByZWN0IGNvbnRhaW50YWluaW5nIHRoaXMg
bGF5ZXIgaW4gdGhlIGN1cnJlbnQgdmlldydzIGNvb3JkaW5hdGUgc3lzdGVtLgogICAgIGNvbnN0
IEludFJlY3QgZ2V0RHJhd1JlY3QoKSBjb25zdDsKIAorICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CisgICAgYm9vbCB0
cmFuc2Zvcm1Jc0FuaW1hdGluZygpIGNvbnN0OworCiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGRyYXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2RyYXdUcmFuc2Zvcm07IH0K
ICAgICB2b2lkIHNldERyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1h
dHJpeCkgeyBtX2RyYXdUcmFuc2Zvcm0gPSBtYXRyaXg7IH0KICAgICBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgc2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3NjcmVl
blNwYWNlVHJhbnNmb3JtOyB9CkBAIC0yMjIsNyArMjI1LDcgQEAgcHVibGljOgogICAgIGJvb2wg
bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUHJvcGVydHlDaGFu
Z2VkOyB9CiAgICAgdm9pZCByZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCi0g
ICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBsYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIoKSB7IHJldHVybiBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQorICAgIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKiBsYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IHJl
dHVybiBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQogCiAgICAgdmlydHVhbCBS
ZWdpb24gb3BhcXVlQ29udGVudHNSZWdpb24oKSBjb25zdCB7IHJldHVybiBSZWdpb24oKTsgfTsK
IApAQCAtMzUwLDcgKzM1Myw3IEBAIHByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fdXBkYXRlUmVj
dDsKIAogICAgIC8vIE1hbmFnZXMgYW5pbWF0aW9ucyBmb3IgdGhpcyBsYXllci4KLSAgICBPd25Q
dHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBtX2xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IG1fbGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyOwogfTsKIAogdm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxDQ0xheWVySW1w
bCo+OjppdGVyYXRvciBmaXJzdCwgVmVjdG9yPENDTGF5ZXJJbXBsKj46Oml0ZXJhdG9yIGVuZCwg
Q0NMYXllclNvcnRlciopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMDE3
ODIwYTdjNzBlMWI5M2ZjNjJhNGRmNDc2NjQ1Mjg2OTcwMzVhMS4uMzA0MzRiMjlmZWZjMWNjMGI3
MTAyYTkyNzRlNjc3OWJiMmJmZTA4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiVHJhY2VF
dmVudC5oIgogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5o
IgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaCIKQEAgLTY0LDYgKzY1LDcgQEAgUGFzc1JlZlB0cjxDQ0xheWVy
VHJlZUhvc3Q+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdENsaWVudCog
Y2xpZW4KIENDTGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENs
aWVudCogY2xpZW50LCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykKICAgICA6IG1fY29tcG9z
aXRvcklkZW50aWZpZXIoLTEpCiAgICAgLCBtX2FuaW1hdGluZyhmYWxzZSkKKyAgICAsIG1fbmVl
ZHNBbmltYXRlTGF5ZXJzKGZhbHNlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9m
cmFtZU51bWJlcigwKQogICAgICwgbV9sYXllclJlbmRlcmVySW5pdGlhbGl6ZWQoZmFsc2UpCkBA
IC0xODEsNiArMTgzLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUFuaW1hdGlvbnMo
ZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogewogICAgIG1fYW5pbWF0aW5nID0gdHJ1ZTsKICAgICBt
X2NsaWVudC0+dXBkYXRlQW5pbWF0aW9ucyhmcmFtZUJlZ2luVGltZSk7CisgICAgYW5pbWF0ZUxh
eWVycyhmcmFtZUJlZ2luVGltZSk7CiAgICAgbV9hbmltYXRpbmcgPSBmYWxzZTsKIH0KIApAQCAt
MjEwLDggKzIxMywxMCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQ29tbWl0T25JbXBs
VGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogICAgIGhvc3RJbXBsLT5zZXRS
b290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwg
aG9zdEltcGwtPnJlbGVhc2VSb290TGF5ZXIoKSkpOwogCiAgICAgLy8gV2UgbWF5IGhhdmUgYWRk
ZWQgYW4gYW5pbWF0aW9uIGR1cmluZyB0aGUgdHJlZSBzeW5jLiBUaGlzIHdpbGwgY2F1c2UgaG9z
dEltcGwgdG8gdmlzaXQgaXRzIGNvbnRyb2xsZXJzLgotICAgIGlmIChyb290TGF5ZXIoKSkKKyAg
ICBpZiAocm9vdExheWVyKCkpIHsKICAgICAgICAgaG9zdEltcGwtPnNldE5lZWRzQW5pbWF0ZUxh
eWVycygpOworICAgICAgICBtX25lZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7CisgICAgfQogCiAg
ICAgaG9zdEltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKGZyYW1lTnVtYmVyKCkpOwogICAgIGhv
c3RJbXBsLT5zZXRWaWV3cG9ydFNpemUodmlld3BvcnRTaXplKCkpOwpAQCAtMzg3LDggKzM5Miwx
MCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVjb21lSW52aXNpYmxlT25JbXBsVGhyZWFk
KENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbQogICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIo
VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwt
PnJlbGVhc2VSb290TGF5ZXIoKSkpOwogCiAgICAgLy8gV2UgbWF5IGhhdmUgYWRkZWQgYW4gYW5p
bWF0aW9uIGR1cmluZyB0aGUgdHJlZSBzeW5jLiBUaGlzIHdpbGwgY2F1c2UgaG9zdEltcGwgdG8g
dmlzaXQgaXRzIGNvbnRyb2xsZXJzLgotICAgIGlmIChyb290TGF5ZXIoKSkKKyAgICBpZiAocm9v
dExheWVyKCkpIHsKICAgICAgICAgaG9zdEltcGwtPnNldE5lZWRzQW5pbWF0ZUxheWVycygpOwor
ICAgICAgICBtX25lZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7CisgICAgfQogfQogCiB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFy
Z2V0UG9zaXRpb24sIGJvb2wgdXNlQW5jaG9yLCBmbG9hdCBzY2FsZSwgZG91YmxlIGR1cmF0aW9u
U2VjKQpAQCAtNjQyLDYgKzY0OSwzMyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlVGV4
dHVyZUFmdGVyQ29tbWl0KFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cgogICAgIG1f
ZGVsZXRlVGV4dHVyZUFmdGVyQ29tbWl0TGlzdC5hcHBlbmQodGV4dHVyZSk7CiB9CiAKK3ZvaWQg
Q0NMYXllclRyZWVIb3N0OjphbmltYXRlTGF5ZXJzKGRvdWJsZSBtb25vdG9uaWNUaW1lKQorewor
ICAgIGlmICghbV9zZXR0aW5ncy50aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQgfHwgIW1fbmVlZHNB
bmltYXRlTGF5ZXJzIHx8ICFtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVFJB
Q0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMiLCB0aGlzLCAwKTsK
KyAgICBtX25lZWRzQW5pbWF0ZUxheWVycyA9IGFuaW1hdGVMYXllcnNSZWN1cnNpdmUobV9yb290
TGF5ZXIuZ2V0KCksIG1vbm90b25pY1RpbWUpOworfQorCitib29sIENDTGF5ZXJUcmVlSG9zdDo6
YW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBjdXJyZW50LCBkb3VibGUgbW9u
b3RvbmljVGltZSkKK3sKKyAgICBib29sIHN1YnRyZWVOZWVkc0FuaW1hdGVMYXllcnMgPSBmYWxz
ZTsKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciogY3VycmVudENvbnRyb2xsZXIgPSBj
dXJyZW50LT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBjdXJyZW50Q29udHJvbGxl
ci0+YW5pbWF0ZShtb25vdG9uaWNUaW1lLCAwKTsKKworICAgIC8vIElmIHRoZSBjdXJyZW50IGNv
bnRyb2xsZXIgc3RpbGwgaGFzIGFuIGFjdGl2ZSBhbmltYXRpb24sIHdlIG11c3QgY29udGludWUg
YW5pbWF0aW5nIGxheWVycy4KKyAgICBpZiAoY3VycmVudENvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKQorICAgICAgICAgc3VidHJlZU5lZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoY3VycmVudC0+Y2hpbGRy
ZW4oKVtpXS5nZXQoKSwgbW9ub3RvbmljVGltZSkpCisgICAgICAgICAgICBzdWJ0cmVlTmVlZHNB
bmltYXRlTGF5ZXJzID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gc3VidHJlZU5lZWRzQW5p
bWF0ZUxheWVyczsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldEFuaW1hdGlvbkV2ZW50
c1JlY3Vyc2l2ZShjb25zdCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYgZXZlbnRzLCBMYXllckNo
cm9taXVtKiBsYXllciwgZG91YmxlIHdhbGxDbG9ja1RpbWUpCiB7CiAgICAgZm9yIChzaXplX3Qg
ZXZlbnRJbmRleCA9IDA7IGV2ZW50SW5kZXggPCBldmVudHMuc2l6ZSgpOyArK2V2ZW50SW5kZXgp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggODlmMWJlMzA3ZWRmYzkxNmQ2MDll
MDg1YTM1NTIyNjc3NjIzZWM4Ny4uZjc0OWE2YjAzZDE3ZjQ0ZWQ2MTk4NGZlOTgwMmFhMDEwZDhl
NjFiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTIyNSwxMSArMjI1LDE0IEBA
IHByaXZhdGU6CiAgICAgdm9pZCByZXNlcnZlVGV4dHVyZXMoKTsKICAgICB2b2lkIGNsZWFyUGVu
ZGluZ1VwZGF0ZSgpOwogCisgICAgdm9pZCBhbmltYXRlTGF5ZXJzKGRvdWJsZSBtb25vdG9uaWNU
aW1lKTsKKyAgICBib29sIGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogY3Vy
cmVudCwgZG91YmxlIG1vbm90b25pY1RpbWUpOwogICAgIHZvaWQgc2V0QW5pbWF0aW9uRXZlbnRz
UmVjdXJzaXZlKGNvbnN0IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiwgTGF5ZXJDaHJvbWl1bSos
IGRvdWJsZSB3YWxsQ2xvY2tUaW1lKTsKIAogICAgIGludCBtX2NvbXBvc2l0b3JJZGVudGlmaWVy
OwogCiAgICAgYm9vbCBtX2FuaW1hdGluZzsKKyAgICBib29sIG1fbmVlZHNBbmltYXRlTGF5ZXJz
OwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBtX2NsaWVudDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggZGI2MzE1YzQ5NTc0ODg5MWFiNjQw
YjllNGJmMmU5YTY5NmYzMTg5OS4uNWMzZmQ0OGI1ZjJlZmFmZWUyNWZkNDk0N2ZmY2U5M2FlZTRk
MjI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC0z
Miw2ICszMiw4IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlJlbmRl
clN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisj
aW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBlYmUwNmY1MTBlOTZk
NWQwN2Q3ZDcwZjdlNjNjNTkzNjQ1YTY0ZDQ0Li40Y2U2YWY0MGNlYzk5YmRiZDY3ZmNiODUxNjc5
OTI0M2JkZDZiZjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApA
QCAtMzEwLDE1ICszMTAsMTUgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVS
ZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzLCBDQ0xheWUKICAgICBvY2NsdXNp
b25UcmFja2VyLm92ZXJkcmF3TWV0cmljcygpLnJlY29yZE1ldHJpY3ModGhpcyk7CiB9CiAKLXZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShDQ0xheWVySW1w
bCogY3VycmVudCwgZG91YmxlIG1vbm90b25pY1RpbWUsIGRvdWJsZSB3YWxsQ2xvY2tUaW1lLCBD
Q0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYgZXZlbnRzLCBib29sJiBkaWRBbmltYXRlLCBib29sJiBu
ZWVkc0FuaW1hdGVMYXllcnMpCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXll
cnNSZWN1cnNpdmUoQ0NMYXllckltcGwqIGN1cnJlbnQsIGRvdWJsZSBtb25vdG9uaWNUaW1lLCBk
b3VibGUgd2FsbENsb2NrVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IqIGV2ZW50cywgYm9v
bCYgZGlkQW5pbWF0ZSwgYm9vbCYgbmVlZHNBbmltYXRlTGF5ZXJzKQogewogICAgIGJvb2wgc3Vi
dHJlZU5lZWRzQW5pbWF0ZUxheWVycyA9IGZhbHNlOwogCi0gICAgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsKiBjdXJyZW50Q29udHJvbGxlciA9IGN1cnJlbnQtPmxheWVyQW5pbWF0aW9u
Q29udHJvbGxlcigpOworICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKiBjdXJyZW50Q29u
dHJvbGxlciA9IGN1cnJlbnQtPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOwogCiAgICAgYm9v
bCBoYWRBY3RpdmVBbmltYXRpb24gPSBjdXJyZW50Q29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCk7CiAgICAgY3VycmVudENvbnRyb2xsZXItPmFuaW1hdGUobW9ub3RvbmljVGltZSwgZXZl
bnRzKTsKLSAgICBib29sIHN0YXJ0ZWRBbmltYXRpb24gPSBldmVudHMuc2l6ZSgpID4gMDsKKyAg
ICBib29sIHN0YXJ0ZWRBbmltYXRpb24gPSBldmVudHMtPnNpemUoKSA+IDA7CiAKICAgICAvLyBX
ZSBhbmltYXRlZCBpZiB3ZSBlaXRoZXIgdGlja2VkIGEgcnVubmluZyBhbmltYXRpb24sIG9yIHN0
YXJ0ZWQgYSBuZXcgYW5pbWF0aW9uLgogICAgIGlmIChoYWRBY3RpdmVBbmltYXRpb24gfHwgc3Rh
cnRlZEFuaW1hdGlvbikKQEAgLTc3OCw3ICs3NzgsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OmFuaW1hdGVMYXllcnMoZG91YmxlIG1vbm90b25pY1RpbWUsIGRvdWJsZSB3YWxsQ2xvY2tU
aQogICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5l
dyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwogCiAgICAgYm9vbCBkaWRBbmltYXRlID0gZmFs
c2U7Ci0gICAgYW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShtX3Jvb3RMYXllckltcGwuZ2V0KCksIG1v
bm90b25pY1RpbWUsIHdhbGxDbG9ja1RpbWUsICpldmVudHMsIGRpZEFuaW1hdGUsIG1fbmVlZHNB
bmltYXRlTGF5ZXJzKTsKKyAgICBhbmltYXRlTGF5ZXJzUmVjdXJzaXZlKG1fcm9vdExheWVySW1w
bC5nZXQoKSwgbW9ub3RvbmljVGltZSwgd2FsbENsb2NrVGltZSwgZXZlbnRzLmdldCgpLCBkaWRB
bmltYXRlLCBtX25lZWRzQW5pbWF0ZUxheWVycyk7CiAKICAgICBpZiAoIWV2ZW50cy0+aXNFbXB0
eSgpKQogICAgICAgICBtX2NsaWVudC0+cG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9u
SW1wbFRocmVhZChldmVudHMucmVsZWFzZSgpLCB3YWxsQ2xvY2tUaW1lKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCAzYmI3ZDNkZTE0MTM2ZWRiYmM5ZjE5ZWRmODUw
NDcyNDNkZmJiYWEzLi44MjQzNWZjZTQwYzdkNjFiNzkxZjc1OGUzOTM4OWE3NTMzMmEwYzlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0xNjEsNyArMTYxLDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CiAgICAgdm9pZCB0
cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25z
dCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgdm9pZCBjYWxjdWxh
dGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYsIENDTGF5ZXJMaXN0JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKLSAgICB2b2lkIGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoQ0NMYXllcklt
cGwqLCBkb3VibGUgbW9ub3RvbmljVGltZSwgZG91YmxlIHdhbGxDbG9ja1RpbWUsIENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yJiwgYm9vbCYgZGlkQW5pbWF0ZSwgYm9vbCYgbmVlZHNBbmltYXRlTGF5
ZXJzKTsKKyAgICB2b2lkIGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoQ0NMYXllckltcGwqLCBkb3Vi
bGUgbW9ub3RvbmljVGltZSwgZG91YmxlIHdhbGxDbG9ja1RpbWUsIENDQW5pbWF0aW9uRXZlbnRz
VmVjdG9yKiwgYm9vbCYgZGlkQW5pbWF0ZSwgYm9vbCYgbmVlZHNBbmltYXRlTGF5ZXJzKTsKICAg
ICBJbnRTaXplIGNvbnRlbnRTaXplKCkgY29uc3Q7CiAgICAgdm9pZCBzZW5kRGlkTG9zZUNvbnRl
eHRSZWN1cnNpdmUoQ0NMYXllckltcGwqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApp
bmRleCAzMjdkOWJlMGIxMjBmYjllZmRlZmY4MDUzMTg4MDUzMzA2YWJkYTRiLi5mYzc3NWMzZWU4
MjVlMTcxYmVmNGFlYjI1NzljNDdiOTQ5YzM2MjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcApAQCAtMzkzLDggKzM5Myw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2NoZWR1bGVkQWN0
aW9uQmVnaW5GcmFtZSgpCiB7CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5
OjpzY2hlZHVsZWRBY3Rpb25CZWdpbkZyYW1lIik7CiAgICAgQVNTRVJUKCFtX3BlbmRpbmdCZWdp
bkZyYW1lUmVxdWVzdCk7Ci0gICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QgPSBhZG9wdFB0
cihuZXcgQmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlKCkpOwotICAgIG1fcGVuZGluZ0JlZ2luRnJh
bWVSZXF1ZXN0LT5mcmFtZUJlZ2luVGltZSA9IDA7CisgICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJl
cXVlc3QgPSBhZG9wdFB0cihuZXcgQmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlKG1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpKSk7CiAgICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QtPnNj
cm9sbEluZm8gPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CiAK
ICAgICBtX21haW5UaHJlYWRQcm94eS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMs
ICZDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKaW5k
ZXggOWU1MjRhNzYzZTI4NTBmZDIwOWMxM2UzNTI2MTJlYzVjYTMwNDllMS4uYWFmMmY3MmJlMjI4
MzdmNmViMDQ1MjdkMmFkNTI3ZTFiYzdjNjI5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaApA
QCAtOTIsNyArOTIsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gU2V0IG9uIGltcGwgdGhyZWFkLCBy
ZWFkIG9uIG1haW4gdGhyZWFkLgogICAgIHN0cnVjdCBCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGUg
ewotICAgICAgICBCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGUoKSA6IGZyYW1lQmVnaW5UaW1lKDAp
IHsgfQorICAgICAgICBCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGUoZG91YmxlIGZyYW1lQmVnaW5U
aW1lKSA6IGZyYW1lQmVnaW5UaW1lKGZyYW1lQmVnaW5UaW1lKSB7IH0KICAgICAgICAgZG91Ymxl
IGZyYW1lQmVnaW5UaW1lOwogICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Ny
b2xsSW5mbzsKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggNmE2MzQx
NmI2OWRiMTI2YTIwOTkzZWZlMmM1Y2UxMGRjZGYwNTUxYi4uZTI2N2E1YmQzZGI5M2NkYjJjN2Y4
OTJjMjE2Yjg5NzJmMzMzN2YyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02
Nyw3ICs2Nyw2IEBACiAgICAgICAgICAgICAndGVzdHMvQ0NEZWxheUJhc2VkVGltZVNvdXJjZVRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3Bw
JywKLSAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwCmluZGV4IGM5
MjQwZTMxZmNjNmI3ZjAwYzFiNjkzN2ZhNzY5MWJiMDNiNDVkYzMuLmMyMmU0MzIyYjkxNzg0Zjgy
MWFjYzIyZDdkNjE2MzZkZTU2NWE4OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAKQEAgLTEwNiwxMiArMTA2LDEy
IEBAIGZsb2F0IEZha2VGbG9hdFRyYW5zaXRpb246OmdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25z
dAogICAgIHJldHVybiAoMSAtIHRpbWUpICogbV9mcm9tICsgdGltZSAqIG1fdG87CiB9CiAKLUZh
a2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50OjpGYWtlTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbENsaWVudCgpCitGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50
OjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KCkKICAgICA6IG1fb3BhY2l0eSgw
KQogewogfQogCi1GYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudDo6fkZha2VM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KCkKK0Zha2VMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJDbGllbnQ6On5GYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KCkKIHsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlv
blRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25U
ZXN0Q29tbW9uLmgKaW5kZXggZDEzZTc0Y2ExNzFlZTkzOWJjNjEwZjkzNGIwMzM4NmQxNjc2N2Rj
ZS4uMjNhODhmN2Q2Y2M2ODkyZDM4MzEyZjZiZWNiODk5ZDJjMzNhYzBjNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oCkBA
IC0yNiwxMiArMjYsMTEgQEAKICNkZWZpbmUgQ0NBbmltYXRpb25UZXN0Q29tbW9uX2gKIAogI2lu
Y2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlci5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
Ci1jbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIExheWVyQ2hyb21pdW07
CiB9CiAKQEAgLTc3LDE2ICs3NiwxNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fdG87CiB9Owog
Ci1jbGFzcyBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCA6IHB1YmxpYyBX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgeworY2xhc3MgRmFr
ZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgRmFrZUxheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxDbGllbnQoKTsKLSAgICB2aXJ0dWFsIH5GYWtlTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbENsaWVudCgpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJDbGllbnQoKTsKKyAgICB2aXJ0dWFsIH5GYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xp
ZW50KCk7CiAKKyAgICAvLyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBpbXBsZW1l
bnRhdGlvbgogICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZp
cnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQotICAgIHZp
cnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0
eTsgfQotICAgIHZpcnR1YWwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNldFRyYW5zZm9ybShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNm
b3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEFu
aW1hdGVkT3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7IG1fb3BhY2l0eSA9IG9wYWNpdHk7IH0KKyAg
ICB2aXJ0dWFsIGZsb2F0IGFuaW1hdGVkT3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0
eTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRBbmltYXRlZFRyYW5zZm9ybShjb25zdCBXZWJDb3Jl
OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNm
b3JtOyB9CisgICAgdmlydHVhbCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
YW5pbWF0ZWRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQogICAgIHZp
cnR1YWwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9i
b3VuZHM7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWFlY2NjNTM5YTVkNTFkZmYxOGEyYmU3
YzQyZWViYTE0NTdlZmJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOTYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0
Q29tbW9uLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgi
Ci0jaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgotI2luY2x1ZGUgImNjL0NDQW5pbWF0
aW9uRXZlbnRzLmgiCi0jaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KLSNpbmNsdWRlIDxndGVzdC9n
dGVzdC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7Ci0KLW5hbWVzcGFjZSB7Ci0KLVBhc3NP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRy
PENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBpbnQgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJn
ZXRQcm9wZXJ0eSBwcm9wZXJ0eSkKLXsKLSAgICByZXR1cm4gQ0NBY3RpdmVBbmltYXRpb246OmNy
ZWF0ZShjdXJ2ZSwgMCwgaWQsIHByb3BlcnR5KTsKLX0KLQotLy8gVGVzdHMgdGhhdCB0cmFuc2l0
aW9uaW5nIG9wYWNpdHkgZnJvbSAwIHRvIDEgd29ya3MgYXMgZXhwZWN0ZWQuCi1URVNUKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxUcmFuc2l0aW9uKQotewotICAg
IE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0Fu
aW1hdGlvbkV2ZW50c1ZlY3RvcikpOwotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw+IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6
Y3JlYXRlKCZkdW1teSkpOwotCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChj
cmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwg
MCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAgY29udHJvbGxl
ci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZl
bnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5p
bWF0ZSgxLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLSAg
ICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotfQotCi0v
LyBUZXN0cyB0aGF0IHR3byBxdWV1ZWQgYW5pbWF0aW9ucyBhZmZlY3RpbmcgdGhlIHNhbWUgcHJv
cGVydHkgcnVuIGluIHNlcXVlbmNlLgotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LCBUcml2aWFsUXVldWluZykKLXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNW
ZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAg
ICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25Q
dHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIGNv
bnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwot
ICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOwotCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VR
KDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRz
KTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0g
ICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgyLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAg
ICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotfQotCi0v
LyBUZXN0cyBpbnRlcnJ1cHRpbmcgYSB0cmFuc2l0aW9uIHdpdGggYW5vdGhlciB0cmFuc2l0aW9u
LgotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBJbnRlcnJ1cHQpCi17
Ci0gICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3
IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbD4gY29udHJvbGxlcigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAq
ZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0KLSAgICBPd25QdHI8Q0NB
Y3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7Ci0gICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0
aW5nRm9yTmV4dFRpY2ssIDApOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkp
OwotCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsICpldmVudHMpOyAvLyBzZWNvbmQgYW5p
bSBzdGFydHMgTk9XLgotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9s
bGVyLT5hbmltYXRlKDEuNSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9w
YWNpdHkoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKLX0KLQotLy8gVGVzdHMgc2NoZWR1bGluZyB0d28gYW5pbWF0aW9ucyB0byBydW4gdG9n
ZXRoZXIgd2hlbiBvbmx5IG9uZSBwcm9wZXJ0eSBpcyBmcmVlLgotVEVTVChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2hlbkFQcm9wZXJ0eUlzQmxv
Y2tlZCkKLXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9w
dFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtlTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIGNvbnRyb2xsZXItPmFkZChjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEp
KSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0
aW9uKDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xs
ZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMSwgMCwgMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfRVEoMCwgZHVtbXku
b3BhY2l0eSgpKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKLSAgICAvLyBTaG91
bGQgbm90IGhhdmUgc3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQuCi0gICAgRVhQRUNU
X1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgw
LCBkdW1teS5vcGFjaXR5KCkpOwotICAgIC8vIFRoZSB0aGUgZmxvYXQgYW5pbWF0aW9uIHNob3Vs
ZCBoYXZlIHN0YXJ0ZWQgYXQgdGltZSAxIGFuZCBzaG91bGQgYmUgZG9uZS4KLSAgICBjb250cm9s
bGVyLT5hbmltYXRlKDIsICpldmVudHMpOwotICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5
KCkpOwotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
Ci19Ci0KLS8vIFRlc3RzIHNjaGVkdWxpbmcgdHdvIGFuaW1hdGlvbnMgdG8gcnVuIHRvZ2V0aGVy
IHdpdGggZGlmZmVyZW50IGxlbmd0aHMgYW5kIGFub3RoZXIKLS8vIGFuaW1hdGlvbiBxdWV1ZWQg
dG8gc3RhcnQgd2hlbiB0aGUgc2hvcnRlciBhbmltYXRpb24gZmluaXNoZXMgKHNob3VsZCB3YWl0
Ci0vLyBmb3IgYm90aCB0byBmaW5pc2gpLgotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCi17Ci0gICAgT3du
UHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yKSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxD
bGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4g
Y29udHJvbGxlcigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVh
dGUoJmR1bW15KSk7Ci0KLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigyKSksIDEsIENDQWN0aXZlQW5p
bWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYp
KSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAgIC8vIEFuaW1zIHdpdGgg
aWQgMSBzaG91bGQgYm90aCBzdGFydCBub3cuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAq
ZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgLy8gVGhlIG9wYWNp
dHkgYW5pbWF0aW9uIHNob3VsZCBoYXZlIGZpbmlzaGVkIGF0IHRpbWUgMSwgYnV0IHRoZSBncm91
cAotICAgIC8vIG9mIGFuaW1hdGlvbnMgd2l0aCBpZCAxIGRvbid0IGZpbmlzaCB1bnRpbCB0aW1l
IDIgYmVjYXVzZSBvZiB0aGUgbGVuZ3RoCi0gICAgLy8gb2YgdGhlIHRyYW5zZm9ybSBhbmltYXRp
b24uCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKLSAgICAvLyBTaG91bGQg
bm90IGhhdmUgc3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQuCi0gICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgxLCBk
dW1teS5vcGFjaXR5KCkpOwotCi0gICAgLy8gVGhlIHRoZSBzZWNvbmQgb3BhY2l0eSBhbmltYXRp
b24gc2hvdWxkIHN0YXJ0IGF0IHRpbWUgMiBhbmQgc2hvdWxkIGJlCi0gICAgLy8gZG9uZSBieSB0
aW1lIDMKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDMsICpldmVudHMpOwotICAgIEVYUEVDVF9F
USgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7Ci19Ci0KLS8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0
aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUuCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbFRlc3QsIFNjaGVkdWxlQW5pbWF0aW9uKQotewotICAgIE93blB0cjxDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cikpOwotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15Owot
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0g
ICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwot
Ci0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7Ci0gICAgdG9BZGQtPnNldFN0YXJ0VGlt
ZSgxKTsKLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLQotICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkp
OwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1t
eS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgKmV2ZW50cyk7Ci0gICAg
RVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLX0KLQotLy8gVGVzdHMgc2NoZWR1bGluZyBhbiBh
bmltYXRpb24gdG8gc3RhcnQgaW4gdGhlIGZ1dHVyZSB0aGF0J3MgaW50ZXJydXB0aW5nIGEgcnVu
bmluZyBhbmltYXRpb24uCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3Qs
IFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5pbWF0aW9uKQotewotICAgIE93
blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1h
dGlvbkV2ZW50c1ZlY3RvcikpOwotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
Q2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+
IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3Jl
YXRlKCZkdW1teSkpOwotCi0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0KLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRv
QWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigxLCAwLjVmLCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgdG9B
ZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAw
KTsKLSAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0Fk
ZC5yZWxlYXNlKCkpOwotCi0gICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0cmFuc2l0aW9uIHNob3Vs
ZCBzdGFydCBpbW1lZGlhdGVseS4KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMp
OwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAg
ICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDAuNSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBj
b250cm9sbGVyLT5hbmltYXRlKDEsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3Bh
Y2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsICpldmVudHMpOwotICAgIEVYUEVD
VF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7Ci19Ci0KLS8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0
aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUgdGhhdCBpbnRlcnJ1cHRzIGEgcnVubmluZyBhbmlt
YXRpb24KLS8vIGFuZCB0aGVyZSBpcyB5ZXQgYW5vdGhlciBhbmltYXRpb24gcXVldWVkIHRvIHN0
YXJ0IGxhdGVyLgotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hl
ZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvbldpdGhBbmltSW5RdWV1ZSkK
LXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihu
ZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAx
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMiwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OwotICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0
YXJ0VGltZSwgMCk7Ci0gICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKLSAgICBjb250cm9sbGVy
LT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLQotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMC43NWYp
KSwgMywgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAgIC8vIEZpcnN0IDJzIG9w
YWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCi0gICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1
bW15Lm9wYWNpdHkoKSk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7Ci0gICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9F
USgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMywgKmV2
ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoNCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkp
OwotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci19
Ci0KLS8vIFRlc3QgdGhhdCBhIGxvb3BpbmcgYW5pbWF0aW9uIGxvb3BzIGFuZCBmb3IgdGhlIGNv
cnJlY3QgbnVtYmVyIG9mIGl0ZXJhdGlvbnMuCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbFRlc3QsIFRyaXZpYWxMb29waW5nKQotewotICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2
ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcikp
OwotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAg
IE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0gICAg
ICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotCi0g
ICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKDMpOwotICAgIGNv
bnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwotCi0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgxLjI1LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFj
aXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSwgKmV2ZW50cyk7Ci0gICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9F
USgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIuMjUs
ICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKLSAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgyLjc1LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFj
aXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMywgKmV2ZW50cyk7Ci0gICAgRVhQRUNU
X0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEo
MSwgZHVtbXkub3BhY2l0eSgpKTsKLQotICAgIC8vIEp1c3QgYmUgZXh0cmEgc3VyZS4KLSAgICBj
b250cm9sbGVyLT5hbmltYXRlKDQsICpldmVudHMpOwotICAgIEVYUEVDVF9FUSgxLCBkdW1teS5v
cGFjaXR5KCkpOwotfQotCi0vLyBUZXN0IHRoYXQgYW4gaW5maW5pdGVseSBsb29waW5nIGFuaW1h
dGlvbiBkb2VzIGluZGVlZCBnbyB1bnRpbCBhYm9ydGVkLgotVEVTVChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxUZXN0LCBJbmZpbml0ZUxvb3BpbmcpCi17Ci0gICAgT3duUHRyPENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRz
VmVjdG9yKSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVt
bXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxl
cigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15
KSk7Ci0KLSAgICBjb25zdCBpbnQgaWQgPSAxOwotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAg
dG9BZGQtPnNldEl0ZXJhdGlvbnMoLTEpOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxl
YXNlKCkpOwotCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VR
KDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjI1LCAqZXZl
bnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
Ci0gICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMS43NSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgp
KTsKLQotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTA3Mzc0MTgyNC4yNSwgKmV2ZW50cyk7Ci0g
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVY
UEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEwNzM3NDE4MjQuNzUsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHko
KSk7Ci0KLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+Z2V0QWN0aXZl
QW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1blN0YXRlKEND
QWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCAwLjc1Zik7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15
Lm9wYWNpdHkoKSk7Ci19Ci0KLS8vIFRlc3QgdGhhdCBwYXVzaW5nIGFuZCByZXN1bWluZyB3b3Jr
IGFzIGV4cGVjdGVkLgotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBQ
YXVzZVJlc3VtZSkKLXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50
cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtlTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIGNvbnN0IGludCBpZCA9
IDE7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihu
ZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOwotCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNU
X0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsICpl
dmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKLSAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLQotICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlBh
dXNlZCwgMC41Zik7Ci0KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQsICpldmVudHMpOwot
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBF
WFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLQotICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKLSAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDEw
MjQpOwotCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LjI1LCAqZXZlbnRzKTsKLSAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNU
X0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAy
NC41LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwotfQotCi1URVNU
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEFib3J0QUdyb3VwZWRBbmltYXRp
b24pCi17Ci0gICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQ
dHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbD4gY29udHJvbGxlcigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0KLSAgICBjb25zdCBpbnQgaWQgPSAxOwotICAg
IGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VU
cmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0p
KTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjc1ZikpLCAyLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRz
KTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0g
ICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0KLSAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlk
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0
aW9uOjpBYm9ydGVkLCAxKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsICpldmVudHMpOwot
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBF
WFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIs
ICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKCFjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwotfQotCi19IC8v
IG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwCmluZGV4IGM0ZjEwM2EzY2Fm
ZTQ2OGU0YjhlNzk3ODZkMmIyMTg3ZTQ1ZDdlYTEuLjhlYjA4NDBlZGFkZjJmYjYyZjk3N2NjNzkw
ZDY1NmFlNzYzMTBmODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAKQEAgLTU2LDcg
KzU2LDggQEAgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0
aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4KIAogVEVTVChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlclRlc3QsIGNyZWF0ZU9wYWNpdHlBbmltYXRpb24pCiB7Ci0gICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjpjcmVhdGUoKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVu
dCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xs
ZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKICAgICBjb25z
dCBkb3VibGUgZHVyYXRpb24gPSAxOwogICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZh
bHVlcyhBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7CiAgICAgdmFsdWVzLmluc2VydChuZXcgRmxv
YXRBbmltYXRpb25WYWx1ZSgwLCAwKSk7CkBAIC04Nyw3ICs4OCw4IEBAIFRFU1QoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBjcmVhdGVPcGFjaXR5QW5pbWF0aW9uKQogCiBURVNUKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uKQog
ewotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOworICAgIEZha2VMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1
bW15KSk7CiAgICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKICAgICBXZWJDb3JlOjpLZXlm
cmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CiAK
QEAgLTEyNCw5MiArMTI2LDM3MCBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVz
dCwgY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uKQogCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyVGVzdCwgc3luY05ld0FuaW1hdGlvbikKIHsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsPiBjb250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpKTsKKyAg
ICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15SW1wbDsKKyAgICBPd25Q
dHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXJJbXBsKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15SW1wbCkpOworICAgIEZha2VMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUo
JmR1bW15KSk7CiAKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFu
aW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgYWRkT3BhY2l0
eVRyYW5zaXRpb25Ub0NvbnRyb2xsZXIoKmNvbnRyb2xsZXIsIDEsIDAsIDEpOwogCi0gICAgY29u
dHJvbGxlci0+c3luY2hyb25pemVBbmltYXRpb25zKGNvbnRyb2xsZXJJbXBsLmdldCgpKTsKKyAg
ICBjb250cm9sbGVyLT5wdXNoQW5pbWF0aW9uVXBkYXRlc1RvKGNvbnRyb2xsZXJJbXBsLmdldCgp
KTsKIAogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24o
MCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVB
bmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIGNvbnRyb2xsZXJJbXBsLT5n
ZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0
ZSgpKTsKIH0KIAotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIHN5bmNBbmlt
YXRpb25Qcm9wZXJ0aWVzKQorLy8gVGVzdHMgdGhhdCB0cmFuc2l0aW9uaW5nIG9wYWNpdHkgZnJv
bSAwIHRvIDEgd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyVGVzdCwgVHJpdmlhbFRyYW5zaXRpb24pCiB7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbD4gY29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
PiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSk7CisgICAg
T3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNs
aWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRy
b2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15
KSk7CiAKLSAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlv
bigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
IAotICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9Db250cm9sbGVyKCpjb250cm9sbGVyLCAxLCAw
LCAxKTsKKyAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5hbmltYXRl
ZE9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCBldmVudHMuZ2V0KCkpOwor
ICAgIEVYUEVDVF9FUSgxLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZB
TFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KIAotICAgIGNvbnRyb2xs
ZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbC5nZXQoKSk7CisvLyBUZXN0
cyB0aGF0IHR3byBxdWV1ZWQgYW5pbWF0aW9ucyBhZmZlY3RpbmcgdGhlIHNhbWUgcHJvcGVydHkg
cnVuIGluIHNlcXVlbmNlLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFRy
aXZpYWxRdWV1aW5nKQoreworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZl
bnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlcklt
cGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwot
ICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eSwgY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkp
LCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChj
cmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwg
MSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgLy8gUHVz
aCBhbiBhbmltYXRpb24gcHJvcGVydHkgY2hhbmdlIHRvIHRoZSBpbXBsIHRocmVhZCAoc2hvdWxk
IG5vdCBjYXVzZSBhbiBhbmltYXRpb24gdG8gYmUgYWRkZWQpLgotICAgIGNvbnRyb2xsZXItPnBh
dXNlQW5pbWF0aW9uKDAsIDApOwotICAgIGNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9u
cyhjb250cm9sbGVySW1wbC5nZXQoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVu
dHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15LmFu
aW1hdGVkT3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsIGV2ZW50cy5nZXQo
KSk7CisgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBF
WFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworfQogCi0gICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6
UGF1c2VkLCBjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CisvLyBUZXN0cyBpbnRlcnJ1cHRpbmcgYSB0
cmFuc2l0aW9uIHdpdGggYW5vdGhlciB0cmFuc2l0aW9uLgorVEVTVChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlclRlc3QsIEludGVycnVwdCkKK3sKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVu
dHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsK
KyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKKyAgICBjb250cm9sbGVyLT5h
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5hbmltYXRl
ZE9wYWNpdHkoKSk7CisKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0
ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAw
LjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2ssIDApOworICAgIGNv
bnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwLjUsIGV2ZW50cy5nZXQoKSk7IC8vIHNlY29uZCBhbmltIHN0YXJ0cyBOT1cuCisgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9F
USgxLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgx
LjUsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15LmFuaW1hdGVkT3Bh
Y2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwogfQogCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgc3luY0Fib3J0
ZWRBbmltYXRpb24pCisvLyBUZXN0cyBzY2hlZHVsaW5nIHR3byBhbmltYXRpb25zIHRvIHJ1biB0
b2dldGhlciB3aGVuIG9ubHkgb25lIHByb3BlcnR5IGlzIGZyZWUuCitURVNUKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyVGVzdCwgU2NoZWR1bGVUb2dldGhlcldoZW5BUHJvcGVydHlJc0Jsb2Nr
ZWQpCiB7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7
Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcklt
cGwoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAg
T3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSk7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRz
VmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7Cisg
ICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBFWFBFQ1RfRkFMU0Uo
Y29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRp
b246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMiwgQ0NBY3RpdmVB
bmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVB
bmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAyLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgYWRkT3BhY2l0eVRyYW5zaXRpb25U
b0NvbnRyb2xsZXIoKmNvbnRyb2xsZXIsIDEsIDAsIDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMCwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkuYW5pbWF0ZWRPcGFj
aXR5KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsIGV2ZW50cy5nZXQoKSk7CisgICAgLy8gU2hv
dWxkIG5vdCBoYXZlIHN0YXJ0ZWQgdGhlIGZsb2F0IHRyYW5zaXRpb24geWV0LgorICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEo
MCwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIC8vIFRoZSB0aGUgZmxvYXQgYW5pbWF0
aW9uIHNob3VsZCBoYXZlIHN0YXJ0ZWQgYXQgdGltZSAxIGFuZCBzaG91bGQgYmUgZG9uZS4KKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDIsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDEs
IGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworfQogCi0gICAgY29udHJvbGxlci0+c3luY2hyb25pemVB
bmltYXRpb25zKGNvbnRyb2xsZXJJbXBsLmdldCgpKTsKKy8vIFRlc3RzIHNjaGVkdWxpbmcgdHdv
IGFuaW1hdGlvbnMgdG8gcnVuIHRvZ2V0aGVyIHdpdGggZGlmZmVyZW50IGxlbmd0aHMgYW5kIGFu
b3RoZXIKKy8vIGFuaW1hdGlvbiBxdWV1ZWQgdG8gc3RhcnQgd2hlbiB0aGUgc2hvcnRlciBhbmlt
YXRpb24gZmluaXNoZXMgKHNob3VsZCB3YWl0CisvLyBmb3IgYm90aCB0byBmaW5pc2gpLgorVEVT
VChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFNjaGVkdWxlVG9nZXRoZXJXaXRoQW5B
bmltV2FpdGluZykKK3sKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50
cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXJJbXBs
LT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAg
ICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxp
dHksIGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigyKSksIDEs
IENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAs
IDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5h
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIC8v
IEFuaW1zIHdpdGggaWQgMSBzaG91bGQgYm90aCBzdGFydCBub3cuCisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkuYW5pbWF0ZWRPcGFj
aXR5KCkpOworICAgIC8vIFRoZSBvcGFjaXR5IGFuaW1hdGlvbiBzaG91bGQgaGF2ZSBmaW5pc2hl
ZCBhdCB0aW1lIDEsIGJ1dCB0aGUgZ3JvdXAKKyAgICAvLyBvZiBhbmltYXRpb25zIHdpdGggaWQg
MSBkb24ndCBmaW5pc2ggdW50aWwgdGltZSAyIGJlY2F1c2Ugb2YgdGhlIGxlbmd0aAorICAgIC8v
IG9mIHRoZSB0cmFuc2Zvcm0gYW5pbWF0aW9uLgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwg
ZXZlbnRzLmdldCgpKTsKKyAgICAvLyBTaG91bGQgbm90IGhhdmUgc3RhcnRlZCB0aGUgZmxvYXQg
dHJhbnNpdGlvbiB5ZXQuCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgxLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CiAK
LSAgICBjb250cm9sbGVyLT5yZW1vdmVBbmltYXRpb24oMCk7CisgICAgLy8gVGhlIHRoZSBzZWNv
bmQgb3BhY2l0eSBhbmltYXRpb24gc2hvdWxkIHN0YXJ0IGF0IHRpbWUgMiBhbmQgc2hvdWxkIGJl
CisgICAgLy8gZG9uZSBieSB0aW1lIDMKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMsIGV2ZW50
cy5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworfQog
Ci0gICAgLy8gQWJvcnQgYW4gYW5pbWF0aW9uIGZyb20gdGhlIG1haW4gdGhyZWFkLgotICAgIGNv
bnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbC5nZXQoKSk7Cisv
LyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlLgor
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFNjaGVkdWxlQW5pbWF0aW9uKQor
eworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5l
dyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
PiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRl
KCZkdW1teSkpOwogCi0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVB
bmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NB
Y3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CisgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5n
Rm9yU3RhcnRUaW1lLCAwKTsKKyAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOworICAgIGNvbnRy
b2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1
bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsIGV2ZW50
cy5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQogCi1U
RVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgc3luY0NvbXBsZXRlZEFuaW1hdGlv
bikKKy8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1
cmUgdGhhdCdzIGludGVycnVwdGluZyBhIHJ1bm5pbmcgYW5pbWF0aW9uLgorVEVTVChDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNSdW5u
aW5nQW5pbWF0aW9uKQogewotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xp
ZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNv
bnRyb2xsZXJJbXBsKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1t
eSkpOwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOworICAgIE93blB0cjxDQ0FuaW1h
dGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1Zl
Y3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7Cisg
ICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAg
ICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgRVhQ
RUNUX0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9D
b250cm9sbGVyKCpjb250cm9sbGVyLCAxLCAwLCAxKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigxLCAwLjVmLCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CisgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3Rh
cnRUaW1lLCAwKTsKKyAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOworICAgIGNvbnRyb2xsZXIt
PmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0gICAgY29udHJvbGxlci0+c3luY2hyb25pemVBbmlt
YXRpb25zKGNvbnRyb2xsZXJJbXBsLmdldCgpKTsKKyAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRy
YW5zaXRpb24gc2hvdWxkIHN0YXJ0IGltbWVkaWF0ZWx5LgorICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMCwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgp
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VR
KDAuMjVmLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5
KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBF
Q1RfRVEoMCwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cit9CiAKLSAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7Ci0gICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0
QXZhaWxhYmlsaXR5LCBjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CisvLyBUZXN0cyBzY2hlZHVsaW5n
IGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlIHRoYXQgaW50ZXJydXB0cyBhIHJ1
bm5pbmcgYW5pbWF0aW9uCisvLyBhbmQgdGhlcmUgaXMgeWV0IGFub3RoZXIgYW5pbWF0aW9uIHF1
ZXVlZCB0byBzdGFydCBsYXRlci4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0
LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvbldpdGhBbmltSW5R
dWV1ZSkKK3sKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9w
dFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6
OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIC8vIFN0ZXAgdGhyb3VnaCB0aGUgYW5pbWF0aW9uIHVu
dGlsIGl0IGlzIGZpbmlzaGVkLiBBdCB0aGUgbmV4dCBzeW5jLCB0aGUgbWFpbiB0aHJlYWQncyBh
bmltYXRpb24gc2hvdWxkIGJlIGNsZWFyZWQuCisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFj
dGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSks
IDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigyLCAwLjVmLCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CisgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9y
U3RhcnRUaW1lLCAwKTsKKyAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOworICAgIGNvbnRyb2xs
ZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworCisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFj
dGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAwLjc1
ZikpLCAzLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgLy8gRmlyc3QgMnMg
b3BhY2l0eSB0cmFuc2l0aW9uIHNob3VsZCBzdGFydCBpbW1lZGlhdGVseS4KKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5hbmltYXRl
ZE9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsIGV2ZW50cy5nZXQoKSk7
CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAg
IEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBjb250cm9sbGVyLT5h
bmltYXRlKDEsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5hbmltYXRlZE9w
YWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgzLCBldmVudHMuZ2V0KCkpOworICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBF
Q1RfRVEoMCwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoNCwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15LmFuaW1hdGVk
T3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOworfQorCisvLyBUZXN0IHRoYXQgYSBsb29waW5nIGFuaW1hdGlvbiBsb29wcyBhbmQg
Zm9yIHRoZSBjb3JyZWN0IG51bWJlciBvZiBpdGVyYXRpb25zLgorVEVTVChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlclRlc3QsIFRyaXZpYWxMb29waW5nKQorewogICAgIE93blB0cjxDQ0FuaW1h
dGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1Zl
Y3RvcikpOwotICAgIGNvbnRyb2xsZXJJbXBsLT5hbmltYXRlKDAsICpldmVudHMpOwotICAgIGNv
bnRyb2xsZXJJbXBsLT5hbmltYXRlKDIsICpldmVudHMpOworICAgIEZha2VMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5nZXRB
Y3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25Q
dHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoMyk7CisgICAgY29udHJvbGxl
ci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2
ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgxLjI1LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNWYs
IGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUs
IGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi4yNSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VR
KDAuMjVmLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgyLjc1LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15LmFuaW1hdGVkT3Bh
Y2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMsIGV2ZW50cy5nZXQoKSk7CisgICAg
RVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBF
Q1RfRVEoMSwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworCisgICAgLy8gSnVzdCBiZSBleHRy
YSBzdXJlLgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoNCwgZXZlbnRzLmdldCgpKTsKKyAgICBF
WFBFQ1RfRVEoMSwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworfQorCisvLyBUZXN0IHRoYXQg
YW4gaW5maW5pdGVseSBsb29waW5nIGFuaW1hdGlvbiBkb2VzIGluZGVlZCBnbyB1bnRpbCBhYm9y
dGVkLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIEluZmluaXRlTG9vcGlu
ZykKK3sKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0
cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNy
ZWF0ZSgmZHVtbXkpKTsKKworICAgIGNvbnN0IGludCBpZCA9IDE7CisgICAgT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICB0b0FkZC0+c2V0SXRlcmF0aW9ucygtMSk7CisgICAgY29udHJvbGxlci0+YWRk
KHRvQWRkLnJlbGVhc2UoKSk7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5n
ZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgxLjI1LCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15
LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUsIGV2ZW50
cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworCisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0LjI1LCBldmVudHMuZ2V0KCkpOworICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBF
Q1RfRVEoMC4yNWYsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5h
bmltYXRlKDEwNzM3NDE4MjQuNzUsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVt
bXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0
QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNv
bnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMC43NWYpOworICAg
IEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQ
RUNUX0VRKDAuNzVmLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7Cit9CisKKy8vIFRlc3QgdGhh
dCBwYXVzaW5nIGFuZCByZXN1bWluZyB3b3JrIGFzIGV4cGVjdGVkLgorVEVTVChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlclRlc3QsIFBhdXNlUmVzdW1lKQoreworICAgIE93blB0cjxDQ0FuaW1h
dGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1Zl
Y3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7Cisg
ICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAg
ICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOworCisgICAgY29u
c3QgaW50IGlkID0gMTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50
cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgwLjUsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1t
eS5hbmltYXRlZE9wYWNpdHkoKSk7CiAKLSAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1h
dGlvbnMoY29udHJvbGxlckltcGwuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
PmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAg
ICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgMC41Zik7CiAK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNU
X1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgw
LjVmLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CisgICAgY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSktPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCAxMDI0
KTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNC4yNSwgZXZlbnRzLmdldCgpKTsKKyAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQ
RUNUX0VRKDAuNzVmLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgxMDI0LjUsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkuYW5pbWF0
ZWRPcGFjaXR5KCkpOworfQorCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwg
QWJvcnRBR3JvdXBlZEFuaW1hdGlvbikKK3sKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNW
ZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAg
ICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIGNvbnN0IGludCBpZCA9
IDE7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihu
ZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246OlRy
YW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0
aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNzVmKSksIDIsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAs
IGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC41Ziwg
ZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAg
IGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMSk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgxLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXku
YW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgZXZlbnRzLmdl
dCgpKTsKKyAgICBFWFBFQ1RfVFJVRSghY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggNzAyYmJmMTYzOWI0M2IxNmFlZjNhYmI2NjA2Mjkw
NDk4YzBkNjYxNS4uM2ZkYTJjOWVlN2FjYWYwYmVlMzY3ZGViNWU2YjFkOTNhOGQxY2I1NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwCkBAIC03Myw3ICs3Myw2IEBAIHB1YmxpYzoKIAogICAgIC8vIEltcGxlbWVudGF0aW9u
IG9mIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZQogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmlt
YXRpb25TdGFydGVkKGRvdWJsZSB0aW1lKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5p
bWF0aW9uRmluaXNoZWQoaW50IGFuaW1hdGlvbklkKSB7IH0KIH07CiAKIC8vIEFkYXB0cyBDQ0xh
eWVyVHJlZUhvc3RJbXBsIGZvciB0ZXN0LiBSdW5zIHJlYWwgY29kZSwgdGhlbiBpbnZva2VzIHRl
c3QgaG9va3MuCkBAIC04OTIsNyArODkxLDYgQEAgcHVibGljOgogICAgIENDTGF5ZXJUcmVlSG9z
dFRlc3RBZGRBbmltYXRpb24oKQogICAgICAgICA6IG1fbnVtQW5pbWF0ZXMoMCkKICAgICAgICAg
LCBtX3JlY2VpdmVkQW5pbWF0aW9uU3RhcnRlZE5vdGlmaWNhdGlvbihmYWxzZSkKLSAgICAgICAg
LCBtX3JlY2VpdmVkQW5pbWF0aW9uRmluaXNoZWROb3RpZmljYXRpb24oZmFsc2UpCiAgICAgICAg
ICwgbV9zdGFydFRpbWUoMCkKICAgICAgICAgLCBtX2ZpcnN0TW9ub3RvbmljVGltZSgwKQogICAg
IHsKQEAgLTkxNyw3ICs5MTUsNiBAQCBwdWJsaWM6CiAgICAgICAgIEVYUEVDVF9MVCgwLCBtX2Zp
cnN0TW9ub3RvbmljVGltZSk7CiAgICAgICAgIEVYUEVDVF9ORShtX3N0YXJ0VGltZSwgbV9maXJz
dE1vbm90b25pY1RpbWUpOwogICAgICAgICBFWFBFQ1RfVFJVRShtX3JlY2VpdmVkQW5pbWF0aW9u
U3RhcnRlZE5vdGlmaWNhdGlvbik7Ci0gICAgICAgIEVYUEVDVF9UUlVFKG1fcmVjZWl2ZWRBbmlt
YXRpb25GaW5pc2hlZE5vdGlmaWNhdGlvbik7CiAgICAgICAgIGVuZFRlc3QoKTsKICAgICB9CiAK
QEAgLTkyNywxMSArOTI0LDYgQEAgcHVibGljOgogICAgICAgICBtX3N0YXJ0VGltZSA9IHdhbGxD
bG9ja1RpbWU7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvbkZpbmlz
aGVkKGludCkKLSAgICB7Ci0gICAgICAgIG1fcmVjZWl2ZWRBbmltYXRpb25GaW5pc2hlZE5vdGlm
aWNhdGlvbiA9IHRydWU7Ci0gICAgfQotCiAgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCiAg
ICAgewogICAgIH0KQEAgLTkzOSw3ICs5MzEsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGlu
dCBtX251bUFuaW1hdGVzOwogICAgIGJvb2wgbV9yZWNlaXZlZEFuaW1hdGlvblN0YXJ0ZWROb3Rp
ZmljYXRpb247Ci0gICAgYm9vbCBtX3JlY2VpdmVkQW5pbWF0aW9uRmluaXNoZWROb3RpZmljYXRp
b247CiAgICAgZG91YmxlIG1fc3RhcnRUaW1lOwogICAgIGRvdWJsZSBtX2ZpcnN0TW9ub3Rvbmlj
VGltZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVT
eW5jaHJvbml6ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5
bmNocm9uaXplclRlc3QuY3BwCmluZGV4IDA2Y2M1ZWU1YzU0NDEyMzUxMDM5ZDliZmFjNzNlMzYx
YWE3MGQ5MDEuLjViMzc2Y2E5ZmUyMjExZGZhMDBhOWNmOTExZWYwZTYxZjg5MDgyNDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRl
c3QuY3BwCkBAIC05NiwyMiArOTYsMjMgQEAgcHJpdmF0ZToKIAogY2xhc3MgRmFrZUxheWVyQW5p
bWF0aW9uQ29udHJvbGxlciA6IHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxl
cj4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxGYWtlTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyPiBjcmVhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQqIGNsaWVudCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmFrZUxheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcik7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmFrZUxheWVyQW5pbWF0aW9u
Q29udHJvbGxlcihjbGllbnQpKTsKICAgICB9CiAKICAgICBib29sIHN5bmNocm9uaXplZEFuaW1h
dGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3N5bmNocm9uaXplZEFuaW1hdGlvbnM7IH0KIAogcHJp
dmF0ZToKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkKLSAgICAgICAgOiBtX3N5
bmNocm9uaXplZEFuaW1hdGlvbnMoZmFsc2UpCisgICAgZXhwbGljaXQgRmFrZUxheWVyQW5pbWF0
aW9uQ29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCogY2xpZW50KQor
ICAgICAgICA6IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKGNsaWVudCkKKyAgICAgICAgLCBt
X3N5bmNocm9uaXplZEFuaW1hdGlvbnMoZmFsc2UpCiAgICAgewogICAgIH0KIAotICAgIHZpcnR1
YWwgdm9pZCBzeW5jaHJvbml6ZUFuaW1hdGlvbnMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsKiBjb250cm9sbGVySW1wbCkKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaEFuaW1hdGlvblVwZGF0
ZXNUbyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciogY29udHJvbGxlckltcGwpCiAgICAgewot
ICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3luY2hyb25pemVBbmltYXRpb25z
KGNvbnRyb2xsZXJJbXBsKTsKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1
c2hBbmltYXRpb25VcGRhdGVzVG8oY29udHJvbGxlckltcGwpOwogICAgICAgICBtX3N5bmNocm9u
aXplZEFuaW1hdGlvbnMgPSB0cnVlOwogICAgIH0KIApAQCAtMzUwLDcgKzM1MSw4IEBAIFRFU1Qo
VHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNocm9uaXplQW5pbWF0aW9ucykKICAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJU
cmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogCi0gICAgbGF5ZXJUcmVlUm9vdC0+
c2V0TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6
OmNyZWF0ZSgpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15
OworICAgIGxheWVyVHJlZVJvb3QtPnNldExheWVyQW5pbWF0aW9uQ29udHJvbGxlcihGYWtlTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKICAgICBFWFBFQ1RfRkFM
U0Uoc3RhdGljX2Nhc3Q8RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcio+KGxheWVyVHJlZVJv
b3QtPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpKS0+c3luY2hyb25pemVkQW5pbWF0aW9ucygp
KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132495</attachid>
            <date>2012-03-18 11:14:05 -0700</date>
            <delta_ts>2012-03-18 18:35:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81106-20120318141404.patch</filename>
            <type>text/plain</type>
            <size>132786</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODM2ZGVhZGMwNzYxNWYy
N2NjMTU1NjI5MDgyMDAyNzQxODQzNWE1YS4uOThlNzJiNDkxNTIyODA0MzVhYzE3YzY3ODUzOWE1
YjQ0MDUzOTFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMyBAQAorMjAxMi0wMy0xNyAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIElu
ZnJhc3RydWN0dXJlIHRvIGFsbG93IGFuaW1hdGluZyBsYXllcnMgdG8gYmUgb25seSBwYXJ0aWFs
bHkgdXBkYXRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODExMDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUZXN0cyBmb3IgdGhlIG1haW4gYW5kIGltcGwgdGhyZWFkIGNvbnRyb2xsZXJzIGhhdmUgYmVl
biBjb21iaW5lZCBpbiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QKKworICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoR3JhcGhpY3NMYXllckNocm9t
aXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldEFuaW1h
dGVkT3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRBbmltYXRl
ZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjphZGRBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Omhhc0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRBbmltYXRpb25FdmVudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFuaW1hdGVk
T3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjphbmltYXRlZFRyYW5z
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpib3VuZHMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmg6Cisg
ICAgICAgIChDQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NB
bmltYXRpb25FdmVudDo6Q0NBbmltYXRpb25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Fu
aW1hdGlvbkV2ZW50Ojp0b0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0FuaW1hdGlvbkV2ZW50Ojp0b1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBbmltYXRpb25TdGFydGVkRXZlbnQ6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5pbWF0aW9uU3RhcnRl
ZEV2ZW50OjpDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zs
b2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
RmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50OjpDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudDo6fkND
RmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRmxvYXRB
bmltYXRpb25GaW5pc2hlZEV2ZW50Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNm
b3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Q0NUcmFuc2Zvcm1BbmltYXRpb25GaW5p
c2hlZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNo
ZWRFdmVudDo6fkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OnR5cGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5pbWF0aW9uRXZlbnQ6OnRh
cmdldFByb3BlcnR5KToKKyAgICAgICAgKENDQW5pbWF0aW9uRXZlbnQpOgorICAgICAgICAoQ0NB
bmltYXRpb25TdGFydGVkRXZlbnQpOgorICAgICAgICAoQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVk
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6
OmZpbmFsVmFsdWUpOgorICAgICAgICAoQ0NUcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6
ZmluYWxWYWx1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hBbmltYXRpb25VcGRhdGVz
VG8pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1h
dGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpnZXRBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6Omhhc0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNBbmltYXRpbmdQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0FuaW1h
dGlvbnNUb0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN0YXJ0QW5pbWF0aW9uc1dh
aXRpbmdGb3JOZXh0VGljayk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3RhcnRBbmltYXRpb25zV2FpdGlu
Z0ZvclRhcmdldEF2YWlsYWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6cmVzb2x2ZUNvbmZsaWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnRpY2tBbmltYXRpb25zKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckNsaWVudDo6fkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KToKKyAg
ICAgICAgKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZS5oOgorICAgICAgICAo
Q0NMYXllckFuaW1hdGlvbkRlbGVnYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNldEFuaW1h
dGVkT3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJbXBsOjpzZXRBbmltYXRlZFRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySW1wbDo6YW5pbWF0ZWRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjphbmltYXRlZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6b3Bh
Y2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpsYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGxUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpkaWRCZWNvbWVJbnZpc2libGVP
bkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjphbmltYXRl
TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0OjphbmltYXRlTGF5ZXJzUmVjdXJzaXZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVyc1JlY3Vy
c2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5
ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnNjaGVkdWxlZEFjdGlvbkJlZ2luRnJhbWUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OkJlZ2luRnJhbWVBbmRDb21taXRTdGF0ZTo6
QmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlKToKKwogMjAxMi0wMy0xNyAgTmlrb2xhcyBaaW1tZXJt
YW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBFbmFibGUgYW5pbVZhbCBzdXBw
b3J0IGZvciBTVkdOdW1iZXJPcHRpb25hbE51bWJlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCAzNTc5MWIyZjg4MDdhYTVkZDk1MGMwMWM1NGU4NjhmY2Q0YWE2MWY1Li5mYjllYzYyYThh
N2NkYTc2ZjQ2M2EwODE1ODYxYmE0YjEwODMzNDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTAzLTE3ICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW5mcmFzdHJ1Y3R1cmUgdG8gYWxsb3cg
YW5pbWF0aW5nIGxheWVycyB0byBiZSBvbmx5IHBhcnRpYWxseSB1cGRhdGVkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTEwNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAg
ICAgICogdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYktpdFRl
c3RzOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50OjpGYWtlTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyQ2xpZW50Ojp+RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVu
dCk6CisgICAgICAgICogdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmg6CisgICAgICAgIChG
YWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdFRlc3Rz
OjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50OjpzZXRBbmltYXRlZE9wYWNpdHkp
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGll
bnQ6OmFuaW1hdGVkT3BhY2l0eSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyQW5p
bWF0aW9uQ29udHJvbGxlckNsaWVudDo6c2V0QW5pbWF0ZWRUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQ6OmFuaW1hdGVk
VHJhbnNmb3JtKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlclRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAo
V2ViS2l0VGVzdHMpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0QWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dEFkZEFuaW1hdGlvbjo6YW5pbWF0ZUxheWVycyk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RU
ZXN0QWRkQW5pbWF0aW9uKToKKyAgICAgICAgKiB0ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5j
cHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdFRlc3Rz
OjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uVXBkYXRlc1RvKToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNUKToKKwogMjAxMi0wMy0xNiAgSmFtZXMgUm9iaW5z
b24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gVW5pZnkgdGhl
IGRyYXdpbmcgbG9naWMgZm9yIGRpZmZlcmVudCBsYXllciB0eXBlcyB0aGF0IG91dHB1dCB0ZXh0
dXJlcyB0byB0aGUgY29tcG9zaXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGE1ZTg0NTg4OWE5ZmIw
MjU2NDVjZThiODY1ZTkzNTdjNjVlOWZjYTAuLjA0YzRiYTYyYzk3Y2U4ZGNhYmRjMzg4NmU4ODA3
ZTE5NTEyN2YwYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM0ODIsOCArMzQ4Miw2IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRp
b25DdXJ2ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAnLAotICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbC5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDRjODE4NTNi
ODIwMTE2NTgxMmI0YTNkMzUxOTEzMTRiNjA0Zjk3ZWIuLmRiMGJhMWMyYzlkMjI0OTJjYzUyOWJm
YzEyYTUyZGU5MzYwZmY0YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNw
cApAQCAtNzQ5LDE2ICs3NDksNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bm90aWZ5
QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKQogICAgICAgICBtX2NsaWVudC0+bm90
aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aGlzLCBzdGFydFRpbWUpOwogfQogCi12b2lkIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6bm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoaW50IGFuaW1hdGlvbklkKQot
ewotICAgIGZvciAoQW5pbWF0aW9uSWRNYXA6Oml0ZXJhdG9yIGlkSXRlciA9IG1fYW5pbWF0aW9u
SWRNYXAuYmVnaW4oKTsgaWRJdGVyICE9IG1fYW5pbWF0aW9uSWRNYXAuZW5kKCk7ICsraWRJdGVy
KSB7Ci0gICAgICAgIGlmIChpZEl0ZXItPnNlY29uZCA9PSBhbmltYXRpb25JZCkgewotICAgICAg
ICAgICAgbV9hbmltYXRpb25JZE1hcC5yZW1vdmUoaWRJdGVyKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVy
Q2hyb21pdW0uaAppbmRleCA0Y2NhODJhODg3YmUyODU5OWFmMTQ3NDE3ZWNhYmM3ODcxOTQ5Zjlj
Li45MWE0NTVhNTQxZTY2ZjlkODc2YmU2YWNlNjExZmM4YTBmYWM0N2E1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtMTE2LDcgKzExNiw2IEBAIHB1YmxpYzoKIAogICAg
IC8vIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKTsKLSAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoaW50IGFuaW1hdGlvbklkKTsKIAogICAg
IC8vIEV4cG9zZWQgZm9yIHRlc3RzLgogICAgIExheWVyQ2hyb21pdW0qIGNvbnRlbnRzTGF5ZXIo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5ZXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHAKaW5kZXggZDRjYWQyNGE2MTNiNmE3OTU0OTM5ZDE0NTU5YjdlZmZiMWZjNjA4OS4uYTcz
NjEzMzhiNTJmYTM2NDA0NmZkNWIwNTliZGJhYTBjZDYwODExYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSgpCiAg
ICAgOiBtX25lZWRzRGlzcGxheShmYWxzZSkKICAgICAsIG1fbGF5ZXJJZChzX25leHRMYXllcklk
KyspCiAgICAgLCBtX3BhcmVudCgwKQotICAgICwgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpKQorICAgICwgbV9sYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSh0aGlzKSkK
ICAgICAsIG1fc2Nyb2xsYWJsZShmYWxzZSkKICAgICAsIG1fc2hvdWxkU2Nyb2xsT25NYWluVGhy
ZWFkKGZhbHNlKQogICAgICwgbV9oYXZlV2hlZWxFdmVudEhhbmRsZXJzKGZhbHNlKQpAQCAtOTcs
NzAgKzk3LDYgQEAgTGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogICAgIHJlbW92ZUFs
bENoaWxkcmVuKCk7CiB9CiAKLWJvb2wgTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKGNvbnN0
IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0
IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBkb3Vi
bGUgdGltZU9mZnNldCkKLXsKLSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCB8fCAhbV9sYXllclRy
ZWVIb3N0LT5zZXR0aW5ncygpLnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYm9vbCBhZGRlZEFuaW1hdGlvbiA9IG1fbGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24sIGFuaW1h
dGlvbklkLCBncm91cElkLCB0aW1lT2Zmc2V0KTsKLSAgICBpZiAoYWRkZWRBbmltYXRpb24pCi0g
ICAgICAgIHNldE5lZWRzQ29tbWl0KCk7Ci0gICAgcmV0dXJuIGFkZGVkQW5pbWF0aW9uOwotfQot
Ci12b2lkIExheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgZG91
YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPnBhdXNl
QW5pbWF0aW9uKGFuaW1hdGlvbklkLCB0aW1lT2Zmc2V0KTsKLSAgICBzZXROZWVkc0NvbW1pdCgp
OwotfQotCi12b2lkIExheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9u
SWQpCi17Ci0gICAgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPnJlbW92ZUFuaW1hdGlvbihh
bmltYXRpb25JZCk7Ci0gICAgc2V0TmVlZHNDb21taXQoKTsKLX0KLQotdm9pZCBMYXllckNocm9t
aXVtOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKLXsKLSAgICBtX2xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci0+c3VzcGVuZEFuaW1hdGlvbnModGltZSk7Ci0gICAgc2V0TmVlZHNDb21t
aXQoKTsKLX0KLQotdm9pZCBMYXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKCkKLXsKLSAg
ICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOwotICAgIHNl
dE5lZWRzQ29tbWl0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGxheWVy
QW5pbWF0aW9uQ29udHJvbGxlcikKLXsKLSAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlciA9
IGxheWVyQW5pbWF0aW9uQ29udHJvbGxlcjsKLSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi1i
b29sIExheWVyQ2hyb21pdW06Omhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKTsKLX0K
LQotdm9pZCBMYXllckNocm9taXVtOjpzZXRBbmltYXRpb25FdmVudChjb25zdCBDQ0FuaW1hdGlv
bkV2ZW50JiBldmVudCwgZG91YmxlIHdhbGxDbG9ja1RpbWUpCi17Ci0gICAgc3dpdGNoIChldmVu
dC50eXBlKCkpIHsKLQotICAgIGNhc2UgQ0NBbmltYXRpb25FdmVudDo6U3RhcnRlZDogewotICAg
ICAgICBtX2xheWVyQW5pbWF0aW9uRGVsZWdhdGUtPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQod2Fs
bENsb2NrVGltZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQ0NBbmltYXRp
b25FdmVudDo6RmluaXNoZWQ6IHsKLSAgICAgICAgY29uc3QgQ0NBbmltYXRpb25GaW5pc2hlZEV2
ZW50KiBmaW5pc2hlZEV2ZW50ID0gZXZlbnQudG9BbmltYXRpb25GaW5pc2hlZEV2ZW50KCk7Ci0g
ICAgICAgIG1fbGF5ZXJBbmltYXRpb25EZWxlZ2F0ZS0+bm90aWZ5QW5pbWF0aW9uRmluaXNoZWQo
ZmluaXNoZWRFdmVudC0+YW5pbWF0aW9uSWQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIH0KLX0KLQogdm9pZCBMYXllckNocm9taXVtOjpzZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50
KGJvb2wgaXNOb25Db21wb3NpdGVkQ29udGVudCkKIHsKICAgICBtX2lzTm9uQ29tcG9zaXRlZENv
bnRlbnQgPSBpc05vbkNvbXBvc2l0ZWRDb250ZW50OwpAQCAtNTM0LDEyICs0NzAsMTQgQEAgdm9p
ZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAg
ICAgICAgbV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkNoYW5nZWQgPSBmYWxzZTsKICAgICB9CiAg
ICAgbGF5ZXItPnNldE9wYXF1ZShtX29wYXF1ZSk7Ci0gICAgbGF5ZXItPnNldE9wYWNpdHkobV9v
cGFjaXR5KTsKKyAgICBpZiAoIW9wYWNpdHlJc0FuaW1hdGluZygpKQorICAgICAgICBsYXllci0+
c2V0T3BhY2l0eShtX29wYWNpdHkpOwogICAgIGxheWVyLT5zZXRQb3NpdGlvbihtX3Bvc2l0aW9u
KTsKICAgICBsYXllci0+c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAgbGF5ZXIt
PnNldFNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRTdWJs
YXllclRyYW5zZm9ybShtX3N1YmxheWVyVHJhbnNmb3JtKTsKLSAgICBsYXllci0+c2V0VHJhbnNm
b3JtKG1fdHJhbnNmb3JtKTsKKyAgICBpZiAoIXRyYW5zZm9ybUlzQW5pbWF0aW5nKCkpCisgICAg
ICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obV90cmFuc2Zvcm0pOwogICAgIGxheWVyLT5zZXRVcGRh
dGVSZWN0KG1fdXBkYXRlUmVjdCk7CiAKICAgICBsYXllci0+c2V0U2Nyb2xsRGVsdGEobGF5ZXIt
PnNjcm9sbERlbHRhKCkgLSBsYXllci0+c2VudFNjcm9sbERlbHRhKCkpOwpAQCAtNTUwLDcgKzQ4
OCw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCog
bGF5ZXIpCiAgICAgaWYgKHJlcGxpY2FMYXllcigpKQogICAgICAgICByZXBsaWNhTGF5ZXIoKS0+
cHVzaFByb3BlcnRpZXNUbyhsYXllci0+cmVwbGljYUxheWVyKCkpOwogCi0gICAgbV9sYXllckFu
aW1hdGlvbkNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhsYXllci0+bGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyKCkpOworICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5wdXNo
QW5pbWF0aW9uVXBkYXRlc1RvKGxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7CiAK
ICAgICAvLyBSZXNldCBhbnkgc3RhdGUgdGhhdCBzaG91bGQgYmUgY2xlYXJlZCBmb3IgdGhlIG5l
eHQgdXBkYXRlLgogICAgIG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdCgpOwpAQCAtNjA0LDYgKzU0
Miw4OSBAQCBib29sIExheWVyQ2hyb21pdW06OmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAorCit2b2lkIExheWVyQ2hyb21pdW06OnNldEFuaW1hdGVkT3Bh
Y2l0eShmbG9hdCBhbmltYXRlZE9wYWNpdHkpCit7CisgICAgbV9vcGFjaXR5ID0gYW5pbWF0ZWRP
cGFjaXR5OworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnNldEFuaW1hdGVkVHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBhbmltYXRlZFRyYW5zZm9ybSkKK3sKKyAgICBtX3Ry
YW5zZm9ybSA9IGFuaW1hdGVkVHJhbnNmb3JtOworfQorCitib29sIExheWVyQ2hyb21pdW06OmFk
ZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXpl
JiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgaW50IGFuaW1hdGlvbklkLCBp
bnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgaWYgKCFtX2xheWVyVHJlZUhv
c3QgfHwgIW1fbGF5ZXJUcmVlSG9zdC0+c2V0dGluZ3MoKS50aHJlYWRlZEFuaW1hdGlvbkVuYWJs
ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgYWRkZWRBbmltYXRpb24gPSBt
X2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwg
YW5pbWF0aW9uLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGltZU9mZnNldCk7CisgICAgaWYgKGFk
ZGVkQW5pbWF0aW9uKQorICAgICAgICBzZXROZWVkc0NvbW1pdCgpOworICAgIHJldHVybiBhZGRl
ZEFuaW1hdGlvbjsKK30KKwordm9pZCBMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihpbnQg
YW5pbWF0aW9uSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAgIG1fbGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLT5wYXVzZUFuaW1hdGlvbihhbmltYXRpb25JZCwgdGltZU9mZnNldCk7CisgICAg
c2V0TmVlZHNDb21taXQoKTsKK30KKwordm9pZCBMYXllckNocm9taXVtOjpyZW1vdmVBbmltYXRp
b24oaW50IGFuaW1hdGlvbklkKQoreworICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5y
ZW1vdmVBbmltYXRpb24oYW5pbWF0aW9uSWQpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisK
K3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpCit7Cisg
ICAgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPnN1c3BlbmRBbmltYXRpb25zKHRpbWUpOwor
ICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5p
bWF0aW9ucygpCit7CisgICAgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPnJlc3VtZUFuaW1h
dGlvbnMoKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06
OnNldExheWVyQW5pbWF0aW9uQ29udHJvbGxlcihQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyPiBsYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpCit7CisgICAgbV9sYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIgPSBsYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CisgICAgc2V0TmVlZHND
b21taXQoKTsKK30KKworYm9vbCBMYXllckNocm9taXVtOjpoYXNBY3RpdmVBbmltYXRpb24oKSBj
b25zdAoreworICAgIHJldHVybiBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0QW5pbWF0aW9uRXZlbnQo
Y29uc3QgQ0NBbmltYXRpb25FdmVudCYgZXZlbnQsIGRvdWJsZSB3YWxsQ2xvY2tUaW1lKQorewor
ICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7CisKKyAgICBjYXNlIENDQW5pbWF0aW9uRXZlbnQ6
OlN0YXJ0ZWQ6IHsKKyAgICAgICAgbV9sYXllckFuaW1hdGlvbkRlbGVnYXRlLT5ub3RpZnlBbmlt
YXRpb25TdGFydGVkKHdhbGxDbG9ja1RpbWUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIENDQW5pbWF0aW9uRXZlbnQ6OkZpbmlzaGVkRmxvYXRBbmltYXRpb246IHsKKyAgICAg
ICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQqIGZpbmlzaGVkRXZlbnQgPSBl
dmVudC50b0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudCgpOworICAgICAgICBBU1NFUlQoZmlu
aXNoZWRFdmVudC0+dGFyZ2V0UHJvcGVydHkoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSk7CisgICAgICAgIHNldE9wYWNpdHkoZmluaXNoZWRFdmVudC0+ZmluYWxWYWx1ZSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBDQ0FuaW1hdGlvbkV2ZW50OjpGaW5pc2hl
ZFRyYW5zZm9ybUFuaW1hdGlvbjogeworICAgICAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlv
bkZpbmlzaGVkRXZlbnQqIGZpbmlzaGVkRXZlbnQgPSBldmVudC50b1RyYW5zZm9ybUFuaW1hdGlv
bkZpbmlzaGVkRXZlbnQoKTsKKyAgICAgICAgQVNTRVJUKGZpbmlzaGVkRXZlbnQtPnRhcmdldFBy
b3BlcnR5KCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7CisgICAgICAgIHNldFRy
YW5zZm9ybShmaW5pc2hlZEV2ZW50LT5maW5hbFZhbHVlKCkpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICB9Cit9CisKIHZvaWQgc29ydExheWVycyhWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID46Oml0ZXJhdG9yLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID46Oml0ZXJh
dG9yLCB2b2lkKikKIHsKICAgICAvLyBDdXJyZW50bHkgd2UgZG9uJ3QgdXNlIHotb3JkZXIgdG8g
ZGVjaWRlIHdoYXQgdG8gcGFpbnQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBhY3R1YWxseSBzb3J0
IExheWVyQ2hyb21pdW1zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDAwODE1MGNhYmI4YzgxZTM1
ZmRjZWVjZmYwNzU0ZDE2ZTE5N2I1NTcuLjZmZDQ2NWI1NzNiZGMzMDIyYWMzZGU4MTE1OGQ0OGM1
ZTljNDNiMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJTaGFkZXJDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ09jY2x1c2lvblRyYWNrZXIuaCIK
IAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTU2LDcgKzU3LDYgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQ0NBbmltYXRpb25FdmVudDsKLWNsYXNzIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOwogY2xhc3MgQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlOwogY2xhc3MgQ0NM
YXllckltcGw7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CkBAIC02NiwxMiArNjYsMjAgQEAgY2xh
c3MgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTsKIAogLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRl
ZCBsYXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQogLy8gdGhpcyBj
bGFzcy4KLWNsYXNzIExheWVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllckNocm9t
aXVtPiB7CitjbGFzcyBMYXllckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJDaHJv
bWl1bT4sIHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKCk7CiAKICAgICB2
aXJ0dWFsIH5MYXllckNocm9taXVtKCk7CiAKKyAgICAvLyBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckNsaWVudCBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXllcklkOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEFuaW1hdGVkT3BhY2l0eShm
bG9hdCk7CisgICAgdmlydHVhbCBmbG9hdCBhbmltYXRlZE9wYWNpdHkoKSBjb25zdCB7IHJldHVy
biBtX29wYWNpdHk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5pbWF0ZWRUcmFuc2Zvcm0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2aXJ0dWFsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBhbmltYXRlZFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3Jt
OyB9CisgICAgdmlydHVhbCBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCB7IHJldHVybiBt
X2JvdW5kczsgfQorCiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgY29uc3Q7
CiAgICAgTGF5ZXJDaHJvbWl1bSogcGFyZW50KCkgY29uc3Q7CiAgICAgdm9pZCBhZGRDaGlsZChQ
YXNzUmVmUHRyPExheWVyQ2hyb21pdW0+KTsKQEAgLTk1LDcgKzEwMyw2IEBAIHB1YmxpYzoKICAg
ICBib29sIGJhY2tncm91bmRDb3ZlcnNWaWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dy
b3VuZENvdmVyc1ZpZXdwb3J0OyB9CiAKICAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBJbnRTaXpl
Jik7Ci0gICAgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7
IH0KICAgICB2aXJ0dWFsIEludFNpemUgY29udGVudEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGJv
dW5kcygpOyB9CiAKICAgICB2b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCk7CkBAIC0xODEsOCAr
MTg4LDYgQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFk
ZXJQb3MsIEZyYWdtZW50U2hhZGVyQ29sb3I+IEJvcmRlclByb2dyYW07CiAKLSAgICBpbnQgaWQo
KSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7IH0KLQogICAgIHZvaWQgY2xlYXJSZW5kZXJTdXJm
YWNlKCkgeyBtX3JlbmRlclN1cmZhY2UuY2xlYXIoKTsgfQogICAgIFJlbmRlclN1cmZhY2VDaHJv
bWl1bSogcmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyU3VyZmFjZS5nZXQo
KTsgfQogICAgIHZvaWQgY3JlYXRlUmVuZGVyU3VyZmFjZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZl
QW5pbWF0aW9uLmgKaW5kZXggMjA5MzQyMWE3NTA4Zjk1ZmYzNWNjZTEzZjU0NTg2MmYyNGVkZjNl
ZC4uOWM2NjMzYzNlNGM2ZjlkNmM0ZTZiYmUzZmQzNzY1Y2I3ZGJlNGVjMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmlt
YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCkBAIC02MywxNCArNjMsNiBAQCBwdWJsaWM6CiAgICAgICAg
IE9wYWNpdHkKICAgICB9OwogCi0gICAgc3RydWN0IEFuaW1hdGlvblNpZ25hdHVyZSB7Ci0gICAg
ICAgIEFuaW1hdGlvblNpZ25hdHVyZShpbnQgZ3JvdXBJZCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0
UHJvcGVydHkpCi0gICAgICAgICAgICA6IGdyb3VwSWQoZ3JvdXBJZCkKLSAgICAgICAgICAgICwg
dGFyZ2V0UHJvcGVydHkodGFyZ2V0UHJvcGVydHkpIHsgfQotICAgICAgICBpbnQgZ3JvdXBJZDsK
LSAgICAgICAgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHk7Ci0gICAgfTsKLQogICAgIHN0
YXRpYyBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGUoUGFzc093blB0cjxDQ0Fu
aW1hdGlvbkN1cnZlPiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgVGFyZ2V0UHJvcGVy
dHkpOwogCiAgICAgdmlydHVhbCB+Q0NBY3RpdmVBbmltYXRpb24oKTsKQEAgLTEwNCw4ICs5Niw2
IEBAIHB1YmxpYzoKICAgICAvLyBvZiBpdGVyYXRpb25zLCByZXR1cm5zIHRoZSByZWxhdGl2ZSB0
aW1lIGluIHRoZSBjdXJyZW50IGl0ZXJhdGlvbi4KICAgICBkb3VibGUgdHJpbVRpbWVUb0N1cnJl
bnRJdGVyYXRpb24oZG91YmxlIG5vdykgY29uc3Q7CiAKLSAgICBBbmltYXRpb25TaWduYXR1cmUg
c2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gQW5pbWF0aW9uU2lnbmF0dXJlKG1fZ3JvdXAsIG1f
dGFyZ2V0UHJvcGVydHkpOyB9Ci0KICAgICBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBj
bG9uZUZvckltcGxUaHJlYWQoKSBjb25zdDsKIAogICAgIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0
aWVzKENDQWN0aXZlQW5pbWF0aW9uKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkV2ZW50cy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkV2ZW50cy5j
cHAKaW5kZXggOWY0MTg0NGNhMDVkMTM3YWMxZWQ3ZDhmMmE3MTE4ZjQ0NDA2NjgwMS4uYjc3ZDAy
YmVkOWFjOWUwMjJlMWE0NWVjYmJhMGQ3NDZiNzYyN2Y2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVudHMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5p
bWF0aW9uRXZlbnRzLmNwcApAQCAtMzAsOCArMzAsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUNDQW5pbWF0aW9uRXZlbnQ6OkNDQW5pbWF0aW9uRXZlbnQoaW50IGxheWVySWQpCitDQ0Fu
aW1hdGlvbkV2ZW50OjpDQ0FuaW1hdGlvbkV2ZW50KGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCiAgICAgOiBtX2xheWVySWQobGF5
ZXJJZCkKKyAgICAsIG1fdGFyZ2V0UHJvcGVydHkodGFyZ2V0UHJvcGVydHkpCiB7CiB9CiAKQEAg
LTQ1LDE5ICs0NiwyNSBAQCBjb25zdCBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudCogQ0NBbmltYXRp
b25FdmVudDo6dG9BbmltYXRpb25TdGFydGVkRXZlbnQoKSBjb25zdAogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudCo+KHRoaXMpOwogfQogCi1jb25z
dCBDQ0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQqIENDQW5pbWF0aW9uRXZlbnQ6OnRvQW5pbWF0aW9u
RmluaXNoZWRFdmVudCgpIGNvbnN0Citjb25zdCBDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVu
dCogQ0NBbmltYXRpb25FdmVudDo6dG9GbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQoKSBjb25z
dAogewotICAgIEFTU0VSVCh0eXBlKCkgPT0gRmluaXNoZWQpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBDQ0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQqPih0aGlzKTsKKyAgICBBU1NFUlQo
dHlwZSgpID09IEZpbmlzaGVkRmxvYXRBbmltYXRpb24pOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudCo+KHRoaXMpOwogfQogCi1QYXNz
T3duUHRyPENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50PiBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDo6
Y3JlYXRlKGludCBsYXllcklkKQorY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2
ZW50KiBDQ0FuaW1hdGlvbkV2ZW50Ojp0b1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQo
KSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25TdGFydGVkRXZl
bnQobGF5ZXJJZCkpOworICAgIEFTU0VSVCh0eXBlKCkgPT0gRmluaXNoZWRUcmFuc2Zvcm1Bbmlt
YXRpb24pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlv
bkZpbmlzaGVkRXZlbnQqPih0aGlzKTsKIH0KIAotQ0NBbmltYXRpb25TdGFydGVkRXZlbnQ6OkND
QW5pbWF0aW9uU3RhcnRlZEV2ZW50KGludCBsYXllcklkKQotICAgIDogQ0NBbmltYXRpb25FdmVu
dChsYXllcklkKQorUGFzc093blB0cjxDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudD4gQ0NBbmltYXRp
b25TdGFydGVkRXZlbnQ6OmNyZWF0ZShpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRh
cmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q0NBbmltYXRpb25TdGFydGVkRXZlbnQobGF5ZXJJZCwgdGFyZ2V0UHJvcGVydHkpKTsKK30KKwor
Q0NBbmltYXRpb25TdGFydGVkRXZlbnQ6OkNDQW5pbWF0aW9uU3RhcnRlZEV2ZW50KGludCBsYXll
cklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCisg
ICAgOiBDQ0FuaW1hdGlvbkV2ZW50KGxheWVySWQsIHRhcmdldFByb3BlcnR5KQogewogfQogCkBA
IC03MCwyNCArNzcsNDQgQEAgQ0NBbmltYXRpb25FdmVudDo6VHlwZSBDQ0FuaW1hdGlvblN0YXJ0
ZWRFdmVudDo6dHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIFN0YXJ0ZWQ7CiB9CiAKLVBhc3NPd25Q
dHI8Q0NBbmltYXRpb25GaW5pc2hlZEV2ZW50PiBDQ0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OmNy
ZWF0ZShpbnQgbGF5ZXJJZCwgaW50IGFuaW1hdGlvbklkKQorUGFzc093blB0cjxDQ0Zsb2F0QW5p
bWF0aW9uRmluaXNoZWRFdmVudD4gQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OmNyZWF0
ZShpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFBy
b3BlcnR5LCBmbG9hdCBmaW5hbFZhbHVlKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NG
bG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQobGF5ZXJJZCwgdGFyZ2V0UHJvcGVydHksIGZpbmFs
VmFsdWUpKTsKK30KKworQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OkNDRmxvYXRBbmlt
YXRpb25GaW5pc2hlZEV2ZW50KGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0
UHJvcGVydHkgdGFyZ2V0UHJvcGVydHksIGZsb2F0IGZpbmFsVmFsdWUpCisgICAgOiBDQ0FuaW1h
dGlvbkV2ZW50KGxheWVySWQsIHRhcmdldFByb3BlcnR5KQorICAgICwgbV9maW5hbFZhbHVlKGZp
bmFsVmFsdWUpCit7Cit9CisKK0NDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50Ojp+Q0NGbG9h
dEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQoKQoreworfQorCitDQ0FuaW1hdGlvbkV2ZW50OjpUeXBl
IENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50Ojp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gRmluaXNoZWRGbG9hdEFuaW1hdGlvbjsKK30KKworUGFzc093blB0cjxDQ1RyYW5zZm9ybUFu
aW1hdGlvbkZpbmlzaGVkRXZlbnQ+IENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6
Y3JlYXRlKGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFy
Z2V0UHJvcGVydHksIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmaW5hbFZhbHVlKQogewot
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50KGxheWVySWQs
IGFuaW1hdGlvbklkKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RyYW5zZm9ybUFuaW1h
dGlvbkZpbmlzaGVkRXZlbnQobGF5ZXJJZCwgdGFyZ2V0UHJvcGVydHksIGZpbmFsVmFsdWUpKTsK
IH0KIAotQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50OjpDQ0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQo
aW50IGxheWVySWQsIGludCBhbmltYXRpb25JZCkKLSAgICA6IENDQW5pbWF0aW9uRXZlbnQobGF5
ZXJJZCkKLSAgICAsIG1fYW5pbWF0aW9uSWQoYW5pbWF0aW9uSWQpCitDQ1RyYW5zZm9ybUFuaW1h
dGlvbkZpbmlzaGVkRXZlbnQ6OkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudChpbnQg
bGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZmluYWxWYWx1ZSkKKyAgICA6IENDQW5pbWF0
aW9uRXZlbnQobGF5ZXJJZCwgdGFyZ2V0UHJvcGVydHkpCisgICAgLCBtX2ZpbmFsVmFsdWUoZmlu
YWxWYWx1ZSkKIHsKIH0KIAotQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50Ojp+Q0NBbmltYXRpb25G
aW5pc2hlZEV2ZW50KCkKK0NDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6fkNDVHJh
bnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCgpCiB7CiB9CiAKLUNDQW5pbWF0aW9uRXZlbnQ6
OlR5cGUgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50Ojp0eXBlKCkgY29uc3QKK0NDQW5pbWF0aW9u
RXZlbnQ6OlR5cGUgQ0NUcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50Ojp0eXBlKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gRmluaXNoZWQ7CisgICAgcmV0dXJuIEZpbmlzaGVkVHJhbnNmb3Jt
QW5pbWF0aW9uOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkV2ZW50
cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmlt
YXRpb25FdmVudHMuaAppbmRleCBkYTk0ZTFlMjdkMTM4ODQ1Yjg5M2Q1NjA4ZmI4NmM2NGFiZjlh
Mjc5Li5lMjRmNzVkYzdjMWIzZWM1Mjg1MDE4Y2RlMWFmOTdiODNhYTRkNjk2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlv
bkV2ZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQW5pbWF0aW9uRXZlbnRzLmgKQEAgLTI1LDE3ICsyNSwyMCBAQAogI2lmbmRlZiBDQ0Fu
aW1hdGlvbkV2ZW50c19oCiAjZGVmaW5lIENDQW5pbWF0aW9uRXZlbnRzX2gKIAorI2luY2x1ZGUg
ImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
Q0FuaW1hdGlvblN0YXJ0ZWRFdmVudDsKLWNsYXNzIENDQW5pbWF0aW9uRmluaXNoZWRFdmVudDsK
K2NsYXNzIENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50OworY2xhc3MgQ0NUcmFuc2Zvcm1B
bmltYXRpb25GaW5pc2hlZEV2ZW50OwogCiBjbGFzcyBDQ0FuaW1hdGlvbkV2ZW50IHsKIHB1Ymxp
YzoKLSAgICBlbnVtIFR5cGUgeyBTdGFydGVkLCBGaW5pc2hlZCB9OworICAgIGVudW0gVHlwZSB7
IFN0YXJ0ZWQsIEZpbmlzaGVkRmxvYXRBbmltYXRpb24sIEZpbmlzaGVkVHJhbnNmb3JtQW5pbWF0
aW9uIH07CiAKICAgICB2aXJ0dWFsIH5DQ0FuaW1hdGlvbkV2ZW50KCk7CiAKQEAgLTQzLDQ0ICs0
Niw2NSBAQCBwdWJsaWM6CiAKICAgICBpbnQgbGF5ZXJJZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5
ZXJJZDsgfQogCisgICAgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFBy
b3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRQcm9wZXJ0eTsgfQorCiAgICAgY29uc3Qg
Q0NBbmltYXRpb25TdGFydGVkRXZlbnQqIHRvQW5pbWF0aW9uU3RhcnRlZEV2ZW50KCkgY29uc3Q7
Ci0gICAgY29uc3QgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50KiB0b0FuaW1hdGlvbkZpbmlzaGVk
RXZlbnQoKSBjb25zdDsKKyAgICBjb25zdCBDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudCog
dG9GbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQoKSBjb25zdDsKKyAgICBjb25zdCBDQ1RyYW5z
Zm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQqIHRvVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRF
dmVudCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ0NBbmltYXRpb25FdmVudChpbnQgbGF5
ZXJJZCk7CisgICAgQ0NBbmltYXRpb25FdmVudChpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRp
b246OlRhcmdldFByb3BlcnR5KTsKIAogcHJpdmF0ZToKICAgICBpbnQgbV9sYXllcklkOworICAg
IENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSBtX3RhcmdldFByb3BlcnR5OwogfTsK
IAogLy8gSW5kaWNhdGVzIHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBzdGFydGVkIG9uIGEgcGFydGlj
dWxhciBsYXllci4KIGNsYXNzIENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50IDogcHVibGljIENDQW5p
bWF0aW9uRXZlbnQgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQW5pbWF0aW9u
U3RhcnRlZEV2ZW50PiBjcmVhdGUoaW50IGxheWVySWQpOworICAgIHN0YXRpYyBQYXNzT3duUHRy
PENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50PiBjcmVhdGUoaW50IGxheWVySWQsIENDQWN0aXZlQW5p
bWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CiAKICAgICB2aXJ0dWFsIH5DQ0FuaW1hdGlvblN0YXJ0
ZWRFdmVudCgpOwogCiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdDsKIAogcHJpdmF0ZToK
LSAgICBleHBsaWNpdCBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudChpbnQgbGF5ZXJJZCk7CisgICAg
Q0NBbmltYXRpb25TdGFydGVkRXZlbnQoaW50IGxheWVySWQsIENDQWN0aXZlQW5pbWF0aW9uOjpU
YXJnZXRQcm9wZXJ0eSk7CiB9OwogCi0vLyBJbmRpY2F0ZXMgdGhhdCBhbiBhbmltYXRpb24gaGFz
IHN0YXJ0ZWQgb24gYSBwYXJ0aWN1bGFyIGxheWVyLgotY2xhc3MgQ0NBbmltYXRpb25GaW5pc2hl
ZEV2ZW50IDogcHVibGljIENDQW5pbWF0aW9uRXZlbnQgeworLy8gSW5kaWNhdGVzIHRoYXQgYSBm
bG9hdCBhbmltYXRpb24gaGFzIGNvbXBsZXRlZC4KK2NsYXNzIENDRmxvYXRBbmltYXRpb25GaW5p
c2hlZEV2ZW50IDogcHVibGljIENDQW5pbWF0aW9uRXZlbnQgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50PiBjcmVhdGUoaW50IGxh
eWVySWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSwgZmxvYXQgZmluYWxWYWx1
ZSk7CisKKyAgICB2aXJ0dWFsIH5DQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudCgpOworCisg
ICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdDsKKworICAgIGZsb2F0IGZpbmFsVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX2ZpbmFsVmFsdWU7IH0KKworcHJpdmF0ZToKKyAgICBDQ0Zsb2F0QW5p
bWF0aW9uRmluaXNoZWRFdmVudChpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdl
dFByb3BlcnR5LCBmbG9hdCBmaW5hbFZhbHVlKTsKKworICAgIGZsb2F0IG1fZmluYWxWYWx1ZTsK
K307CisKKy8vIEluZGljYXRlcyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiBoYXMgY29tcGxl
dGVkLgorY2xhc3MgQ0NUcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50IDogcHVibGljIEND
QW5pbWF0aW9uRXZlbnQgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQW5pbWF0
aW9uRmluaXNoZWRFdmVudD4gY3JlYXRlKGludCBsYXllcklkLCBpbnQgYW5pbWF0aW9uSWQpOwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudD4g
Y3JlYXRlKGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHksIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmaW5hbFZhbHVlKTsKIAotICAgIHZpcnR1YWwgfkND
QW5pbWF0aW9uRmluaXNoZWRFdmVudCgpOworICAgIHZpcnR1YWwgfkNDVHJhbnNmb3JtQW5pbWF0
aW9uRmluaXNoZWRFdmVudCgpOwogCiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdDsKIAot
ICAgIGludCBhbmltYXRpb25JZCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uSWQ7IH0KKyAg
ICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZmluYWxWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZmluYWxWYWx1ZTsgfQogCiBwcml2YXRlOgotICAgIENDQW5pbWF0aW9uRmluaXNoZWRFdmVu
dChpbnQgbGF5ZXJJZCwgaW50IGFuaW1hdGlvbklkKTsKKyAgICBDQ1RyYW5zZm9ybUFuaW1hdGlv
bkZpbmlzaGVkRXZlbnQoaW50IGxheWVySWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9w
ZXJ0eSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZpbmFsVmFsdWUpOwogCi0gICAgaW50
IG1fYW5pbWF0aW9uSWQ7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9maW5hbFZhbHVlOwog
fTsKIAogdHlwZWRlZiBWZWN0b3I8T3duUHRyPENDQW5pbWF0aW9uRXZlbnQ+ID4gQ0NBbmltYXRp
b25FdmVudHNWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlci5jcHAKaW5kZXggYzNhZjQ0ZGY1NmM1ZWI5OTk1ZDVjMmRiMzk4NzFjNDJkM2U1MGU5
ZC4uMzczYjBjYmI2NmE3OGYzNTRkY2Y0NGJhODJhN2Y2NjEwNjQ3ODAyMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcApAQCAtMjcsOSArMjcs
MTAgQEAKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogCiAjaW5j
bHVkZSAiR3JhcGhpY3NMYXllci5oIiAvLyBmb3IgS2V5ZnJhbWVWYWx1ZUxpc3QKKyNpbmNsdWRl
ICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCIKICNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDS2V5
ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogCkBAIC01NiwxMCArNTcsNiBAQCBQYXNzT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZh
bAogICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0RpcmVjdGlvblNldCgpICYmIGFu
aW1hdGlvbi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRl
cm5hdGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgLy8gRklYTUU6IGFkZCBzdXBw
b3J0IGZvciBkZWxheQotICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0RlbGF5U2V0
KCkgJiYgYW5pbWF0aW9uLT5kZWxheSgpID4gMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
ICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIGZpbGxzIGZvcndhcmRzIGFuZCBmaWxscyBi
YWNrd2FyZHMKICAgICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNGaWxsTW9kZVNldCgp
ICYmIChhbmltYXRpb24tPmZpbGxzRm9yd2FyZHMoKSB8fCBhbmltYXRpb24tPmZpbGxzQmFja3dh
cmRzKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwNSw3ICsxMDIsOCBAQCBQYXNz
T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpc3QmIHZhbAogCiB9IC8vIG5hbWVwYWNlCiAKLUNDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpCitDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKIHsKIH0KIApA
QCAtMTEzLDkgKzExMSw5IEBAIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjp+Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIoKQogewogfQogCi1QYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyPiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkKK1Bhc3NPd25Q
dHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpjcmVhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQqIGNsaWVudCkKIHsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKTsKKyAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKGNsaWVudCkpOwog
fQogCiBib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24oY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEFuaW1h
dGlvbiogYW5pbWF0aW9uLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBkb3VibGUgdGlt
ZU9mZnNldCkKQEAgLTE2NywzMiArMTY1LDcxIEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMoKQogCiAvLyBFbnN1cmVzIHRoYXQgdGhlIGxpc3Qgb2Yg
YWN0aXZlIGFuaW1hdGlvbnMgb24gdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgaW1wbCB0aHJlYWQK
IC8vIGFyZSBrZXB0IGluIHN5bmMuCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpz
eW5jaHJvbml6ZUFuaW1hdGlvbnMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250
cm9sbGVySW1wbCkKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hBbmltYXRp
b25VcGRhdGVzVG8oQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXJJbXBsKQog
ewotICAgIHJlbW92ZUNvbXBsZXRlZEFuaW1hdGlvbnMoY29udHJvbGxlckltcGwpOwogICAgIHB1
c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsKICAgICByZW1vdmVB
bmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsKLSAgICBwdXNo
QW5pbWF0aW9uUHJvcGVydGllcyhjb250cm9sbGVySW1wbCk7CiB9CiAKLXZvaWQgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUNvbXBsZXRlZEFuaW1hdGlvbnMoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3ZvaWQgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OmFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yKiBldmVudHMpCit7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRU
aWNrKG1vbm90b25pY1RpbWUsIGV2ZW50cyk7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zv
clN0YXJ0VGltZShtb25vdG9uaWNUaW1lLCBldmVudHMpOworICAgIHN0YXJ0QW5pbWF0aW9uc1dh
aXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkobW9ub3RvbmljVGltZSwgZXZlbnRzKTsKKyAgICBy
ZXNvbHZlQ29uZmxpY3RzKG1vbm90b25pY1RpbWUpOworICAgIHRpY2tBbmltYXRpb25zKG1vbm90
b25pY1RpbWUpOworICAgIHB1cmdlRmluaXNoZWRBbmltYXRpb25zKGV2ZW50cyk7CisgICAgc3Rh
cnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShtb25vdG9uaWNUaW1lLCBl
dmVudHMpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGQoUGFzc093
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbSkKIHsKLSAgICAvLyBBbnkgYW5pbWF0aW9ucyBm
aW5pc2hlZCBvbiB0aGUgaW1wbCB0aHJlYWQgYXJlIHJlbW92ZWQgZnJvbSB0aGUgbWFpbiB0aHJl
YWQncyBjb2xsZWN0aW9uLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udHJvbGxlcklt
cGwtPm1fZmluaXNoZWRBbmltYXRpb25zLnNpemUoKTsgKytpKQotICAgICAgICByZW1vdmUoY29u
dHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zW2ldLmdyb3VwSWQsIGNvbnRyb2xsZXJJ
bXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9uc1tpXS50YXJnZXRQcm9wZXJ0eSk7Ci0gICAgY29udHJv
bGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zLmNsZWFyKCk7CisgICAgbV9hY3RpdmVBbmlt
YXRpb25zLmFwcGVuZChhbmltKTsKIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6cHVzaE5ld0FuaW1hdGlvbnNUb0ltcGxUaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK0NDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlm
IChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3JvdXBJZCAmJiBtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisgICAgICAg
ICAgICByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpOworICAgIHJldHVybiAwOwor
fQorCitib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpoYXNBY3RpdmVBbmltYXRpb24o
KSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25z
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0
YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkICYmIG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+cnVuU3RhdGUoKSAhPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmlzQW5pbWF0aW5nUHJvcGVydHkoQ0NBY3RpdmVBbmlt
YXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KSBjb25zdAoreworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmlt
YXRpb246OkZpbmlzaGVkICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSAhPSBD
Q0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdl
dFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjpwdXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlciogY29udHJvbGxlckltcGwpCiB7CiAgICAgLy8gQW55IG5ldyBhbmltYXRpb25zIG93
bmVkIGJ5IHRoZSBtYWluIHRocmVhZCdzIGNvbnRyb2xsZXIgYXJlIGNsb25lZCBhbmQgYWRkZSB0
byB0aGUgaW1wbCB0aHJlYWQncyBjb250cm9sbGVyLgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghY29udHJv
bGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbihtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3Vw
KCksIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSkpCi0gICAgICAgICAg
ICBjb250cm9sbGVySW1wbC0+YWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Y2xvbmVGb3JJbXBs
VGhyZWFkKCkpOworICAgICAgICBpZiAoIWNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRp
b24obV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpLCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnRhcmdldFByb3BlcnR5KCkpKSB7CisgICAgICAgICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRp
b24+IHRvQWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Y2xvbmVGb3JJbXBsVGhyZWFkKCkpOwor
ICAgICAgICAgICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzIC0t
IHNldCBpdCB0byBiZSB3YWl0aW5nIHVudGlsIHRoZSB0YXJnZXQgaXMgYXZhaWxhYmxlLgorICAg
ICAgICAgICAgLy8gVGhhdCB3YXksIGl0IHdpbGwgaGF2ZSBhIGNoYW5jZSB0byBzdGFydCBvbiB0
aGUgaW1wbCB0aHJlYWQuIE90aGVyd2lzZSwgd2Ugd2lsbCBuZXZlciB0aWNrIGF0IHRoZQorICAg
ICAgICAgICAgLy8gdmVyeSBiZWdpbm5pbmcgb2YgdGhlIGFuaW1hdGlvbi4KKyAgICAgICAgICAg
IGlmICh0b0FkZC0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZyB8fCB0
b0FkZC0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2VkKQorICAgICAgICAg
ICAgICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRh
cmdldEF2YWlsYWJpbGl0eSwgMCk7CisgICAgICAgICAgICBjb250cm9sbGVySW1wbC0+YWRkKHRv
QWRkLnJlbGVhc2UoKSk7CisgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3ZvaWQgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJl
YWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXJJbXBsKQogewogICAgIC8v
IERlbGV0ZSBhbGwgaW1wbCB0aHJlYWQgYW5pbWF0aW9ucyBmb3Igd2hpY2ggdGhlcmUgaXMgbm8g
Y29ycmVzcG9uZGluZyBtYWluIHRocmVhZCBhbmltYXRpb24uCiAgICAgLy8gRWFjaCBpdGVyYXRp
b24sIGNvbnRyb2xsZXItPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkgaXMgZGVjcmVtZW50ZWQg
b3IgaSBpcyBpbmNyZW1lbnRlZApAQCAtMjA2LDQ1ICsyNDMsMTcxIEBAIHZvaWQgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQo
Q0NMYXllckFuCiAgICAgfQogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpw
dXNoQW5pbWF0aW9uUHJvcGVydGllcyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNv
bnRyb2xsZXJJbXBsKQordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3RhcnRBbmlt
YXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3RvciogZXZlbnRzKQogewotICAgIC8vIERlbGV0ZSBhbGwgaW1wbCB0aHJlYWQg
YW5pbWF0aW9ucyBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyBtYWluIHRocmVh
ZCBhbmltYXRpb24uCi0gICAgLy8gRWFjaCBpdGVyYXRpb24sIGNvbnRyb2xsZXItPm1fYWN0aXZl
QW5pbWF0aW9ucy5zaXplKCkgaXMgZGVjcmVtZW50ZWQgb3IgaSBpcyBpbmNyZW1lbnRlZAotICAg
IC8vIGd1YXJhbnRlZWluZyBwcm9ncmVzcyB0b3dhcmRzIGxvb3AgdGVybWluYXRpb24uCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb250cm9sbGVySW1wbC0+bV9hY3RpdmVBbmltYXRpb25z
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50SW1wbCA9
IGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0uZ2V0KCk7Ci0gICAgICAgIEND
QWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50ID0gZ2V0QWN0aXZlQW5pbWF0aW9uKGN1cnJlbnRJbXBs
LT5ncm91cCgpLCBjdXJyZW50SW1wbC0+dGFyZ2V0UHJvcGVydHkoKSk7Ci0gICAgICAgIEFTU0VS
VChjdXJyZW50KTsKLSAgICAgICAgaWYgKGN1cnJlbnQpCi0gICAgICAgICAgICBjdXJyZW50LT5z
eW5jaHJvbml6ZVByb3BlcnRpZXMoY3VycmVudEltcGwpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2Fj
dGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OldhaXRp
bmdGb3JOZXh0VGljaykgeworICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRS
dW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbW9ub3RvbmljVGltZSk7CisgICAg
ICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFN0YXJ0VGltZShtb25vdG9uaWNUaW1l
KTsKKyAgICAgICAgICAgIGlmIChldmVudHMpCisgICAgICAgICAgICAgICAgZXZlbnRzLT5hcHBl
bmQoQ0NBbmltYXRpb25TdGFydGVkRXZlbnQ6OmNyZWF0ZShtX2NsaWVudC0+aWQoKSwgbV9hY3Rp
dmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpKSk7CisgICAgICAgIH0KICAgICB9CiB9
CiAKLUNDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0
aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVy
dHkgdGFyZ2V0UHJvcGVydHkpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpzdGFy
dEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0Fu
aW1hdGlvbkV2ZW50c1ZlY3RvciogZXZlbnRzKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKQotICAgICAgICBpZiAobV9hY3RpdmVB
bmltYXRpb25zW2ldLT5ncm91cCgpID09IGdyb3VwSWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ld
LT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdldFByb3BlcnR5KQotICAgICAgICAgICAgcmV0dXJu
IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS5nZXQoKTsKLSAgICByZXR1cm4gMDsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0
aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c3RhcnRU
aW1lKCkgPD0gbW9ub3RvbmljVGltZSkgeworICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25z
W2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbW9ub3RvbmljVGlt
ZSk7CisgICAgICAgICAgICBpZiAoZXZlbnRzKQorICAgICAgICAgICAgICAgIGV2ZW50cy0+YXBw
ZW5kKENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50OjpjcmVhdGUobV9jbGllbnQtPmlkKCksIG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSkpOworICAgICAgICB9CisgICAgfQog
fQogCi1ib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjppc0FuaW1hdGluZ1Byb3BlcnR5
KENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkgY29uc3QK
K3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdG
b3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yKiBldmVudHMpCiB7CisgICAgLy8gRmlyc3QgY29sbGVjdCBydW5uaW5nIHByb3Bl
cnRpZXMuCisgICAgVGFyZ2V0UHJvcGVydGllcyBibG9ja2VkUHJvcGVydGllczsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpICE9IENDQWN0aXZlQW5p
bWF0aW9uOjpGaW5pc2hlZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgIT0g
Q0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJn
ZXRQcm9wZXJ0eSgpID09IHRhcmdldFByb3BlcnR5KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3Rp
dmVBbmltYXRpb246OlJ1bm5pbmcgfHwgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgp
ID09IENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCkKKyAgICAgICAgICAgIGJsb2NrZWRQcm9w
ZXJ0aWVzLmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpOworICAg
IH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkg
PT0gQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkpIHsKKyAg
ICAgICAgICAgIC8vIENvbGxlY3QgYWxsIHByb3BlcnRpZXMgZm9yIGFuaW1hdGlvbnMgd2l0aCB0
aGUgc2FtZSBncm91cCBpZCAodGhleSBzaG91bGQgYWxsIGFsc28gYmUgaW4gdGhlIGxpc3Qgb2Yg
YW5pbWF0aW9ucykuCisgICAgICAgICAgICBUYXJnZXRQcm9wZXJ0aWVzIGVucXVldWVkUHJvcGVy
dGllczsKKyAgICAgICAgICAgIGVucXVldWVkUHJvcGVydGllcy5hZGQobV9hY3RpdmVBbmltYXRp
b25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBp
ICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraikgeworICAgICAgICAgICAg
ICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gbV9hY3RpdmVBbmltYXRp
b25zW2pdLT5ncm91cCgpKQorICAgICAgICAgICAgICAgICAgICBlbnF1ZXVlZFByb3BlcnRpZXMu
YWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+dGFyZ2V0UHJvcGVydHkoKSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBpbnRlcnNlY3Rpb24gb2YgdGhl
IGxpc3Qgb2YgcHJvcGVydGllcyBhZmZlY3RlZCBieSB0aGUgZ3JvdXAgYW5kIHRoZSBsaXN0IG9m
IGN1cnJlbnRseQorICAgICAgICAgICAgLy8gYmxvY2tlZCBwcm9wZXJ0aWVzIGlzIG51bGwuIElu
IGFueSBjYXNlLCB0aGUgZ3JvdXAncyB0YXJnZXQgcHJvcGVydGllcyBuZWVkIHRvIGJlIGFkZGVk
IHRvIHRoZSBsaXN0CisgICAgICAgICAgICAvLyBvZiBibG9ja2VkIHByb3BlcnRpZXMuCisgICAg
ICAgICAgICBib29sIG51bGxJbnRlcnNlY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgZm9yIChU
YXJnZXRQcm9wZXJ0aWVzOjppdGVyYXRvciBwSXRlciA9IGVucXVldWVkUHJvcGVydGllcy5iZWdp
bigpOyBwSXRlciAhPSBlbnF1ZXVlZFByb3BlcnRpZXMuZW5kKCk7ICsrcEl0ZXIpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIWJsb2NrZWRQcm9wZXJ0aWVzLmFkZCgqcEl0ZXIpLnNlY29uZCkKKyAg
ICAgICAgICAgICAgICAgICAgbnVsbEludGVyc2VjdGlvbiA9IGZhbHNlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBJZiB0aGUgaW50ZXJzZWN0aW9uIGlzIG51bGwsIHRoZW4gd2Ug
YXJlIGZyZWUgdG8gc3RhcnQgdGhlIGFuaW1hdGlvbnMgaW4gdGhlIGdyb3VwLgorICAgICAgICAg
ICAgaWYgKG51bGxJbnRlcnNlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBtb25vdG9u
aWNUaW1lKTsKKyAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFN0YXJ0
VGltZShtb25vdG9uaWNUaW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoZXZlbnRzKQorICAgICAg
ICAgICAgICAgICAgICBldmVudHMtPmFwcGVuZChDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDo6Y3Jl
YXRlKG1fY2xpZW50LT5pZCgpLCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5
KCkpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FjdGl2
ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPmdyb3Vw
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+c2V0
UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG1vbm90b25pY1RpbWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRTdGFydFRpbWUo
bW9ub3RvbmljVGltZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmUoaW50IGdyb3VwSWQsIEND
QWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK3ZvaWQgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc29sdmVDb25mbGljdHMoZG91YmxlIG1vbm90b25p
Y1RpbWUpCiB7CisgICAgLy8gRmluZCBhbnkgYW5pbWF0aW9ucyB0aGF0IGFyZSBhbmltYXRpbmcg
dGhlIHNhbWUgcHJvcGVydHkgYW5kIHJlc29sdmUgdGhlCisgICAgLy8gY29uZmljdC4gV2UgY291
bGQgZXZlbnR1YWxseSBibGVuZCwgYnV0IGZvciBub3cgd2UnbGwganVzdCBhYm9ydCB0aGUKKyAg
ICAvLyBwcmV2aW91cyBhbmltYXRpb24gKHdoZXJlICdwcmV2aW91cycgbWVhbnM6ICgxKSBoYXMg
YSBwcmlvciBzdGFydCB0aW1lIG9yCisgICAgLy8gKDIpIGhhcyBhbiBlcXVhbCBzdGFydCB0aW1l
LCBidXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBlYXJsaWVyLCBpLmUuLAorICAgIC8vIGhhcyBh
IGxvd2VyIGluZGV4IGluIG1fYWN0aXZlQW5pbWF0aW9ucykuCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cElkICYmIG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSB0YXJnZXRQcm9wZXJ0eSkgewotICAgICAgICAg
ICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFu
aW1hdGlvbjo6UnVubmluZykgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBq
IDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYg
KG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6
UnVubmluZyAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gbV9h
Y3RpdmVBbmltYXRpb25zW2pdLT50YXJnZXRQcm9wZXJ0eSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnN0YXJ0VGltZSgpID4gbV9hY3RpdmVBbmlt
YXRpb25zW2pdLT5zdGFydFRpbWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZl
QW5pbWF0aW9uc1tqXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQsIG1v
bm90b25pY1RpbWUpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0
aW9uOjpBYm9ydGVkLCBtb25vdG9uaWNUaW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OnB1cmdlRmluaXNoZWRBbmltYXRpb25zKENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKiBl
dmVudHMpCit7CisgICAgLy8gRWFjaCBpdGVyYXRpb24sIG1fYWN0aXZlQW5pbWF0aW9ucy5zaXpl
KCkgZGVjcmVhc2VzIG9yIGkgaW5jcmVtZW50cywKKyAgICAvLyBndWFyYW50ZWVpbmcgcHJvZ3Jl
c3MgdG93YXJkcyBsb29wIHRlcm1pbmF0aW9uLgorICAgIHNpemVfdCBpID0gMDsKKyAgICB3aGls
ZSAoaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkpIHsKKyAgICAgICAgaW50IGdyb3VwSWQg
PSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCk7CisgICAgICAgIGJvb2wgYWxsQW5pbXNX
aXRoU2FtZUlkQXJlRmluaXNoZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+aXNGaW5pc2hlZCgpKSB7CisgICAgICAgICAgICBhbGxBbmltc1dpdGhTYW1lSWRB
cmVGaW5pc2hlZCA9IHRydWU7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1f
YWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgIGlmIChncm91
cElkID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSAmJiAhbV9hY3RpdmVBbmltYXRp
b25zW2pdLT5pc0ZpbmlzaGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxsQW5pbXNXaXRo
U2FtZUlkQXJlRmluaXNoZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGlmIChh
bGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCkgeworICAgICAgICAgICAgLy8gV2Ugbm93IG5l
ZWQgdG8gcmVtb3ZlIGFsbCBhbmltYXRpb25zIHdpdGggdGhlIHNhbWUgZ3JvdXAgaWQgYXMgZ3Jv
dXBJZAorICAgICAgICAgICAgLy8gKGFuZCBzZW5kIGFsb25nIGFuaW1hdGlvbiBmaW5pc2hlZCBu
b3RpZmljYXRpb25zLCBpZiBuZWNlc3NhcnkpLgorICAgICAgICAgICAgLy8gRWFjaCBpdGVyYXRp
b24sIG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkgZGVjcmVhc2VzIG9yIGogaW5jcmVtZW50cywK
KyAgICAgICAgICAgIC8vIGd1YXJhbnRlZWluZyBwcm9ncmVzcyB0b3dhcmRzIGxvb3AgdGVybWlu
YXRpb24uIEFsc28sIHdlIGFyZSBndWFyYW50ZWVkCisgICAgICAgICAgICAvLyB0byByZW1vdmUg
YXQgbGVhc3Qgb25lIGFjdGl2ZSBhbmltYXRpb24uCisgICAgICAgICAgICBmb3IgKHNpemVfdCBq
ID0gaTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7KSB7CisgICAgICAgICAgICAgICAg
aWYgKGdyb3VwSWQgIT0gbV9hY3RpdmVBbmltYXRpb25zW2pdLT5ncm91cCgpKQorICAgICAgICAg
ICAgICAgICAgICBqKys7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChldmVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobV9hY3Rp
dmVBbmltYXRpb25zW2pdLT50YXJnZXRQcm9wZXJ0eSgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5OgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV2ZW50cy0+YXBwZW5kKENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50Ojpj
cmVhdGUobV9jbGllbnQtPmlkKCksIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5LCBtX2NsaWVu
dC0+YW5pbWF0ZWRPcGFjaXR5KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5z
Zm9ybToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHMtPmFwcGVuZChDQ1RyYW5z
Zm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OmNyZWF0ZShtX2NsaWVudC0+aWQoKSwgQ0NBY3Rp
dmVBbmltYXRpb246OlRyYW5zZm9ybSwgbV9jbGllbnQtPmFuaW1hdGVkVHJhbnNmb3JtKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtX2FjdGl2
ZUFuaW1hdGlvbnMucmVtb3ZlKGopOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpKys7CiAgICAgfQogfQogCit2b2lkIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjp0aWNrQW5pbWF0aW9ucyhkb3VibGUgbW9ub3RvbmljVGlt
ZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgp
ID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nKSB7CisgICAgICAgICAgICBkb3VibGUgdHJp
bW1lZCA9IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24o
bW9ub3RvbmljVGltZSk7CisKKyAgICAgICAgICAgIHN3aXRjaCAobV9hY3RpdmVBbmltYXRpb25z
W2ldLT50YXJnZXRQcm9wZXJ0eSgpKSB7CisKKyAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVBbmlt
YXRpb246OlRyYW5zZm9ybTogeworICAgICAgICAgICAgICAgIGNvbnN0IENDVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUqIHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmltYXRpb25z
W2ldLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CisgICAgICAgICAgICAg
ICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gdHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUtPmdldFZhbHVlKHRyaW1tZWQsIG1fY2xpZW50LT5ib3VuZHMoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG1vbm90b25pY1Rp
bWUpKQorICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0
YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCwgbW9ub3RvbmljVGltZSk7CisKKyAgICAg
ICAgICAgICAgICBtX2NsaWVudC0+c2V0QW5pbWF0ZWRUcmFuc2Zvcm0obWF0cml4KTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eTogeworICAgICAgICAgICAgICAgIGNvbnN0IENDRmxvYXRB
bmltYXRpb25DdXJ2ZSogZmxvYXRBbmltYXRpb25DdXJ2ZSA9IG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+Y3VydmUoKS0+dG9GbG9hdEFuaW1hdGlvbkN1cnZlKCk7CisgICAgICAgICAgICAgICAgY29u
c3QgZmxvYXQgb3BhY2l0eSA9IGZsb2F0QW5pbWF0aW9uQ3VydmUtPmdldFZhbHVlKHRyaW1tZWQp
OworICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlzRmluaXNoZWRB
dChtb25vdG9uaWNUaW1lKSkKKyAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25z
W2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQsIG1vbm90b25pY1Rp
bWUpOworCisgICAgICAgICAgICAgICAgbV9jbGllbnQtPnNldEFuaW1hdGVkT3BhY2l0eShvcGFj
aXR5KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgfSAvLyBzd2l0Y2gKKyAgICAgICAgfSAvLyBpZiBydW5uaW5nCisgICAgfSAvLyBmb3IgZWFj
aCBhbmltYXRpb24KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKaW5kZXggZjJmNjZlYjI0NGVmMGFiMjc1
N2QyOTA1NGY4YzQxOWY0NmU0ZDkwZi4uZmQ0NWVjYzQyOWRhNzRhODA1ZWU3MWZiOWZlMmY0MGNj
YzQ5Y2JhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ci5oCkBAIC0yNiwyNiArMjYsNDIgQEAKICNkZWZpbmUgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJfaAogCiAjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9D
Q0FuaW1hdGlvbkN1cnZlLmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25FdmVudHMuaCIKIAor
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAj
aW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFuaW1h
dGlvbjsKLWNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDsKIGNsYXNzIEludFNp
emU7CiBjbGFzcyBLZXlmcmFtZVZhbHVlTGlzdDsKK2NsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4
OworY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uczsKKworY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5pbWF0ZWRPcGFjaXR5KGZsb2F0KSA9IDA7CisgICAgdmly
dHVhbCBmbG9hdCBhbmltYXRlZE9wYWNpdHkoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNldEFuaW1hdGVkVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgPSAwOwor
ICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGFuaW1hdGVkVHJhbnNmb3Jt
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3Qg
PSAwOworfTsKIAogY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKTsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKCk7
CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNyZWF0
ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCopOwogCiAgICAgdmlydHVhbCB+Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKIAotICAgIC8vIFRoZXNlIGFyZSB2aXJ0dWFsIGZv
ciB0ZXN0aW5nLgorICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHZpcnR1YWwgZm9yIHRlc3Rpbmcu
CiAgICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYs
IGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiosIGludCBhbmltYXRpb25J
ZCwgaW50IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZvaWQgcGF1
c2VBbmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBkb3VibGUgdGltZU9mZnNldCk7CiAgICAgdmly
dHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQpOwpAQCAtNTQsMjMgKzcw
LDQxIEBAIHB1YmxpYzoKIAogICAgIC8vIEVuc3VyZXMgdGhhdCB0aGUgbGlzdCBvZiBhY3RpdmUg
YW5pbWF0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQgYW5kIHRoZSBpbXBsIHRocmVhZAogICAgIC8v
IGFyZSBrZXB0IGluIHN5bmMuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSBvd25lcnNoaXAg
b2YgdGhlIGltcGwgdGhyZWFkIGNvbnRyb2xsZXIuCi0gICAgdmlydHVhbCB2b2lkIHN5bmNocm9u
aXplQW5pbWF0aW9ucyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcHVzaEFuaW1hdGlvblVwZGF0ZXNUbyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ciopOworCisgICAgdm9pZCBhbmltYXRlKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3RvciopOwogCi0gICAgYm9vbCBoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyB9CisgICAgdm9pZCBhZGQoUGFzc093
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4pOworCisgICAgLy8gUmV0dXJucyB0aGUgYWN0aXZlIGFu
aW1hdGlvbiBpbiB0aGUgZ2l2ZW4gZ3JvdXAsIGFuaW1hdGluZyB0aGUgZ2l2ZW4gcHJvcGVydHkg
aWYgc3VjaCBhbgorICAgIC8vIGFuaW1hdGlvbiBleGlzdHMuCiAgICAgQ0NBY3RpdmVBbmltYXRp
b24qIGdldEFjdGl2ZUFuaW1hdGlvbihpbnQgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRh
cmdldFByb3BlcnR5KTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgYW55IGFu
aW1hdGlvbnMgdGhhdCBoYXZlIG5laXRoZXIgZmluaXNoZWQgbm9yIGFib3J0ZWQuCisgICAgYm9v
bCBoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGVyZSBpcyBhbiBhbmltYXRpb24gY3VycmVudGx5IGFuaW1hdGluZyB0aGUgZ2l2ZW4gcHJvcGVy
dHksIG9yCisgICAgLy8gaWYgdGhlcmUgaXMgYW4gYW5pbWF0aW9uIHNjaGVkdWxlZCB0byBhbmlt
YXRlIHRoaXMgcHJvcGVydHkgaW4gdGhlIGZ1dHVyZS4KICAgICBib29sIGlzQW5pbWF0aW5nUHJv
cGVydHkoQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KSBjb25zdDsKIAogcHJvdGVj
dGVkOgotICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCk7CisgICAgZXhwbGljaXQgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQq
KTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHJlbW92ZUNvbXBsZXRlZEFuaW1hdGlvbnMoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7Ci0gICAgdm9pZCBwdXNoTmV3QW5pbWF0aW9uc1Rv
SW1wbFRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKLSAgICB2b2lkIHJl
bW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsKik7Ci0gICAgdm9pZCBwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGwqKTsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8aW50PiBUYXJnZXRQ
cm9wZXJ0aWVzOworCisgICAgdm9pZCBwdXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRocmVhZChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlciopOworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uc0NvbXBs
ZXRlZE9uTWFpblRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciopOworCisgICAgdm9p
ZCBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZG91YmxlIG1vbm90b25pY1RpbWUs
IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKik7CisgICAgdm9pZCBzdGFydEFuaW1hdGlvbnNXYWl0
aW5nRm9yU3RhcnRUaW1lKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1Zl
Y3RvciopOworICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eShkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IqKTsKKyAg
ICB2b2lkIHJlc29sdmVDb25mbGljdHMoZG91YmxlIG1vbm90b25pY1RpbWUpOworICAgIHZvaWQg
cHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMoQ0NBbmltYXRpb25FdmVudHNWZWN0b3IqKTsKIAotICAg
IHZvaWQgcmVtb3ZlKGludCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVy
dHkpOworICAgIHZvaWQgdGlja0FuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY1RpbWUpOwogCisg
ICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQqIG1fY2xpZW50OwogICAgIFZlY3Rv
cjxPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+ID4gbV9hY3RpdmVBbmltYXRpb25zOwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhOWU5MWIyZTJhNGU0NTlkZTBkZWY3
ZjE2ZTI5ZDQxMGFkZDMwNTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzOSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJj
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKLQotI2luY2x1ZGUgIlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEEgY29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzLiBVc2VkIHdo
ZW4gZGV0ZXJpbWluaW5nIGlmIGFuaW1hdGlvbnMgd2FpdGluZyBmb3IgdGFyZ2V0Ci0vLyBhdmFp
bGliaWxpdHkgYXJlIGFibGUgdG8gcnVuLgotdHlwZWRlZiBIYXNoU2V0PGludD4gVGFyZ2V0UHJv
cGVydGllczsKLQotUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbENsaWVudCogY2xpZW50KQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKGNsaWVudCkpOwotfQotCi1DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbChDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqIGNsaWVudCkKLSAgICA6IG1fY2xpZW50KGNs
aWVudCkKLXsKLX0KLQotQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjp+Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsKCkKLXsKLX0KLQotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OmFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yJiBldmVudHMpCi17Ci0gICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRU
aWNrKG1vbm90b25pY1RpbWUsIGV2ZW50cyk7Ci0gICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zv
clN0YXJ0VGltZShtb25vdG9uaWNUaW1lLCBldmVudHMpOwotICAgIHN0YXJ0QW5pbWF0aW9uc1dh
aXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkobW9ub3RvbmljVGltZSwgZXZlbnRzKTsKLSAgICBy
ZXNvbHZlQ29uZmxpY3RzKG1vbm90b25pY1RpbWUpOwotICAgIHRpY2tBbmltYXRpb25zKG1vbm90
b25pY1RpbWUpOwotICAgIHB1cmdlRmluaXNoZWRBbmltYXRpb25zKGV2ZW50cyk7Ci0gICAgc3Rh
cnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShtb25vdG9uaWNUaW1lLCBl
dmVudHMpOwotfQotCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YWRkKFBh
c3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0pCi17Ci0gICAgbV9hY3RpdmVBbmltYXRp
b25zLmFwcGVuZChhbmltKTsKLX0KLQotQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6Z2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJvcGVydHkpCi17Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cElkICYmIG1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkKLSAgICAgICAgICAgIHJl
dHVybiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIHJldHVybiAwOwot
fQotCi1ib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6aGFzQWN0aXZlQW5pbWF0
aW9uKCkgY29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0
aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5y
dW5TdGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCAmJiBtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6aXNBbmltYXRpbmdQcm9wZXJ0eShDQ0Fj
dGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpIGNvbnN0Ci17Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSAhPSBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0
ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+dGFyZ2V0UHJvcGVydHkoKSA9PSB0YXJnZXRQcm9wZXJ0eSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZG91
YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiBldmVudHMpCi17Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrKSB7Ci0gICAgICAgICAgICBtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBt
b25vdG9uaWNUaW1lKTsKLSAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0U3Rh
cnRUaW1lKG1vbm90b25pY1RpbWUpOwotICAgICAgICAgICAgZXZlbnRzLmFwcGVuZChDQ0FuaW1h
dGlvblN0YXJ0ZWRFdmVudDo6Y3JlYXRlKG1fY2xpZW50LT5pZCgpKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1h
dGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3RvciYgZXZlbnRzKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9h
Y3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFy
dFRpbWUgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zdGFydFRpbWUoKSA8PSBtb25vdG9uaWNU
aW1lKSB7Ci0gICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKEND
QWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBtb25vdG9uaWNUaW1lKTsKLSAgICAgICAgICAgIGV2
ZW50cy5hcHBlbmQoQ0NBbmltYXRpb25TdGFydGVkRXZlbnQ6OmNyZWF0ZShtX2NsaWVudC0+aWQo
KSkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShkb3Vi
bGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImIGV2ZW50cykKLXsKLSAg
ICAvLyBGaXJzdCBjb2xsZWN0IHJ1bm5pbmcgcHJvcGVydGllcy4KLSAgICBUYXJnZXRQcm9wZXJ0
aWVzIGJsb2NrZWRQcm9wZXJ0aWVzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3Rp
dmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcgfHwgbV9hY3Rp
dmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hl
ZCkKLSAgICAgICAgICAgIGJsb2NrZWRQcm9wZXJ0aWVzLmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPnRhcmdldFByb3BlcnR5KCkpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdG
b3JUYXJnZXRBdmFpbGFiaWxpdHkpIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3QgYWxsIHByb3Bl
cnRpZXMgZm9yIGFuaW1hdGlvbnMgd2l0aCB0aGUgc2FtZSBncm91cCBpZCAodGhleSBzaG91bGQg
YWxsIGFsc28gYmUgaW4gdGhlIGxpc3Qgb2YgYW5pbWF0aW9ucykuCi0gICAgICAgICAgICBUYXJn
ZXRQcm9wZXJ0aWVzIGVucXVldWVkUHJvcGVydGllczsKLSAgICAgICAgICAgIGVucXVldWVkUHJv
cGVydGllcy5hZGQobV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpKTsKLSAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9ucy5z
aXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
Pmdyb3VwKCkgPT0gbV9hY3RpdmVBbmltYXRpb25zW2pdLT5ncm91cCgpKQotICAgICAgICAgICAg
ICAgICAgICBlbnF1ZXVlZFByb3BlcnRpZXMuYWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+dGFy
Z2V0UHJvcGVydHkoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIHRv
IHNlZSBpZiBpbnRlcnNlY3Rpb24gb2YgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyBhZmZlY3RlZCBi
eSB0aGUgZ3JvdXAgYW5kIHRoZSBsaXN0IG9mIGN1cnJlbnRseQotICAgICAgICAgICAgLy8gYmxv
Y2tlZCBwcm9wZXJ0aWVzIGlzIG51bGwuIEluIGFueSBjYXNlLCB0aGUgZ3JvdXAncyB0YXJnZXQg
cHJvcGVydGllcyBuZWVkIHRvIGJlIGFkZGVkIHRvIHRoZSBsaXN0Ci0gICAgICAgICAgICAvLyBv
ZiBibG9ja2VkIHByb3BlcnRpZXMuCi0gICAgICAgICAgICBib29sIG51bGxJbnRlcnNlY3Rpb24g
PSB0cnVlOwotICAgICAgICAgICAgZm9yIChUYXJnZXRQcm9wZXJ0aWVzOjppdGVyYXRvciBwSXRl
ciA9IGVucXVldWVkUHJvcGVydGllcy5iZWdpbigpOyBwSXRlciAhPSBlbnF1ZXVlZFByb3BlcnRp
ZXMuZW5kKCk7ICsrcEl0ZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWJsb2NrZWRQcm9wZXJ0
aWVzLmFkZCgqcEl0ZXIpLnNlY29uZCkKLSAgICAgICAgICAgICAgICAgICAgbnVsbEludGVyc2Vj
dGlvbiA9IGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJZiB0aGUgaW50
ZXJzZWN0aW9uIGlzIG51bGwsIHRoZW4gd2UgYXJlIGZyZWUgdG8gc3RhcnQgdGhlIGFuaW1hdGlv
bnMgaW4gdGhlIGdyb3VwLgotICAgICAgICAgICAgaWYgKG51bGxJbnRlcnNlY3Rpb24pIHsKLSAg
ICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZl
QW5pbWF0aW9uOjpSdW5uaW5nLCBtb25vdG9uaWNUaW1lKTsKLSAgICAgICAgICAgICAgICBtX2Fj
dGl2ZUFuaW1hdGlvbnNbaV0tPnNldFN0YXJ0VGltZShtb25vdG9uaWNUaW1lKTsKLSAgICAgICAg
ICAgICAgICBldmVudHMuYXBwZW5kKENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50OjpjcmVhdGUobV9j
bGllbnQtPmlkKCkpKTsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGog
PCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBtX2FjdGl2ZUFuaW1hdGlvbnNb
al0tPmdyb3VwKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9u
c1tqXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG1vbm90b25pY1Rp
bWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRT
dGFydFRpbWUobW9ub3RvbmljVGltZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpyZXNvbHZlQ29uZmxpY3RzKGRvdWJsZSBtb25v
dG9uaWNUaW1lKQotewotICAgIC8vIEZpbmQgYW55IGFuaW1hdGlvbnMgdGhhdCBhcmUgYW5pbWF0
aW5nIHRoZSBzYW1lIHByb3BlcnR5IGFuZCByZXNvbHZlIHRoZQotICAgIC8vIGNvbmZpY3QuIFdl
IGNvdWxkIGV2ZW50dWFsbHkgYmxlbmQsIGJ1dCBmb3Igbm93IHdlJ2xsIGp1c3QgYWJvcnQgdGhl
Ci0gICAgLy8gcHJldmlvdXMgYW5pbWF0aW9uICh3aGVyZSAncHJldmlvdXMnIG1lYW5zOiAoMSkg
aGFzIGEgcHJpb3Igc3RhcnQgdGltZSBvcgotICAgIC8vICgyKSBoYXMgYW4gZXF1YWwgc3RhcnQg
dGltZSwgYnV0IHdhcyBhZGRlZCB0byB0aGUgcXVldWUgZWFybGllciwgaS5lLiwKLSAgICAvLyBo
YXMgYSBsb3dlciBpbmRleCBpbiBtX2FjdGl2ZUFuaW1hdGlvbnMpLgotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246
OlJ1bm5pbmcpIHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0
aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2
ZUFuaW1hdGlvbnNbal0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcg
JiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IG1fYWN0aXZlQW5p
bWF0aW9uc1tqXS0+dGFyZ2V0UHJvcGVydHkoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
bV9hY3RpdmVBbmltYXRpb25zW2ldLT5zdGFydFRpbWUoKSA+IG1fYWN0aXZlQW5pbWF0aW9uc1tq
XS0+c3RhcnRUaW1lKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlv
bnNbal0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCBtb25vdG9uaWNU
aW1lKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
bV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJv
cnRlZCwgbW9ub3RvbmljVGltZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bDo6cHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMoQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImIGV2ZW50
cykKLXsKLSAgICAvLyBFYWNoIGl0ZXJhdGlvbiwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKSBk
ZWNyZWFzZXMgb3IgaSBpbmNyZW1lbnRzLAotICAgIC8vIGd1YXJhbnRlZWluZyBwcm9ncmVzcyB0
b3dhcmRzIGxvb3AgdGVybWluYXRpb24uCi0gICAgc2l6ZV90IGkgPSAwOwotICAgIHdoaWxlIChp
IDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKSkgewotICAgICAgICBib29sIGFsbEFuaW1zV2l0
aFNhbWVJZEFyZUZpbmlzaGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPmlzRmluaXNoZWQoKSkgewotICAgICAgICAgICAgYWxsQW5pbXNXaXRoU2FtZUlkQXJl
RmluaXNoZWQgPSB0cnVlOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwg
bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPmdy
b3VwKCkgJiYgIW1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+aXNGaW5pc2hlZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBpZiAoYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQpIHsK
LSAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50OjpjcmVh
dGUobV9jbGllbnQtPmlkKCksIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aWQoKSkpOwotICAgICAg
ICAgICAgbV9maW5pc2hlZEFuaW1hdGlvbnMuYXBwZW5kKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+
c2lnbmF0dXJlKCkpOwotICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpKys7Ci0gICAgfQotfQotCi12b2lkIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6dGlja0FuaW1hdGlvbnMoZG91YmxlIG1vbm90b25p
Y1RpbWUpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3Rh
dGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZykgewotICAgICAgICAgICAgZG91Ymxl
IHRyaW1tZWQgPSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0
aW9uKG1vbm90b25pY1RpbWUpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSkgewotCi0gICAgICAgICAgICBjYXNlIENDQWN0aXZl
QW5pbWF0aW9uOjpUcmFuc2Zvcm06IHsKLSAgICAgICAgICAgICAgICBjb25zdCBDQ1RyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlKiB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA9IG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+Y3VydmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOwotICAgICAgICAg
ICAgICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IHRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlLT5nZXRWYWx1ZSh0cmltbWVkLCBtX2NsaWVudC0+Ym91bmRzKCkpOwotICAgICAg
ICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlzRmluaXNoZWRBdChtb25vdG9u
aWNUaW1lKSkKLSAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRS
dW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQsIG1vbm90b25pY1RpbWUpOwotCi0g
ICAgICAgICAgICAgICAgbV9jbGllbnQtPnNldFRyYW5zZm9ybShtYXRyaXgpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5OiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ0NGbG9hdEFuaW1h
dGlvbkN1cnZlKiBmbG9hdEFuaW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT5j
dXJ2ZSgpLT50b0Zsb2F0QW5pbWF0aW9uQ3VydmUoKTsKLSAgICAgICAgICAgICAgICBjb25zdCBm
bG9hdCBvcGFjaXR5ID0gZmxvYXRBbmltYXRpb25DdXJ2ZS0+Z2V0VmFsdWUodHJpbW1lZCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG1v
bm90b25pY1RpbWUpKQotICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCwgbW9ub3RvbmljVGltZSk7
Ci0KLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfSAvLyBzd2l0
Y2gKLSAgICAgICAgfSAvLyBpZiBydW5uaW5nCi0gICAgfSAvLyBmb3IgZWFjaCBhbmltYXRpb24K
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODkzOTZiZDk1OTFmYjc0MzI1ZDgyNWI2YWY5YWFhNDE1YWFkMDU3MS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaAor
KysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsX2gKLSNkZWZpbmUgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsX2gKLQotI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCi0jaW5j
bHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgotI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uRXZl
bnRzLmgiCi0KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw7Ci1jbGFzcyBJbnRTaXplOwotY2xh
c3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7Ci1jbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb25zOwotCi1j
bGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgewotcHVibGljOgotICAg
IHZpcnR1YWwgfkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCgpIHsgfQotCi0g
ICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KSA9IDA7Ci0g
ICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmKSA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCA9
IDA7Ci19OwotCi1jbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwgewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCk7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
PiBjcmVhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50Kik7Ci0KLSAgICB2
aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoKTsKLQotICAgIHZvaWQgYW5p
bWF0ZShkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImKTsKLQot
ICAgIHZvaWQgYWRkKFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+KTsKLQotICAgIC8vIFJl
dHVybnMgdGhlIGFjdGl2ZSBhbmltYXRpb24gaW4gdGhlIGdpdmVuIGdyb3VwLCBhbmltYXRpbmcg
dGhlIGdpdmVuIHByb3BlcnR5IGlmIHN1Y2ggYW4KLSAgICAvLyBhbmltYXRpb24gZXhpc3RzLgot
ICAgIENDQWN0aXZlQW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3VwSWQsIEND
QWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlcmUgYXJlIGFueSBhbmltYXRpb25zIHRoYXQgYXJlIG5laXRoZXIgZmluaXNoZWQgbm9y
IGFib3J0ZWQuCi0gICAgYm9vbCBoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdDsKLQotICAgIGJv
b2wgaXNBbmltYXRpbmdQcm9wZXJ0eShDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkp
IGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjsKLQotICAgIC8vIFRoZSBhbmltYXRvciBpcyBvd25lZCBieSB0aGUgbGF5ZXIuCi0g
ICAgZXhwbGljaXQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbENsaWVudCopOwotCi0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNXYWl0
aW5nRm9yTmV4dFRpY2soZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yJik7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGRvdWJs
ZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYpOwotICAgIHZvaWQgc3Rh
cnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShkb3VibGUgbW9ub3Rvbmlj
VGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImKTsKLSAgICB2b2lkIHJlc29sdmVDb25mbGlj
dHMoZG91YmxlIG1vbm90b25pY1RpbWUpOwotICAgIHZvaWQgcHVyZ2VGaW5pc2hlZEFuaW1hdGlv
bnMoQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImKTsKLQotICAgIHZvaWQgdGlja0FuaW1hdGlvbnMo
ZG91YmxlIG1vbm90b25pY1RpbWUpOwotCi0gICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsQ2xpZW50KiBtX2NsaWVudDsKLSAgICBWZWN0b3I8T3duUHRyPENDQWN0aXZlQW5pbWF0aW9u
PiA+IG1fYWN0aXZlQW5pbWF0aW9uczsKLSAgICBWZWN0b3I8Q0NBY3RpdmVBbmltYXRpb246OkFu
aW1hdGlvblNpZ25hdHVyZT4gbV9maW5pc2hlZEFuaW1hdGlvbnM7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxf
aAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZS5oCmluZGV4IGE3
NjRjYzM3YmRjYzdlZTNlODlhN2U4NzJiZWQwMjVlNjJjYjFkYTguLjRjODhhOTIxMWVjNDA3M2Jh
N2E0OTYwMzQ3ZWMwMWZiY2M4M2RkMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25EZWxlZ2F0ZS5oCkBAIC0zMSw3ICszMSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoZG91YmxlIHRpbWUpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoaW50IGFuaW1hdGlvbklkKSA9IDA7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggYWQzNDBm
OGYxZGQzYzVkMTYzMzZlYThmMjg2NDllMTgwYTU4Y2ZlNS4uNTc4Y2NiYzA5NWE4NTM1MzQ1MWVl
ZjNiMjJkMjRhOTNmMDgzYTUzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMzMsNyAr
MzMsNiBAQAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRl
cmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaCIKLSNp
bmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKQEAgLTY4LDcgKzY3LDcgQEAgQ0NMYXllcklt
cGw6OkNDTGF5ZXJJbXBsKGludCBpZCkKICAgICAsIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZyhm
YWxzZSkKICAgICAsIG1fZGVidWdCb3JkZXJDb2xvcigwLCAwLCAwLCAwKQogICAgICwgbV9kZWJ1
Z0JvcmRlcldpZHRoKDApCi0gICAgLCBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlcihDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSh0aGlzKSkKKyAgICAsIG1fbGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUodGhpcykp
CiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIH0KQEAgLTMwOCw2ICsz
MDcsMTYgQEAgdm9pZCBDQ0xheWVySW1wbDo6cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRy
ZWUoKQogICAgICAgICBtX2NoaWxkcmVuW2ldLT5yZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3Vi
dHJlZSgpOwogfQogCit2b2lkIENDTGF5ZXJJbXBsOjpzZXRBbmltYXRlZE9wYWNpdHkoZmxvYXQg
YW5pbWF0ZWRPcGFjaXR5KQoreworICAgIHNldE9wYWNpdHkoYW5pbWF0ZWRPcGFjaXR5KTsKK30K
Kwordm9pZCBDQ0xheWVySW1wbDo6c2V0QW5pbWF0ZWRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIGFuaW1hdGVkVHJhbnNmb3JtKQoreworICAgIHNldFRyYW5zZm9ybShhbmlt
YXRlZFRyYW5zZm9ybSk7Cit9CisKIHZvaWQgQ0NMYXllckltcGw6OnNldEJvdW5kcyhjb25zdCBJ
bnRTaXplJiBib3VuZHMpCiB7CiAgICAgaWYgKG1fYm91bmRzID09IGJvdW5kcykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5oCmluZGV4IGU1MWE1OTJlYTc1ODExYTg4ZDA1NmZkZWNmYjA0MDk1ZjViODZhY2Mu
LjY4OTczY2Y0ZDVlOWEyMTQ1YmViOWQ2Njg1ODA0OWViNTU0ZjM2MDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuaApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUg
IlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1
ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgorI2luY2x1ZGUgImNjL0ND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNl
LmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CkBAIC00OCwyOCArNDgsMjMgQEAgY2xhc3MgQ0NRdWFkQ3VsbGVyOwogY2xhc3MgTGF5
ZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIAotY2xhc3MgQ0NMYXll
ckltcGwgOiBwdWJsaWMgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IHsKK2Ns
YXNzIENDTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVySW1wbD4gY3JlYXRlKGlu
dCBpZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllckltcGwoaWQp
KTsKICAgICB9CiAKLSAgICAvLyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQg
aW1wbGVtZW50YXRpb24uCi0gICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2xh
eWVySWQ7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKLSAgICB2aXJ0
dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KLSAgICBib29s
IG9wYWNpdHlJc0FuaW1hdGluZygpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwotICAgIHZpcnR1YWwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3Jt
OyB9Ci0gICAgYm9vbCB0cmFuc2Zvcm1Jc0FuaW1hdGluZygpIGNvbnN0OworICAgIHZpcnR1YWwg
fkNDTGF5ZXJJbXBsKCk7CiAKKyAgICAvLyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVu
dCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGF5ZXJJZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRBbmltYXRlZE9wYWNpdHkoZmxvYXQpOwor
ICAgIHZpcnR1YWwgZmxvYXQgYW5pbWF0ZWRPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFj
aXR5OyB9CisgICAgdmlydHVhbCB2b2lkIHNldEFuaW1hdGVkVHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4Jik7CisgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgYW5pbWF0ZWRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQogICAg
IHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7
IH0KIAotICAgIHZpcnR1YWwgfkNDTGF5ZXJJbXBsKCk7Ci0KICAgICAvLyBUcmVlIHN0cnVjdHVy
ZS4KICAgICBDQ0xheWVySW1wbCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0K
ICAgICBjb25zdCBWZWN0b3I8T3duUHRyPENDTGF5ZXJJbXBsPiA+JiBjaGlsZHJlbigpIGNvbnN0
IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KQEAgLTEyNCw2ICsxMTksMTAgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0T3BhcXVlKGJvb2wpOwogICAgIGJvb2wgb3BhcXVlKCkgY29uc3QgeyByZXR1cm4g
bV9vcGFxdWU7IH0KIAorICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7CisgICAgZmxvYXQgb3Bh
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQorICAgIGJvb2wgb3BhY2l0eUlzQW5p
bWF0aW5nKCkgY29uc3Q7CisKICAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
KTsKICAgICBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9z
aXRpb247IH0KIApAQCAtMjA4LDYgKzIwNywxMCBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0
aGUgcmVjdCBjb250YWludGFpbmluZyB0aGlzIGxheWVyIGluIHRoZSBjdXJyZW50IHZpZXcncyBj
b29yZGluYXRlIHN5c3RlbS4KICAgICBjb25zdCBJbnRSZWN0IGdldERyYXdSZWN0KCkgY29uc3Q7
CiAKKyAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwor
ICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBtX3RyYW5zZm9ybTsgfQorICAgIGJvb2wgdHJhbnNmb3JtSXNBbmltYXRpbmcoKSBjb25zdDsK
KwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9CiAgICAgdm9pZCBzZXREcmF3VHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpIHsgbV9kcmF3VHJhbnNmb3JtID0gbWF0
cml4OyB9CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjcmVlblNwYWNlVHJhbnNm
b3JtKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5TcGFjZVRyYW5zZm9ybTsgfQpAQCAtMjIyLDcg
KzIyNSw3IEBAIHB1YmxpYzoKICAgICBib29sIGxheWVyUHJvcGVydHlDaGFuZ2VkKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXllclByb3BlcnR5Q2hhbmdlZDsgfQogICAgIHZvaWQgcmVzZXRBbGxDaGFu
Z2VUcmFja2luZ0ZvclN1YnRyZWUoKTsKIAotICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbCogbGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkgeyByZXR1cm4gbV9sYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIuZ2V0KCk7IH0KKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciogbGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKCkgeyByZXR1cm4gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIuZ2V0KCk7IH0KIAogICAgIHZpcnR1YWwgUmVnaW9uIG9wYXF1ZUNvbnRlbnRzUmVnaW9uKCkg
Y29uc3QgeyByZXR1cm4gUmVnaW9uKCk7IH07CiAKQEAgLTM1MCw3ICszNTMsNyBAQCBwcml2YXRl
OgogICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJlY3Q7CiAKICAgICAvLyBNYW5hZ2VzIGFuaW1hdGlv
bnMgZm9yIHRoaXMgbGF5ZXIuCi0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbD4gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CisgICAgT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyPiBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjsKIH07CiAKIHZvaWQg
c29ydExheWVycyhWZWN0b3I8Q0NMYXllckltcGwqPjo6aXRlcmF0b3IgZmlyc3QsIFZlY3RvcjxD
Q0xheWVySW1wbCo+OjppdGVyYXRvciBlbmQsIENDTGF5ZXJTb3J0ZXIqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDAxNzgyMGE3YzcwZTFiOTNmYzYyYTRkZjQ3NjY0NTI4
Njk3MDM1YTEuLjMwNDM0YjI5ZmVmYzFjYzBiNzEwMmE5Mjc0ZTY3NzliYjJiZmUwOGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJUcmVlU3luY2hy
b25pemVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCkBAIC02NCw2
ICs2NSw3IEBAIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBDQ0xheWVyVHJlZUhvc3Q6OmNy
ZWF0ZShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVuCiBDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5
ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5n
cyYgc2V0dGluZ3MpCiAgICAgOiBtX2NvbXBvc2l0b3JJZGVudGlmaWVyKC0xKQogICAgICwgbV9h
bmltYXRpbmcoZmFsc2UpCisgICAgLCBtX25lZWRzQW5pbWF0ZUxheWVycyhmYWxzZSkKICAgICAs
IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fZnJhbWVOdW1iZXIoMCkKICAgICAsIG1fbGF5ZXJS
ZW5kZXJlckluaXRpYWxpemVkKGZhbHNlKQpAQCAtMTgxLDYgKzE4Myw3IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0Ojp1cGRhdGVBbmltYXRpb25zKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKIHsKICAg
ICBtX2FuaW1hdGluZyA9IHRydWU7CiAgICAgbV9jbGllbnQtPnVwZGF0ZUFuaW1hdGlvbnMoZnJh
bWVCZWdpblRpbWUpOworICAgIGFuaW1hdGVMYXllcnMoZnJhbWVCZWdpblRpbWUpOwogICAgIG1f
YW5pbWF0aW5nID0gZmFsc2U7CiB9CiAKQEAgLTIxMCw4ICsyMTMsMTAgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBo
b3N0SW1wbCkKICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5
bmNocm9uaXplVHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5yZWxlYXNlUm9vdExheWVyKCkp
KTsKIAogICAgIC8vIFdlIG1heSBoYXZlIGFkZGVkIGFuIGFuaW1hdGlvbiBkdXJpbmcgdGhlIHRy
ZWUgc3luYy4gVGhpcyB3aWxsIGNhdXNlIGhvc3RJbXBsIHRvIHZpc2l0IGl0cyBjb250cm9sbGVy
cy4KLSAgICBpZiAocm9vdExheWVyKCkpCisgICAgaWYgKHJvb3RMYXllcigpKSB7CiAgICAgICAg
IGhvc3RJbXBsLT5zZXROZWVkc0FuaW1hdGVMYXllcnMoKTsKKyAgICAgICAgbV9uZWVkc0FuaW1h
dGVMYXllcnMgPSB0cnVlOworICAgIH0KIAogICAgIGhvc3RJbXBsLT5zZXRTb3VyY2VGcmFtZU51
bWJlcihmcmFtZU51bWJlcigpKTsKICAgICBob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHZpZXdw
b3J0U2l6ZSgpKTsKQEAgLTM4Nyw4ICszOTIsMTAgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRp
ZEJlY29tZUludmlzaWJsZU9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW0K
ICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXpl
VHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5yZWxlYXNlUm9vdExheWVyKCkpKTsKIAogICAg
IC8vIFdlIG1heSBoYXZlIGFkZGVkIGFuIGFuaW1hdGlvbiBkdXJpbmcgdGhlIHRyZWUgc3luYy4g
VGhpcyB3aWxsIGNhdXNlIGhvc3RJbXBsIHRvIHZpc2l0IGl0cyBjb250cm9sbGVycy4KLSAgICBp
ZiAocm9vdExheWVyKCkpCisgICAgaWYgKHJvb3RMYXllcigpKSB7CiAgICAgICAgIGhvc3RJbXBs
LT5zZXROZWVkc0FuaW1hdGVMYXllcnMoKTsKKyAgICAgICAgbV9uZWVkc0FuaW1hdGVMYXllcnMg
PSB0cnVlOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UGFnZVNjYWxl
QW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLCBib29sIHVzZUFuY2hvciwg
ZmxvYXQgc2NhbGUsIGRvdWJsZSBkdXJhdGlvblNlYykKQEAgLTY0Miw2ICs2NDksMzMgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OmRlbGV0ZVRleHR1cmVBZnRlckNvbW1pdChQYXNzT3duUHRyPE1h
bmFnZWRUZXh0dXJlPiB0ZXh0dXIKICAgICBtX2RlbGV0ZVRleHR1cmVBZnRlckNvbW1pdExpc3Qu
YXBwZW5kKHRleHR1cmUpOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUxheWVy
cyhkb3VibGUgbW9ub3RvbmljVGltZSkKK3sKKyAgICBpZiAoIW1fc2V0dGluZ3MudGhyZWFkZWRB
bmltYXRpb25FbmFibGVkIHx8ICFtX25lZWRzQW5pbWF0ZUxheWVycyB8fCAhbV9yb290TGF5ZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBs
OjphbmltYXRlTGF5ZXJzIiwgdGhpcywgMCk7CisgICAgbV9uZWVkc0FuaW1hdGVMYXllcnMgPSBh
bmltYXRlTGF5ZXJzUmVjdXJzaXZlKG1fcm9vdExheWVyLmdldCgpLCBtb25vdG9uaWNUaW1lKTsK
K30KKworYm9vbCBDQ0xheWVyVHJlZUhvc3Q6OmFuaW1hdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJD
aHJvbWl1bSogY3VycmVudCwgZG91YmxlIG1vbm90b25pY1RpbWUpCit7CisgICAgYm9vbCBzdWJ0
cmVlTmVlZHNBbmltYXRlTGF5ZXJzID0gZmFsc2U7CisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIqIGN1cnJlbnRDb250cm9sbGVyID0gY3VycmVudC0+bGF5ZXJBbmltYXRpb25Db250cm9s
bGVyKCk7CisgICAgY3VycmVudENvbnRyb2xsZXItPmFuaW1hdGUobW9ub3RvbmljVGltZSwgMCk7
CisKKyAgICAvLyBJZiB0aGUgY3VycmVudCBjb250cm9sbGVyIHN0aWxsIGhhcyBhbiBhY3RpdmUg
YW5pbWF0aW9uLCB3ZSBtdXN0IGNvbnRpbnVlIGFuaW1hdGluZyBsYXllcnMuCisgICAgaWYgKGN1
cnJlbnRDb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSkKKyAgICAgICAgIHN1YnRyZWVO
ZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
dXJyZW50LT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChhbmltYXRlTGF5
ZXJzUmVjdXJzaXZlKGN1cnJlbnQtPmNoaWxkcmVuKClbaV0uZ2V0KCksIG1vbm90b25pY1RpbWUp
KQorICAgICAgICAgICAgc3VidHJlZU5lZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7CisgICAgfQor
CisgICAgcmV0dXJuIHN1YnRyZWVOZWVkc0FuaW1hdGVMYXllcnM7Cit9CisKIHZvaWQgQ0NMYXll
clRyZWVIb3N0OjpzZXRBbmltYXRpb25FdmVudHNSZWN1cnNpdmUoY29uc3QgQ0NBbmltYXRpb25F
dmVudHNWZWN0b3ImIGV2ZW50cywgTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGRvdWJsZSB3YWxsQ2xv
Y2tUaW1lKQogewogICAgIGZvciAoc2l6ZV90IGV2ZW50SW5kZXggPSAwOyBldmVudEluZGV4IDwg
ZXZlbnRzLnNpemUoKTsgKytldmVudEluZGV4KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5o
CmluZGV4IDg5ZjFiZTMwN2VkZmM5MTZkNjA5ZTA4NWEzNTUyMjY3NzYyM2VjODcuLmY3NDlhNmIw
M2QxN2Y0NGVkNjE5ODRmZTk4MDJhYTAxMGQ4ZTYxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5oCkBAIC0yMjUsMTEgKzIyNSwxNCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzZXJ2ZVRl
eHR1cmVzKCk7CiAgICAgdm9pZCBjbGVhclBlbmRpbmdVcGRhdGUoKTsKIAorICAgIHZvaWQgYW5p
bWF0ZUxheWVycyhkb3VibGUgbW9ub3RvbmljVGltZSk7CisgICAgYm9vbCBhbmltYXRlTGF5ZXJz
UmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGN1cnJlbnQsIGRvdWJsZSBtb25vdG9uaWNUaW1lKTsK
ICAgICB2b2lkIHNldEFuaW1hdGlvbkV2ZW50c1JlY3Vyc2l2ZShjb25zdCBDQ0FuaW1hdGlvbkV2
ZW50c1ZlY3RvciYsIExheWVyQ2hyb21pdW0qLCBkb3VibGUgd2FsbENsb2NrVGltZSk7CiAKICAg
ICBpbnQgbV9jb21wb3NpdG9ySWRlbnRpZmllcjsKIAogICAgIGJvb2wgbV9hbmltYXRpbmc7Cisg
ICAgYm9vbCBtX25lZWRzQW5pbWF0ZUxheWVyczsKIAogICAgIENDTGF5ZXJUcmVlSG9zdENsaWVu
dCogbV9jbGllbnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3Bw
CmluZGV4IGRiNjMxNWM0OTU3NDg4OTFhYjY0MGI5ZTRiZjJlOWE2OTZmMzE4OTkuLjVjM2ZkNDhi
NWYyZWZhZmVlMjVmZDQ5NDdmZmNlOTNhZWU0ZDIyOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkxheWVy
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9u
LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKaW5kZXggZWJlMDZmNTEwZTk2ZDVkMDdkN2Q3MGY3ZTYzYzU5MzY0NWE2NGQ0NC4u
NGNlNmFmNDBjZWM5OWJkYmQ2N2ZjYjg1MTY3OTkyNDNiZGQ2YmY2MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTMxMCwxNSArMzEwLDE1IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3Qm
IHBhc3NlcywgQ0NMYXllCiAgICAgb2NjbHVzaW9uVHJhY2tlci5vdmVyZHJhd01ldHJpY3MoKS5y
ZWNvcmRNZXRyaWNzKHRoaXMpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1h
dGVMYXllcnNSZWN1cnNpdmUoQ0NMYXllckltcGwqIGN1cnJlbnQsIGRvdWJsZSBtb25vdG9uaWNU
aW1lLCBkb3VibGUgd2FsbENsb2NrVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImIGV2ZW50
cywgYm9vbCYgZGlkQW5pbWF0ZSwgYm9vbCYgbmVlZHNBbmltYXRlTGF5ZXJzKQordm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzUmVjdXJzaXZlKENDTGF5ZXJJbXBsKiBjdXJy
ZW50LCBkb3VibGUgbW9ub3RvbmljVGltZSwgZG91YmxlIHdhbGxDbG9ja1RpbWUsIENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yKiBldmVudHMsIGJvb2wmIGRpZEFuaW1hdGUsIGJvb2wmIG5lZWRzQW5p
bWF0ZUxheWVycykKIHsKICAgICBib29sIHN1YnRyZWVOZWVkc0FuaW1hdGVMYXllcnMgPSBmYWxz
ZTsKIAotICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY3VycmVudENvbnRyb2xs
ZXIgPSBjdXJyZW50LT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlciogY3VycmVudENvbnRyb2xsZXIgPSBjdXJyZW50LT5sYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIoKTsKIAogICAgIGJvb2wgaGFkQWN0aXZlQW5pbWF0aW9uID0gY3VycmVu
dENvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpOwogICAgIGN1cnJlbnRDb250cm9sbGVy
LT5hbmltYXRlKG1vbm90b25pY1RpbWUsIGV2ZW50cyk7Ci0gICAgYm9vbCBzdGFydGVkQW5pbWF0
aW9uID0gZXZlbnRzLnNpemUoKSA+IDA7CisgICAgYm9vbCBzdGFydGVkQW5pbWF0aW9uID0gZXZl
bnRzLT5zaXplKCkgPiAwOwogCiAgICAgLy8gV2UgYW5pbWF0ZWQgaWYgd2UgZWl0aGVyIHRpY2tl
ZCBhIHJ1bm5pbmcgYW5pbWF0aW9uLCBvciBzdGFydGVkIGEgbmV3IGFuaW1hdGlvbi4KICAgICBp
ZiAoaGFkQWN0aXZlQW5pbWF0aW9uIHx8IHN0YXJ0ZWRBbmltYXRpb24pCkBAIC03NzgsNyArNzc4
LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzKGRvdWJsZSBtb25v
dG9uaWNUaW1lLCBkb3VibGUgd2FsbENsb2NrVGkKICAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVu
dHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsK
IAogICAgIGJvb2wgZGlkQW5pbWF0ZSA9IGZhbHNlOwotICAgIGFuaW1hdGVMYXllcnNSZWN1cnNp
dmUobV9yb290TGF5ZXJJbXBsLmdldCgpLCBtb25vdG9uaWNUaW1lLCB3YWxsQ2xvY2tUaW1lLCAq
ZXZlbnRzLCBkaWRBbmltYXRlLCBtX25lZWRzQW5pbWF0ZUxheWVycyk7CisgICAgYW5pbWF0ZUxh
eWVyc1JlY3Vyc2l2ZShtX3Jvb3RMYXllckltcGwuZ2V0KCksIG1vbm90b25pY1RpbWUsIHdhbGxD
bG9ja1RpbWUsIGV2ZW50cy5nZXQoKSwgZGlkQW5pbWF0ZSwgbV9uZWVkc0FuaW1hdGVMYXllcnMp
OwogCiAgICAgaWYgKCFldmVudHMtPmlzRW1wdHkoKSkKICAgICAgICAgbV9jbGllbnQtPnBvc3RB
bmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoZXZlbnRzLnJlbGVhc2UoKSwg
d2FsbENsb2NrVGltZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXgg
M2JiN2QzZGUxNDEzNmVkYmJjOWYxOWVkZjg1MDQ3MjQzZGZiYmFhMy4uODI0MzVmY2U0MGM3ZDYx
Yjc5MWY3NThlMzkzODlhNzUzMzJhMGM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaApAQCAtMTYxLDcgKzE2MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVNYXhT
Y3JvbGxQb3NpdGlvbigpOwogICAgIHZvaWQgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xh
eWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpOwogICAgIHZvaWQgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xp
c3QmLCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0gICAgdm9pZCBhbmlt
YXRlTGF5ZXJzUmVjdXJzaXZlKENDTGF5ZXJJbXBsKiwgZG91YmxlIG1vbm90b25pY1RpbWUsIGRv
dWJsZSB3YWxsQ2xvY2tUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYsIGJvb2wmIGRpZEFu
aW1hdGUsIGJvb2wmIG5lZWRzQW5pbWF0ZUxheWVycyk7CisgICAgdm9pZCBhbmltYXRlTGF5ZXJz
UmVjdXJzaXZlKENDTGF5ZXJJbXBsKiwgZG91YmxlIG1vbm90b25pY1RpbWUsIGRvdWJsZSB3YWxs
Q2xvY2tUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciosIGJvb2wmIGRpZEFuaW1hdGUsIGJv
b2wmIG5lZWRzQW5pbWF0ZUxheWVycyk7CiAgICAgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0
OwogICAgIHZvaWQgc2VuZERpZExvc2VDb250ZXh0UmVjdXJzaXZlKENDTGF5ZXJJbXBsKik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKaW5kZXggMzI3ZDliZTBiMTIwZmI5ZWZkZWZmODA1
MzE4ODA1MzMwNmFiZGE0Yi4uZmM3NzVjM2VlODI1ZTE3MWJlZjRhZWIyNTc5YzQ3Yjk0OWMzNjI1
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAgLTM5Myw4ICszOTMsNyBAQCB2b2lk
IENDVGhyZWFkUHJveHk6OnNjaGVkdWxlZEFjdGlvbkJlZ2luRnJhbWUoKQogewogICAgIFRSQUNF
X0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6c2NoZWR1bGVkQWN0aW9uQmVnaW5GcmFtZSIp
OwogICAgIEFTU0VSVCghbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QpOwotICAgIG1fcGVuZGlu
Z0JlZ2luRnJhbWVSZXF1ZXN0ID0gYWRvcHRQdHIobmV3IEJlZ2luRnJhbWVBbmRDb21taXRTdGF0
ZSgpKTsKLSAgICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdC0+ZnJhbWVCZWdpblRpbWUgPSAw
OworICAgIG1fcGVuZGluZ0JlZ2luRnJhbWVSZXF1ZXN0ID0gYWRvcHRQdHIobmV3IEJlZ2luRnJh
bWVBbmRDb21taXRTdGF0ZShtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSkpOwogICAgIG1f
cGVuZGluZ0JlZ2luRnJhbWVSZXF1ZXN0LT5zY3JvbGxJbmZvID0gbV9sYXllclRyZWVIb3N0SW1w
bC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwogCiAgICAgbV9tYWluVGhyZWFkUHJveHktPnBvc3RU
YXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCmluZGV4IDllNTI0YTc2M2UyODUwZmQyMDljMTNlMzUy
NjEyZWM1Y2EzMDQ5ZTEuLmFhZjJmNzJiZTIyODM3ZjZlYjA0NTI3ZDJhZDUyN2UxYmM3YzYyOWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAgLTkyLDcgKzkyLDcgQEAgcHJpdmF0ZToKIAog
ICAgIC8vIFNldCBvbiBpbXBsIHRocmVhZCwgcmVhZCBvbiBtYWluIHRocmVhZC4KICAgICBzdHJ1
Y3QgQmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlIHsKLSAgICAgICAgQmVnaW5GcmFtZUFuZENvbW1p
dFN0YXRlKCkgOiBmcmFtZUJlZ2luVGltZSgwKSB7IH0KKyAgICAgICAgQmVnaW5GcmFtZUFuZENv
bW1pdFN0YXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgOiBmcmFtZUJlZ2luVGltZShmcmFtZUJl
Z2luVGltZSkgeyB9CiAgICAgICAgIGRvdWJsZSBmcmFtZUJlZ2luVGltZTsKICAgICAgICAgT3du
UHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm87CiAgICAgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXBpCmluZGV4IDZhNjM0MTZiNjlkYjEyNmEyMDk5M2VmZTJjNWNlMTBkY2Rm
MDU1MWIuLmUyNjdhNWJkM2RiOTNjZGIyYzdmODkyYzIxNmI4OTcyZjMzMzdmMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNjcsNyArNjcsNiBAQAogICAgICAgICAgICAgJ3Rl
c3RzL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDS2V5
ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LmNwcCcsCi0gICAgICAgICAgICAndGVzdHMvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ND
TGF5ZXJJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRl
c3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmlt
YXRpb25UZXN0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmlt
YXRpb25UZXN0Q29tbW9uLmNwcAppbmRleCBjOTI0MGUzMWZjYzZiN2YwMGMxYjY5MzdmYTc2OTFi
YjAzYjQ1ZGMzLi5jMjJlNDMyMmI5MTc4NGY4MjFhY2MyMmQ3ZDYxNjM2ZGU1NjVhODlmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1v
bi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RD
b21tb24uY3BwCkBAIC0xMDYsMTIgKzEwNiwxMiBAQCBmbG9hdCBGYWtlRmxvYXRUcmFuc2l0aW9u
OjpnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3QKICAgICByZXR1cm4gKDEgLSB0aW1lKSAqIG1f
ZnJvbSArIHRpbWUgKiBtX3RvOwogfQogCi1GYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bENsaWVudDo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQoKQorRmFrZUxh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudDo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckNsaWVudCgpCiAgICAgOiBtX29wYWNpdHkoMCkKIHsKIH0KIAotRmFrZUxheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxDbGllbnQ6On5GYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENs
aWVudCgpCitGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50Ojp+RmFrZUxheWVyQW5p
bWF0aW9uQ29udHJvbGxlckNsaWVudCgpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oCmluZGV4IGQxM2U3NGNhMTcx
ZWU5MzliYzYxMGY5MzRiMDMzODZkMTY3NjdkY2UuLjIzYTg4ZjdkNmNjNjg5MmQzODMxMmY2YmVj
Yjg5OWQyYzMzYWMwYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NBbmltYXRpb25UZXN0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaApAQCAtMjYsMTIgKzI2LDExIEBACiAjZGVmaW5lIEND
QW5pbWF0aW9uVGVzdENvbW1vbl9oCiAKICNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgi
Ci0jaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCisjaW5jbHVk
ZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI7CiBjbGFzcyBMYXllckNocm9taXVtOwogfQogCkBAIC03NywxNiArNzYsMTcgQEAgcHJp
dmF0ZToKICAgICBmbG9hdCBtX3RvOwogfTsKIAotY2xhc3MgRmFrZUxheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsQ2xpZW50IHsKK2NsYXNzIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGll
bnQgOiBwdWJsaWMgV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgewog
cHVibGljOgotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KCk7Ci0g
ICAgdmlydHVhbCB+RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQoKTsKKyAg
ICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KCk7CisgICAgdmlydHVhbCB+RmFr
ZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCgpOwogCisgICAgLy8gQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJDbGllbnQgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFsIGludCBpZCgp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7
IHJldHVybiBtX29wYWNpdHk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCBv
cGFjaXR5KSB7IG1fb3BhY2l0eSA9IG9wYWNpdHk7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IFdlYkNv
cmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3Ry
YW5zZm9ybTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9y
bTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRBbmltYXRlZE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkg
eyBtX29wYWNpdHkgPSBvcGFjaXR5OyB9CisgICAgdmlydHVhbCBmbG9hdCBhbmltYXRlZE9wYWNp
dHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5p
bWF0ZWRUcmFuc2Zvcm0oY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
Zm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgY29uc3QgV2Vi
Q29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIGFuaW1hdGVkVHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFuc2Zvcm07IH0KICAgICB2aXJ0dWFsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTFhZWNjYzUzOWE1ZDUxZGZmMThhMmJlN2M0MmVlYmExNDU3ZWZiZC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMzk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgotI2luY2x1ZGUgImNjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgotI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3Vy
dmUuaCIKLSNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgotI2luY2x1ZGUgPGdtb2Nr
L2dtb2NrLmg+Ci0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIFdlYktpdFRl
c3RzOwotCi1uYW1lc3BhY2UgewotCi1QYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVh
dGVBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgaW50
IGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJvcGVydHkpCi17Ci0gICAg
cmV0dXJuIENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUsIDAsIGlkLCBwcm9wZXJ0eSk7
Ci19Ci0KLS8vIFRlc3RzIHRoYXQgdHJhbnNpdGlvbmluZyBvcGFjaXR5IGZyb20gMCB0byAxIHdv
cmtzIGFzIGV4cGVjdGVkLgotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0
LCBUcml2aWFsVHJhbnNpdGlvbikKLXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0
b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBG
YWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIE93blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKLQotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFj
aXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNU
X0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKLX0KLQotLy8gVGVzdHMgdGhhdCB0d28gcXVldWVkIGFuaW1h
dGlvbnMgYWZmZWN0aW5nIHRoZSBzYW1lIHByb3BlcnR5IHJ1biBpbiBzZXF1ZW5jZS4KLVRFU1Qo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlhbFF1ZXVpbmcpCi17Ci0g
ICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IEND
QW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbD4gY29udHJvbGxlcigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpjcmVhdGUoJmR1bW15KSk7Ci0KLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYp
KSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5
KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX0VR
KDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKLX0KLQotLy8gVGVzdHMgaW50ZXJydXB0aW5nIGEgdHJhbnNp
dGlvbiB3aXRoIGFub3RoZXIgdHJhbnNpdGlvbi4KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdCwgSW50ZXJydXB0KQotewotICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50
c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwot
ICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93
blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0gICAgICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotICAgIGNv
bnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwot
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5v
cGFjaXR5KCkpOwotCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41
ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIHRvQWRkLT5zZXRSdW5T
dGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrLCAwKTsKLSAgICBjb250
cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLQotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MC41LCAqZXZlbnRzKTsgLy8gc2Vjb25kIGFuaW0gc3RhcnRzIE5PVy4KLSAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDEsIGR1
bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjUsICpldmVudHMpOwot
ICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIEVYUEVDVF9GQUxTRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci19Ci0KLS8vIFRlc3RzIHNjaGVkdWxp
bmcgdHdvIGFuaW1hdGlvbnMgdG8gcnVuIHRvZ2V0aGVyIHdoZW4gb25seSBvbmUgcHJvcGVydHkg
aXMgZnJlZS4KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1
bGVUb2dldGhlcldoZW5BUHJvcGVydHlJc0Jsb2NrZWQpCi17Ci0gICAgT3duUHRyPENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yKSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7
Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigK
LSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7
Ci0KLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5l
dyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFu
c2Zvcm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9u
OjpUcmFuc2Zvcm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMiwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50
cyk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMSwgKmV2ZW50cyk7Ci0gICAgLy8gU2hvdWxkIG5vdCBoYXZlIHN0YXJ0ZWQgdGhlIGZsb2F0
IHRyYW5zaXRpb24geWV0LgotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICAvLyBU
aGUgdGhlIGZsb2F0IGFuaW1hdGlvbiBzaG91bGQgaGF2ZSBzdGFydGVkIGF0IHRpbWUgMSBhbmQg
c2hvdWxkIGJlIGRvbmUuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKLSAg
ICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBFWFBFQ1RfRkFMU0UoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotfQotCi0vLyBUZXN0cyBzY2hlZHVsaW5nIHR3
byBhbmltYXRpb25zIHRvIHJ1biB0b2dldGhlciB3aXRoIGRpZmZlcmVudCBsZW5ndGhzIGFuZCBh
bm90aGVyCi0vLyBhbmltYXRpb24gcXVldWVkIHRvIHN0YXJ0IHdoZW4gdGhlIHNob3J0ZXIgYW5p
bWF0aW9uIGZpbmlzaGVzIChzaG91bGQgd2FpdAotLy8gZm9yIGJvdGggdG8gZmluaXNoKS4KLVRF
U1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldp
dGhBbkFuaW1XYWl0aW5nKQotewotICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4g
ZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwotICAgIEZha2VM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotCi0gICAgY29udHJvbGxl
ci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRy
YW5zaXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29u
dHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0g
ICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7Ci0KLSAgICAvLyBBbmltcyB3aXRoIGlkIDEgc2hvdWxkIGJvdGggc3RhcnQgbm93Lgot
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5v
cGFjaXR5KCkpOwotICAgIC8vIFRoZSBvcGFjaXR5IGFuaW1hdGlvbiBzaG91bGQgaGF2ZSBmaW5p
c2hlZCBhdCB0aW1lIDEsIGJ1dCB0aGUgZ3JvdXAKLSAgICAvLyBvZiBhbmltYXRpb25zIHdpdGgg
aWQgMSBkb24ndCBmaW5pc2ggdW50aWwgdGltZSAyIGJlY2F1c2Ugb2YgdGhlIGxlbmd0aAotICAg
IC8vIG9mIHRoZSB0cmFuc2Zvcm0gYW5pbWF0aW9uLgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MiwgKmV2ZW50cyk7Ci0gICAgLy8gU2hvdWxkIG5vdCBoYXZlIHN0YXJ0ZWQgdGhlIGZsb2F0IHRy
YW5zaXRpb24geWV0LgotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLQotICAgIC8vIFRo
ZSB0aGUgc2Vjb25kIG9wYWNpdHkgYW5pbWF0aW9uIHNob3VsZCBzdGFydCBhdCB0aW1lIDIgYW5k
IHNob3VsZCBiZQotICAgIC8vIGRvbmUgYnkgdGltZSAzCi0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgzLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAg
ICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotfQotCi0v
LyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlLgot
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZUFuaW1hdGlv
bikKLXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0
cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICB0
b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUs
IDApOwotICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7Ci0gICAgY29udHJvbGxlci0+YWRkKHRv
QWRkLnJlbGVhc2UoKSk7Ci0KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwot
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBF
WFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEs
ICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKLSAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVy
LT5hbmltYXRlKDIsICpldmVudHMpOwotICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkp
OwotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci19
Ci0KLS8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1
cmUgdGhhdCdzIGludGVycnVwdGluZyBhIHJ1bm5pbmcgYW5pbWF0aW9uLgotVEVTVChDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRz
UnVubmluZ0FuaW1hdGlvbikKLXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+
IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtl
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIGNvbnRyb2xs
ZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAg
T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1h
dGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7Ci0gICAgdG9BZGQtPnNldFN0YXJ0VGltZSgx
KTsKLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLQotICAgIC8vIEZpcnN0
IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCi0gICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHko
KSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsICpldmVudHMpOwotICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC4y
NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRz
KTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0g
ICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5p
bWF0ZSgyLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAg
ICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotfQotCi0v
LyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlIHRo
YXQgaW50ZXJydXB0cyBhIHJ1bm5pbmcgYW5pbWF0aW9uCi0vLyBhbmQgdGhlcmUgaXMgeWV0IGFu
b3RoZXIgYW5pbWF0aW9uIHF1ZXVlZCB0byBzdGFydCBsYXRlci4KLVRFU1QoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5p
bmdBbmltYXRpb25XaXRoQW5pbUluUXVldWUpCi17Ci0gICAgT3duUHRyPENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7
Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7Ci0gICAg
T3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKLSAgICAg
ICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0KLSAg
ICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKLQotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAuNWYsIDApKSwgMiwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NB
Y3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDApOwotICAgIHRvQWRkLT5zZXRT
dGFydFRpbWUoMSk7Ci0gICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7Ci0KLSAg
ICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDEsIDAsIDAuNzVmKSksIDMsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7Ci0KLSAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5zaXRpb24gc2hvdWxkIHN0YXJ0
IGltbWVkaWF0ZWx5LgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVD
VF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41LCAq
ZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7Ci0gICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBjb250cm9sbGVyLT5h
bmltYXRlKDEsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDMsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3Bh
Y2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDQsICpldmVudHMpOwotICAgIEVYUEVD
VF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotfQotCi0vLyBUZXN0IHRoYXQgYSBsb29waW5nIGFu
aW1hdGlvbiBsb29wcyBhbmQgZm9yIHRoZSBjb3JyZWN0IG51bWJlciBvZiBpdGVyYXRpb25zLgot
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2aWFsTG9vcGluZykK
LXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihu
ZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4g
dG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICB0b0Fk
ZC0+c2V0SXRlcmF0aW9ucygzKTsKLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgp
KTsKLQotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBk
dW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSwgKmV2ZW50cyk7
Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAg
IEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDEuNzUsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLjI1LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuMjVmLCBk
dW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi43NSwgKmV2ZW50cyk7
Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAg
IEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDMsICpldmVudHMpOwotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0KLSAgICAv
LyBKdXN0IGJlIGV4dHJhIHN1cmUuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSg0LCAqZXZlbnRz
KTsKLSAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLX0KLQotLy8gVGVzdCB0aGF0
IGFuIGluZmluaXRlbHkgbG9vcGluZyBhbmltYXRpb24gZG9lcyBpbmRlZWQgZ28gdW50aWwgYWJv
cnRlZC4KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW5maW5pdGVM
b29waW5nKQotewotICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFk
b3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwotICAgIEZha2VMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotCi0gICAgY29uc3QgaW50IGlkID0gMTsK
LSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKC0xKTsKLSAg
ICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLQotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMS4yNSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXku
b3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUsICpldmVudHMpOwotICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBF
Q1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0KLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEwNzM3NDE4MjQuMjUsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHko
KSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0Ljc1LCAqZXZlbnRzKTsKLSAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQ
RUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwotCi0gICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OwotICAgIGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMC43
NWYpOwotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
Ci0gICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwotfQotCi0vLyBUZXN0IHRo
YXQgcGF1c2luZyBhbmQgcmVzdW1pbmcgd29yayBhcyBleHBlY3RlZC4KLVRFU1QoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgUGF1c2VSZXN1bWUpCi17Ci0gICAgT3duUHRyPEND
QW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yKSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQg
ZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJv
bGxlcigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1
bW15KSk7Ci0KLSAgICBjb25zdCBpbnQgaWQgPSAxOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwg
MSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMC41LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15
Lm9wYWNpdHkoKSk7Ci0KLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmlt
YXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+
Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpQYXVzZWQsIDAuNWYpOwotCi0gICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgxMDI0LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHko
KSk7Ci0KLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+Z2V0QWN0aXZl
QW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1blN0YXRlKEND
QWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCAxMDI0KTsKLQotICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMTAyNC4yNSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsK
LSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuNSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX0ZB
TFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMSwg
ZHVtbXkub3BhY2l0eSgpKTsKLX0KLQotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LCBBYm9ydEFHcm91cGVkQW5pbWF0aW9uKQotewotICAgIE93blB0cjxDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cikpOwotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15Owot
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0g
ICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwot
Ci0gICAgY29uc3QgaW50IGlkID0gMTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIGlkLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0
ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAx
KSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMSwgMC43NWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5
KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjVm
LCBkdW1teS5vcGFjaXR5KCkpOwotCi0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0QWN0
aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIGNvbnRy
b2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
LT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMSk7Ci0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRSgh
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjc1Ziwg
ZHVtbXkub3BhY2l0eSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJUZXN0LmNwcAppbmRleCBjNGYxMDNhM2NhZmU0NjhlNGI4ZTc5Nzg2ZDJiMjE4N2U0NWQ3ZWEx
Li44ZWIwODQwZWRhZGYyZmI2MmY5NzdjYzc5MGQ2NTZhZTc2MzEwZjgzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlclRlc3QuY3BwCkBAIC01Niw3ICs1Niw4IEBAIFBhc3NPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3Vy
dmU+CiAKIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBjcmVhdGVPcGFjaXR5
QW5pbWF0aW9uKQogewotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29u
dHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOworICAgIEZha2VM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpjcmVhdGUoJmR1bW15KSk7CiAgICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKICAgICBX
ZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkp
OwogICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoMCwgMCkpOwpAQCAt
ODcsNyArODgsOCBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRl
T3BhY2l0eUFuaW1hdGlvbikKIAogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3Qs
IGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbikKIHsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0
ZSgpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAg
IE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogICAgIGNvbnN0IGRvdWJsZSBkdXJh
dGlvbiA9IDE7CiAgICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVk
UHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwogCkBAIC0xMjQsOTIgKzEyNiwzNzAgQEAgVEVTVChD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbikK
IAogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIHN5bmNOZXdBbmltYXRpb24p
CiB7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7Ci0g
ICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlckltcGwo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgT3du
UHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpjcmVhdGUoKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckNsaWVudCBkdW1teUltcGw7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
PiBjb250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1t
eUltcGwpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15Owor
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgRVhQRUNUX0ZBTFNF
KGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKIAogICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9Db250cm9sbGVyKCpjb250
cm9sbGVyLCAxLCAwLCAxKTsKIAotICAgIGNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9u
cyhjb250cm9sbGVySW1wbC5nZXQoKSk7CisgICAgY29udHJvbGxlci0+cHVzaEFuaW1hdGlvblVw
ZGF0ZXNUbyhjb250cm9sbGVySW1wbC5nZXQoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CiAgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZh
aWxhYmlsaXR5LCBjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CiB9CiAKLVRFU1QoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJUZXN0LCBzeW5jQW5pbWF0aW9uUHJvcGVydGllcykKKy8vIFRlc3RzIHRo
YXQgdHJhbnNpdGlvbmluZyBvcGFjaXR5IGZyb20gMCB0byAxIHdvcmtzIGFzIGV4cGVjdGVkLgor
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFRyaXZpYWxUcmFuc2l0aW9uKQog
ewotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAg
IE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXJJbXBsKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6Y3JlYXRlKCkpOworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZh
a2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgRVhQRUNUX0ZBTFNFKGNvbnRy
b2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBhZGRPcGFjaXR5VHJhbnNpdGlvblRv
Q29udHJvbGxlcigqY29udHJvbGxlciwgMSwgMCwgMSk7CisgICAgY29udHJvbGxlci0+YWRkKHRv
QWRkLnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkp
OworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAg
ICBFWFBFQ1RfRVEoMCwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkuYW5pbWF0
ZWRPcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7Cit9CiAKLSAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMoY29u
dHJvbGxlckltcGwuZ2V0KCkpOworLy8gVGVzdHMgdGhhdCB0d28gcXVldWVkIGFuaW1hdGlvbnMg
YWZmZWN0aW5nIHRoZSBzYW1lIHByb3BlcnR5IHJ1biBpbiBzZXF1ZW5jZS4KK1RFU1QoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBUcml2aWFsUXVldWluZykKK3sKKyAgICBPd25QdHI8
Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25F
dmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1
bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigK
KyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAot
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRp
b246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIGNvbnRyb2xsZXJJbXBsLT5nZXRBY3Rp
dmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsK
KyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKIAotICAgIC8vIFB1c2ggYW4gYW5pbWF0aW9uIHByb3BlcnR5IGNoYW5n
ZSB0byB0aGUgaW1wbCB0aHJlYWQgKHNob3VsZCBub3QgY2F1c2UgYW4gYW5pbWF0aW9uIHRvIGJl
IGFkZGVkKS4KLSAgICBjb250cm9sbGVyLT5wYXVzZUFuaW1hdGlvbigwLCAwKTsKLSAgICBjb250
cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxlckltcGwuZ2V0KCkpOworICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15
LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsIGV2ZW50cy5n
ZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OworICAgIEVYUEVDVF9FUSgxLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgyLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1t
eS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKK30KIAotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXJJbXBsLT5n
ZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBF
WFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgY29udHJvbGxlckltcGwtPmdldEFj
dGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkp
OworLy8gVGVzdHMgaW50ZXJydXB0aW5nIGEgdHJhbnNpdGlvbiB3aXRoIGFub3RoZXIgdHJhbnNp
dGlvbi4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBJbnRlcnJ1cHQpCit7
CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3
IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJv
bGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+
IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUo
JmR1bW15KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkp
OworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAg
ICBFWFBFQ1RfRVEoMCwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworCisgICAgT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOworICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2Fp
dGluZ0Zvck5leHRUaWNrLCAwKTsKKyAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgp
KTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41LCBldmVudHMuZ2V0KCkpOyAvLyBzZWNv
bmQgYW5pbSBzdGFydHMgTk9XLgorICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS41LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVD
VF9FUSgwLjVmLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KIAotVEVTVChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlclRlc3QsIHN5bmNBYm9ydGVkQW5pbWF0aW9uKQorLy8gVGVzdHMgc2NoZWR1
bGluZyB0d28gYW5pbWF0aW9ucyB0byBydW4gdG9nZXRoZXIgd2hlbiBvbmx5IG9uZSBwcm9wZXJ0
eSBpcyBmcmVlLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFNjaGVkdWxl
VG9nZXRoZXJXaGVuQVByb3BlcnR5SXNCbG9ja2VkKQogewotICAgIEZha2VMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw+IGNvbnRyb2xsZXJJbXBsKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOwor
ICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBD
Q0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBj
b250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZk
dW1teSkpOwogCi0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmlt
YXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5h
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNp
dGlvbigxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9s
bGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3Jt
VHJhbnNpdGlvbigxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBj
b250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
IAotICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9Db250cm9sbGVyKCpjb250cm9sbGVyLCAxLCAw
LCAxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQ
RUNUX0VRKDAsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgx
LCBldmVudHMuZ2V0KCkpOworICAgIC8vIFNob3VsZCBub3QgaGF2ZSBzdGFydGVkIHRoZSBmbG9h
dCB0cmFuc2l0aW9uIHlldC4KKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsK
KyAgICAvLyBUaGUgdGhlIGZsb2F0IGFuaW1hdGlvbiBzaG91bGQgaGF2ZSBzdGFydGVkIGF0IHRp
bWUgMSBhbmQgc2hvdWxkIGJlIGRvbmUuCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCBldmVu
dHMuZ2V0KCkpOworICAgIEVYUEVDVF9FUSgxLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KIAot
ICAgIGNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbC5nZXQo
KSk7CisvLyBUZXN0cyBzY2hlZHVsaW5nIHR3byBhbmltYXRpb25zIHRvIHJ1biB0b2dldGhlciB3
aXRoIGRpZmZlcmVudCBsZW5ndGhzIGFuZCBhbm90aGVyCisvLyBhbmltYXRpb24gcXVldWVkIHRv
IHN0YXJ0IHdoZW4gdGhlIHNob3J0ZXIgYW5pbWF0aW9uIGZpbmlzaGVzIChzaG91bGQgd2FpdAor
Ly8gZm9yIGJvdGggdG8gZmluaXNoKS4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJU
ZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCit7CisgICAgT3duUHRyPEND
QW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1t
eTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCisg
ICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9u
OjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCBjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZl
QW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7Cisg
ICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFr
ZVRyYW5zZm9ybVRyYW5zaXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3Jt
KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihu
ZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICAvLyBBbmltcyB3aXRoIGlkIDEgc2hvdWxkIGJvdGgg
c3RhcnQgbm93LgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKKyAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQ
RUNUX0VRKDAsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICAvLyBUaGUgb3BhY2l0eSBh
bmltYXRpb24gc2hvdWxkIGhhdmUgZmluaXNoZWQgYXQgdGltZSAxLCBidXQgdGhlIGdyb3VwCisg
ICAgLy8gb2YgYW5pbWF0aW9ucyB3aXRoIGlkIDEgZG9uJ3QgZmluaXNoIHVudGlsIHRpbWUgMiBi
ZWNhdXNlIG9mIHRoZSBsZW5ndGgKKyAgICAvLyBvZiB0aGUgdHJhbnNmb3JtIGFuaW1hdGlvbi4K
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsIGV2ZW50cy5nZXQoKSk7CisgICAgLy8gU2hvdWxk
IG5vdCBoYXZlIHN0YXJ0ZWQgdGhlIGZsb2F0IHRyYW5zaXRpb24geWV0LgorICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMSwg
ZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOwogCi0gICAgY29udHJvbGxlci0+cmVtb3ZlQW5pbWF0
aW9uKDApOworICAgIC8vIFRoZSB0aGUgc2Vjb25kIG9wYWNpdHkgYW5pbWF0aW9uIHNob3VsZCBz
dGFydCBhdCB0aW1lIDIgYW5kIHNob3VsZCBiZQorICAgIC8vIGRvbmUgYnkgdGltZSAzCisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgzLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9FUSgwLjVm
LCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KIAotICAgIC8vIEFib3J0IGFuIGFuaW1hdGlvbiBm
cm9tIHRoZSBtYWluIHRocmVhZC4KLSAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlv
bnMoY29udHJvbGxlckltcGwuZ2V0KCkpOworLy8gVGVzdHMgc2NoZWR1bGluZyBhbiBhbmltYXRp
b24gdG8gc3RhcnQgaW4gdGhlIGZ1dHVyZS4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJUZXN0LCBTY2hlZHVsZUFuaW1hdGlvbikKK3sKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVu
dHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsK
KyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIEVYUEVDVF9GQUxT
RShjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkp
LCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIHRvQWRkLT5zZXRSdW5TdGF0
ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7CisgICAgdG9BZGQt
PnNldFN0YXJ0VGltZSgxKTsKKyAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsK
KworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAs
IGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsIGV2
ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgyLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9FUSgxLCBk
dW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KIAotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
clRlc3QsIHN5bmNDb21wbGV0ZWRBbmltYXRpb24pCisvLyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFu
aW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlIHRoYXQncyBpbnRlcnJ1cHRpbmcgYSBydW5u
aW5nIGFuaW1hdGlvbi4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBTY2hl
ZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvbikKIHsKLSAgICBGYWtlTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNy
ZWF0ZSgpKTsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9w
dFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6
OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVySW1wbC0+Z2V0
QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29u
dHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAK
LSAgICBhZGRPcGFjaXR5VHJhbnNpdGlvblRvQ29udHJvbGxlcigqY29udHJvbGxlciwgMSwgMCwg
MSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmlt
YXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMC41ZiwgMCkpLCAyLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0Fj
dGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7CisgICAgdG9BZGQtPnNldFN0
YXJ0VGltZSgxKTsKKyAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKIAotICAg
IGNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbC5nZXQoKSk7
CisgICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0cmFuc2l0aW9uIHNob3VsZCBzdGFydCBpbW1lZGlh
dGVseS4KKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9F
USgwLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
LjUsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5
KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VR
KDAuNWYsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDIsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15LmFuaW1hdGVkT3BhY2l0
eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OworfQogCi0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlv
bigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIEVYUEVDVF9FUShDQ0FjdGl2
ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgY29udHJvbGxlckltcGwt
PmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0
YXRlKCkpOworLy8gVGVzdHMgc2NoZWR1bGluZyBhbiBhbmltYXRpb24gdG8gc3RhcnQgaW4gdGhl
IGZ1dHVyZSB0aGF0IGludGVycnVwdHMgYSBydW5uaW5nIGFuaW1hdGlvbgorLy8gYW5kIHRoZXJl
IGlzIHlldCBhbm90aGVyIGFuaW1hdGlvbiBxdWV1ZWQgdG8gc3RhcnQgbGF0ZXIuCitURVNUKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0
c1J1bm5pbmdBbmltYXRpb25XaXRoQW5pbUluUXVldWUpCit7CisgICAgT3duUHRyPENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAg
ICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCisgICAgICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICAvLyBT
dGVwIHRocm91Z2ggdGhlIGFuaW1hdGlvbiB1bnRpbCBpdCBpcyBmaW5pc2hlZC4gQXQgdGhlIG5l
eHQgc3luYywgdGhlIG1haW4gdGhyZWFkJ3MgYW5pbWF0aW9uIHNob3VsZCBiZSBjbGVhcmVkLgor
ICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworCisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVB
bmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMC41ZiwgMCkpLCAy
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShD
Q0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7CisgICAgdG9BZGQtPnNl
dFN0YXJ0VGltZSgxKTsKKyAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKwor
ICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMC43NWYpKSwgMywgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKworICAgIC8vIEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3Rh
cnQgaW1tZWRpYXRlbHkuCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkp
OworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAg
ICBFWFBFQ1RfRVEoMCwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMC41LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15LmFuaW1h
dGVkT3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCBldmVudHMuZ2V0KCkpOworICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBF
Q1RfRVEoMC41ZiwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMywgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15LmFuaW1hdGVkT3BhY2l0
eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDQsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQ
RUNUX0VRKDAuNzVmLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KKworLy8gVGVzdCB0aGF0IGEg
bG9vcGluZyBhbmltYXRpb24gbG9vcHMgYW5kIGZvciB0aGUgY29ycmVjdCBudW1iZXIgb2YgaXRl
cmF0aW9ucy4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBUcml2aWFsTG9v
cGluZykKK3sKICAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9w
dFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBjb250cm9sbGVySW1wbC0+
YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBjb250cm9sbGVySW1wbC0+YW5pbWF0ZSgyLCAqZXZl
bnRzKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAg
IE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKKyAgICAgICAg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIEVYUEVD
VF9GQUxTRShjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChj
cmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwg
MCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIHRvQWRkLT5zZXRJ
dGVyYXRpb25zKDMpOworICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworCisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVt
bXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSwgZXZl
bnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CisgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjc1LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC43
NWYsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIu
MjUsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5
KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi43NSwgZXZlbnRzLmdldCgpKTsKKyAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNU
X0VRKDAuNzVmLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgzLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15LmFuaW1hdGVkT3BhY2l0
eSgpKTsKKworICAgIC8vIEp1c3QgYmUgZXh0cmEgc3VyZS4KKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDQsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15LmFuaW1hdGVkT3Bh
Y2l0eSgpKTsKK30KKworLy8gVGVzdCB0aGF0IGFuIGluZmluaXRlbHkgbG9vcGluZyBhbmltYXRp
b24gZG9lcyBpbmRlZWQgZ28gdW50aWwgYWJvcnRlZC4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJUZXN0LCBJbmZpbml0ZUxvb3BpbmcpCit7CisgICAgT3duUHRyPENDQW5pbWF0aW9u
RXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9y
KSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBP
d25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCisgICAgICAgIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CisKKyAgICBjb25zdCBp
bnQgaWQgPSAxOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwg
aWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNldEl0ZXJhdGlv
bnMoLTEpOworICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworCisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkuYW5p
bWF0ZWRPcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSwgZXZlbnRzLmdl
dCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
CisgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5hbmltYXRlZE9wYWNpdHkoKSk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgxLjc1LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC43NWYsIGR1
bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTA3Mzc0
MTgyNC4yNSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5hbmltYXRlZE9w
YWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0Ljc1LCBldmVudHMu
Z2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKKyAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKworICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24o
aWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmlt
YXRpb246OkFib3J0ZWQsIDAuNzVmKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkuYW5pbWF0ZWRP
cGFjaXR5KCkpOworfQorCisvLyBUZXN0IHRoYXQgcGF1c2luZyBhbmQgcmVzdW1pbmcgd29yayBh
cyBleHBlY3RlZC4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBQYXVzZVJl
c3VtZSkKK3sKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9w
dFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6
OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIGNvbnN0IGludCBpZCA9IDE7CisgICAgY29udHJvbGxl
ci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXku
YW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41LCBldmVudHMu
Z2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKKyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOwogCi0gICAg
Y29udHJvbGxlci0+c3luY2hyb25pemVBbmltYXRpb25zKGNvbnRyb2xsZXJJbXBsLmdldCgpKTsK
KyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0
aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1blN0YXRlKENDQWN0aXZl
QW5pbWF0aW9uOjpQYXVzZWQsIDAuNWYpOwogCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0
LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkp
OworCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmdldEFjdGl2ZUFu
aW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5zZXRSdW5TdGF0ZShDQ0Fj
dGl2ZUFuaW1hdGlvbjo6UnVubmluZywgMTAyNCk7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEwMjQuMjUsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkuYW5pbWF0ZWRP
cGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNC41LCBldmVudHMuZ2V0KCkp
OwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cisg
ICAgRVhQRUNUX0VRKDEsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKK30KKworVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIEFib3J0QUdyb3VwZWRBbmltYXRpb24pCit7Cisg
ICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IEND
QW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNv
bnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1
bW15KSk7CisKKyAgICBjb25zdCBpbnQgaWQgPSAxOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEp
KSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5h
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDIsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJv
bGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJh
bnNpdGlvbigxLCAxLCAwLjc1ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwg
ZHVtbXkuYW5pbWF0ZWRPcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgZXZl
bnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CisgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKwor
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRp
b24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVB
bmltYXRpb246OkFib3J0ZWQsIDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgZXZlbnRz
LmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15LmFuaW1hdGVkT3BhY2l0eSgpKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDIsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoIWNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15
LmFuaW1hdGVkT3BhY2l0eSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IDcw
MmJiZjE2MzliNDNiMTZhZWYzYWJiNjYwNjI5MDQ5OGMwZDY2MTUuLjNmZGEyYzllZTdhY2FmMGJl
ZTM2N2RlYjVlNmIxZDkzYThkMWNiNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtNzMsNyArNzMsNiBAQCBwdWJs
aWM6CiAKICAgICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBDQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUK
ICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgdGltZSkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvbkZpbmlzaGVkKGludCBhbmltYXRpb25J
ZCkgeyB9CiB9OwogCiAvLyBBZGFwdHMgQ0NMYXllclRyZWVIb3N0SW1wbCBmb3IgdGVzdC4gUnVu
cyByZWFsIGNvZGUsIHRoZW4gaW52b2tlcyB0ZXN0IGhvb2tzLgpAQCAtODkyLDcgKzg5MSw2IEBA
IHB1YmxpYzoKICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uKCkKICAgICAgICAg
OiBtX251bUFuaW1hdGVzKDApCiAgICAgICAgICwgbV9yZWNlaXZlZEFuaW1hdGlvblN0YXJ0ZWRO
b3RpZmljYXRpb24oZmFsc2UpCi0gICAgICAgICwgbV9yZWNlaXZlZEFuaW1hdGlvbkZpbmlzaGVk
Tm90aWZpY2F0aW9uKGZhbHNlKQogICAgICAgICAsIG1fc3RhcnRUaW1lKDApCiAgICAgICAgICwg
bV9maXJzdE1vbm90b25pY1RpbWUoMCkKICAgICB7CkBAIC05MTcsNyArOTE1LDYgQEAgcHVibGlj
OgogICAgICAgICBFWFBFQ1RfTFQoMCwgbV9maXJzdE1vbm90b25pY1RpbWUpOwogICAgICAgICBF
WFBFQ1RfTkUobV9zdGFydFRpbWUsIG1fZmlyc3RNb25vdG9uaWNUaW1lKTsKICAgICAgICAgRVhQ
RUNUX1RSVUUobV9yZWNlaXZlZEFuaW1hdGlvblN0YXJ0ZWROb3RpZmljYXRpb24pOwotICAgICAg
ICBFWFBFQ1RfVFJVRShtX3JlY2VpdmVkQW5pbWF0aW9uRmluaXNoZWROb3RpZmljYXRpb24pOwog
ICAgICAgICBlbmRUZXN0KCk7CiAgICAgfQogCkBAIC05MjcsMTEgKzkyNCw2IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9zdGFydFRpbWUgPSB3YWxsQ2xvY2tUaW1lOwogICAgIH0KIAotICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlBbmltYXRpb25GaW5pc2hlZChpbnQpCi0gICAgewotICAgICAgICBtX3Jl
Y2VpdmVkQW5pbWF0aW9uRmluaXNoZWROb3RpZmljYXRpb24gPSB0cnVlOwotICAgIH0KLQogICAg
IHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQogICAgIHsKICAgICB9CkBAIC05MzksNyArOTMxLDYg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBpbnQgbV9udW1BbmltYXRlczsKICAgICBib29sIG1f
cmVjZWl2ZWRBbmltYXRpb25TdGFydGVkTm90aWZpY2F0aW9uOwotICAgIGJvb2wgbV9yZWNlaXZl
ZEFuaW1hdGlvbkZpbmlzaGVkTm90aWZpY2F0aW9uOwogICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsK
ICAgICBkb3VibGUgbV9maXJzdE1vbm90b25pY1RpbWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAppbmRleCAwNmNj
NWVlNWM1NDQxMjM1MTAzOWQ5YmZhYzczZTM2MWFhNzBkOTAxLi41YjM3NmNhOWZlMjIxMWRmYTAw
YTljZjkxMWVmMGU2MWY4OTA4MjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApAQCAtOTYsMjIgKzk2LDIzIEBAIHBy
aXZhdGU6CiAKIGNsYXNzIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIgOiBwdWJsaWMgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NP
d25QdHI8RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyQ2xpZW50KiBjbGllbnQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoY2xpZW50KSk7CiAgICAgfQog
CiAgICAgYm9vbCBzeW5jaHJvbml6ZWRBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9zeW5j
aHJvbml6ZWRBbmltYXRpb25zOyB9CiAKIHByaXZhdGU6Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9u
Q29udHJvbGxlcigpCi0gICAgICAgIDogbV9zeW5jaHJvbml6ZWRBbmltYXRpb25zKGZhbHNlKQor
ICAgIGV4cGxpY2l0IEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJDbGllbnQqIGNsaWVudCkKKyAgICAgICAgOiBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcihjbGllbnQpCisgICAgICAgICwgbV9zeW5jaHJvbml6ZWRBbmltYXRpb25zKGZhbHNl
KQogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVBbmltYXRpb25z
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCisgICAgdmly
dHVhbCB2b2lkIHB1c2hBbmltYXRpb25VcGRhdGVzVG8oQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIqIGNvbnRyb2xsZXJJbXBsKQogICAgIHsKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbCk7CisgICAgICAgIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uVXBkYXRlc1RvKGNvbnRyb2xs
ZXJJbXBsKTsKICAgICAgICAgbV9zeW5jaHJvbml6ZWRBbmltYXRpb25zID0gdHJ1ZTsKICAgICB9
CiAKQEAgLTM1MCw3ICszNTEsOCBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jaHJv
bml6ZUFuaW1hdGlvbnMpCiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoKTsKIAotICAgIGxheWVyVHJlZVJvb3QtPnNldExheWVyQW5pbWF0aW9uQ29udHJvbGxlcihG
YWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSk7CisgICAgRmFrZUxheWVyQW5p
bWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBsYXllclRyZWVSb290LT5zZXRMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIoRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRl
KCZkdW1teSkpOwogCiAgICAgRVhQRUNUX0ZBTFNFKHN0YXRpY19jYXN0PEZha2VMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIqPihsYXllclRyZWVSb290LT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIo
KSktPnN5bmNocm9uaXplZEFuaW1hdGlvbnMoKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132518</attachid>
            <date>2012-03-18 18:35:26 -0700</date>
            <delta_ts>2012-03-19 07:37:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81106-20120318213524.patch</filename>
            <type>text/plain</type>
            <size>133023</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjM5OTVmNzA4MjdjYjc1
YWIzMjU4MTVjMTQwMzgzMzdjODgyYjUyZS4uMWQ5NDlkZTAzYTNjYmU1OTE2YTM2ZjdkNTU1ZTAw
ZDdjNmE3OTFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOSBAQAorMjAxMi0wMy0xOCAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIElu
ZnJhc3RydWN0dXJlIHRvIGFsbG93IGFuaW1hdGluZyBsYXllcnMgdG8gYmUgb25seSBwYXJ0aWFs
bHkgdXBkYXRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODExMDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUZXN0cyBmb3IgdGhlIG1haW4gYW5kIGltcGwgdGhyZWFkIGNvbnRyb2xsZXJzIGhhdmUgYmVl
biBjb21iaW5lZCBpbiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QKKworICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoR3JhcGhpY3NMYXllckNocm9t
aXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldE9wYWNp
dHlGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldFRy
YW5zZm9ybUZyb21BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnBhdXNlQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldExheWVyQW5pbWF0aW9uQ29udHJvbGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpoYXNBY3RpdmVBbmltYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0QW5pbWF0aW9uRXZlbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpvcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpib3VuZHMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmg6CisgICAgICAg
IChDQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NBbmltYXRpb25FdmVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NBbmltYXRp
b25FdmVudDo6Q0NBbmltYXRpb25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FuaW1hdGlv
bkV2ZW50Ojp0b0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0FuaW1hdGlvbkV2ZW50Ojp0b1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NBbmltYXRpb25TdGFydGVkRXZlbnQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5pbWF0aW9uU3RhcnRlZEV2ZW50
OjpDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0QW5p
bWF0aW9uRmluaXNoZWRFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRmxvYXRB
bmltYXRpb25GaW5pc2hlZEV2ZW50OjpDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudDo6fkNDRmxvYXRB
bmltYXRpb25GaW5pc2hlZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRmxvYXRBbmltYXRp
b25GaW5pc2hlZEV2ZW50Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtQW5p
bWF0aW9uRmluaXNoZWRFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNm
b3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Q0NUcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVu
dDo6fkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OnR5cGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5pbWF0aW9uRXZlbnQ6OnRhcmdldFBy
b3BlcnR5KToKKyAgICAgICAgKENDQW5pbWF0aW9uRXZlbnQpOgorICAgICAgICAoQ0NBbmltYXRp
b25TdGFydGVkRXZlbnQpOgorICAgICAgICAoQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OmZpbmFs
VmFsdWUpOgorICAgICAgICAoQ0NUcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6ZmluYWxW
YWx1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hBbmltYXRpb25VcGRhdGVzVG8pOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGUpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpnZXRBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6Omhhc0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNBbmltYXRpbmdQcm9wZXJ0eSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0FuaW1hdGlvbnNU
b0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdG
b3JOZXh0VGljayk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRh
cmdldEF2YWlsYWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6cmVzb2x2ZUNvbmZsaWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6cHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnRpY2tBbmltYXRpb25zKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckNsaWVudDo6fkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KToKKyAgICAgICAg
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZS5oOgorICAgICAgICAoQ0NMYXll
ckFuaW1hdGlvbkRlbGVnYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NM
YXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNldE9wYWNpdHlGcm9t
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckltcGw6OnNldFRyYW5zZm9ybUZyb21BbmltYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ0xheWVySW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckltcGw6OmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmFuaW1hdGVMYXllcnMpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmFuaW1h
dGVMYXllcnNSZWN1cnNpdmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzUmVjdXJzaXZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoK
KyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aHJlYWRQcm94eTo6c2NoZWR1bGVkQWN0aW9uQmVnaW5GcmFtZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRQcm94eTo6QmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlOjpCZWdpbkZyYW1lQW5k
Q29tbWl0U3RhdGUpOgorCiAyMDEyLTAzLTE4ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQW5pbWF0aW5nIG9wYWNpdHkgaXMgbm90IG9w
YXF1ZSBhbmQgc2hvdWxkIGNyZWF0ZSBhIHJlbmRlciBzdXJmYWNlIG9uIG1haW4gdGhyZWFkCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDg3NDQzYjhmNTJmYTUxMGJhZGZhNTMxNTA0MjVj
MDhmMjg2NzI1NjYuLmUxZmU5YjYyZTZhMmI4NjljNzc5OTFlMGJjNWM4YTk3NmNmNjdmMTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTItMDMtMTggIElh
biBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJ
bmZyYXN0cnVjdHVyZSB0byBhbGxvdyBhbmltYXRpbmcgbGF5ZXJzIHRvIGJlIG9ubHkgcGFydGlh
bGx5IHVwZGF0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgxMTA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24u
Y3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJD
bGllbnQ6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQpOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQ6On5GYWtlTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKiB0ZXN0cy9DQ0FuaW1hdGlvblRl
c3RDb21tb24uaDoKKyAgICAgICAgKEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQp
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGll
bnQ6OnNldE9wYWNpdHlGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50OjpzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9u
KToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRl
c3QuY3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAoV2ViS2l0VGVz
dHMpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uOjpDQ0xheWVyVHJlZUhvc3RUZXN0
QWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdEFkZEFuaW1h
dGlvbjo6YW5pbWF0ZUxheWVycyk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5p
bWF0aW9uKToKKyAgICAgICAgKiB0ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHA6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpGYWtl
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uVXBkYXRlc1RvKToKKyAgICAgICAg
KFdlYktpdFRlc3RzOjpURVNUKToKKwogMjAxMi0wMy0xOCAgRGFuYSBKYW5zZW5zICA8ZGFuYWtq
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEFuaW1hdGluZyBvcGFjaXR5IGlz
IG5vdCBvcGFxdWUgYW5kIHNob3VsZCBjcmVhdGUgYSByZW5kZXIgc3VyZmFjZSBvbiBtYWluIHRo
cmVhZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDA2YmY5ZjA3MGJmODZmN2RlYjRmMDdhNDIwZjNhY2Zl
OWJiYTJlOTYuLjJjYzZjMWY1MmI3OGNkY2E3NDAxODcxNjAxZWUzZjk4YmVjZDBiNjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTM0ODAsOCArMzQ4MCw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oJywKLSAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDRjODE4NTNiODIwMTE2NTgxMmI0YTNkMzUx
OTEzMTRiNjA0Zjk3ZWIuLmRiMGJhMWMyYzlkMjI0OTJjYzUyOWJmYzEyYTUyZGU5MzYwZmY0Yjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNzQ5LDE2ICs3NDks
NiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChk
b3VibGUgc3RhcnRUaW1lKQogICAgICAgICBtX2NsaWVudC0+bm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZCh0aGlzLCBzdGFydFRpbWUpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bm90
aWZ5QW5pbWF0aW9uRmluaXNoZWQoaW50IGFuaW1hdGlvbklkKQotewotICAgIGZvciAoQW5pbWF0
aW9uSWRNYXA6Oml0ZXJhdG9yIGlkSXRlciA9IG1fYW5pbWF0aW9uSWRNYXAuYmVnaW4oKTsgaWRJ
dGVyICE9IG1fYW5pbWF0aW9uSWRNYXAuZW5kKCk7ICsraWRJdGVyKSB7Ci0gICAgICAgIGlmIChp
ZEl0ZXItPnNlY29uZCA9PSBhbmltYXRpb25JZCkgewotICAgICAgICAgICAgbV9hbmltYXRpb25J
ZE1hcC5yZW1vdmUoaWRJdGVyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCA0
Y2NhODJhODg3YmUyODU5OWFmMTQ3NDE3ZWNhYmM3ODcxOTQ5ZjljLi45MWE0NTVhNTQxZTY2Zjlk
ODc2YmU2YWNlNjExZmM4YTBmYWM0N2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21p
dW0uaApAQCAtMTE2LDcgKzExNiw2IEBAIHB1YmxpYzoKIAogICAgIC8vIENDTGF5ZXJBbmltYXRp
b25EZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0
aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5p
bWF0aW9uRmluaXNoZWQoaW50IGFuaW1hdGlvbklkKTsKIAogICAgIC8vIEV4cG9zZWQgZm9yIHRl
c3RzLgogICAgIExheWVyQ2hyb21pdW0qIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRlbnRzTGF5ZXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggODFkMzk0
NGZiNmQ2MTNiMjBmMjE5ZDAwYTNkOGY1NjBmOTQ3YWUwYS4uNmUyYjcyYmUxMDgxMzY2MDU1YTNk
OTVlMWY5MjU2ZTQ1ZjlmMTYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTU5LDcgKzU5
LDcgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSgpCiAgICAgOiBtX25lZWRzRGlzcGxh
eShmYWxzZSkKICAgICAsIG1fbGF5ZXJJZChzX25leHRMYXllcklkKyspCiAgICAgLCBtX3BhcmVu
dCgwKQotICAgICwgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI6OmNyZWF0ZSgpKQorICAgICwgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fc2Nyb2xsYWJs
ZShmYWxzZSkKICAgICAsIG1fc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKGZhbHNlKQogICAgICwg
bV9oYXZlV2hlZWxFdmVudEhhbmRsZXJzKGZhbHNlKQpAQCAtOTksNzAgKzk5LDYgQEAgTGF5ZXJD
aHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogICAgIHJlbW92ZUFsbENoaWxkcmVuKCk7CiB9CiAK
LWJvb2wgTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0
JiB2YWx1ZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0
aW9uLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCkKLXsK
LSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCB8fCAhbV9sYXllclRyZWVIb3N0LT5zZXR0aW5ncygp
LnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ym9vbCBhZGRlZEFuaW1hdGlvbiA9IG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5hZGRBbmlt
YXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24sIGFuaW1hdGlvbklkLCBncm91cElkLCB0
aW1lT2Zmc2V0KTsKLSAgICBpZiAoYWRkZWRBbmltYXRpb24pCi0gICAgICAgIHNldE5lZWRzQ29t
bWl0KCk7Ci0gICAgcmV0dXJuIGFkZGVkQW5pbWF0aW9uOwotfQotCi12b2lkIExheWVyQ2hyb21p
dW06OnBhdXNlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQpCi17
Ci0gICAgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9uKGFuaW1hdGlv
bklkLCB0aW1lT2Zmc2V0KTsKLSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi12b2lkIExheWVy
Q2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQpCi17Ci0gICAgbV9sYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXItPnJlbW92ZUFuaW1hdGlvbihhbmltYXRpb25JZCk7Ci0gICAg
c2V0TmVlZHNDb21taXQoKTsKLX0KLQotdm9pZCBMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0
aW9ucyhkb3VibGUgdGltZSkKLXsKLSAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+c3Vz
cGVuZEFuaW1hdGlvbnModGltZSk7Ci0gICAgc2V0TmVlZHNDb21taXQoKTsKLX0KLQotdm9pZCBM
YXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKCkKLXsKLSAgICBtX2xheWVyQW5pbWF0aW9u
Q29udHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOwotICAgIHNldE5lZWRzQ29tbWl0KCk7Ci19
Ci0KLXZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKFBhc3NP
d25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGxheWVyQW5pbWF0aW9uQ29udHJvbGxl
cikKLXsKLSAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlciA9IGxheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjsKLSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi1ib29sIExheWVyQ2hyb21pdW06
Omhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXJBbmltYXRp
b25Db250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKTsKLX0KLQotdm9pZCBMYXllckNocm9t
aXVtOjpzZXRBbmltYXRpb25FdmVudChjb25zdCBDQ0FuaW1hdGlvbkV2ZW50JiBldmVudCwgZG91
YmxlIHdhbGxDbG9ja1RpbWUpCi17Ci0gICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKLQotICAg
IGNhc2UgQ0NBbmltYXRpb25FdmVudDo6U3RhcnRlZDogewotICAgICAgICBtX2xheWVyQW5pbWF0
aW9uRGVsZWdhdGUtPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQod2FsbENsb2NrVGltZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQ0NBbmltYXRpb25FdmVudDo6RmluaXNoZWQ6
IHsKLSAgICAgICAgY29uc3QgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50KiBmaW5pc2hlZEV2ZW50
ID0gZXZlbnQudG9BbmltYXRpb25GaW5pc2hlZEV2ZW50KCk7Ci0gICAgICAgIG1fbGF5ZXJBbmlt
YXRpb25EZWxlZ2F0ZS0+bm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoZmluaXNoZWRFdmVudC0+YW5p
bWF0aW9uSWQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIH0KLX0KLQogdm9pZCBM
YXllckNocm9taXVtOjpzZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50KGJvb2wgaXNOb25Db21wb3Np
dGVkQ29udGVudCkKIHsKICAgICBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQgPSBpc05vbkNvbXBv
c2l0ZWRDb250ZW50OwpAQCAtNTM2LDEyICs0NzIsMTQgQEAgdm9pZCBMYXllckNocm9taXVtOjpw
dXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICAgICAgbV9ub25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbkNoYW5nZWQgPSBmYWxzZTsKICAgICB9CiAgICAgbGF5ZXItPnNldE9wYXF1
ZShtX29wYXF1ZSk7Ci0gICAgbGF5ZXItPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKKyAgICBpZiAo
IW9wYWNpdHlJc0FuaW1hdGluZygpKQorICAgICAgICBsYXllci0+c2V0T3BhY2l0eShtX29wYWNp
dHkpOwogICAgIGxheWVyLT5zZXRQb3NpdGlvbihtX3Bvc2l0aW9uKTsKICAgICBsYXllci0+c2V0
UHJlc2VydmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9u
KG1fc2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX3N1
YmxheWVyVHJhbnNmb3JtKTsKLSAgICBsYXllci0+c2V0VHJhbnNmb3JtKG1fdHJhbnNmb3JtKTsK
KyAgICBpZiAoIXRyYW5zZm9ybUlzQW5pbWF0aW5nKCkpCisgICAgICAgIGxheWVyLT5zZXRUcmFu
c2Zvcm0obV90cmFuc2Zvcm0pOwogICAgIGxheWVyLT5zZXRVcGRhdGVSZWN0KG1fdXBkYXRlUmVj
dCk7CiAKICAgICBsYXllci0+c2V0U2Nyb2xsRGVsdGEobGF5ZXItPnNjcm9sbERlbHRhKCkgLSBs
YXllci0+c2VudFNjcm9sbERlbHRhKCkpOwpAQCAtNTUyLDcgKzQ5MCw3IEBAIHZvaWQgTGF5ZXJD
aHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgaWYgKHJl
cGxpY2FMYXllcigpKQogICAgICAgICByZXBsaWNhTGF5ZXIoKS0+cHVzaFByb3BlcnRpZXNUbyhs
YXllci0+cmVwbGljYUxheWVyKCkpOwogCi0gICAgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIt
PnN5bmNocm9uaXplQW5pbWF0aW9ucyhsYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkp
OworICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5wdXNoQW5pbWF0aW9uVXBkYXRlc1Rv
KGxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7CiAKICAgICAvLyBSZXNldCBhbnkg
c3RhdGUgdGhhdCBzaG91bGQgYmUgY2xlYXJlZCBmb3IgdGhlIG5leHQgdXBkYXRlLgogICAgIG1f
dXBkYXRlUmVjdCA9IEZsb2F0UmVjdCgpOwpAQCAtNjA2LDYgKzU0NCw5MyBAQCBib29sIExheWVy
Q2hyb21pdW06OmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAorCit2b2lkIExheWVyQ2hyb21pdW06OnNldE9wYWNpdHlGcm9tQW5pbWF0aW9uKGZsb2F0IG9w
YWNpdHkpCit7CisgICAgLy8gVGhpcyBpcyBjYWxsZWQgZHVlIHRvIGFuIG9uZ29pbmcgYWNjZWxl
cmF0ZWQgYW5pbWF0aW9uLiBTaW5jZSB0aGlzIGFuaW1hdGlvbiBpcworICAgIC8vIGFsc28gYmVp
bmcgcnVuIG9uIHRoZSBpbXBsIHRocmVhZCwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXF1ZXN0IGEg
Y29tbWl0IHRvIHB1c2gKKyAgICAvLyB0aGlzIHZhbHVlIG92ZXIsIHNvIHNldCB0aGUgdmFsdWUg
ZGlyZWN0bHkgcmF0aGVyIHRoYW4gY2FsbGluZyBzZXRPcGFjaXR5LgorICAgIG1fb3BhY2l0eSA9
IG9wYWNpdHk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0VHJhbnNmb3JtRnJvbUFuaW1h
dGlvbihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIC8vIFRo
aXMgaXMgY2FsbGVkIGR1ZSB0byBhbiBvbmdvaW5nIGFjY2VsZXJhdGVkIGFuaW1hdGlvbi4gU2lu
Y2UgdGhpcyBhbmltYXRpb24gaXMKKyAgICAvLyBhbHNvIGJlaW5nIHJ1biBvbiB0aGUgaW1wbCB0
aHJlYWQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVxdWVzdCBhIGNvbW1pdCB0byBwdXNoCisgICAg
Ly8gdGhpcyB2YWx1ZSBvdmVyLCBzbyBzZXQgdGhpcyB2YWx1ZSBkaXJlY3RseSByYXRoZXIgdGhh
biBjYWxsaW5nIHNldFRyYW5zZm9ybS4KKyAgICBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsKK30K
KworYm9vbCBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxp
c3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmlt
YXRpb24sIGludCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KQor
eworICAgIGlmICghbV9sYXllclRyZWVIb3N0IHx8ICFtX2xheWVyVHJlZUhvc3QtPnNldHRpbmdz
KCkudGhyZWFkZWRBbmltYXRpb25FbmFibGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBib29sIGFkZGVkQW5pbWF0aW9uID0gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPmFkZEFu
aW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQsIGdyb3VwSWQs
IHRpbWVPZmZzZXQpOworICAgIGlmIChhZGRlZEFuaW1hdGlvbikKKyAgICAgICAgc2V0TmVlZHND
b21taXQoKTsKKyAgICByZXR1cm4gYWRkZWRBbmltYXRpb247Cit9CisKK3ZvaWQgTGF5ZXJDaHJv
bWl1bTo6cGF1c2VBbmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBkb3VibGUgdGltZU9mZnNldCkK
K3sKKyAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+cGF1c2VBbmltYXRpb24oYW5pbWF0
aW9uSWQsIHRpbWVPZmZzZXQpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5
ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCkKK3sKKyAgICBtX2xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlci0+cmVtb3ZlQW5pbWF0aW9uKGFuaW1hdGlvbklkKTsKKyAg
ICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnN1c3BlbmRBbmlt
YXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5z
dXNwZW5kQW5pbWF0aW9ucyh0aW1lKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lk
IExheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQoreworICAgIG1fbGF5ZXJBbmltYXRp
b25Db250cm9sbGVyLT5yZXN1bWVBbmltYXRpb25zKCk7CisgICAgc2V0TmVlZHNDb21taXQoKTsK
K30KKwordm9pZCBMYXllckNocm9taXVtOjpzZXRMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoUGFz
c093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gbGF5ZXJBbmltYXRpb25Db250cm9s
bGVyKQoreworICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyID0gbGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK2Jvb2wgTGF5ZXJDaHJvbWl1
bTo6aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllckFuaW1h
dGlvbkNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpOworfQorCit2b2lkIExheWVyQ2hy
b21pdW06OnNldEFuaW1hdGlvbkV2ZW50KGNvbnN0IENDQW5pbWF0aW9uRXZlbnQmIGV2ZW50LCBk
b3VibGUgd2FsbENsb2NrVGltZSkKK3sKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgeworICAg
IGNhc2UgQ0NBbmltYXRpb25FdmVudDo6U3RhcnRlZDoKKyAgICAgICAgbV9sYXllckFuaW1hdGlv
bkRlbGVnYXRlLT5ub3RpZnlBbmltYXRpb25TdGFydGVkKHdhbGxDbG9ja1RpbWUpOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgQ0NBbmltYXRpb25FdmVudDo6RmluaXNoZWRGbG9hdEFuaW1h
dGlvbjogeworICAgICAgICBjb25zdCBDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudCogZmlu
aXNoZWRFdmVudCA9IGV2ZW50LnRvRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50KCk7CisgICAg
ICAgIEFTU0VSVChmaW5pc2hlZEV2ZW50LT50YXJnZXRQcm9wZXJ0eSgpID09IENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KTsKKyAgICAgICAgc2V0T3BhY2l0eShmaW5pc2hlZEV2ZW50LT5maW5h
bFZhbHVlKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIENDQW5pbWF0aW9u
RXZlbnQ6OkZpbmlzaGVkVHJhbnNmb3JtQW5pbWF0aW9uOiB7CisgICAgICAgIGNvbnN0IENDVHJh
bnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCogZmluaXNoZWRFdmVudCA9IGV2ZW50LnRvVHJh
bnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCgpOworICAgICAgICBBU1NFUlQoZmluaXNoZWRF
dmVudC0+dGFyZ2V0UHJvcGVydHkoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKTsK
KyAgICAgICAgc2V0VHJhbnNmb3JtKGZpbmlzaGVkRXZlbnQtPmZpbmFsVmFsdWUoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIH0KK30KKwogdm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPjo6aXRlcmF0b3IsIHZvaWQqKQogewogICAgIC8vIEN1cnJlbnRseSB3ZSBkb24ndCB1
c2Ugei1vcmRlciB0byBkZWNpZGUgd2hhdCB0byBwYWludCwgc28gdGhlcmUncyBubyBuZWVkIHRv
IGFjdHVhbGx5IHNvcnQgTGF5ZXJDaHJvbWl1bXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNTEz
NGZkNTFmMzBmZDJkM2YwMzkzYWU1YTkzZjQ1MGU3ZmQxMDQwNS4uMTY2MDdjYTMwZmZkYzY0ZWJk
YzkwZWUwNWQzMjM3ZWVhZTJhYmI2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtNDMsNiArNDMs
NyBAQAogI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlNoYWRl
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRl
ICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImNjL0NDT2NjbHVz
aW9uVHJhY2tlci5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNTYsNyArNTcsNiBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0FuaW1hdGlvbkV2ZW50OwotY2xhc3Mg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBDQ0xheWVyQW5pbWF0aW9uRGVsZWdh
dGU7CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdDsKQEAgLTY2LDEy
ICs2NiwyMCBAQCBjbGFzcyBTY3JvbGxiYXJMYXllckNocm9taXVtOwogCiAvLyBCYXNlIGNsYXNz
IGZvciBjb21wb3NpdGVkIGxheWVycy4gU3BlY2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBm
cm9tCiAvLyB0aGlzIGNsYXNzLgotY2xhc3MgTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPExheWVyQ2hyb21pdW0+IHsKK2NsYXNzIExheWVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291
bnRlZDxMYXllckNocm9taXVtPiwgcHVibGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xp
ZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBjcmVh
dGUoKTsKIAogICAgIHZpcnR1YWwgfkxheWVyQ2hyb21pdW0oKTsKIAorICAgIC8vIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyQ2xpZW50IGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBpbnQg
aWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3Bh
Y2l0eUZyb21BbmltYXRpb24oZmxvYXQpOworICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm1G
cm9tQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdmlydHVhbCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90
cmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIG1fYm91bmRzOyB9CisKICAgICBjb25zdCBMYXllckNocm9taXVtKiByb290TGF5ZXIo
KSBjb25zdDsKICAgICBMYXllckNocm9taXVtKiBwYXJlbnQoKSBjb25zdDsKICAgICB2b2lkIGFk
ZENoaWxkKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4pOwpAQCAtOTUsNyArMTAzLDYgQEAgcHVi
bGljOgogICAgIGJvb2wgYmFja2dyb3VuZENvdmVyc1ZpZXdwb3J0KCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZ3JvdW5kQ292ZXJzVmlld3BvcnQ7IH0KIAogICAgIHZvaWQgc2V0Qm91bmRzKGNvbnN0
IEludFNpemUmKTsKLSAgICBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCB7IHJldHVybiBt
X2JvdW5kczsgfQogICAgIHZpcnR1YWwgSW50U2l6ZSBjb250ZW50Qm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gYm91bmRzKCk7IH0KIAogICAgIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKTsKQEAg
LTEwOSw3ICsxMTYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIG5lZWRzRGlzcGxheSgp
IGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNEaXNwbGF5OyB9CiAKICAgICB2b2lkIHNldE9wYWNpdHko
ZmxvYXQpOwotICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0K
ICAgICBib29sIG9wYWNpdHlJc0FuaW1hdGluZygpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRGaWx0
ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKQEAgLTEyNSw3ICsxMzEsNiBAQCBwdWJsaWM6
CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV9zdWJsYXllclRyYW5zZm9ybTsgfQogCiAgICAgdm9pZCBzZXRUcmFuc2Zv
cm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KICAgICBi
b29sIHRyYW5zZm9ybUlzQW5pbWF0aW5nKCkgY29uc3Q7CiAKICAgICBjb25zdCBJbnRSZWN0JiB2
aXNpYmxlTGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlTGF5ZXJSZWN0OyB9CkBA
IC0xODEsOCArMTg2LDYgQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxW
ZXJ0ZXhTaGFkZXJQb3MsIEZyYWdtZW50U2hhZGVyQ29sb3I+IEJvcmRlclByb2dyYW07CiAKLSAg
ICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7IH0KLQogICAgIHZvaWQgY2xlYXJS
ZW5kZXJTdXJmYWNlKCkgeyBtX3JlbmRlclN1cmZhY2UuY2xlYXIoKTsgfQogICAgIFJlbmRlclN1
cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyU3Vy
ZmFjZS5nZXQoKTsgfQogICAgIHZvaWQgY3JlYXRlUmVuZGVyU3VyZmFjZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVB
bmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQWN0aXZlQW5pbWF0aW9uLmgKaW5kZXggMjA5MzQyMWE3NTA4Zjk1ZmYzNWNjZTEzZjU0NTg2
MmYyNGVkZjNlZC4uOWM2NjMzYzNlNGM2ZjlkNmM0ZTZiYmUzZmQzNzY1Y2I3ZGJlNGVjMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NB
Y3RpdmVBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCkBAIC02MywxNCArNjMsNiBAQCBwdWJsaWM6
CiAgICAgICAgIE9wYWNpdHkKICAgICB9OwogCi0gICAgc3RydWN0IEFuaW1hdGlvblNpZ25hdHVy
ZSB7Ci0gICAgICAgIEFuaW1hdGlvblNpZ25hdHVyZShpbnQgZ3JvdXBJZCwgVGFyZ2V0UHJvcGVy
dHkgdGFyZ2V0UHJvcGVydHkpCi0gICAgICAgICAgICA6IGdyb3VwSWQoZ3JvdXBJZCkKLSAgICAg
ICAgICAgICwgdGFyZ2V0UHJvcGVydHkodGFyZ2V0UHJvcGVydHkpIHsgfQotICAgICAgICBpbnQg
Z3JvdXBJZDsKLSAgICAgICAgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHk7Ci0gICAgfTsK
LQogICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGUoUGFzc093
blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgVGFy
Z2V0UHJvcGVydHkpOwogCiAgICAgdmlydHVhbCB+Q0NBY3RpdmVBbmltYXRpb24oKTsKQEAgLTEw
NCw4ICs5Niw2IEBAIHB1YmxpYzoKICAgICAvLyBvZiBpdGVyYXRpb25zLCByZXR1cm5zIHRoZSBy
ZWxhdGl2ZSB0aW1lIGluIHRoZSBjdXJyZW50IGl0ZXJhdGlvbi4KICAgICBkb3VibGUgdHJpbVRp
bWVUb0N1cnJlbnRJdGVyYXRpb24oZG91YmxlIG5vdykgY29uc3Q7CiAKLSAgICBBbmltYXRpb25T
aWduYXR1cmUgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gQW5pbWF0aW9uU2lnbmF0dXJlKG1f
Z3JvdXAsIG1fdGFyZ2V0UHJvcGVydHkpOyB9Ci0KICAgICBQYXNzT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiBjbG9uZUZvckltcGxUaHJlYWQoKSBjb25zdDsKIAogICAgIHZvaWQgc3luY2hyb25p
emVQcm9wZXJ0aWVzKENDQWN0aXZlQW5pbWF0aW9uKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkV2ZW50cy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlv
bkV2ZW50cy5jcHAKaW5kZXggOWY0MTg0NGNhMDVkMTM3YWMxZWQ3ZDhmMmE3MTE4ZjQ0NDA2Njgw
MS4uYjc3ZDAyYmVkOWFjOWUwMjJlMWE0NWVjYmJhMGQ3NDZiNzYyN2Y2OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25F
dmVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQW5pbWF0aW9uRXZlbnRzLmNwcApAQCAtMzAsOCArMzAsOSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUNDQW5pbWF0aW9uRXZlbnQ6OkNDQW5pbWF0aW9uRXZlbnQoaW50IGxheWVy
SWQpCitDQ0FuaW1hdGlvbkV2ZW50OjpDQ0FuaW1hdGlvbkV2ZW50KGludCBsYXllcklkLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCiAgICAgOiBtX2xh
eWVySWQobGF5ZXJJZCkKKyAgICAsIG1fdGFyZ2V0UHJvcGVydHkodGFyZ2V0UHJvcGVydHkpCiB7
CiB9CiAKQEAgLTQ1LDE5ICs0NiwyNSBAQCBjb25zdCBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudCog
Q0NBbmltYXRpb25FdmVudDo6dG9BbmltYXRpb25TdGFydGVkRXZlbnQoKSBjb25zdAogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudCo+KHRoaXMpOwog
fQogCi1jb25zdCBDQ0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQqIENDQW5pbWF0aW9uRXZlbnQ6OnRv
QW5pbWF0aW9uRmluaXNoZWRFdmVudCgpIGNvbnN0Citjb25zdCBDQ0Zsb2F0QW5pbWF0aW9uRmlu
aXNoZWRFdmVudCogQ0NBbmltYXRpb25FdmVudDo6dG9GbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZl
bnQoKSBjb25zdAogewotICAgIEFTU0VSVCh0eXBlKCkgPT0gRmluaXNoZWQpOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBDQ0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQqPih0aGlzKTsKKyAg
ICBBU1NFUlQodHlwZSgpID09IEZpbmlzaGVkRmxvYXRBbmltYXRpb24pOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudCo+KHRoaXMpOwog
fQogCi1QYXNzT3duUHRyPENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50PiBDQ0FuaW1hdGlvblN0YXJ0
ZWRFdmVudDo6Y3JlYXRlKGludCBsYXllcklkKQorY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25G
aW5pc2hlZEV2ZW50KiBDQ0FuaW1hdGlvbkV2ZW50Ojp0b1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlz
aGVkRXZlbnQoKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25T
dGFydGVkRXZlbnQobGF5ZXJJZCkpOworICAgIEFTU0VSVCh0eXBlKCkgPT0gRmluaXNoZWRUcmFu
c2Zvcm1BbmltYXRpb24pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDQ1RyYW5zZm9y
bUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQqPih0aGlzKTsKIH0KIAotQ0NBbmltYXRpb25TdGFydGVk
RXZlbnQ6OkNDQW5pbWF0aW9uU3RhcnRlZEV2ZW50KGludCBsYXllcklkKQotICAgIDogQ0NBbmlt
YXRpb25FdmVudChsYXllcklkKQorUGFzc093blB0cjxDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudD4g
Q0NBbmltYXRpb25TdGFydGVkRXZlbnQ6OmNyZWF0ZShpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmlt
YXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQoreworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ0NBbmltYXRpb25TdGFydGVkRXZlbnQobGF5ZXJJZCwgdGFyZ2V0UHJvcGVydHkp
KTsKK30KKworQ0NBbmltYXRpb25TdGFydGVkRXZlbnQ6OkNDQW5pbWF0aW9uU3RhcnRlZEV2ZW50
KGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJv
cGVydHkpCisgICAgOiBDQ0FuaW1hdGlvbkV2ZW50KGxheWVySWQsIHRhcmdldFByb3BlcnR5KQog
ewogfQogCkBAIC03MCwyNCArNzcsNDQgQEAgQ0NBbmltYXRpb25FdmVudDo6VHlwZSBDQ0FuaW1h
dGlvblN0YXJ0ZWRFdmVudDo6dHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIFN0YXJ0ZWQ7CiB9CiAK
LVBhc3NPd25QdHI8Q0NBbmltYXRpb25GaW5pc2hlZEV2ZW50PiBDQ0FuaW1hdGlvbkZpbmlzaGVk
RXZlbnQ6OmNyZWF0ZShpbnQgbGF5ZXJJZCwgaW50IGFuaW1hdGlvbklkKQorUGFzc093blB0cjxD
Q0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudD4gQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZl
bnQ6OmNyZWF0ZShpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5
IHRhcmdldFByb3BlcnR5LCBmbG9hdCBmaW5hbFZhbHVlKQoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQobGF5ZXJJZCwgdGFyZ2V0UHJvcGVy
dHksIGZpbmFsVmFsdWUpKTsKK30KKworQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OkND
RmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50KGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHksIGZsb2F0IGZpbmFsVmFsdWUpCisgICAg
OiBDQ0FuaW1hdGlvbkV2ZW50KGxheWVySWQsIHRhcmdldFByb3BlcnR5KQorICAgICwgbV9maW5h
bFZhbHVlKGZpbmFsVmFsdWUpCit7Cit9CisKK0NDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50
Ojp+Q0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQoKQoreworfQorCitDQ0FuaW1hdGlvbkV2
ZW50OjpUeXBlIENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50Ojp0eXBlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gRmluaXNoZWRGbG9hdEFuaW1hdGlvbjsKK30KKworUGFzc093blB0cjxDQ1Ry
YW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ+IENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNo
ZWRFdmVudDo6Y3JlYXRlKGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJv
cGVydHkgdGFyZ2V0UHJvcGVydHksIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmaW5hbFZh
bHVlKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50
KGxheWVySWQsIGFuaW1hdGlvbklkKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RyYW5z
Zm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQobGF5ZXJJZCwgdGFyZ2V0UHJvcGVydHksIGZpbmFs
VmFsdWUpKTsKIH0KIAotQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50OjpDQ0FuaW1hdGlvbkZpbmlz
aGVkRXZlbnQoaW50IGxheWVySWQsIGludCBhbmltYXRpb25JZCkKLSAgICA6IENDQW5pbWF0aW9u
RXZlbnQobGF5ZXJJZCkKLSAgICAsIG1fYW5pbWF0aW9uSWQoYW5pbWF0aW9uSWQpCitDQ1RyYW5z
Zm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRF
dmVudChpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdl
dFByb3BlcnR5LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZmluYWxWYWx1ZSkKKyAgICA6
IENDQW5pbWF0aW9uRXZlbnQobGF5ZXJJZCwgdGFyZ2V0UHJvcGVydHkpCisgICAgLCBtX2ZpbmFs
VmFsdWUoZmluYWxWYWx1ZSkKIHsKIH0KIAotQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50Ojp+Q0NB
bmltYXRpb25GaW5pc2hlZEV2ZW50KCkKK0NDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVu
dDo6fkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCgpCiB7CiB9CiAKLUNDQW5pbWF0
aW9uRXZlbnQ6OlR5cGUgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50Ojp0eXBlKCkgY29uc3QKK0ND
QW5pbWF0aW9uRXZlbnQ6OlR5cGUgQ0NUcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50Ojp0
eXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRmluaXNoZWQ7CisgICAgcmV0dXJuIEZpbmlzaGVk
VHJhbnNmb3JtQW5pbWF0aW9uOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1h
dGlvbkV2ZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NBbmltYXRpb25FdmVudHMuaAppbmRleCBkYTk0ZTFlMjdkMTM4ODQ1Yjg5M2Q1NjA4ZmI4
NmM2NGFiZjlhMjc5Li5lMjRmNzVkYzdjMWIzZWM1Mjg1MDE4Y2RlMWFmOTdiODNhYTRkNjk2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0FuaW1hdGlvbkV2ZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmgKQEAgLTI1LDE3ICsyNSwyMCBAQAogI2lm
bmRlZiBDQ0FuaW1hdGlvbkV2ZW50c19oCiAjZGVmaW5lIENDQW5pbWF0aW9uRXZlbnRzX2gKIAor
I2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisKICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDsKLWNsYXNzIENDQW5pbWF0aW9uRmluaXNo
ZWRFdmVudDsKK2NsYXNzIENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50OworY2xhc3MgQ0NU
cmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50OwogCiBjbGFzcyBDQ0FuaW1hdGlvbkV2ZW50
IHsKIHB1YmxpYzoKLSAgICBlbnVtIFR5cGUgeyBTdGFydGVkLCBGaW5pc2hlZCB9OworICAgIGVu
dW0gVHlwZSB7IFN0YXJ0ZWQsIEZpbmlzaGVkRmxvYXRBbmltYXRpb24sIEZpbmlzaGVkVHJhbnNm
b3JtQW5pbWF0aW9uIH07CiAKICAgICB2aXJ0dWFsIH5DQ0FuaW1hdGlvbkV2ZW50KCk7CiAKQEAg
LTQzLDQ0ICs0Niw2NSBAQCBwdWJsaWM6CiAKICAgICBpbnQgbGF5ZXJJZCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5ZXJJZDsgfQogCisgICAgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5
IHRhcmdldFByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRQcm9wZXJ0eTsgfQorCiAg
ICAgY29uc3QgQ0NBbmltYXRpb25TdGFydGVkRXZlbnQqIHRvQW5pbWF0aW9uU3RhcnRlZEV2ZW50
KCkgY29uc3Q7Ci0gICAgY29uc3QgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50KiB0b0FuaW1hdGlv
bkZpbmlzaGVkRXZlbnQoKSBjb25zdDsKKyAgICBjb25zdCBDQ0Zsb2F0QW5pbWF0aW9uRmluaXNo
ZWRFdmVudCogdG9GbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQoKSBjb25zdDsKKyAgICBjb25z
dCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQqIHRvVHJhbnNmb3JtQW5pbWF0aW9u
RmluaXNoZWRFdmVudCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ0NBbmltYXRpb25FdmVu
dChpbnQgbGF5ZXJJZCk7CisgICAgQ0NBbmltYXRpb25FdmVudChpbnQgbGF5ZXJJZCwgQ0NBY3Rp
dmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KTsKIAogcHJpdmF0ZToKICAgICBpbnQgbV9sYXll
cklkOworICAgIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSBtX3RhcmdldFByb3Bl
cnR5OwogfTsKIAogLy8gSW5kaWNhdGVzIHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBzdGFydGVkIG9u
IGEgcGFydGljdWxhciBsYXllci4KIGNsYXNzIENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50IDogcHVi
bGljIENDQW5pbWF0aW9uRXZlbnQgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEND
QW5pbWF0aW9uU3RhcnRlZEV2ZW50PiBjcmVhdGUoaW50IGxheWVySWQpOworICAgIHN0YXRpYyBQ
YXNzT3duUHRyPENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50PiBjcmVhdGUoaW50IGxheWVySWQsIEND
QWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CiAKICAgICB2aXJ0dWFsIH5DQ0FuaW1h
dGlvblN0YXJ0ZWRFdmVudCgpOwogCiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdDsKIAog
cHJpdmF0ZToKLSAgICBleHBsaWNpdCBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudChpbnQgbGF5ZXJJ
ZCk7CisgICAgQ0NBbmltYXRpb25TdGFydGVkRXZlbnQoaW50IGxheWVySWQsIENDQWN0aXZlQW5p
bWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CiB9OwogCi0vLyBJbmRpY2F0ZXMgdGhhdCBhbiBhbmlt
YXRpb24gaGFzIHN0YXJ0ZWQgb24gYSBwYXJ0aWN1bGFyIGxheWVyLgotY2xhc3MgQ0NBbmltYXRp
b25GaW5pc2hlZEV2ZW50IDogcHVibGljIENDQW5pbWF0aW9uRXZlbnQgeworLy8gSW5kaWNhdGVz
IHRoYXQgYSBmbG9hdCBhbmltYXRpb24gaGFzIGNvbXBsZXRlZC4KK2NsYXNzIENDRmxvYXRBbmlt
YXRpb25GaW5pc2hlZEV2ZW50IDogcHVibGljIENDQW5pbWF0aW9uRXZlbnQgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50PiBjcmVh
dGUoaW50IGxheWVySWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSwgZmxvYXQg
ZmluYWxWYWx1ZSk7CisKKyAgICB2aXJ0dWFsIH5DQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVu
dCgpOworCisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdDsKKworICAgIGZsb2F0IGZpbmFs
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbmFsVmFsdWU7IH0KKworcHJpdmF0ZToKKyAgICBD
Q0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudChpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRp
b246OlRhcmdldFByb3BlcnR5LCBmbG9hdCBmaW5hbFZhbHVlKTsKKworICAgIGZsb2F0IG1fZmlu
YWxWYWx1ZTsKK307CisKKy8vIEluZGljYXRlcyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiBo
YXMgY29tcGxldGVkLgorY2xhc3MgQ0NUcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50IDog
cHVibGljIENDQW5pbWF0aW9uRXZlbnQgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PENDQW5pbWF0aW9uRmluaXNoZWRFdmVudD4gY3JlYXRlKGludCBsYXllcklkLCBpbnQgYW5pbWF0
aW9uSWQpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNo
ZWRFdmVudD4gY3JlYXRlKGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJv
cGVydHksIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmaW5hbFZhbHVlKTsKIAotICAgIHZp
cnR1YWwgfkNDQW5pbWF0aW9uRmluaXNoZWRFdmVudCgpOworICAgIHZpcnR1YWwgfkNDVHJhbnNm
b3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCgpOwogCiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBj
b25zdDsKIAotICAgIGludCBhbmltYXRpb25JZCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9u
SWQ7IH0KKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZmluYWxWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmluYWxWYWx1ZTsgfQogCiBwcml2YXRlOgotICAgIENDQW5pbWF0aW9uRmlu
aXNoZWRFdmVudChpbnQgbGF5ZXJJZCwgaW50IGFuaW1hdGlvbklkKTsKKyAgICBDQ1RyYW5zZm9y
bUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQoaW50IGxheWVySWQsIENDQWN0aXZlQW5pbWF0aW9uOjpU
YXJnZXRQcm9wZXJ0eSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZpbmFsVmFsdWUpOwog
Ci0gICAgaW50IG1fYW5pbWF0aW9uSWQ7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9maW5h
bFZhbHVlOwogfTsKIAogdHlwZWRlZiBWZWN0b3I8T3duUHRyPENDQW5pbWF0aW9uRXZlbnQ+ID4g
Q0NBbmltYXRpb25FdmVudHNWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggYzNhZjQ0ZGY1NmM1ZWI5OTk1ZDVjMmRiMzk4NzFj
NDJkM2U1MGU5ZC4uMTIzOGRjZTBlMWJlZGJiMmU2NmQ3NGIxMTMwMzFkYWEwMmQ1Y2ZmOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcApAQCAt
MjcsOSArMjcsMTAgQEAKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5o
IgogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIiAvLyBmb3IgS2V5ZnJhbWVWYWx1ZUxpc3QK
KyNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKICNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUg
ImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGwuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCkBAIC01NiwxMCArNTcsNiBAQCBQYXNzT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmIHZhbAogICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0RpcmVjdGlvblNl
dCgpICYmIGFuaW1hdGlvbi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJl
Y3Rpb25BbHRlcm5hdGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgLy8gRklYTUU6
IGFkZCBzdXBwb3J0IGZvciBkZWxheQotICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5p
c0RlbGF5U2V0KCkgJiYgYW5pbWF0aW9uLT5kZWxheSgpID4gMCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIGZpbGxzIGZvcndhcmRzIGFu
ZCBmaWxscyBiYWNrd2FyZHMKICAgICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNGaWxs
TW9kZVNldCgpICYmIChhbmltYXRpb24tPmZpbGxzRm9yd2FyZHMoKSB8fCBhbmltYXRpb24tPmZp
bGxzQmFja3dhcmRzKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwNSw3ICsxMDIs
OCBAQCBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24o
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbAogCiB9IC8vIG5hbWVwYWNlCiAKLUNDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpCitDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkK
IHsKIH0KIApAQCAtMTEzLDkgKzExMSw5IEBAIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjp+
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKQogewogfQogCi1QYXNzT3duUHRyPENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyPiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkK
K1Bhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpjcmVhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQqIGNsaWVu
dCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
KTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKGNs
aWVudCkpOwogfQogCiBib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRp
b24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgSW50U2l6ZSYsIGNv
bnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBk
b3VibGUgdGltZU9mZnNldCkKQEAgLTE2NywzMiArMTY1LDcxIEBAIHZvaWQgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMoKQogCiAvLyBFbnN1cmVzIHRoYXQgdGhl
IGxpc3Qgb2YgYWN0aXZlIGFuaW1hdGlvbnMgb24gdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgaW1w
bCB0aHJlYWQKIC8vIGFyZSBrZXB0IGluIHN5bmMuCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjpzeW5jaHJvbml6ZUFuaW1hdGlvbnMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsKiBjb250cm9sbGVySW1wbCkKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1
c2hBbmltYXRpb25VcGRhdGVzVG8oQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xs
ZXJJbXBsKQogewotICAgIHJlbW92ZUNvbXBsZXRlZEFuaW1hdGlvbnMoY29udHJvbGxlckltcGwp
OwogICAgIHB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsKICAg
ICByZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsK
LSAgICBwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhjb250cm9sbGVySW1wbCk7CiB9CiAKLXZvaWQg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUNvbXBsZXRlZEFuaW1hdGlvbnMoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3ZvaWQgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yKiBldmVudHMpCit7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGlu
Z0Zvck5leHRUaWNrKG1vbm90b25pY1RpbWUsIGV2ZW50cyk7CisgICAgc3RhcnRBbmltYXRpb25z
V2FpdGluZ0ZvclN0YXJ0VGltZShtb25vdG9uaWNUaW1lLCBldmVudHMpOworICAgIHN0YXJ0QW5p
bWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkobW9ub3RvbmljVGltZSwgZXZlbnRz
KTsKKyAgICByZXNvbHZlQ29uZmxpY3RzKG1vbm90b25pY1RpbWUpOworICAgIHRpY2tBbmltYXRp
b25zKG1vbm90b25pY1RpbWUpOworICAgIHB1cmdlRmluaXNoZWRBbmltYXRpb25zKGV2ZW50cyk7
CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShtb25vdG9u
aWNUaW1lLCBldmVudHMpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjph
ZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKQogewotICAgIC8vIEFu
eSBhbmltYXRpb25zIGZpbmlzaGVkIG9uIHRoZSBpbXBsIHRocmVhZCBhcmUgcmVtb3ZlZCBmcm9t
IHRoZSBtYWluIHRocmVhZCdzIGNvbGxlY3Rpb24uCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIHJlbW92ZShjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlvbnNbaV0uZ3JvdXBJ
ZCwgY29udHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zW2ldLnRhcmdldFByb3BlcnR5
KTsKLSAgICBjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlvbnMuY2xlYXIoKTsKKyAg
ICBtX2FjdGl2ZUFuaW1hdGlvbnMuYXBwZW5kKGFuaW1hdGlvbik7CiB9CiAKLXZvaWQgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCitDQ0FjdGl2ZUFuaW1h
dGlvbiogQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmdldEFjdGl2ZUFuaW1hdGlvbihpbnQg
Z3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5
KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUo
KTsgKytpKQorICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IGdy
b3VwSWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdl
dFByb3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS5nZXQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVB
bmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCAm
JiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRpb246
OkFib3J0ZWQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjppc0FuaW1hdGluZ1By
b3BlcnR5KENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkg
Y29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0
ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQgJiYgbV9hY3RpdmVB
bmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdldFByb3BlcnR5KQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0FuaW1hdGlvbnNUb0ltcGxUaHJlYWQo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXJJbXBsKQogewogICAgIC8vIEFu
eSBuZXcgYW5pbWF0aW9ucyBvd25lZCBieSB0aGUgbWFpbiB0aHJlYWQncyBjb250cm9sbGVyIGFy
ZSBjbG9uZWQgYW5kIGFkZGUgdG8gdGhlIGltcGwgdGhyZWFkJ3MgY29udHJvbGxlci4KICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewot
ICAgICAgICBpZiAoIWNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24obV9hY3RpdmVB
bmltYXRpb25zW2ldLT5ncm91cCgpLCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3Bl
cnR5KCkpKQotICAgICAgICAgICAgY29udHJvbGxlckltcGwtPmFkZChtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPmNsb25lRm9ySW1wbFRocmVhZCgpKTsKKyAgICAgICAgaWYgKCFjb250cm9sbGVySW1w
bC0+Z2V0QWN0aXZlQW5pbWF0aW9uKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSwgbV9h
Y3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpKSkgeworICAgICAgICAgICAgT3du
UHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmNsb25l
Rm9ySW1wbFRocmVhZCgpKTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBhbmltYXRpb24gaXMgYWxy
ZWFkeSBpbiBwcm9ncmVzcyAtLSBzZXQgaXQgdG8gYmUgd2FpdGluZyB1bnRpbCB0aGUgdGFyZ2V0
IGlzIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIC8vIFRoYXQgd2F5LCBpdCB3aWxsIGhhdmUgYSBj
aGFuY2UgdG8gc3RhcnQgb24gdGhlIGltcGwgdGhyZWFkLiBPdGhlcndpc2UsIHdlIHdpbGwgbmV2
ZXIgdGljayBhdCB0aGUKKyAgICAgICAgICAgIC8vIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBhbmlt
YXRpb24uCisgICAgICAgICAgICBpZiAodG9BZGQtPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmlt
YXRpb246OlJ1bm5pbmcgfHwgdG9BZGQtPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246
OlBhdXNlZCkKKyAgICAgICAgICAgICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmlt
YXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIDApOworICAgICAgICAgICAgY29u
dHJvbGxlckltcGwtPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgICAgICB9CiAgICAgfQogfQog
Ci12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb25zQ29tcGxl
dGVkT25NYWluVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxl
ckltcGwpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb25z
Q29tcGxldGVkT25NYWluVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKiBjb250cm9s
bGVySW1wbCkKIHsKICAgICAvLyBEZWxldGUgYWxsIGltcGwgdGhyZWFkIGFuaW1hdGlvbnMgZm9y
IHdoaWNoIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgbWFpbiB0aHJlYWQgYW5pbWF0aW9uLgog
ICAgIC8vIEVhY2ggaXRlcmF0aW9uLCBjb250cm9sbGVyLT5tX2FjdGl2ZUFuaW1hdGlvbnMuc2l6
ZSgpIGlzIGRlY3JlbWVudGVkIG9yIGkgaXMgaW5jcmVtZW50ZWQKQEAgLTIwNiw0MyArMjQzLDE2
OSBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb25zQ29t
cGxldGVkT25NYWluVGhyZWFkKENDTGF5ZXJBbgogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6cHVzaEFuaW1hdGlvblByb3BlcnRpZXMoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhkb3VibGUgbW9ub3Rv
bmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IqIGV2ZW50cykKIHsKLSAgICAvLyBEZWxl
dGUgYWxsIGltcGwgdGhyZWFkIGFuaW1hdGlvbnMgZm9yIHdoaWNoIHRoZXJlIGlzIG5vIGNvcnJl
c3BvbmRpbmcgbWFpbiB0aHJlYWQgYW5pbWF0aW9uLgotICAgIC8vIEVhY2ggaXRlcmF0aW9uLCBj
b250cm9sbGVyLT5tX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpIGlzIGRlY3JlbWVudGVkIG9yIGkg
aXMgaW5jcmVtZW50ZWQKLSAgICAvLyBndWFyYW50ZWVpbmcgcHJvZ3Jlc3MgdG93YXJkcyBsb29w
IHRlcm1pbmF0aW9uLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udHJvbGxlckltcGwt
Pm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBDQ0FjdGl2ZUFuaW1h
dGlvbiogY3VycmVudEltcGwgPSBjb250cm9sbGVySW1wbC0+bV9hY3RpdmVBbmltYXRpb25zW2ld
LmdldCgpOwotICAgICAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogY3VycmVudCA9IGdldEFjdGl2ZUFu
aW1hdGlvbihjdXJyZW50SW1wbC0+Z3JvdXAoKSwgY3VycmVudEltcGwtPnRhcmdldFByb3BlcnR5
KCkpOwotICAgICAgICBBU1NFUlQoY3VycmVudCk7Ci0gICAgICAgIGlmIChjdXJyZW50KQotICAg
ICAgICAgICAgY3VycmVudC0+c3luY2hyb25pemVQcm9wZXJ0aWVzKGN1cnJlbnRJbXBsKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkg
eworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0
aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2spIHsKKyAgICAgICAgICAgIG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG1v
bm90b25pY1RpbWUpOworICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRTdGFy
dFRpbWUobW9ub3RvbmljVGltZSk7CisgICAgICAgICAgICBpZiAoZXZlbnRzKQorICAgICAgICAg
ICAgICAgIGV2ZW50cy0+YXBwZW5kKENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50OjpjcmVhdGUobV9j
bGllbnQtPmlkKCksIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSkpOwor
ICAgICAgICB9CiAgICAgfQogfQogCi1DQ0FjdGl2ZUFuaW1hdGlvbiogQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OmdldEFjdGl2ZUFuaW1hdGlvbihpbnQgZ3JvdXBJZCwgQ0NBY3RpdmVBbmlt
YXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQordm9pZCBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUg
bW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IqIGV2ZW50cykKIHsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkKLSAg
ICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cElkICYmIG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSB0YXJnZXRQcm9wZXJ0eSkK
LSAgICAgICAgICAgIHJldHVybiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0uZ2V0KCk7Ci0gICAgcmV0
dXJuIDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUo
KSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSAmJiBtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPnN0YXJ0VGltZSgpIDw9IG1vbm90b25pY1RpbWUpIHsKKyAgICAgICAgICAg
IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1
bm5pbmcsIG1vbm90b25pY1RpbWUpOworICAgICAgICAgICAgaWYgKGV2ZW50cykKKyAgICAgICAg
ICAgICAgICBldmVudHMtPmFwcGVuZChDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDo6Y3JlYXRlKG1f
Y2xpZW50LT5pZCgpLCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpKTsK
KyAgICAgICAgfQorICAgIH0KIH0KIAotYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
aXNBbmltYXRpbmdQcm9wZXJ0eShDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFy
Z2V0UHJvcGVydHkpIGNvbnN0Cit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpzdGFy
dEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBtb25vdG9uaWNU
aW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciogZXZlbnRzKQogeworICAgIC8vIEZpcnN0IGNv
bGxlY3QgcnVubmluZyBwcm9wZXJ0aWVzLgorICAgIFRhcmdldFByb3BlcnRpZXMgYmxvY2tlZFBy
b3BlcnRpZXM7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3Rh
dGUoKSAhPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQgJiYgbV9hY3RpdmVBbmltYXRpb25z
W2ldLT5ydW5TdGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkICYmIG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSB0YXJnZXRQcm9wZXJ0eSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5y
dW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nIHx8IG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQpCisgICAg
ICAgICAgICBibG9ja2VkUHJvcGVydGllcy5hZGQobV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJn
ZXRQcm9wZXJ0eSgpKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0
aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRp
b25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0
QXZhaWxhYmlsaXR5KSB7CisgICAgICAgICAgICAvLyBDb2xsZWN0IGFsbCBwcm9wZXJ0aWVzIGZv
ciBhbmltYXRpb25zIHdpdGggdGhlIHNhbWUgZ3JvdXAgaWQgKHRoZXkgc2hvdWxkIGFsbCBhbHNv
IGJlIGluIHRoZSBsaXN0IG9mIGFuaW1hdGlvbnMpLgorICAgICAgICAgICAgVGFyZ2V0UHJvcGVy
dGllcyBlbnF1ZXVlZFByb3BlcnRpZXM7CisgICAgICAgICAgICBlbnF1ZXVlZFByb3BlcnRpZXMu
YWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSk7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyAr
K2opIHsKKyAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgp
ID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkKKyAgICAgICAgICAgICAgICAgICAg
ZW5xdWV1ZWRQcm9wZXJ0aWVzLmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnRhcmdldFByb3Bl
cnR5KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYg
aW50ZXJzZWN0aW9uIG9mIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgYWZmZWN0ZWQgYnkgdGhlIGdy
b3VwIGFuZCB0aGUgbGlzdCBvZiBjdXJyZW50bHkKKyAgICAgICAgICAgIC8vIGJsb2NrZWQgcHJv
cGVydGllcyBpcyBudWxsLiBJbiBhbnkgY2FzZSwgdGhlIGdyb3VwJ3MgdGFyZ2V0IHByb3BlcnRp
ZXMgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgbGlzdAorICAgICAgICAgICAgLy8gb2YgYmxvY2tl
ZCBwcm9wZXJ0aWVzLgorICAgICAgICAgICAgYm9vbCBudWxsSW50ZXJzZWN0aW9uID0gdHJ1ZTsK
KyAgICAgICAgICAgIGZvciAoVGFyZ2V0UHJvcGVydGllczo6aXRlcmF0b3IgcEl0ZXIgPSBlbnF1
ZXVlZFByb3BlcnRpZXMuYmVnaW4oKTsgcEl0ZXIgIT0gZW5xdWV1ZWRQcm9wZXJ0aWVzLmVuZCgp
OyArK3BJdGVyKSB7CisgICAgICAgICAgICAgICAgaWYgKCFibG9ja2VkUHJvcGVydGllcy5hZGQo
KnBJdGVyKS5zZWNvbmQpCisgICAgICAgICAgICAgICAgICAgIG51bGxJbnRlcnNlY3Rpb24gPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgdGhlIGludGVyc2VjdGlv
biBpcyBudWxsLCB0aGVuIHdlIGFyZSBmcmVlIHRvIHN0YXJ0IHRoZSBhbmltYXRpb25zIGluIHRo
ZSBncm91cC4KKyAgICAgICAgICAgIGlmIChudWxsSW50ZXJzZWN0aW9uKSB7CisgICAgICAgICAg
ICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlv
bjo6UnVubmluZywgbW9ub3RvbmljVGltZSk7CisgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmlt
YXRpb25zW2ldLT5zZXRTdGFydFRpbWUobW9ub3RvbmljVGltZSk7CisgICAgICAgICAgICAgICAg
aWYgKGV2ZW50cykKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzLT5hcHBlbmQoQ0NBbmltYXRp
b25TdGFydGVkRXZlbnQ6OmNyZWF0ZShtX2NsaWVudC0+aWQoKSwgbV9hY3RpdmVBbmltYXRpb25z
W2ldLT50YXJnZXRQcm9wZXJ0eSgpKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9
IGkgKyAxOyBqIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytqKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gbV9hY3RpdmVB
bmltYXRpb25zW2pdLT5ncm91cCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FjdGl2
ZUFuaW1hdGlvbnNbal0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBt
b25vdG9uaWNUaW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9u
c1tqXS0+c2V0U3RhcnRUaW1lKG1vbm90b25pY1RpbWUpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVt
b3ZlKGludCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0
UHJvcGVydHkpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZXNvbHZlQ29uZmxp
Y3RzKGRvdWJsZSBtb25vdG9uaWNUaW1lKQogeworICAgIC8vIEZpbmQgYW55IGFuaW1hdGlvbnMg
dGhhdCBhcmUgYW5pbWF0aW5nIHRoZSBzYW1lIHByb3BlcnR5IGFuZCByZXNvbHZlIHRoZQorICAg
IC8vIGNvbmZpY3QuIFdlIGNvdWxkIGV2ZW50dWFsbHkgYmxlbmQsIGJ1dCBmb3Igbm93IHdlJ2xs
IGp1c3QgYWJvcnQgdGhlCisgICAgLy8gcHJldmlvdXMgYW5pbWF0aW9uICh3aGVyZSAncHJldmlv
dXMnIG1lYW5zOiAoMSkgaGFzIGEgcHJpb3Igc3RhcnQgdGltZSBvcgorICAgIC8vICgyKSBoYXMg
YW4gZXF1YWwgc3RhcnQgdGltZSwgYnV0IHdhcyBhZGRlZCB0byB0aGUgcXVldWUgZWFybGllciwg
aS5lLiwKKyAgICAvLyBoYXMgYSBsb3dlciBpbmRleCBpbiBtX2FjdGl2ZUFuaW1hdGlvbnMpLgog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3JvdXBJ
ZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJv
cGVydHkpIHsKLSAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0
YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcpIHsKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraikgewor
ICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnJ1blN0YXRlKCkgPT0g
Q0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJn
ZXRQcm9wZXJ0eSgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+dGFyZ2V0UHJvcGVydHkoKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5zdGFydFRp
bWUoKSA+IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+c3RhcnRUaW1lKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5p
bWF0aW9uOjpBYm9ydGVkLCBtb25vdG9uaWNUaW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5T
dGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgbW9ub3RvbmljVGltZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucyhDQ0FuaW1h
dGlvbkV2ZW50c1ZlY3RvciogZXZlbnRzKQoreworICAgIC8vIEVhY2ggaXRlcmF0aW9uLCBtX2Fj
dGl2ZUFuaW1hdGlvbnMuc2l6ZSgpIGRlY3JlYXNlcyBvciBpIGluY3JlbWVudHMsCisgICAgLy8g
Z3VhcmFudGVlaW5nIHByb2dyZXNzIHRvd2FyZHMgbG9vcCB0ZXJtaW5hdGlvbi4KKyAgICBzaXpl
X3QgaSA9IDA7CisgICAgd2hpbGUgKGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpKSB7Cisg
ICAgICAgIGludCBncm91cElkID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpOworICAg
ICAgICBib29sIGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkID0gZmFsc2U7CisgICAgICAg
IGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlzRmluaXNoZWQoKSkgeworICAgICAgICAgICAg
YWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQgPSB0cnVlOworICAgICAgICAgICAgZm9yIChz
aXplX3QgaiA9IDA7IGogPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2opIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZ3JvdXBJZCA9PSBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPmdyb3VwKCkg
JiYgIW1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+aXNGaW5pc2hlZCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAoYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQpIHsKKyAgICAg
ICAgICAgIC8vIFdlIG5vdyBuZWVkIHRvIHJlbW92ZSBhbGwgYW5pbWF0aW9ucyB3aXRoIHRoZSBz
YW1lIGdyb3VwIGlkIGFzIGdyb3VwSWQKKyAgICAgICAgICAgIC8vIChhbmQgc2VuZCBhbG9uZyBh
bmltYXRpb24gZmluaXNoZWQgbm90aWZpY2F0aW9ucywgaWYgbmVjZXNzYXJ5KS4KKyAgICAgICAg
ICAgIC8vIEVhY2ggaXRlcmF0aW9uLCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpIGRlY3JlYXNl
cyBvciBqIGluY3JlbWVudHMsCisgICAgICAgICAgICAvLyBndWFyYW50ZWVpbmcgcHJvZ3Jlc3Mg
dG93YXJkcyBsb29wIHRlcm1pbmF0aW9uLiBBbHNvLCB3ZSBhcmUgZ3VhcmFudGVlZAorICAgICAg
ICAgICAgLy8gdG8gcmVtb3ZlIGF0IGxlYXN0IG9uZSBhY3RpdmUgYW5pbWF0aW9uLgorICAgICAg
ICAgICAgZm9yIChzaXplX3QgaiA9IGk7IGogPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOykg
eworICAgICAgICAgICAgICAgIGlmIChncm91cElkICE9IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+
Z3JvdXAoKSkKKyAgICAgICAgICAgICAgICAgICAgaisrOworICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnRzKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+dGFyZ2V0UHJvcGVydHkoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eToK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHMtPmFwcGVuZChDQ0Zsb2F0QW5pbWF0
aW9uRmluaXNoZWRFdmVudDo6Y3JlYXRlKG1fY2xpZW50LT5pZCgpLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSwgbV9jbGllbnQtPm9wYWNpdHkoKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VHJhbnNmb3JtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cy0+YXBw
ZW5kKENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Y3JlYXRlKG1fY2xpZW50LT5p
ZCgpLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtLCBtX2NsaWVudC0+dHJhbnNmb3JtKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtX2Fj
dGl2ZUFuaW1hdGlvbnMucmVtb3ZlKGopOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpKys7CisgICAgfQorfQorCit2b2lkIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjp0aWNrQW5pbWF0aW9ucyhkb3VibGUgbW9ub3Rvbmlj
VGltZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0
ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nKSB7CisgICAgICAgICAgICBkb3VibGUg
dHJpbW1lZCA9IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRp
b24obW9ub3RvbmljVGltZSk7CisKKyAgICAgICAgICAgIHN3aXRjaCAobV9hY3RpdmVBbmltYXRp
b25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpKSB7CisKKyAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVB
bmltYXRpb246OlRyYW5zZm9ybTogeworICAgICAgICAgICAgICAgIGNvbnN0IENDVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUqIHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmltYXRp
b25zW2ldLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CisgICAgICAgICAg
ICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gdHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmUtPmdldFZhbHVlKHRyaW1tZWQsIG1fY2xpZW50LT5ib3VuZHMoKSk7CisgICAgICAg
ICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG1vbm90b25p
Y1RpbWUpKQorICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCwgbW9ub3RvbmljVGltZSk7CisKKyAg
ICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0VHJhbnNmb3JtRnJvbUFuaW1hdGlvbihtYXRyaXgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBj
YXNlIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5OiB7CisgICAgICAgICAgICAgICAgY29uc3Qg
Q0NGbG9hdEFuaW1hdGlvbkN1cnZlKiBmbG9hdEFuaW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmlt
YXRpb25zW2ldLT5jdXJ2ZSgpLT50b0Zsb2F0QW5pbWF0aW9uQ3VydmUoKTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBmbG9hdCBvcGFjaXR5ID0gZmxvYXRBbmltYXRpb25DdXJ2ZS0+Z2V0VmFsdWUo
dHJpbW1lZCk7CisgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aXNG
aW5pc2hlZEF0KG1vbm90b25pY1RpbWUpKQorICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCwgbW9u
b3RvbmljVGltZSk7CisKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0T3BhY2l0eUZyb21B
bmltYXRpb24ob3BhY2l0eSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCmluZGV4IGYyZjY2ZWIyNDRlZjBhYjI3NTdk
MjkwNTRmOGM0MTlmNDZlNGQ5MGYuLmQwMGFhZTc4YWMxZDUxZTkyYzNiYTE0NzY0YTM3NDlkOGY0
MmY1MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
aApAQCAtMjYsMjYgKzI2LDQyIEBACiAjZGVmaW5lIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
X2gKIAogI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NB
bmltYXRpb25DdXJ2ZS5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uRXZlbnRzLmgiCiAKKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBbmltYXRp
b247Ci1jbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw7CiBjbGFzcyBJbnRTaXpl
OwogY2xhc3MgS2V5ZnJhbWVWYWx1ZUxpc3Q7CitjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsK
K2NsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnM7CisKK2NsYXNzIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckNsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHlGcm9tQW5pbWF0aW9uKGZsb2F0KSA9IDA7CisgICAg
dmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRU
cmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgPSAwOwor
ICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0ID0gMDsKK307
CiAKIGNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZSgpOworICAgIHN0
YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjcmVhdGUoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQqKTsKIAogICAgIHZpcnR1YWwgfkNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyKCk7CiAKLSAgICAvLyBUaGVzZSBhcmUgdmlydHVhbCBmb3IgdGVzdGlu
Zy4KKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB2aXJ0dWFsIGZvciB0ZXN0aW5nLgogICAgIHZp
cnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJ
bnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBpbnQgYW5pbWF0aW9uSWQsIGludCBn
cm91cElkLCBkb3VibGUgdGltZU9mZnNldCk7CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0
aW9uKGludCBhbmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQpOwogICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVBbmltYXRpb24oaW50IGFuaW1hdGlvbklkKTsKQEAgLTU0LDIzICs3MCw0MSBAQCBw
dWJsaWM6CiAKICAgICAvLyBFbnN1cmVzIHRoYXQgdGhlIGxpc3Qgb2YgYWN0aXZlIGFuaW1hdGlv
bnMgb24gdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgaW1wbCB0aHJlYWQKICAgICAvLyBhcmUga2Vw
dCBpbiBzeW5jLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2Ugb3duZXJzaGlwIG9mIHRoZSBp
bXBsIHRocmVhZCBjb250cm9sbGVyLgotICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZUFuaW1h
dGlvbnMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7CisgICAgdmlydHVhbCB2b2lk
IHB1c2hBbmltYXRpb25VcGRhdGVzVG8oQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqKTsKKwor
ICAgIHZvaWQgYW5pbWF0ZShkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNW
ZWN0b3IqKTsKIAotICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgfQorICAgIHZvaWQgYWRkKFBhc3NPd25QdHI8Q0NB
Y3RpdmVBbmltYXRpb24+KTsKKworICAgIC8vIFJldHVybnMgdGhlIGFjdGl2ZSBhbmltYXRpb24g
aW4gdGhlIGdpdmVuIGdyb3VwLCBhbmltYXRpbmcgdGhlIGdpdmVuIHByb3BlcnR5IGlmIHN1Y2gg
YW4KKyAgICAvLyBhbmltYXRpb24gZXhpc3RzLgogICAgIENDQWN0aXZlQW5pbWF0aW9uKiBnZXRB
Y3RpdmVBbmltYXRpb24oaW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9w
ZXJ0eSk7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIGFueSBhbmltYXRpb25z
IHRoYXQgaGF2ZSBuZWl0aGVyIGZpbmlzaGVkIG5vciBhYm9ydGVkLgorICAgIGJvb2wgaGFzQWN0
aXZlQW5pbWF0aW9uKCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMg
YW4gYW5pbWF0aW9uIGN1cnJlbnRseSBhbmltYXRpbmcgdGhlIGdpdmVuIHByb3BlcnR5LCBvcgor
ICAgIC8vIGlmIHRoZXJlIGlzIGFuIGFuaW1hdGlvbiBzY2hlZHVsZWQgdG8gYW5pbWF0ZSB0aGlz
IHByb3BlcnR5IGluIHRoZSBmdXR1cmUuCiAgICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5KEND
QWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAg
ICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOworICAgIGV4cGxpY2l0IENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50Kik7CiAKIHBy
aXZhdGU6Ci0gICAgdm9pZCByZW1vdmVDb21wbGV0ZWRBbmltYXRpb25zKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbCopOwotICAgIHZvaWQgcHVzaE5ld0FuaW1hdGlvbnNUb0ltcGxUaHJl
YWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7Ci0gICAgdm9pZCByZW1vdmVBbmlt
YXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bCopOwotICAgIHZvaWQgcHVzaEFuaW1hdGlvblByb3BlcnRpZXMoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsKik7CisgICAgdHlwZWRlZiBIYXNoU2V0PGludD4gVGFyZ2V0UHJvcGVydGll
czsKKworICAgIHZvaWQgcHVzaE5ld0FuaW1hdGlvbnNUb0ltcGxUaHJlYWQoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIqKTsKKyAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1h
aW5UaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqKTsKKworICAgIHZvaWQgc3RhcnRB
bmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1h
dGlvbkV2ZW50c1ZlY3RvciopOworICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0
YXJ0VGltZShkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IqKTsK
KyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91
YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKik7CisgICAgdm9pZCBy
ZXNvbHZlQ29uZmxpY3RzKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKKyAgICB2b2lkIHB1cmdlRmlu
aXNoZWRBbmltYXRpb25zKENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKik7CiAKLSAgICB2b2lkIHJl
bW92ZShpbnQgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KTsKKyAg
ICB2b2lkIHRpY2tBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKIAorICAgIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICBWZWN0b3I8T3duUHRy
PENDQWN0aXZlQW5pbWF0aW9uPiA+IG1fYWN0aXZlQW5pbWF0aW9uczsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTllOTFiMmUyYTRlNDU5ZGUwZGVmN2YxNmUyOWQ0
MTBhZGQzMDUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwot
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCi0KLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0vLyBBIGNvbGxlY3Rpb24gb2YgcHJvcGVydGllcy4gVXNlZCB3aGVuIGRldGVy
aW1pbmluZyBpZiBhbmltYXRpb25zIHdhaXRpbmcgZm9yIHRhcmdldAotLy8gYXZhaWxpYmlsaXR5
IGFyZSBhYmxlIHRvIHJ1bi4KLXR5cGVkZWYgSGFzaFNldDxpbnQ+IFRhcmdldFByb3BlcnRpZXM7
Ci0KLVBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQqIGNsaWVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbChjbGllbnQpKTsKLX0KLQotQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsQ2xpZW50KiBjbGllbnQpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi17
Ci19Ci0KLUNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6fkNDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbCgpCi17Ci19Ci0KLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsOjphbmltYXRlKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
ciYgZXZlbnRzKQotewotICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhtb25v
dG9uaWNUaW1lLCBldmVudHMpOwotICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRp
bWUobW9ub3RvbmljVGltZSwgZXZlbnRzKTsKLSAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9y
VGFyZ2V0QXZhaWxhYmlsaXR5KG1vbm90b25pY1RpbWUsIGV2ZW50cyk7Ci0gICAgcmVzb2x2ZUNv
bmZsaWN0cyhtb25vdG9uaWNUaW1lKTsKLSAgICB0aWNrQW5pbWF0aW9ucyhtb25vdG9uaWNUaW1l
KTsKLSAgICBwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucyhldmVudHMpOwotICAgIHN0YXJ0QW5pbWF0
aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkobW9ub3RvbmljVGltZSwgZXZlbnRzKTsK
LX0KLQotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFkZChQYXNzT3duUHRy
PENDQWN0aXZlQW5pbWF0aW9uPiBhbmltKQotewotICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5hcHBl
bmQoYW5pbSk7Ci19Ci0KLUNDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OmdldEFjdGl2ZUFuaW1hdGlvbihpbnQgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRp
b246OlRhcmdldFByb3BlcnR5IHByb3BlcnR5KQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3JvdXBJZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPnRhcmdldFByb3BlcnR5KCkgPT0gcHJvcGVydHkpCi0gICAgICAgICAgICByZXR1cm4gbV9h
Y3RpdmVBbmltYXRpb25zW2ldLmdldCgpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotYm9v
bCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Omhhc0FjdGl2ZUFuaW1hdGlvbigpIGNv
bnN0Ci17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUo
KSAhPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ld
LT5ydW5TdGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmlzQW5pbWF0aW5nUHJvcGVydHkoQ0NBY3RpdmVBbmlt
YXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KSBjb25zdAotewotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmlt
YXRpb246OkZpbmlzaGVkICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSAhPSBD
Q0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdl
dFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBtb25v
dG9uaWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYgZXZlbnRzKQotewotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmlt
YXRpb246OldhaXRpbmdGb3JOZXh0VGljaykgewotICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRp
b25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbW9ub3Rvbmlj
VGltZSk7Ci0gICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFN0YXJ0VGltZSht
b25vdG9uaWNUaW1lKTsKLSAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoQ0NBbmltYXRpb25TdGFy
dGVkRXZlbnQ6OmNyZWF0ZShtX2NsaWVudC0+aWQoKSkpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2Fp
dGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNW
ZWN0b3ImIGV2ZW50cykKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5p
bWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ld
LT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lICYm
IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c3RhcnRUaW1lKCkgPD0gbW9ub3RvbmljVGltZSkgewot
ICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6UnVubmluZywgbW9ub3RvbmljVGltZSk7Ci0gICAgICAgICAgICBldmVudHMuYXBw
ZW5kKENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50OjpjcmVhdGUobV9jbGllbnQtPmlkKCkpKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91YmxlIG1vbm90
b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiBldmVudHMpCi17Ci0gICAgLy8gRmly
c3QgY29sbGVjdCBydW5uaW5nIHByb3BlcnRpZXMuCi0gICAgVGFyZ2V0UHJvcGVydGllcyBibG9j
a2VkUHJvcGVydGllczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0
aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5y
dW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nIHx8IG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQpCi0gICAg
ICAgICAgICBibG9ja2VkUHJvcGVydGllcy5hZGQobV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJn
ZXRQcm9wZXJ0eSgpKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0
aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRp
b25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0
QXZhaWxhYmlsaXR5KSB7Ci0gICAgICAgICAgICAvLyBDb2xsZWN0IGFsbCBwcm9wZXJ0aWVzIGZv
ciBhbmltYXRpb25zIHdpdGggdGhlIHNhbWUgZ3JvdXAgaWQgKHRoZXkgc2hvdWxkIGFsbCBhbHNv
IGJlIGluIHRoZSBsaXN0IG9mIGFuaW1hdGlvbnMpLgotICAgICAgICAgICAgVGFyZ2V0UHJvcGVy
dGllcyBlbnF1ZXVlZFByb3BlcnRpZXM7Ci0gICAgICAgICAgICBlbnF1ZXVlZFByb3BlcnRpZXMu
YWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSk7Ci0gICAgICAgICAg
ICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyAr
K2opIHsKLSAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgp
ID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkKLSAgICAgICAgICAgICAgICAgICAg
ZW5xdWV1ZWRQcm9wZXJ0aWVzLmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnRhcmdldFByb3Bl
cnR5KCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYg
aW50ZXJzZWN0aW9uIG9mIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgYWZmZWN0ZWQgYnkgdGhlIGdy
b3VwIGFuZCB0aGUgbGlzdCBvZiBjdXJyZW50bHkKLSAgICAgICAgICAgIC8vIGJsb2NrZWQgcHJv
cGVydGllcyBpcyBudWxsLiBJbiBhbnkgY2FzZSwgdGhlIGdyb3VwJ3MgdGFyZ2V0IHByb3BlcnRp
ZXMgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgbGlzdAotICAgICAgICAgICAgLy8gb2YgYmxvY2tl
ZCBwcm9wZXJ0aWVzLgotICAgICAgICAgICAgYm9vbCBudWxsSW50ZXJzZWN0aW9uID0gdHJ1ZTsK
LSAgICAgICAgICAgIGZvciAoVGFyZ2V0UHJvcGVydGllczo6aXRlcmF0b3IgcEl0ZXIgPSBlbnF1
ZXVlZFByb3BlcnRpZXMuYmVnaW4oKTsgcEl0ZXIgIT0gZW5xdWV1ZWRQcm9wZXJ0aWVzLmVuZCgp
OyArK3BJdGVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFibG9ja2VkUHJvcGVydGllcy5hZGQo
KnBJdGVyKS5zZWNvbmQpCi0gICAgICAgICAgICAgICAgICAgIG51bGxJbnRlcnNlY3Rpb24gPSBm
YWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgdGhlIGludGVyc2VjdGlv
biBpcyBudWxsLCB0aGVuIHdlIGFyZSBmcmVlIHRvIHN0YXJ0IHRoZSBhbmltYXRpb25zIGluIHRo
ZSBncm91cC4KLSAgICAgICAgICAgIGlmIChudWxsSW50ZXJzZWN0aW9uKSB7Ci0gICAgICAgICAg
ICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlv
bjo6UnVubmluZywgbW9ub3RvbmljVGltZSk7Ci0gICAgICAgICAgICAgICAgbV9hY3RpdmVBbmlt
YXRpb25zW2ldLT5zZXRTdGFydFRpbWUobW9ub3RvbmljVGltZSk7Ci0gICAgICAgICAgICAgICAg
ZXZlbnRzLmFwcGVuZChDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDo6Y3JlYXRlKG1fY2xpZW50LT5p
ZCgpKSk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgbV9hY3Rp
dmVBbmltYXRpb25zLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2Fj
dGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gbV9hY3RpdmVBbmltYXRpb25zW2pdLT5ncm91
cCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnNl
dFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBtb25vdG9uaWNUaW1lKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+c2V0U3RhcnRUaW1l
KG1vbm90b25pY1RpbWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6cmVzb2x2ZUNvbmZsaWN0cyhkb3VibGUgbW9ub3RvbmljVGlt
ZSkKLXsKLSAgICAvLyBGaW5kIGFueSBhbmltYXRpb25zIHRoYXQgYXJlIGFuaW1hdGluZyB0aGUg
c2FtZSBwcm9wZXJ0eSBhbmQgcmVzb2x2ZSB0aGUKLSAgICAvLyBjb25maWN0LiBXZSBjb3VsZCBl
dmVudHVhbGx5IGJsZW5kLCBidXQgZm9yIG5vdyB3ZSdsbCBqdXN0IGFib3J0IHRoZQotICAgIC8v
IHByZXZpb3VzIGFuaW1hdGlvbiAod2hlcmUgJ3ByZXZpb3VzJyBtZWFuczogKDEpIGhhcyBhIHBy
aW9yIHN0YXJ0IHRpbWUgb3IKLSAgICAvLyAoMikgaGFzIGFuIGVxdWFsIHN0YXJ0IHRpbWUsIGJ1
dCB3YXMgYWRkZWQgdG8gdGhlIHF1ZXVlIGVhcmxpZXIsIGkuZS4sCi0gICAgLy8gaGFzIGEgbG93
ZXIgaW5kZXggaW4gbV9hY3RpdmVBbmltYXRpb25zKS4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3Rp
dmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5n
KSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FjdGl2ZUFuaW1h
dGlvbnMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRp
b25zW2pdLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nICYmIG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSBtX2FjdGl2ZUFuaW1hdGlvbnNb
al0tPnRhcmdldFByb3BlcnR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+c3RhcnRUaW1lKCkgPiBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnN0YXJ0
VGltZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5z
ZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgbW9ub3RvbmljVGltZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQsIG1v
bm90b25pY1RpbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnB1cmdl
RmluaXNoZWRBbmltYXRpb25zKENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiBldmVudHMpCi17Ci0g
ICAgLy8gRWFjaCBpdGVyYXRpb24sIG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkgZGVjcmVhc2Vz
IG9yIGkgaW5jcmVtZW50cywKLSAgICAvLyBndWFyYW50ZWVpbmcgcHJvZ3Jlc3MgdG93YXJkcyBs
b29wIHRlcm1pbmF0aW9uLgotICAgIHNpemVfdCBpID0gMDsKLSAgICB3aGlsZSAoaSA8IG1fYWN0
aXZlQW5pbWF0aW9ucy5zaXplKCkpIHsKLSAgICAgICAgYm9vbCBhbGxBbmltc1dpdGhTYW1lSWRB
cmVGaW5pc2hlZCA9IGZhbHNlOwotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5p
c0ZpbmlzaGVkKCkpIHsKLSAgICAgICAgICAgIGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZl
QW5pbWF0aW9ucy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gbV9hY3RpdmVBbmltYXRpb25zW2pdLT5ncm91cCgpICYm
ICFtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPmlzRmluaXNoZWQoKSkgewotICAgICAgICAgICAgICAg
ICAgICBhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkKSB7Ci0gICAgICAg
ICAgICBldmVudHMuYXBwZW5kKENDQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Y3JlYXRlKG1fY2xp
ZW50LT5pZCgpLCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlkKCkpKTsKLSAgICAgICAgICAgIG1f
ZmluaXNoZWRBbmltYXRpb25zLmFwcGVuZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNpZ25hdHVy
ZSgpKTsKLSAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgaSsrOwotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6OnRpY2tBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1lKQot
ewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0g
Q0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcpIHsKLSAgICAgICAgICAgIGRvdWJsZSB0cmltbWVk
ID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbihtb25v
dG9uaWNUaW1lKTsKLQotICAgICAgICAgICAgc3dpdGNoIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnRhcmdldFByb3BlcnR5KCkpIHsKLQotICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtOiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSogdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgPSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKLSAgICAgICAgICAgICAgICBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZS0+Z2V0VmFsdWUodHJpbW1lZCwgbV9jbGllbnQtPmJvdW5kcygpKTsKLSAgICAgICAgICAgICAg
ICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5pc0ZpbmlzaGVkQXQobW9ub3RvbmljVGltZSkp
Ci0gICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUo
Q0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkLCBtb25vdG9uaWNUaW1lKTsKLQotICAgICAgICAg
ICAgICAgIG1fY2xpZW50LT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eTogewotICAgICAgICAgICAgICAgIGNvbnN0IENDRmxvYXRBbmltYXRpb25DdXJ2
ZSogZmxvYXRBbmltYXRpb25DdXJ2ZSA9IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Y3VydmUoKS0+
dG9GbG9hdEFuaW1hdGlvbkN1cnZlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgb3Bh
Y2l0eSA9IGZsb2F0QW5pbWF0aW9uQ3VydmUtPmdldFZhbHVlKHRyaW1tZWQpOwotICAgICAgICAg
ICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlzRmluaXNoZWRBdChtb25vdG9uaWNU
aW1lKSkKLSAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5T
dGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQsIG1vbm90b25pY1RpbWUpOwotCi0gICAg
ICAgICAgICAgICAgbV9jbGllbnQtPnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0gLy8gc3dpdGNoCi0gICAg
ICAgIH0gLy8gaWYgcnVubmluZwotICAgIH0gLy8gZm9yIGVhY2ggYW5pbWF0aW9uCi19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5Mzk2
YmQ5NTkxZmI3NDMyNWQ4MjViNmFmOWFhYTQxNWFhZDA1NzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbF9oCi0jZGVmaW5lIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbF9oCi0KLSNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgImNj
L0NDQW5pbWF0aW9uQ3VydmUuaCIKLSNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgot
Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
LSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOwotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIFRyYW5z
Zm9ybWF0aW9uTWF0cml4OwotY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uczsKLQotY2xhc3MgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQoKSB7IH0KLQotICAgIHZpcnR1
YWwgaW50IGlkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgPSAwOwotICAgIHZpcnR1
YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jikg
PSAwOwotICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgPSAwOwotfTsK
LQotY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsIHsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwpOwotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY3JlYXRl
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCopOwotCi0gICAgdmlydHVhbCB+
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKCk7Ci0KLSAgICB2b2lkIGFuaW1hdGUoZG91
YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJik7Ci0KLSAgICB2b2lk
IGFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPik7Ci0KLSAgICAvLyBSZXR1cm5zIHRo
ZSBhY3RpdmUgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBncm91cCwgYW5pbWF0aW5nIHRoZSBnaXZl
biBwcm9wZXJ0eSBpZiBzdWNoIGFuCi0gICAgLy8gYW5pbWF0aW9uIGV4aXN0cy4KLSAgICBDQ0Fj
dGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJl
IGFyZSBhbnkgYW5pbWF0aW9ucyB0aGF0IGFyZSBuZWl0aGVyIGZpbmlzaGVkIG5vciBhYm9ydGVk
LgotICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3Q7Ci0KLSAgICBib29sIGlzQW5p
bWF0aW5nUHJvcGVydHkoQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7
Ci0KLSAgICAvLyBUaGUgYW5pbWF0b3IgaXMgb3duZWQgYnkgdGhlIGxheWVyLgotICAgIGV4cGxp
Y2l0IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxDbGllbnQqKTsKLQotICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5l
eHRUaWNrKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYpOwot
ICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbW9ub3Rv
bmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImKTsKLSAgICB2b2lkIHN0YXJ0QW5pbWF0
aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91YmxlIG1vbm90b25pY1RpbWUsIEND
QW5pbWF0aW9uRXZlbnRzVmVjdG9yJik7Ci0gICAgdm9pZCByZXNvbHZlQ29uZmxpY3RzKGRvdWJs
ZSBtb25vdG9uaWNUaW1lKTsKLSAgICB2b2lkIHB1cmdlRmluaXNoZWRBbmltYXRpb25zKENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yJik7Ci0KLSAgICB2b2lkIHRpY2tBbmltYXRpb25zKGRvdWJsZSBt
b25vdG9uaWNUaW1lKTsKLQotICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVu
dCogbV9jbGllbnQ7Ci0gICAgVmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gPiBtX2Fj
dGl2ZUFuaW1hdGlvbnM7Ci0gICAgVmVjdG9yPENDQWN0aXZlQW5pbWF0aW9uOjpBbmltYXRpb25T
aWduYXR1cmU+IG1fZmluaXNoZWRBbmltYXRpb25zOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsX2gKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckFuaW1hdGlvbkRlbGVnYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaAppbmRleCBhNzY0Y2MzN2Jk
Y2M3ZWUzZTg5YTdlODcyYmVkMDI1ZTYyY2IxZGE4Li40Yzg4YTkyMTFlYzQwNzNiYTdhNDk2MDM0
N2VjMDFmYmNjODNkZDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uRGVs
ZWdhdGUuaApAQCAtMzEsNyArMzEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDQ0xh
eWVyQW5pbWF0aW9uRGVsZWdhdGUgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlB
bmltYXRpb25TdGFydGVkKGRvdWJsZSB0aW1lKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlm
eUFuaW1hdGlvbkZpbmlzaGVkKGludCBhbmltYXRpb25JZCkgPSAwOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDM0ZDYwMDgwMmFlNWZi
MTA0MWMwMzJlZTEyMjYwODgxMmMxMDZlNDQuLmQ3ZTJiOGEwZDRhYmM2YzA1NmUwZTM4YjhhNDRh
NDZhOTE1OTRjZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTMzLDcgKzMzLDYgQEAK
ICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCi0jaW5jbHVkZSAi
Y2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXll
clNvcnRlci5oIgogI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgogI2luY2x1ZGUgImNjL0ND
U29saWRDb2xvckRyYXdRdWFkLmgiCkBAIC03MCw3ICs2OSw3IEBAIENDTGF5ZXJJbXBsOjpDQ0xh
eWVySW1wbChpbnQgaWQpCiAgICAgLCBtX2RlYnVnQm9yZGVyV2lkdGgoMCkKICAgICAsIG1fZHJh
d1RyYW5zZm9ybUlzQW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9zY3JlZW5TcGFjZVRyYW5zZm9y
bUlzQW5pbWF0aW5nKGZhbHNlKQotICAgICwgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUodGhpcykpCisgICAgLCBtX2xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKHRo
aXMpKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiB9CkBAIC0zMTAs
NiArMzA5LDE2IEBAIHZvaWQgQ0NMYXllckltcGw6OnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JT
dWJ0cmVlKCkKICAgICAgICAgbV9jaGlsZHJlbltpXS0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0Zv
clN1YnRyZWUoKTsKIH0KIAordm9pZCBDQ0xheWVySW1wbDo6c2V0T3BhY2l0eUZyb21BbmltYXRp
b24oZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBzZXRPcGFjaXR5KG9wYWNpdHkpOworfQorCit2b2lk
IENDTGF5ZXJJbXBsOjpzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgc2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7Cit9
CisKIHZvaWQgQ0NMYXllckltcGw6OnNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBib3VuZHMpCiB7
CiAgICAgaWYgKG1fYm91bmRzID09IGJvdW5kcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDgx
OTc1OGY2MjA0MzljZjlmYjZhYzA5ZWJiNTA2NjI0NDczMjY2YTEuLjZmMDJlZjgyNzQyNTg2Yjg0
NTQzMTE1ZWVmZDA3N2JmZDY0NGRlOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMzMsNyAr
MzMsNyBAQAogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNp
bmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NTaGFyZWRRdWFkU3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00OCwyOCAr
NDgsMjMgQEAgY2xhc3MgQ0NRdWFkQ3VsbGVyOwogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNz
IExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIAotY2xhc3MgQ0NMYXllckltcGwgOiBwdWJsaWMgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IHsKK2NsYXNzIENDTGF5ZXJJbXBsIDog
cHVibGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc093blB0cjxDQ0xheWVySW1wbD4gY3JlYXRlKGludCBpZCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllckltcGwoaWQpKTsKICAgICB9CiAKLSAgICAv
LyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgaW1wbGVtZW50YXRpb24uCi0g
ICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7IH0KKyAgICB2aXJ0
dWFsIH5DQ0xheWVySW1wbCgpOwogCi0gICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQp
OworICAgIC8vIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGltcGxlbWVudGF0aW9u
LgorICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcklkOyB9CisgICAg
dmlydHVhbCB2b2lkIHNldE9wYWNpdHlGcm9tQW5pbWF0aW9uKGZsb2F0KTsKICAgICB2aXJ0dWFs
IGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KLSAgICBib29sIG9w
YWNpdHlJc0FuaW1hdGluZygpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFu
c2Zvcm1Gcm9tQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgdmly
dHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV90cmFuc2Zvcm07IH0KLSAgICBib29sIHRyYW5zZm9ybUlzQW5pbWF0aW5nKCkgY29uc3Q7
Ci0KICAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1f
Ym91bmRzOyB9CiAKLSAgICB2aXJ0dWFsIH5DQ0xheWVySW1wbCgpOwotCiAgICAgLy8gVHJlZSBz
dHJ1Y3R1cmUuCiAgICAgQ0NMYXllckltcGwqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFy
ZW50OyB9CiAgICAgY29uc3QgVmVjdG9yPE93blB0cjxDQ0xheWVySW1wbD4gPiYgY2hpbGRyZW4o
KSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CkBAIC0xMjQsNiArMTE5LDkgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0T3BhcXVlKGJvb2wpOwogICAgIGJvb2wgb3BhcXVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcGFxdWU7IH0KIAorICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7CisgICAgYm9v
bCBvcGFjaXR5SXNBbmltYXRpbmcoKSBjb25zdDsKKwogICAgIHZvaWQgc2V0UG9zaXRpb24oY29u
c3QgRmxvYXRQb2ludCYpOwogICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9wb3NpdGlvbjsgfQogCkBAIC0yMDgsNiArMjA2LDkgQEAgcHVibGljOgogICAg
IC8vIFJldHVybnMgdGhlIHJlY3QgY29udGFpbnRhaW5pbmcgdGhpcyBsYXllciBpbiB0aGUgY3Vy
cmVudCB2aWV3J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgY29uc3QgSW50UmVjdCBnZXREcmF3
UmVjdCgpIGNvbnN0OwogCisgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmKTsKKyAgICBib29sIHRyYW5zZm9ybUlzQW5pbWF0aW5nKCkgY29uc3Q7CisKICAg
ICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQogICAgIHZvaWQgc2V0RHJhd1RyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fZHJhd1RyYW5zZm9ybSA9IG1hdHJpeDsg
fQogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzY3JlZW5TcGFjZVRyYW5zZm9ybSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm07IH0KQEAgLTIyOCw3ICsyMjks
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBsYXllclByb3BlcnR5Q2hhbmdlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQ7IH0KICAgICB2b2lkIHJlc2V0QWxsQ2hhbmdlVHJh
Y2tpbmdGb3JTdWJ0cmVlKCk7CiAKLSAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwq
IGxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fbGF5ZXJBbmltYXRpb25Db250
cm9sbGVyLmdldCgpOyB9CisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGxheWVyQW5p
bWF0aW9uQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmdl
dCgpOyB9CiAKICAgICB2aXJ0dWFsIFJlZ2lvbiBvcGFxdWVDb250ZW50c1JlZ2lvbigpIGNvbnN0
IHsgcmV0dXJuIFJlZ2lvbigpOyB9OwogCkBAIC0zNTgsNyArMzU5LDcgQEAgcHJpdmF0ZToKICAg
ICBGbG9hdFJlY3QgbV91cGRhdGVSZWN0OwogCiAgICAgLy8gTWFuYWdlcyBhbmltYXRpb25zIGZv
ciB0aGlzIGxheWVyLgotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+
IG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyOworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcj4gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CiB9OwogCiB2b2lkIHNvcnRM
YXllcnMoVmVjdG9yPENDTGF5ZXJJbXBsKj46Oml0ZXJhdG9yIGZpcnN0LCBWZWN0b3I8Q0NMYXll
ckltcGwqPjo6aXRlcmF0b3IgZW5kLCBDQ0xheWVyU29ydGVyKik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcAppbmRleCAwMTc4MjBhN2M3MGUxYjkzZmM2MmE0ZGY0NzY2NDUyODY5NzAz
NWExLi4yNWM0MTUwZDllMGYzMDE3MTdkNmQ0MzQ1OTFjYmFhMjg5OGNkMTZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJSZWdp
b24uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXpl
ci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29t
bW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgpAQCAtNjQsNiArNjUs
NyBAQCBQYXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGUo
Q0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbgogQ0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJl
ZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIGNvbnN0IENDU2V0dGluZ3MmIHNl
dHRpbmdzKQogICAgIDogbV9jb21wb3NpdG9ySWRlbnRpZmllcigtMSkKICAgICAsIG1fYW5pbWF0
aW5nKGZhbHNlKQorICAgICwgbV9uZWVkc0FuaW1hdGVMYXllcnMoZmFsc2UpCiAgICAgLCBtX2Ns
aWVudChjbGllbnQpCiAgICAgLCBtX2ZyYW1lTnVtYmVyKDApCiAgICAgLCBtX2xheWVyUmVuZGVy
ZXJJbml0aWFsaXplZChmYWxzZSkKQEAgLTE4MSw2ICsxODMsNyBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6dXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgZnJhbWVCZWdpblRpbWUpCiB7CiAgICAgbV9h
bmltYXRpbmcgPSB0cnVlOwogICAgIG1fY2xpZW50LT51cGRhdGVBbmltYXRpb25zKGZyYW1lQmVn
aW5UaW1lKTsKKyAgICBhbmltYXRlTGF5ZXJzKGZyYW1lQmVnaW5UaW1lKTsKICAgICBtX2FuaW1h
dGluZyA9IGZhbHNlOwogfQogCkBAIC0yMDksOSArMjEyLDEyIEBAIHZvaWQgQ0NMYXllclRyZWVI
b3N0OjpmaW5pc2hDb21taXRPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdElt
cGwpCiAKICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNo
cm9uaXplVHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5yZWxlYXNlUm9vdExheWVyKCkpKTsK
IAotICAgIC8vIFdlIG1heSBoYXZlIGFkZGVkIGFuIGFuaW1hdGlvbiBkdXJpbmcgdGhlIHRyZWUg
c3luYy4gVGhpcyB3aWxsIGNhdXNlIGhvc3RJbXBsIHRvIHZpc2l0IGl0cyBjb250cm9sbGVycy4K
LSAgICBpZiAocm9vdExheWVyKCkpCisgICAgLy8gV2UgbWF5IGhhdmUgYWRkZWQgYW4gYW5pbWF0
aW9uIGR1cmluZyB0aGUgdHJlZSBzeW5jLiBUaGlzIHdpbGwgY2F1c2UgYm90aCBsYXllciB0cmVl
IGhvc3RzCisgICAgLy8gdG8gdmlzaXQgdGhlaXIgY29udHJvbGxlcnMuCisgICAgaWYgKHJvb3RM
YXllcigpKSB7CiAgICAgICAgIGhvc3RJbXBsLT5zZXROZWVkc0FuaW1hdGVMYXllcnMoKTsKKyAg
ICAgICAgbV9uZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVlOworICAgIH0KIAogICAgIGhvc3RJbXBs
LT5zZXRTb3VyY2VGcmFtZU51bWJlcihmcmFtZU51bWJlcigpKTsKICAgICBob3N0SW1wbC0+c2V0
Vmlld3BvcnRTaXplKHZpZXdwb3J0U2l6ZSgpKTsKQEAgLTM4Niw5ICszOTIsMTIgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRocmVhZChDQ0xheWVyVHJl
ZUhvc3RJbXBsKiBob3N0SW0KIAogICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNo
cm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJlbGVhc2VS
b290TGF5ZXIoKSkpOwogCi0gICAgLy8gV2UgbWF5IGhhdmUgYWRkZWQgYW4gYW5pbWF0aW9uIGR1
cmluZyB0aGUgdHJlZSBzeW5jLiBUaGlzIHdpbGwgY2F1c2UgaG9zdEltcGwgdG8gdmlzaXQgaXRz
IGNvbnRyb2xsZXJzLgotICAgIGlmIChyb290TGF5ZXIoKSkKKyAgICAvLyBXZSBtYXkgaGF2ZSBh
ZGRlZCBhbiBhbmltYXRpb24gZHVyaW5nIHRoZSB0cmVlIHN5bmMuIFRoaXMgd2lsbCBjYXVzZSBi
b3RoIGxheWVyIHRyZWUgaG9zdHMKKyAgICAvLyB0byB2aXNpdCB0aGVpciBjb250cm9sbGVycy4K
KyAgICBpZiAocm9vdExheWVyKCkpIHsKICAgICAgICAgaG9zdEltcGwtPnNldE5lZWRzQW5pbWF0
ZUxheWVycygpOworICAgICAgICBtX25lZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7CisgICAgfQog
fQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3Qg
SW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sIGJvb2wgdXNlQW5jaG9yLCBmbG9hdCBzY2FsZSwgZG91
YmxlIGR1cmF0aW9uU2VjKQpAQCAtNjQyLDYgKzY1MSwzMyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6ZGVsZXRlVGV4dHVyZUFmdGVyQ29tbWl0KFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRl
eHR1cgogICAgIG1fZGVsZXRlVGV4dHVyZUFmdGVyQ29tbWl0TGlzdC5hcHBlbmQodGV4dHVyZSk7
CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlTGF5ZXJzKGRvdWJsZSBtb25vdG9u
aWNUaW1lKQoreworICAgIGlmICghbV9zZXR0aW5ncy50aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQg
fHwgIW1fbmVlZHNBbmltYXRlTGF5ZXJzIHx8ICFtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMi
LCB0aGlzLCAwKTsKKyAgICBtX25lZWRzQW5pbWF0ZUxheWVycyA9IGFuaW1hdGVMYXllcnNSZWN1
cnNpdmUobV9yb290TGF5ZXIuZ2V0KCksIG1vbm90b25pY1RpbWUpOworfQorCitib29sIENDTGF5
ZXJUcmVlSG9zdDo6YW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBjdXJyZW50
LCBkb3VibGUgbW9ub3RvbmljVGltZSkKK3sKKyAgICBib29sIHN1YnRyZWVOZWVkc0FuaW1hdGVM
YXllcnMgPSBmYWxzZTsKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciogY3VycmVudENv
bnRyb2xsZXIgPSBjdXJyZW50LT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBjdXJy
ZW50Q29udHJvbGxlci0+YW5pbWF0ZShtb25vdG9uaWNUaW1lLCAwKTsKKworICAgIC8vIElmIHRo
ZSBjdXJyZW50IGNvbnRyb2xsZXIgc3RpbGwgaGFzIGFuIGFjdGl2ZSBhbmltYXRpb24sIHdlIG11
c3QgY29udGludWUgYW5pbWF0aW5nIGxheWVycy4KKyAgICBpZiAoY3VycmVudENvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKQorICAgICAgICAgc3VidHJlZU5lZWRzQW5pbWF0ZUxheWVy
cyA9IHRydWU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnJlbnQtPmNoaWxkcmVu
KCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoY3Vy
cmVudC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgbW9ub3RvbmljVGltZSkpCisgICAgICAgICAgICBz
dWJ0cmVlTmVlZHNBbmltYXRlTGF5ZXJzID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gc3Vi
dHJlZU5lZWRzQW5pbWF0ZUxheWVyczsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldEFu
aW1hdGlvbkV2ZW50c1JlY3Vyc2l2ZShjb25zdCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYgZXZl
bnRzLCBMYXllckNocm9taXVtKiBsYXllciwgZG91YmxlIHdhbGxDbG9ja1RpbWUpCiB7CiAgICAg
Zm9yIChzaXplX3QgZXZlbnRJbmRleCA9IDA7IGV2ZW50SW5kZXggPCBldmVudHMuc2l6ZSgpOyAr
K2V2ZW50SW5kZXgpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggODlmMWJlMzA3
ZWRmYzkxNmQ2MDllMDg1YTM1NTIyNjc3NjIzZWM4Ny4uZjc0OWE2YjAzZDE3ZjQ0ZWQ2MTk4NGZl
OTgwMmFhMDEwZDhlNjFiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTIyNSwx
MSArMjI1LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXNlcnZlVGV4dHVyZXMoKTsKICAgICB2
b2lkIGNsZWFyUGVuZGluZ1VwZGF0ZSgpOwogCisgICAgdm9pZCBhbmltYXRlTGF5ZXJzKGRvdWJs
ZSBtb25vdG9uaWNUaW1lKTsKKyAgICBib29sIGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJD
aHJvbWl1bSogY3VycmVudCwgZG91YmxlIG1vbm90b25pY1RpbWUpOwogICAgIHZvaWQgc2V0QW5p
bWF0aW9uRXZlbnRzUmVjdXJzaXZlKGNvbnN0IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiwgTGF5
ZXJDaHJvbWl1bSosIGRvdWJsZSB3YWxsQ2xvY2tUaW1lKTsKIAogICAgIGludCBtX2NvbXBvc2l0
b3JJZGVudGlmaWVyOwogCiAgICAgYm9vbCBtX2FuaW1hdGluZzsKKyAgICBib29sIG1fbmVlZHNB
bmltYXRlTGF5ZXJzOwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBtX2NsaWVudDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggZWU2YmY5OGE1
MjM2ZDdhYjFkZDA4YmJhZjczZWQ1YzNkYTYzYTZjOS4uOTEyNGIwNzY1OTAxMzFmZjhjNmFmNDgx
NGYyMTZmMTdkMTI0NzZjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21t
b24uY3BwCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJj
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBs
LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXll
clNvcnRlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBl
YmUwNmY1MTBlOTZkNWQwN2Q3ZDcwZjdlNjNjNTkzNjQ1YTY0ZDQ0Li40Y2U2YWY0MGNlYzk5YmRi
ZDY3ZmNiODUxNjc5OTI0M2JkZDZiZjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcApAQCAtMzEwLDE1ICszMTAsMTUgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzLCBDQ0xheWUK
ICAgICBvY2NsdXNpb25UcmFja2VyLm92ZXJkcmF3TWV0cmljcygpLnJlY29yZE1ldHJpY3ModGhp
cyk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVyc1JlY3Vyc2l2
ZShDQ0xheWVySW1wbCogY3VycmVudCwgZG91YmxlIG1vbm90b25pY1RpbWUsIGRvdWJsZSB3YWxs
Q2xvY2tUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYgZXZlbnRzLCBib29sJiBkaWRBbmlt
YXRlLCBib29sJiBuZWVkc0FuaW1hdGVMYXllcnMpCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OmFuaW1hdGVMYXllcnNSZWN1cnNpdmUoQ0NMYXllckltcGwqIGN1cnJlbnQsIGRvdWJsZSBtb25v
dG9uaWNUaW1lLCBkb3VibGUgd2FsbENsb2NrVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3Iq
IGV2ZW50cywgYm9vbCYgZGlkQW5pbWF0ZSwgYm9vbCYgbmVlZHNBbmltYXRlTGF5ZXJzKQogewog
ICAgIGJvb2wgc3VidHJlZU5lZWRzQW5pbWF0ZUxheWVycyA9IGZhbHNlOwogCi0gICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjdXJyZW50Q29udHJvbGxlciA9IGN1cnJlbnQtPmxh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOworICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
KiBjdXJyZW50Q29udHJvbGxlciA9IGN1cnJlbnQtPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigp
OwogCiAgICAgYm9vbCBoYWRBY3RpdmVBbmltYXRpb24gPSBjdXJyZW50Q29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCk7CiAgICAgY3VycmVudENvbnRyb2xsZXItPmFuaW1hdGUobW9ub3Rv
bmljVGltZSwgZXZlbnRzKTsKLSAgICBib29sIHN0YXJ0ZWRBbmltYXRpb24gPSBldmVudHMuc2l6
ZSgpID4gMDsKKyAgICBib29sIHN0YXJ0ZWRBbmltYXRpb24gPSBldmVudHMtPnNpemUoKSA+IDA7
CiAKICAgICAvLyBXZSBhbmltYXRlZCBpZiB3ZSBlaXRoZXIgdGlja2VkIGEgcnVubmluZyBhbmlt
YXRpb24sIG9yIHN0YXJ0ZWQgYSBuZXcgYW5pbWF0aW9uLgogICAgIGlmIChoYWRBY3RpdmVBbmlt
YXRpb24gfHwgc3RhcnRlZEFuaW1hdGlvbikKQEAgLTc3OCw3ICs3NzgsNyBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMoZG91YmxlIG1vbm90b25pY1RpbWUsIGRvdWJs
ZSB3YWxsQ2xvY2tUaQogICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRz
KGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwogCiAgICAgYm9vbCBkaWRB
bmltYXRlID0gZmFsc2U7Ci0gICAgYW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShtX3Jvb3RMYXllcklt
cGwuZ2V0KCksIG1vbm90b25pY1RpbWUsIHdhbGxDbG9ja1RpbWUsICpldmVudHMsIGRpZEFuaW1h
dGUsIG1fbmVlZHNBbmltYXRlTGF5ZXJzKTsKKyAgICBhbmltYXRlTGF5ZXJzUmVjdXJzaXZlKG1f
cm9vdExheWVySW1wbC5nZXQoKSwgbW9ub3RvbmljVGltZSwgd2FsbENsb2NrVGltZSwgZXZlbnRz
LmdldCgpLCBkaWRBbmltYXRlLCBtX25lZWRzQW5pbWF0ZUxheWVycyk7CiAKICAgICBpZiAoIWV2
ZW50cy0+aXNFbXB0eSgpKQogICAgICAgICBtX2NsaWVudC0+cG9zdEFuaW1hdGlvbkV2ZW50c1Rv
TWFpblRocmVhZE9uSW1wbFRocmVhZChldmVudHMucmVsZWFzZSgpLCB3YWxsQ2xvY2tUaW1lKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCAzYmI3ZDNkZTE0MTM2ZWRi
YmM5ZjE5ZWRmODUwNDcyNDNkZmJiYWEzLi44MjQzNWZjZTQwYzdkNjFiNzkxZjc1OGUzOTM4OWE3
NTMzMmEwYzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0xNjEs
NyArMTYxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7
CiAgICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJh
d0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAg
dm9pZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYsIENDTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKLSAgICB2b2lkIGFuaW1hdGVMYXllcnNSZWN1cnNp
dmUoQ0NMYXllckltcGwqLCBkb3VibGUgbW9ub3RvbmljVGltZSwgZG91YmxlIHdhbGxDbG9ja1Rp
bWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiwgYm9vbCYgZGlkQW5pbWF0ZSwgYm9vbCYgbmVl
ZHNBbmltYXRlTGF5ZXJzKTsKKyAgICB2b2lkIGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoQ0NMYXll
ckltcGwqLCBkb3VibGUgbW9ub3RvbmljVGltZSwgZG91YmxlIHdhbGxDbG9ja1RpbWUsIENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yKiwgYm9vbCYgZGlkQW5pbWF0ZSwgYm9vbCYgbmVlZHNBbmltYXRl
TGF5ZXJzKTsKICAgICBJbnRTaXplIGNvbnRlbnRTaXplKCkgY29uc3Q7CiAgICAgdm9pZCBzZW5k
RGlkTG9zZUNvbnRleHRSZWN1cnNpdmUoQ0NMYXllckltcGwqKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZFByb3h5LmNwcAppbmRleCAzMjdkOWJlMGIxMjBmYjllZmRlZmY4MDUzMTg4MDUzMzA2YWJkYTRi
Li5mYzc3NWMzZWU4MjVlMTcxYmVmNGFlYjI1NzljNDdiOTQ5YzM2MjU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFByb3h5LmNwcApAQCAtMzkzLDggKzM5Myw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6
c2NoZWR1bGVkQWN0aW9uQmVnaW5GcmFtZSgpCiB7CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJD
Q1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25CZWdpbkZyYW1lIik7CiAgICAgQVNTRVJUKCFt
X3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdCk7Ci0gICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVl
c3QgPSBhZG9wdFB0cihuZXcgQmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlKCkpOwotICAgIG1fcGVu
ZGluZ0JlZ2luRnJhbWVSZXF1ZXN0LT5mcmFtZUJlZ2luVGltZSA9IDA7CisgICAgbV9wZW5kaW5n
QmVnaW5GcmFtZVJlcXVlc3QgPSBhZG9wdFB0cihuZXcgQmVnaW5GcmFtZUFuZENvbW1pdFN0YXRl
KG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKSk7CiAgICAgbV9wZW5kaW5nQmVnaW5GcmFt
ZVJlcXVlc3QtPnNjcm9sbEluZm8gPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcm9jZXNzU2Nyb2xs
RGVsdGFzKCk7CiAKICAgICBtX21haW5UaHJlYWRQcm94eS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJl
YWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZFByb3h5LmgKaW5kZXggOWU1MjRhNzYzZTI4NTBmZDIwOWMxM2UzNTI2MTJlYzVjYTMwNDllMS4u
YWFmMmY3MmJlMjI4MzdmNmViMDQ1MjdkMmFkNTI3ZTFiYzdjNjI5YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkUHJveHkuaApAQCAtOTIsNyArOTIsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gU2V0IG9uIGlt
cGwgdGhyZWFkLCByZWFkIG9uIG1haW4gdGhyZWFkLgogICAgIHN0cnVjdCBCZWdpbkZyYW1lQW5k
Q29tbWl0U3RhdGUgewotICAgICAgICBCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGUoKSA6IGZyYW1l
QmVnaW5UaW1lKDApIHsgfQorICAgICAgICBCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGUoZG91Ymxl
IGZyYW1lQmVnaW5UaW1lKSA6IGZyYW1lQmVnaW5UaW1lKGZyYW1lQmVnaW5UaW1lKSB7IH0KICAg
ICAgICAgZG91YmxlIGZyYW1lQmVnaW5UaW1lOwogICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRT
Y2FsZVNldD4gc2Nyb2xsSW5mbzsKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkK
aW5kZXggNmE2MzQxNmI2OWRiMTI2YTIwOTkzZWZlMmM1Y2UxMGRjZGYwNTUxYi4uZTI2N2E1YmQz
ZGI5M2NkYjJjN2Y4OTJjMjE2Yjg5NzJmMzMzN2YyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCkBAIC02Nyw3ICs2Nyw2IEBACiAgICAgICAgICAgICAndGVzdHMvQ0NEZWxheUJhc2Vk
VGltZVNvdXJjZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRy
b2xsZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25D
dXJ2ZVRlc3QuY3BwJywKLSAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckltcGxUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24u
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24u
Y3BwCmluZGV4IGM5MjQwZTMxZmNjNmI3ZjAwYzFiNjkzN2ZhNzY5MWJiMDNiNDVkYzMuLmMyMmU0
MzIyYjkxNzg0ZjgyMWFjYzIyZDdkNjE2MzZkZTU2NWE4OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAKQEAgLTEw
NiwxMiArMTA2LDEyIEBAIGZsb2F0IEZha2VGbG9hdFRyYW5zaXRpb246OmdldFZhbHVlKGRvdWJs
ZSB0aW1lKSBjb25zdAogICAgIHJldHVybiAoMSAtIHRpbWUpICogbV9mcm9tICsgdGltZSAqIG1f
dG87CiB9CiAKLUZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50OjpGYWtlTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCgpCitGYWtlTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyQ2xpZW50OjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KCkKICAgICA6
IG1fb3BhY2l0eSgwKQogewogfQogCi1GYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENs
aWVudDo6fkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KCkKK0Zha2VMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQ6On5GYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
Q2xpZW50KCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NBbmltYXRpb25UZXN0Q29tbW9uLmgKaW5kZXggZDEzZTc0Y2ExNzFlZTkzOWJjNjEwZjkzNGIw
MzM4NmQxNjc2N2RjZS4uMTQ2NDE0ZTMwMWJhNDg3MTZmYTQ3MDg0ZTNlMTQyYTE4YmU0ZTYzZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RD
b21tb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVz
dENvbW1vbi5oCkBAIC0yNiwxMiArMjYsMTEgQEAKICNkZWZpbmUgQ0NBbmltYXRpb25UZXN0Q29t
bW9uX2gKIAogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKLSNpbmNsdWRlICJjYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlci5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1jbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIExh
eWVyQ2hyb21pdW07CiB9CiAKQEAgLTc3LDE2ICs3NiwxNyBAQCBwcml2YXRlOgogICAgIGZsb2F0
IG1fdG87CiB9OwogCi1jbGFzcyBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVu
dCA6IHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQg
eworY2xhc3MgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCA6IHB1YmxpYyBXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgRmFr
ZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQoKTsKLSAgICB2aXJ0dWFsIH5GYWtl
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCgpOworICAgIEZha2VMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJDbGllbnQoKTsKKyAgICB2aXJ0dWFsIH5GYWtlTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyQ2xpZW50KCk7CiAKKyAgICAvLyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNs
aWVudCBpbXBsZW1lbnRhdGlvbgogICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgeyByZXR1cm4g
MDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5RnJvbUFuaW1hdGlvbihmbG9hdCBvcGFj
aXR5KSB7IG1fb3BhY2l0eSA9IG9wYWNpdHk7IH0KICAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHko
KSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0
eShmbG9hdCBvcGFjaXR5KSB7IG1fb3BhY2l0eSA9IG9wYWNpdHk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VHJhbnNmb3JtRnJvbUFuaW1hdGlvbihjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9CiAgICAgdmly
dHVhbCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3Jt
KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90cmFu
c2Zvcm0gPSB0cmFuc2Zvcm07IH0KICAgICB2aXJ0dWFsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTFhZWNjYzUzOWE1ZDUxZGZmMThhMmJlN2M0MmVlYmExNDU3ZWZiZC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMzk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgotI2luY2x1ZGUgImNjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgotI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3Vy
dmUuaCIKLSNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgotI2luY2x1ZGUgPGdtb2Nr
L2dtb2NrLmg+Ci0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIFdlYktpdFRl
c3RzOwotCi1uYW1lc3BhY2UgewotCi1QYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVh
dGVBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgaW50
IGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJvcGVydHkpCi17Ci0gICAg
cmV0dXJuIENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUsIDAsIGlkLCBwcm9wZXJ0eSk7
Ci19Ci0KLS8vIFRlc3RzIHRoYXQgdHJhbnNpdGlvbmluZyBvcGFjaXR5IGZyb20gMCB0byAxIHdv
cmtzIGFzIGV4cGVjdGVkLgotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0
LCBUcml2aWFsVHJhbnNpdGlvbikKLXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0
b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBG
YWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIE93blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKLQotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFj
aXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNU
X0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKLX0KLQotLy8gVGVzdHMgdGhhdCB0d28gcXVldWVkIGFuaW1h
dGlvbnMgYWZmZWN0aW5nIHRoZSBzYW1lIHByb3BlcnR5IHJ1biBpbiBzZXF1ZW5jZS4KLVRFU1Qo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlhbFF1ZXVpbmcpCi17Ci0g
ICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IEND
QW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbD4gY29udHJvbGxlcigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpjcmVhdGUoJmR1bW15KSk7Ci0KLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYp
KSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5
KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX0VR
KDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKLX0KLQotLy8gVGVzdHMgaW50ZXJydXB0aW5nIGEgdHJhbnNp
dGlvbiB3aXRoIGFub3RoZXIgdHJhbnNpdGlvbi4KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdCwgSW50ZXJydXB0KQotewotICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50
c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwot
ICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93
blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0gICAgICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotICAgIGNv
bnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwot
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5v
cGFjaXR5KCkpOwotCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41
ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIHRvQWRkLT5zZXRSdW5T
dGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrLCAwKTsKLSAgICBjb250
cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLQotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MC41LCAqZXZlbnRzKTsgLy8gc2Vjb25kIGFuaW0gc3RhcnRzIE5PVy4KLSAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDEsIGR1
bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjUsICpldmVudHMpOwot
ICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIEVYUEVDVF9GQUxTRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci19Ci0KLS8vIFRlc3RzIHNjaGVkdWxp
bmcgdHdvIGFuaW1hdGlvbnMgdG8gcnVuIHRvZ2V0aGVyIHdoZW4gb25seSBvbmUgcHJvcGVydHkg
aXMgZnJlZS4KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1
bGVUb2dldGhlcldoZW5BUHJvcGVydHlJc0Jsb2NrZWQpCi17Ci0gICAgT3duUHRyPENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yKSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7
Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigK
LSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7
Ci0KLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5l
dyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFu
c2Zvcm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9u
OjpUcmFuc2Zvcm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMiwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50
cyk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMSwgKmV2ZW50cyk7Ci0gICAgLy8gU2hvdWxkIG5vdCBoYXZlIHN0YXJ0ZWQgdGhlIGZsb2F0
IHRyYW5zaXRpb24geWV0LgotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICAvLyBU
aGUgdGhlIGZsb2F0IGFuaW1hdGlvbiBzaG91bGQgaGF2ZSBzdGFydGVkIGF0IHRpbWUgMSBhbmQg
c2hvdWxkIGJlIGRvbmUuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKLSAg
ICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBFWFBFQ1RfRkFMU0UoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotfQotCi0vLyBUZXN0cyBzY2hlZHVsaW5nIHR3
byBhbmltYXRpb25zIHRvIHJ1biB0b2dldGhlciB3aXRoIGRpZmZlcmVudCBsZW5ndGhzIGFuZCBh
bm90aGVyCi0vLyBhbmltYXRpb24gcXVldWVkIHRvIHN0YXJ0IHdoZW4gdGhlIHNob3J0ZXIgYW5p
bWF0aW9uIGZpbmlzaGVzIChzaG91bGQgd2FpdAotLy8gZm9yIGJvdGggdG8gZmluaXNoKS4KLVRF
U1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldp
dGhBbkFuaW1XYWl0aW5nKQotewotICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4g
ZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwotICAgIEZha2VM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotCi0gICAgY29udHJvbGxl
ci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRy
YW5zaXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29u
dHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0g
ICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7Ci0KLSAgICAvLyBBbmltcyB3aXRoIGlkIDEgc2hvdWxkIGJvdGggc3RhcnQgbm93Lgot
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5v
cGFjaXR5KCkpOwotICAgIC8vIFRoZSBvcGFjaXR5IGFuaW1hdGlvbiBzaG91bGQgaGF2ZSBmaW5p
c2hlZCBhdCB0aW1lIDEsIGJ1dCB0aGUgZ3JvdXAKLSAgICAvLyBvZiBhbmltYXRpb25zIHdpdGgg
aWQgMSBkb24ndCBmaW5pc2ggdW50aWwgdGltZSAyIGJlY2F1c2Ugb2YgdGhlIGxlbmd0aAotICAg
IC8vIG9mIHRoZSB0cmFuc2Zvcm0gYW5pbWF0aW9uLgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MiwgKmV2ZW50cyk7Ci0gICAgLy8gU2hvdWxkIG5vdCBoYXZlIHN0YXJ0ZWQgdGhlIGZsb2F0IHRy
YW5zaXRpb24geWV0LgotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLQotICAgIC8vIFRo
ZSB0aGUgc2Vjb25kIG9wYWNpdHkgYW5pbWF0aW9uIHNob3VsZCBzdGFydCBhdCB0aW1lIDIgYW5k
IHNob3VsZCBiZQotICAgIC8vIGRvbmUgYnkgdGltZSAzCi0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgzLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAg
ICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotfQotCi0v
LyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlLgot
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZUFuaW1hdGlv
bikKLXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0
cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICB0
b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUs
IDApOwotICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7Ci0gICAgY29udHJvbGxlci0+YWRkKHRv
QWRkLnJlbGVhc2UoKSk7Ci0KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwot
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBF
WFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEs
ICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKLSAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVy
LT5hbmltYXRlKDIsICpldmVudHMpOwotICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkp
OwotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci19
Ci0KLS8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1
cmUgdGhhdCdzIGludGVycnVwdGluZyBhIHJ1bm5pbmcgYW5pbWF0aW9uLgotVEVTVChDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRz
UnVubmluZ0FuaW1hdGlvbikKLXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+
IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtl
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIGNvbnRyb2xs
ZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAg
T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1h
dGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7Ci0gICAgdG9BZGQtPnNldFN0YXJ0VGltZSgx
KTsKLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLQotICAgIC8vIEZpcnN0
IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCi0gICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHko
KSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsICpldmVudHMpOwotICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC4y
NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRz
KTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0g
ICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5p
bWF0ZSgyLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAg
ICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotfQotCi0v
LyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlIHRo
YXQgaW50ZXJydXB0cyBhIHJ1bm5pbmcgYW5pbWF0aW9uCi0vLyBhbmQgdGhlcmUgaXMgeWV0IGFu
b3RoZXIgYW5pbWF0aW9uIHF1ZXVlZCB0byBzdGFydCBsYXRlci4KLVRFU1QoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5p
bmdBbmltYXRpb25XaXRoQW5pbUluUXVldWUpCi17Ci0gICAgT3duUHRyPENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7
Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7Ci0gICAg
T3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKLSAgICAg
ICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0KLSAg
ICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKLQotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAuNWYsIDApKSwgMiwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NB
Y3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDApOwotICAgIHRvQWRkLT5zZXRT
dGFydFRpbWUoMSk7Ci0gICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7Ci0KLSAg
ICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDEsIDAsIDAuNzVmKSksIDMsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7Ci0KLSAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5zaXRpb24gc2hvdWxkIHN0YXJ0
IGltbWVkaWF0ZWx5LgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVD
VF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41LCAq
ZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7Ci0gICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBjb250cm9sbGVyLT5h
bmltYXRlKDEsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDMsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3Bh
Y2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDQsICpldmVudHMpOwotICAgIEVYUEVD
VF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotfQotCi0vLyBUZXN0IHRoYXQgYSBsb29waW5nIGFu
aW1hdGlvbiBsb29wcyBhbmQgZm9yIHRoZSBjb3JyZWN0IG51bWJlciBvZiBpdGVyYXRpb25zLgot
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2aWFsTG9vcGluZykK
LXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihu
ZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4g
dG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICB0b0Fk
ZC0+c2V0SXRlcmF0aW9ucygzKTsKLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgp
KTsKLQotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBk
dW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSwgKmV2ZW50cyk7
Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAg
IEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDEuNzUsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLjI1LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuMjVmLCBk
dW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi43NSwgKmV2ZW50cyk7
Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAg
IEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDMsICpldmVudHMpOwotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0KLSAgICAv
LyBKdXN0IGJlIGV4dHJhIHN1cmUuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSg0LCAqZXZlbnRz
KTsKLSAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLX0KLQotLy8gVGVzdCB0aGF0
IGFuIGluZmluaXRlbHkgbG9vcGluZyBhbmltYXRpb24gZG9lcyBpbmRlZWQgZ28gdW50aWwgYWJv
cnRlZC4KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW5maW5pdGVM
b29waW5nKQotewotICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFk
b3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwotICAgIEZha2VMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotCi0gICAgY29uc3QgaW50IGlkID0gMTsK
LSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKC0xKTsKLSAg
ICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLQotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMS4yNSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXku
b3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUsICpldmVudHMpOwotICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBF
Q1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0KLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEwNzM3NDE4MjQuMjUsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHko
KSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0Ljc1LCAqZXZlbnRzKTsKLSAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQ
RUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwotCi0gICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OwotICAgIGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMC43
NWYpOwotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
Ci0gICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwotfQotCi0vLyBUZXN0IHRo
YXQgcGF1c2luZyBhbmQgcmVzdW1pbmcgd29yayBhcyBleHBlY3RlZC4KLVRFU1QoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgUGF1c2VSZXN1bWUpCi17Ci0gICAgT3duUHRyPEND
QW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yKSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQg
ZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJv
bGxlcigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1
bW15KSk7Ci0KLSAgICBjb25zdCBpbnQgaWQgPSAxOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwg
MSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMC41LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15
Lm9wYWNpdHkoKSk7Ci0KLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmlt
YXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+
Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpQYXVzZWQsIDAuNWYpOwotCi0gICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgxMDI0LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHko
KSk7Ci0KLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+Z2V0QWN0aXZl
QW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1blN0YXRlKEND
QWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCAxMDI0KTsKLQotICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMTAyNC4yNSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsK
LSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuNSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX0ZB
TFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMSwg
ZHVtbXkub3BhY2l0eSgpKTsKLX0KLQotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LCBBYm9ydEFHcm91cGVkQW5pbWF0aW9uKQotewotICAgIE93blB0cjxDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cikpOwotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15Owot
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0g
ICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwot
Ci0gICAgY29uc3QgaW50IGlkID0gMTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIGlkLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0
ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAx
KSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMSwgMC43NWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5
KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjVm
LCBkdW1teS5vcGFjaXR5KCkpOwotCi0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0QWN0
aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIGNvbnRy
b2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
LT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMSk7Ci0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRSgh
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjc1Ziwg
ZHVtbXkub3BhY2l0eSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJUZXN0LmNwcAppbmRleCBjNGYxMDNhM2NhZmU0NjhlNGI4ZTc5Nzg2ZDJiMjE4N2U0NWQ3ZWEx
Li5jYjQwMGI5MzZhZWY2OTIxZjk4N2ZlZTM4MDQyNDNlMTEyMzQxMWFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlclRlc3QuY3BwCkBAIC01Niw3ICs1Niw4IEBAIFBhc3NPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3Vy
dmU+CiAKIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBjcmVhdGVPcGFjaXR5
QW5pbWF0aW9uKQogewotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29u
dHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOworICAgIEZha2VM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpjcmVhdGUoJmR1bW15KSk7CiAgICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKICAgICBX
ZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkp
OwogICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoMCwgMCkpOwpAQCAt
ODcsNyArODgsOCBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRl
T3BhY2l0eUFuaW1hdGlvbikKIAogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3Qs
IGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbikKIHsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0
ZSgpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAg
IE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogICAgIGNvbnN0IGRvdWJsZSBkdXJh
dGlvbiA9IDE7CiAgICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVk
UHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwogCkBAIC0xMjQsOTIgKzEyNiwzNzEgQEAgVEVTVChD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbikK
IAogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIHN5bmNOZXdBbmltYXRpb24p
CiB7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7Ci0g
ICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlckltcGwo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgT3du
UHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpjcmVhdGUoKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckNsaWVudCBkdW1teUltcGw7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
PiBjb250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1t
eUltcGwpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15Owor
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgRVhQRUNUX0ZBTFNF
KGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKIAogICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9Db250cm9sbGVyKCpjb250
cm9sbGVyLCAxLCAwLCAxKTsKIAotICAgIGNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9u
cyhjb250cm9sbGVySW1wbC5nZXQoKSk7CisgICAgY29udHJvbGxlci0+cHVzaEFuaW1hdGlvblVw
ZGF0ZXNUbyhjb250cm9sbGVySW1wbC5nZXQoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CiAgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZh
aWxhYmlsaXR5LCBjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CiB9CiAKLVRFU1QoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJUZXN0LCBzeW5jQW5pbWF0aW9uUHJvcGVydGllcykKKy8vIFRlc3RzIHRo
YXQgdHJhbnNpdGlvbmluZyBvcGFjaXR5IGZyb20gMCB0byAxIHdvcmtzIGFzIGV4cGVjdGVkLgor
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFRyaXZpYWxUcmFuc2l0aW9uKQog
ewotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAg
IE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXJJbXBsKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6Y3JlYXRlKCkpOworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZh
a2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgRVhQRUNUX0ZBTFNFKGNvbnRy
b2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBhZGRPcGFjaXR5VHJhbnNpdGlvblRv
Q29udHJvbGxlcigqY29udHJvbGxlciwgMSwgMCwgMSk7CisgICAgY29udHJvbGxlci0+YWRkKHRv
QWRkLnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkp
OworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAg
ICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KIAot
ICAgIGNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbC5nZXQo
KSk7CisvLyBUZXN0cyB0aGF0IHR3byBxdWV1ZWQgYW5pbWF0aW9ucyBhZmZlY3RpbmcgdGhlIHNh
bWUgcHJvcGVydHkgcnVuIGluIHNlcXVlbmNlLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlclRlc3QsIFRyaXZpYWxRdWV1aW5nKQoreworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50
c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwor
ICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRy
PENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOwotICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRh
cmdldEF2YWlsYWJpbGl0eSwgY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOworICAgIGNvbnRyb2xsZXIt
PmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRp
b24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRy
b2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMSwgMSwgMC41KSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAK
LSAgICAvLyBQdXNoIGFuIGFuaW1hdGlvbiBwcm9wZXJ0eSBjaGFuZ2UgdG8gdGhlIGltcGwgdGhy
ZWFkIChzaG91bGQgbm90IGNhdXNlIGFuIGFuaW1hdGlvbiB0byBiZSBhZGRlZCkuCi0gICAgY29u
dHJvbGxlci0+cGF1c2VBbmltYXRpb24oMCwgMCk7Ci0gICAgY29udHJvbGxlci0+c3luY2hyb25p
emVBbmltYXRpb25zKGNvbnRyb2xsZXJJbXBsLmdldCgpKTsKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDAsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15
Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCBldmVudHMuZ2V0KCkpOwor
ICAgIEVYUEVDVF9FUSgwLjUsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KIAotICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKLSAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgY29udHJv
bGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSktPnJ1blN0YXRlKCkpOworLy8gVGVzdHMgaW50ZXJydXB0aW5nIGEgdHJhbnNpdGlvbiB3aXRo
IGFub3RoZXIgdHJhbnNpdGlvbi4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0
LCBJbnRlcnJ1cHQpCit7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVu
dHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVy
QW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKworICAgIE93
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNSkpLCAyLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOworICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlv
bjo6V2FpdGluZ0Zvck5leHRUaWNrLCAwKTsKKyAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVs
ZWFzZSgpKTsKKworICAgIC8vIFNpbmNlIHRoZSBhbmltYXRpb24gd2FzIGluIHRoZSBXYWl0aW5n
Rm9yTmV4dFRpY2sgc3RhdGUsIGl0IHNob3VsZCBzdGFydCByaWdodCBpbgorICAgIC8vIHRoaXMg
Y2FsbCB0byBhbmltYXRlLgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41LCBldmVudHMuZ2V0
KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
KyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDEuNSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoMC41LCBkdW1teS5vcGFjaXR5
KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
CiB9CiAKLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBzeW5jQWJvcnRlZEFu
aW1hdGlvbikKKy8vIFRlc3RzIHNjaGVkdWxpbmcgdHdvIGFuaW1hdGlvbnMgdG8gcnVuIHRvZ2V0
aGVyIHdoZW4gb25seSBvbmUgcHJvcGVydHkgaXMgZnJlZS4KK1RFU1QoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2hlbkFQcm9wZXJ0eUlzQmxvY2tlZCkK
IHsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAg
ICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVySW1wbChD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBPd25Q
dHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OmNyZWF0ZSgpKTsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0
b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBG
YWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIEVYUEVDVF9GQUxTRShjb250
cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0
cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihh
ZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBhZGRPcGFjaXR5VHJhbnNpdGlvblRvQ29u
dHJvbGxlcigqY29udHJvbGxlciwgMSwgMCwgMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDEsIGV2ZW50cy5nZXQoKSk7CisgICAgLy8gU2hvdWxkIG5vdCBoYXZl
IHN0YXJ0ZWQgdGhlIGZsb2F0IHRyYW5zaXRpb24geWV0LgorICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3Bh
Y2l0eSgpKTsKKyAgICAvLyBUaGUgZmxvYXQgYW5pbWF0aW9uIHNob3VsZCBoYXZlIHN0YXJ0ZWQg
YXQgdGltZSAxIGFuZCBzaG91bGQgYmUgZG9uZS4KKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIs
IGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAg
RVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KIAotICAg
IGNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbC5nZXQoKSk7
CisvLyBUZXN0cyBzY2hlZHVsaW5nIHR3byBhbmltYXRpb25zIHRvIHJ1biB0b2dldGhlciB3aXRo
IGRpZmZlcmVudCBsZW5ndGhzIGFuZCBhbm90aGVyCisvLyBhbmltYXRpb24gcXVldWVkIHRvIHN0
YXJ0IHdoZW4gdGhlIHNob3J0ZXIgYW5pbWF0aW9uIGZpbmlzaGVzIChzaG91bGQgd2FpdAorLy8g
Zm9yIGJvdGggdG8gZmluaXNoKS4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0
LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCit7CisgICAgT3duUHRyPENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRz
VmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsK
KyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCisgICAg
ICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpX
YWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCBjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5p
bWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CisgICAg
Y29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRy
YW5zZm9ybVRyYW5zaXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7
CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjUpKSwgMiwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKKworICAgIC8vIEFuaW1hdGlvbnMgd2l0aCBpZCAxIHNob3VsZCBib3Ro
IHN0YXJ0IG5vdy4KKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7Cisg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVY
UEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAgIC8vIFRoZSBvcGFjaXR5IGFuaW1hdGlv
biBzaG91bGQgaGF2ZSBmaW5pc2hlZCBhdCB0aW1lIDEsIGJ1dCB0aGUgZ3JvdXAKKyAgICAvLyBv
ZiBhbmltYXRpb25zIHdpdGggaWQgMSBkb24ndCBmaW5pc2ggdW50aWwgdGltZSAyIGJlY2F1c2Ug
b2YgdGhlIGxlbmd0aAorICAgIC8vIG9mIHRoZSB0cmFuc2Zvcm0gYW5pbWF0aW9uLgorICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMiwgZXZlbnRzLmdldCgpKTsKKyAgICAvLyBTaG91bGQgbm90IGhh
dmUgc3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQuCisgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgxLCBkdW1teS5v
cGFjaXR5KCkpOwogCi0gICAgY29udHJvbGxlci0+cmVtb3ZlQW5pbWF0aW9uKDApOworICAgIC8v
IFRoZSBzZWNvbmQgb3BhY2l0eSBhbmltYXRpb24gc2hvdWxkIHN0YXJ0IGF0IHRpbWUgMiBhbmQg
c2hvdWxkIGJlIGRvbmUgYnkgdGltZSAzCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgzLCBldmVu
dHMuZ2V0KCkpOworICAgIEVYUEVDVF9FUSgwLjUsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KIAotICAgIC8v
IEFib3J0IGFuIGFuaW1hdGlvbiBmcm9tIHRoZSBtYWluIHRocmVhZC4KLSAgICBjb250cm9sbGVy
LT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxlckltcGwuZ2V0KCkpOworLy8gVGVzdHMg
c2NoZWR1bGluZyBhbiBhbmltYXRpb24gdG8gc3RhcnQgaW4gdGhlIGZ1dHVyZS4KK1RFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBTY2hlZHVsZUFuaW1hdGlvbikKK3sKKyAgICBP
d25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmlt
YXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xp
ZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJv
bGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkp
KTsKIAotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9u
KDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
ICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0
VGltZSwgMCk7CisgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKKyAgICBjb250cm9sbGVyLT5h
ZGQodG9BZGQucmVsZWFzZSgpKTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRz
LmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgxLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX0VR
KDEsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKIH0KIAotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRl
c3QsIHN5bmNDb21wbGV0ZWRBbmltYXRpb24pCisvLyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1h
dGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlIHRoYXQncyBpbnRlcnJ1cHRpbmcgYSBydW5uaW5n
IGFuaW1hdGlvbi4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBTY2hlZHVs
ZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvbikKIHsKLSAgICBGYWtlTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0
ZSgpKTsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0
cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNy
ZWF0ZSgmZHVtbXkpKTsKIAotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVySW1wbC0+Z2V0QWN0
aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJv
bGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJh
bnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAg
ICBhZGRPcGFjaXR5VHJhbnNpdGlvblRvQ29udHJvbGxlcigqY29udHJvbGxlciwgMSwgMCwgMSk7
CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMC41LCAwKSksIDIsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZl
QW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKKyAgICB0b0FkZC0+c2V0U3RhcnRU
aW1lKDEpOworICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0gICAgY29u
dHJvbGxlci0+c3luY2hyb25pemVBbmltYXRpb25zKGNvbnRyb2xsZXJJbXBsLmdldCgpKTsKKyAg
ICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5zaXRpb24gc2hvdWxkIHN0YXJ0IGltbWVkaWF0ZWx5
LgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAs
IGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsIGV2ZW50cy5n
ZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OworICAgIEVYUEVDVF9FUSgwLjI1LCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNSwgZHVtbXkub3BhY2l0eSgp
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNU
X0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KIAotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXJJbXBs
LT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAg
ICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxp
dHksIGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKKy8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0
aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUgdGhhdCBpbnRlcnJ1cHRzIGEgcnVubmluZyBhbmlt
YXRpb24KKy8vIGFuZCB0aGVyZSBpcyB5ZXQgYW5vdGhlciBhbmltYXRpb24gcXVldWVkIHRvIHN0
YXJ0IGxhdGVyLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFNjaGVkdWxl
ZEFuaW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5pbWF0aW9uV2l0aEFuaW1JblF1ZXVlKQorewor
ICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBD
Q0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBj
b250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZk
dW1teSkpOwogCi0gICAgLy8gU3RlcCB0aHJvdWdoIHRoZSBhbmltYXRpb24gdW50aWwgaXQgaXMg
ZmluaXNoZWQuIEF0IHRoZSBuZXh0IHN5bmMsIHRoZSBtYWluIHRocmVhZCdzIGFuaW1hdGlvbiBz
aG91bGQgYmUgY2xlYXJlZC4KKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0
aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4g
dG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDIsIDAuNSwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIHRv
QWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwg
MCk7CisgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKKyAgICBjb250cm9sbGVyLT5hZGQodG9B
ZGQucmVsZWFzZSgpKTsKKworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMC43NSkpLCAzLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0cmFu
c2l0aW9uIHNob3VsZCBzdGFydCBpbW1lZGlhdGVseS4KKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDAsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMC41LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNSwgZHVt
bXkub3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCBldmVudHMuZ2V0KCkpOworICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBF
Q1RfRVEoMC41LCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMywg
ZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSg0LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9FUSgwLjc1LCBkdW1t
eS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7Cit9CisKKy8vIFRlc3QgdGhhdCBhIGxvb3BpbmcgYW5pbWF0aW9uIGxvb3BzIGFu
ZCBmb3IgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZXJhdGlvbnMuCitURVNUKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyVGVzdCwgVHJpdmlhbExvb3BpbmcpCit7CiAgICAgT3duUHRyPENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRz
VmVjdG9yKSk7Ci0gICAgY29udHJvbGxlckltcGwtPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAg
Y29udHJvbGxlckltcGwtPmFuaW1hdGUoMiwgKmV2ZW50cyk7CisgICAgRmFrZUxheWVyQW5pbWF0
aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlckltcGwtPmdl
dEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKKyAgICB0b0FkZC0+c2V0SXRlcmF0aW9ucygzKTsKKyAgICBjb250cm9s
bGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwg
ZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgxLjI1LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNSwgZHVtbXku
b3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUsIGV2ZW50cy5nZXQoKSk7
CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAg
IEVYUEVDVF9FUSgwLjc1LCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMi4yNSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuMjUsIGR1bW15Lm9wYWNpdHkoKSk7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLjc1LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEo
MC43NSwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMsIGV2ZW50
cy5nZXQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKKworICAgIC8vIEp1c3Qg
YmUgZXh0cmEgc3VyZS4KKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDQsIGV2ZW50cy5nZXQoKSk7
CisgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Cit9CisKKy8vIFRlc3QgdGhhdCBh
biBpbmZpbml0ZWx5IGxvb3BpbmcgYW5pbWF0aW9uIGRvZXMgaW5kZWVkIGdvIHVudGlsIGFib3J0
ZWQuCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgSW5maW5pdGVMb29waW5n
KQoreworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRy
KG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3Jl
YXRlKCZkdW1teSkpOworCisgICAgY29uc3QgaW50IGlkID0gMTsKKyAgICBPd25QdHI8Q0NBY3Rp
dmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKC0xKTsKKyAgICBjb250cm9sbGVyLT5hZGQo
dG9BZGQucmVsZWFzZSgpKTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdl
dCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgxLjI1LCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNSwgZHVtbXkub3BhY2l0eSgp
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9F
USgwLjc1LCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDcz
NzQxODI0LjI1LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNSwgZHVtbXkub3BhY2l0eSgp
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuNzUsIGV2ZW50cy5nZXQoKSk7
CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAg
IEVYUEVDVF9FUSgwLjc1LCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwg
MC43NSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKKyAgICBFWFBFQ1RfRVEoMC43NSwgZHVtbXkub3BhY2l0eSgpKTsKK30KKworLy8gVGVzdCB0
aGF0IHBhdXNpbmcgYW5kIHJlc3VtaW5nIHdvcmsgYXMgZXhwZWN0ZWQuCitURVNUKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyVGVzdCwgUGF1c2VSZXN1bWUpCit7CisgICAgT3duUHRyPENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRz
VmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsK
KyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCisgICAg
ICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CisKKyAgICBj
b25zdCBpbnQgaWQgPSAxOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCBpZCwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZl
bnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwLjUsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjUsIGR1bW15Lm9wYWNp
dHkoKSk7CiAKLSAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxl
ckltcGwuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1h
dGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5n
ZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVu
U3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgMC41KTsKIAorICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMTAyNCwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNSwgZHVtbXkub3BhY2l0
eSgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihp
ZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5nZXRBY3Rp
dmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUo
Q0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDEwMjQpOworCisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgxMDI0LjI1LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC43NSwgZHVtbXkub3BhY2l0
eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuNSwgZXZlbnRzLmdldCgpKTsKICAg
ICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVY
UEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOworfQorCitURVNUKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyVGVzdCwgQWJvcnRBR3JvdXBlZEFuaW1hdGlvbikKK3sKKyAgICBPd25QdHI8Q0NB
bmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVu
dHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15
OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKKyAg
ICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAg
IGNvbnN0IGludCBpZCA9IDE7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCBpZCwgQ0NBY3Rp
dmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCBp
ZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEs
IDAuNzUpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHko
KSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEo
MC41LCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0
QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNv
bnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMSk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgxLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3Bh
Y2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsIGV2ZW50cy5nZXQoKSk7CisgICAg
RVhQRUNUX1RSVUUoIWNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBF
Q1RfRVEoMC43NSwgZHVtbXkub3BhY2l0eSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3Bw
CmluZGV4IDcwMmJiZjE2MzliNDNiMTZhZWYzYWJiNjYwNjI5MDQ5OGMwZDY2MTUuLjNmZGEyYzll
ZTdhY2FmMGJlZTM2N2RlYjVlNmIxZDkzYThkMWNiNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtNzMsNyArNzMs
NiBAQCBwdWJsaWM6CiAKICAgICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBDQ0xheWVyQW5pbWF0aW9u
RGVsZWdhdGUKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUg
dGltZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvbkZpbmlzaGVkKGludCBh
bmltYXRpb25JZCkgeyB9CiB9OwogCiAvLyBBZGFwdHMgQ0NMYXllclRyZWVIb3N0SW1wbCBmb3Ig
dGVzdC4gUnVucyByZWFsIGNvZGUsIHRoZW4gaW52b2tlcyB0ZXN0IGhvb2tzLgpAQCAtODkyLDcg
Kzg5MSw2IEBAIHB1YmxpYzoKICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uKCkK
ICAgICAgICAgOiBtX251bUFuaW1hdGVzKDApCiAgICAgICAgICwgbV9yZWNlaXZlZEFuaW1hdGlv
blN0YXJ0ZWROb3RpZmljYXRpb24oZmFsc2UpCi0gICAgICAgICwgbV9yZWNlaXZlZEFuaW1hdGlv
bkZpbmlzaGVkTm90aWZpY2F0aW9uKGZhbHNlKQogICAgICAgICAsIG1fc3RhcnRUaW1lKDApCiAg
ICAgICAgICwgbV9maXJzdE1vbm90b25pY1RpbWUoMCkKICAgICB7CkBAIC05MTcsNyArOTE1LDYg
QEAgcHVibGljOgogICAgICAgICBFWFBFQ1RfTFQoMCwgbV9maXJzdE1vbm90b25pY1RpbWUpOwog
ICAgICAgICBFWFBFQ1RfTkUobV9zdGFydFRpbWUsIG1fZmlyc3RNb25vdG9uaWNUaW1lKTsKICAg
ICAgICAgRVhQRUNUX1RSVUUobV9yZWNlaXZlZEFuaW1hdGlvblN0YXJ0ZWROb3RpZmljYXRpb24p
OwotICAgICAgICBFWFBFQ1RfVFJVRShtX3JlY2VpdmVkQW5pbWF0aW9uRmluaXNoZWROb3RpZmlj
YXRpb24pOwogICAgICAgICBlbmRUZXN0KCk7CiAgICAgfQogCkBAIC05MjcsMTEgKzkyNCw2IEBA
IHB1YmxpYzoKICAgICAgICAgbV9zdGFydFRpbWUgPSB3YWxsQ2xvY2tUaW1lOwogICAgIH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25GaW5pc2hlZChpbnQpCi0gICAgewotICAg
ICAgICBtX3JlY2VpdmVkQW5pbWF0aW9uRmluaXNoZWROb3RpZmljYXRpb24gPSB0cnVlOwotICAg
IH0KLQogICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQogICAgIHsKICAgICB9CkBAIC05Mzks
NyArOTMxLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBpbnQgbV9udW1BbmltYXRlczsKICAg
ICBib29sIG1fcmVjZWl2ZWRBbmltYXRpb25TdGFydGVkTm90aWZpY2F0aW9uOwotICAgIGJvb2wg
bV9yZWNlaXZlZEFuaW1hdGlvbkZpbmlzaGVkTm90aWZpY2F0aW9uOwogICAgIGRvdWJsZSBtX3N0
YXJ0VGltZTsKICAgICBkb3VibGUgbV9maXJzdE1vbm90b25pY1RpbWU7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApp
bmRleCAwNmNjNWVlNWM1NDQxMjM1MTAzOWQ5YmZhYzczZTM2MWFhNzBkOTAxLi41YjM3NmNhOWZl
MjIxMWRmYTAwYTljZjkxMWVmMGU2MWY4OTA4MjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApAQCAtOTYsMjIgKzk2
LDIzIEBAIHByaXZhdGU6CiAKIGNsYXNzIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIgOiBw
dWJsaWMgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZSgpCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KiBjbGllbnQpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoY2xpZW50KSk7
CiAgICAgfQogCiAgICAgYm9vbCBzeW5jaHJvbml6ZWRBbmltYXRpb25zKCkgY29uc3QgeyByZXR1
cm4gbV9zeW5jaHJvbml6ZWRBbmltYXRpb25zOyB9CiAKIHByaXZhdGU6Ci0gICAgRmFrZUxheWVy
QW5pbWF0aW9uQ29udHJvbGxlcigpCi0gICAgICAgIDogbV9zeW5jaHJvbml6ZWRBbmltYXRpb25z
KGZhbHNlKQorICAgIGV4cGxpY2l0IEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQqIGNsaWVudCkKKyAgICAgICAgOiBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcihjbGllbnQpCisgICAgICAgICwgbV9zeW5jaHJvbml6ZWRBbmltYXRp
b25zKGZhbHNlKQogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVB
bmltYXRpb25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwp
CisgICAgdmlydHVhbCB2b2lkIHB1c2hBbmltYXRpb25VcGRhdGVzVG8oQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIqIGNvbnRyb2xsZXJJbXBsKQogICAgIHsKLSAgICAgICAgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbCk7Cisg
ICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uVXBkYXRlc1Rv
KGNvbnRyb2xsZXJJbXBsKTsKICAgICAgICAgbV9zeW5jaHJvbml6ZWRBbmltYXRpb25zID0gdHJ1
ZTsKICAgICB9CiAKQEAgLTM1MCw3ICszNTEsOCBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0
LCBzeW5jaHJvbml6ZUFuaW1hdGlvbnMpCiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGw7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKIAotICAgIGxheWVyVHJlZVJvb3QtPnNldExheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcihGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSk7CisgICAgRmFr
ZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBsYXllclRyZWVSb290
LT5zZXRMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgRVhQRUNUX0ZBTFNFKHN0YXRpY19jYXN0PEZha2VM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIqPihsYXllclRyZWVSb290LT5sYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIoKSktPnN5bmNocm9uaXplZEFuaW1hdGlvbnMoKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132579</attachid>
            <date>2012-03-19 07:37:43 -0700</date>
            <delta_ts>2012-03-20 06:45:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81106-20120319103741.patch</filename>
            <type>text/plain</type>
            <size>132906</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTc5ZWY5ZDhhYTVjY2E3
NzQ3ZTM2NWJjYjlhMWJkZWJhM2FmNmE3NC4uNTE4N2M5OWJkODFjNjc1YmQ3N2RjYmI1OGE1NmU0
Zjg5NTVmMDkzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOSBAQAorMjAxMi0wMy0xOSAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIElu
ZnJhc3RydWN0dXJlIHRvIGFsbG93IGFuaW1hdGluZyBsYXllcnMgdG8gYmUgb25seSBwYXJ0aWFs
bHkgdXBkYXRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODExMDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUZXN0cyBmb3IgdGhlIGNvbnRyb2xsZXJzIGFyZSBjb21iaW5lZCBpbiBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlclRlc3QuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXllckNocm9taXVtOjpMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRPcGFjaXR5RnJvbUFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpyZW1vdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c3VzcGVuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9t
aXVtOjpzZXRMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6aGFzQWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OnNldEFuaW1hdGlvbkV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6aWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6b3BhY2l0eSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bTo6Ym91bmRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5oOgorICAgICAgICAoQ0NBY3RpdmVBbmltYXRpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5pbWF0aW9uRXZlbnQ6OkNDQW5pbWF0aW9uRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NBbmltYXRpb25FdmVudDo6dG9GbG9hdEFuaW1hdGlvbkZp
bmlzaGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBbmltYXRpb25FdmVudDo6dG9UcmFu
c2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5pbWF0
aW9uU3RhcnRlZEV2ZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDo6Q0NBbmltYXRpb25TdGFydGVkRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Q0NG
bG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGbG9hdEFu
aW1hdGlvbkZpbmlzaGVkRXZlbnQ6On5DQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudDo6dHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6
OkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6On5DQ1RyYW5zZm9ybUFuaW1hdGlvbkZp
bmlzaGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1BbmltYXRpb25GaW5p
c2hlZEV2ZW50Ojp0eXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FuaW1hdGlvbkV2ZW50cy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvbkV2ZW50Ojp0YXJnZXRQcm9wZXJ0eSk6CisgICAgICAgIChDQ0FuaW1h
dGlvbkV2ZW50KToKKyAgICAgICAgKENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50KToKKyAgICAgICAg
KENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRmxv
YXRBbmltYXRpb25GaW5pc2hlZEV2ZW50OjpmaW5hbFZhbHVlKToKKyAgICAgICAgKENDVHJhbnNm
b3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9y
bUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OmZpbmFsVmFsdWUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpwdXNoQW5pbWF0aW9uVXBkYXRlc1RvKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpoYXNBY3RpdmVB
bmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6
OmlzQW5pbWF0aW5nUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OnB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb25zQ29tcGxl
dGVkT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2spOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdG
b3JTdGFydFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc29sdmVDb25mbGljdHMp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1cmdlRmlu
aXNoZWRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjp0aWNrQW5pbWF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQ6On5DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckNsaWVudCk6CisgICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uRGVsZWdhdGUuaDoKKyAgICAgICAgKENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJbXBsOjpzZXRPcGFjaXR5RnJvbUFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRUcmFuc2Zvcm1Gcm9tQW5p
bWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5oOgorICAgICAgICAoQ0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckltcGw6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpsYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OkND
TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0
ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpmaW5pc2hD
b21taXRPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpk
aWRCZWNvbWVJbnZpc2libGVPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0OjphbmltYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjphbmltYXRlTGF5ZXJzUmVjdXJzaXZlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21t
b24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6
YW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjphbmltYXRlTGF5ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJ
bXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnNjaGVkdWxlZEFjdGlv
bkJlZ2luRnJhbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUHJveHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OkJlZ2luRnJh
bWVBbmRDb21taXRTdGF0ZTo6QmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlKToKKwogMjAxMi0wMy0x
OSAgSGlyb25vcmkgQm9ubyAgPGhib25vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgYSBj
b3B5IGNvbnN0cnVjdG9yIHRvIENvbGxhcHNlZEJvcmRlclZhbHVlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IGM4ZDc4ZmZhYzI0YjY0MjA2YWNlNjc1YmIwNjk1NDg2MmNiNGViNWEuLjU4
NTFkNDllNTFjMWU3OTM3YWUxNGY1NjQ3NTNmZDM4ZWZhMmIwYjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTItMDMtMTkgIElhbiBWb2xsaWNrICA8dm9s
bGlja0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbmZyYXN0cnVjdHVyZSB0
byBhbGxvdyBhbmltYXRpbmcgbGF5ZXJzIHRvIGJlIG9ubHkgcGFydGlhbGx5IHVwZGF0ZWQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMTA2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lw
aToKKyAgICAgICAgKiB0ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQ6OkZha2VMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQ6On5GYWtlTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyQ2xpZW50KToKKyAgICAgICAgKiB0ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaDoKKyAg
ICAgICAgKEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQpOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQ6OnNldE9wYWNpdHlG
cm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyQ2xpZW50OjpzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKiB0
ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorICAgICAgICAq
IHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0QWRkQW5pbWF0aW9uOjpDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uKToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdEFkZEFuaW1hdGlvbjo6YW5pbWF0ZUxh
eWVycyk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uKToKKyAgICAg
ICAgKiB0ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0
czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpGYWtlTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjpwdXNoQW5pbWF0aW9uVXBkYXRlc1RvKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpU
RVNUKToKKwogMjAxMi0wMy0xOSAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4K
IAogICAgICAgICBbY2hyb21pdW1dIEZpeCBidWlsZCB0aGF0IHdhcyBicm9rZW4gYnkgcjExMTEz
NwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IDA2YmY5ZjA3MGJmODZmN2RlYjRmMDdhNDIwZjNhY2ZlOWJi
YTJlOTYuLjJjYzZjMWY1MmI3OGNkY2E3NDAxODcxNjAxZWUzZjk4YmVjZDBiNjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTM0ODAsOCArMzQ4MCw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDRjODE4NTNiODIwMTE2NTgxMmI0YTNkMzUxOTEz
MTRiNjA0Zjk3ZWIuLmRiMGJhMWMyYzlkMjI0OTJjYzUyOWJmYzEyYTUyZGU5MzYwZmY0YjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNzQ5LDE2ICs3NDksNiBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3Vi
bGUgc3RhcnRUaW1lKQogICAgICAgICBtX2NsaWVudC0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0
aGlzLCBzdGFydFRpbWUpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bm90aWZ5
QW5pbWF0aW9uRmluaXNoZWQoaW50IGFuaW1hdGlvbklkKQotewotICAgIGZvciAoQW5pbWF0aW9u
SWRNYXA6Oml0ZXJhdG9yIGlkSXRlciA9IG1fYW5pbWF0aW9uSWRNYXAuYmVnaW4oKTsgaWRJdGVy
ICE9IG1fYW5pbWF0aW9uSWRNYXAuZW5kKCk7ICsraWRJdGVyKSB7Ci0gICAgICAgIGlmIChpZEl0
ZXItPnNlY29uZCA9PSBhbmltYXRpb25JZCkgewotICAgICAgICAgICAgbV9hbmltYXRpb25JZE1h
cC5yZW1vdmUoaWRJdGVyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCA0Y2Nh
ODJhODg3YmUyODU5OWFmMTQ3NDE3ZWNhYmM3ODcxOTQ5ZjljLi45MWE0NTVhNTQxZTY2ZjlkODc2
YmU2YWNlNjExZmM4YTBmYWM0N2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0u
aApAQCAtMTE2LDcgKzExNiw2IEBAIHB1YmxpYzoKIAogICAgIC8vIENDTGF5ZXJBbmltYXRpb25E
ZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9u
U3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0
aW9uRmluaXNoZWQoaW50IGFuaW1hdGlvbklkKTsKIAogICAgIC8vIEV4cG9zZWQgZm9yIHRlc3Rz
LgogICAgIExheWVyQ2hyb21pdW0qIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRlbnRzTGF5ZXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggODFkMzk0NGZi
NmQ2MTNiMjBmMjE5ZDAwYTNkOGY1NjBmOTQ3YWUwYS4uNmUyYjcyYmUxMDgxMzY2MDU1YTNkOTVl
MWY5MjU2ZTQ1ZjlmMTYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTU5LDcgKzU5LDcg
QEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSgpCiAgICAgOiBtX25lZWRzRGlzcGxheShm
YWxzZSkKICAgICAsIG1fbGF5ZXJJZChzX25leHRMYXllcklkKyspCiAgICAgLCBtX3BhcmVudCgw
KQotICAgICwgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OmNyZWF0ZSgpKQorICAgICwgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fc2Nyb2xsYWJsZShm
YWxzZSkKICAgICAsIG1fc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKGZhbHNlKQogICAgICwgbV9o
YXZlV2hlZWxFdmVudEhhbmRsZXJzKGZhbHNlKQpAQCAtOTksNzAgKzk5LDYgQEAgTGF5ZXJDaHJv
bWl1bTo6fkxheWVyQ2hyb21pdW0oKQogICAgIHJlbW92ZUFsbENoaWxkcmVuKCk7CiB9CiAKLWJv
b2wgTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2
YWx1ZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9u
LCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCkKLXsKLSAg
ICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCB8fCAhbV9sYXllclRyZWVIb3N0LT5zZXR0aW5ncygpLnRo
cmVhZGVkQW5pbWF0aW9uRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9v
bCBhZGRlZEFuaW1hdGlvbiA9IG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5hZGRBbmltYXRp
b24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24sIGFuaW1hdGlvbklkLCBncm91cElkLCB0aW1l
T2Zmc2V0KTsKLSAgICBpZiAoYWRkZWRBbmltYXRpb24pCi0gICAgICAgIHNldE5lZWRzQ29tbWl0
KCk7Ci0gICAgcmV0dXJuIGFkZGVkQW5pbWF0aW9uOwotfQotCi12b2lkIExheWVyQ2hyb21pdW06
OnBhdXNlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQpCi17Ci0g
ICAgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9uKGFuaW1hdGlvbklk
LCB0aW1lT2Zmc2V0KTsKLSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi12b2lkIExheWVyQ2hy
b21pdW06OnJlbW92ZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQpCi17Ci0gICAgbV9sYXllckFu
aW1hdGlvbkNvbnRyb2xsZXItPnJlbW92ZUFuaW1hdGlvbihhbmltYXRpb25JZCk7Ci0gICAgc2V0
TmVlZHNDb21taXQoKTsKLX0KLQotdm9pZCBMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9u
cyhkb3VibGUgdGltZSkKLXsKLSAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+c3VzcGVu
ZEFuaW1hdGlvbnModGltZSk7Ci0gICAgc2V0TmVlZHNDb21taXQoKTsKLX0KLQotdm9pZCBMYXll
ckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKCkKLXsKLSAgICBtX2xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOwotICAgIHNldE5lZWRzQ29tbWl0KCk7Ci19Ci0K
LXZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKFBhc3NPd25Q
dHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGxheWVyQW5pbWF0aW9uQ29udHJvbGxlcikK
LXsKLSAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlciA9IGxheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjsKLSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi1ib29sIExheWVyQ2hyb21pdW06Omhh
c0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKTsKLX0KLQotdm9pZCBMYXllckNocm9taXVt
OjpzZXRBbmltYXRpb25FdmVudChjb25zdCBDQ0FuaW1hdGlvbkV2ZW50JiBldmVudCwgZG91Ymxl
IHdhbGxDbG9ja1RpbWUpCi17Ci0gICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKLQotICAgIGNh
c2UgQ0NBbmltYXRpb25FdmVudDo6U3RhcnRlZDogewotICAgICAgICBtX2xheWVyQW5pbWF0aW9u
RGVsZWdhdGUtPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQod2FsbENsb2NrVGltZSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQ0NBbmltYXRpb25FdmVudDo6RmluaXNoZWQ6IHsK
LSAgICAgICAgY29uc3QgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50KiBmaW5pc2hlZEV2ZW50ID0g
ZXZlbnQudG9BbmltYXRpb25GaW5pc2hlZEV2ZW50KCk7Ci0gICAgICAgIG1fbGF5ZXJBbmltYXRp
b25EZWxlZ2F0ZS0+bm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoZmluaXNoZWRFdmVudC0+YW5pbWF0
aW9uSWQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIH0KLX0KLQogdm9pZCBMYXll
ckNocm9taXVtOjpzZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50KGJvb2wgaXNOb25Db21wb3NpdGVk
Q29udGVudCkKIHsKICAgICBtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQgPSBpc05vbkNvbXBvc2l0
ZWRDb250ZW50OwpAQCAtNTM2LDEyICs0NzIsMTQgQEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNo
UHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICAgICAgbV9ub25GYXN0U2Nyb2xs
YWJsZVJlZ2lvbkNoYW5nZWQgPSBmYWxzZTsKICAgICB9CiAgICAgbGF5ZXItPnNldE9wYXF1ZSht
X29wYXF1ZSk7Ci0gICAgbGF5ZXItPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKKyAgICBpZiAoIW9w
YWNpdHlJc0FuaW1hdGluZygpKQorICAgICAgICBsYXllci0+c2V0T3BhY2l0eShtX29wYWNpdHkp
OwogICAgIGxheWVyLT5zZXRQb3NpdGlvbihtX3Bvc2l0aW9uKTsKICAgICBsYXllci0+c2V0UHJl
c2VydmVzM0QocHJlc2VydmVzM0QoKSk7CiAgICAgbGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKG1f
c2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX3N1Ymxh
eWVyVHJhbnNmb3JtKTsKLSAgICBsYXllci0+c2V0VHJhbnNmb3JtKG1fdHJhbnNmb3JtKTsKKyAg
ICBpZiAoIXRyYW5zZm9ybUlzQW5pbWF0aW5nKCkpCisgICAgICAgIGxheWVyLT5zZXRUcmFuc2Zv
cm0obV90cmFuc2Zvcm0pOwogICAgIGxheWVyLT5zZXRVcGRhdGVSZWN0KG1fdXBkYXRlUmVjdCk7
CiAKICAgICBsYXllci0+c2V0U2Nyb2xsRGVsdGEobGF5ZXItPnNjcm9sbERlbHRhKCkgLSBsYXll
ci0+c2VudFNjcm9sbERlbHRhKCkpOwpAQCAtNTUyLDcgKzQ5MCw3IEBAIHZvaWQgTGF5ZXJDaHJv
bWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgaWYgKHJlcGxp
Y2FMYXllcigpKQogICAgICAgICByZXBsaWNhTGF5ZXIoKS0+cHVzaFByb3BlcnRpZXNUbyhsYXll
ci0+cmVwbGljYUxheWVyKCkpOwogCi0gICAgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPnN5
bmNocm9uaXplQW5pbWF0aW9ucyhsYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkpOwor
ICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5wdXNoQW5pbWF0aW9uVXBkYXRlc1RvKGxh
eWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7CiAKICAgICAvLyBSZXNldCBhbnkgc3Rh
dGUgdGhhdCBzaG91bGQgYmUgY2xlYXJlZCBmb3IgdGhlIG5leHQgdXBkYXRlLgogICAgIG1fdXBk
YXRlUmVjdCA9IEZsb2F0UmVjdCgpOwpAQCAtNjA2LDYgKzU0NCw5MyBAQCBib29sIExheWVyQ2hy
b21pdW06OmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
Cit2b2lkIExheWVyQ2hyb21pdW06OnNldE9wYWNpdHlGcm9tQW5pbWF0aW9uKGZsb2F0IG9wYWNp
dHkpCit7CisgICAgLy8gVGhpcyBpcyBjYWxsZWQgZHVlIHRvIGFuIG9uZ29pbmcgYWNjZWxlcmF0
ZWQgYW5pbWF0aW9uLiBTaW5jZSB0aGlzIGFuaW1hdGlvbiBpcworICAgIC8vIGFsc28gYmVpbmcg
cnVuIG9uIHRoZSBpbXBsIHRocmVhZCwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXF1ZXN0IGEgY29t
bWl0IHRvIHB1c2gKKyAgICAvLyB0aGlzIHZhbHVlIG92ZXIsIHNvIHNldCB0aGUgdmFsdWUgZGly
ZWN0bHkgcmF0aGVyIHRoYW4gY2FsbGluZyBzZXRPcGFjaXR5LgorICAgIG1fb3BhY2l0eSA9IG9w
YWNpdHk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0VHJhbnNmb3JtRnJvbUFuaW1hdGlv
bihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIC8vIFRoaXMg
aXMgY2FsbGVkIGR1ZSB0byBhbiBvbmdvaW5nIGFjY2VsZXJhdGVkIGFuaW1hdGlvbi4gU2luY2Ug
dGhpcyBhbmltYXRpb24gaXMKKyAgICAvLyBhbHNvIGJlaW5nIHJ1biBvbiB0aGUgaW1wbCB0aHJl
YWQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVxdWVzdCBhIGNvbW1pdCB0byBwdXNoCisgICAgLy8g
dGhpcyB2YWx1ZSBvdmVyLCBzbyBzZXQgdGhpcyB2YWx1ZSBkaXJlY3RseSByYXRoZXIgdGhhbiBj
YWxsaW5nIHNldFRyYW5zZm9ybS4KKyAgICBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsKK30KKwor
Ym9vbCBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3Qm
IHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRp
b24sIGludCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KQorewor
ICAgIGlmICghbV9sYXllclRyZWVIb3N0IHx8ICFtX2xheWVyVHJlZUhvc3QtPnNldHRpbmdzKCku
dGhyZWFkZWRBbmltYXRpb25FbmFibGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBi
b29sIGFkZGVkQW5pbWF0aW9uID0gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPmFkZEFuaW1h
dGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRp
bWVPZmZzZXQpOworICAgIGlmIChhZGRlZEFuaW1hdGlvbikKKyAgICAgICAgc2V0TmVlZHNDb21t
aXQoKTsKKyAgICByZXR1cm4gYWRkZWRBbmltYXRpb247Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1
bTo6cGF1c2VBbmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBkb3VibGUgdGltZU9mZnNldCkKK3sK
KyAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+cGF1c2VBbmltYXRpb24oYW5pbWF0aW9u
SWQsIHRpbWVPZmZzZXQpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5ZXJD
aHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCkKK3sKKyAgICBtX2xheWVy
QW5pbWF0aW9uQ29udHJvbGxlci0+cmVtb3ZlQW5pbWF0aW9uKGFuaW1hdGlvbklkKTsKKyAgICBz
ZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRp
b25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5zdXNw
ZW5kQW5pbWF0aW9ucyh0aW1lKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIExh
eWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQoreworICAgIG1fbGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLT5yZXN1bWVBbmltYXRpb25zKCk7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30K
Kwordm9pZCBMYXllckNocm9taXVtOjpzZXRMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoUGFzc093
blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gbGF5ZXJBbmltYXRpb25Db250cm9sbGVy
KQoreworICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyID0gbGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6
aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllckFuaW1hdGlv
bkNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpOworfQorCit2b2lkIExheWVyQ2hyb21p
dW06OnNldEFuaW1hdGlvbkV2ZW50KGNvbnN0IENDQW5pbWF0aW9uRXZlbnQmIGV2ZW50LCBkb3Vi
bGUgd2FsbENsb2NrVGltZSkKK3sKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgeworICAgIGNh
c2UgQ0NBbmltYXRpb25FdmVudDo6U3RhcnRlZDoKKyAgICAgICAgbV9sYXllckFuaW1hdGlvbkRl
bGVnYXRlLT5ub3RpZnlBbmltYXRpb25TdGFydGVkKHdhbGxDbG9ja1RpbWUpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgQ0NBbmltYXRpb25FdmVudDo6RmluaXNoZWRGbG9hdEFuaW1hdGlv
bjogeworICAgICAgICBjb25zdCBDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudCogZmluaXNo
ZWRFdmVudCA9IGV2ZW50LnRvRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50KCk7CisgICAgICAg
IEFTU0VSVChmaW5pc2hlZEV2ZW50LT50YXJnZXRQcm9wZXJ0eSgpID09IENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KTsKKyAgICAgICAgc2V0T3BhY2l0eShmaW5pc2hlZEV2ZW50LT5maW5hbFZh
bHVlKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIENDQW5pbWF0aW9uRXZl
bnQ6OkZpbmlzaGVkVHJhbnNmb3JtQW5pbWF0aW9uOiB7CisgICAgICAgIGNvbnN0IENDVHJhbnNm
b3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCogZmluaXNoZWRFdmVudCA9IGV2ZW50LnRvVHJhbnNm
b3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCgpOworICAgICAgICBBU1NFUlQoZmluaXNoZWRFdmVu
dC0+dGFyZ2V0UHJvcGVydHkoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKTsKKyAg
ICAgICAgc2V0VHJhbnNmb3JtKGZpbmlzaGVkRXZlbnQtPmZpbmFsVmFsdWUoKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIH0KK30KKwogdm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPjo6aXRlcmF0b3IsIHZvaWQqKQogewogICAgIC8vIEN1cnJlbnRseSB3ZSBkb24ndCB1c2Ug
ei1vcmRlciB0byBkZWNpZGUgd2hhdCB0byBwYWludCwgc28gdGhlcmUncyBubyBuZWVkIHRvIGFj
dHVhbGx5IHNvcnQgTGF5ZXJDaHJvbWl1bXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNTEzNGZk
NTFmMzBmZDJkM2YwMzkzYWU1YTkzZjQ1MGU3ZmQxMDQwNS4uMTY2MDdjYTMwZmZkYzY0ZWJkYzkw
ZWUwNWQzMjM3ZWVhZTJhYmI2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtNDMsNiArNDMsNyBA
QAogI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlNoYWRlckNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJj
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImNjL0NDT2NjbHVzaW9u
VHJhY2tlci5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNTYsNyArNTcsNiBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0FuaW1hdGlvbkV2ZW50OwotY2xhc3MgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBDQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGU7
CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdDsKQEAgLTY2LDEyICs2
NiwyMCBAQCBjbGFzcyBTY3JvbGxiYXJMYXllckNocm9taXVtOwogCiAvLyBCYXNlIGNsYXNzIGZv
ciBjb21wb3NpdGVkIGxheWVycy4gU3BlY2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9t
CiAvLyB0aGlzIGNsYXNzLgotY2xhc3MgTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVk
PExheWVyQ2hyb21pdW0+IHsKK2NsYXNzIExheWVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRl
ZDxMYXllckNocm9taXVtPiwgcHVibGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBjcmVhdGUo
KTsKIAogICAgIHZpcnR1YWwgfkxheWVyQ2hyb21pdW0oKTsKIAorICAgIC8vIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyQ2xpZW50IGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBpbnQgaWQo
KSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0
eUZyb21BbmltYXRpb24oZmxvYXQpOworICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm1Gcm9t
QW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdmlydHVhbCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFu
c2Zvcm07IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIG1fYm91bmRzOyB9CisKICAgICBjb25zdCBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSBj
b25zdDsKICAgICBMYXllckNocm9taXVtKiBwYXJlbnQoKSBjb25zdDsKICAgICB2b2lkIGFkZENo
aWxkKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4pOwpAQCAtOTUsNyArMTAzLDYgQEAgcHVibGlj
OgogICAgIGJvb2wgYmFja2dyb3VuZENvdmVyc1ZpZXdwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZ3JvdW5kQ292ZXJzVmlld3BvcnQ7IH0KIAogICAgIHZvaWQgc2V0Qm91bmRzKGNvbnN0IElu
dFNpemUmKTsKLSAgICBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2Jv
dW5kczsgfQogICAgIHZpcnR1YWwgSW50U2l6ZSBjb250ZW50Qm91bmRzKCkgY29uc3QgeyByZXR1
cm4gYm91bmRzKCk7IH0KIAogICAgIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKTsKQEAgLTEw
OSw3ICsxMTYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIG5lZWRzRGlzcGxheSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmVlZHNEaXNwbGF5OyB9CiAKICAgICB2b2lkIHNldE9wYWNpdHkoZmxv
YXQpOwotICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KICAg
ICBib29sIG9wYWNpdHlJc0FuaW1hdGluZygpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRGaWx0ZXJz
KGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKQEAgLTEyNSw3ICsxMzEsNiBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV9zdWJsYXllclRyYW5zZm9ybTsgfQogCiAgICAgdm9pZCBzZXRUcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KICAgICBib29s
IHRyYW5zZm9ybUlzQW5pbWF0aW5nKCkgY29uc3Q7CiAKICAgICBjb25zdCBJbnRSZWN0JiB2aXNp
YmxlTGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlTGF5ZXJSZWN0OyB9CkBAIC0x
ODEsOCArMTg2LDYgQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0
ZXhTaGFkZXJQb3MsIEZyYWdtZW50U2hhZGVyQ29sb3I+IEJvcmRlclByb2dyYW07CiAKLSAgICBp
bnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7IH0KLQogICAgIHZvaWQgY2xlYXJSZW5k
ZXJTdXJmYWNlKCkgeyBtX3JlbmRlclN1cmZhY2UuY2xlYXIoKTsgfQogICAgIFJlbmRlclN1cmZh
Y2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyU3VyZmFj
ZS5nZXQoKTsgfQogICAgIHZvaWQgY3JlYXRlUmVuZGVyU3VyZmFjZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmlt
YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QWN0aXZlQW5pbWF0aW9uLmgKaW5kZXggMjA5MzQyMWE3NTA4Zjk1ZmYzNWNjZTEzZjU0NTg2MmYy
NGVkZjNlZC4uOWM2NjMzYzNlNGM2ZjlkNmM0ZTZiYmUzZmQzNzY1Y2I3ZGJlNGVjMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3Rp
dmVBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCkBAIC02MywxNCArNjMsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIE9wYWNpdHkKICAgICB9OwogCi0gICAgc3RydWN0IEFuaW1hdGlvblNpZ25hdHVyZSB7
Ci0gICAgICAgIEFuaW1hdGlvblNpZ25hdHVyZShpbnQgZ3JvdXBJZCwgVGFyZ2V0UHJvcGVydHkg
dGFyZ2V0UHJvcGVydHkpCi0gICAgICAgICAgICA6IGdyb3VwSWQoZ3JvdXBJZCkKLSAgICAgICAg
ICAgICwgdGFyZ2V0UHJvcGVydHkodGFyZ2V0UHJvcGVydHkpIHsgfQotICAgICAgICBpbnQgZ3Jv
dXBJZDsKLSAgICAgICAgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHk7Ci0gICAgfTsKLQog
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGUoUGFzc093blB0
cjxDQ0FuaW1hdGlvbkN1cnZlPiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgVGFyZ2V0
UHJvcGVydHkpOwogCiAgICAgdmlydHVhbCB+Q0NBY3RpdmVBbmltYXRpb24oKTsKQEAgLTEwNCw4
ICs5Niw2IEBAIHB1YmxpYzoKICAgICAvLyBvZiBpdGVyYXRpb25zLCByZXR1cm5zIHRoZSByZWxh
dGl2ZSB0aW1lIGluIHRoZSBjdXJyZW50IGl0ZXJhdGlvbi4KICAgICBkb3VibGUgdHJpbVRpbWVU
b0N1cnJlbnRJdGVyYXRpb24oZG91YmxlIG5vdykgY29uc3Q7CiAKLSAgICBBbmltYXRpb25TaWdu
YXR1cmUgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gQW5pbWF0aW9uU2lnbmF0dXJlKG1fZ3Jv
dXAsIG1fdGFyZ2V0UHJvcGVydHkpOyB9Ci0KICAgICBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0
aW9uPiBjbG9uZUZvckltcGxUaHJlYWQoKSBjb25zdDsKIAogICAgIHZvaWQgc3luY2hyb25pemVQ
cm9wZXJ0aWVzKENDQWN0aXZlQW5pbWF0aW9uKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkV2ZW50cy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkV2
ZW50cy5jcHAKaW5kZXggOWY0MTg0NGNhMDVkMTM3YWMxZWQ3ZDhmMmE3MTE4ZjQ0NDA2NjgwMS4u
Yjc3ZDAyYmVkOWFjOWUwMjJlMWE0NWVjYmJhMGQ3NDZiNzYyN2Y2OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVu
dHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQW5pbWF0aW9uRXZlbnRzLmNwcApAQCAtMzAsOCArMzAsOSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUNDQW5pbWF0aW9uRXZlbnQ6OkNDQW5pbWF0aW9uRXZlbnQoaW50IGxheWVySWQp
CitDQ0FuaW1hdGlvbkV2ZW50OjpDQ0FuaW1hdGlvbkV2ZW50KGludCBsYXllcklkLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCiAgICAgOiBtX2xheWVy
SWQobGF5ZXJJZCkKKyAgICAsIG1fdGFyZ2V0UHJvcGVydHkodGFyZ2V0UHJvcGVydHkpCiB7CiB9
CiAKQEAgLTQ1LDE5ICs0NiwyNSBAQCBjb25zdCBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudCogQ0NB
bmltYXRpb25FdmVudDo6dG9BbmltYXRpb25TdGFydGVkRXZlbnQoKSBjb25zdAogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudCo+KHRoaXMpOwogfQog
Ci1jb25zdCBDQ0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQqIENDQW5pbWF0aW9uRXZlbnQ6OnRvQW5p
bWF0aW9uRmluaXNoZWRFdmVudCgpIGNvbnN0Citjb25zdCBDQ0Zsb2F0QW5pbWF0aW9uRmluaXNo
ZWRFdmVudCogQ0NBbmltYXRpb25FdmVudDo6dG9GbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQo
KSBjb25zdAogewotICAgIEFTU0VSVCh0eXBlKCkgPT0gRmluaXNoZWQpOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBDQ0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQqPih0aGlzKTsKKyAgICBB
U1NFUlQodHlwZSgpID09IEZpbmlzaGVkRmxvYXRBbmltYXRpb24pOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudCo+KHRoaXMpOwogfQog
Ci1QYXNzT3duUHRyPENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50PiBDQ0FuaW1hdGlvblN0YXJ0ZWRF
dmVudDo6Y3JlYXRlKGludCBsYXllcklkKQorY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25GaW5p
c2hlZEV2ZW50KiBDQ0FuaW1hdGlvbkV2ZW50Ojp0b1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVk
RXZlbnQoKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25TdGFy
dGVkRXZlbnQobGF5ZXJJZCkpOworICAgIEFTU0VSVCh0eXBlKCkgPT0gRmluaXNoZWRUcmFuc2Zv
cm1BbmltYXRpb24pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDQ1RyYW5zZm9ybUFu
aW1hdGlvbkZpbmlzaGVkRXZlbnQqPih0aGlzKTsKIH0KIAotQ0NBbmltYXRpb25TdGFydGVkRXZl
bnQ6OkNDQW5pbWF0aW9uU3RhcnRlZEV2ZW50KGludCBsYXllcklkKQotICAgIDogQ0NBbmltYXRp
b25FdmVudChsYXllcklkKQorUGFzc093blB0cjxDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudD4gQ0NB
bmltYXRpb25TdGFydGVkRXZlbnQ6OmNyZWF0ZShpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRp
b246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ0NBbmltYXRpb25TdGFydGVkRXZlbnQobGF5ZXJJZCwgdGFyZ2V0UHJvcGVydHkpKTsK
K30KKworQ0NBbmltYXRpb25TdGFydGVkRXZlbnQ6OkNDQW5pbWF0aW9uU3RhcnRlZEV2ZW50KGlu
dCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVy
dHkpCisgICAgOiBDQ0FuaW1hdGlvbkV2ZW50KGxheWVySWQsIHRhcmdldFByb3BlcnR5KQogewog
fQogCkBAIC03MCwyNCArNzcsNDQgQEAgQ0NBbmltYXRpb25FdmVudDo6VHlwZSBDQ0FuaW1hdGlv
blN0YXJ0ZWRFdmVudDo6dHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIFN0YXJ0ZWQ7CiB9CiAKLVBh
c3NPd25QdHI8Q0NBbmltYXRpb25GaW5pc2hlZEV2ZW50PiBDQ0FuaW1hdGlvbkZpbmlzaGVkRXZl
bnQ6OmNyZWF0ZShpbnQgbGF5ZXJJZCwgaW50IGFuaW1hdGlvbklkKQorUGFzc093blB0cjxDQ0Zs
b2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudD4gQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6
OmNyZWF0ZShpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRh
cmdldFByb3BlcnR5LCBmbG9hdCBmaW5hbFZhbHVlKQoreworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQobGF5ZXJJZCwgdGFyZ2V0UHJvcGVydHks
IGZpbmFsVmFsdWUpKTsKK30KKworQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OkNDRmxv
YXRBbmltYXRpb25GaW5pc2hlZEV2ZW50KGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHksIGZsb2F0IGZpbmFsVmFsdWUpCisgICAgOiBD
Q0FuaW1hdGlvbkV2ZW50KGxheWVySWQsIHRhcmdldFByb3BlcnR5KQorICAgICwgbV9maW5hbFZh
bHVlKGZpbmFsVmFsdWUpCit7Cit9CisKK0NDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50Ojp+
Q0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQoKQoreworfQorCitDQ0FuaW1hdGlvbkV2ZW50
OjpUeXBlIENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50Ojp0eXBlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gRmluaXNoZWRGbG9hdEFuaW1hdGlvbjsKK30KKworUGFzc093blB0cjxDQ1RyYW5z
Zm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ+IENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRF
dmVudDo6Y3JlYXRlKGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVy
dHkgdGFyZ2V0UHJvcGVydHksIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmaW5hbFZhbHVl
KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50KGxh
eWVySWQsIGFuaW1hdGlvbklkKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RyYW5zZm9y
bUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQobGF5ZXJJZCwgdGFyZ2V0UHJvcGVydHksIGZpbmFsVmFs
dWUpKTsKIH0KIAotQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50OjpDQ0FuaW1hdGlvbkZpbmlzaGVk
RXZlbnQoaW50IGxheWVySWQsIGludCBhbmltYXRpb25JZCkKLSAgICA6IENDQW5pbWF0aW9uRXZl
bnQobGF5ZXJJZCkKLSAgICAsIG1fYW5pbWF0aW9uSWQoYW5pbWF0aW9uSWQpCitDQ1RyYW5zZm9y
bUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVu
dChpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFBy
b3BlcnR5LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZmluYWxWYWx1ZSkKKyAgICA6IEND
QW5pbWF0aW9uRXZlbnQobGF5ZXJJZCwgdGFyZ2V0UHJvcGVydHkpCisgICAgLCBtX2ZpbmFsVmFs
dWUoZmluYWxWYWx1ZSkKIHsKIH0KIAotQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50Ojp+Q0NBbmlt
YXRpb25GaW5pc2hlZEV2ZW50KCkKK0NDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6
fkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCgpCiB7CiB9CiAKLUNDQW5pbWF0aW9u
RXZlbnQ6OlR5cGUgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50Ojp0eXBlKCkgY29uc3QKK0NDQW5p
bWF0aW9uRXZlbnQ6OlR5cGUgQ0NUcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50Ojp0eXBl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gRmluaXNoZWQ7CisgICAgcmV0dXJuIEZpbmlzaGVkVHJh
bnNmb3JtQW5pbWF0aW9uOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlv
bkV2ZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBbmltYXRpb25FdmVudHMuaAppbmRleCBkYTk0ZTFlMjdkMTM4ODQ1Yjg5M2Q1NjA4ZmI4NmM2
NGFiZjlhMjc5Li5lMjRmNzVkYzdjMWIzZWM1Mjg1MDE4Y2RlMWFmOTdiODNhYTRkNjk2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Fu
aW1hdGlvbkV2ZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmgKQEAgLTI1LDE3ICsyNSwyMCBAQAogI2lmbmRl
ZiBDQ0FuaW1hdGlvbkV2ZW50c19oCiAjZGVmaW5lIENDQW5pbWF0aW9uRXZlbnRzX2gKIAorI2lu
Y2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisKICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDsKLWNsYXNzIENDQW5pbWF0aW9uRmluaXNoZWRF
dmVudDsKK2NsYXNzIENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50OworY2xhc3MgQ0NUcmFu
c2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50OwogCiBjbGFzcyBDQ0FuaW1hdGlvbkV2ZW50IHsK
IHB1YmxpYzoKLSAgICBlbnVtIFR5cGUgeyBTdGFydGVkLCBGaW5pc2hlZCB9OworICAgIGVudW0g
VHlwZSB7IFN0YXJ0ZWQsIEZpbmlzaGVkRmxvYXRBbmltYXRpb24sIEZpbmlzaGVkVHJhbnNmb3Jt
QW5pbWF0aW9uIH07CiAKICAgICB2aXJ0dWFsIH5DQ0FuaW1hdGlvbkV2ZW50KCk7CiAKQEAgLTQz
LDQ0ICs0Niw2NSBAQCBwdWJsaWM6CiAKICAgICBpbnQgbGF5ZXJJZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGF5ZXJJZDsgfQogCisgICAgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRh
cmdldFByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRQcm9wZXJ0eTsgfQorCiAgICAg
Y29uc3QgQ0NBbmltYXRpb25TdGFydGVkRXZlbnQqIHRvQW5pbWF0aW9uU3RhcnRlZEV2ZW50KCkg
Y29uc3Q7Ci0gICAgY29uc3QgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50KiB0b0FuaW1hdGlvbkZp
bmlzaGVkRXZlbnQoKSBjb25zdDsKKyAgICBjb25zdCBDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRF
dmVudCogdG9GbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQoKSBjb25zdDsKKyAgICBjb25zdCBD
Q1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQqIHRvVHJhbnNmb3JtQW5pbWF0aW9uRmlu
aXNoZWRFdmVudCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ0NBbmltYXRpb25FdmVudChp
bnQgbGF5ZXJJZCk7CisgICAgQ0NBbmltYXRpb25FdmVudChpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVB
bmltYXRpb246OlRhcmdldFByb3BlcnR5KTsKIAogcHJpdmF0ZToKICAgICBpbnQgbV9sYXllcklk
OworICAgIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSBtX3RhcmdldFByb3BlcnR5
OwogfTsKIAogLy8gSW5kaWNhdGVzIHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBzdGFydGVkIG9uIGEg
cGFydGljdWxhciBsYXllci4KIGNsYXNzIENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50IDogcHVibGlj
IENDQW5pbWF0aW9uRXZlbnQgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQW5p
bWF0aW9uU3RhcnRlZEV2ZW50PiBjcmVhdGUoaW50IGxheWVySWQpOworICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50PiBjcmVhdGUoaW50IGxheWVySWQsIENDQWN0
aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CiAKICAgICB2aXJ0dWFsIH5DQ0FuaW1hdGlv
blN0YXJ0ZWRFdmVudCgpOwogCiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdDsKIAogcHJp
dmF0ZToKLSAgICBleHBsaWNpdCBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudChpbnQgbGF5ZXJJZCk7
CisgICAgQ0NBbmltYXRpb25TdGFydGVkRXZlbnQoaW50IGxheWVySWQsIENDQWN0aXZlQW5pbWF0
aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CiB9OwogCi0vLyBJbmRpY2F0ZXMgdGhhdCBhbiBhbmltYXRp
b24gaGFzIHN0YXJ0ZWQgb24gYSBwYXJ0aWN1bGFyIGxheWVyLgotY2xhc3MgQ0NBbmltYXRpb25G
aW5pc2hlZEV2ZW50IDogcHVibGljIENDQW5pbWF0aW9uRXZlbnQgeworLy8gSW5kaWNhdGVzIHRo
YXQgYSBmbG9hdCBhbmltYXRpb24gaGFzIGNvbXBsZXRlZC4KK2NsYXNzIENDRmxvYXRBbmltYXRp
b25GaW5pc2hlZEV2ZW50IDogcHVibGljIENDQW5pbWF0aW9uRXZlbnQgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzT3duUHRyPENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50PiBjcmVhdGUo
aW50IGxheWVySWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSwgZmxvYXQgZmlu
YWxWYWx1ZSk7CisKKyAgICB2aXJ0dWFsIH5DQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudCgp
OworCisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdDsKKworICAgIGZsb2F0IGZpbmFsVmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbmFsVmFsdWU7IH0KKworcHJpdmF0ZToKKyAgICBDQ0Zs
b2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudChpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246
OlRhcmdldFByb3BlcnR5LCBmbG9hdCBmaW5hbFZhbHVlKTsKKworICAgIGZsb2F0IG1fZmluYWxW
YWx1ZTsKK307CisKKy8vIEluZGljYXRlcyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiBoYXMg
Y29tcGxldGVkLgorY2xhc3MgQ0NUcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50IDogcHVi
bGljIENDQW5pbWF0aW9uRXZlbnQgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEND
QW5pbWF0aW9uRmluaXNoZWRFdmVudD4gY3JlYXRlKGludCBsYXllcklkLCBpbnQgYW5pbWF0aW9u
SWQpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRF
dmVudD4gY3JlYXRlKGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVy
dHksIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmaW5hbFZhbHVlKTsKIAotICAgIHZpcnR1
YWwgfkNDQW5pbWF0aW9uRmluaXNoZWRFdmVudCgpOworICAgIHZpcnR1YWwgfkNDVHJhbnNmb3Jt
QW5pbWF0aW9uRmluaXNoZWRFdmVudCgpOwogCiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25z
dDsKIAotICAgIGludCBhbmltYXRpb25JZCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uSWQ7
IH0KKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZmluYWxWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZmluYWxWYWx1ZTsgfQogCiBwcml2YXRlOgotICAgIENDQW5pbWF0aW9uRmluaXNo
ZWRFdmVudChpbnQgbGF5ZXJJZCwgaW50IGFuaW1hdGlvbklkKTsKKyAgICBDQ1RyYW5zZm9ybUFu
aW1hdGlvbkZpbmlzaGVkRXZlbnQoaW50IGxheWVySWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJn
ZXRQcm9wZXJ0eSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZpbmFsVmFsdWUpOwogCi0g
ICAgaW50IG1fYW5pbWF0aW9uSWQ7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9maW5hbFZh
bHVlOwogfTsKIAogdHlwZWRlZiBWZWN0b3I8T3duUHRyPENDQW5pbWF0aW9uRXZlbnQ+ID4gQ0NB
bmltYXRpb25FdmVudHNWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci5jcHAKaW5kZXggYzNhZjQ0ZGY1NmM1ZWI5OTk1ZDVjMmRiMzk4NzFjNDJk
M2U1MGU5ZC4uMTIzOGRjZTBlMWJlZGJiMmU2NmQ3NGIxMTMwMzFkYWEwMmQ1Y2ZmOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcApAQCAtMjcs
OSArMjcsMTAgQEAKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgog
CiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIiAvLyBmb3IgS2V5ZnJhbWVWYWx1ZUxpc3QKKyNp
bmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKICNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNj
L0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGwuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogCkBAIC01NiwxMCArNTcsNiBAQCBQYXNzT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxp
c3QmIHZhbAogICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0RpcmVjdGlvblNldCgp
ICYmIGFuaW1hdGlvbi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rp
b25BbHRlcm5hdGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgLy8gRklYTUU6IGFk
ZCBzdXBwb3J0IGZvciBkZWxheQotICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0Rl
bGF5U2V0KCkgJiYgYW5pbWF0aW9uLT5kZWxheSgpID4gMCkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIGZpbGxzIGZvcndhcmRzIGFuZCBm
aWxscyBiYWNrd2FyZHMKICAgICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNGaWxsTW9k
ZVNldCgpICYmIChhbmltYXRpb24tPmZpbGxzRm9yd2FyZHMoKSB8fCBhbmltYXRpb24tPmZpbGxz
QmFja3dhcmRzKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwNSw3ICsxMDIsOCBA
QCBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oY29u
c3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbAogCiB9IC8vIG5hbWVwYWNlCiAKLUNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpCitDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKIHsK
IH0KIApAQCAtMTEzLDkgKzExMSw5IEBAIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjp+Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKQogewogfQogCi1QYXNzT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyPiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkKK1Bh
c3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjpjcmVhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQqIGNsaWVudCkK
IHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKTsK
KyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKGNsaWVu
dCkpOwogfQogCiBib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24o
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgSW50U2l6ZSYsIGNvbnN0
IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBkb3Vi
bGUgdGltZU9mZnNldCkKQEAgLTE2NywzMiArMTY1LDcxIEBAIHZvaWQgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMoKQogCiAvLyBFbnN1cmVzIHRoYXQgdGhlIGxp
c3Qgb2YgYWN0aXZlIGFuaW1hdGlvbnMgb24gdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgaW1wbCB0
aHJlYWQKIC8vIGFyZSBrZXB0IGluIHN5bmMuCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpzeW5jaHJvbml6ZUFuaW1hdGlvbnMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
KiBjb250cm9sbGVySW1wbCkKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hB
bmltYXRpb25VcGRhdGVzVG8oQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXJJ
bXBsKQogewotICAgIHJlbW92ZUNvbXBsZXRlZEFuaW1hdGlvbnMoY29udHJvbGxlckltcGwpOwog
ICAgIHB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsKICAgICBy
ZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsKLSAg
ICBwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhjb250cm9sbGVySW1wbCk7CiB9CiAKLXZvaWQgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUNvbXBsZXRlZEFuaW1hdGlvbnMoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3ZvaWQgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yKiBldmVudHMpCit7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zv
ck5leHRUaWNrKG1vbm90b25pY1RpbWUsIGV2ZW50cyk7CisgICAgc3RhcnRBbmltYXRpb25zV2Fp
dGluZ0ZvclN0YXJ0VGltZShtb25vdG9uaWNUaW1lLCBldmVudHMpOworICAgIHN0YXJ0QW5pbWF0
aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkobW9ub3RvbmljVGltZSwgZXZlbnRzKTsK
KyAgICByZXNvbHZlQ29uZmxpY3RzKG1vbm90b25pY1RpbWUpOworICAgIHRpY2tBbmltYXRpb25z
KG1vbm90b25pY1RpbWUpOworICAgIHB1cmdlRmluaXNoZWRBbmltYXRpb25zKGV2ZW50cyk7Cisg
ICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShtb25vdG9uaWNU
aW1lLCBldmVudHMpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGQo
UGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKQogewotICAgIC8vIEFueSBh
bmltYXRpb25zIGZpbmlzaGVkIG9uIHRoZSBpbXBsIHRocmVhZCBhcmUgcmVtb3ZlZCBmcm9tIHRo
ZSBtYWluIHRocmVhZCdzIGNvbGxlY3Rpb24uCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAg
IHJlbW92ZShjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlvbnNbaV0uZ3JvdXBJZCwg
Y29udHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zW2ldLnRhcmdldFByb3BlcnR5KTsK
LSAgICBjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlvbnMuY2xlYXIoKTsKKyAgICBt
X2FjdGl2ZUFuaW1hdGlvbnMuYXBwZW5kKGFuaW1hdGlvbik7CiB9CiAKLXZvaWQgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCitDQ0FjdGl2ZUFuaW1hdGlv
biogQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmdldEFjdGl2ZUFuaW1hdGlvbihpbnQgZ3Jv
dXBJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsg
KytpKQorICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IGdyb3Vw
SWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdldFBy
b3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS5nZXQoKTsK
KyAgICByZXR1cm4gMDsKK30KKworYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6aGFz
QWN0aXZlQW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmlt
YXRpb25zW2ldLT5ydW5TdGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCAmJiBt
X2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRpb246OkFi
b3J0ZWQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjppc0FuaW1hdGluZ1Byb3Bl
cnR5KENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkgY29u
c3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgp
ICE9IENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQgJiYgbV9hY3RpdmVBbmlt
YXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdldFByb3BlcnR5KQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0FuaW1hdGlvbnNUb0ltcGxUaHJlYWQoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXJJbXBsKQogewogICAgIC8vIEFueSBu
ZXcgYW5pbWF0aW9ucyBvd25lZCBieSB0aGUgbWFpbiB0aHJlYWQncyBjb250cm9sbGVyIGFyZSBj
bG9uZWQgYW5kIGFkZGUgdG8gdGhlIGltcGwgdGhyZWFkJ3MgY29udHJvbGxlci4KICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAoIWNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24obV9hY3RpdmVBbmlt
YXRpb25zW2ldLT5ncm91cCgpLCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5
KCkpKQotICAgICAgICAgICAgY29udHJvbGxlckltcGwtPmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPmNsb25lRm9ySW1wbFRocmVhZCgpKTsKKyAgICAgICAgaWYgKCFjb250cm9sbGVySW1wbC0+
Z2V0QWN0aXZlQW5pbWF0aW9uKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSwgbV9hY3Rp
dmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpKSkgeworICAgICAgICAgICAgT3duUHRy
PENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmNsb25lRm9y
SW1wbFRocmVhZCgpKTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBhbmltYXRpb24gaXMgYWxyZWFk
eSBpbiBwcm9ncmVzcyAtLSBzZXQgaXQgdG8gYmUgd2FpdGluZyB1bnRpbCB0aGUgdGFyZ2V0IGlz
IGF2YWlsYWJsZS4KKyAgICAgICAgICAgIC8vIFRoYXQgd2F5LCBpdCB3aWxsIGhhdmUgYSBjaGFu
Y2UgdG8gc3RhcnQgb24gdGhlIGltcGwgdGhyZWFkLiBPdGhlcndpc2UsIHdlIHdpbGwgbmV2ZXIg
dGljayBhdCB0aGUKKyAgICAgICAgICAgIC8vIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBhbmltYXRp
b24uCisgICAgICAgICAgICBpZiAodG9BZGQtPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRp
b246OlJ1bm5pbmcgfHwgdG9BZGQtPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OlBh
dXNlZCkKKyAgICAgICAgICAgICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRp
b246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIDApOworICAgICAgICAgICAgY29udHJv
bGxlckltcGwtPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgICAgICB9CiAgICAgfQogfQogCi12
b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb25zQ29tcGxldGVk
T25NYWluVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlcklt
cGwpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb25zQ29t
cGxldGVkT25NYWluVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKiBjb250cm9sbGVy
SW1wbCkKIHsKICAgICAvLyBEZWxldGUgYWxsIGltcGwgdGhyZWFkIGFuaW1hdGlvbnMgZm9yIHdo
aWNoIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgbWFpbiB0aHJlYWQgYW5pbWF0aW9uLgogICAg
IC8vIEVhY2ggaXRlcmF0aW9uLCBjb250cm9sbGVyLT5tX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgp
IGlzIGRlY3JlbWVudGVkIG9yIGkgaXMgaW5jcmVtZW50ZWQKQEAgLTIwNiw0MyArMjQzLDE2OSBA
QCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb25zQ29tcGxl
dGVkT25NYWluVGhyZWFkKENDTGF5ZXJBbgogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6cHVzaEFuaW1hdGlvblByb3BlcnRpZXMoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhkb3VibGUgbW9ub3Rvbmlj
VGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IqIGV2ZW50cykKIHsKLSAgICAvLyBEZWxldGUg
YWxsIGltcGwgdGhyZWFkIGFuaW1hdGlvbnMgZm9yIHdoaWNoIHRoZXJlIGlzIG5vIGNvcnJlc3Bv
bmRpbmcgbWFpbiB0aHJlYWQgYW5pbWF0aW9uLgotICAgIC8vIEVhY2ggaXRlcmF0aW9uLCBjb250
cm9sbGVyLT5tX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpIGlzIGRlY3JlbWVudGVkIG9yIGkgaXMg
aW5jcmVtZW50ZWQKLSAgICAvLyBndWFyYW50ZWVpbmcgcHJvZ3Jlc3MgdG93YXJkcyBsb29wIHRl
cm1pbmF0aW9uLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udHJvbGxlckltcGwtPm1f
YWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBDQ0FjdGl2ZUFuaW1hdGlv
biogY3VycmVudEltcGwgPSBjb250cm9sbGVySW1wbC0+bV9hY3RpdmVBbmltYXRpb25zW2ldLmdl
dCgpOwotICAgICAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogY3VycmVudCA9IGdldEFjdGl2ZUFuaW1h
dGlvbihjdXJyZW50SW1wbC0+Z3JvdXAoKSwgY3VycmVudEltcGwtPnRhcmdldFByb3BlcnR5KCkp
OwotICAgICAgICBBU1NFUlQoY3VycmVudCk7Ci0gICAgICAgIGlmIChjdXJyZW50KQotICAgICAg
ICAgICAgY3VycmVudC0+c3luY2hyb25pemVQcm9wZXJ0aWVzKGN1cnJlbnRJbXBsKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZl
QW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2spIHsKKyAgICAgICAgICAgIG1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG1vbm90
b25pY1RpbWUpOworICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRTdGFydFRp
bWUobW9ub3RvbmljVGltZSk7CisgICAgICAgICAgICBpZiAoZXZlbnRzKQorICAgICAgICAgICAg
ICAgIGV2ZW50cy0+YXBwZW5kKENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50OjpjcmVhdGUobV9jbGll
bnQtPmlkKCksIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSkpOworICAg
ICAgICB9CiAgICAgfQogfQogCi1DQ0FjdGl2ZUFuaW1hdGlvbiogQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI6OmdldEFjdGl2ZUFuaW1hdGlvbihpbnQgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRp
b246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQordm9pZCBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbW9u
b3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IqIGV2ZW50cykKIHsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkKLSAgICAg
ICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cElkICYmIG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSB0YXJnZXRQcm9wZXJ0eSkKLSAg
ICAgICAgICAgIHJldHVybiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0uZ2V0KCk7Ci0gICAgcmV0dXJu
IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9
PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSAmJiBtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnN0YXJ0VGltZSgpIDw9IG1vbm90b25pY1RpbWUpIHsKKyAgICAgICAgICAgIG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5p
bmcsIG1vbm90b25pY1RpbWUpOworICAgICAgICAgICAgaWYgKGV2ZW50cykKKyAgICAgICAgICAg
ICAgICBldmVudHMtPmFwcGVuZChDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDo6Y3JlYXRlKG1fY2xp
ZW50LT5pZCgpLCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpKTsKKyAg
ICAgICAgfQorICAgIH0KIH0KIAotYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNB
bmltYXRpbmdQcm9wZXJ0eShDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0
UHJvcGVydHkpIGNvbnN0Cit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpzdGFydEFu
aW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBtb25vdG9uaWNUaW1l
LCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciogZXZlbnRzKQogeworICAgIC8vIEZpcnN0IGNvbGxl
Y3QgcnVubmluZyBwcm9wZXJ0aWVzLgorICAgIFRhcmdldFByb3BlcnRpZXMgYmxvY2tlZFByb3Bl
cnRpZXM7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUo
KSAhPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ld
LT5ydW5TdGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkICYmIG1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSB0YXJnZXRQcm9wZXJ0eSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5T
dGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nIHx8IG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQpCisgICAgICAg
ICAgICBibG9ja2VkUHJvcGVydGllcy5hZGQobV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQ
cm9wZXJ0eSgpKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZl
QW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25z
W2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZh
aWxhYmlsaXR5KSB7CisgICAgICAgICAgICAvLyBDb2xsZWN0IGFsbCBwcm9wZXJ0aWVzIGZvciBh
bmltYXRpb25zIHdpdGggdGhlIHNhbWUgZ3JvdXAgaWQgKHRoZXkgc2hvdWxkIGFsbCBhbHNvIGJl
IGluIHRoZSBsaXN0IG9mIGFuaW1hdGlvbnMpLgorICAgICAgICAgICAgVGFyZ2V0UHJvcGVydGll
cyBlbnF1ZXVlZFByb3BlcnRpZXM7CisgICAgICAgICAgICBlbnF1ZXVlZFByb3BlcnRpZXMuYWRk
KG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSk7CisgICAgICAgICAgICBm
b3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2op
IHsKKyAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09
IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkKKyAgICAgICAgICAgICAgICAgICAgZW5x
dWV1ZWRQcm9wZXJ0aWVzLmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnRhcmdldFByb3BlcnR5
KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgaW50
ZXJzZWN0aW9uIG9mIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgYWZmZWN0ZWQgYnkgdGhlIGdyb3Vw
IGFuZCB0aGUgbGlzdCBvZiBjdXJyZW50bHkKKyAgICAgICAgICAgIC8vIGJsb2NrZWQgcHJvcGVy
dGllcyBpcyBudWxsLiBJbiBhbnkgY2FzZSwgdGhlIGdyb3VwJ3MgdGFyZ2V0IHByb3BlcnRpZXMg
bmVlZCB0byBiZSBhZGRlZCB0byB0aGUgbGlzdAorICAgICAgICAgICAgLy8gb2YgYmxvY2tlZCBw
cm9wZXJ0aWVzLgorICAgICAgICAgICAgYm9vbCBudWxsSW50ZXJzZWN0aW9uID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGZvciAoVGFyZ2V0UHJvcGVydGllczo6aXRlcmF0b3IgcEl0ZXIgPSBlbnF1ZXVl
ZFByb3BlcnRpZXMuYmVnaW4oKTsgcEl0ZXIgIT0gZW5xdWV1ZWRQcm9wZXJ0aWVzLmVuZCgpOyAr
K3BJdGVyKSB7CisgICAgICAgICAgICAgICAgaWYgKCFibG9ja2VkUHJvcGVydGllcy5hZGQoKnBJ
dGVyKS5zZWNvbmQpCisgICAgICAgICAgICAgICAgICAgIG51bGxJbnRlcnNlY3Rpb24gPSBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgdGhlIGludGVyc2VjdGlvbiBp
cyBudWxsLCB0aGVuIHdlIGFyZSBmcmVlIHRvIHN0YXJ0IHRoZSBhbmltYXRpb25zIGluIHRoZSBn
cm91cC4KKyAgICAgICAgICAgIGlmIChudWxsSW50ZXJzZWN0aW9uKSB7CisgICAgICAgICAgICAg
ICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6
UnVubmluZywgbW9ub3RvbmljVGltZSk7CisgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRp
b25zW2ldLT5zZXRTdGFydFRpbWUobW9ub3RvbmljVGltZSk7CisgICAgICAgICAgICAgICAgaWYg
KGV2ZW50cykKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzLT5hcHBlbmQoQ0NBbmltYXRpb25T
dGFydGVkRXZlbnQ6OmNyZWF0ZShtX2NsaWVudC0+aWQoKSwgbV9hY3RpdmVBbmltYXRpb25zW2ld
LT50YXJnZXRQcm9wZXJ0eSgpKSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkg
KyAxOyBqIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gbV9hY3RpdmVBbmlt
YXRpb25zW2pdLT5ncm91cCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFu
aW1hdGlvbnNbal0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBtb25v
dG9uaWNUaW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tq
XS0+c2V0U3RhcnRUaW1lKG1vbm90b25pY1RpbWUpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3Zl
KGludCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJv
cGVydHkpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZXNvbHZlQ29uZmxpY3Rz
KGRvdWJsZSBtb25vdG9uaWNUaW1lKQogeworICAgIC8vIEZpbmQgYW55IGFuaW1hdGlvbnMgdGhh
dCBhcmUgYW5pbWF0aW5nIHRoZSBzYW1lIHByb3BlcnR5IGFuZCByZXNvbHZlIHRoZQorICAgIC8v
IGNvbmZpY3QuIFdlIGNvdWxkIGV2ZW50dWFsbHkgYmxlbmQsIGJ1dCBmb3Igbm93IHdlJ2xsIGp1
c3QgYWJvcnQgdGhlCisgICAgLy8gcHJldmlvdXMgYW5pbWF0aW9uICh3aGVyZSAncHJldmlvdXMn
IG1lYW5zOiAoMSkgaGFzIGEgcHJpb3Igc3RhcnQgdGltZSBvcgorICAgIC8vICgyKSBoYXMgYW4g
ZXF1YWwgc3RhcnQgdGltZSwgYnV0IHdhcyBhZGRlZCB0byB0aGUgcXVldWUgZWFybGllciwgaS5l
LiwKKyAgICAvLyBoYXMgYSBsb3dlciBpbmRleCBpbiBtX2FjdGl2ZUFuaW1hdGlvbnMpLgogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3JvdXBJZCAm
JiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVy
dHkpIHsKLSAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRl
KCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcpIHsKKyAgICAgICAgICAgIGZvciAoc2l6
ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraikgeworICAg
ICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnJ1blN0YXRlKCkgPT0gQ0NB
Y3RpdmVBbmltYXRpb246OlJ1bm5pbmcgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQ
cm9wZXJ0eSgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+dGFyZ2V0UHJvcGVydHkoKSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5zdGFydFRpbWUo
KSA+IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+c3RhcnRUaW1lKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0
aW9uOjpBYm9ydGVkLCBtb25vdG9uaWNUaW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0
ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgbW9ub3RvbmljVGltZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucyhDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3RvciogZXZlbnRzKQoreworICAgIC8vIEVhY2ggaXRlcmF0aW9uLCBtX2FjdGl2
ZUFuaW1hdGlvbnMuc2l6ZSgpIGRlY3JlYXNlcyBvciBpIGluY3JlbWVudHMsCisgICAgLy8gZ3Vh
cmFudGVlaW5nIHByb2dyZXNzIHRvd2FyZHMgbG9vcCB0ZXJtaW5hdGlvbi4KKyAgICBzaXplX3Qg
aSA9IDA7CisgICAgd2hpbGUgKGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpKSB7CisgICAg
ICAgIGludCBncm91cElkID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpOworICAgICAg
ICBib29sIGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkID0gZmFsc2U7CisgICAgICAgIGlm
IChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlzRmluaXNoZWQoKSkgeworICAgICAgICAgICAgYWxs
QW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQgPSB0cnVlOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZ3JvdXBJZCA9PSBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPmdyb3VwKCkgJiYg
IW1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+aXNGaW5pc2hlZCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBpZiAoYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQpIHsKKyAgICAgICAg
ICAgIC8vIFdlIG5vdyBuZWVkIHRvIHJlbW92ZSBhbGwgYW5pbWF0aW9ucyB3aXRoIHRoZSBzYW1l
IGdyb3VwIGlkIGFzIGdyb3VwSWQKKyAgICAgICAgICAgIC8vIChhbmQgc2VuZCBhbG9uZyBhbmlt
YXRpb24gZmluaXNoZWQgbm90aWZpY2F0aW9ucywgaWYgbmVjZXNzYXJ5KS4KKyAgICAgICAgICAg
IC8vIEVhY2ggaXRlcmF0aW9uLCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpIGRlY3JlYXNlcyBv
ciBqIGluY3JlbWVudHMsCisgICAgICAgICAgICAvLyBndWFyYW50ZWVpbmcgcHJvZ3Jlc3MgdG93
YXJkcyBsb29wIHRlcm1pbmF0aW9uLiBBbHNvLCB3ZSBhcmUgZ3VhcmFudGVlZAorICAgICAgICAg
ICAgLy8gdG8gcmVtb3ZlIGF0IGxlYXN0IG9uZSBhY3RpdmUgYW5pbWF0aW9uLgorICAgICAgICAg
ICAgZm9yIChzaXplX3QgaiA9IGk7IGogPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOykgewor
ICAgICAgICAgICAgICAgIGlmIChncm91cElkICE9IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3Jv
dXAoKSkKKyAgICAgICAgICAgICAgICAgICAgaisrOworICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnRzKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+dGFyZ2V0UHJvcGVydHkoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eToKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHMtPmFwcGVuZChDQ0Zsb2F0QW5pbWF0aW9u
RmluaXNoZWRFdmVudDo6Y3JlYXRlKG1fY2xpZW50LT5pZCgpLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSwgbV9jbGllbnQtPm9wYWNpdHkoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cy0+YXBwZW5k
KENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Y3JlYXRlKG1fY2xpZW50LT5pZCgp
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtLCBtX2NsaWVudC0+dHJhbnNmb3JtKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtX2FjdGl2
ZUFuaW1hdGlvbnMucmVtb3ZlKGopOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpKys7CisgICAgfQorfQorCit2b2lkIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjp0aWNrQW5pbWF0aW9ucyhkb3VibGUgbW9ub3RvbmljVGlt
ZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgp
ID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nKSB7CisgICAgICAgICAgICBkb3VibGUgdHJp
bW1lZCA9IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24o
bW9ub3RvbmljVGltZSk7CisKKyAgICAgICAgICAgIHN3aXRjaCAobV9hY3RpdmVBbmltYXRpb25z
W2ldLT50YXJnZXRQcm9wZXJ0eSgpKSB7CisKKyAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVBbmlt
YXRpb246OlRyYW5zZm9ybTogeworICAgICAgICAgICAgICAgIGNvbnN0IENDVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUqIHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmltYXRpb25z
W2ldLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CisgICAgICAgICAgICAg
ICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gdHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUtPmdldFZhbHVlKHRyaW1tZWQsIG1fY2xpZW50LT5ib3VuZHMoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG1vbm90b25pY1Rp
bWUpKQorICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0
YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCwgbW9ub3RvbmljVGltZSk7CisKKyAgICAg
ICAgICAgICAgICBtX2NsaWVudC0+c2V0VHJhbnNmb3JtRnJvbUFuaW1hdGlvbihtYXRyaXgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNl
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5OiB7CisgICAgICAgICAgICAgICAgY29uc3QgQ0NG
bG9hdEFuaW1hdGlvbkN1cnZlKiBmbG9hdEFuaW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmltYXRp
b25zW2ldLT5jdXJ2ZSgpLT50b0Zsb2F0QW5pbWF0aW9uQ3VydmUoKTsKKyAgICAgICAgICAgICAg
ICBjb25zdCBmbG9hdCBvcGFjaXR5ID0gZmxvYXRBbmltYXRpb25DdXJ2ZS0+Z2V0VmFsdWUodHJp
bW1lZCk7CisgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5p
c2hlZEF0KG1vbm90b25pY1RpbWUpKQorICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCwgbW9ub3Rv
bmljVGltZSk7CisKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0T3BhY2l0eUZyb21Bbmlt
YXRpb24ob3BhY2l0eSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCmluZGV4IGYyZjY2ZWIyNDRlZjBhYjI3NTdkMjkw
NTRmOGM0MTlmNDZlNGQ5MGYuLmQwMGFhZTc4YWMxZDUxZTkyYzNiYTE0NzY0YTM3NDlkOGY0MmY1
MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaApA
QCAtMjYsMjYgKzI2LDQyIEBACiAjZGVmaW5lIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyX2gK
IAogI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NBbmlt
YXRpb25DdXJ2ZS5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uRXZlbnRzLmgiCiAKKyNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBbmltYXRpb247
Ci1jbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw7CiBjbGFzcyBJbnRTaXplOwog
Y2xhc3MgS2V5ZnJhbWVWYWx1ZUxpc3Q7CitjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKK2Ns
YXNzIFRyYW5zZm9ybU9wZXJhdGlvbnM7CisKK2NsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckNsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNldE9wYWNpdHlGcm9tQW5pbWF0aW9uKGZsb2F0KSA9IDA7CisgICAgdmly
dHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFu
c2Zvcm1Gcm9tQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgPSAwOworICAg
IHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0ID0gMDsKK307CiAK
IGNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZSgpOworICAgIHN0YXRp
YyBQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjcmVhdGUoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJDbGllbnQqKTsKIAogICAgIHZpcnR1YWwgfkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKCk7CiAKLSAgICAvLyBUaGVzZSBhcmUgdmlydHVhbCBmb3IgdGVzdGluZy4K
KyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB2aXJ0dWFsIGZvciB0ZXN0aW5nLgogICAgIHZpcnR1
YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRT
aXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91
cElkLCBkb3VibGUgdGltZU9mZnNldCk7CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9u
KGludCBhbmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQpOwogICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVBbmltYXRpb24oaW50IGFuaW1hdGlvbklkKTsKQEAgLTU0LDIzICs3MCw0MSBAQCBwdWJs
aWM6CiAKICAgICAvLyBFbnN1cmVzIHRoYXQgdGhlIGxpc3Qgb2YgYWN0aXZlIGFuaW1hdGlvbnMg
b24gdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgaW1wbCB0aHJlYWQKICAgICAvLyBhcmUga2VwdCBp
biBzeW5jLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2Ugb3duZXJzaGlwIG9mIHRoZSBpbXBs
IHRocmVhZCBjb250cm9sbGVyLgotICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZUFuaW1hdGlv
bnMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7CisgICAgdmlydHVhbCB2b2lkIHB1
c2hBbmltYXRpb25VcGRhdGVzVG8oQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqKTsKKworICAg
IHZvaWQgYW5pbWF0ZShkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0
b3IqKTsKIAotICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9h
Y3RpdmVBbmltYXRpb25zLnNpemUoKTsgfQorICAgIHZvaWQgYWRkKFBhc3NPd25QdHI8Q0NBY3Rp
dmVBbmltYXRpb24+KTsKKworICAgIC8vIFJldHVybnMgdGhlIGFjdGl2ZSBhbmltYXRpb24gaW4g
dGhlIGdpdmVuIGdyb3VwLCBhbmltYXRpbmcgdGhlIGdpdmVuIHByb3BlcnR5IGlmIHN1Y2ggYW4K
KyAgICAvLyBhbmltYXRpb24gZXhpc3RzLgogICAgIENDQWN0aXZlQW5pbWF0aW9uKiBnZXRBY3Rp
dmVBbmltYXRpb24oaW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0
eSk7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIGFueSBhbmltYXRpb25zIHRo
YXQgaGF2ZSBuZWl0aGVyIGZpbmlzaGVkIG5vciBhYm9ydGVkLgorICAgIGJvb2wgaGFzQWN0aXZl
QW5pbWF0aW9uKCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4g
YW5pbWF0aW9uIGN1cnJlbnRseSBhbmltYXRpbmcgdGhlIGdpdmVuIHByb3BlcnR5LCBvcgorICAg
IC8vIGlmIHRoZXJlIGlzIGFuIGFuaW1hdGlvbiBzY2hlZHVsZWQgdG8gYW5pbWF0ZSB0aGlzIHBy
b3BlcnR5IGluIHRoZSBmdXR1cmUuCiAgICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5KENDQWN0
aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOworICAgIGV4cGxpY2l0IENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50Kik7CiAKIHByaXZh
dGU6Ci0gICAgdm9pZCByZW1vdmVDb21wbGV0ZWRBbmltYXRpb25zKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbCopOwotICAgIHZvaWQgcHVzaE5ld0FuaW1hdGlvbnNUb0ltcGxUaHJlYWQo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7Ci0gICAgdm9pZCByZW1vdmVBbmltYXRp
b25zQ29tcGxldGVkT25NYWluVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCop
OwotICAgIHZvaWQgcHVzaEFuaW1hdGlvblByb3BlcnRpZXMoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsKik7CisgICAgdHlwZWRlZiBIYXNoU2V0PGludD4gVGFyZ2V0UHJvcGVydGllczsK
KworICAgIHZvaWQgcHVzaE5ld0FuaW1hdGlvbnNUb0ltcGxUaHJlYWQoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIqKTsKKyAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5U
aHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqKTsKKworICAgIHZvaWQgc3RhcnRBbmlt
YXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3RvciopOworICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0
VGltZShkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IqKTsKKyAg
ICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91Ymxl
IG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKik7CisgICAgdm9pZCByZXNv
bHZlQ29uZmxpY3RzKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKKyAgICB2b2lkIHB1cmdlRmluaXNo
ZWRBbmltYXRpb25zKENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKik7CiAKLSAgICB2b2lkIHJlbW92
ZShpbnQgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KTsKKyAgICB2
b2lkIHRpY2tBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKIAorICAgIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICBWZWN0b3I8T3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiA+IG1fYWN0aXZlQW5pbWF0aW9uczsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTllOTFiMmUyYTRlNDU5ZGUwZGVmN2YxNmUyOWQ0MTBh
ZGQzMDUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCi0KLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0vLyBBIGNvbGxlY3Rpb24gb2YgcHJvcGVydGllcy4gVXNlZCB3aGVuIGRldGVyaW1p
bmluZyBpZiBhbmltYXRpb25zIHdhaXRpbmcgZm9yIHRhcmdldAotLy8gYXZhaWxpYmlsaXR5IGFy
ZSBhYmxlIHRvIHJ1bi4KLXR5cGVkZWYgSGFzaFNldDxpbnQ+IFRhcmdldFByb3BlcnRpZXM7Ci0K
LVBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxD
bGllbnQqIGNsaWVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbChjbGllbnQpKTsKLX0KLQotQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsQ2xpZW50KiBjbGllbnQpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi17Ci19
Ci0KLUNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6fkNDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbCgpCi17Ci19Ci0KLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjphbmltYXRlKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYg
ZXZlbnRzKQotewotICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhtb25vdG9u
aWNUaW1lLCBldmVudHMpOwotICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUo
bW9ub3RvbmljVGltZSwgZXZlbnRzKTsKLSAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFy
Z2V0QXZhaWxhYmlsaXR5KG1vbm90b25pY1RpbWUsIGV2ZW50cyk7Ci0gICAgcmVzb2x2ZUNvbmZs
aWN0cyhtb25vdG9uaWNUaW1lKTsKLSAgICB0aWNrQW5pbWF0aW9ucyhtb25vdG9uaWNUaW1lKTsK
LSAgICBwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucyhldmVudHMpOwotICAgIHN0YXJ0QW5pbWF0aW9u
c1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkobW9ub3RvbmljVGltZSwgZXZlbnRzKTsKLX0K
LQotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFkZChQYXNzT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiBhbmltKQotewotICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5hcHBlbmQo
YW5pbSk7Ci19Ci0KLUNDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OmdldEFjdGl2ZUFuaW1hdGlvbihpbnQgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246
OlRhcmdldFByb3BlcnR5IHByb3BlcnR5KQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3JvdXBJZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnRhcmdldFByb3BlcnR5KCkgPT0gcHJvcGVydHkpCi0gICAgICAgICAgICByZXR1cm4gbV9hY3Rp
dmVBbmltYXRpb25zW2ldLmdldCgpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Omhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0
Ci17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSAh
PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5y
dW5TdGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6OmlzQW5pbWF0aW5nUHJvcGVydHkoQ0NBY3RpdmVBbmltYXRp
b246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KSBjb25zdAotewotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRp
b246OkZpbmlzaGVkICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSAhPSBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFBy
b3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBtb25vdG9u
aWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYgZXZlbnRzKQotewotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRp
b246OldhaXRpbmdGb3JOZXh0VGljaykgewotICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25z
W2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbW9ub3RvbmljVGlt
ZSk7Ci0gICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFN0YXJ0VGltZShtb25v
dG9uaWNUaW1lKTsKLSAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoQ0NBbmltYXRpb25TdGFydGVk
RXZlbnQ6OmNyZWF0ZShtX2NsaWVudC0+aWQoKSkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGlu
Z0ZvclN0YXJ0VGltZShkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0
b3ImIGV2ZW50cykKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0
aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5y
dW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lICYmIG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+c3RhcnRUaW1lKCkgPD0gbW9ub3RvbmljVGltZSkgewotICAg
ICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1h
dGlvbjo6UnVubmluZywgbW9ub3RvbmljVGltZSk7Ci0gICAgICAgICAgICBldmVudHMuYXBwZW5k
KENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50OjpjcmVhdGUobV9jbGllbnQtPmlkKCkpKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0
YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91YmxlIG1vbm90b25p
Y1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiBldmVudHMpCi17Ci0gICAgLy8gRmlyc3Qg
Y29sbGVjdCBydW5uaW5nIHByb3BlcnRpZXMuCi0gICAgVGFyZ2V0UHJvcGVydGllcyBibG9ja2Vk
UHJvcGVydGllczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9u
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5T
dGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nIHx8IG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQpCi0gICAgICAg
ICAgICBibG9ja2VkUHJvcGVydGllcy5hZGQobV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQ
cm9wZXJ0eSgpKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZl
QW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25z
W2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZh
aWxhYmlsaXR5KSB7Ci0gICAgICAgICAgICAvLyBDb2xsZWN0IGFsbCBwcm9wZXJ0aWVzIGZvciBh
bmltYXRpb25zIHdpdGggdGhlIHNhbWUgZ3JvdXAgaWQgKHRoZXkgc2hvdWxkIGFsbCBhbHNvIGJl
IGluIHRoZSBsaXN0IG9mIGFuaW1hdGlvbnMpLgotICAgICAgICAgICAgVGFyZ2V0UHJvcGVydGll
cyBlbnF1ZXVlZFByb3BlcnRpZXM7Ci0gICAgICAgICAgICBlbnF1ZXVlZFByb3BlcnRpZXMuYWRk
KG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSk7Ci0gICAgICAgICAgICBm
b3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2op
IHsKLSAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09
IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkKLSAgICAgICAgICAgICAgICAgICAgZW5x
dWV1ZWRQcm9wZXJ0aWVzLmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnRhcmdldFByb3BlcnR5
KCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgaW50
ZXJzZWN0aW9uIG9mIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgYWZmZWN0ZWQgYnkgdGhlIGdyb3Vw
IGFuZCB0aGUgbGlzdCBvZiBjdXJyZW50bHkKLSAgICAgICAgICAgIC8vIGJsb2NrZWQgcHJvcGVy
dGllcyBpcyBudWxsLiBJbiBhbnkgY2FzZSwgdGhlIGdyb3VwJ3MgdGFyZ2V0IHByb3BlcnRpZXMg
bmVlZCB0byBiZSBhZGRlZCB0byB0aGUgbGlzdAotICAgICAgICAgICAgLy8gb2YgYmxvY2tlZCBw
cm9wZXJ0aWVzLgotICAgICAgICAgICAgYm9vbCBudWxsSW50ZXJzZWN0aW9uID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGZvciAoVGFyZ2V0UHJvcGVydGllczo6aXRlcmF0b3IgcEl0ZXIgPSBlbnF1ZXVl
ZFByb3BlcnRpZXMuYmVnaW4oKTsgcEl0ZXIgIT0gZW5xdWV1ZWRQcm9wZXJ0aWVzLmVuZCgpOyAr
K3BJdGVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFibG9ja2VkUHJvcGVydGllcy5hZGQoKnBJ
dGVyKS5zZWNvbmQpCi0gICAgICAgICAgICAgICAgICAgIG51bGxJbnRlcnNlY3Rpb24gPSBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgdGhlIGludGVyc2VjdGlvbiBp
cyBudWxsLCB0aGVuIHdlIGFyZSBmcmVlIHRvIHN0YXJ0IHRoZSBhbmltYXRpb25zIGluIHRoZSBn
cm91cC4KLSAgICAgICAgICAgIGlmIChudWxsSW50ZXJzZWN0aW9uKSB7Ci0gICAgICAgICAgICAg
ICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6
UnVubmluZywgbW9ub3RvbmljVGltZSk7Ci0gICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRp
b25zW2ldLT5zZXRTdGFydFRpbWUobW9ub3RvbmljVGltZSk7Ci0gICAgICAgICAgICAgICAgZXZl
bnRzLmFwcGVuZChDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDo6Y3JlYXRlKG1fY2xpZW50LT5pZCgp
KSk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgbV9hY3RpdmVB
bmltYXRpb25zLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gbV9hY3RpdmVBbmltYXRpb25zW2pdLT5ncm91cCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBtb25vdG9uaWNUaW1lKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+c2V0U3RhcnRUaW1lKG1v
bm90b25pY1RpbWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6cmVzb2x2ZUNvbmZsaWN0cyhkb3VibGUgbW9ub3RvbmljVGltZSkK
LXsKLSAgICAvLyBGaW5kIGFueSBhbmltYXRpb25zIHRoYXQgYXJlIGFuaW1hdGluZyB0aGUgc2Ft
ZSBwcm9wZXJ0eSBhbmQgcmVzb2x2ZSB0aGUKLSAgICAvLyBjb25maWN0LiBXZSBjb3VsZCBldmVu
dHVhbGx5IGJsZW5kLCBidXQgZm9yIG5vdyB3ZSdsbCBqdXN0IGFib3J0IHRoZQotICAgIC8vIHBy
ZXZpb3VzIGFuaW1hdGlvbiAod2hlcmUgJ3ByZXZpb3VzJyBtZWFuczogKDEpIGhhcyBhIHByaW9y
IHN0YXJ0IHRpbWUgb3IKLSAgICAvLyAoMikgaGFzIGFuIGVxdWFsIHN0YXJ0IHRpbWUsIGJ1dCB3
YXMgYWRkZWQgdG8gdGhlIHF1ZXVlIGVhcmxpZXIsIGkuZS4sCi0gICAgLy8gaGFzIGEgbG93ZXIg
aW5kZXggaW4gbV9hY3RpdmVBbmltYXRpb25zKS4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVB
bmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nKSB7
Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FjdGl2ZUFuaW1hdGlv
bnMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25z
W2pdLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nICYmIG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSBtX2FjdGl2ZUFuaW1hdGlvbnNbal0t
PnRhcmdldFByb3BlcnR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+c3RhcnRUaW1lKCkgPiBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnN0YXJ0VGlt
ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRS
dW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgbW9ub3RvbmljVGltZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQsIG1vbm90
b25pY1RpbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnB1cmdlRmlu
aXNoZWRBbmltYXRpb25zKENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiBldmVudHMpCi17Ci0gICAg
Ly8gRWFjaCBpdGVyYXRpb24sIG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkgZGVjcmVhc2VzIG9y
IGkgaW5jcmVtZW50cywKLSAgICAvLyBndWFyYW50ZWVpbmcgcHJvZ3Jlc3MgdG93YXJkcyBsb29w
IHRlcm1pbmF0aW9uLgotICAgIHNpemVfdCBpID0gMDsKLSAgICB3aGlsZSAoaSA8IG1fYWN0aXZl
QW5pbWF0aW9ucy5zaXplKCkpIHsKLSAgICAgICAgYm9vbCBhbGxBbmltc1dpdGhTYW1lSWRBcmVG
aW5pc2hlZCA9IGZhbHNlOwotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5pc0Zp
bmlzaGVkKCkpIHsKLSAgICAgICAgICAgIGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkID0g
dHJ1ZTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5p
bWF0aW9ucy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPmdyb3VwKCkgPT0gbV9hY3RpdmVBbmltYXRpb25zW2pdLT5ncm91cCgpICYmICFt
X2FjdGl2ZUFuaW1hdGlvbnNbal0tPmlzRmluaXNoZWQoKSkgewotICAgICAgICAgICAgICAgICAg
ICBhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkKSB7Ci0gICAgICAgICAg
ICBldmVudHMuYXBwZW5kKENDQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Y3JlYXRlKG1fY2xpZW50
LT5pZCgpLCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlkKCkpKTsKLSAgICAgICAgICAgIG1fZmlu
aXNoZWRBbmltYXRpb25zLmFwcGVuZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNpZ25hdHVyZSgp
KTsKLSAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgaSsrOwotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OnRpY2tBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1lKQotewot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NB
Y3RpdmVBbmltYXRpb246OlJ1bm5pbmcpIHsKLSAgICAgICAgICAgIGRvdWJsZSB0cmltbWVkID0g
bV9hY3RpdmVBbmltYXRpb25zW2ldLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbihtb25vdG9u
aWNUaW1lKTsKLQotICAgICAgICAgICAgc3dpdGNoIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRh
cmdldFByb3BlcnR5KCkpIHsKLQotICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VHJhbnNmb3JtOiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZSogdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgPSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmN1
cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKLSAgICAgICAgICAgICAgICBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS0+
Z2V0VmFsdWUodHJpbW1lZCwgbV9jbGllbnQtPmJvdW5kcygpKTsKLSAgICAgICAgICAgICAgICBp
ZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5pc0ZpbmlzaGVkQXQobW9ub3RvbmljVGltZSkpCi0g
ICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NB
Y3RpdmVBbmltYXRpb246OkZpbmlzaGVkLCBtb25vdG9uaWNUaW1lKTsKLQotICAgICAgICAgICAg
ICAgIG1fY2xpZW50LT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eTogewotICAgICAgICAgICAgICAgIGNvbnN0IENDRmxvYXRBbmltYXRpb25DdXJ2ZSog
ZmxvYXRBbmltYXRpb25DdXJ2ZSA9IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Y3VydmUoKS0+dG9G
bG9hdEFuaW1hdGlvbkN1cnZlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgb3BhY2l0
eSA9IGZsb2F0QW5pbWF0aW9uQ3VydmUtPmdldFZhbHVlKHRyaW1tZWQpOwotICAgICAgICAgICAg
ICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlzRmluaXNoZWRBdChtb25vdG9uaWNUaW1l
KSkKLSAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0
ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQsIG1vbm90b25pY1RpbWUpOwotCi0gICAgICAg
ICAgICAgICAgbV9jbGllbnQtPnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0gLy8gc3dpdGNoCi0gICAgICAg
IH0gLy8gaWYgcnVubmluZwotICAgIH0gLy8gZm9yIGVhY2ggYW5pbWF0aW9uCi19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5Mzk2YmQ5
NTkxZmI3NDMyNWQ4MjViNmFmOWFhYTQxNWFhZDA1NzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbF9oCi0jZGVmaW5lIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bF9oCi0KLSNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgImNjL0ND
QW5pbWF0aW9uQ3VydmUuaCIKLSNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgotCi0j
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOwotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIFRyYW5zZm9y
bWF0aW9uTWF0cml4OwotY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uczsKLQotY2xhc3MgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQoKSB7IH0KLQotICAgIHZpcnR1YWwg
aW50IGlkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgPSAw
OwotICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgPSAwOwotfTsKLQot
Y2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsIHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwpOwotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY3JlYXRlKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCopOwotCi0gICAgdmlydHVhbCB+Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKCk7Ci0KLSAgICB2b2lkIGFuaW1hdGUoZG91Ymxl
IG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJik7Ci0KLSAgICB2b2lkIGFk
ZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPik7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBh
Y3RpdmUgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBncm91cCwgYW5pbWF0aW5nIHRoZSBnaXZlbiBw
cm9wZXJ0eSBpZiBzdWNoIGFuCi0gICAgLy8gYW5pbWF0aW9uIGV4aXN0cy4KLSAgICBDQ0FjdGl2
ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VGFyZ2V0UHJvcGVydHkpOwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFy
ZSBhbnkgYW5pbWF0aW9ucyB0aGF0IGFyZSBuZWl0aGVyIGZpbmlzaGVkIG5vciBhYm9ydGVkLgot
ICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3Q7Ci0KLSAgICBib29sIGlzQW5pbWF0
aW5nUHJvcGVydHkoQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7Ci0K
LSAgICAvLyBUaGUgYW5pbWF0b3IgaXMgb3duZWQgYnkgdGhlIGxheWVyLgotICAgIGV4cGxpY2l0
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxDbGllbnQqKTsKLQotICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRU
aWNrKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYpOwotICAg
IHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbW9ub3Rvbmlj
VGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImKTsKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9u
c1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yJik7Ci0gICAgdm9pZCByZXNvbHZlQ29uZmxpY3RzKGRvdWJsZSBt
b25vdG9uaWNUaW1lKTsKLSAgICB2b2lkIHB1cmdlRmluaXNoZWRBbmltYXRpb25zKENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yJik7Ci0KLSAgICB2b2lkIHRpY2tBbmltYXRpb25zKGRvdWJsZSBtb25v
dG9uaWNUaW1lKTsKLQotICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCog
bV9jbGllbnQ7Ci0gICAgVmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gPiBtX2FjdGl2
ZUFuaW1hdGlvbnM7Ci0gICAgVmVjdG9yPENDQWN0aXZlQW5pbWF0aW9uOjpBbmltYXRpb25TaWdu
YXR1cmU+IG1fZmluaXNoZWRBbmltYXRpb25zOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsX2gKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkRlbGVnYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaAppbmRleCBhNzY0Y2MzN2JkY2M3
ZWUzZTg5YTdlODcyYmVkMDI1ZTYyY2IxZGE4Li40Yzg4YTkyMTFlYzQwNzNiYTdhNDk2MDM0N2Vj
MDFmYmNjODNkZDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdh
dGUuaApAQCAtMzEsNyArMzEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDQ0xheWVy
QW5pbWF0aW9uRGVsZWdhdGUgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmlt
YXRpb25TdGFydGVkKGRvdWJsZSB0aW1lKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFu
aW1hdGlvbkZpbmlzaGVkKGludCBhbmltYXRpb25JZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDM0ZDYwMDgwMmFlNWZiMTA0
MWMwMzJlZTEyMjYwODgxMmMxMDZlNDQuLmQ3ZTJiOGEwZDRhYmM2YzA1NmUwZTM4YjhhNDRhNDZh
OTE1OTRjZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNp
bmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgiCiAjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCi0jaW5jbHVkZSAiY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNv
cnRlci5oIgogI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgogI2luY2x1ZGUgImNjL0NDU29s
aWRDb2xvckRyYXdRdWFkLmgiCkBAIC03MCw3ICs2OSw3IEBAIENDTGF5ZXJJbXBsOjpDQ0xheWVy
SW1wbChpbnQgaWQpCiAgICAgLCBtX2RlYnVnQm9yZGVyV2lkdGgoMCkKICAgICAsIG1fZHJhd1Ry
YW5zZm9ybUlzQW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9zY3JlZW5TcGFjZVRyYW5zZm9ybUlz
QW5pbWF0aW5nKGZhbHNlKQotICAgICwgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUodGhpcykpCisgICAgLCBtX2xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKHRoaXMp
KQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiB9CkBAIC0zMTAsNiAr
MzA5LDE2IEBAIHZvaWQgQ0NMYXllckltcGw6OnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0
cmVlKCkKICAgICAgICAgbV9jaGlsZHJlbltpXS0+cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1
YnRyZWUoKTsKIH0KIAordm9pZCBDQ0xheWVySW1wbDo6c2V0T3BhY2l0eUZyb21BbmltYXRpb24o
ZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBzZXRPcGFjaXR5KG9wYWNpdHkpOworfQorCit2b2lkIEND
TGF5ZXJJbXBsOjpzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgc2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7Cit9CisK
IHZvaWQgQ0NMYXllckltcGw6OnNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBib3VuZHMpCiB7CiAg
ICAgaWYgKG1fYm91bmRzID09IGJvdW5kcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDgxOTc1
OGY2MjA0MzljZjlmYjZhYzA5ZWJiNTA2NjI0NDczMjY2YTEuLjZmMDJlZjgyNzQyNTg2Yjg0NTQz
MTE1ZWVmZDA3N2JmZDY0NGRlOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMzMsNyArMzMs
NyBAQAogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNs
dWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCiAjaW5jbHVkZSAiY2MvQ0NT
aGFyZWRRdWFkU3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00OCwyOCArNDgs
MjMgQEAgY2xhc3MgQ0NRdWFkQ3VsbGVyOwogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNzIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTsKIAotY2xhc3MgQ0NMYXllckltcGwgOiBwdWJsaWMgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IHsKK2NsYXNzIENDTGF5ZXJJbXBsIDogcHVi
bGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc093blB0cjxDQ0xheWVySW1wbD4gY3JlYXRlKGludCBpZCkKICAgICB7CiAgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllckltcGwoaWQpKTsKICAgICB9CiAKLSAgICAvLyBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgaW1wbGVtZW50YXRpb24uCi0gICAg
dmlydHVhbCBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7IH0KKyAgICB2aXJ0dWFs
IH5DQ0xheWVySW1wbCgpOwogCi0gICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOwor
ICAgIC8vIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGltcGxlbWVudGF0aW9uLgor
ICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcklkOyB9CisgICAgdmly
dHVhbCB2b2lkIHNldE9wYWNpdHlGcm9tQW5pbWF0aW9uKGZsb2F0KTsKICAgICB2aXJ0dWFsIGZs
b2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KLSAgICBib29sIG9wYWNp
dHlJc0FuaW1hdGluZygpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zv
cm1Gcm9tQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgdmlydHVh
bCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV90cmFuc2Zvcm07IH0KLSAgICBib29sIHRyYW5zZm9ybUlzQW5pbWF0aW5nKCkgY29uc3Q7Ci0K
ICAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91
bmRzOyB9CiAKLSAgICB2aXJ0dWFsIH5DQ0xheWVySW1wbCgpOwotCiAgICAgLy8gVHJlZSBzdHJ1
Y3R1cmUuCiAgICAgQ0NMYXllckltcGwqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50
OyB9CiAgICAgY29uc3QgVmVjdG9yPE93blB0cjxDQ0xheWVySW1wbD4gPiYgY2hpbGRyZW4oKSBj
b25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CkBAIC0xMjQsNiArMTE5LDkgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0T3BhcXVlKGJvb2wpOwogICAgIGJvb2wgb3BhcXVlKCkgY29uc3QgeyByZXR1
cm4gbV9vcGFxdWU7IH0KIAorICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7CisgICAgYm9vbCBv
cGFjaXR5SXNBbmltYXRpbmcoKSBjb25zdDsKKwogICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3Qg
RmxvYXRQb2ludCYpOwogICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9wb3NpdGlvbjsgfQogCkBAIC0yMDgsNiArMjA2LDkgQEAgcHVibGljOgogICAgIC8v
IFJldHVybnMgdGhlIHJlY3QgY29udGFpbnRhaW5pbmcgdGhpcyBsYXllciBpbiB0aGUgY3VycmVu
dCB2aWV3J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgY29uc3QgSW50UmVjdCBnZXREcmF3UmVj
dCgpIGNvbnN0OwogCisgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmKTsKKyAgICBib29sIHRyYW5zZm9ybUlzQW5pbWF0aW5nKCkgY29uc3Q7CisKICAgICBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fZHJhd1RyYW5zZm9ybTsgfQogICAgIHZvaWQgc2V0RHJhd1RyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fZHJhd1RyYW5zZm9ybSA9IG1hdHJpeDsgfQog
ICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzY3JlZW5TcGFjZVRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm07IH0KQEAgLTIyOCw3ICsyMjksNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBsYXllclByb3BlcnR5Q2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQ7IH0KICAgICB2b2lkIHJlc2V0QWxsQ2hhbmdlVHJhY2tp
bmdGb3JTdWJ0cmVlKCk7CiAKLSAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGxh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fbGF5ZXJBbmltYXRpb25Db250cm9s
bGVyLmdldCgpOyB9CisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGxheWVyQW5pbWF0
aW9uQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmdldCgp
OyB9CiAKICAgICB2aXJ0dWFsIFJlZ2lvbiBvcGFxdWVDb250ZW50c1JlZ2lvbigpIGNvbnN0IHsg
cmV0dXJuIFJlZ2lvbigpOyB9OwogCkBAIC0zNTgsNyArMzU5LDcgQEAgcHJpdmF0ZToKICAgICBG
bG9hdFJlY3QgbV91cGRhdGVSZWN0OwogCiAgICAgLy8gTWFuYWdlcyBhbmltYXRpb25zIGZvciB0
aGlzIGxheWVyLgotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IG1f
bGF5ZXJBbmltYXRpb25Db250cm9sbGVyOworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcj4gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CiB9OwogCiB2b2lkIHNvcnRMYXll
cnMoVmVjdG9yPENDTGF5ZXJJbXBsKj46Oml0ZXJhdG9yIGZpcnN0LCBWZWN0b3I8Q0NMYXllcklt
cGwqPjo6aXRlcmF0b3IgZW5kLCBDQ0xheWVyU29ydGVyKik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcAppbmRleCAwMTc4MjBhN2M3MGUxYjkzZmM2MmE0ZGY0NzY2NDUyODY5NzAzNWEx
Li4yNWM0MTUwZDllMGYzMDE3MTdkNmQ0MzQ1OTFjYmFhMjg5OGNkMTZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJSZWdpb24u
aCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5o
IgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9u
LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgpAQCAtNjQsNiArNjUsNyBA
QCBQYXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGUoQ0NM
YXllclRyZWVIb3N0Q2xpZW50KiBjbGllbgogQ0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhv
c3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRp
bmdzKQogICAgIDogbV9jb21wb3NpdG9ySWRlbnRpZmllcigtMSkKICAgICAsIG1fYW5pbWF0aW5n
KGZhbHNlKQorICAgICwgbV9uZWVkc0FuaW1hdGVMYXllcnMoZmFsc2UpCiAgICAgLCBtX2NsaWVu
dChjbGllbnQpCiAgICAgLCBtX2ZyYW1lTnVtYmVyKDApCiAgICAgLCBtX2xheWVyUmVuZGVyZXJJ
bml0aWFsaXplZChmYWxzZSkKQEAgLTE4MSw2ICsxODMsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6dXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgZnJhbWVCZWdpblRpbWUpCiB7CiAgICAgbV9hbmlt
YXRpbmcgPSB0cnVlOwogICAgIG1fY2xpZW50LT51cGRhdGVBbmltYXRpb25zKGZyYW1lQmVnaW5U
aW1lKTsKKyAgICBhbmltYXRlTGF5ZXJzKGZyYW1lQmVnaW5UaW1lKTsKICAgICBtX2FuaW1hdGlu
ZyA9IGZhbHNlOwogfQogCkBAIC0yMDksOSArMjEyLDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
OjpmaW5pc2hDb21taXRPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwp
CiAKICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9u
aXplVHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5yZWxlYXNlUm9vdExheWVyKCkpKTsKIAot
ICAgIC8vIFdlIG1heSBoYXZlIGFkZGVkIGFuIGFuaW1hdGlvbiBkdXJpbmcgdGhlIHRyZWUgc3lu
Yy4gVGhpcyB3aWxsIGNhdXNlIGhvc3RJbXBsIHRvIHZpc2l0IGl0cyBjb250cm9sbGVycy4KLSAg
ICBpZiAocm9vdExheWVyKCkpCisgICAgLy8gV2UgbWF5IGhhdmUgYWRkZWQgYW4gYW5pbWF0aW9u
IGR1cmluZyB0aGUgdHJlZSBzeW5jLiBUaGlzIHdpbGwgY2F1c2UgYm90aCBsYXllciB0cmVlIGhv
c3RzCisgICAgLy8gdG8gdmlzaXQgdGhlaXIgY29udHJvbGxlcnMuCisgICAgaWYgKHJvb3RMYXll
cigpKSB7CiAgICAgICAgIGhvc3RJbXBsLT5zZXROZWVkc0FuaW1hdGVMYXllcnMoKTsKKyAgICAg
ICAgbV9uZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVlOworICAgIH0KIAogICAgIGhvc3RJbXBsLT5z
ZXRTb3VyY2VGcmFtZU51bWJlcihmcmFtZU51bWJlcigpKTsKICAgICBob3N0SW1wbC0+c2V0Vmll
d3BvcnRTaXplKHZpZXdwb3J0U2l6ZSgpKTsKQEAgLTM4Niw5ICszOTIsMTIgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhv
c3RJbXBsKiBob3N0SW0KIAogICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9u
aXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJlbGVhc2VSb290
TGF5ZXIoKSkpOwogCi0gICAgLy8gV2UgbWF5IGhhdmUgYWRkZWQgYW4gYW5pbWF0aW9uIGR1cmlu
ZyB0aGUgdHJlZSBzeW5jLiBUaGlzIHdpbGwgY2F1c2UgaG9zdEltcGwgdG8gdmlzaXQgaXRzIGNv
bnRyb2xsZXJzLgotICAgIGlmIChyb290TGF5ZXIoKSkKKyAgICAvLyBXZSBtYXkgaGF2ZSBhZGRl
ZCBhbiBhbmltYXRpb24gZHVyaW5nIHRoZSB0cmVlIHN5bmMuIFRoaXMgd2lsbCBjYXVzZSBib3Ro
IGxheWVyIHRyZWUgaG9zdHMKKyAgICAvLyB0byB2aXNpdCB0aGVpciBjb250cm9sbGVycy4KKyAg
ICBpZiAocm9vdExheWVyKCkpIHsKICAgICAgICAgaG9zdEltcGwtPnNldE5lZWRzQW5pbWF0ZUxh
eWVycygpOworICAgICAgICBtX25lZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7CisgICAgfQogfQog
CiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50
U2l6ZSYgdGFyZ2V0UG9zaXRpb24sIGJvb2wgdXNlQW5jaG9yLCBmbG9hdCBzY2FsZSwgZG91Ymxl
IGR1cmF0aW9uU2VjKQpAQCAtNjQyLDYgKzY1MSwzMyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
ZGVsZXRlVGV4dHVyZUFmdGVyQ29tbWl0KFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleHR1
cgogICAgIG1fZGVsZXRlVGV4dHVyZUFmdGVyQ29tbWl0TGlzdC5hcHBlbmQodGV4dHVyZSk7CiB9
CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlTGF5ZXJzKGRvdWJsZSBtb25vdG9uaWNU
aW1lKQoreworICAgIGlmICghbV9zZXR0aW5ncy50aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQgfHwg
IW1fbmVlZHNBbmltYXRlTGF5ZXJzIHx8ICFtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMiLCB0
aGlzLCAwKTsKKyAgICBtX25lZWRzQW5pbWF0ZUxheWVycyA9IGFuaW1hdGVMYXllcnNSZWN1cnNp
dmUobV9yb290TGF5ZXIuZ2V0KCksIG1vbm90b25pY1RpbWUpOworfQorCitib29sIENDTGF5ZXJU
cmVlSG9zdDo6YW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBjdXJyZW50LCBk
b3VibGUgbW9ub3RvbmljVGltZSkKK3sKKyAgICBib29sIHN1YnRyZWVOZWVkc0FuaW1hdGVMYXll
cnMgPSBmYWxzZTsKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciogY3VycmVudENvbnRy
b2xsZXIgPSBjdXJyZW50LT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBjdXJyZW50
Q29udHJvbGxlci0+YW5pbWF0ZShtb25vdG9uaWNUaW1lLCAwKTsKKworICAgIC8vIElmIHRoZSBj
dXJyZW50IGNvbnRyb2xsZXIgc3RpbGwgaGFzIGFuIGFjdGl2ZSBhbmltYXRpb24sIHdlIG11c3Qg
Y29udGludWUgYW5pbWF0aW5nIGxheWVycy4KKyAgICBpZiAoY3VycmVudENvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKQorICAgICAgICAgc3VidHJlZU5lZWRzQW5pbWF0ZUxheWVycyA9
IHRydWU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnJlbnQtPmNoaWxkcmVuKCku
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoY3VycmVu
dC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgbW9ub3RvbmljVGltZSkpCisgICAgICAgICAgICBzdWJ0
cmVlTmVlZHNBbmltYXRlTGF5ZXJzID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gc3VidHJl
ZU5lZWRzQW5pbWF0ZUxheWVyczsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldEFuaW1h
dGlvbkV2ZW50c1JlY3Vyc2l2ZShjb25zdCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYgZXZlbnRz
LCBMYXllckNocm9taXVtKiBsYXllciwgZG91YmxlIHdhbGxDbG9ja1RpbWUpCiB7CiAgICAgZm9y
IChzaXplX3QgZXZlbnRJbmRleCA9IDA7IGV2ZW50SW5kZXggPCBldmVudHMuc2l6ZSgpOyArK2V2
ZW50SW5kZXgpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggODlmMWJlMzA3ZWRm
YzkxNmQ2MDllMDg1YTM1NTIyNjc3NjIzZWM4Ny4uZjc0OWE2YjAzZDE3ZjQ0ZWQ2MTk4NGZlOTgw
MmFhMDEwZDhlNjFiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTIyNSwxMSAr
MjI1LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXNlcnZlVGV4dHVyZXMoKTsKICAgICB2b2lk
IGNsZWFyUGVuZGluZ1VwZGF0ZSgpOwogCisgICAgdm9pZCBhbmltYXRlTGF5ZXJzKGRvdWJsZSBt
b25vdG9uaWNUaW1lKTsKKyAgICBib29sIGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDaHJv
bWl1bSogY3VycmVudCwgZG91YmxlIG1vbm90b25pY1RpbWUpOwogICAgIHZvaWQgc2V0QW5pbWF0
aW9uRXZlbnRzUmVjdXJzaXZlKGNvbnN0IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiwgTGF5ZXJD
aHJvbWl1bSosIGRvdWJsZSB3YWxsQ2xvY2tUaW1lKTsKIAogICAgIGludCBtX2NvbXBvc2l0b3JJ
ZGVudGlmaWVyOwogCiAgICAgYm9vbCBtX2FuaW1hdGluZzsKKyAgICBib29sIG1fbmVlZHNBbmlt
YXRlTGF5ZXJzOwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBtX2NsaWVudDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggZWU2YmY5OGE1MjM2
ZDdhYjFkZDA4YmJhZjczZWQ1YzNkYTYzYTZjOS4uOTEyNGIwNzY1OTAxMzFmZjhjNmFmNDgxNGYy
MTZmMTdkMTI0NzZjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
Y3BwCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgi
CiAjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNv
cnRlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBlYmUw
NmY1MTBlOTZkNWQwN2Q3ZDcwZjdlNjNjNTkzNjQ1YTY0ZDQ0Li40Y2U2YWY0MGNlYzk5YmRiZDY3
ZmNiODUxNjc5OTI0M2JkZDZiZjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcApAQCAtMzEwLDE1ICszMTAsMTUgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpj
YWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzLCBDQ0xheWUKICAg
ICBvY2NsdXNpb25UcmFja2VyLm92ZXJkcmF3TWV0cmljcygpLnJlY29yZE1ldHJpY3ModGhpcyk7
CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShD
Q0xheWVySW1wbCogY3VycmVudCwgZG91YmxlIG1vbm90b25pY1RpbWUsIGRvdWJsZSB3YWxsQ2xv
Y2tUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYgZXZlbnRzLCBib29sJiBkaWRBbmltYXRl
LCBib29sJiBuZWVkc0FuaW1hdGVMYXllcnMpCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFu
aW1hdGVMYXllcnNSZWN1cnNpdmUoQ0NMYXllckltcGwqIGN1cnJlbnQsIGRvdWJsZSBtb25vdG9u
aWNUaW1lLCBkb3VibGUgd2FsbENsb2NrVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IqIGV2
ZW50cywgYm9vbCYgZGlkQW5pbWF0ZSwgYm9vbCYgbmVlZHNBbmltYXRlTGF5ZXJzKQogewogICAg
IGJvb2wgc3VidHJlZU5lZWRzQW5pbWF0ZUxheWVycyA9IGZhbHNlOwogCi0gICAgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjdXJyZW50Q29udHJvbGxlciA9IGN1cnJlbnQtPmxheWVy
QW5pbWF0aW9uQ29udHJvbGxlcigpOworICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKiBj
dXJyZW50Q29udHJvbGxlciA9IGN1cnJlbnQtPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOwog
CiAgICAgYm9vbCBoYWRBY3RpdmVBbmltYXRpb24gPSBjdXJyZW50Q29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCk7CiAgICAgY3VycmVudENvbnRyb2xsZXItPmFuaW1hdGUobW9ub3Rvbmlj
VGltZSwgZXZlbnRzKTsKLSAgICBib29sIHN0YXJ0ZWRBbmltYXRpb24gPSBldmVudHMuc2l6ZSgp
ID4gMDsKKyAgICBib29sIHN0YXJ0ZWRBbmltYXRpb24gPSBldmVudHMtPnNpemUoKSA+IDA7CiAK
ICAgICAvLyBXZSBhbmltYXRlZCBpZiB3ZSBlaXRoZXIgdGlja2VkIGEgcnVubmluZyBhbmltYXRp
b24sIG9yIHN0YXJ0ZWQgYSBuZXcgYW5pbWF0aW9uLgogICAgIGlmIChoYWRBY3RpdmVBbmltYXRp
b24gfHwgc3RhcnRlZEFuaW1hdGlvbikKQEAgLTc3OCw3ICs3NzgsNyBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMoZG91YmxlIG1vbm90b25pY1RpbWUsIGRvdWJsZSB3
YWxsQ2xvY2tUaQogICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFk
b3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwogCiAgICAgYm9vbCBkaWRBbmlt
YXRlID0gZmFsc2U7Ci0gICAgYW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShtX3Jvb3RMYXllckltcGwu
Z2V0KCksIG1vbm90b25pY1RpbWUsIHdhbGxDbG9ja1RpbWUsICpldmVudHMsIGRpZEFuaW1hdGUs
IG1fbmVlZHNBbmltYXRlTGF5ZXJzKTsKKyAgICBhbmltYXRlTGF5ZXJzUmVjdXJzaXZlKG1fcm9v
dExheWVySW1wbC5nZXQoKSwgbW9ub3RvbmljVGltZSwgd2FsbENsb2NrVGltZSwgZXZlbnRzLmdl
dCgpLCBkaWRBbmltYXRlLCBtX25lZWRzQW5pbWF0ZUxheWVycyk7CiAKICAgICBpZiAoIWV2ZW50
cy0+aXNFbXB0eSgpKQogICAgICAgICBtX2NsaWVudC0+cG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFp
blRocmVhZE9uSW1wbFRocmVhZChldmVudHMucmVsZWFzZSgpLCB3YWxsQ2xvY2tUaW1lKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCAzYmI3ZDNkZTE0MTM2ZWRiYmM5
ZjE5ZWRmODUwNDcyNDNkZmJiYWEzLi44MjQzNWZjZTQwYzdkNjFiNzkxZjc1OGUzOTM4OWE3NTMz
MmEwYzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0xNjEsNyAr
MTYxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CiAg
ICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xh
eWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgdm9p
ZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYsIENDTGF5ZXJMaXN0JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKLSAgICB2b2lkIGFuaW1hdGVMYXllcnNSZWN1cnNpdmUo
Q0NMYXllckltcGwqLCBkb3VibGUgbW9ub3RvbmljVGltZSwgZG91YmxlIHdhbGxDbG9ja1RpbWUs
IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiwgYm9vbCYgZGlkQW5pbWF0ZSwgYm9vbCYgbmVlZHNB
bmltYXRlTGF5ZXJzKTsKKyAgICB2b2lkIGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoQ0NMYXllcklt
cGwqLCBkb3VibGUgbW9ub3RvbmljVGltZSwgZG91YmxlIHdhbGxDbG9ja1RpbWUsIENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yKiwgYm9vbCYgZGlkQW5pbWF0ZSwgYm9vbCYgbmVlZHNBbmltYXRlTGF5
ZXJzKTsKICAgICBJbnRTaXplIGNvbnRlbnRTaXplKCkgY29uc3Q7CiAgICAgdm9pZCBzZW5kRGlk
TG9zZUNvbnRleHRSZWN1cnNpdmUoQ0NMYXllckltcGwqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5LmNwcAppbmRleCAzMjdkOWJlMGIxMjBmYjllZmRlZmY4MDUzMTg4MDUzMzA2YWJkYTRiLi5m
Yzc3NWMzZWU4MjVlMTcxYmVmNGFlYjI1NzljNDdiOTQ5YzM2MjU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZFByb3h5LmNwcApAQCAtMzkzLDggKzM5Myw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2No
ZWR1bGVkQWN0aW9uQmVnaW5GcmFtZSgpCiB7CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1Ro
cmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25CZWdpbkZyYW1lIik7CiAgICAgQVNTRVJUKCFtX3Bl
bmRpbmdCZWdpbkZyYW1lUmVxdWVzdCk7Ci0gICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3Qg
PSBhZG9wdFB0cihuZXcgQmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlKCkpOwotICAgIG1fcGVuZGlu
Z0JlZ2luRnJhbWVSZXF1ZXN0LT5mcmFtZUJlZ2luVGltZSA9IDA7CisgICAgbV9wZW5kaW5nQmVn
aW5GcmFtZVJlcXVlc3QgPSBhZG9wdFB0cihuZXcgQmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlKG1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKSk7CiAgICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJl
cXVlc3QtPnNjcm9sbEluZm8gPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVs
dGFzKCk7CiAKICAgICBtX21haW5UaHJlYWRQcm94eS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRU
YXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5LmgKaW5kZXggOWU1MjRhNzYzZTI4NTBmZDIwOWMxM2UzNTI2MTJlYzVjYTMwNDllMS4uYWFm
MmY3MmJlMjI4MzdmNmViMDQ1MjdkMmFkNTI3ZTFiYzdjNjI5YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
UHJveHkuaApAQCAtOTIsNyArOTIsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gU2V0IG9uIGltcGwg
dGhyZWFkLCByZWFkIG9uIG1haW4gdGhyZWFkLgogICAgIHN0cnVjdCBCZWdpbkZyYW1lQW5kQ29t
bWl0U3RhdGUgewotICAgICAgICBCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGUoKSA6IGZyYW1lQmVn
aW5UaW1lKDApIHsgfQorICAgICAgICBCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGUoZG91YmxlIGZy
YW1lQmVnaW5UaW1lKSA6IGZyYW1lQmVnaW5UaW1lKGZyYW1lQmVnaW5UaW1lKSB7IH0KICAgICAg
ICAgZG91YmxlIGZyYW1lQmVnaW5UaW1lOwogICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2Fs
ZVNldD4gc2Nyb2xsSW5mbzsKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5k
ZXggNmE2MzQxNmI2OWRiMTI2YTIwOTkzZWZlMmM1Y2UxMGRjZGYwNTUxYi4uZTI2N2E1YmQzZGI5
M2NkYjJjN2Y4OTJjMjE2Yjg5NzJmMzMzN2YyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCkBAIC02Nyw3ICs2Nyw2IEBACiAgICAgICAgICAgICAndGVzdHMvQ0NEZWxheUJhc2VkVGlt
ZVNvdXJjZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xs
ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2
ZVRlc3QuY3BwJywKLSAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3Bw
CmluZGV4IGM5MjQwZTMxZmNjNmI3ZjAwYzFiNjkzN2ZhNzY5MWJiMDNiNDVkYzMuLmMyMmU0MzIy
YjkxNzg0ZjgyMWFjYzIyZDdkNjE2MzZkZTU2NWE4OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAKQEAgLTEwNiwx
MiArMTA2LDEyIEBAIGZsb2F0IEZha2VGbG9hdFRyYW5zaXRpb246OmdldFZhbHVlKGRvdWJsZSB0
aW1lKSBjb25zdAogICAgIHJldHVybiAoMSAtIHRpbWUpICogbV9mcm9tICsgdGltZSAqIG1fdG87
CiB9CiAKLUZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50OjpGYWtlTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCgpCitGYWtlTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyQ2xpZW50OjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KCkKICAgICA6IG1f
b3BhY2l0eSgwKQogewogfQogCi1GYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVu
dDo6fkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KCkKK0Zha2VMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJDbGllbnQ6On5GYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xp
ZW50KCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0FuaW1hdGlvblRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NB
bmltYXRpb25UZXN0Q29tbW9uLmgKaW5kZXggZDEzZTc0Y2ExNzFlZTkzOWJjNjEwZjkzNGIwMzM4
NmQxNjc2N2RjZS4uMTQ2NDE0ZTMwMWJhNDg3MTZmYTQ3MDg0ZTNlMTQyYTE4YmU0ZTYzZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21t
b24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENv
bW1vbi5oCkBAIC0yNiwxMiArMjYsMTEgQEAKICNkZWZpbmUgQ0NBbmltYXRpb25UZXN0Q29tbW9u
X2gKIAogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKLSNpbmNsdWRlICJjYy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIExheWVy
Q2hyb21pdW07CiB9CiAKQEAgLTc3LDE2ICs3NiwxNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1f
dG87CiB9OwogCi1jbGFzcyBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCA6
IHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgewor
Y2xhc3MgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCA6IHB1YmxpYyBXZWJDb3Jl
OjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgRmFrZUxh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQoKTsKLSAgICB2aXJ0dWFsIH5GYWtlTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCgpOworICAgIEZha2VMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJDbGllbnQoKTsKKyAgICB2aXJ0dWFsIH5GYWtlTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyQ2xpZW50KCk7CiAKKyAgICAvLyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVu
dCBpbXBsZW1lbnRhdGlvbgogICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5RnJvbUFuaW1hdGlvbihmbG9hdCBvcGFjaXR5
KSB7IG1fb3BhY2l0eSA9IG9wYWNpdHk7IH0KICAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBj
b25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShm
bG9hdCBvcGFjaXR5KSB7IG1fb3BhY2l0eSA9IG9wYWNpdHk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VHJhbnNmb3JtRnJvbUFuaW1hdGlvbihjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9CiAgICAgdmlydHVh
bCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNv
bnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90cmFuc2Zv
cm0gPSB0cmFuc2Zvcm07IH0KICAgICB2aXJ0dWFsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZTFhZWNjYzUzOWE1ZDUxZGZmMThhMmJlN2M0MmVlYmExNDU3ZWZiZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMzk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5oIgotI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUu
aCIKLSNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgotI2luY2x1ZGUgPGdtb2NrL2dt
b2NrLmg+Ci0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3Rz
OwotCi1uYW1lc3BhY2UgewotCi1QYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVB
Y3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgaW50IGlk
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJvcGVydHkpCi17Ci0gICAgcmV0
dXJuIENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUsIDAsIGlkLCBwcm9wZXJ0eSk7Ci19
Ci0KLS8vIFRlc3RzIHRoYXQgdHJhbnNpdGlvbmluZyBvcGFjaXR5IGZyb20gMCB0byAxIHdvcmtz
IGFzIGV4cGVjdGVkLgotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBU
cml2aWFsVHJhbnNpdGlvbikKLXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+
IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtl
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIE93blB0cjxD
Q0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKLQotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5
KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX0VR
KDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKLX0KLQotLy8gVGVzdHMgdGhhdCB0d28gcXVldWVkIGFuaW1hdGlv
bnMgYWZmZWN0aW5nIHRoZSBzYW1lIHByb3BlcnR5IHJ1biBpbiBzZXF1ZW5jZS4KLVRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlhbFF1ZXVpbmcpCi17Ci0gICAg
T3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yKSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bD4gY29udHJvbGxlcigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpj
cmVhdGUoJmR1bW15KSk7Ci0KLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0
aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwg
MiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkp
OwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX0VRKDAu
NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKLX0KLQotLy8gVGVzdHMgaW50ZXJydXB0aW5nIGEgdHJhbnNpdGlv
biB3aXRoIGFub3RoZXIgdHJhbnNpdGlvbi4KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsVGVzdCwgSW50ZXJydXB0KQotewotICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1Zl
Y3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwotICAg
IEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0gICAgICAgIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotICAgIGNvbnRy
b2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFj
aXR5KCkpOwotCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41Zikp
LCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIHRvQWRkLT5zZXRSdW5TdGF0
ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrLCAwKTsKLSAgICBjb250cm9s
bGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLQotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41
LCAqZXZlbnRzKTsgLy8gc2Vjb25kIGFuaW0gc3RhcnRzIE5PVy4KLSAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDEsIGR1bW15
Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjUsICpldmVudHMpOwotICAg
IEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIEVYUEVDVF9GQUxTRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci19Ci0KLS8vIFRlc3RzIHNjaGVkdWxpbmcg
dHdvIGFuaW1hdGlvbnMgdG8gcnVuIHRvZ2V0aGVyIHdoZW4gb25seSBvbmUgcHJvcGVydHkgaXMg
ZnJlZS4KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVU
b2dldGhlcldoZW5BUHJvcGVydHlJc0Jsb2NrZWQpCi17Ci0gICAgT3duUHRyPENDQW5pbWF0aW9u
RXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9y
KSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7Ci0g
ICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKLSAg
ICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0K
LSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBG
YWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zv
cm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRy
KG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpU
cmFuc2Zvcm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMiwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKLQotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7
Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MSwgKmV2ZW50cyk7Ci0gICAgLy8gU2hvdWxkIG5vdCBoYXZlIHN0YXJ0ZWQgdGhlIGZsb2F0IHRy
YW5zaXRpb24geWV0LgotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICAvLyBUaGUg
dGhlIGZsb2F0IGFuaW1hdGlvbiBzaG91bGQgaGF2ZSBzdGFydGVkIGF0IHRpbWUgMSBhbmQgc2hv
dWxkIGJlIGRvbmUuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKLSAgICBF
WFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotfQotCi0vLyBUZXN0cyBzY2hlZHVsaW5nIHR3byBh
bmltYXRpb25zIHRvIHJ1biB0b2dldGhlciB3aXRoIGRpZmZlcmVudCBsZW5ndGhzIGFuZCBhbm90
aGVyCi0vLyBhbmltYXRpb24gcXVldWVkIHRvIHN0YXJ0IHdoZW4gdGhlIHNob3J0ZXIgYW5pbWF0
aW9uIGZpbmlzaGVzIChzaG91bGQgd2FpdAotLy8gZm9yIGJvdGggdG8gZmluaXNoKS4KLVRFU1Qo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldpdGhB
bkFuaW1XYWl0aW5nKQotewotICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZl
bnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwotICAgIEZha2VMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotCi0gICAgY29udHJvbGxlci0+
YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5z
aXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJv
bGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJh
bnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAg
Y29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7Ci0KLSAgICAvLyBBbmltcyB3aXRoIGlkIDEgc2hvdWxkIGJvdGggc3RhcnQgbm93LgotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFj
aXR5KCkpOwotICAgIC8vIFRoZSBvcGFjaXR5IGFuaW1hdGlvbiBzaG91bGQgaGF2ZSBmaW5pc2hl
ZCBhdCB0aW1lIDEsIGJ1dCB0aGUgZ3JvdXAKLSAgICAvLyBvZiBhbmltYXRpb25zIHdpdGggaWQg
MSBkb24ndCBmaW5pc2ggdW50aWwgdGltZSAyIGJlY2F1c2Ugb2YgdGhlIGxlbmd0aAotICAgIC8v
IG9mIHRoZSB0cmFuc2Zvcm0gYW5pbWF0aW9uLgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwg
KmV2ZW50cyk7Ci0gICAgLy8gU2hvdWxkIG5vdCBoYXZlIHN0YXJ0ZWQgdGhlIGZsb2F0IHRyYW5z
aXRpb24geWV0LgotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKLSAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLQotICAgIC8vIFRoZSB0
aGUgc2Vjb25kIG9wYWNpdHkgYW5pbWF0aW9uIHNob3VsZCBzdGFydCBhdCB0aW1lIDIgYW5kIHNo
b3VsZCBiZQotICAgIC8vIGRvbmUgYnkgdGltZSAzCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgz
LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBF
WFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotfQotCi0vLyBU
ZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlLgotVEVT
VChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZUFuaW1hdGlvbikK
LXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihu
ZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4g
dG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICB0b0Fk
ZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDAp
OwotICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7Ci0gICAgY29udHJvbGxlci0+YWRkKHRvQWRk
LnJlbGVhc2UoKSk7Ci0KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwotICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBF
Q1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsICpl
dmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKLSAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5h
bmltYXRlKDIsICpldmVudHMpOwotICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwot
ICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci19Ci0K
LS8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUg
dGhhdCdzIGludGVycnVwdGluZyBhIHJ1bm5pbmcgYW5pbWF0aW9uLgotVEVTVChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVu
bmluZ0FuaW1hdGlvbikKLXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2
ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtlTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIGNvbnRyb2xsZXIt
PmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRp
b24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAgT3du
UHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOwotICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlv
bjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7Ci0gICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsK
LSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLQotICAgIC8vIEZpcnN0IDJz
IG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCi0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC4yNWYs
IGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsK
LSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAg
RVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgyLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBF
WFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotfQotCi0vLyBU
ZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlIHRoYXQg
aW50ZXJydXB0cyBhIHJ1bm5pbmcgYW5pbWF0aW9uCi0vLyBhbmQgdGhlcmUgaXMgeWV0IGFub3Ro
ZXIgYW5pbWF0aW9uIHF1ZXVlZCB0byBzdGFydCBsYXRlci4KLVRFU1QoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdB
bmltYXRpb25XaXRoQW5pbUluUXVldWUpCi17Ci0gICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRz
VmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7Ci0g
ICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7Ci0gICAgT3du
UHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKLSAgICAgICAg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0KLSAgICBj
b250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
LQotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0
aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAuNWYsIDApKSwgMiwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3Rp
dmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDApOwotICAgIHRvQWRkLT5zZXRTdGFy
dFRpbWUoMSk7Ci0gICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7Ci0KLSAgICBj
b250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDEsIDAsIDAuNzVmKSksIDMsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7Ci0KLSAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5zaXRpb24gc2hvdWxkIHN0YXJ0IGlt
bWVkaWF0ZWx5LgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9F
USgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41LCAqZXZl
bnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
Ci0gICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDEsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBj
b250cm9sbGVyLT5hbmltYXRlKDMsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0
eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDQsICpldmVudHMpOwotICAgIEVYUEVDVF9F
USgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotfQotCi0vLyBUZXN0IHRoYXQgYSBsb29waW5nIGFuaW1h
dGlvbiBsb29wcyBhbmQgZm9yIHRoZSBjb3JyZWN0IG51bWJlciBvZiBpdGVyYXRpb25zLgotVEVT
VChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2aWFsTG9vcGluZykKLXsK
LSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcg
Q0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9B
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICB0b0FkZC0+
c2V0SXRlcmF0aW9ucygzKTsKLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsK
LQotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1t
eS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSwgKmV2ZW50cyk7Ci0g
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVY
UEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEuNzUsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgyLjI1LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1t
eS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi43NSwgKmV2ZW50cyk7Ci0g
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVY
UEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDMsICpldmVudHMpOwotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0KLSAgICAvLyBK
dXN0IGJlIGV4dHJhIHN1cmUuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSg0LCAqZXZlbnRzKTsK
LSAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLX0KLQotLy8gVGVzdCB0aGF0IGFu
IGluZmluaXRlbHkgbG9vcGluZyBhbmltYXRpb24gZG9lcyBpbmRlZWQgZ28gdW50aWwgYWJvcnRl
ZC4KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW5maW5pdGVMb29w
aW5nKQotewotICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0
UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwotICAgIEZha2VMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotCi0gICAgY29uc3QgaW50IGlkID0gMTsKLSAg
ICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihh
ZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKC0xKTsKLSAgICBj
b250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLQotICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMS4yNSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3Bh
Y2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUsICpldmVudHMpOwotICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1Rf
RVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEw
NzM3NDE4MjQuMjUsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0Ljc1LCAqZXZlbnRzKTsKLSAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNU
X0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwotCi0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwot
ICAgIGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMC43NWYp
OwotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0g
ICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwotfQotCi0vLyBUZXN0IHRoYXQg
cGF1c2luZyBhbmQgcmVzdW1pbmcgd29yayBhcyBleHBlY3RlZC4KLVRFU1QoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgUGF1c2VSZXN1bWUpCi17Ci0gICAgT3duUHRyPENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRz
VmVjdG9yKSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVt
bXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxl
cigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15
KSk7Ci0KLSAgICBjb25zdCBpbnQgaWQgPSAxOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkp
LCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMC41LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9w
YWNpdHkoKSk7Ci0KLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRp
b24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+Z2V0
QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1blN0
YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpQYXVzZWQsIDAuNWYpOwotCi0gICAgY29udHJvbGxlci0+
YW5pbWF0ZSgxMDI0LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7
Ci0KLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+Z2V0QWN0aXZlQW5p
bWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1blN0YXRlKENDQWN0
aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCAxMDI0KTsKLQotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MTAyNC4yNSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuNSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX0ZBTFNF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMSwgZHVt
bXkub3BhY2l0eSgpKTsKLX0KLQotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxU
ZXN0LCBBYm9ydEFHcm91cGVkQW5pbWF0aW9uKQotewotICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2
ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcikp
OwotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAg
IE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0gICAg
ICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotCi0g
ICAgY29uc3QgaW50IGlkID0gMTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIGlkLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFj
dGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSks
IGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChj
cmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwg
MSwgMC43NWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkp
OwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjVmLCBk
dW1teS5vcGFjaXR5KCkpOwotCi0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0QWN0aXZl
QW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIGNvbnRyb2xs
ZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5z
ZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMSk7Ci0gICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRSghY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVt
bXkub3BhY2l0eSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJU
ZXN0LmNwcAppbmRleCBjNGYxMDNhM2NhZmU0NjhlNGI4ZTc5Nzg2ZDJiMjE4N2U0NWQ3ZWExLi5j
YjQwMGI5MzZhZWY2OTIxZjk4N2ZlZTM4MDQyNDNlMTEyMzQxMWFiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlclRlc3QuY3BwCkBAIC01Niw3ICs1Niw4IEBAIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+
CiAKIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBjcmVhdGVPcGFjaXR5QW5p
bWF0aW9uKQogewotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJv
bGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOworICAgIEZha2VMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpj
cmVhdGUoJmR1bW15KSk7CiAgICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKICAgICBXZWJD
b3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOwog
ICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoMCwgMCkpOwpAQCAtODcs
NyArODgsOCBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRlT3Bh
Y2l0eUFuaW1hdGlvbikKIAogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIGNy
ZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbikKIHsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgp
KTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93
blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlv
biA9IDE7CiAgICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm0pOwogCkBAIC0xMjQsOTIgKzEyNiwzNzEgQEAgVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbikKIAog
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIHN5bmNOZXdBbmltYXRpb24pCiB7
Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7Ci0gICAg
T3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlckltcGwoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgT3duUHRy
PENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpjcmVhdGUoKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNs
aWVudCBkdW1teUltcGw7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBj
b250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teUlt
cGwpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAg
IE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgRVhQRUNUX0ZBTFNFKGNv
bnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKIAogICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9Db250cm9sbGVyKCpjb250cm9s
bGVyLCAxLCAwLCAxKTsKIAotICAgIGNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhj
b250cm9sbGVySW1wbC5nZXQoKSk7CisgICAgY29udHJvbGxlci0+cHVzaEFuaW1hdGlvblVwZGF0
ZXNUbyhjb250cm9sbGVySW1wbC5nZXQoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
SW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CiAgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxh
YmlsaXR5LCBjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CiB9CiAKLVRFU1QoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJUZXN0LCBzeW5jQW5pbWF0aW9uUHJvcGVydGllcykKKy8vIFRlc3RzIHRoYXQg
dHJhbnNpdGlvbmluZyBvcGFjaXR5IGZyb20gMCB0byAxIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVT
VChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFRyaXZpYWxUcmFuc2l0aW9uKQogewot
ICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93
blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXJJbXBsKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotICAgIE93blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6Y3JlYXRlKCkpOworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4g
ZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xs
ZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBhZGRPcGFjaXR5VHJhbnNpdGlvblRvQ29u
dHJvbGxlcigqY29udHJvbGxlciwgMSwgMCwgMSk7CisgICAgY29udHJvbGxlci0+YWRkKHRvQWRk
LnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwor
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBF
WFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEs
IGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAg
RVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KIAotICAg
IGNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbC5nZXQoKSk7
CisvLyBUZXN0cyB0aGF0IHR3byBxdWV1ZWQgYW5pbWF0aW9ucyBhZmZlY3RpbmcgdGhlIHNhbWUg
cHJvcGVydHkgcnVuIGluIHNlcXVlbmNlLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
clRlc3QsIFRyaXZpYWxRdWV1aW5nKQoreworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1Zl
Y3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAg
IEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOwotICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdl
dEF2YWlsYWJpbGl0eSwgY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOworICAgIGNvbnRyb2xsZXItPmFk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xs
ZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMSwgMSwgMC41KSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAg
ICAvLyBQdXNoIGFuIGFuaW1hdGlvbiBwcm9wZXJ0eSBjaGFuZ2UgdG8gdGhlIGltcGwgdGhyZWFk
IChzaG91bGQgbm90IGNhdXNlIGFuIGFuaW1hdGlvbiB0byBiZSBhZGRlZCkuCi0gICAgY29udHJv
bGxlci0+cGF1c2VBbmltYXRpb24oMCwgMCk7Ci0gICAgY29udHJvbGxlci0+c3luY2hyb25pemVB
bmltYXRpb25zKGNvbnRyb2xsZXJJbXBsLmdldCgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDAsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9w
YWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCBldmVudHMuZ2V0KCkpOworICAg
IEVYUEVDVF9FUSgwLjUsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KIAotICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKLSAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgY29udHJvbGxl
ckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkt
PnJ1blN0YXRlKCkpOworLy8gVGVzdHMgaW50ZXJydXB0aW5nIGEgdHJhbnNpdGlvbiB3aXRoIGFu
b3RoZXIgdHJhbnNpdGlvbi4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBJ
bnRlcnJ1cHQpCit7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMo
YWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5p
bWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpjcmVhdGUoJmR1bW15KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBl
dmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKworICAgIE93blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOworICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6
V2FpdGluZ0Zvck5leHRUaWNrLCAwKTsKKyAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFz
ZSgpKTsKKworICAgIC8vIFNpbmNlIHRoZSBhbmltYXRpb24gd2FzIGluIHRoZSBXYWl0aW5nRm9y
TmV4dFRpY2sgc3RhdGUsIGl0IHNob3VsZCBzdGFydCByaWdodCBpbgorICAgIC8vIHRoaXMgY2Fs
bCB0byBhbmltYXRlLgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41LCBldmVudHMuZ2V0KCkp
OworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAg
ICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEuNSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoMC41LCBkdW1teS5vcGFjaXR5KCkp
OworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiB9
CiAKLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBzeW5jQWJvcnRlZEFuaW1h
dGlvbikKKy8vIFRlc3RzIHNjaGVkdWxpbmcgdHdvIGFuaW1hdGlvbnMgdG8gcnVuIHRvZ2V0aGVy
IHdoZW4gb25seSBvbmUgcHJvcGVydHkgaXMgZnJlZS4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2hlbkFQcm9wZXJ0eUlzQmxvY2tlZCkKIHsK
LSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBP
d25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVySW1wbChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBPd25QdHI8
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI6OmNyZWF0ZSgpKTsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+
IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtl
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIEVYUEVDVF9GQUxTRShjb250cm9s
bGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihu
ZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJh
bnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBhZGRPcGFjaXR5VHJhbnNpdGlvblRvQ29udHJv
bGxlcigqY29udHJvbGxlciwgMSwgMCwgMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBl
dmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDEsIGV2ZW50cy5nZXQoKSk7CisgICAgLy8gU2hvdWxkIG5vdCBoYXZlIHN0
YXJ0ZWQgdGhlIGZsb2F0IHRyYW5zaXRpb24geWV0LgorICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0
eSgpKTsKKyAgICAvLyBUaGUgZmxvYXQgYW5pbWF0aW9uIHNob3VsZCBoYXZlIHN0YXJ0ZWQgYXQg
dGltZSAxIGFuZCBzaG91bGQgYmUgZG9uZS4KKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsIGV2
ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KIAotICAgIGNv
bnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbC5nZXQoKSk7Cisv
LyBUZXN0cyBzY2hlZHVsaW5nIHR3byBhbmltYXRpb25zIHRvIHJ1biB0b2dldGhlciB3aXRoIGRp
ZmZlcmVudCBsZW5ndGhzIGFuZCBhbm90aGVyCisvLyBhbmltYXRpb24gcXVldWVkIHRvIHN0YXJ0
IHdoZW4gdGhlIHNob3J0ZXIgYW5pbWF0aW9uIGZpbmlzaGVzIChzaG91bGQgd2FpdAorLy8gZm9y
IGJvdGggdG8gZmluaXNoKS4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBT
Y2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCit7CisgICAgT3duUHRyPENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAg
ICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCisgICAgICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0
aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCBjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0
aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CisgICAgY29u
dHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5z
Zm9ybVRyYW5zaXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Cisg
ICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihu
ZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjUpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKKworICAgIC8vIEFuaW1hdGlvbnMgd2l0aCBpZCAxIHNob3VsZCBib3RoIHN0
YXJ0IG5vdy4KKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CisgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVD
VF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAgIC8vIFRoZSBvcGFjaXR5IGFuaW1hdGlvbiBz
aG91bGQgaGF2ZSBmaW5pc2hlZCBhdCB0aW1lIDEsIGJ1dCB0aGUgZ3JvdXAKKyAgICAvLyBvZiBh
bmltYXRpb25zIHdpdGggaWQgMSBkb24ndCBmaW5pc2ggdW50aWwgdGltZSAyIGJlY2F1c2Ugb2Yg
dGhlIGxlbmd0aAorICAgIC8vIG9mIHRoZSB0cmFuc2Zvcm0gYW5pbWF0aW9uLgorICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMiwgZXZlbnRzLmdldCgpKTsKKyAgICAvLyBTaG91bGQgbm90IGhhdmUg
c3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQuCisgICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFj
aXR5KCkpOwogCi0gICAgY29udHJvbGxlci0+cmVtb3ZlQW5pbWF0aW9uKDApOworICAgIC8vIFRo
ZSBzZWNvbmQgb3BhY2l0eSBhbmltYXRpb24gc2hvdWxkIHN0YXJ0IGF0IHRpbWUgMiBhbmQgc2hv
dWxkIGJlIGRvbmUgYnkgdGltZSAzCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgzLCBldmVudHMu
Z2V0KCkpOworICAgIEVYUEVDVF9FUSgwLjUsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNU
X0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KIAotICAgIC8vIEFi
b3J0IGFuIGFuaW1hdGlvbiBmcm9tIHRoZSBtYWluIHRocmVhZC4KLSAgICBjb250cm9sbGVyLT5z
eW5jaHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxlckltcGwuZ2V0KCkpOworLy8gVGVzdHMgc2No
ZWR1bGluZyBhbiBhbmltYXRpb24gdG8gc3RhcnQgaW4gdGhlIGZ1dHVyZS4KK1RFU1QoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBTY2hlZHVsZUFuaW1hdGlvbikKK3sKKyAgICBPd25Q
dHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRp
b25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50
IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxl
cigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsK
IAotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0
aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAg
IHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGlt
ZSwgMCk7CisgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKKyAgICBjb250cm9sbGVyLT5hZGQo
dG9BZGQucmVsZWFzZSgpKTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdl
dCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgxLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDIsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDEs
IGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKIH0KIAotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3Qs
IHN5bmNDb21wbGV0ZWRBbmltYXRpb24pCisvLyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlv
biB0byBzdGFydCBpbiB0aGUgZnV0dXJlIHRoYXQncyBpbnRlcnJ1cHRpbmcgYSBydW5uaW5nIGFu
aW1hdGlvbi4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBTY2hlZHVsZWRB
bmltYXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvbikKIHsKLSAgICBGYWtlTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgp
KTsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihu
ZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0
ZSgmZHVtbXkpKTsKIAotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZl
QW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxl
ci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBh
ZGRPcGFjaXR5VHJhbnNpdGlvblRvQ29udHJvbGxlcigqY29udHJvbGxlciwgMSwgMCwgMSk7Cisg
ICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMC41LCAwKSksIDIsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5p
bWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKKyAgICB0b0FkZC0+c2V0U3RhcnRUaW1l
KDEpOworICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0gICAgY29udHJv
bGxlci0+c3luY2hyb25pemVBbmltYXRpb25zKGNvbnRyb2xsZXJJbXBsLmdldCgpKTsKKyAgICAv
LyBGaXJzdCAycyBvcGFjaXR5IHRyYW5zaXRpb24gc2hvdWxkIHN0YXJ0IGltbWVkaWF0ZWx5Lgor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1
bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsIGV2ZW50cy5nZXQo
KSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwor
ICAgIEVYUEVDVF9FUSgwLjI1LCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNSwgZHVtbXkub3BhY2l0eSgpKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX0VR
KDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKK30KIAotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXJJbXBsLT5n
ZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBF
WFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHks
IGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKKy8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9u
IHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUgdGhhdCBpbnRlcnJ1cHRzIGEgcnVubmluZyBhbmltYXRp
b24KKy8vIGFuZCB0aGVyZSBpcyB5ZXQgYW5vdGhlciBhbmltYXRpb24gcXVldWVkIHRvIHN0YXJ0
IGxhdGVyLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFNjaGVkdWxlZEFu
aW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5pbWF0aW9uV2l0aEFuaW1JblF1ZXVlKQoreworICAg
IE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0Fu
aW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJD
bGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250
cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1t
eSkpOwogCi0gICAgLy8gU3RlcCB0aHJvdWdoIHRoZSBhbmltYXRpb24gdW50aWwgaXQgaXMgZmlu
aXNoZWQuIEF0IHRoZSBuZXh0IHN5bmMsIHRoZSBtYWluIHRocmVhZCdzIGFuaW1hdGlvbiBzaG91
bGQgYmUgY2xlYXJlZC4KKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9B
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDIsIDAuNSwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIHRvQWRk
LT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7
CisgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKKyAgICBjb250cm9sbGVyLT5hZGQodG9BZGQu
cmVsZWFzZSgpKTsKKworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMC43NSkpLCAzLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0cmFuc2l0
aW9uIHNob3VsZCBzdGFydCBpbW1lZGlhdGVseS4KKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAs
IGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMC41LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNSwgZHVtbXku
b3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCBldmVudHMuZ2V0KCkpOworICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1Rf
RVEoMC41LCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMywgZXZl
bnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSg0LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9FUSgwLjc1LCBkdW1teS5v
cGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7Cit9CisKKy8vIFRlc3QgdGhhdCBhIGxvb3BpbmcgYW5pbWF0aW9uIGxvb3BzIGFuZCBm
b3IgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZXJhdGlvbnMuCitURVNUKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyVGVzdCwgVHJpdmlhbExvb3BpbmcpCit7CiAgICAgT3duUHRyPENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yKSk7Ci0gICAgY29udHJvbGxlckltcGwtPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgY29u
dHJvbGxlckltcGwtPmFuaW1hdGUoMiwgKmV2ZW50cyk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9u
Q29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpj
cmVhdGUoJmR1bW15KSk7CiAKLSAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlckltcGwtPmdldEFj
dGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKKyAgICB0b0FkZC0+c2V0SXRlcmF0aW9ucygzKTsKKyAgICBjb250cm9sbGVy
LT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZl
bnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgxLjI1LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNSwgZHVtbXkub3Bh
Y2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUsIGV2ZW50cy5nZXQoKSk7Cisg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVY
UEVDVF9FUSgwLjc1LCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
Mi4yNSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuMjUsIGR1bW15Lm9wYWNpdHkoKSk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLjc1LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC43
NSwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMsIGV2ZW50cy5n
ZXQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKKworICAgIC8vIEp1c3QgYmUg
ZXh0cmEgc3VyZS4KKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDQsIGV2ZW50cy5nZXQoKSk7Cisg
ICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Cit9CisKKy8vIFRlc3QgdGhhdCBhbiBp
bmZpbml0ZWx5IGxvb3BpbmcgYW5pbWF0aW9uIGRvZXMgaW5kZWVkIGdvIHVudGlsIGFib3J0ZWQu
CitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgSW5maW5pdGVMb29waW5nKQor
eworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5l
dyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
PiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRl
KCZkdW1teSkpOworCisgICAgY29uc3QgaW50IGlkID0gMTsKKyAgICBPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OworICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKC0xKTsKKyAgICBjb250cm9sbGVyLT5hZGQodG9B
ZGQucmVsZWFzZSgpKTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgp
KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cisg
ICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxLjI1LCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNSwgZHVtbXkub3BhY2l0eSgpKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNU
X1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgw
Ljc1LCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQx
ODI0LjI1LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNSwgZHVtbXkub3BhY2l0eSgpKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuNzUsIGV2ZW50cy5nZXQoKSk7Cisg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVY
UEVDVF9FUSgwLjc1LCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OworICAgIGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMC43
NSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
KyAgICBFWFBFQ1RfRVEoMC43NSwgZHVtbXkub3BhY2l0eSgpKTsKK30KKworLy8gVGVzdCB0aGF0
IHBhdXNpbmcgYW5kIHJlc3VtaW5nIHdvcmsgYXMgZXhwZWN0ZWQuCitURVNUKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyVGVzdCwgUGF1c2VSZXN1bWUpCit7CisgICAgT3duUHRyPENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAg
ICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCisgICAgICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CisKKyAgICBjb25z
dCBpbnQgaWQgPSAxOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRz
LmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgwLjUsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjUsIGR1bW15Lm9wYWNpdHko
KSk7CiAKLSAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxlcklt
cGwuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlv
bihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5nZXRB
Y3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3Rh
dGUoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgMC41KTsKIAorICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMTAyNCwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNSwgZHVtbXkub3BhY2l0eSgp
KTsKKworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVB
bmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NB
Y3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDEwMjQpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxMDI0LjI1LCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC43NSwgZHVtbXkub3BhY2l0eSgp
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuNSwgZXZlbnRzLmdldCgpKTsKICAgICBF
WFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVD
VF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOworfQorCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyVGVzdCwgQWJvcnRBR3JvdXBlZEFuaW1hdGlvbikKK3sKKyAgICBPd25QdHI8Q0NBbmlt
YXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNW
ZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15Owor
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKKyAgICAg
ICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIGNv
bnN0IGludCBpZCA9IDE7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCBpZCwgQ0NBY3RpdmVB
bmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVB
bmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCBpZCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAu
NzUpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC41
LCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0QWN0
aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRy
b2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
LT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMSk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgxLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0
eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQ
RUNUX1RSVUUoIWNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1Rf
RVEoMC43NSwgZHVtbXkub3BhY2l0eSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmlu
ZGV4IDcwMmJiZjE2MzliNDNiMTZhZWYzYWJiNjYwNjI5MDQ5OGMwZDY2MTUuLjNmZGEyYzllZTdh
Y2FmMGJlZTM2N2RlYjVlNmIxZDkzYThkMWNiNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtNzMsNyArNzMsNiBA
QCBwdWJsaWM6CiAKICAgICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBDQ0xheWVyQW5pbWF0aW9uRGVs
ZWdhdGUKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgdGlt
ZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvbkZpbmlzaGVkKGludCBhbmlt
YXRpb25JZCkgeyB9CiB9OwogCiAvLyBBZGFwdHMgQ0NMYXllclRyZWVIb3N0SW1wbCBmb3IgdGVz
dC4gUnVucyByZWFsIGNvZGUsIHRoZW4gaW52b2tlcyB0ZXN0IGhvb2tzLgpAQCAtODkyLDcgKzg5
MSw2IEBAIHB1YmxpYzoKICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uKCkKICAg
ICAgICAgOiBtX251bUFuaW1hdGVzKDApCiAgICAgICAgICwgbV9yZWNlaXZlZEFuaW1hdGlvblN0
YXJ0ZWROb3RpZmljYXRpb24oZmFsc2UpCi0gICAgICAgICwgbV9yZWNlaXZlZEFuaW1hdGlvbkZp
bmlzaGVkTm90aWZpY2F0aW9uKGZhbHNlKQogICAgICAgICAsIG1fc3RhcnRUaW1lKDApCiAgICAg
ICAgICwgbV9maXJzdE1vbm90b25pY1RpbWUoMCkKICAgICB7CkBAIC05MTcsNyArOTE1LDYgQEAg
cHVibGljOgogICAgICAgICBFWFBFQ1RfTFQoMCwgbV9maXJzdE1vbm90b25pY1RpbWUpOwogICAg
ICAgICBFWFBFQ1RfTkUobV9zdGFydFRpbWUsIG1fZmlyc3RNb25vdG9uaWNUaW1lKTsKICAgICAg
ICAgRVhQRUNUX1RSVUUobV9yZWNlaXZlZEFuaW1hdGlvblN0YXJ0ZWROb3RpZmljYXRpb24pOwot
ICAgICAgICBFWFBFQ1RfVFJVRShtX3JlY2VpdmVkQW5pbWF0aW9uRmluaXNoZWROb3RpZmljYXRp
b24pOwogICAgICAgICBlbmRUZXN0KCk7CiAgICAgfQogCkBAIC05MjcsMTEgKzkyNCw2IEBAIHB1
YmxpYzoKICAgICAgICAgbV9zdGFydFRpbWUgPSB3YWxsQ2xvY2tUaW1lOwogICAgIH0KIAotICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25GaW5pc2hlZChpbnQpCi0gICAgewotICAgICAg
ICBtX3JlY2VpdmVkQW5pbWF0aW9uRmluaXNoZWROb3RpZmljYXRpb24gPSB0cnVlOwotICAgIH0K
LQogICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQogICAgIHsKICAgICB9CkBAIC05MzksNyAr
OTMxLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBpbnQgbV9udW1BbmltYXRlczsKICAgICBi
b29sIG1fcmVjZWl2ZWRBbmltYXRpb25TdGFydGVkTm90aWZpY2F0aW9uOwotICAgIGJvb2wgbV9y
ZWNlaXZlZEFuaW1hdGlvbkZpbmlzaGVkTm90aWZpY2F0aW9uOwogICAgIGRvdWJsZSBtX3N0YXJ0
VGltZTsKICAgICBkb3VibGUgbV9maXJzdE1vbm90b25pY1RpbWU7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAppbmRl
eCAwNmNjNWVlNWM1NDQxMjM1MTAzOWQ5YmZhYzczZTM2MWFhNzBkOTAxLi41YjM3NmNhOWZlMjIx
MWRmYTAwYTljZjkxMWVmMGU2MWY4OTA4MjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApAQCAtOTYsMjIgKzk2LDIz
IEBAIHByaXZhdGU6CiAKIGNsYXNzIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIgOiBwdWJs
aWMgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZSgpCisgICAgc3RhdGlj
IFBhc3NPd25QdHI8RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyQ2xpZW50KiBjbGllbnQpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOworICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoY2xpZW50KSk7CiAg
ICAgfQogCiAgICAgYm9vbCBzeW5jaHJvbml6ZWRBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4g
bV9zeW5jaHJvbml6ZWRBbmltYXRpb25zOyB9CiAKIHByaXZhdGU6Ci0gICAgRmFrZUxheWVyQW5p
bWF0aW9uQ29udHJvbGxlcigpCi0gICAgICAgIDogbV9zeW5jaHJvbml6ZWRBbmltYXRpb25zKGZh
bHNlKQorICAgIGV4cGxpY2l0IEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJDbGllbnQqIGNsaWVudCkKKyAgICAgICAgOiBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcihjbGllbnQpCisgICAgICAgICwgbV9zeW5jaHJvbml6ZWRBbmltYXRpb25z
KGZhbHNlKQogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVBbmlt
YXRpb25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCisg
ICAgdmlydHVhbCB2b2lkIHB1c2hBbmltYXRpb25VcGRhdGVzVG8oQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIqIGNvbnRyb2xsZXJJbXBsKQogICAgIHsKLSAgICAgICAgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbCk7CisgICAg
ICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uVXBkYXRlc1RvKGNv
bnRyb2xsZXJJbXBsKTsKICAgICAgICAgbV9zeW5jaHJvbml6ZWRBbmltYXRpb25zID0gdHJ1ZTsK
ICAgICB9CiAKQEAgLTM1MCw3ICszNTEsOCBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBz
eW5jaHJvbml6ZUFuaW1hdGlvbnMpCiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7
CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKIAotICAgIGxheWVyVHJlZVJvb3QtPnNldExheWVyQW5pbWF0aW9uQ29udHJv
bGxlcihGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSk7CisgICAgRmFrZUxh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBsYXllclRyZWVSb290LT5z
ZXRMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgRVhQRUNUX0ZBTFNFKHN0YXRpY19jYXN0PEZha2VMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIqPihsYXllclRyZWVSb290LT5sYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIoKSktPnN5bmNocm9uaXplZEFuaW1hdGlvbnMoKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132816</attachid>
            <date>2012-03-20 06:45:16 -0700</date>
            <delta_ts>2012-03-20 07:42:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81106-20120320094515.patch</filename>
            <type>text/plain</type>
            <size>131753</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGJhOTFhMTI1MTNkZmM4
YzlhOGE0YTJhNGUzNmM3NWE3NDE3M2U5Yy4uMGVmZjE5MTNmMzI0YzY5YTViNzRjYmZkOTUwOTQy
NzA2YWNhZGQxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNyBAQAorMjAxMi0wMy0yMCAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIElu
ZnJhc3RydWN0dXJlIHRvIGFsbG93IGFuaW1hdGluZyBsYXllcnMgdG8gYmUgb25seSBwYXJ0aWFs
bHkgdXBkYXRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODExMDYKKworICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbgorCisgICAgICAg
IE1lcmdlZCB0aGUgY29udHJvbGxlciB0ZXN0cyBpbiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
clRlc3QKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAo
R3JhcGhpY3NMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06
OkxheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHVzaFBy
b3BlcnRpZXNUbyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRPcGFjaXR5
RnJvbUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ2hyb21pdW06OnNldFRyYW5zZm9ybUZyb21BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21p
dW06OnJlbW92ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpz
dXNwZW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZXN1
bWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldExheWVy
QW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpo
YXNBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0
QW5pbWF0aW9uRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1
bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjppZCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpvcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpib3Vu
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5p
bWF0aW9uLmg6CisgICAgICAgIChDQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVudHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NBbmltYXRpb25FdmVudDo6Q0NBbmltYXRpb25FdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0FuaW1hdGlvbkV2ZW50Ojp0b0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0FuaW1hdGlvbkV2ZW50Ojp0b1RyYW5zZm9ybUFuaW1hdGlv
bkZpbmlzaGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBbmltYXRpb25TdGFydGVkRXZl
bnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5p
bWF0aW9uU3RhcnRlZEV2ZW50OjpDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50OjpDQ0Zsb2F0QW5pbWF0aW9u
RmluaXNoZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0QW5pbWF0aW9uRmluaXNo
ZWRFdmVudDo6fkNDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50Ojp0eXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Q0NUcmFuc2Zvcm1B
bmltYXRpb25GaW5pc2hlZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtQW5p
bWF0aW9uRmluaXNoZWRFdmVudDo6fkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OnR5
cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9u
RXZlbnRzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5pbWF0
aW9uRXZlbnQ6OnRhcmdldFByb3BlcnR5KToKKyAgICAgICAgKENDQW5pbWF0aW9uRXZlbnQpOgor
ICAgICAgICAoQ0NBbmltYXRpb25TdGFydGVkRXZlbnQpOgorICAgICAgICAoQ0NGbG9hdEFuaW1h
dGlvbkZpbmlzaGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGbG9hdEFuaW1hdGlvbkZp
bmlzaGVkRXZlbnQ6OmZpbmFsVmFsdWUpOgorICAgICAgICAoQ0NUcmFuc2Zvcm1BbmltYXRpb25G
aW5pc2hlZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtQW5pbWF0aW9uRmlu
aXNoZWRFdmVudDo6ZmluYWxWYWx1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hBbmlt
YXRpb25VcGRhdGVzVG8pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpnZXRBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6Omhhc0FjdGl2ZUFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNBbmltYXRpbmdQ
cm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
cHVzaE5ld0FuaW1hdGlvbnNUb0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN0YXJ0
QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3RhcnRBbmlt
YXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzb2x2ZUNvbmZsaWN0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVyZ2VGaW5pc2hlZEFuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnRpY2tB
bmltYXRpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudDo6fkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
Q2xpZW50KToKKyAgICAgICAgKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZS5o
OgorICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllcklt
cGw6OnNldE9wYWNpdHlGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNldFRyYW5zZm9ybUZyb21BbmltYXRpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAg
ICAgIChDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6aWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRo
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlz
aWJsZU9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmFu
aW1hdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmFuaW1hdGVMYXllcnNSZWN1cnNpdmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJz
UmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1h
dGVMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OkJlZ2luRnJhbWVBbmRDb21taXRTdGF0ZTo6QmVn
aW5GcmFtZUFuZENvbW1pdFN0YXRlKToKKwogMjAxMi0wMy0yMCAgUGF2ZWwgRmVsZG1hbiAgPHBm
ZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiB0cmVhdCBVaW50
KiBleHRlcm5hbCBhcnJheXMgYXMgYXJyYXlzIGluIGNvbnNvbGUuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDkwNTVkYjVlMDgyY2UwOGFjMTEwMDdhMWI3YjBjODBlYjU5NjczYjkuLjJm
MmMzMDY3MWI2YmRhMmQ4YWE4ZTdmMGUwMjgwMzI0MTlkMTc2YzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTItMDMtMjAgIElhbiBWb2xsaWNrICA8dm9s
bGlja0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbmZyYXN0cnVjdHVyZSB0
byBhbGxvdyBhbmltYXRpbmcgbGF5ZXJzIHRvIGJlIG9ubHkgcGFydGlhbGx5IHVwZGF0ZWQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMTA2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24KKworICAgICAgICAqIFdlYktpdC5neXBp
OgorICAgICAgICAqIHRlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHA6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudDo6RmFrZUxheWVy
QW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudDo6fkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJDbGllbnQpOgorICAgICAgICAqIHRlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oOgorICAg
ICAgICAoRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCk6CisgICAgICAgIChXZWJL
aXRUZXN0czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudDo6c2V0T3BhY2l0eUZy
b21BbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJDbGllbnQ6OnNldFRyYW5zZm9ybUZyb21BbmltYXRpb24pOgorICAgICAgICAqIHRl
c3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHRlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHA6CisgICAgICAg
IChXZWJLaXRUZXN0czo6VEVTVCk6CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAgICog
dGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVl
SG9zdFRlc3RBZGRBbmltYXRpb246OkNDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb24pOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uOjphbmltYXRlTGF5
ZXJzKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb24pOgorICAgICAg
ICAqIHRlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3Rz
OjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0
VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OkZha2VMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OnB1c2hBbmltYXRpb25VcGRhdGVzVG8pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRF
U1QpOgorCiAyMDEyLTAzLTIwICBLZWlzaGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFtjaHJvbWl1bV0gTWFya2luZyBXZWJGcmFtZVRlc3QuRGl2QXV0b1pvb21QYXJh
bXNUZXN0IGFzIGZhaWxpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMzg2ZWZiMjhkOWIyOTBmMmI1
OWMxODg5NzJlM2VkY2QyMzBkNmU5Yi4uM2IzYzU0ZGVjNzNhYjRiMWY1ZmI0NGRkNmM4NjhiZTQx
YzdmZDhjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzQ4MCw4ICszNDgwLDYgQEAKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1
cnZlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNGM4MTg1M2I4MjAx
MTY1ODEyYjRhM2QzNTE5MTMxNGI2MDRmOTdlYi4uZGIwYmExYzJjOWQyMjQ5MmNjNTI5YmZjMTJh
NTJkZTkzNjBmZjRiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBA
IC03NDksMTYgKzc0OSw2IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpub3RpZnlBbmlt
YXRpb25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpCiAgICAgICAgIG1fY2xpZW50LT5ub3RpZnlB
bmltYXRpb25TdGFydGVkKHRoaXMsIHN0YXJ0VGltZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjpub3RpZnlBbmltYXRpb25GaW5pc2hlZChpbnQgYW5pbWF0aW9uSWQpCi17Ci0g
ICAgZm9yIChBbmltYXRpb25JZE1hcDo6aXRlcmF0b3IgaWRJdGVyID0gbV9hbmltYXRpb25JZE1h
cC5iZWdpbigpOyBpZEl0ZXIgIT0gbV9hbmltYXRpb25JZE1hcC5lbmQoKTsgKytpZEl0ZXIpIHsK
LSAgICAgICAgaWYgKGlkSXRlci0+c2Vjb25kID09IGFuaW1hdGlvbklkKSB7Ci0gICAgICAgICAg
ICBtX2FuaW1hdGlvbklkTWFwLnJlbW92ZShpZEl0ZXIpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5oCmluZGV4IDRjY2E4MmE4ODdiZTI4NTk5YWYxNDc0MTdlY2FiYzc4NzE5NDlmOWMuLjkx
YTQ1NWE1NDFlNjZmOWQ4NzZiZTZhY2U2MTFmYzhhMGZhYzQ3YTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMTYsNyArMTE2LDYgQEAgcHVibGljOgogCiAgICAgLy8g
Q0NMYXllckFuaW1hdGlvbkRlbGVnYXRlIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpOwotICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlBbmltYXRpb25GaW5pc2hlZChpbnQgYW5pbWF0aW9uSWQpOwogCiAgICAgLy8g
RXhwb3NlZCBmb3IgdGVzdHMuCiAgICAgTGF5ZXJDaHJvbWl1bSogY29udGVudHNMYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXllci5nZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cAppbmRleCA4MWQzOTQ0ZmI2ZDYxM2IyMGYyMTlkMDBhM2Q4ZjU2MGY5NDdhZTBhLi5iYTVhZDA0
MDhhOGQwYzI5Y2YwZjA0YWM2OGE2OGYxNDk2NDZkYjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cApAQCAtNTksNyArNTksNyBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKCkKICAgICA6
IG1fbmVlZHNEaXNwbGF5KGZhbHNlKQogICAgICwgbV9sYXllcklkKHNfbmV4dExheWVySWQrKykK
ICAgICAsIG1fcGFyZW50KDApCi0gICAgLCBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlcihDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpCisgICAgLCBtX2xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKHRoaXMpKQogICAg
ICwgbV9zY3JvbGxhYmxlKGZhbHNlKQogICAgICwgbV9zaG91bGRTY3JvbGxPbk1haW5UaHJlYWQo
ZmFsc2UpCiAgICAgLCBtX2hhdmVXaGVlbEV2ZW50SGFuZGxlcnMoZmFsc2UpCkBAIC05OSw3MCAr
OTksNiBAQCBMYXllckNocm9taXVtOjp+TGF5ZXJDaHJvbWl1bSgpCiAgICAgcmVtb3ZlQWxsQ2hp
bGRyZW4oKTsKIH0KIAotYm9vbCBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5p
bWF0aW9uKiBhbmltYXRpb24sIGludCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQsIGRvdWJsZSB0
aW1lT2Zmc2V0KQotewotICAgIGlmICghbV9sYXllclRyZWVIb3N0IHx8ICFtX2xheWVyVHJlZUhv
c3QtPnNldHRpbmdzKCkudGhyZWFkZWRBbmltYXRpb25FbmFibGVkKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBib29sIGFkZGVkQW5pbWF0aW9uID0gbV9sYXllckFuaW1hdGlvbkNvbnRy
b2xsZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgYW5pbWF0aW9u
SWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQpOwotICAgIGlmIChhZGRlZEFuaW1hdGlvbikKLSAgICAg
ICAgc2V0TmVlZHNDb21taXQoKTsKLSAgICByZXR1cm4gYWRkZWRBbmltYXRpb247Ci19Ci0KLXZv
aWQgTGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBkb3VibGUg
dGltZU9mZnNldCkKLXsKLSAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+cGF1c2VBbmlt
YXRpb24oYW5pbWF0aW9uSWQsIHRpbWVPZmZzZXQpOwotICAgIHNldE5lZWRzQ29tbWl0KCk7Ci19
Ci0KLXZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCkK
LXsKLSAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+cmVtb3ZlQW5pbWF0aW9uKGFuaW1h
dGlvbklkKTsKLSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi12b2lkIExheWVyQ2hyb21pdW06
OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQotewotICAgIG1fbGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLT5zdXNwZW5kQW5pbWF0aW9ucyh0aW1lKTsKLSAgICBzZXROZWVkc0NvbW1pdCgp
OwotfQotCi12b2lkIExheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQotewotICAgIG1f
bGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5yZXN1bWVBbmltYXRpb25zKCk7Ci0gICAgc2V0TmVl
ZHNDb21taXQoKTsKLX0KLQotdm9pZCBMYXllckNocm9taXVtOjpzZXRMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIoUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gbGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyKQotewotICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyID0gbGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOwotICAgIHNldE5lZWRzQ29tbWl0KCk7Ci19Ci0KLWJvb2wg
TGF5ZXJDaHJvbWl1bTo6aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpOwotfQotCi12
b2lkIExheWVyQ2hyb21pdW06OnNldEFuaW1hdGlvbkV2ZW50KGNvbnN0IENDQW5pbWF0aW9uRXZl
bnQmIGV2ZW50LCBkb3VibGUgd2FsbENsb2NrVGltZSkKLXsKLSAgICBzd2l0Y2ggKGV2ZW50LnR5
cGUoKSkgewotCi0gICAgY2FzZSBDQ0FuaW1hdGlvbkV2ZW50OjpTdGFydGVkOiB7Ci0gICAgICAg
IG1fbGF5ZXJBbmltYXRpb25EZWxlZ2F0ZS0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh3YWxsQ2xv
Y2tUaW1lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBDQ0FuaW1hdGlvbkV2
ZW50OjpGaW5pc2hlZDogewotICAgICAgICBjb25zdCBDQ0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQq
IGZpbmlzaGVkRXZlbnQgPSBldmVudC50b0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQoKTsKLSAgICAg
ICAgbV9sYXllckFuaW1hdGlvbkRlbGVnYXRlLT5ub3RpZnlBbmltYXRpb25GaW5pc2hlZChmaW5p
c2hlZEV2ZW50LT5hbmltYXRpb25JZCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
fQotfQotCiB2b2lkIExheWVyQ2hyb21pdW06OnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQoYm9v
bCBpc05vbkNvbXBvc2l0ZWRDb250ZW50KQogewogICAgIG1faXNOb25Db21wb3NpdGVkQ29udGVu
dCA9IGlzTm9uQ29tcG9zaXRlZENvbnRlbnQ7CkBAIC01MzYsMTIgKzQ3MiwxNCBAQCB2b2lkIExh
eWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgICAg
ICBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uQ2hhbmdlZCA9IGZhbHNlOwogICAgIH0KICAgICBs
YXllci0+c2V0T3BhcXVlKG1fb3BhcXVlKTsKLSAgICBsYXllci0+c2V0T3BhY2l0eShtX29wYWNp
dHkpOworICAgIGlmICghb3BhY2l0eUlzQW5pbWF0aW5nKCkpCisgICAgICAgIGxheWVyLT5zZXRP
cGFjaXR5KG1fb3BhY2l0eSk7CiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKG1fcG9zaXRpb24pOwog
ICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKICAgICBsYXllci0+c2V0
U2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldFN1YmxheWVy
VHJhbnNmb3JtKG1fc3VibGF5ZXJUcmFuc2Zvcm0pOwotICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0o
bV90cmFuc2Zvcm0pOworICAgIGlmICghdHJhbnNmb3JtSXNBbmltYXRpbmcoKSkKKyAgICAgICAg
bGF5ZXItPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7CiAgICAgbGF5ZXItPnNldFVwZGF0ZVJl
Y3QobV91cGRhdGVSZWN0KTsKIAogICAgIGxheWVyLT5zZXRTY3JvbGxEZWx0YShsYXllci0+c2Ny
b2xsRGVsdGEoKSAtIGxheWVyLT5zZW50U2Nyb2xsRGVsdGEoKSk7CkBAIC01NTIsNyArNDkwLDcg
QEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXll
cikKICAgICBpZiAocmVwbGljYUxheWVyKCkpCiAgICAgICAgIHJlcGxpY2FMYXllcigpLT5wdXNo
UHJvcGVydGllc1RvKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSk7CiAKLSAgICBtX2xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci0+c3luY2hyb25pemVBbmltYXRpb25zKGxheWVyLT5sYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIoKSk7CisgICAgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPnB1c2hBbmlt
YXRpb25VcGRhdGVzVG8obGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpKTsKIAogICAg
IC8vIFJlc2V0IGFueSBzdGF0ZSB0aGF0IHNob3VsZCBiZSBjbGVhcmVkIGZvciB0aGUgbmV4dCB1
cGRhdGUuCiAgICAgbV91cGRhdGVSZWN0ID0gRmxvYXRSZWN0KCk7CkBAIC02MDYsNiArNTQ0LDky
IEBAIGJvb2wgTGF5ZXJDaHJvbWl1bTo6ZGVzY2VuZGFudERyYXdzQ29udGVudCgpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCit2b2lkIExheWVyQ2hyb21pdW06OnNldE9wYWNpdHlGcm9tQW5pbWF0
aW9uKGZsb2F0IG9wYWNpdHkpCit7CisgICAgLy8gVGhpcyBpcyBjYWxsZWQgZHVlIHRvIGFuIG9u
Z29pbmcgYWNjZWxlcmF0ZWQgYW5pbWF0aW9uLiBTaW5jZSB0aGlzIGFuaW1hdGlvbiBpcworICAg
IC8vIGFsc28gYmVpbmcgcnVuIG9uIHRoZSBpbXBsIHRocmVhZCwgdGhlcmUgaXMgbm8gbmVlZCB0
byByZXF1ZXN0IGEgY29tbWl0IHRvIHB1c2gKKyAgICAvLyB0aGlzIHZhbHVlIG92ZXIsIHNvIHNl
dCB0aGUgdmFsdWUgZGlyZWN0bHkgcmF0aGVyIHRoYW4gY2FsbGluZyBzZXRPcGFjaXR5LgorICAg
IG1fb3BhY2l0eSA9IG9wYWNpdHk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0VHJhbnNm
b3JtRnJvbUFuaW1hdGlvbihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQor
eworICAgIC8vIFRoaXMgaXMgY2FsbGVkIGR1ZSB0byBhbiBvbmdvaW5nIGFjY2VsZXJhdGVkIGFu
aW1hdGlvbi4gU2luY2UgdGhpcyBhbmltYXRpb24gaXMKKyAgICAvLyBhbHNvIGJlaW5nIHJ1biBv
biB0aGUgaW1wbCB0aHJlYWQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVxdWVzdCBhIGNvbW1pdCB0
byBwdXNoCisgICAgLy8gdGhpcyB2YWx1ZSBvdmVyLCBzbyBzZXQgdGhpcyB2YWx1ZSBkaXJlY3Rs
eSByYXRoZXIgdGhhbiBjYWxsaW5nIHNldFRyYW5zZm9ybS4KKyAgICBtX3RyYW5zZm9ybSA9IHRy
YW5zZm9ybTsKK30KKworYm9vbCBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5p
bWF0aW9uKiBhbmltYXRpb24sIGludCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQsIGRvdWJsZSB0
aW1lT2Zmc2V0KQoreworICAgIGlmICghbV9sYXllclRyZWVIb3N0IHx8ICFtX2xheWVyVHJlZUhv
c3QtPnNldHRpbmdzKCkudGhyZWFkZWRBbmltYXRpb25FbmFibGVkKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBib29sIGFkZGVkQW5pbWF0aW9uID0gbV9sYXllckFuaW1hdGlvbkNvbnRy
b2xsZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgYW5pbWF0aW9u
SWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQpOworICAgIGlmIChhZGRlZEFuaW1hdGlvbikKKyAgICAg
ICAgc2V0TmVlZHNDb21taXQoKTsKKyAgICByZXR1cm4gYWRkZWRBbmltYXRpb247Cit9CisKK3Zv
aWQgTGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBkb3VibGUg
dGltZU9mZnNldCkKK3sKKyAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+cGF1c2VBbmlt
YXRpb24oYW5pbWF0aW9uSWQsIHRpbWVPZmZzZXQpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9
CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCkK
K3sKKyAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+cmVtb3ZlQW5pbWF0aW9uKGFuaW1h
dGlvbklkKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06
OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fbGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLT5zdXNwZW5kQW5pbWF0aW9ucyh0aW1lKTsKKyAgICBzZXROZWVkc0NvbW1pdCgp
OworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQoreworICAgIG1f
bGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5yZXN1bWVBbmltYXRpb25zKCk7CisgICAgc2V0TmVl
ZHNDb21taXQoKTsKK30KKwordm9pZCBMYXllckNocm9taXVtOjpzZXRMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIoUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gbGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyKQoreworICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyID0gbGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK2Jvb2wg
TGF5ZXJDaHJvbWl1bTo6aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpOworfQorCit2
b2lkIExheWVyQ2hyb21pdW06OnNldEFuaW1hdGlvbkV2ZW50KGNvbnN0IENDQW5pbWF0aW9uRXZl
bnQmIGV2ZW50LCBkb3VibGUgd2FsbENsb2NrVGltZSkKK3sKKyAgICBzd2l0Y2ggKGV2ZW50LnR5
cGUoKSkgeworICAgIGNhc2UgQ0NBbmltYXRpb25FdmVudDo6U3RhcnRlZDoKKyAgICAgICAgbV9s
YXllckFuaW1hdGlvbkRlbGVnYXRlLT5ub3RpZnlBbmltYXRpb25TdGFydGVkKHdhbGxDbG9ja1Rp
bWUpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ0NBbmltYXRpb25FdmVudDo6RmluaXNo
ZWRGbG9hdEFuaW1hdGlvbjogeworICAgICAgICBjb25zdCBDQ0Zsb2F0QW5pbWF0aW9uRmluaXNo
ZWRFdmVudCogZmluaXNoZWRFdmVudCA9IGV2ZW50LnRvRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2
ZW50KCk7CisgICAgICAgIEFTU0VSVChmaW5pc2hlZEV2ZW50LT50YXJnZXRQcm9wZXJ0eSgpID09
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KTsKKyAgICAgICAgc2V0T3BhY2l0eShmaW5pc2hl
ZEV2ZW50LT5maW5hbFZhbHVlKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IENDQW5pbWF0aW9uRXZlbnQ6OkZpbmlzaGVkVHJhbnNmb3JtQW5pbWF0aW9uOiB7CisgICAgICAg
IGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCogZmluaXNoZWRFdmVudCA9
IGV2ZW50LnRvVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCgpOworICAgICAgICBBU1NF
UlQoZmluaXNoZWRFdmVudC0+dGFyZ2V0UHJvcGVydHkoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VHJhbnNmb3JtKTsKKyAgICAgICAgc2V0VHJhbnNmb3JtKGZpbmlzaGVkRXZlbnQtPmZpbmFsVmFs
dWUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIH0KK30KKwogdm9pZCBzb3J0TGF5
ZXJzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIHZvaWQqKQogewogICAgIC8vIEN1cnJlbnRs
eSB3ZSBkb24ndCB1c2Ugei1vcmRlciB0byBkZWNpZGUgd2hhdCB0byBwYWludCwgc28gdGhlcmUn
cyBubyBuZWVkIHRvIGFjdHVhbGx5IHNvcnQgTGF5ZXJDaHJvbWl1bXMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgKaW5kZXggNTEzNGZkNTFmMzBmZDJkM2YwMzkzYWU1YTkzZjQ1MGU3ZmQxMDQwNS4uMTY2MDdj
YTMwZmZkYzY0ZWJkYzkwZWUwNWQzMjM3ZWVhZTJhYmI2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApA
QCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIlNoYWRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
ImNjL0NDT2NjbHVzaW9uVHJhY2tlci5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAt
NTYsNyArNTcsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0FuaW1hdGlvbkV2
ZW50OwotY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBDQ0xheWVyQW5p
bWF0aW9uRGVsZWdhdGU7CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9z
dDsKQEAgLTY2LDEyICs2NiwyMCBAQCBjbGFzcyBTY3JvbGxiYXJMYXllckNocm9taXVtOwogCiAv
LyBCYXNlIGNsYXNzIGZvciBjb21wb3NpdGVkIGxheWVycy4gU3BlY2lhbCBsYXllciB0eXBlcyBh
cmUgZGVyaXZlZCBmcm9tCiAvLyB0aGlzIGNsYXNzLgotY2xhc3MgTGF5ZXJDaHJvbWl1bSA6IHB1
YmxpYyBSZWZDb3VudGVkPExheWVyQ2hyb21pdW0+IHsKK2NsYXNzIExheWVyQ2hyb21pdW0gOiBw
dWJsaWMgUmVmQ291bnRlZDxMYXllckNocm9taXVtPiwgcHVibGljIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllckNo
cm9taXVtPiBjcmVhdGUoKTsKIAogICAgIHZpcnR1YWwgfkxheWVyQ2hyb21pdW0oKTsKIAorICAg
IC8vIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGltcGxlbWVudGF0aW9uCisgICAg
dmlydHVhbCBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0T3BhY2l0eUZyb21BbmltYXRpb24oZmxvYXQpOworICAgIHZpcnR1YWwgZmxvYXQg
b3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Cisg
ICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CisKICAgICBjb25zdCBMYXllckNocm9taXVt
KiByb290TGF5ZXIoKSBjb25zdDsKICAgICBMYXllckNocm9taXVtKiBwYXJlbnQoKSBjb25zdDsK
ICAgICB2b2lkIGFkZENoaWxkKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4pOwpAQCAtOTUsNyAr
MTAzLDYgQEAgcHVibGljOgogICAgIGJvb2wgYmFja2dyb3VuZENvdmVyc1ZpZXdwb3J0KCkgY29u
c3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kQ292ZXJzVmlld3BvcnQ7IH0KIAogICAgIHZvaWQgc2V0
Qm91bmRzKGNvbnN0IEludFNpemUmKTsKLSAgICBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25z
dCB7IHJldHVybiBtX2JvdW5kczsgfQogICAgIHZpcnR1YWwgSW50U2l6ZSBjb250ZW50Qm91bmRz
KCkgY29uc3QgeyByZXR1cm4gYm91bmRzKCk7IH0KIAogICAgIHZvaWQgc2V0TWFza3NUb0JvdW5k
cyhib29sKTsKQEAgLTEwOSw3ICsxMTYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIG5l
ZWRzRGlzcGxheSgpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNEaXNwbGF5OyB9CiAKICAgICB2b2lk
IHNldE9wYWNpdHkoZmxvYXQpOwotICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBt
X29wYWNpdHk7IH0KICAgICBib29sIG9wYWNpdHlJc0FuaW1hdGluZygpIGNvbnN0OwogCiAgICAg
dm9pZCBzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKQEAgLTEyNSw3ICsxMzEs
NiBAQCBwdWJsaWM6CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdWJsYXllclRyYW5zZm9ybTsgfQogCiAgICAgdm9p
ZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zv
cm07IH0KICAgICBib29sIHRyYW5zZm9ybUlzQW5pbWF0aW5nKCkgY29uc3Q7CiAKICAgICBjb25z
dCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlTGF5
ZXJSZWN0OyB9CkBAIC0xODEsOCArMTg2LDYgQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiBQcm9n
cmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3MsIEZyYWdtZW50U2hhZGVyQ29sb3I+IEJvcmRlclBy
b2dyYW07CiAKLSAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7IH0KLQogICAg
IHZvaWQgY2xlYXJSZW5kZXJTdXJmYWNlKCkgeyBtX3JlbmRlclN1cmZhY2UuY2xlYXIoKTsgfQog
ICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVuZGVyU3VyZmFjZS5nZXQoKTsgfQogICAgIHZvaWQgY3JlYXRlUmVuZGVyU3VyZmFjZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NBY3RpdmVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgKaW5kZXggMjA5MzQyMWE3NTA4Zjk1ZmYz
NWNjZTEzZjU0NTg2MmYyNGVkZjNlZC4uOWM2NjMzYzNlNGM2ZjlkNmM0ZTZiYmUzZmQzNzY1Y2I3
ZGJlNGVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCkBAIC02MywxNCArNjMs
NiBAQCBwdWJsaWM6CiAgICAgICAgIE9wYWNpdHkKICAgICB9OwogCi0gICAgc3RydWN0IEFuaW1h
dGlvblNpZ25hdHVyZSB7Ci0gICAgICAgIEFuaW1hdGlvblNpZ25hdHVyZShpbnQgZ3JvdXBJZCwg
VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCi0gICAgICAgICAgICA6IGdyb3VwSWQoZ3Jv
dXBJZCkKLSAgICAgICAgICAgICwgdGFyZ2V0UHJvcGVydHkodGFyZ2V0UHJvcGVydHkpIHsgfQot
ICAgICAgICBpbnQgZ3JvdXBJZDsKLSAgICAgICAgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVy
dHk7Ci0gICAgfTsKLQogICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBj
cmVhdGUoUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiwgaW50IGFuaW1hdGlvbklkLCBpbnQg
Z3JvdXBJZCwgVGFyZ2V0UHJvcGVydHkpOwogCiAgICAgdmlydHVhbCB+Q0NBY3RpdmVBbmltYXRp
b24oKTsKQEAgLTEwNCw4ICs5Niw2IEBAIHB1YmxpYzoKICAgICAvLyBvZiBpdGVyYXRpb25zLCBy
ZXR1cm5zIHRoZSByZWxhdGl2ZSB0aW1lIGluIHRoZSBjdXJyZW50IGl0ZXJhdGlvbi4KICAgICBk
b3VibGUgdHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oZG91YmxlIG5vdykgY29uc3Q7CiAKLSAg
ICBBbmltYXRpb25TaWduYXR1cmUgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gQW5pbWF0aW9u
U2lnbmF0dXJlKG1fZ3JvdXAsIG1fdGFyZ2V0UHJvcGVydHkpOyB9Ci0KICAgICBQYXNzT3duUHRy
PENDQWN0aXZlQW5pbWF0aW9uPiBjbG9uZUZvckltcGxUaHJlYWQoKSBjb25zdDsKIAogICAgIHZv
aWQgc3luY2hyb25pemVQcm9wZXJ0aWVzKENDQWN0aXZlQW5pbWF0aW9uKik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlv
bkV2ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FuaW1hdGlvbkV2ZW50cy5jcHAKaW5kZXggOWY0MTg0NGNhMDVkMTM3YWMxZWQ3ZDhmMmE3
MTE4ZjQ0NDA2NjgwMS4uYjc3ZDAyYmVkOWFjOWUwMjJlMWE0NWVjYmJhMGQ3NDZiNzYyN2Y2OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBbmltYXRpb25FdmVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmNwcApAQCAtMzAsOCArMzAsOSBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNDQW5pbWF0aW9uRXZlbnQ6OkNDQW5pbWF0aW9uRXZl
bnQoaW50IGxheWVySWQpCitDQ0FuaW1hdGlvbkV2ZW50OjpDQ0FuaW1hdGlvbkV2ZW50KGludCBs
YXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkp
CiAgICAgOiBtX2xheWVySWQobGF5ZXJJZCkKKyAgICAsIG1fdGFyZ2V0UHJvcGVydHkodGFyZ2V0
UHJvcGVydHkpCiB7CiB9CiAKQEAgLTQ1LDE5ICs0NiwyNSBAQCBjb25zdCBDQ0FuaW1hdGlvblN0
YXJ0ZWRFdmVudCogQ0NBbmltYXRpb25FdmVudDo6dG9BbmltYXRpb25TdGFydGVkRXZlbnQoKSBj
b25zdAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVu
dCo+KHRoaXMpOwogfQogCi1jb25zdCBDQ0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQqIENDQW5pbWF0
aW9uRXZlbnQ6OnRvQW5pbWF0aW9uRmluaXNoZWRFdmVudCgpIGNvbnN0Citjb25zdCBDQ0Zsb2F0
QW5pbWF0aW9uRmluaXNoZWRFdmVudCogQ0NBbmltYXRpb25FdmVudDo6dG9GbG9hdEFuaW1hdGlv
bkZpbmlzaGVkRXZlbnQoKSBjb25zdAogewotICAgIEFTU0VSVCh0eXBlKCkgPT0gRmluaXNoZWQp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDQ0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQq
Pih0aGlzKTsKKyAgICBBU1NFUlQodHlwZSgpID09IEZpbmlzaGVkRmxvYXRBbmltYXRpb24pOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVu
dCo+KHRoaXMpOwogfQogCi1QYXNzT3duUHRyPENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50PiBDQ0Fu
aW1hdGlvblN0YXJ0ZWRFdmVudDo6Y3JlYXRlKGludCBsYXllcklkKQorY29uc3QgQ0NUcmFuc2Zv
cm1BbmltYXRpb25GaW5pc2hlZEV2ZW50KiBDQ0FuaW1hdGlvbkV2ZW50Ojp0b1RyYW5zZm9ybUFu
aW1hdGlvbkZpbmlzaGVkRXZlbnQoKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q0NBbmltYXRpb25TdGFydGVkRXZlbnQobGF5ZXJJZCkpOworICAgIEFTU0VSVCh0eXBlKCkgPT0g
RmluaXNoZWRUcmFuc2Zvcm1BbmltYXRpb24pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQqPih0aGlzKTsKIH0KIAotQ0NBbmlt
YXRpb25TdGFydGVkRXZlbnQ6OkNDQW5pbWF0aW9uU3RhcnRlZEV2ZW50KGludCBsYXllcklkKQot
ICAgIDogQ0NBbmltYXRpb25FdmVudChsYXllcklkKQorUGFzc093blB0cjxDQ0FuaW1hdGlvblN0
YXJ0ZWRFdmVudD4gQ0NBbmltYXRpb25TdGFydGVkRXZlbnQ6OmNyZWF0ZShpbnQgbGF5ZXJJZCwg
Q0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQoreworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25TdGFydGVkRXZlbnQobGF5ZXJJZCwgdGFy
Z2V0UHJvcGVydHkpKTsKK30KKworQ0NBbmltYXRpb25TdGFydGVkRXZlbnQ6OkNDQW5pbWF0aW9u
U3RhcnRlZEV2ZW50KGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVy
dHkgdGFyZ2V0UHJvcGVydHkpCisgICAgOiBDQ0FuaW1hdGlvbkV2ZW50KGxheWVySWQsIHRhcmdl
dFByb3BlcnR5KQogewogfQogCkBAIC03MCwyNCArNzcsNDQgQEAgQ0NBbmltYXRpb25FdmVudDo6
VHlwZSBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDo6dHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIFN0
YXJ0ZWQ7CiB9CiAKLVBhc3NPd25QdHI8Q0NBbmltYXRpb25GaW5pc2hlZEV2ZW50PiBDQ0FuaW1h
dGlvbkZpbmlzaGVkRXZlbnQ6OmNyZWF0ZShpbnQgbGF5ZXJJZCwgaW50IGFuaW1hdGlvbklkKQor
UGFzc093blB0cjxDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudD4gQ0NGbG9hdEFuaW1hdGlv
bkZpbmlzaGVkRXZlbnQ6OmNyZWF0ZShpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRh
cmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5LCBmbG9hdCBmaW5hbFZhbHVlKQoreworICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQobGF5ZXJJZCwg
dGFyZ2V0UHJvcGVydHksIGZpbmFsVmFsdWUpKTsKK30KKworQ0NGbG9hdEFuaW1hdGlvbkZpbmlz
aGVkRXZlbnQ6OkNDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50KGludCBsYXllcklkLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHksIGZsb2F0IGZpbmFs
VmFsdWUpCisgICAgOiBDQ0FuaW1hdGlvbkV2ZW50KGxheWVySWQsIHRhcmdldFByb3BlcnR5KQor
ICAgICwgbV9maW5hbFZhbHVlKGZpbmFsVmFsdWUpCit7Cit9CisKK0NDRmxvYXRBbmltYXRpb25G
aW5pc2hlZEV2ZW50Ojp+Q0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQoKQoreworfQorCitD
Q0FuaW1hdGlvbkV2ZW50OjpUeXBlIENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50Ojp0eXBl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmluaXNoZWRGbG9hdEFuaW1hdGlvbjsKK30KKworUGFz
c093blB0cjxDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ+IENDVHJhbnNmb3JtQW5p
bWF0aW9uRmluaXNoZWRFdmVudDo6Y3JlYXRlKGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHksIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBmaW5hbFZhbHVlKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25G
aW5pc2hlZEV2ZW50KGxheWVySWQsIGFuaW1hdGlvbklkKSk7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQobGF5ZXJJZCwgdGFyZ2V0UHJv
cGVydHksIGZpbmFsVmFsdWUpKTsKIH0KIAotQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50OjpDQ0Fu
aW1hdGlvbkZpbmlzaGVkRXZlbnQoaW50IGxheWVySWQsIGludCBhbmltYXRpb25JZCkKLSAgICA6
IENDQW5pbWF0aW9uRXZlbnQobGF5ZXJJZCkKLSAgICAsIG1fYW5pbWF0aW9uSWQoYW5pbWF0aW9u
SWQpCitDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OkNDVHJhbnNmb3JtQW5pbWF0
aW9uRmluaXNoZWRFdmVudChpbnQgbGF5ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFBy
b3BlcnR5IHRhcmdldFByb3BlcnR5LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZmluYWxW
YWx1ZSkKKyAgICA6IENDQW5pbWF0aW9uRXZlbnQobGF5ZXJJZCwgdGFyZ2V0UHJvcGVydHkpCisg
ICAgLCBtX2ZpbmFsVmFsdWUoZmluYWxWYWx1ZSkKIHsKIH0KIAotQ0NBbmltYXRpb25GaW5pc2hl
ZEV2ZW50Ojp+Q0NBbmltYXRpb25GaW5pc2hlZEV2ZW50KCkKK0NDVHJhbnNmb3JtQW5pbWF0aW9u
RmluaXNoZWRFdmVudDo6fkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCgpCiB7CiB9
CiAKLUNDQW5pbWF0aW9uRXZlbnQ6OlR5cGUgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50Ojp0eXBl
KCkgY29uc3QKK0NDQW5pbWF0aW9uRXZlbnQ6OlR5cGUgQ0NUcmFuc2Zvcm1BbmltYXRpb25GaW5p
c2hlZEV2ZW50Ojp0eXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRmluaXNoZWQ7CisgICAgcmV0
dXJuIEZpbmlzaGVkVHJhbnNmb3JtQW5pbWF0aW9uOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVudHMuaAppbmRleCBkYTk0ZTFlMjdkMTM4ODQ1
Yjg5M2Q1NjA4ZmI4NmM2NGFiZjlhMjc5Li5lMjRmNzVkYzdjMWIzZWM1Mjg1MDE4Y2RlMWFmOTdi
ODNhYTRkNjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkV2ZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmgKQEAgLTI1LDE3ICsy
NSwyMCBAQAogI2lmbmRlZiBDQ0FuaW1hdGlvbkV2ZW50c19oCiAjZGVmaW5lIENDQW5pbWF0aW9u
RXZlbnRzX2gKIAorI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisKICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDsKLWNsYXNzIENDQW5p
bWF0aW9uRmluaXNoZWRFdmVudDsKK2NsYXNzIENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50
OworY2xhc3MgQ0NUcmFuc2Zvcm1BbmltYXRpb25GaW5pc2hlZEV2ZW50OwogCiBjbGFzcyBDQ0Fu
aW1hdGlvbkV2ZW50IHsKIHB1YmxpYzoKLSAgICBlbnVtIFR5cGUgeyBTdGFydGVkLCBGaW5pc2hl
ZCB9OworICAgIGVudW0gVHlwZSB7IFN0YXJ0ZWQsIEZpbmlzaGVkRmxvYXRBbmltYXRpb24sIEZp
bmlzaGVkVHJhbnNmb3JtQW5pbWF0aW9uIH07CiAKICAgICB2aXJ0dWFsIH5DQ0FuaW1hdGlvbkV2
ZW50KCk7CiAKQEAgLTQzLDQ0ICs0Niw2NSBAQCBwdWJsaWM6CiAKICAgICBpbnQgbGF5ZXJJZCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJZDsgfQogCisgICAgQ0NBY3RpdmVBbmltYXRpb246OlRh
cmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRQcm9w
ZXJ0eTsgfQorCiAgICAgY29uc3QgQ0NBbmltYXRpb25TdGFydGVkRXZlbnQqIHRvQW5pbWF0aW9u
U3RhcnRlZEV2ZW50KCkgY29uc3Q7Ci0gICAgY29uc3QgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50
KiB0b0FuaW1hdGlvbkZpbmlzaGVkRXZlbnQoKSBjb25zdDsKKyAgICBjb25zdCBDQ0Zsb2F0QW5p
bWF0aW9uRmluaXNoZWRFdmVudCogdG9GbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQoKSBjb25z
dDsKKyAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQqIHRvVHJhbnNm
b3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ0NB
bmltYXRpb25FdmVudChpbnQgbGF5ZXJJZCk7CisgICAgQ0NBbmltYXRpb25FdmVudChpbnQgbGF5
ZXJJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KTsKIAogcHJpdmF0ZToKICAg
ICBpbnQgbV9sYXllcklkOworICAgIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSBt
X3RhcmdldFByb3BlcnR5OwogfTsKIAogLy8gSW5kaWNhdGVzIHRoYXQgYW4gYW5pbWF0aW9uIGhh
cyBzdGFydGVkIG9uIGEgcGFydGljdWxhciBsYXllci4KIGNsYXNzIENDQW5pbWF0aW9uU3RhcnRl
ZEV2ZW50IDogcHVibGljIENDQW5pbWF0aW9uRXZlbnQgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50PiBjcmVhdGUoaW50IGxheWVySWQpOwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50PiBjcmVhdGUoaW50
IGxheWVySWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CiAKICAgICB2aXJ0
dWFsIH5DQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudCgpOwogCiAgICAgdmlydHVhbCBUeXBlIHR5cGUo
KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVu
dChpbnQgbGF5ZXJJZCk7CisgICAgQ0NBbmltYXRpb25TdGFydGVkRXZlbnQoaW50IGxheWVySWQs
IENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CiB9OwogCi0vLyBJbmRpY2F0ZXMg
dGhhdCBhbiBhbmltYXRpb24gaGFzIHN0YXJ0ZWQgb24gYSBwYXJ0aWN1bGFyIGxheWVyLgotY2xh
c3MgQ0NBbmltYXRpb25GaW5pc2hlZEV2ZW50IDogcHVibGljIENDQW5pbWF0aW9uRXZlbnQgewor
Ly8gSW5kaWNhdGVzIHRoYXQgYSBmbG9hdCBhbmltYXRpb24gaGFzIGNvbXBsZXRlZC4KK2NsYXNz
IENDRmxvYXRBbmltYXRpb25GaW5pc2hlZEV2ZW50IDogcHVibGljIENDQW5pbWF0aW9uRXZlbnQg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDRmxvYXRBbmltYXRpb25GaW5pc2hl
ZEV2ZW50PiBjcmVhdGUoaW50IGxheWVySWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9w
ZXJ0eSwgZmxvYXQgZmluYWxWYWx1ZSk7CisKKyAgICB2aXJ0dWFsIH5DQ0Zsb2F0QW5pbWF0aW9u
RmluaXNoZWRFdmVudCgpOworCisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdDsKKworICAg
IGZsb2F0IGZpbmFsVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbmFsVmFsdWU7IH0KKworcHJp
dmF0ZToKKyAgICBDQ0Zsb2F0QW5pbWF0aW9uRmluaXNoZWRFdmVudChpbnQgbGF5ZXJJZCwgQ0NB
Y3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5LCBmbG9hdCBmaW5hbFZhbHVlKTsKKworICAg
IGZsb2F0IG1fZmluYWxWYWx1ZTsKK307CisKKy8vIEluZGljYXRlcyB0aGF0IGEgdHJhbnNmb3Jt
IGFuaW1hdGlvbiBoYXMgY29tcGxldGVkLgorY2xhc3MgQ0NUcmFuc2Zvcm1BbmltYXRpb25GaW5p
c2hlZEV2ZW50IDogcHVibGljIENDQW5pbWF0aW9uRXZlbnQgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzT3duUHRyPENDQW5pbWF0aW9uRmluaXNoZWRFdmVudD4gY3JlYXRlKGludCBsYXllcklk
LCBpbnQgYW5pbWF0aW9uSWQpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVHJhbnNmb3JtQW5p
bWF0aW9uRmluaXNoZWRFdmVudD4gY3JlYXRlKGludCBsYXllcklkLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VGFyZ2V0UHJvcGVydHksIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmaW5hbFZhbHVl
KTsKIAotICAgIHZpcnR1YWwgfkNDQW5pbWF0aW9uRmluaXNoZWRFdmVudCgpOworICAgIHZpcnR1
YWwgfkNDVHJhbnNmb3JtQW5pbWF0aW9uRmluaXNoZWRFdmVudCgpOwogCiAgICAgdmlydHVhbCBU
eXBlIHR5cGUoKSBjb25zdDsKIAotICAgIGludCBhbmltYXRpb25JZCgpIGNvbnN0IHsgcmV0dXJu
IG1fYW5pbWF0aW9uSWQ7IH0KKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZmluYWxW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmluYWxWYWx1ZTsgfQogCiBwcml2YXRlOgotICAgIEND
QW5pbWF0aW9uRmluaXNoZWRFdmVudChpbnQgbGF5ZXJJZCwgaW50IGFuaW1hdGlvbklkKTsKKyAg
ICBDQ1RyYW5zZm9ybUFuaW1hdGlvbkZpbmlzaGVkRXZlbnQoaW50IGxheWVySWQsIENDQWN0aXZl
QW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZp
bmFsVmFsdWUpOwogCi0gICAgaW50IG1fYW5pbWF0aW9uSWQ7CisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9maW5hbFZhbHVlOwogfTsKIAogdHlwZWRlZiBWZWN0b3I8T3duUHRyPENDQW5pbWF0
aW9uRXZlbnQ+ID4gQ0NBbmltYXRpb25FdmVudHNWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggYzNhZjQ0ZGY1NmM1ZWI5OTk1
ZDVjMmRiMzk4NzFjNDJkM2U1MGU5ZC4uYTBlNjAwYjI0MmJkMWY0NjhmYzRmNTYwMjViMzE2MTll
YjRmYzExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyLmNwcApAQCAtMjcsOSArMjcsOSBAQAogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiIC8vIGZvciBLZXlmcmFt
ZVZhbHVlTGlzdAorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAi
Y2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgi
CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
IApAQCAtNTYsMTAgKzU2LDYgQEAgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWwKICAgICBpZiAoYW5p
bWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEaXJlY3Rpb25TZXQoKSAmJiBhbmltYXRpb24tPmRpcmVj
dGlvbigpID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgZGVsYXkK
LSAgICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEZWxheVNldCgpICYmIGFuaW1hdGlv
bi0+ZGVsYXkoKSA+IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgLy8gRklYTUU6
IGFkZCBzdXBwb3J0IGZvciBmaWxscyBmb3J3YXJkcyBhbmQgZmlsbHMgYmFja3dhcmRzCiAgICAg
aWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24tPmlzRmlsbE1vZGVTZXQoKSAmJiAoYW5pbWF0aW9u
LT5maWxsc0ZvcndhcmRzKCkgfHwgYW5pbWF0aW9uLT5maWxsc0JhY2t3YXJkcygpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDUsNyArMTAxLDggQEAgUGFzc093blB0cjxDQ0FjdGl2
ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0
JiB2YWwKIAogfSAvLyBuYW1lcGFjZQogCi1DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKQorQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OkND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50
KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCiB7CiB9CiAKQEAgLTExMyw5ICsxMTAs
OSBAQCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6fkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyKCkKIHsKIH0KIAotUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpCitQYXNzT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyPiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcihjbGllbnQpKTsKIH0KIAogYm9vbCBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEludFNpemUmLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlv
biwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpCkBAIC0x
NjcsMzIgKzE2NCw3MSBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZXN1bWVB
bmltYXRpb25zKCkKIAogLy8gRW5zdXJlcyB0aGF0IHRoZSBsaXN0IG9mIGFjdGl2ZSBhbmltYXRp
b25zIG9uIHRoZSBtYWluIHRocmVhZCBhbmQgdGhlIGltcGwgdGhyZWFkCiAvLyBhcmUga2VwdCBp
biBzeW5jLgotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3luY2hyb25pemVBbmlt
YXRpb25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCit2
b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uVXBkYXRlc1RvKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKiBjb250cm9sbGVySW1wbCkKIHsKLSAgICByZW1vdmVD
b21wbGV0ZWRBbmltYXRpb25zKGNvbnRyb2xsZXJJbXBsKTsKICAgICBwdXNoTmV3QW5pbWF0aW9u
c1RvSW1wbFRocmVhZChjb250cm9sbGVySW1wbCk7CiAgICAgcmVtb3ZlQW5pbWF0aW9uc0NvbXBs
ZXRlZE9uTWFpblRocmVhZChjb250cm9sbGVySW1wbCk7Ci0gICAgcHVzaEFuaW1hdGlvblByb3Bl
cnRpZXMoY29udHJvbGxlckltcGwpOwogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpyZW1vdmVDb21wbGV0ZWRBbmltYXRpb25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbCogY29udHJvbGxlckltcGwpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjph
bmltYXRlKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciogZXZl
bnRzKQoreworICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhtb25vdG9uaWNU
aW1lLCBldmVudHMpOworICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUobW9u
b3RvbmljVGltZSwgZXZlbnRzKTsKKyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0
QXZhaWxhYmlsaXR5KG1vbm90b25pY1RpbWUsIGV2ZW50cyk7CisgICAgcmVzb2x2ZUNvbmZsaWN0
cyhtb25vdG9uaWNUaW1lKTsKKyAgICB0aWNrQW5pbWF0aW9ucyhtb25vdG9uaWNUaW1lKTsKKyAg
ICBwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucyhldmVudHMpOworICAgIHN0YXJ0QW5pbWF0aW9uc1dh
aXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkobW9ub3RvbmljVGltZSwgZXZlbnRzKTsKK30KKwor
dm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkKFBhc3NPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IGFuaW1hdGlvbikKIHsKLSAgICAvLyBBbnkgYW5pbWF0aW9ucyBmaW5pc2hlZCBv
biB0aGUgaW1wbCB0aHJlYWQgYXJlIHJlbW92ZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQncyBjb2xs
ZWN0aW9uLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udHJvbGxlckltcGwtPm1fZmlu
aXNoZWRBbmltYXRpb25zLnNpemUoKTsgKytpKQotICAgICAgICByZW1vdmUoY29udHJvbGxlcklt
cGwtPm1fZmluaXNoZWRBbmltYXRpb25zW2ldLmdyb3VwSWQsIGNvbnRyb2xsZXJJbXBsLT5tX2Zp
bmlzaGVkQW5pbWF0aW9uc1tpXS50YXJnZXRQcm9wZXJ0eSk7Ci0gICAgY29udHJvbGxlckltcGwt
Pm1fZmluaXNoZWRBbmltYXRpb25zLmNsZWFyKCk7CisgICAgbV9hY3RpdmVBbmltYXRpb25zLmFw
cGVuZChhbmltYXRpb24pOwogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpw
dXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwqIGNvbnRyb2xsZXJJbXBsKQorQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpnZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0
aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK3sKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cElkICYmIG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSB0YXJnZXRQcm9wZXJ0eSkKKyAgICAgICAgICAg
IHJldHVybiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0uZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K2Jvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6Omhhc0FjdGl2ZUFuaW1hdGlvbigpIGNv
bnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUo
KSAhPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ld
LT5ydW5TdGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6aXNBbmltYXRpbmdQcm9wZXJ0eShDQ0FjdGl2ZUFuaW1hdGlv
bjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpIGNvbnN0Cit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSAhPSBDQ0FjdGl2ZUFuaW1hdGlv
bjo6RmluaXNoZWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpICE9IENDQWN0
aXZlQW5pbWF0aW9uOjpBYm9ydGVkICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJv
cGVydHkoKSA9PSB0YXJnZXRQcm9wZXJ0eSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyKiBjb250cm9sbGVySW1wbCkKIHsKICAgICAvLyBBbnkgbmV3IGFuaW1hdGlvbnMgb3duZWQg
YnkgdGhlIG1haW4gdGhyZWFkJ3MgY29udHJvbGxlciBhcmUgY2xvbmVkIGFuZCBhZGRlIHRvIHRo
ZSBpbXBsIHRocmVhZCdzIGNvbnRyb2xsZXIuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFjb250cm9sbGVy
SW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSwg
bV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpKSkKLSAgICAgICAgICAgIGNv
bnRyb2xsZXJJbXBsLT5hZGQobV9hY3RpdmVBbmltYXRpb25zW2ldLT5jbG9uZUZvckltcGxUaHJl
YWQoKSk7CisgICAgICAgIGlmICghY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbiht
X2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCksIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFy
Z2V0UHJvcGVydHkoKSkpIHsKKyAgICAgICAgICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4g
dG9BZGQobV9hY3RpdmVBbmltYXRpb25zW2ldLT5jbG9uZUZvckltcGxUaHJlYWQoKSk7CisgICAg
ICAgICAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MgLS0gc2V0
IGl0IHRvIGJlIHdhaXRpbmcgdW50aWwgdGhlIHRhcmdldCBpcyBhdmFpbGFibGUuCisgICAgICAg
ICAgICAvLyBUaGF0IHdheSwgaXQgd2lsbCBoYXZlIGEgY2hhbmNlIHRvIHN0YXJ0IG9uIHRoZSBp
bXBsIHRocmVhZC4gT3RoZXJ3aXNlLCB3ZSB3aWxsIG5ldmVyIHRpY2sgYXQgdGhlCisgICAgICAg
ICAgICAvLyB2ZXJ5IGJlZ2lubmluZyBvZiB0aGUgYW5pbWF0aW9uLgorICAgICAgICAgICAgaWYg
KHRvQWRkLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nIHx8IHRvQWRk
LT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpQYXVzZWQpCisgICAgICAgICAgICAg
ICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0
QXZhaWxhYmlsaXR5LCAwKTsKKyAgICAgICAgICAgIGNvbnRyb2xsZXJJbXBsLT5hZGQodG9BZGQu
cmVsZWFzZSgpKTsKKyAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQordm9pZCBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciogY29udHJvbGxlckltcGwpCiB7CiAgICAgLy8gRGVs
ZXRlIGFsbCBpbXBsIHRocmVhZCBhbmltYXRpb25zIGZvciB3aGljaCB0aGVyZSBpcyBubyBjb3Jy
ZXNwb25kaW5nIG1haW4gdGhyZWFkIGFuaW1hdGlvbi4KICAgICAvLyBFYWNoIGl0ZXJhdGlvbiwg
Y29udHJvbGxlci0+bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKSBpcyBkZWNyZW1lbnRlZCBvciBp
IGlzIGluY3JlbWVudGVkCkBAIC0yMDYsNDMgKzI0MiwxNjkgQEAgdm9pZCBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChDQ0xh
eWVyQW4KICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hB
bmltYXRpb25Qcm9wZXJ0aWVzKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJv
bGxlckltcGwpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpzdGFydEFuaW1hdGlv
bnNXYWl0aW5nRm9yTmV4dFRpY2soZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yKiBldmVudHMpCiB7Ci0gICAgLy8gRGVsZXRlIGFsbCBpbXBsIHRocmVhZCBhbmlt
YXRpb25zIGZvciB3aGljaCB0aGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIG1haW4gdGhyZWFkIGFu
aW1hdGlvbi4KLSAgICAvLyBFYWNoIGl0ZXJhdGlvbiwgY29udHJvbGxlci0+bV9hY3RpdmVBbmlt
YXRpb25zLnNpemUoKSBpcyBkZWNyZW1lbnRlZCBvciBpIGlzIGluY3JlbWVudGVkCi0gICAgLy8g
Z3VhcmFudGVlaW5nIHByb2dyZXNzIHRvd2FyZHMgbG9vcCB0ZXJtaW5hdGlvbi4KLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgQ0NBY3RpdmVBbmltYXRpb24qIGN1cnJlbnRJbXBsID0gY29u
dHJvbGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9uc1tpXS5nZXQoKTsKLSAgICAgICAgQ0NBY3Rp
dmVBbmltYXRpb24qIGN1cnJlbnQgPSBnZXRBY3RpdmVBbmltYXRpb24oY3VycmVudEltcGwtPmdy
b3VwKCksIGN1cnJlbnRJbXBsLT50YXJnZXRQcm9wZXJ0eSgpKTsKLSAgICAgICAgQVNTRVJUKGN1
cnJlbnQpOwotICAgICAgICBpZiAoY3VycmVudCkKLSAgICAgICAgICAgIGN1cnJlbnQtPnN5bmNo
cm9uaXplUHJvcGVydGllcyhjdXJyZW50SW1wbCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zv
ck5leHRUaWNrKSB7CisgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0
YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBtb25vdG9uaWNUaW1lKTsKKyAgICAgICAg
ICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0U3RhcnRUaW1lKG1vbm90b25pY1RpbWUpOwor
ICAgICAgICAgICAgaWYgKGV2ZW50cykKKyAgICAgICAgICAgICAgICBldmVudHMtPmFwcGVuZChD
Q0FuaW1hdGlvblN0YXJ0ZWRFdmVudDo6Y3JlYXRlKG1fY2xpZW50LT5pZCgpLCBtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpKTsKKyAgICAgICAgfQogICAgIH0KIH0KIAot
Q0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpnZXRBY3RpdmVB
bmltYXRpb24oaW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0
YXJnZXRQcm9wZXJ0eSkKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN0YXJ0QW5p
bWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yKiBldmVudHMpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3JvdXBJZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRh
cmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCi0gICAgICAgICAgICByZXR1cm4gbV9h
Y3RpdmVBbmltYXRpb25zW2ldLmdldCgpOwotICAgIHJldHVybiAwOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
IChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246
OldhaXRpbmdGb3JTdGFydFRpbWUgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zdGFydFRpbWUo
KSA8PSBtb25vdG9uaWNUaW1lKSB7CisgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBtb25vdG9uaWNUaW1lKTsK
KyAgICAgICAgICAgIGlmIChldmVudHMpCisgICAgICAgICAgICAgICAgZXZlbnRzLT5hcHBlbmQo
Q0NBbmltYXRpb25TdGFydGVkRXZlbnQ6OmNyZWF0ZShtX2NsaWVudC0+aWQoKSwgbV9hY3RpdmVB
bmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpKSk7CisgICAgICAgIH0KKyAgICB9CiB9CiAK
LWJvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmlzQW5pbWF0aW5nUHJvcGVydHkoQ0NB
Y3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KSBjb25zdAordm9p
ZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRh
cmdldEF2YWlsYWJpbGl0eShkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNW
ZWN0b3IqIGV2ZW50cykKIHsKKyAgICAvLyBGaXJzdCBjb2xsZWN0IHJ1bm5pbmcgcHJvcGVydGll
cy4KKyAgICBUYXJnZXRQcm9wZXJ0aWVzIGJsb2NrZWRQcm9wZXJ0aWVzOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRp
b246OkZpbmlzaGVkICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSAhPSBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFBy
b3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFu
aW1hdGlvbjo6UnVubmluZyB8fCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0g
Q0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkKQorICAgICAgICAgICAgYmxvY2tlZFByb3BlcnRp
ZXMuYWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSk7CisgICAgfQor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBD
Q0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSkgeworICAgICAg
ICAgICAgLy8gQ29sbGVjdCBhbGwgcHJvcGVydGllcyBmb3IgYW5pbWF0aW9ucyB3aXRoIHRoZSBz
YW1lIGdyb3VwIGlkICh0aGV5IHNob3VsZCBhbGwgYWxzbyBiZSBpbiB0aGUgbGlzdCBvZiBhbmlt
YXRpb25zKS4KKyAgICAgICAgICAgIFRhcmdldFByb3BlcnRpZXMgZW5xdWV1ZWRQcm9wZXJ0aWVz
OworICAgICAgICAgICAgZW5xdWV1ZWRQcm9wZXJ0aWVzLmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPnRhcmdldFByb3BlcnR5KCkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAx
OyBqIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAg
aWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBtX2FjdGl2ZUFuaW1hdGlvbnNb
al0tPmdyb3VwKCkpCisgICAgICAgICAgICAgICAgICAgIGVucXVldWVkUHJvcGVydGllcy5hZGQo
bV9hY3RpdmVBbmltYXRpb25zW2pdLT50YXJnZXRQcm9wZXJ0eSgpKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGludGVyc2VjdGlvbiBvZiB0aGUgbGlz
dCBvZiBwcm9wZXJ0aWVzIGFmZmVjdGVkIGJ5IHRoZSBncm91cCBhbmQgdGhlIGxpc3Qgb2YgY3Vy
cmVudGx5CisgICAgICAgICAgICAvLyBibG9ja2VkIHByb3BlcnRpZXMgaXMgbnVsbC4gSW4gYW55
IGNhc2UsIHRoZSBncm91cCdzIHRhcmdldCBwcm9wZXJ0aWVzIG5lZWQgdG8gYmUgYWRkZWQgdG8g
dGhlIGxpc3QKKyAgICAgICAgICAgIC8vIG9mIGJsb2NrZWQgcHJvcGVydGllcy4KKyAgICAgICAg
ICAgIGJvb2wgbnVsbEludGVyc2VjdGlvbiA9IHRydWU7CisgICAgICAgICAgICBmb3IgKFRhcmdl
dFByb3BlcnRpZXM6Oml0ZXJhdG9yIHBJdGVyID0gZW5xdWV1ZWRQcm9wZXJ0aWVzLmJlZ2luKCk7
IHBJdGVyICE9IGVucXVldWVkUHJvcGVydGllcy5lbmQoKTsgKytwSXRlcikgeworICAgICAgICAg
ICAgICAgIGlmICghYmxvY2tlZFByb3BlcnRpZXMuYWRkKCpwSXRlcikuc2Vjb25kKQorICAgICAg
ICAgICAgICAgICAgICBudWxsSW50ZXJzZWN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIElmIHRoZSBpbnRlcnNlY3Rpb24gaXMgbnVsbCwgdGhlbiB3ZSBhcmUg
ZnJlZSB0byBzdGFydCB0aGUgYW5pbWF0aW9ucyBpbiB0aGUgZ3JvdXAuCisgICAgICAgICAgICBp
ZiAobnVsbEludGVyc2VjdGlvbikgeworICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG1vbm90b25pY1Rp
bWUpOworICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0U3RhcnRUaW1l
KG1vbm90b25pY1RpbWUpOworICAgICAgICAgICAgICAgIGlmIChldmVudHMpCisgICAgICAgICAg
ICAgICAgICAgIGV2ZW50cy0+YXBwZW5kKENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50OjpjcmVhdGUo
bV9jbGllbnQtPmlkKCksIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSkp
OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5p
bWF0aW9ucy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVB
bmltYXRpb25zW2ldLT5ncm91cCgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRSdW5T
dGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbW9ub3RvbmljVGltZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnNldFN0YXJ0VGltZShtb25v
dG9uaWNUaW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZShpbnQgZ3JvdXBJZCwgQ0NBY3Rp
dmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQordm9pZCBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzb2x2ZUNvbmZsaWN0cyhkb3VibGUgbW9ub3RvbmljVGlt
ZSkKIHsKKyAgICAvLyBGaW5kIGFueSBhbmltYXRpb25zIHRoYXQgYXJlIGFuaW1hdGluZyB0aGUg
c2FtZSBwcm9wZXJ0eSBhbmQgcmVzb2x2ZSB0aGUKKyAgICAvLyBjb25maWN0LiBXZSBjb3VsZCBl
dmVudHVhbGx5IGJsZW5kLCBidXQgZm9yIG5vdyB3ZSdsbCBqdXN0IGFib3J0IHRoZQorICAgIC8v
IHByZXZpb3VzIGFuaW1hdGlvbiAod2hlcmUgJ3ByZXZpb3VzJyBtZWFuczogKDEpIGhhcyBhIHBy
aW9yIHN0YXJ0IHRpbWUgb3IKKyAgICAvLyAoMikgaGFzIGFuIGVxdWFsIHN0YXJ0IHRpbWUsIGJ1
dCB3YXMgYWRkZWQgdG8gdGhlIHF1ZXVlIGVhcmxpZXIsIGkuZS4sCisgICAgLy8gaGFzIGEgbG93
ZXIgaW5kZXggaW4gbV9hY3RpdmVBbmltYXRpb25zKS4KICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3Rp
dmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IGdyb3VwSWQgJiYgbV9hY3RpdmVBbmltYXRpb25z
W2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdldFByb3BlcnR5KSB7Ci0gICAgICAgICAgICBt
X2FjdGl2ZUFuaW1hdGlvbnMucmVtb3ZlKGkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0
aW9uOjpSdW5uaW5nKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBt
X2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAobV9h
Y3RpdmVBbmltYXRpb25zW2pdLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5u
aW5nICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSBtX2FjdGl2
ZUFuaW1hdGlvbnNbal0tPnRhcmdldFByb3BlcnR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c3RhcnRUaW1lKCkgPiBtX2FjdGl2ZUFuaW1hdGlv
bnNbal0tPnN0YXJ0VGltZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmlt
YXRpb25zW2pdLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgbW9ub3Rv
bmljVGltZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246
OkFib3J0ZWQsIG1vbm90b25pY1RpbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6cHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMoQ0NBbmltYXRpb25FdmVudHNWZWN0b3IqIGV2ZW50
cykKK3sKKyAgICAvLyBFYWNoIGl0ZXJhdGlvbiwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKSBk
ZWNyZWFzZXMgb3IgaSBpbmNyZW1lbnRzLAorICAgIC8vIGd1YXJhbnRlZWluZyBwcm9ncmVzcyB0
b3dhcmRzIGxvb3AgdGVybWluYXRpb24uCisgICAgc2l6ZV90IGkgPSAwOworICAgIHdoaWxlIChp
IDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKSkgeworICAgICAgICBpbnQgZ3JvdXBJZCA9IG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKTsKKyAgICAgICAgYm9vbCBhbGxBbmltc1dpdGhT
YW1lSWRBcmVGaW5pc2hlZCA9IGZhbHNlOworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25z
W2ldLT5pc0ZpbmlzaGVkKCkpIHsKKyAgICAgICAgICAgIGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZp
bmlzaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV9hY3Rp
dmVBbmltYXRpb25zLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKGdyb3VwSWQg
PT0gbV9hY3RpdmVBbmltYXRpb25zW2pdLT5ncm91cCgpICYmICFtX2FjdGl2ZUFuaW1hdGlvbnNb
al0tPmlzRmluaXNoZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBhbGxBbmltc1dpdGhTYW1l
SWRBcmVGaW5pc2hlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFsbEFu
aW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkKSB7CisgICAgICAgICAgICAvLyBXZSBub3cgbmVlZCB0
byByZW1vdmUgYWxsIGFuaW1hdGlvbnMgd2l0aCB0aGUgc2FtZSBncm91cCBpZCBhcyBncm91cElk
CisgICAgICAgICAgICAvLyAoYW5kIHNlbmQgYWxvbmcgYW5pbWF0aW9uIGZpbmlzaGVkIG5vdGlm
aWNhdGlvbnMsIGlmIG5lY2Vzc2FyeSkuCisgICAgICAgICAgICAvLyBFYWNoIGl0ZXJhdGlvbiwg
bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKSBkZWNyZWFzZXMgb3IgaiBpbmNyZW1lbnRzLAorICAg
ICAgICAgICAgLy8gZ3VhcmFudGVlaW5nIHByb2dyZXNzIHRvd2FyZHMgbG9vcCB0ZXJtaW5hdGlv
bi4gQWxzbywgd2UgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgICAgIC8vIHRvIHJlbW92ZSBhdCBs
ZWFzdCBvbmUgYWN0aXZlIGFuaW1hdGlvbi4KKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBp
OyBqIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTspIHsKKyAgICAgICAgICAgICAgICBpZiAo
Z3JvdXBJZCAhPSBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPmdyb3VwKCkpCisgICAgICAgICAgICAg
ICAgICAgIGorKzsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGV2ZW50cykgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtX2FjdGl2ZUFu
aW1hdGlvbnNbal0tPnRhcmdldFByb3BlcnR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHk6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXZlbnRzLT5hcHBlbmQoQ0NGbG9hdEFuaW1hdGlvbkZpbmlzaGVkRXZlbnQ6OmNyZWF0
ZShtX2NsaWVudC0+aWQoKSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHksIG1fY2xpZW50LT5v
cGFjaXR5KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybToKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBldmVudHMtPmFwcGVuZChDQ1RyYW5zZm9ybUFuaW1hdGlv
bkZpbmlzaGVkRXZlbnQ6OmNyZWF0ZShtX2NsaWVudC0+aWQoKSwgQ0NBY3RpdmVBbmltYXRpb246
OlRyYW5zZm9ybSwgbV9jbGllbnQtPnRyYW5zZm9ybSgpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShq
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgaSsrOworICAgIH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6dGlja0FuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY1RpbWUpCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlv
bjo6UnVubmluZykgeworICAgICAgICAgICAgZG91YmxlIHRyaW1tZWQgPSBtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKG1vbm90b25pY1RpbWUpOworCisg
ICAgICAgICAgICBzd2l0Y2ggKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHko
KSkgeworCisgICAgICAgICAgICBjYXNlIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm06IHsK
KyAgICAgICAgICAgICAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiB0cmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZSA9IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Y3VydmUoKS0+dG9UcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1hdHJpeCA9IHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLT5nZXRWYWx1ZSh0cmlt
bWVkLCBtX2NsaWVudC0+Ym91bmRzKCkpOworICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPmlzRmluaXNoZWRBdChtb25vdG9uaWNUaW1lKSkKKyAgICAgICAgICAgICAg
ICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlv
bjo6RmluaXNoZWQsIG1vbm90b25pY1RpbWUpOworCisgICAgICAgICAgICAgICAgbV9jbGllbnQt
PnNldFRyYW5zZm9ybUZyb21BbmltYXRpb24obWF0cml4KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eTogeworICAgICAgICAgICAgICAgIGNvbnN0IENDRmxvYXRBbmltYXRpb25DdXJ2ZSog
ZmxvYXRBbmltYXRpb25DdXJ2ZSA9IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Y3VydmUoKS0+dG9G
bG9hdEFuaW1hdGlvbkN1cnZlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgb3BhY2l0
eSA9IGZsb2F0QW5pbWF0aW9uQ3VydmUtPmdldFZhbHVlKHRyaW1tZWQpOworICAgICAgICAgICAg
ICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlzRmluaXNoZWRBdChtb25vdG9uaWNUaW1l
KSkKKyAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0
ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQsIG1vbm90b25pY1RpbWUpOworCisgICAgICAg
ICAgICAgICAgbV9jbGllbnQtPnNldE9wYWNpdHlGcm9tQW5pbWF0aW9uKG9wYWNpdHkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIuaAppbmRleCBmMmY2NmViMjQ0ZWYwYWIyNzU3ZDI5MDU0ZjhjNDE5ZjQ2ZTRkOTBmLi41
N2I1YmFiZWI1NjczMzIwOTZkMTVkOWQyMTlkZjBmMDVmZjE2ODNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKQEAgLTI2LDI2ICsyNiw0MSBAQAog
I2RlZmluZSBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcl9oCiAKICNpbmNsdWRlICJjYy9DQ0Fj
dGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNs
dWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgogCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQW5pbWF0aW9uOwotY2xhc3MgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsOwogY2xhc3MgSW50U2l6ZTsKIGNsYXNzIEtleWZyYW1lVmFsdWVM
aXN0OworY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CisKK2NsYXNzIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckNsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHlGcm9tQW5pbWF0aW9uKGZsb2F0KSA9IDA7
CisgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jikg
PSAwOworICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0ID0g
MDsKK307CiAKIGNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZSgpOwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjcmVhdGUo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQqKTsKIAogICAgIHZpcnR1YWwgfkNDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKCk7CiAKLSAgICAvLyBUaGVzZSBhcmUgdmlydHVhbCBmb3Ig
dGVzdGluZy4KKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB2aXJ0dWFsIGZvciB0ZXN0aW5nLgog
ICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBj
b25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBpbnQgYW5pbWF0aW9uSWQs
IGludCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCk7CiAgICAgdmlydHVhbCB2b2lkIHBhdXNl
QW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQpOwogICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVBbmltYXRpb24oaW50IGFuaW1hdGlvbklkKTsKQEAgLTU0LDIzICs2OSw0
MSBAQCBwdWJsaWM6CiAKICAgICAvLyBFbnN1cmVzIHRoYXQgdGhlIGxpc3Qgb2YgYWN0aXZlIGFu
aW1hdGlvbnMgb24gdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgaW1wbCB0aHJlYWQKICAgICAvLyBh
cmUga2VwdCBpbiBzeW5jLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2Ugb3duZXJzaGlwIG9m
IHRoZSBpbXBsIHRocmVhZCBjb250cm9sbGVyLgotICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6
ZUFuaW1hdGlvbnMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7CisgICAgdmlydHVh
bCB2b2lkIHB1c2hBbmltYXRpb25VcGRhdGVzVG8oQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIq
KTsKKworICAgIHZvaWQgYW5pbWF0ZShkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25F
dmVudHNWZWN0b3IqKTsKIAotICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgfQorICAgIHZvaWQgYWRkKFBhc3NPd25Q
dHI8Q0NBY3RpdmVBbmltYXRpb24+KTsKKworICAgIC8vIFJldHVybnMgdGhlIGFjdGl2ZSBhbmlt
YXRpb24gaW4gdGhlIGdpdmVuIGdyb3VwLCBhbmltYXRpbmcgdGhlIGdpdmVuIHByb3BlcnR5IGlm
IHN1Y2ggYW4KKyAgICAvLyBhbmltYXRpb24gZXhpc3RzLgogICAgIENDQWN0aXZlQW5pbWF0aW9u
KiBnZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJn
ZXRQcm9wZXJ0eSk7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIGFueSBhbmlt
YXRpb25zIHRoYXQgaGF2ZSBuZWl0aGVyIGZpbmlzaGVkIG5vciBhYm9ydGVkLgorICAgIGJvb2wg
aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
cmUgaXMgYW4gYW5pbWF0aW9uIGN1cnJlbnRseSBhbmltYXRpbmcgdGhlIGdpdmVuIHByb3BlcnR5
LCBvcgorICAgIC8vIGlmIHRoZXJlIGlzIGFuIGFuaW1hdGlvbiBzY2hlZHVsZWQgdG8gYW5pbWF0
ZSB0aGlzIHByb3BlcnR5IGluIHRoZSBmdXR1cmUuCiAgICAgYm9vbCBpc0FuaW1hdGluZ1Byb3Bl
cnR5KENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSkgY29uc3Q7CiAKIHByb3RlY3Rl
ZDoKLSAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOworICAgIGV4cGxpY2l0IENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50Kik7
CiAKIHByaXZhdGU6Ci0gICAgdm9pZCByZW1vdmVDb21wbGV0ZWRBbmltYXRpb25zKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbCopOwotICAgIHZvaWQgcHVzaE5ld0FuaW1hdGlvbnNUb0lt
cGxUaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7Ci0gICAgdm9pZCByZW1v
dmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbCopOwotICAgIHZvaWQgcHVzaEFuaW1hdGlvblByb3BlcnRpZXMoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsKik7CisgICAgdHlwZWRlZiBIYXNoU2V0PGludD4gVGFyZ2V0UHJv
cGVydGllczsKKworICAgIHZvaWQgcHVzaE5ld0FuaW1hdGlvbnNUb0ltcGxUaHJlYWQoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIqKTsKKyAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbnNDb21wbGV0
ZWRPbk1haW5UaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqKTsKKworICAgIHZvaWQg
c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBD
Q0FuaW1hdGlvbkV2ZW50c1ZlY3RvciopOworICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGlu
Z0ZvclN0YXJ0VGltZShkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0
b3IqKTsKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxp
dHkoZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKik7CisgICAg
dm9pZCByZXNvbHZlQ29uZmxpY3RzKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKKyAgICB2b2lkIHB1
cmdlRmluaXNoZWRBbmltYXRpb25zKENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKik7CiAKLSAgICB2
b2lkIHJlbW92ZShpbnQgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5
KTsKKyAgICB2b2lkIHRpY2tBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKIAorICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICBWZWN0b3I8
T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiA+IG1fYWN0aXZlQW5pbWF0aW9uczsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTllOTFiMmUyYTRlNDU5ZGUwZGVmN2Yx
NmUyOWQ0MTBhZGQzMDUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCi0KLSNpbmNsdWRlICJUcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0vLyBBIGNvbGxlY3Rpb24gb2YgcHJvcGVydGllcy4gVXNlZCB3aGVu
IGRldGVyaW1pbmluZyBpZiBhbmltYXRpb25zIHdhaXRpbmcgZm9yIHRhcmdldAotLy8gYXZhaWxp
YmlsaXR5IGFyZSBhYmxlIHRvIHJ1bi4KLXR5cGVkZWYgSGFzaFNldDxpbnQ+IFRhcmdldFByb3Bl
cnRpZXM7Ci0KLVBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxDbGllbnQqIGNsaWVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbChjbGllbnQpKTsKLX0KLQotQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KiBjbGllbnQpCi0gICAgOiBtX2NsaWVudChjbGll
bnQpCi17Ci19Ci0KLUNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6fkNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbCgpCi17Ci19Ci0KLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjphbmltYXRlKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50
c1ZlY3RvciYgZXZlbnRzKQotewotICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGlj
ayhtb25vdG9uaWNUaW1lLCBldmVudHMpOwotICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JT
dGFydFRpbWUobW9ub3RvbmljVGltZSwgZXZlbnRzKTsKLSAgICBzdGFydEFuaW1hdGlvbnNXYWl0
aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KG1vbm90b25pY1RpbWUsIGV2ZW50cyk7Ci0gICAgcmVz
b2x2ZUNvbmZsaWN0cyhtb25vdG9uaWNUaW1lKTsKLSAgICB0aWNrQW5pbWF0aW9ucyhtb25vdG9u
aWNUaW1lKTsKLSAgICBwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucyhldmVudHMpOwotICAgIHN0YXJ0
QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkobW9ub3RvbmljVGltZSwgZXZl
bnRzKTsKLX0KLQotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFkZChQYXNz
T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltKQotewotICAgIG1fYWN0aXZlQW5pbWF0aW9u
cy5hcHBlbmQoYW5pbSk7Ci19Ci0KLUNDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OmdldEFjdGl2ZUFuaW1hdGlvbihpbnQgZ3JvdXBJZCwgQ0NBY3RpdmVB
bmltYXRpb246OlRhcmdldFByb3BlcnR5IHByb3BlcnR5KQotewotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICht
X2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3JvdXBJZCAmJiBtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gcHJvcGVydHkpCi0gICAgICAgICAgICByZXR1
cm4gbV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0K
LQotYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Omhhc0FjdGl2ZUFuaW1hdGlv
bigpIGNvbnN0Ci17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlv
bnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVu
U3RhdGUoKSAhPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQgJiYgbV9hY3RpdmVBbmltYXRp
b25zW2ldLT5ydW5TdGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmlzQW5pbWF0aW5nUHJvcGVydHkoQ0NBY3Rp
dmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KSBjb25zdAotewotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3Rp
dmVBbmltYXRpb246OkZpbmlzaGVkICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUo
KSAhPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJs
ZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYgZXZlbnRzKQotewotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3Rp
dmVBbmltYXRpb246OldhaXRpbmdGb3JOZXh0VGljaykgewotICAgICAgICAgICAgbV9hY3RpdmVB
bmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbW9u
b3RvbmljVGltZSk7Ci0gICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFN0YXJ0
VGltZShtb25vdG9uaWNUaW1lKTsKLSAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoQ0NBbmltYXRp
b25TdGFydGVkRXZlbnQ6OmNyZWF0ZShtX2NsaWVudC0+aWQoKSkpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRp
b25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25F
dmVudHNWZWN0b3ImIGV2ZW50cykKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0
aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRp
b25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRU
aW1lICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c3RhcnRUaW1lKCkgPD0gbW9ub3RvbmljVGlt
ZSkgewotICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0Fj
dGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbW9ub3RvbmljVGltZSk7Ci0gICAgICAgICAgICBldmVu
dHMuYXBwZW5kKENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50OjpjcmVhdGUobV9jbGllbnQtPmlkKCkp
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91Ymxl
IG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiBldmVudHMpCi17Ci0gICAg
Ly8gRmlyc3QgY29sbGVjdCBydW5uaW5nIHByb3BlcnRpZXMuCi0gICAgVGFyZ2V0UHJvcGVydGll
cyBibG9ja2VkUHJvcGVydGllczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZl
QW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25z
W2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nIHx8IG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQp
Ci0gICAgICAgICAgICBibG9ja2VkUHJvcGVydGllcy5hZGQobV9hY3RpdmVBbmltYXRpb25zW2ld
LT50YXJnZXRQcm9wZXJ0eSgpKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVB
bmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9y
VGFyZ2V0QXZhaWxhYmlsaXR5KSB7Ci0gICAgICAgICAgICAvLyBDb2xsZWN0IGFsbCBwcm9wZXJ0
aWVzIGZvciBhbmltYXRpb25zIHdpdGggdGhlIHNhbWUgZ3JvdXAgaWQgKHRoZXkgc2hvdWxkIGFs
bCBhbHNvIGJlIGluIHRoZSBsaXN0IG9mIGFuaW1hdGlvbnMpLgotICAgICAgICAgICAgVGFyZ2V0
UHJvcGVydGllcyBlbnF1ZXVlZFByb3BlcnRpZXM7Ci0gICAgICAgICAgICBlbnF1ZXVlZFByb3Bl
cnRpZXMuYWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSk7Ci0gICAg
ICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6
ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5n
cm91cCgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkKLSAgICAgICAgICAgICAg
ICAgICAgZW5xdWV1ZWRQcm9wZXJ0aWVzLmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnRhcmdl
dFByb3BlcnR5KCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBDaGVjayB0byBz
ZWUgaWYgaW50ZXJzZWN0aW9uIG9mIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgYWZmZWN0ZWQgYnkg
dGhlIGdyb3VwIGFuZCB0aGUgbGlzdCBvZiBjdXJyZW50bHkKLSAgICAgICAgICAgIC8vIGJsb2Nr
ZWQgcHJvcGVydGllcyBpcyBudWxsLiBJbiBhbnkgY2FzZSwgdGhlIGdyb3VwJ3MgdGFyZ2V0IHBy
b3BlcnRpZXMgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgbGlzdAotICAgICAgICAgICAgLy8gb2Yg
YmxvY2tlZCBwcm9wZXJ0aWVzLgotICAgICAgICAgICAgYm9vbCBudWxsSW50ZXJzZWN0aW9uID0g
dHJ1ZTsKLSAgICAgICAgICAgIGZvciAoVGFyZ2V0UHJvcGVydGllczo6aXRlcmF0b3IgcEl0ZXIg
PSBlbnF1ZXVlZFByb3BlcnRpZXMuYmVnaW4oKTsgcEl0ZXIgIT0gZW5xdWV1ZWRQcm9wZXJ0aWVz
LmVuZCgpOyArK3BJdGVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFibG9ja2VkUHJvcGVydGll
cy5hZGQoKnBJdGVyKS5zZWNvbmQpCi0gICAgICAgICAgICAgICAgICAgIG51bGxJbnRlcnNlY3Rp
b24gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgdGhlIGludGVy
c2VjdGlvbiBpcyBudWxsLCB0aGVuIHdlIGFyZSBmcmVlIHRvIHN0YXJ0IHRoZSBhbmltYXRpb25z
IGluIHRoZSBncm91cC4KLSAgICAgICAgICAgIGlmIChudWxsSW50ZXJzZWN0aW9uKSB7Ci0gICAg
ICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6UnVubmluZywgbW9ub3RvbmljVGltZSk7Ci0gICAgICAgICAgICAgICAgbV9hY3Rp
dmVBbmltYXRpb25zW2ldLT5zZXRTdGFydFRpbWUobW9ub3RvbmljVGltZSk7Ci0gICAgICAgICAg
ICAgICAgZXZlbnRzLmFwcGVuZChDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudDo6Y3JlYXRlKG1fY2xp
ZW50LT5pZCgpKSk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwg
bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gbV9hY3RpdmVBbmltYXRpb25zW2pd
LT5ncm91cCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNb
al0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBtb25vdG9uaWNUaW1l
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+c2V0U3Rh
cnRUaW1lKG1vbm90b25pY1RpbWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cmVzb2x2ZUNvbmZsaWN0cyhkb3VibGUgbW9ub3Rv
bmljVGltZSkKLXsKLSAgICAvLyBGaW5kIGFueSBhbmltYXRpb25zIHRoYXQgYXJlIGFuaW1hdGlu
ZyB0aGUgc2FtZSBwcm9wZXJ0eSBhbmQgcmVzb2x2ZSB0aGUKLSAgICAvLyBjb25maWN0LiBXZSBj
b3VsZCBldmVudHVhbGx5IGJsZW5kLCBidXQgZm9yIG5vdyB3ZSdsbCBqdXN0IGFib3J0IHRoZQot
ICAgIC8vIHByZXZpb3VzIGFuaW1hdGlvbiAod2hlcmUgJ3ByZXZpb3VzJyBtZWFuczogKDEpIGhh
cyBhIHByaW9yIHN0YXJ0IHRpbWUgb3IKLSAgICAvLyAoMikgaGFzIGFuIGVxdWFsIHN0YXJ0IHRp
bWUsIGJ1dCB3YXMgYWRkZWQgdG8gdGhlIHF1ZXVlIGVhcmxpZXIsIGkuZS4sCi0gICAgLy8gaGFz
IGEgbG93ZXIgaW5kZXggaW4gbV9hY3RpdmVBbmltYXRpb25zKS4KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAo
bV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpS
dW5uaW5nKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FjdGl2
ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVB
bmltYXRpb25zW2pdLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nICYm
IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSBtX2FjdGl2ZUFuaW1h
dGlvbnNbal0tPnRhcmdldFByb3BlcnR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+c3RhcnRUaW1lKCkgPiBtX2FjdGl2ZUFuaW1hdGlvbnNbal0t
PnN0YXJ0VGltZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25z
W2pdLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgbW9ub3RvbmljVGlt
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkFib3J0
ZWQsIG1vbm90b25pY1RpbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OnB1cmdlRmluaXNoZWRBbmltYXRpb25zKENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiBldmVudHMp
Ci17Ci0gICAgLy8gRWFjaCBpdGVyYXRpb24sIG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkgZGVj
cmVhc2VzIG9yIGkgaW5jcmVtZW50cywKLSAgICAvLyBndWFyYW50ZWVpbmcgcHJvZ3Jlc3MgdG93
YXJkcyBsb29wIHRlcm1pbmF0aW9uLgotICAgIHNpemVfdCBpID0gMDsKLSAgICB3aGlsZSAoaSA8
IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkpIHsKLSAgICAgICAgYm9vbCBhbGxBbmltc1dpdGhT
YW1lSWRBcmVGaW5pc2hlZCA9IGZhbHNlOwotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25z
W2ldLT5pc0ZpbmlzaGVkKCkpIHsKLSAgICAgICAgICAgIGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZp
bmlzaGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1f
YWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIGlmIChtX2Fj
dGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gbV9hY3RpdmVBbmltYXRpb25zW2pdLT5ncm91
cCgpICYmICFtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPmlzRmluaXNoZWQoKSkgewotICAgICAgICAg
ICAgICAgICAgICBhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkKSB7Ci0g
ICAgICAgICAgICBldmVudHMuYXBwZW5kKENDQW5pbWF0aW9uRmluaXNoZWRFdmVudDo6Y3JlYXRl
KG1fY2xpZW50LT5pZCgpLCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlkKCkpKTsKLSAgICAgICAg
ICAgIG1fZmluaXNoZWRBbmltYXRpb25zLmFwcGVuZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNp
Z25hdHVyZSgpKTsKLSAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaSsrOwotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnRpY2tBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNU
aW1lKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRl
KCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcpIHsKLSAgICAgICAgICAgIGRvdWJsZSB0
cmltbWVkID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlv
bihtb25vdG9uaWNUaW1lKTsKLQotICAgICAgICAgICAgc3dpdGNoIChtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPnRhcmdldFByb3BlcnR5KCkpIHsKLQotICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VHJhbnNmb3JtOiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ0NUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZSogdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgPSBtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKLSAgICAgICAgICAg
ICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSB0cmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZS0+Z2V0VmFsdWUodHJpbW1lZCwgbV9jbGllbnQtPmJvdW5kcygpKTsKLSAgICAgICAg
ICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5pc0ZpbmlzaGVkQXQobW9ub3Rvbmlj
VGltZSkpCi0gICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVu
U3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkLCBtb25vdG9uaWNUaW1lKTsKLQotICAg
ICAgICAgICAgICAgIG1fY2xpZW50LT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eTogewotICAgICAgICAgICAgICAgIGNvbnN0IENDRmxvYXRBbmltYXRp
b25DdXJ2ZSogZmxvYXRBbmltYXRpb25DdXJ2ZSA9IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Y3Vy
dmUoKS0+dG9GbG9hdEFuaW1hdGlvbkN1cnZlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgZmxv
YXQgb3BhY2l0eSA9IGZsb2F0QW5pbWF0aW9uQ3VydmUtPmdldFZhbHVlKHRyaW1tZWQpOwotICAg
ICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlzRmluaXNoZWRBdChtb25v
dG9uaWNUaW1lKSkKLSAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5z
ZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQsIG1vbm90b25pY1RpbWUpOwot
Ci0gICAgICAgICAgICAgICAgbV9jbGllbnQtPnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0gLy8gc3dpdGNo
Ci0gICAgICAgIH0gLy8gaWYgcnVubmluZwotICAgIH0gLy8gZm9yIGVhY2ggYW5pbWF0aW9uCi19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDg5Mzk2YmQ5NTkxZmI3NDMyNWQ4MjViNmFmOWFhYTQxNWFhZDA1NzEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbF9oCi0jZGVmaW5lIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbF9oCi0KLSNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgotI2luY2x1
ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKLSNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50
cy5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOwotY2xhc3MgSW50U2l6ZTsKLWNsYXNz
IFRyYW5zZm9ybWF0aW9uTWF0cml4OwotY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uczsKLQotY2xh
c3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQoKSB7IH0KLQotICAg
IHZpcnR1YWwgaW50IGlkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgPSAwOwotICAg
IHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JikgPSAwOwotICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgPSAw
OwotfTsKLQotY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsIHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwpOwotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4g
Y3JlYXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCopOwotCi0gICAgdmly
dHVhbCB+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKCk7Ci0KLSAgICB2b2lkIGFuaW1h
dGUoZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJik7Ci0KLSAg
ICB2b2lkIGFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPik7Ci0KLSAgICAvLyBSZXR1
cm5zIHRoZSBhY3RpdmUgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBncm91cCwgYW5pbWF0aW5nIHRo
ZSBnaXZlbiBwcm9wZXJ0eSBpZiBzdWNoIGFuCi0gICAgLy8gYW5pbWF0aW9uIGV4aXN0cy4KLSAg
ICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoZXJlIGFyZSBhbnkgYW5pbWF0aW9ucyB0aGF0IGFyZSBuZWl0aGVyIGZpbmlzaGVkIG5vciBh
Ym9ydGVkLgotICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3Q7Ci0KLSAgICBib29s
IGlzQW5pbWF0aW5nUHJvcGVydHkoQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI7Ci0KLSAgICAvLyBUaGUgYW5pbWF0b3IgaXMgb3duZWQgYnkgdGhlIGxheWVyLgotICAg
IGV4cGxpY2l0IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxDbGllbnQqKTsKLQotICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGlu
Z0Zvck5leHRUaWNrKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
ciYpOwotICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUg
bW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImKTsKLSAgICB2b2lkIHN0YXJ0
QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91YmxlIG1vbm90b25pY1Rp
bWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJik7Ci0gICAgdm9pZCByZXNvbHZlQ29uZmxpY3Rz
KGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKLSAgICB2b2lkIHB1cmdlRmluaXNoZWRBbmltYXRpb25z
KENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJik7Ci0KLSAgICB2b2lkIHRpY2tBbmltYXRpb25zKGRv
dWJsZSBtb25vdG9uaWNUaW1lKTsKLQotICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bENsaWVudCogbV9jbGllbnQ7Ci0gICAgVmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4g
PiBtX2FjdGl2ZUFuaW1hdGlvbnM7Ci0gICAgVmVjdG9yPENDQWN0aXZlQW5pbWF0aW9uOjpBbmlt
YXRpb25TaWduYXR1cmU+IG1fZmluaXNoZWRBbmltYXRpb25zOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsX2gK
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaAppbmRleCBhNzY0
Y2MzN2JkY2M3ZWUzZTg5YTdlODcyYmVkMDI1ZTYyY2IxZGE4Li40Yzg4YTkyMTFlYzQwNzNiYTdh
NDk2MDM0N2VjMDFmYmNjODNkZDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uRGVsZWdhdGUuaApAQCAtMzEsNyArMzEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBDQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSB0aW1lKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IG5vdGlmeUFuaW1hdGlvbkZpbmlzaGVkKGludCBhbmltYXRpb25JZCkgPSAwOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDM0ZDYwMDgw
MmFlNWZiMTA0MWMwMzJlZTEyMjYwODgxMmMxMDZlNDQuLmQ3ZTJiOGEwZDRhYmM2YzA1NmUwZTM4
YjhhNDRhNDZhOTE1OTRjZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTMzLDcgKzMz
LDYgQEAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCi0jaW5j
bHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NMYXllclNvcnRlci5oIgogI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgogI2luY2x1ZGUg
ImNjL0NDU29saWRDb2xvckRyYXdRdWFkLmgiCkBAIC03MCw3ICs2OSw3IEBAIENDTGF5ZXJJbXBs
OjpDQ0xheWVySW1wbChpbnQgaWQpCiAgICAgLCBtX2RlYnVnQm9yZGVyV2lkdGgoMCkKICAgICAs
IG1fZHJhd1RyYW5zZm9ybUlzQW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9zY3JlZW5TcGFjZVRy
YW5zZm9ybUlzQW5pbWF0aW5nKGZhbHNlKQotICAgICwgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUodGhpcykpCisgICAgLCBt
X2xheWVyQW5pbWF0aW9uQ29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3Jl
YXRlKHRoaXMpKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiB9CkBA
IC0zMTAsNiArMzA5LDE2IEBAIHZvaWQgQ0NMYXllckltcGw6OnJlc2V0QWxsQ2hhbmdlVHJhY2tp
bmdGb3JTdWJ0cmVlKCkKICAgICAgICAgbV9jaGlsZHJlbltpXS0+cmVzZXRBbGxDaGFuZ2VUcmFj
a2luZ0ZvclN1YnRyZWUoKTsKIH0KIAordm9pZCBDQ0xheWVySW1wbDo6c2V0T3BhY2l0eUZyb21B
bmltYXRpb24oZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBzZXRPcGFjaXR5KG9wYWNpdHkpOworfQor
Cit2b2lkIENDTGF5ZXJJbXBsOjpzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgc2V0VHJhbnNmb3JtKHRyYW5zZm9y
bSk7Cit9CisKIHZvaWQgQ0NMYXllckltcGw6OnNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBib3Vu
ZHMpCiB7CiAgICAgaWYgKG1fYm91bmRzID09IGJvdW5kcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmlu
ZGV4IDgxOTc1OGY2MjA0MzljZjlmYjZhYzA5ZWJiNTA2NjI0NDczMjY2YTEuLjZmMDJlZjgyNzQy
NTg2Yjg0NTQzMTE1ZWVmZDA3N2JmZDY0NGRlOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAt
MzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0u
aCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgImNjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00
OCwyOCArNDgsMjMgQEAgY2xhc3MgQ0NRdWFkQ3VsbGVyOwogY2xhc3MgTGF5ZXJDaHJvbWl1bTsK
IGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIAotY2xhc3MgQ0NMYXllckltcGwgOiBwdWJs
aWMgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IHsKK2NsYXNzIENDTGF5ZXJJ
bXBsIDogcHVibGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVySW1wbD4gY3JlYXRlKGludCBpZCkKICAgICB7
CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllckltcGwoaWQpKTsKICAgICB9CiAK
LSAgICAvLyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgaW1wbGVtZW50YXRp
b24uCi0gICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7IH0KKyAg
ICB2aXJ0dWFsIH5DQ0xheWVySW1wbCgpOwogCi0gICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHko
ZmxvYXQpOworICAgIC8vIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGltcGxlbWVu
dGF0aW9uLgorICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcklkOyB9
CisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHlGcm9tQW5pbWF0aW9uKGZsb2F0KTsKICAgICB2
aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KLSAgICBi
b29sIG9wYWNpdHlJc0FuaW1hdGluZygpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFRy
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAg
ICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLSAgICBib29sIHRyYW5zZm9ybUlzQW5pbWF0aW5nKCkg
Y29uc3Q7Ci0KICAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIG1fYm91bmRzOyB9CiAKLSAgICB2aXJ0dWFsIH5DQ0xheWVySW1wbCgpOwotCiAgICAgLy8g
VHJlZSBzdHJ1Y3R1cmUuCiAgICAgQ0NMYXllckltcGwqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFyZW50OyB9CiAgICAgY29uc3QgVmVjdG9yPE93blB0cjxDQ0xheWVySW1wbD4gPiYgY2hp
bGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CkBAIC0xMjQsNiArMTE5LDkgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0T3BhcXVlKGJvb2wpOwogICAgIGJvb2wgb3BhcXVlKCkgY29u
c3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KIAorICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7Cisg
ICAgYm9vbCBvcGFjaXR5SXNBbmltYXRpbmcoKSBjb25zdDsKKwogICAgIHZvaWQgc2V0UG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludCYpOwogICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogCkBAIC0yMDgsNiArMjA2LDkgQEAgcHVibGlj
OgogICAgIC8vIFJldHVybnMgdGhlIHJlY3QgY29udGFpbnRhaW5pbmcgdGhpcyBsYXllciBpbiB0
aGUgY3VycmVudCB2aWV3J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgY29uc3QgSW50UmVjdCBn
ZXREcmF3UmVjdCgpIGNvbnN0OwogCisgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmKTsKKyAgICBib29sIHRyYW5zZm9ybUlzQW5pbWF0aW5nKCkgY29uc3Q7
CisKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQogICAgIHZvaWQgc2V0RHJhd1RyYW5zZm9ybShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fZHJhd1RyYW5zZm9ybSA9IG1h
dHJpeDsgfQogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm07IH0KQEAgLTIyOCw3
ICsyMjksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBsYXllclByb3BlcnR5Q2hhbmdlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQ7IH0KICAgICB2b2lkIHJlc2V0QWxsQ2hh
bmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7CiAKLSAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwqIGxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fbGF5ZXJBbmltYXRp
b25Db250cm9sbGVyLmdldCgpOyB9CisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGxh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fbGF5ZXJBbmltYXRpb25Db250cm9s
bGVyLmdldCgpOyB9CiAKICAgICB2aXJ0dWFsIFJlZ2lvbiBvcGFxdWVDb250ZW50c1JlZ2lvbigp
IGNvbnN0IHsgcmV0dXJuIFJlZ2lvbigpOyB9OwogCkBAIC0zNTgsNyArMzU5LDcgQEAgcHJpdmF0
ZToKICAgICBGbG9hdFJlY3QgbV91cGRhdGVSZWN0OwogCiAgICAgLy8gTWFuYWdlcyBhbmltYXRp
b25zIGZvciB0aGlzIGxheWVyLgotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw+IG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyOworICAgIE93blB0cjxDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcj4gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CiB9OwogCiB2b2lk
IHNvcnRMYXllcnMoVmVjdG9yPENDTGF5ZXJJbXBsKj46Oml0ZXJhdG9yIGZpcnN0LCBWZWN0b3I8
Q0NMYXllckltcGwqPjo6aXRlcmF0b3IgZW5kLCBDQ0xheWVyU29ydGVyKik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAppbmRleCAwMTc4MjBhN2M3MGUxYjkzZmM2MmE0ZGY0NzY2NDUy
ODY5NzAzNWExLi5kMWZkODllZmVjNGVhZjI0MGRiYzg4MzgxYTg1NDhlYzRjZDQxYjdiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJSZWdpb24uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNo
cm9uaXplci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgpAQCAtNjQs
NiArNjUsNyBAQCBQYXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4gQ0NMYXllclRyZWVIb3N0Ojpj
cmVhdGUoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbgogQ0NMYXllclRyZWVIb3N0OjpDQ0xh
eWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIGNvbnN0IENDU2V0dGlu
Z3MmIHNldHRpbmdzKQogICAgIDogbV9jb21wb3NpdG9ySWRlbnRpZmllcigtMSkKICAgICAsIG1f
YW5pbWF0aW5nKGZhbHNlKQorICAgICwgbV9uZWVkc0FuaW1hdGVMYXllcnMoZmFsc2UpCiAgICAg
LCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2ZyYW1lTnVtYmVyKDApCiAgICAgLCBtX2xheWVy
UmVuZGVyZXJJbml0aWFsaXplZChmYWxzZSkKQEAgLTE4MSw2ICsxODMsNyBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6dXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgZnJhbWVCZWdpblRpbWUpCiB7CiAg
ICAgbV9hbmltYXRpbmcgPSB0cnVlOwogICAgIG1fY2xpZW50LT51cGRhdGVBbmltYXRpb25zKGZy
YW1lQmVnaW5UaW1lKTsKKyAgICBhbmltYXRlTGF5ZXJzKG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpKTsKICAgICBtX2FuaW1hdGluZyA9IGZhbHNlOwogfQogCkBAIC0yMDksOSArMjEyLDEy
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGxUaHJlYWQoQ0NMYXll
clRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAKICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRy
ZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5y
ZWxlYXNlUm9vdExheWVyKCkpKTsKIAotICAgIC8vIFdlIG1heSBoYXZlIGFkZGVkIGFuIGFuaW1h
dGlvbiBkdXJpbmcgdGhlIHRyZWUgc3luYy4gVGhpcyB3aWxsIGNhdXNlIGhvc3RJbXBsIHRvIHZp
c2l0IGl0cyBjb250cm9sbGVycy4KLSAgICBpZiAocm9vdExheWVyKCkpCisgICAgLy8gV2UgbWF5
IGhhdmUgYWRkZWQgYW4gYW5pbWF0aW9uIGR1cmluZyB0aGUgdHJlZSBzeW5jLiBUaGlzIHdpbGwg
Y2F1c2UgYm90aCBsYXllciB0cmVlIGhvc3RzCisgICAgLy8gdG8gdmlzaXQgdGhlaXIgY29udHJv
bGxlcnMuCisgICAgaWYgKHJvb3RMYXllcigpKSB7CiAgICAgICAgIGhvc3RJbXBsLT5zZXROZWVk
c0FuaW1hdGVMYXllcnMoKTsKKyAgICAgICAgbV9uZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVlOwor
ICAgIH0KIAogICAgIGhvc3RJbXBsLT5zZXRTb3VyY2VGcmFtZU51bWJlcihmcmFtZU51bWJlcigp
KTsKICAgICBob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHZpZXdwb3J0U2l6ZSgpKTsKQEAgLTM4
Niw5ICszOTIsMTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9u
SW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW0KIAogICAgIGhvc3RJbXBsLT5z
ZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIo
KSwgaG9zdEltcGwtPnJlbGVhc2VSb290TGF5ZXIoKSkpOwogCi0gICAgLy8gV2UgbWF5IGhhdmUg
YWRkZWQgYW4gYW5pbWF0aW9uIGR1cmluZyB0aGUgdHJlZSBzeW5jLiBUaGlzIHdpbGwgY2F1c2Ug
aG9zdEltcGwgdG8gdmlzaXQgaXRzIGNvbnRyb2xsZXJzLgotICAgIGlmIChyb290TGF5ZXIoKSkK
KyAgICAvLyBXZSBtYXkgaGF2ZSBhZGRlZCBhbiBhbmltYXRpb24gZHVyaW5nIHRoZSB0cmVlIHN5
bmMuIFRoaXMgd2lsbCBjYXVzZSBib3RoIGxheWVyIHRyZWUgaG9zdHMKKyAgICAvLyB0byB2aXNp
dCB0aGVpciBjb250cm9sbGVycy4KKyAgICBpZiAocm9vdExheWVyKCkpIHsKICAgICAgICAgaG9z
dEltcGwtPnNldE5lZWRzQW5pbWF0ZUxheWVycygpOworICAgICAgICBtX25lZWRzQW5pbWF0ZUxh
eWVycyA9IHRydWU7CisgICAgfQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3RhcnRQYWdl
U2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sIGJvb2wgdXNlQW5j
aG9yLCBmbG9hdCBzY2FsZSwgZG91YmxlIGR1cmF0aW9uU2VjKQpAQCAtNjQyLDYgKzY1MSwzMyBA
QCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlVGV4dHVyZUFmdGVyQ29tbWl0KFBhc3NPd25Q
dHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cgogICAgIG1fZGVsZXRlVGV4dHVyZUFmdGVyQ29tbWl0
TGlzdC5hcHBlbmQodGV4dHVyZSk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRl
TGF5ZXJzKGRvdWJsZSBtb25vdG9uaWNUaW1lKQoreworICAgIGlmICghbV9zZXR0aW5ncy50aHJl
YWRlZEFuaW1hdGlvbkVuYWJsZWQgfHwgIW1fbmVlZHNBbmltYXRlTGF5ZXJzIHx8ICFtX3Jvb3RM
YXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dEltcGw6OmFuaW1hdGVMYXllcnMiLCB0aGlzLCAwKTsKKyAgICBtX25lZWRzQW5pbWF0ZUxheWVy
cyA9IGFuaW1hdGVMYXllcnNSZWN1cnNpdmUobV9yb290TGF5ZXIuZ2V0KCksIG1vbm90b25pY1Rp
bWUpOworfQorCitib29sIENDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShM
YXllckNocm9taXVtKiBjdXJyZW50LCBkb3VibGUgbW9ub3RvbmljVGltZSkKK3sKKyAgICBib29s
IHN1YnRyZWVOZWVkc0FuaW1hdGVMYXllcnMgPSBmYWxzZTsKKyAgICBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlciogY3VycmVudENvbnRyb2xsZXIgPSBjdXJyZW50LT5sYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIoKTsKKyAgICBjdXJyZW50Q29udHJvbGxlci0+YW5pbWF0ZShtb25vdG9uaWNUaW1l
LCAwKTsKKworICAgIC8vIElmIHRoZSBjdXJyZW50IGNvbnRyb2xsZXIgc3RpbGwgaGFzIGFuIGFj
dGl2ZSBhbmltYXRpb24sIHdlIG11c3QgY29udGludWUgYW5pbWF0aW5nIGxheWVycy4KKyAgICBp
ZiAoY3VycmVudENvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKQorICAgICAgICAgc3Vi
dHJlZU5lZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGN1cnJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGFuaW1h
dGVMYXllcnNSZWN1cnNpdmUoY3VycmVudC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgbW9ub3Rvbmlj
VGltZSkpCisgICAgICAgICAgICBzdWJ0cmVlTmVlZHNBbmltYXRlTGF5ZXJzID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gc3VidHJlZU5lZWRzQW5pbWF0ZUxheWVyczsKK30KKwogdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnNldEFuaW1hdGlvbkV2ZW50c1JlY3Vyc2l2ZShjb25zdCBDQ0FuaW1h
dGlvbkV2ZW50c1ZlY3RvciYgZXZlbnRzLCBMYXllckNocm9taXVtKiBsYXllciwgZG91YmxlIHdh
bGxDbG9ja1RpbWUpCiB7CiAgICAgZm9yIChzaXplX3QgZXZlbnRJbmRleCA9IDA7IGV2ZW50SW5k
ZXggPCBldmVudHMuc2l6ZSgpOyArK2V2ZW50SW5kZXgpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmgKaW5kZXggODlmMWJlMzA3ZWRmYzkxNmQ2MDllMDg1YTM1NTIyNjc3NjIzZWM4Ny4uZjc0
OWE2YjAzZDE3ZjQ0ZWQ2MTk4NGZlOTgwMmFhMDEwZDhlNjFiZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmgKQEAgLTIyNSwxMSArMjI1LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXNl
cnZlVGV4dHVyZXMoKTsKICAgICB2b2lkIGNsZWFyUGVuZGluZ1VwZGF0ZSgpOwogCisgICAgdm9p
ZCBhbmltYXRlTGF5ZXJzKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKKyAgICBib29sIGFuaW1hdGVM
YXllcnNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogY3VycmVudCwgZG91YmxlIG1vbm90b25pY1Rp
bWUpOwogICAgIHZvaWQgc2V0QW5pbWF0aW9uRXZlbnRzUmVjdXJzaXZlKGNvbnN0IENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yJiwgTGF5ZXJDaHJvbWl1bSosIGRvdWJsZSB3YWxsQ2xvY2tUaW1lKTsK
IAogICAgIGludCBtX2NvbXBvc2l0b3JJZGVudGlmaWVyOwogCiAgICAgYm9vbCBtX2FuaW1hdGlu
ZzsKKyAgICBib29sIG1fbmVlZHNBbmltYXRlTGF5ZXJzOwogCiAgICAgQ0NMYXllclRyZWVIb3N0
Q2xpZW50KiBtX2NsaWVudDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5jcHAKaW5kZXggZWU2YmY5OGE1MjM2ZDdhYjFkZDA4YmJhZjczZWQ1YzNkYTYzYTZjOS4uOTEy
NGIwNzY1OTAxMzFmZjhjNmFmNDgxNGYyMTZmMTdkMTI0NzZjOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29t
bW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAi
TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmlt
YXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcAppbmRleCBkZDJkNDJhNDcxN2FhYTBlZmE1YmFjYzhhM2MyOWYyNmIwMjRk
Yjg4Li5hZDg5MmYyOGY0NWZjN2I5ZDQyYjA2NDZkOTg0YjhmYzQ2MTU5NjZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMzE1LDE1ICszMTUsMTUgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNz
TGlzdCYgcGFzc2VzLCBDQ0xheWUKICAgICBvY2NsdXNpb25UcmFja2VyLm92ZXJkcmF3TWV0cmlj
cygpLnJlY29yZE1ldHJpY3ModGhpcyk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
YW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShDQ0xheWVySW1wbCogY3VycmVudCwgZG91YmxlIG1vbm90
b25pY1RpbWUsIGRvdWJsZSB3YWxsQ2xvY2tUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYg
ZXZlbnRzLCBib29sJiBkaWRBbmltYXRlLCBib29sJiBuZWVkc0FuaW1hdGVMYXllcnMpCit2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnNSZWN1cnNpdmUoQ0NMYXllckltcGwq
IGN1cnJlbnQsIGRvdWJsZSBtb25vdG9uaWNUaW1lLCBkb3VibGUgd2FsbENsb2NrVGltZSwgQ0NB
bmltYXRpb25FdmVudHNWZWN0b3IqIGV2ZW50cywgYm9vbCYgZGlkQW5pbWF0ZSwgYm9vbCYgbmVl
ZHNBbmltYXRlTGF5ZXJzKQogewogICAgIGJvb2wgc3VidHJlZU5lZWRzQW5pbWF0ZUxheWVycyA9
IGZhbHNlOwogCi0gICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjdXJyZW50Q29u
dHJvbGxlciA9IGN1cnJlbnQtPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOworICAgIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKiBjdXJyZW50Q29udHJvbGxlciA9IGN1cnJlbnQtPmxheWVy
QW5pbWF0aW9uQ29udHJvbGxlcigpOwogCiAgICAgYm9vbCBoYWRBY3RpdmVBbmltYXRpb24gPSBj
dXJyZW50Q29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCk7CiAgICAgY3VycmVudENvbnRy
b2xsZXItPmFuaW1hdGUobW9ub3RvbmljVGltZSwgZXZlbnRzKTsKLSAgICBib29sIHN0YXJ0ZWRB
bmltYXRpb24gPSBldmVudHMuc2l6ZSgpID4gMDsKKyAgICBib29sIHN0YXJ0ZWRBbmltYXRpb24g
PSBldmVudHMtPnNpemUoKSA+IDA7CiAKICAgICAvLyBXZSBhbmltYXRlZCBpZiB3ZSBlaXRoZXIg
dGlja2VkIGEgcnVubmluZyBhbmltYXRpb24sIG9yIHN0YXJ0ZWQgYSBuZXcgYW5pbWF0aW9uLgog
ICAgIGlmIChoYWRBY3RpdmVBbmltYXRpb24gfHwgc3RhcnRlZEFuaW1hdGlvbikKQEAgLTc4Myw3
ICs3ODMsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMoZG91Ymxl
IG1vbm90b25pY1RpbWUsIGRvdWJsZSB3YWxsQ2xvY2tUaQogICAgIE93blB0cjxDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cikpOwogCiAgICAgYm9vbCBkaWRBbmltYXRlID0gZmFsc2U7Ci0gICAgYW5pbWF0ZUxheWVyc1Jl
Y3Vyc2l2ZShtX3Jvb3RMYXllckltcGwuZ2V0KCksIG1vbm90b25pY1RpbWUsIHdhbGxDbG9ja1Rp
bWUsICpldmVudHMsIGRpZEFuaW1hdGUsIG1fbmVlZHNBbmltYXRlTGF5ZXJzKTsKKyAgICBhbmlt
YXRlTGF5ZXJzUmVjdXJzaXZlKG1fcm9vdExheWVySW1wbC5nZXQoKSwgbW9ub3RvbmljVGltZSwg
d2FsbENsb2NrVGltZSwgZXZlbnRzLmdldCgpLCBkaWRBbmltYXRlLCBtX25lZWRzQW5pbWF0ZUxh
eWVycyk7CiAKICAgICBpZiAoIWV2ZW50cy0+aXNFbXB0eSgpKQogICAgICAgICBtX2NsaWVudC0+
cG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChldmVudHMucmVsZWFz
ZSgpLCB3YWxsQ2xvY2tUaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApp
bmRleCAwZGFlNjA0NjgyNDJlOWIxNDI2NjdkNzA3Y2ExZTViOTQwMmRiZTIxLi4zMTQ5NDc0YzRi
NThhNWM1ZDBlZTcwYjYzYTYxMWFlMmU4MmMxMmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oCkBAIC0xNjMsNyArMTYzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0
ZU1heFNjcm9sbFBvc2l0aW9uKCk7CiAgICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2Vz
KENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7CiAgICAgdm9pZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQ
YXNzTGlzdCYsIENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKLSAgICB2b2lk
IGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoQ0NMYXllckltcGwqLCBkb3VibGUgbW9ub3RvbmljVGlt
ZSwgZG91YmxlIHdhbGxDbG9ja1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiwgYm9vbCYg
ZGlkQW5pbWF0ZSwgYm9vbCYgbmVlZHNBbmltYXRlTGF5ZXJzKTsKKyAgICB2b2lkIGFuaW1hdGVM
YXllcnNSZWN1cnNpdmUoQ0NMYXllckltcGwqLCBkb3VibGUgbW9ub3RvbmljVGltZSwgZG91Ymxl
IHdhbGxDbG9ja1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKiwgYm9vbCYgZGlkQW5pbWF0
ZSwgYm9vbCYgbmVlZHNBbmltYXRlTGF5ZXJzKTsKICAgICBJbnRTaXplIGNvbnRlbnRTaXplKCkg
Y29uc3Q7CiAgICAgdm9pZCBzZW5kRGlkTG9zZUNvbnRleHRSZWN1cnNpdmUoQ0NMYXllckltcGwq
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCmluZGV4IDllNTI0YTc2M2UyODUwZmQyMDljMTNl
MzUyNjEyZWM1Y2EzMDQ5ZTEuLmU3YmFkYTY0MDZmYWRhMzU5YTNhODE5YzlkZjNmMWY1ZDhmMTBl
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAgLTkyLDcgKzkyLDcgQEAgcHJpdmF0ZToK
IAogICAgIC8vIFNldCBvbiBpbXBsIHRocmVhZCwgcmVhZCBvbiBtYWluIHRocmVhZC4KICAgICBz
dHJ1Y3QgQmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlIHsKLSAgICAgICAgQmVnaW5GcmFtZUFuZENv
bW1pdFN0YXRlKCkgOiBmcmFtZUJlZ2luVGltZSgwKSB7IH0KKyAgICAgICAgQmVnaW5GcmFtZUFu
ZENvbW1pdFN0YXRlKCkgOiBmcmFtZUJlZ2luVGltZSgpIHsgfQogICAgICAgICBkb3VibGUgZnJh
bWVCZWdpblRpbWU7CiAgICAgICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJ
bmZvOwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCA2YTYzNDE2YjY5
ZGIxMjZhMjA5OTNlZmUyYzVjZTEwZGNkZjA1NTFiLi5lMjY3YTViZDNkYjkzY2RiMmM3Zjg5MmMy
MTZiODk3MmYzMzM3ZjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTY3LDcg
KzY3LDYgQEAKICAgICAgICAgICAgICd0ZXN0cy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAnLAot
ICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9DQ0xheWVySXRlcmF0b3JUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAKaW5kZXggYzkyNDBl
MzFmY2M2YjdmMDBjMWI2OTM3ZmE3NjkxYmIwM2I0NWRjMy4uYzIyZTQzMjJiOTE3ODRmODIxYWNj
MjJkN2Q2MTYzNmRlNTY1YTg5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcApAQCAtMTA2LDEyICsxMDYsMTIgQEAg
ZmxvYXQgRmFrZUZsb2F0VHJhbnNpdGlvbjo6Z2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0CiAg
ICAgcmV0dXJuICgxIC0gdGltZSkgKiBtX2Zyb20gKyB0aW1lICogbV90bzsKIH0KIAotRmFrZUxh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQ6OkZha2VMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsQ2xpZW50KCkKK0Zha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQ6OkZh
a2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQoKQogICAgIDogbV9vcGFjaXR5KDApCiB7
CiB9CiAKLUZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50Ojp+RmFrZUxheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQoKQorRmFrZUxheWVyQW5pbWF0aW9uQ29udHJv
bGxlckNsaWVudDo6fkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQoKQogewogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVz
dENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RD
b21tb24uaAppbmRleCBkMTNlNzRjYTE3MWVlOTM5YmM2MTBmOTM0YjAzMzg2ZDE2NzY3ZGNlLi4x
NDY0MTRlMzAxYmE0ODcxNmZhNDcwODRlM2UxNDJhMThiZTRlNjNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgKQEAgLTI2
LDEyICsyNiwxMSBAQAogI2RlZmluZSBDQ0FuaW1hdGlvblRlc3RDb21tb25faAogCiAjaW5jbHVk
ZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
LmgiCiAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNs
YXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOwogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKIH0K
IApAQCAtNzcsMTYgKzc2LDE3IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV90bzsKIH07CiAKLWNs
YXNzIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IDogcHVibGljIFdlYkNv
cmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCB7CitjbGFzcyBGYWtlTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbENsaWVudCgpOwotICAgIHZpcnR1YWwgfkZha2VMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsQ2xpZW50KCk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNs
aWVudCgpOworICAgIHZpcnR1YWwgfkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQo
KTsKIAorICAgIC8vIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGltcGxlbWVudGF0
aW9uCiAgICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVh
bCB2b2lkIHNldE9wYWNpdHlGcm9tQW5pbWF0aW9uKGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5
ID0gb3BhY2l0eTsgfQogICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fb3BhY2l0eTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkp
IHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm1G
cm9tQW5pbWF0aW9uKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm0pIHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IH0KICAgICB2aXJ0dWFsIGNvbnN0IFdlYkNv
cmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3Ry
YW5zZm9ybTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9y
bTsgfQogICAgIHZpcnR1YWwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gbV9ib3VuZHM7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbFRlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWFlY2NjNTM5YTVk
NTFkZmYxOGEyYmU3YzQyZWViYTE0NTdlZmJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOTYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiQ0NB
bmltYXRpb25UZXN0Q29tbW9uLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmgiCi0jaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgotI2luY2x1ZGUg
ImNjL0NDQW5pbWF0aW9uRXZlbnRzLmgiCi0jaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KLSNpbmNs
dWRlIDxndGVzdC9ndGVzdC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7Ci0KLW5hbWVzcGFj
ZSB7Ci0KLVBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBpbnQgaWQsIENDQWN0aXZlQW5p
bWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSBwcm9wZXJ0eSkKLXsKLSAgICByZXR1cm4gQ0NBY3RpdmVB
bmltYXRpb246OmNyZWF0ZShjdXJ2ZSwgMCwgaWQsIHByb3BlcnR5KTsKLX0KLQotLy8gVGVzdHMg
dGhhdCB0cmFuc2l0aW9uaW5nIG9wYWNpdHkgZnJvbSAwIHRvIDEgd29ya3MgYXMgZXhwZWN0ZWQu
Ci1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxUcmFuc2l0
aW9uKQotewotICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0
UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwotICAgIEZha2VMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0
aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0g
ICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7Ci0gICAgY29udHJvbGxlci0+YW5p
bWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3Bh
Y2l0eSgpKTsKLSAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwotfQotCi0vLyBUZXN0cyB0aGF0IHR3byBxdWV1ZWQgYW5pbWF0aW9ucyBhZmZlY3Rpbmcg
dGhlIHNhbWUgcHJvcGVydHkgcnVuIGluIHNlcXVlbmNlLgotVEVTVChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxUZXN0LCBUcml2aWFsUXVldWluZykKLXsKLSAgICBPd25QdHI8Q0NBbmlt
YXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNW
ZWN0b3IpKTsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1t
eTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVy
KAotICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkp
KTsKLQotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIo
bmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRz
KTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0g
ICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3Bh
Y2l0eSgpKTsKLSAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwotfQotCi0vLyBUZXN0cyBpbnRlcnJ1cHRpbmcgYSB0cmFuc2l0aW9uIHdpdGggYW5vdGhl
ciB0cmFuc2l0aW9uLgotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBJ
bnRlcnJ1cHQpCi17Ci0gICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMo
YWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7Ci0gICAgRmFrZUxheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAw
LCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+
YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0KLSAg
ICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihh
ZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5p
bWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2ssIDApOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0Fk
ZC5yZWxlYXNlKCkpOwotCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsICpldmVudHMpOyAv
LyBzZWNvbmQgYW5pbSBzdGFydHMgTk9XLgotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsK
LSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX0VRKDAu
NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKLX0KLQotLy8gVGVzdHMgc2NoZWR1bGluZyB0d28gYW5pbWF0aW9u
cyB0byBydW4gdG9nZXRoZXIgd2hlbiBvbmx5IG9uZSBwcm9wZXJ0eSBpcyBmcmVlLgotVEVTVChD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2hlbkFQ
cm9wZXJ0eUlzQmxvY2tlZCkKLXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+
IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtl
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIGNvbnRyb2xs
ZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1U
cmFuc2l0aW9uKDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNv
bnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFu
c2Zvcm1UcmFuc2l0aW9uKDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwot
ICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOwotCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1Rf
RVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsK
LSAgICAvLyBTaG91bGQgbm90IGhhdmUgc3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQu
Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAg
IEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIC8vIFRoZSB0aGUgZmxvYXQgYW5p
bWF0aW9uIHNob3VsZCBoYXZlIHN0YXJ0ZWQgYXQgdGltZSAxIGFuZCBzaG91bGQgYmUgZG9uZS4K
LSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsICpldmVudHMpOwotICAgIEVYUEVDVF9FUSgxLCBk
dW1teS5vcGFjaXR5KCkpOwotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7Ci19Ci0KLS8vIFRlc3RzIHNjaGVkdWxpbmcgdHdvIGFuaW1hdGlvbnMgdG8g
cnVuIHRvZ2V0aGVyIHdpdGggZGlmZmVyZW50IGxlbmd0aHMgYW5kIGFub3RoZXIKLS8vIGFuaW1h
dGlvbiBxdWV1ZWQgdG8gc3RhcnQgd2hlbiB0aGUgc2hvcnRlciBhbmltYXRpb24gZmluaXNoZXMg
KHNob3VsZCB3YWl0Ci0vLyBmb3IgYm90aCB0byBmaW5pc2gpLgotVEVTVChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcp
Ci17Ci0gICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIo
bmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbD4gY29udHJvbGxlcigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0KLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigyKSksIDEs
IENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAs
IDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5h
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAgIC8v
IEFuaW1zIHdpdGggaWQgMSBzaG91bGQgYm90aCBzdGFydCBub3cuCi0gICAgY29udHJvbGxlci0+
YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAg
Ly8gVGhlIG9wYWNpdHkgYW5pbWF0aW9uIHNob3VsZCBoYXZlIGZpbmlzaGVkIGF0IHRpbWUgMSwg
YnV0IHRoZSBncm91cAotICAgIC8vIG9mIGFuaW1hdGlvbnMgd2l0aCBpZCAxIGRvbid0IGZpbmlz
aCB1bnRpbCB0aW1lIDIgYmVjYXVzZSBvZiB0aGUgbGVuZ3RoCi0gICAgLy8gb2YgdGhlIHRyYW5z
Zm9ybSBhbmltYXRpb24uCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKLSAg
ICAvLyBTaG91bGQgbm90IGhhdmUgc3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQuCi0g
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVY
UEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwotCi0gICAgLy8gVGhlIHRoZSBzZWNvbmQgb3Bh
Y2l0eSBhbmltYXRpb24gc2hvdWxkIHN0YXJ0IGF0IHRpbWUgMiBhbmQgc2hvdWxkIGJlCi0gICAg
Ly8gZG9uZSBieSB0aW1lIDMKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDMsICpldmVudHMpOwot
ICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIEVYUEVDVF9GQUxTRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci19Ci0KLS8vIFRlc3RzIHNjaGVkdWxp
bmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUuCi1URVNUKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlQW5pbWF0aW9uKQotewotICAgIE93blB0
cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3RvcikpOwotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xp
ZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNv
bnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRl
KCZkdW1teSkpOwotCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkp
LCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIHRvQWRkLT5zZXRSdW5TdGF0
ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7Ci0gICAgdG9BZGQt
PnNldFN0YXJ0VGltZSgxKTsKLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsK
LQotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1t
eS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7Ci0gICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVD
VF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgKmV2
ZW50cyk7Ci0gICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgRVhQRUNUX0ZB
TFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLX0KLQotLy8gVGVzdHMgc2No
ZWR1bGluZyBhbiBhbmltYXRpb24gdG8gc3RhcnQgaW4gdGhlIGZ1dHVyZSB0aGF0J3MgaW50ZXJy
dXB0aW5nIGEgcnVubmluZyBhbmltYXRpb24uCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbFRlc3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5pbWF0aW9u
KQotewotICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRy
KG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwotICAgIEZha2VMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotCi0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFj
dGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSks
IDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0KLSAgICBPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigxLCAwLjVmLCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7Ci0gICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9y
U3RhcnRUaW1lLCAwKTsKLSAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOwotICAgIGNvbnRyb2xs
ZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwotCi0gICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0cmFu
c2l0aW9uIHNob3VsZCBzdGFydCBpbW1lZGlhdGVseS4KLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDAsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9s
bGVyLT5hbmltYXRlKDAuNSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0
eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsICpldmVudHMpOwotICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC41
ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsICpldmVudHMp
OwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIEVYUEVDVF9GQUxTRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci19Ci0KLS8vIFRlc3RzIHNjaGVkdWxp
bmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUgdGhhdCBpbnRlcnJ1cHRzIGEg
cnVubmluZyBhbmltYXRpb24KLS8vIGFuZCB0aGVyZSBpcyB5ZXQgYW5vdGhlciBhbmltYXRpb24g
cXVldWVkIHRvIHN0YXJ0IGxhdGVyLgotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvbldpdGhB
bmltSW5RdWV1ZSkKLXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50
cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBGYWtlTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIGNvbnRyb2xsZXItPmFk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAgT3duUHRy
PENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIo
bmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOwotICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6
V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7Ci0gICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKLSAg
ICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLQotICAgIGNvbnRyb2xsZXItPmFk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMCwgMC43NWYpKSwgMywgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAgIC8v
IEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCi0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9w
YWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsICpldmVudHMpOwotICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1Rf
RVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50
cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwot
ICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMywgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoNCwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1t
eS5vcGFjaXR5KCkpOwotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7Ci19Ci0KLS8vIFRlc3QgdGhhdCBhIGxvb3BpbmcgYW5pbWF0aW9uIGxvb3BzIGFu
ZCBmb3IgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZXJhdGlvbnMuCi1URVNUKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxMb29waW5nKQotewotICAgIE93blB0cjxD
Q0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2
ZW50c1ZlY3RvcikpOwotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50
IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRy
b2xsZXIoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZk
dW1teSkpOwotCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAx
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIHRvQWRkLT5zZXRJdGVyYXRpb25z
KDMpOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwotCi0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjI1LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuMjVm
LCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSwgKmV2ZW50
cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwot
ICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5h
bmltYXRlKDIuMjUsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLjc1LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuNzVm
LCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMywgKmV2ZW50cyk7
Ci0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAg
ICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLQotICAgIC8vIEp1c3QgYmUgZXh0cmEg
c3VyZS4KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDQsICpldmVudHMpOwotICAgIEVYUEVDVF9F
USgxLCBkdW1teS5vcGFjaXR5KCkpOwotfQotCi0vLyBUZXN0IHRoYXQgYW4gaW5maW5pdGVseSBs
b29waW5nIGFuaW1hdGlvbiBkb2VzIGluZGVlZCBnbyB1bnRpbCBhYm9ydGVkLgotVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBJbmZpbml0ZUxvb3BpbmcpCi17Ci0gICAg
T3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yKSk7Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bD4gY29udHJvbGxlcigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpj
cmVhdGUoJmR1bW15KSk7Ci0KLSAgICBjb25zdCBpbnQgaWQgPSAxOwotICAgIE93blB0cjxDQ0Fj
dGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7Ci0gICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoLTEpOwotICAgIGNvbnRyb2xsZXItPmFk
ZCh0b0FkZC5yZWxlYXNlKCkpOwotCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRz
KTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0g
ICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxLjI1LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSwgKmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVt
bXkub3BhY2l0eSgpKTsKLQotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTA3Mzc0MTgyNC4yNSwg
KmV2ZW50cyk7Ci0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwotICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9s
bGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuNzUsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC43NWYsIGR1
bW15Lm9wYWNpdHkoKSk7Ci0KLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVB
bmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxl
ci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNl
dFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCAwLjc1Zik7Ci0gICAgRVhQRUNU
X0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEo
MC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci19Ci0KLS8vIFRlc3QgdGhhdCBwYXVzaW5nIGFuZCBy
ZXN1bWluZyB3b3JrIGFzIGV4cGVjdGVkLgotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxUZXN0LCBQYXVzZVJlc3VtZSkKLXsKLSAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNW
ZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAg
ICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25Q
dHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIGNv
bnN0IGludCBpZCA9IDE7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZl
bnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5p
bWF0ZSgwLjUsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKLSAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLQot
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRp
b24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVB
bmltYXRpb246OlBhdXNlZCwgMC41Zik7Ci0KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQs
ICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKLSAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLQotICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246
OlJ1bm5pbmcsIDEwMjQpOwotCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LjI1LCAqZXZl
bnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
Ci0gICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMTAyNC41LCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkp
OwotfQotCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEFib3J0QUdy
b3VwZWRBbmltYXRpb24pCi17Ci0gICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBl
dmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7Ci0gICAgRmFrZUxh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKLSAgICAgICAgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0KLSAgICBjb25zdCBpbnQg
aWQgPSAxOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9u
OjpUcmFuc2Zvcm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgaWQsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjc1ZikpLCAy
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHko
KSk7Ci0KLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+Z2V0QWN0aXZl
QW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1blN0YXRlKEND
QWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCAxKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEs
ICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKLSAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVy
LT5hbmltYXRlKDIsICpldmVudHMpOwotICAgIEVYUEVDVF9UUlVFKCFjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7Ci0gICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkp
OwotfQotCi19IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwCmluZGV4
IGM0ZjEwM2EzY2FmZTQ2OGU0YjhlNzk3ODZkMmIyMTg3ZTQ1ZDdlYTEuLmNiNDAwYjkzNmFlZjY5
MjFmOTg3ZmVlMzgwNDI0M2UxMTIzNDExYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5j
cHAKQEAgLTU2LDcgKzU2LDggQEAgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4KIAogVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIGNyZWF0ZU9wYWNpdHlBbmltYXRpb24pCiB7Ci0g
ICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkp
KTsKICAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOwogICAgIFdlYkNvcmU6OktleWZyYW1l
VmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7CiAgICAgdmFsdWVzLmlu
c2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZSgwLCAwKSk7CkBAIC04Nyw3ICs4OCw4IEBAIFRF
U1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBjcmVhdGVPcGFjaXR5QW5pbWF0aW9u
KQogCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRlVHJhbnNmb3Jt
QW5pbWF0aW9uKQogewotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29u
dHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOworICAgIEZha2VM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpjcmVhdGUoJmR1bW15KSk7CiAgICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKICAgICBX
ZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRy
YW5zZm9ybSk7CiAKQEAgLTEyNCw5MiArMTI2LDM3MSBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyVGVzdCwgY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uKQogCiBURVNUKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyVGVzdCwgc3luY05ld0FuaW1hdGlvbikKIHsKLSAgICBGYWtlTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNy
ZWF0ZSgpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15SW1w
bDsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXJJbXBs
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15SW1wbCkpOworICAgIEZh
a2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlckltcGwt
PmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAg
ICAgYWRkT3BhY2l0eVRyYW5zaXRpb25Ub0NvbnRyb2xsZXIoKmNvbnRyb2xsZXIsIDEsIDAsIDEp
OwogCi0gICAgY29udHJvbGxlci0+c3luY2hyb25pemVBbmltYXRpb25zKGNvbnRyb2xsZXJJbXBs
LmdldCgpKTsKKyAgICBjb250cm9sbGVyLT5wdXNoQW5pbWF0aW9uVXBkYXRlc1RvKGNvbnRyb2xs
ZXJJbXBsLmdldCgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3Rp
dmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBFWFBFQ1Rf
RVEoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIGNvbnRy
b2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpLT5ydW5TdGF0ZSgpKTsKIH0KIAotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRl
c3QsIHN5bmNBbmltYXRpb25Qcm9wZXJ0aWVzKQorLy8gVGVzdHMgdGhhdCB0cmFuc2l0aW9uaW5n
IG9wYWNpdHkgZnJvbSAwIHRvIDEgd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyVGVzdCwgVHJpdmlhbFRyYW5zaXRpb24pCiB7Ci0gICAgRmFrZUxheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVh
dGUoKSk7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQ
dHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9u
Q29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpj
cmVhdGUoJmR1bW15KSk7CiAKLSAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlckltcGwtPmdldEFj
dGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKIAotICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9Db250cm9sbGVyKCpjb250
cm9sbGVyLCAxLCAwLCAxKTsKKyAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBk
dW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgZXZlbnRzLmdldCgp
KTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworfQogCi0gICAgY29udHJvbGxlci0+
c3luY2hyb25pemVBbmltYXRpb25zKGNvbnRyb2xsZXJJbXBsLmdldCgpKTsKKy8vIFRlc3RzIHRo
YXQgdHdvIHF1ZXVlZCBhbmltYXRpb25zIGFmZmVjdGluZyB0aGUgc2FtZSBwcm9wZXJ0eSBydW4g
aW4gc2VxdWVuY2UuCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgVHJpdmlh
bFF1ZXVpbmcpCit7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMo
YWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5p
bWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVySW1wbC0+
Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAg
RVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5
LCBjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0
ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAw
LjUpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIC8vIFB1c2ggYW4g
YW5pbWF0aW9uIHByb3BlcnR5IGNoYW5nZSB0byB0aGUgaW1wbCB0aHJlYWQgKHNob3VsZCBub3Qg
Y2F1c2UgYW4gYW5pbWF0aW9uIHRvIGJlIGFkZGVkKS4KLSAgICBjb250cm9sbGVyLT5wYXVzZUFu
aW1hdGlvbigwLCAwKTsKLSAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMoY29u
dHJvbGxlckltcGwuZ2V0KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdl
dCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgxLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDIsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDAu
NSwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOworfQogCi0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlckltcGwtPmdl
dEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIEVY
UEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2VkLCBjb250cm9sbGVySW1wbC0+Z2V0QWN0
aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7
CisvLyBUZXN0cyBpbnRlcnJ1cHRpbmcgYSB0cmFuc2l0aW9uIHdpdGggYW5vdGhlciB0cmFuc2l0
aW9uLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIEludGVycnVwdCkKK3sK
KyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcg
Q0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4g
Y29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgm
ZHVtbXkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7
CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAg
IEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMSwgMC41KSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CisgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4
dFRpY2ssIDApOworICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworCisgICAg
Ly8gU2luY2UgdGhlIGFuaW1hdGlvbiB3YXMgaW4gdGhlIFdhaXRpbmdGb3JOZXh0VGljayBzdGF0
ZSwgaXQgc2hvdWxkIHN0YXJ0IHJpZ2h0IGluCisgICAgLy8gdGhpcyBjYWxsIHRvIGFuaW1hdGUu
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNU
X1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgx
LCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS41LCBldmVudHMu
Z2V0KCkpOworICAgIEVYUEVDVF9FUSgwLjUsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNU
X0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KIAotVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIHN5bmNBYm9ydGVkQW5pbWF0aW9uKQorLy8gVGVz
dHMgc2NoZWR1bGluZyB0d28gYW5pbWF0aW9ucyB0byBydW4gdG9nZXRoZXIgd2hlbiBvbmx5IG9u
ZSBwcm9wZXJ0eSBpcyBmcmVlLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3Qs
IFNjaGVkdWxlVG9nZXRoZXJXaGVuQVByb3BlcnR5SXNCbG9ja2VkKQogewotICAgIEZha2VMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXJJbXBsKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3Jl
YXRlKCkpOworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0
UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5nZXRB
Y3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250
cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNm
b3JtVHJhbnNpdGlvbigxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAg
ICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtl
VHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0p
KTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKIAotICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9Db250cm9sbGVyKCpjb250cm9s
bGVyLCAxLCAwLCAxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7
CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MSwgZXZlbnRzLmdldCgpKTsKKyAgICAvLyBTaG91bGQgbm90IGhhdmUgc3RhcnRlZCB0aGUgZmxv
YXQgdHJhbnNpdGlvbiB5ZXQuCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAgIC8v
IFRoZSBmbG9hdCBhbmltYXRpb24gc2hvdWxkIGhhdmUgc3RhcnRlZCBhdCB0aW1lIDEgYW5kIHNo
b3VsZCBiZSBkb25lLgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgZXZlbnRzLmdldCgpKTsK
KyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworfQogCi0gICAgY29udHJvbGxlci0+c3lu
Y2hyb25pemVBbmltYXRpb25zKGNvbnRyb2xsZXJJbXBsLmdldCgpKTsKKy8vIFRlc3RzIHNjaGVk
dWxpbmcgdHdvIGFuaW1hdGlvbnMgdG8gcnVuIHRvZ2V0aGVyIHdpdGggZGlmZmVyZW50IGxlbmd0
aHMgYW5kIGFub3RoZXIKKy8vIGFuaW1hdGlvbiBxdWV1ZWQgdG8gc3RhcnQgd2hlbiB0aGUgc2hv
cnRlciBhbmltYXRpb24gZmluaXNoZXMgKHNob3VsZCB3YWl0CisvLyBmb3IgYm90aCB0byBmaW5p
c2gpLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFNjaGVkdWxlVG9nZXRo
ZXJXaXRoQW5BbmltV2FpdGluZykKK3sKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0
b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBG
YWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKLSAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRB
dmFpbGFiaWxpdHksIGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKKyAgICBjb250cm9sbGVyLT5hZGQo
Y3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlv
bigyKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVy
LT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250
cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRU
cmFuc2l0aW9uKDEsIDEsIDAuNSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
CisgICAgLy8gQW5pbWF0aW9ucyB3aXRoIGlkIDEgc2hvdWxkIGJvdGggc3RhcnQgbm93LgorICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15
Lm9wYWNpdHkoKSk7CisgICAgLy8gVGhlIG9wYWNpdHkgYW5pbWF0aW9uIHNob3VsZCBoYXZlIGZp
bmlzaGVkIGF0IHRpbWUgMSwgYnV0IHRoZSBncm91cAorICAgIC8vIG9mIGFuaW1hdGlvbnMgd2l0
aCBpZCAxIGRvbid0IGZpbmlzaCB1bnRpbCB0aW1lIDIgYmVjYXVzZSBvZiB0aGUgbGVuZ3RoCisg
ICAgLy8gb2YgdGhlIHRyYW5zZm9ybSBhbmltYXRpb24uCisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgyLCBldmVudHMuZ2V0KCkpOworICAgIC8vIFNob3VsZCBub3QgaGF2ZSBzdGFydGVkIHRoZSBm
bG9hdCB0cmFuc2l0aW9uIHlldC4KKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAKLSAg
ICBjb250cm9sbGVyLT5yZW1vdmVBbmltYXRpb24oMCk7CisgICAgLy8gVGhlIHNlY29uZCBvcGFj
aXR5IGFuaW1hdGlvbiBzaG91bGQgc3RhcnQgYXQgdGltZSAyIGFuZCBzaG91bGQgYmUgZG9uZSBi
eSB0aW1lIDMKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMsIGV2ZW50cy5nZXQoKSk7CisgICAg
RVhQRUNUX0VRKDAuNSwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworfQogCi0gICAgLy8gQWJvcnQgYW4gYW5pbWF0
aW9uIGZyb20gdGhlIG1haW4gdGhyZWFkLgotICAgIGNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5p
bWF0aW9ucyhjb250cm9sbGVySW1wbC5nZXQoKSk7CisvLyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFu
aW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlclRlc3QsIFNjaGVkdWxlQW5pbWF0aW9uKQoreworICAgIE93blB0cjxDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAg
T3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAgICBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgRVhQRUNU
X0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAw
LCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKKyAgICB0
b0FkZC0+c2V0U3RhcnRUaW1lKDEpOworICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNl
KCkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOworICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1Rf
RVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsIGV2ZW50
cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMiwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0
eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OwogfQogCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgc3luY0NvbXBsZXRl
ZEFuaW1hdGlvbikKKy8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGlu
IHRoZSBmdXR1cmUgdGhhdCdzIGludGVycnVwdGluZyBhIHJ1bm5pbmcgYW5pbWF0aW9uLgorVEVT
VChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVy
cnVwdHNSdW5uaW5nQW5pbWF0aW9uKQogewotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw+IGNvbnRyb2xsZXJJbXBsKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3Jl
YXRlKCZkdW1teSkpOwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29u
dHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOworICAgIE93blB0
cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQg
ZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVy
KAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwog
Ci0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEp
KSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIGFkZE9wYWNpdHlUcmFu
c2l0aW9uVG9Db250cm9sbGVyKCpjb250cm9sbGVyLCAxLCAwLCAxKTsKKyAgICBPd25QdHI8Q0NB
Y3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLjUsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKyAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRp
bmdGb3JTdGFydFRpbWUsIDApOworICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7CisgICAgY29u
dHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CiAKLSAgICBjb250cm9sbGVyLT5zeW5jaHJv
bml6ZUFuaW1hdGlvbnMoY29udHJvbGxlckltcGwuZ2V0KCkpOworICAgIC8vIEZpcnN0IDJzIG9w
YWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgp
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VR
KDAuMjUsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCBldmVu
dHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKKyAgICBFWFBFQ1RfRVEoMC41LCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMiwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3Bh
Y2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOworfQogCi0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1h
dGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIEVYUEVDVF9FUShDQ0Fj
dGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgY29udHJvbGxlcklt
cGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1
blN0YXRlKCkpOworLy8gVGVzdHMgc2NoZWR1bGluZyBhbiBhbmltYXRpb24gdG8gc3RhcnQgaW4g
dGhlIGZ1dHVyZSB0aGF0IGludGVycnVwdHMgYSBydW5uaW5nIGFuaW1hdGlvbgorLy8gYW5kIHRo
ZXJlIGlzIHlldCBhbm90aGVyIGFuaW1hdGlvbiBxdWV1ZWQgdG8gc3RhcnQgbGF0ZXIuCitURVNU
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJy
dXB0c1J1bm5pbmdBbmltYXRpb25XaXRoQW5pbUluUXVldWUpCit7CisgICAgT3duUHRyPENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRz
VmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsK
KyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCisgICAg
ICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICAv
LyBTdGVwIHRocm91Z2ggdGhlIGFuaW1hdGlvbiB1bnRpbCBpdCBpcyBmaW5pc2hlZC4gQXQgdGhl
IG5leHQgc3luYywgdGhlIG1haW4gdGhyZWFkJ3MgYW5pbWF0aW9uIHNob3VsZCBiZSBjbGVhcmVk
LgorICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOworCisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMC41LCAwKSks
IDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNldFJ1blN0YXRl
KENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKKyAgICB0b0FkZC0+
c2V0U3RhcnRUaW1lKDEpOworICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwor
CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAwLjc1KSksIDMsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CisKKyAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5zaXRpb24gc2hvdWxkIHN0
YXJ0IGltbWVkaWF0ZWx5LgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgp
KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cisg
ICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwLjUsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjI1LCBkdW1teS5vcGFjaXR5KCkpOwor
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDEsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjUsIGR1bW15
Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgzLCBldmVudHMuZ2V0KCkpOwor
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBF
WFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDQs
IGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDAuNzUsIGR1bW15Lm9wYWNpdHkoKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KKwor
Ly8gVGVzdCB0aGF0IGEgbG9vcGluZyBhbmltYXRpb24gbG9vcHMgYW5kIGZvciB0aGUgY29ycmVj
dCBudW1iZXIgb2YgaXRlcmF0aW9ucy4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJU
ZXN0LCBUcml2aWFsTG9vcGluZykKK3sKICAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0
b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKLSAgICBj
b250cm9sbGVySW1wbC0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKLSAgICBjb250cm9sbGVySW1wbC0+
YW5pbWF0ZSgyLCAqZXZlbnRzKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xp
ZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJv
bGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkp
KTsKIAotICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9u
KDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
ICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKDMpOworICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5y
ZWxlYXNlKCkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwor
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBF
WFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEu
MjUsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjI1LCBkdW1teS5vcGFjaXR5KCkpOworICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNzUs
IGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLjI1LCBldmVudHMu
Z2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKKyAgICBFWFBFQ1RfRVEoMC4yNSwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVy
LT5hbmltYXRlKDIuNzUsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1LCBkdW1teS5vcGFj
aXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMywgZXZlbnRzLmdldCgpKTsKKyAgICBF
WFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVD
VF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgLy8gSnVzdCBiZSBleHRyYSBzdXJlLgor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoNCwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfRVEo
MSwgZHVtbXkub3BhY2l0eSgpKTsKK30KKworLy8gVGVzdCB0aGF0IGFuIGluZmluaXRlbHkgbG9v
cGluZyBhbmltYXRpb24gZG9lcyBpbmRlZWQgZ28gdW50aWwgYWJvcnRlZC4KK1RFU1QoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBJbmZpbml0ZUxvb3BpbmcpCit7CisgICAgT3duUHRy
PENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9u
RXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBk
dW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIo
CisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CisK
KyAgICBjb25zdCBpbnQgaWQgPSAxOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9B
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQt
PnNldEl0ZXJhdGlvbnMoLTEpOworICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkp
OworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOworICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEo
MCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuMjUsIGV2ZW50
cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOworICAgIEVYUEVDVF9FUSgwLjI1LCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMS43NSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNzUsIGR1bW15Lm9w
YWNpdHkoKSk7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuMjUsIGV2ZW50
cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOworICAgIEVYUEVDVF9FUSgwLjI1LCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMTA3Mzc0MTgyNC43NSwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNzUs
IGR1bW15Lm9wYWNpdHkoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3Rp
dmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJv
bGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkt
PnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCAwLjc1KTsKKyAgICBFWFBF
Q1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9F
USgwLjc1LCBkdW1teS5vcGFjaXR5KCkpOworfQorCisvLyBUZXN0IHRoYXQgcGF1c2luZyBhbmQg
cmVzdW1pbmcgd29yayBhcyBleHBlY3RlZC4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJUZXN0LCBQYXVzZVJlc3VtZSkKK3sKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0
b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBG
YWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIGNvbnN0IGludCBpZCA9IDE7
CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOworICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBF
Q1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSwg
ZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNSwgZHVtbXkub3BhY2l0eSgpKTsKIAotICAgIGNv
bnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbC5nZXQoKSk7Cisg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlv
bihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6UGF1c2VkLCAwLjUpOwogCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LCBl
dmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC41LCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlv
bjo6UnVubmluZywgMTAyNCk7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuMjUsIGV2
ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1LCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMTAyNC41LCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9GQUxTRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15
Lm9wYWNpdHkoKSk7Cit9CisKK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBB
Ym9ydEFHcm91cGVkQW5pbWF0aW9uKQoreworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1Zl
Y3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAg
IEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOworCisgICAgY29uc3QgaW50IGlkID0g
MTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5l
dyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJh
bnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC43NSkpLCAyLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBl
dmVudHMuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDEsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjUsIGR1bW15Lm9wYWNp
dHkoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24o
aWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+Z2V0QWN0
aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1blN0YXRl
KENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCAxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEsIGV2ZW50cy5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMiwgZXZlbnRzLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRSghY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1LCBkdW1t
eS5vcGFjaXR5KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggNzAyYmJmMTYz
OWI0M2IxNmFlZjNhYmI2NjA2MjkwNDk4YzBkNjYxNS4uM2ZkYTJjOWVlN2FjYWYwYmVlMzY3ZGVi
NWU2YjFkOTNhOGQxY2I1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC03Myw3ICs3Myw2IEBAIHB1YmxpYzoKIAog
ICAgIC8vIEltcGxlbWVudGF0aW9uIG9mIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZQogICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSB0aW1lKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoaW50IGFuaW1hdGlvbklkKSB7IH0K
IH07CiAKIC8vIEFkYXB0cyBDQ0xheWVyVHJlZUhvc3RJbXBsIGZvciB0ZXN0LiBSdW5zIHJlYWwg
Y29kZSwgdGhlbiBpbnZva2VzIHRlc3QgaG9va3MuCkBAIC04OTIsNyArODkxLDYgQEAgcHVibGlj
OgogICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb24oKQogICAgICAgICA6IG1fbnVt
QW5pbWF0ZXMoMCkKICAgICAgICAgLCBtX3JlY2VpdmVkQW5pbWF0aW9uU3RhcnRlZE5vdGlmaWNh
dGlvbihmYWxzZSkKLSAgICAgICAgLCBtX3JlY2VpdmVkQW5pbWF0aW9uRmluaXNoZWROb3RpZmlj
YXRpb24oZmFsc2UpCiAgICAgICAgICwgbV9zdGFydFRpbWUoMCkKICAgICAgICAgLCBtX2ZpcnN0
TW9ub3RvbmljVGltZSgwKQogICAgIHsKQEAgLTkxNyw3ICs5MTUsNiBAQCBwdWJsaWM6CiAgICAg
ICAgIEVYUEVDVF9MVCgwLCBtX2ZpcnN0TW9ub3RvbmljVGltZSk7CiAgICAgICAgIEVYUEVDVF9O
RShtX3N0YXJ0VGltZSwgbV9maXJzdE1vbm90b25pY1RpbWUpOwogICAgICAgICBFWFBFQ1RfVFJV
RShtX3JlY2VpdmVkQW5pbWF0aW9uU3RhcnRlZE5vdGlmaWNhdGlvbik7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKG1fcmVjZWl2ZWRBbmltYXRpb25GaW5pc2hlZE5vdGlmaWNhdGlvbik7CiAgICAgICAg
IGVuZFRlc3QoKTsKICAgICB9CiAKQEAgLTkyNywxMSArOTI0LDYgQEAgcHVibGljOgogICAgICAg
ICBtX3N0YXJ0VGltZSA9IHdhbGxDbG9ja1RpbWU7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lk
IG5vdGlmeUFuaW1hdGlvbkZpbmlzaGVkKGludCkKLSAgICB7Ci0gICAgICAgIG1fcmVjZWl2ZWRB
bmltYXRpb25GaW5pc2hlZE5vdGlmaWNhdGlvbiA9IHRydWU7Ci0gICAgfQotCiAgICAgdmlydHVh
bCB2b2lkIGFmdGVyVGVzdCgpCiAgICAgewogICAgIH0KQEAgLTkzOSw3ICs5MzEsNiBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIGludCBtX251bUFuaW1hdGVzOwogICAgIGJvb2wgbV9yZWNlaXZl
ZEFuaW1hdGlvblN0YXJ0ZWROb3RpZmljYXRpb247Ci0gICAgYm9vbCBtX3JlY2VpdmVkQW5pbWF0
aW9uRmluaXNoZWROb3RpZmljYXRpb247CiAgICAgZG91YmxlIG1fc3RhcnRUaW1lOwogICAgIGRv
dWJsZSBtX2ZpcnN0TW9ub3RvbmljVGltZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCmluZGV4IDA2Y2M1ZWU1YzU0
NDEyMzUxMDM5ZDliZmFjNzNlMzYxYWE3MGQ5MDEuLjViMzc2Y2E5ZmUyMjExZGZhMDBhOWNmOTEx
ZWYwZTYxZjg5MDgyNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
VHJlZVN5bmNocm9uaXplclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCkBAIC05NiwyMiArOTYsMjMgQEAgcHJpdmF0ZToK
IAogY2xhc3MgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlciA6IHB1YmxpYyBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RmFrZUxh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxG
YWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjcmVhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJDbGllbnQqIGNsaWVudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcik7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcihjbGllbnQpKTsKICAgICB9CiAKICAgICBi
b29sIHN5bmNocm9uaXplZEFuaW1hdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3N5bmNocm9uaXpl
ZEFuaW1hdGlvbnM7IH0KIAogcHJpdmF0ZToKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyKCkKLSAgICAgICAgOiBtX3N5bmNocm9uaXplZEFuaW1hdGlvbnMoZmFsc2UpCisgICAgZXhw
bGljaXQgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckNsaWVudCogY2xpZW50KQorICAgICAgICA6IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
KGNsaWVudCkKKyAgICAgICAgLCBtX3N5bmNocm9uaXplZEFuaW1hdGlvbnMoZmFsc2UpCiAgICAg
ewogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZUFuaW1hdGlvbnMoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKKyAgICB2aXJ0dWFsIHZv
aWQgcHVzaEFuaW1hdGlvblVwZGF0ZXNUbyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciogY29u
dHJvbGxlckltcGwpCiAgICAgewotICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
c3luY2hyb25pemVBbmltYXRpb25zKGNvbnRyb2xsZXJJbXBsKTsKKyAgICAgICAgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hBbmltYXRpb25VcGRhdGVzVG8oY29udHJvbGxlckltcGwp
OwogICAgICAgICBtX3N5bmNocm9uaXplZEFuaW1hdGlvbnMgPSB0cnVlOwogICAgIH0KIApAQCAt
MzUwLDcgKzM1MSw4IEBAIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNocm9uaXplQW5p
bWF0aW9ucykKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwog
Ci0gICAgbGF5ZXJUcmVlUm9vdC0+c2V0TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKEZha2VMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIGxheWVyVHJlZVJvb3QtPnNldExheWVyQW5pbWF0
aW9uQ29udHJvbGxlcihGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15
KSk7CiAKICAgICBFWFBFQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8RmFrZUxheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcio+KGxheWVyVHJlZVJvb3QtPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpKS0+c3lu
Y2hyb25pemVkQW5pbWF0aW9ucygpKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>