<?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>79827</bug_id>
          
          <creation_ts>2012-02-28 13:16:31 -0800</creation_ts>
          <short_desc>[chromium] Implement scroll physics architecture for impl/main thread</short_desc>
          <delta_ts>2012-03-09 15:35:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>80311</blocked>
    
    <blocked>80607</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="W. James MacLean">wjmaclean</reporter>
          <assigned_to name="W. James MacLean">wjmaclean</assigned_to>
          <cc>abarth</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>rjkroege</cc>
    
    <cc>scottbyer</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>567018</commentid>
    <comment_count>0</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-02-28 13:16:31 -0800</bug_when>
    <thetext>[chromium] Implement scroll physics architecture for impl/main thread [not for review yet]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567022</commentid>
    <comment_count>1</comment_count>
      <attachid>129315</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-02-28 13:19:34 -0800</bug_when>
    <thetext>Created attachment 129315
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567026</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-28 13:24:02 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567034</commentid>
    <comment_count>3</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-02-28 13:30:01 -0800</bug_when>
    <thetext>This is an initial draft of the smooth-scrolling refactoring, not yet ready for formal review.

It&apos;s probably over-engineered (every new class got its own file, for example). But, it does show the entire pathway (both main and impl threads). I left in a hack in WebViewImpl that I&apos;m using for testing, in case anyone else wants to try it on the main thread (impl-side testing requires a similar patch in chromium).

So far it seems to have good performance on platforms I&apos;ve used for test.

The wiring of the GestureCurveTarget* (a pointer to CCLayerTreeHostImpl) into WebCompositorInputHandler seems ugly - thoughts on simplifying/improving this?

The curve in PlatformScrollGestureCurveFling is almost certainly *not* what we&apos;ll want finally, although it is likely well suited for mouse-wheel scroll animation.

It should be easy enough to break this into a main-thread patch and an impl-thread patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567141</commentid>
    <comment_count>4</comment_count>
      <attachid>129315</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-02-28 15:08:15 -0800</bug_when>
    <thetext>Comment on attachment 129315
Patch

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

&gt; Source/WebCore/WebCore.gypi:2816
&gt; +            &apos;platform/PlatformGestureActiveAnimation.cpp&apos;,

Backwards, this name feels... apologies if I suggested this in the first place.

ActivePlatformGestureAnimation?

Alternatively, webcore calls an &quot;active animation&quot; just an Animation, iirw. We added the &quot;Active&quot; because &quot;Animation&quot; is a pretty generic word. But, PlatformGestureAnimation is pretty clear too.

&gt; Source/WebCore/WebCore.gypi:2820
&gt; +            &apos;platform/PlatformScrollGestureCurveFling.cpp&apos;,

More backward-sounding names. FlingScrollPlatformGestureCurve.

&gt; Source/WebCore/WebCore.gypi:3309
&gt; +            &apos;platform/graphics/chromium/cc/CCGestureCurveTarget.h&apos;,

Put the target class in the Curve.h  --- in cc/ we tend to put clients/delegates/targets on the class that uses them.

&gt; Source/WebCore/page/EventHandler.cpp:2354
&gt; +    case PlatformEvent::GestureFlingStart:

Feels like a separate patch?

&gt; Source/WebCore/platform/PlatformEvent.h:58
&gt; +        GestureFlingStart,

Pull out to patch with the event handler?

&gt; Source/WebCore/platform/PlatformGestureCurve.h:34
&gt; +    // Returns false if curve has finished and can no longer bge applied.

bge-&gt;be

&gt; Source/WebCore/platform/PlatformGestureCurveTarget.h:34
&gt; +    virtual void setScrollIncrement(const IntPoint&amp;) = 0;

Is this like &quot;increment by pt.x&quot;? Perhaps we should have a getScroll() and setScroll()? It seems to me this could be hard to do right... I&apos;m not sure how we can make things mathematically correct with this sort of approach?

How did we do this on droid?

&gt; Source/WebCore/platform/PlatformScrollGestureCurveFling.cpp:36
&gt; +PassOwnPtr&lt;PlatformGestureCurve&gt; PlatformScrollGestureCurveFling::create(const FloatPoint&amp; velocity)

You&apos;re calling this FlingScroll  or ScrollFling but the gesture you added to the input events was just Fling. If thats the case, then maybe just Fling is sufficient.

&gt; Source/WebCore/platform/PlatformScrollGestureCurveFling.cpp:37
&gt; +{

How does this class relate to the similar Android subclass? Is this fling the &quot;generic&quot; fling?

&gt; Source/WebCore/platform/PlatformScrollGestureCurveGeneric.h:39
&gt; +class PlatformScrollGestureCurveGeneric : public PlatformGestureCurve {

I&apos;m a little confused the role of this class. Its like its a generic base class for something, but what&apos;s it value add?

&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:461
&gt; +            animationTimerFired(&amp;m_animationTimer);

Why fire the timer here and not startOneShot?

&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:537
&gt; +#endif // ENABLE(SMOOTH_SCROLLING

looks like you accidentally dropped a )

&gt; Source/WebCore/platform/ScrollAnimatorNone.h:56
&gt;  

Might add a 
  // PlatformGestureCurveTarget implementation

And put the functions in a logical place so it stands out separate from the ScrollAnimator functiosn

&gt; Source/WebCore/platform/graphics/chromium/cc/CCGestureCurve.cpp:5
&gt; + * modification, are permitted provided that the following conditions

do we need a cpp file for this?

&gt; Source/WebKit/chromium/WebKit.gyp:288
&gt; +                &apos;public/platform/PlatformGestureCurveToCCGestureCurveAdapter.h&apos;,

move to src/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567641</commentid>
    <comment_count>5</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-02-29 08:34:50 -0800</bug_when>
    <thetext>I&apos;ll upload a new patch after I get some feedback on the best way to proceed with splitting out the EventHandler part of the patch (see comments below).

(In reply to comment #4)
&gt; (From update of attachment 129315 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129315&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/WebCore.gypi:2816
&gt; &gt; +            &apos;platform/PlatformGestureActiveAnimation.cpp&apos;,
&gt; 
&gt; Backwards, this name feels... apologies if I suggested this in the first place.
&gt; 
&gt; ActivePlatformGestureAnimation?
&gt; 
&gt; Alternatively, webcore calls an &quot;active animation&quot; just an Animation, iirw. We added the &quot;Active&quot; because &quot;Animation&quot; is a pretty generic word. But, PlatformGestureAnimation is pretty clear too.


Fixed (I chose ActivePlatformGestureAnimation).

&gt; &gt; Source/WebCore/WebCore.gypi:2820
&gt; &gt; +            &apos;platform/PlatformScrollGestureCurveFling.cpp&apos;,
&gt; 
&gt; More backward-sounding names. FlingScrollPlatformGestureCurve.

How about &apos;PlatformGestureCurveFling&apos;? Since we&apos;ll want to tack on things like &apos;Android&apos; to the end for other fling-curve implementations, this might be easier? See further comments below.

&gt; &gt; Source/WebCore/WebCore.gypi:3309
&gt; &gt; +            &apos;platform/graphics/chromium/cc/CCGestureCurveTarget.h&apos;,
&gt; 
&gt; Put the target class in the Curve.h  --- in cc/ we tend to put clients/delegates/targets on the class that uses them.

Fixed.

&gt; &gt; Source/WebCore/page/EventHandler.cpp:2354
&gt; &gt; +    case PlatformEvent::GestureFlingStart:
&gt; 
&gt; Feels like a separate patch?

Sure, I can pull this out to a separate patch. Would this land *after* the gesture animation patch (so handleGestureEvent will already exist in ScrollAnimatorNone)? If we do it the other way around, I&apos;m worried about the handGestureEvents getting ripped out again because they are &apos;unused&apos; (like they did last week).

&gt; &gt; Source/WebCore/platform/PlatformEvent.h:58
&gt; &gt; +        GestureFlingStart,
&gt; 
&gt; Pull out to patch with the event handler?

Ditto.

&gt; &gt; Source/WebCore/platform/PlatformGestureCurve.h:34
&gt; &gt; +    // Returns false if curve has finished and can no longer bge applied.
&gt; 
&gt; bge-&gt;be

Fixed.

&gt; &gt; Source/WebCore/platform/PlatformGestureCurveTarget.h:34
&gt; &gt; +    virtual void setScrollIncrement(const IntPoint&amp;) = 0;
&gt; 
&gt; Is this like &quot;increment by pt.x&quot;? Perhaps we should have a getScroll() and setScroll()? It seems to me this could be hard to do right... I&apos;m not sure how we can make things mathematically correct with this sort of approach?

Perhaps the main challenge here is not over-scrolling at the end of the ranges? Otherwise, I&apos;m not sure what defines &quot;correct&quot;. I had figured we would eventually add setScroll() to the targets for physics where the absolute scroll is known, but something open-ended like Fling might be just as well done incrementally (since the physics is natural to describe in terms of velocities/momentums).

&gt; How did we do this on droid?

The cc-side code in Clank also seems to be doing incremental offset, calling scrollBy() in CCLayerTreeHostImpl.

&gt; &gt; Source/WebCore/platform/PlatformScrollGestureCurveFling.cpp:36
&gt; &gt; +PassOwnPtr&lt;PlatformGestureCurve&gt; PlatformScrollGestureCurveFling::create(const FloatPoint&amp; velocity)
&gt; 
&gt; You&apos;re calling this FlingScroll  or ScrollFling but the gesture you added to the input events was just Fling. If thats the case, then maybe just Fling is sufficient.

I like just &apos;Fling&apos;.

&gt; &gt; Source/WebCore/platform/PlatformScrollGestureCurveFling.cpp:37
&gt; &gt; +{
&gt; 
&gt; How does this class relate to the similar Android subclass? Is this fling the &quot;generic&quot; fling?

Yes, it&apos;s the generic fling, although as mentioned in the comments the physics will likely change before we land this. At present it&apos;s more like &apos;PlatformGestureCurveFlingMouseWheel&apos;, where each turn of the wheel generates a mini-fling that accelerates and then decelerates. A proper generic fling would start immediately at the input velocity (because, if I am thinking straight, it will follow on from a GestureScroll event, so things will already be moving).

&gt; &gt; Source/WebCore/platform/PlatformScrollGestureCurveGeneric.h:39
&gt; &gt; +class PlatformScrollGestureCurveGeneric : public PlatformGestureCurve {
&gt; 
&gt; I&apos;m a little confused the role of this class. Its like its a generic base class for something, but what&apos;s it value add?

None. Zero. Zip. Nada. ;-)

I probably should have deleted it before uploading the patch, but I guess it was just a reminder of the (soon to be) family of PlaformGestureCurve*s that will follow.

&gt; &gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:461
&gt; &gt; +            animationTimerFired(&amp;m_animationTimer);
&gt; 
&gt; Why fire the timer here and not startOneShot?

No reason I guess, other than following the method used for smooth scroll. It would be nice to get the animation started right away, so I assume it&apos;s OK to call one-shot with a delay of 0?

&gt; &gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:537
&gt; &gt; +#endif // ENABLE(SMOOTH_SCROLLING
&gt; 
&gt; looks like you accidentally dropped a )

Thanks, fixed.

&gt; &gt; Source/WebCore/platform/ScrollAnimatorNone.h:56
&gt; &gt;  
&gt; 
&gt; Might add a 
&gt;   // PlatformGestureCurveTarget implementation

Done.

&gt; And put the functions in a logical place so it stands out separate from the ScrollAnimator functiosn

Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCGestureCurve.cpp:5
&gt; &gt; + * modification, are permitted provided that the following conditions
&gt; 
&gt; do we need a cpp file for this?

Nope. It&apos;s a remnant from early on when I thought there might be common functionality to go in here.

Removed.

&gt; &gt; Source/WebKit/chromium/WebKit.gyp:288
&gt; &gt; +                &apos;public/platform/PlatformGestureCurveToCCGestureCurveAdapter.h&apos;,
&gt; 
&gt; move to src/

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567772</commentid>
    <comment_count>6</comment_count>
      <attachid>129315</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-02-29 11:27:21 -0800</bug_when>
    <thetext>Comment on attachment 129315
Patch

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

&gt;&gt;&gt; Source/WebCore/page/EventHandler.cpp:2354
&gt;&gt;&gt; +    case PlatformEvent::GestureFlingStart:
&gt;&gt; 
&gt;&gt; Feels like a separate patch?
&gt; 
&gt; Sure, I can pull this out to a separate patch. Would this land *after* the gesture animation patch (so handleGestureEvent will already exist in ScrollAnimatorNone)? If we do it the other way around, I&apos;m worried about the handGestureEvents getting ripped out again because they are &apos;unused&apos; (like they did last week).

GestureScrollEnd == the start of a fling if the velocity &gt; 0

&gt; Source/WebCore/page/EventHandler.cpp:2355
&gt; +    case PlatformEvent::GestureFlingCancel: {

don&apos;t need this either. stop the in-progress fling on a GestureTapBegin

&gt; Source/WebCore/platform/ScrollAnimator.cpp:127
&gt; +{

we need non-animated scrolls (but not flings) here to make the layout tests pass. My patch adds I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568659</commentid>
    <comment_count>7</comment_count>
      <attachid>129705</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-01 07:52:11 -0800</bug_when>
    <thetext>Created attachment 129705
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568662</commentid>
    <comment_count>8</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-01 07:57:05 -0800</bug_when>
    <thetext>Uploaded a new patch that addresses Rob&apos;s comments.

*** I haven&apos;t split out the code from EventHandler to a separate bug yet, as I&apos;d like to keep everything in a single patch until everything looks OK, and tests are developed (I&apos;m working on that now).

I changed the Fling physics to use a CDF curve as opposed to the density function that was in the first patch. Again, this will probably change before the patch lands, but I wanted to address Nat&apos;s concerns about the incremental nature of the scroll being robust to jitter in the tick interval.

Also, want to run this new patch through the bots to see if I have resolved the Mac compile issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568853</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-01 13:22:25 -0800</bug_when>
    <thetext>Could you summarize the relationship between this and the logic in ScrollAnimatorNone at a behavioral level (not a code sharing level)?  Is it the same model, or something different?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568869</commentid>
    <comment_count>10</comment_count>
      <attachid>129705</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-03-01 13:36:59 -0800</bug_when>
    <thetext>Comment on attachment 129705
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:2380
&gt; +        // GestureScrollEnd with non-zero velocity (deltaX/Y) signals start of Fling.

this will go to the &quot;right&quot; target assuming 67822 lands.

&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:449
&gt; +#if ENABLE(GESTURE_EVENTS)

isn&apos;t there a bunch of code here that you could tear out by using the curves? Maybe in a subsequent CL.

&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:463
&gt; +    case PlatformGestureEvent::GestureTapDown:

I think you will need to call the superclass to get scroll updates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570303</commentid>
    <comment_count>11</comment_count>
      <attachid>129705</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-04 16:39:07 -0800</bug_when>
    <thetext>Comment on attachment 129705
Patch

Attachment 129705 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11808300

New failing tests:
fast/events/platform-wheelevent-paging-x-in-scrolling-page.html
fast/events/wheelevent-in-vertical-scrollbar-in-rtl.html
fast/events/remove-child-onscroll.html
css3/filters/effect-invert-hw.html
fast/events/platform-wheelevent-paging-y-in-non-scrolling-page.html
fast/events/platform-wheelevent-paging-x-in-scrolling-div.html
fast/events/scroll-in-scaled-page-with-overflow-hidden.html
fast/repaint/overflow-scroll-in-overflow-scroll-scrolled.html
accessibility/aria-disabled.html
fast/events/wheelevent-direction-inverted-from-device.html
fast/loader/text-document-wrapping.html
css2.1/20110323/abspos-containing-block-initial-004d.htm
fast/repaint/overflow-auto-in-overflow-auto-scrolled.html
fast/events/platform-wheelevent-paging-xy-in-scrolling-div.html
fast/events/platform-wheelevent-paging-xy-in-scrolling-page.html
fast/events/continuous-platform-wheelevent-in-scrolling-div.html
css2.1/20110323/abspos-containing-block-initial-004b.htm
compositing/reflections/nested-reflection-opacity.html
fast/events/platform-wheelevent-paging-y-in-scrolling-page.html
compositing/reflections/nested-reflection-transformed.html
fast/events/wheelevent-in-horizontal-scrollbar-in-rtl.html
http/tests/xmlhttprequest/xmlhttprequest-unsafe-redirect.html
editing/selection/select-line-break-with-opposite-directionality.html
http/tests/inspector/inspect-element.html
fast/events/platform-wheelevent-in-scrolling-div.html
fast/events/platform-wheelevent-paging-y-in-non-scrolling-div.html
fast/events/platform-wheelevent-paging-x-in-non-scrolling-page.html
fast/events/platform-wheelevent-paging-y-in-scrolling-div.html
fast/events/platform-wheelevent-paging-x-in-non-scrolling-div.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573231</commentid>
    <comment_count>12</comment_count>
      <attachid>130692</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-07 14:16:16 -0800</bug_when>
    <thetext>Created attachment 130692
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573234</commentid>
    <comment_count>13</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-07 14:18:17 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=130692) [details]
&gt; Patch

This version removes all development code and adds tests.

The curve classes are designed to manage errors from float -&gt; int conversion internally so they do not accumulate.

This patch, combined with Rob&apos;s follow-on patch, will provide physics-based scroll on both impl and software path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573282</commentid>
    <comment_count>14</comment_count>
      <attachid>130692</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2012-03-07 15:10:59 -0800</bug_when>
    <thetext>Comment on attachment 130692
Patch

Attachment 130692 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11850415</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573330</commentid>
    <comment_count>15</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-07 15:57:05 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 130692 [details])
&gt; Attachment 130692 [details] did not pass gtk-ews (gtk):
&gt; Output: http://queues.webkit.org/results/11850415

GTK turned on SMOOTH_SCROLLING last week, will add necessary files to GTK build in next revision of patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573437</commentid>
    <comment_count>16</comment_count>
      <attachid>130692</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-07 18:04:13 -0800</bug_when>
    <thetext>Comment on attachment 130692
Patch

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

Looks ready for JamesR eyes. James, I&apos;d suggest focusing on curves and ignore the WebCompositorInputHandlerImpl changes, as those will move out to a new patch in the morning.

&gt; Source/WebCore/ChangeLog:10
&gt; +        This patch adds PlatformGestureCurve as a way of using different scroll physics in a

For posterity and those doing git blame down the road, you might phrase this in a more general way.

Namely, the point of PlatformGestureCurve is to pull out the physical simulation from control concerns. This allows the physics to be reused in alternate places.

&gt; Source/WebCore/platform/ActivePlatformGestureAnimation.h:37
&gt; +class ActivePlatformGestureAnimation {

Might put a // explaining what the logical purpose of this class is. Though maybe thats non-webkitty... (:

&gt; Source/WebCore/platform/PlatformGestureCurve.h:32
&gt; +class PlatformGestureCurve {

Again, // explaining the logical purpose of a curve...

&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:491
&gt; +    if (!!m_gestureAnimation) {

did you really mean &quot;!!&quot;? Is that normative?

&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:515
&gt; +// PlatformGestureCurveTarget implementation

complete sentence comments.

&gt; Source/WebCore/platform/ScrollAnimatorNone.h:91
&gt; +    // PlatformGestureCurveTarget implementation

complete sentence

&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.h:44
&gt; +    // FIXME: consider imaking the value of sigma settable in the constructor.

Comment might make more sense in the implementation of this function instead of header since sigma isn&apos;t even visible on the header

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:138
&gt; +    m_client-&gt;setNeedsCommitOnImplThread();

I think it should be just setNeedsRedraw() here.

The setNeedsCommit should be called by the thing that is mutating the tree. SetNeedsCommit says &quot;we need to push something back to the main frame&quot; --- we shoudl only do that when we really do change something.... so, logically, the m_activeGestureAnimation-&gt;animate() function should itself end up calling setNeedsCommit.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:757
&gt; +            m_client-&gt;setNeedsCommitOnImplThread();

See my note before. I think this is a bit wonky too - if i read this right, if you do a fling, then we only commit at fling end. Thats fine with me, but I dont think thats part of the ticking logic --- I think the person implementing the CCActiveGestureAnimation should be the one to call setNeedsCommitOnImpl thread... seem kosher?

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.h:54
&gt; +    static PassOwnPtr&lt;WebCompositorInputHandlerImpl&gt; create(WebCore::CCInputHandlerClient*, WebCore::CCGestureCurveTarget*);

Can we pull this out to a different patch?

I&apos;m not sure this is the right embedding.

I think you want the curve target to be just another class in the wcih cpp file. That can itself be a class that impelments curve target and calls methods on CCInputHandlerClient to manipulate scroll position.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573568</commentid>
    <comment_count>17</comment_count>
      <attachid>130692</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-07 21:24:25 -0800</bug_when>
    <thetext>Comment on attachment 130692
Patch

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

&gt; Source/WebCore/platform/ActivePlatformGestureAnimation.h:41
&gt; +    virtual bool animate(double ts);

please don&apos;t use abbreviations or one or two letter variable names. spell it out

i&apos;m assuming all the timestamps/etc in this patch are in seconds - is that correct? if anything is in millis please type-tag the variable/parameter to reflect that.  webkit usually uses double seconds and we&apos;re converging on that in the compositor as well, so seconds is preferred

&gt; Source/WebCore/platform/PlatformGestureCurve.h:35
&gt; +    virtual bool apply(double ts, PlatformGestureCurveTarget*) = 0;

bad parameter name. expand

it&apos;s very rare to have a pure virtual class without a declare d&apos;tor. please add a virtual d&apos;tor in either the public section (if it&apos;s expected that classes will retain ownership of objects via a PlatformGestureCurve*) or in the protected section (if classes will only retain ownership by a pointer to a more specific type)

&gt; Source/WebCore/platform/PlatformGestureCurve.h:38
&gt; +}; // namespace

no ; to close a namespace

&gt; Source/WebCore/platform/PlatformGestureCurveTarget.h:35
&gt; +    // FIXME: add interfaces for setScroll(), setPageScaleAndScroll(), etc.

same comment as above re: d&apos;tor

&gt; Source/WebCore/platform/PlatformGestureCurveTarget.h:38
&gt; +}; // namespace

no ; to close a namespace

&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:451
&gt; +    if (!!m_gestureAnimation)

no !!. you can just call .clear(), it&apos;s fine to do that on an OwnPtr&lt;&gt; that&apos;s already cleared

&gt;&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:491
&gt;&gt; +    if (!!m_gestureAnimation) {
&gt; 
&gt; did you really mean &quot;!!&quot;? Is that normative?

OwnPtr&lt;&gt; has an operator bool that does the right thing, just rely on that. this isn&apos;t javascript - we have a (somewhat) real type system and don&apos;t need to coorce to bool with these contortions

&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.h:37
&gt; +class TouchFlingPlatformGestureCurve : public PlatformGestureCurve {

since this class has virtuals declare a d&apos;tor explicitly in the header and define it in the .cpp

&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.h:41
&gt; +    virtual bool apply(double ts, PlatformGestureCurveTarget*);

expand parameter name

&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.h:45
&gt; +    TouchFlingPlatformGestureCurve(const FloatPoint&amp; velocity);

explicit

&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.h:48
&gt; +    float m_timeScaler;

i think this should be named like a noun, but it feels more like a verb. this isn&apos;t a float that scales time, it&apos;s some sort of scale factor

&gt; Source/WebCore/platform/WheelFlingPlatformGestureCurve.cpp:42
&gt; +    ASSERT(std::abs(velocity.x() || std::abs(velocity.y())));

using namespace std;, etc. or even better, why not just velocity != FloatPoint::zero() ?

&gt; Source/WebCore/platform/WheelFlingPlatformGestureCurve.h:41
&gt; +    virtual bool apply(double ts, PlatformGestureCurveTarget*);

need better parameter name

&gt; Source/WebCore/platform/WheelFlingPlatformGestureCurve.h:45
&gt; +    // FIXME: consider making the value of sigma settable in the constructor.
&gt; +    WheelFlingPlatformGestureCurve(const FloatPoint&amp; velocity);

comment should probably move as nduca suggested above, c&apos;tor needs explicit

&gt; Source/WebCore/platform/WheelFlingPlatformGestureCurve.h:51
&gt; +}; // namespace

no ; on namespace close. if you&apos;re going to comment that we&apos;re closing a namespace at least say which namespace it is

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveGestureAnimation.h:42
&gt; +    virtual bool animate(double ts);

guess what?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCGestureCurve.h:37
&gt; +    virtual void setScrollIncrement(const IntPoint &amp;) = 0;

put the &amp; right next to the type, no space

please declare d&apos;tor in appropriate visibility

&gt; Source/WebCore/platform/graphics/chromium/cc/CCGestureCurve.h:43
&gt; +    virtual bool apply(double ts, CCGestureCurveTarget*) = 0;

same as above (param name, d&apos;tor)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:753
&gt; +    if (!!m_activeGestureAnimation) {

no !!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573851</commentid>
    <comment_count>18</comment_count>
      <attachid>130692</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-08 08:31:48 -0800</bug_when>
    <thetext>Comment on attachment 130692
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt; +        This patch adds PlatformGestureCurve as a way of using different scroll physics in a
&gt; 
&gt; For posterity and those doing git blame down the road, you might phrase this in a more general way.
&gt; 
&gt; Namely, the point of PlatformGestureCurve is to pull out the physical simulation from control concerns. This allows the physics to be reused in alternate places.

OK, will expand as suggested.

&gt;&gt; Source/WebCore/platform/ActivePlatformGestureAnimation.h:37
&gt;&gt; +class ActivePlatformGestureAnimation {
&gt; 
&gt; Might put a // explaining what the logical purpose of this class is. Though maybe thats non-webkitty... (:

Done. Let me know if what I&apos;ve written is what you were looking for.

&gt;&gt; Source/WebCore/platform/ActivePlatformGestureAnimation.h:41
&gt;&gt; +    virtual bool animate(double ts);
&gt; 
&gt; please don&apos;t use abbreviations or one or two letter variable names. spell it out
&gt; 
&gt; i&apos;m assuming all the timestamps/etc in this patch are in seconds - is that correct? if anything is in millis please type-tag the variable/parameter to reflect that.  webkit usually uses double seconds and we&apos;re converging on that in the compositor as well, so seconds is preferred

Fixed. All the times in this patch are in seconds, not milliseconds.

&gt;&gt; Source/WebCore/platform/PlatformGestureCurve.h:32
&gt;&gt; +class PlatformGestureCurve {
&gt; 
&gt; Again, // explaining the logical purpose of a curve...

Done.

&gt;&gt; Source/WebCore/platform/PlatformGestureCurve.h:35
&gt;&gt; +    virtual bool apply(double ts, PlatformGestureCurveTarget*) = 0;
&gt; 
&gt; bad parameter name. expand
&gt; 
&gt; it&apos;s very rare to have a pure virtual class without a declare d&apos;tor. please add a virtual d&apos;tor in either the public section (if it&apos;s expected that classes will retain ownership of objects via a PlatformGestureCurve*) or in the protected section (if classes will only retain ownership by a pointer to a more specific type)

Thanks, fixed.

&gt;&gt; Source/WebCore/platform/PlatformGestureCurve.h:38
&gt;&gt; +}; // namespace
&gt; 
&gt; no ; to close a namespace

Fixed.

&gt;&gt; Source/WebCore/platform/PlatformGestureCurveTarget.h:35
&gt;&gt; +    // FIXME: add interfaces for setScroll(), setPageScaleAndScroll(), etc.
&gt; 
&gt; same comment as above re: d&apos;tor

Fixed.

&gt;&gt; Source/WebCore/platform/PlatformGestureCurveTarget.h:38
&gt;&gt; +}; // namespace
&gt; 
&gt; no ; to close a namespace

Fixed.

&gt;&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:451
&gt;&gt; +    if (!!m_gestureAnimation)
&gt; 
&gt; no !!. you can just call .clear(), it&apos;s fine to do that on an OwnPtr&lt;&gt; that&apos;s already cleared

Fixed.

&gt;&gt;&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:491
&gt;&gt;&gt; +    if (!!m_gestureAnimation) {
&gt;&gt; 
&gt;&gt; did you really mean &quot;!!&quot;? Is that normative?
&gt; 
&gt; OwnPtr&lt;&gt; has an operator bool that does the right thing, just rely on that. this isn&apos;t javascript - we have a (somewhat) real type system and don&apos;t need to coorce to bool with these contortions

Cool, did not know this. I had seen the !! elsewhere and thought it was normative.

Fixed.

&gt;&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:515
&gt;&gt; +// PlatformGestureCurveTarget implementation
&gt; 
&gt; complete sentence comments.

Fixed.

&gt;&gt; Source/WebCore/platform/ScrollAnimatorNone.h:91
&gt;&gt; +    // PlatformGestureCurveTarget implementation
&gt; 
&gt; complete sentence

Fixed.

&gt;&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.h:37
&gt;&gt; +class TouchFlingPlatformGestureCurve : public PlatformGestureCurve {
&gt; 
&gt; since this class has virtuals declare a d&apos;tor explicitly in the header and define it in the .cpp

Done.

&gt;&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.h:41
&gt;&gt; +    virtual bool apply(double ts, PlatformGestureCurveTarget*);
&gt; 
&gt; expand parameter name

Done.

&gt;&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.h:44
&gt;&gt; +    // FIXME: consider imaking the value of sigma settable in the constructor.
&gt; 
&gt; Comment might make more sense in the implementation of this function instead of header since sigma isn&apos;t even visible on the header

Removed.

&gt;&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.h:45
&gt;&gt; +    TouchFlingPlatformGestureCurve(const FloatPoint&amp; velocity);
&gt; 
&gt; explicit

Done.

&gt;&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.h:48
&gt;&gt; +    float m_timeScaler;
&gt; 
&gt; i think this should be named like a noun, but it feels more like a verb. this isn&apos;t a float that scales time, it&apos;s some sort of scale factor

Good idea - done.

&gt;&gt; Source/WebCore/platform/WheelFlingPlatformGestureCurve.cpp:42
&gt;&gt; +    ASSERT(std::abs(velocity.x() || std::abs(velocity.y())));
&gt; 
&gt; using namespace std;, etc. or even better, why not just velocity != FloatPoint::zero() ?

Good idea - Done.

&gt;&gt; Source/WebCore/platform/WheelFlingPlatformGestureCurve.h:41
&gt;&gt; +    virtual bool apply(double ts, PlatformGestureCurveTarget*);
&gt; 
&gt; need better parameter name

Fixed.

&gt;&gt; Source/WebCore/platform/WheelFlingPlatformGestureCurve.h:45
&gt;&gt; +    WheelFlingPlatformGestureCurve(const FloatPoint&amp; velocity);
&gt; 
&gt; comment should probably move as nduca suggested above, c&apos;tor needs explicit

Yup, done.

&gt;&gt; Source/WebCore/platform/WheelFlingPlatformGestureCurve.h:51
&gt;&gt; +}; // namespace
&gt; 
&gt; no ; on namespace close. if you&apos;re going to comment that we&apos;re closing a namespace at least say which namespace it is

Done and done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveGestureAnimation.h:42
&gt;&gt; +    virtual bool animate(double ts);
&gt; 
&gt; guess what?

:) Done

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCGestureCurve.h:37
&gt;&gt; +    virtual void setScrollIncrement(const IntPoint &amp;) = 0;
&gt; 
&gt; put the &amp; right next to the type, no space
&gt; 
&gt; please declare d&apos;tor in appropriate visibility

Ooops, typo on the &apos;&amp;&apos; - fixed.

D&apos;tor declared.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCGestureCurve.h:43
&gt;&gt; +    virtual bool apply(double ts, CCGestureCurveTarget*) = 0;
&gt; 
&gt; same as above (param name, d&apos;tor)

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:138
&gt;&gt; +    m_client-&gt;setNeedsCommitOnImplThread();
&gt; 
&gt; I think it should be just setNeedsRedraw() here.
&gt; 
&gt; The setNeedsCommit should be called by the thing that is mutating the tree. SetNeedsCommit says &quot;we need to push something back to the main frame&quot; --- we shoudl only do that when we really do change something.... so, logically, the m_activeGestureAnimation-&gt;animate() function should itself end up calling setNeedsCommit.

Done. I&apos;ve placed the setNeedsCommit in CCLayerTreeHostImpl::setScrollIncrement(), is this is where the animate function calls through to. Otherwise, the m_activeGestureAnimation object doesn&apos;t have a CCLayerTreeHostImplClient* in order to call from ...

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:753
&gt;&gt; +    if (!!m_activeGestureAnimation) {
&gt; 
&gt; no !!

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:757
&gt;&gt; +            m_client-&gt;setNeedsCommitOnImplThread();
&gt; 
&gt; See my note before. I think this is a bit wonky too - if i read this right, if you do a fling, then we only commit at fling end. Thats fine with me, but I dont think thats part of the ticking logic --- I think the person implementing the CCActiveGestureAnimation should be the one to call setNeedsCommitOnImpl thread... seem kosher?

OK, fixed as indicated above. But we still need the redraw call, right?

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.h:54
&gt;&gt; +    static PassOwnPtr&lt;WebCompositorInputHandlerImpl&gt; create(WebCore::CCInputHandlerClient*, WebCore::CCGestureCurveTarget*);
&gt; 
&gt; Can we pull this out to a different patch?
&gt; 
&gt; I&apos;m not sure this is the right embedding.
&gt; 
&gt; I think you want the curve target to be just another class in the wcih cpp file. That can itself be a class that impelments curve target and calls methods on CCInputHandlerClient to manipulate scroll position.

Hmm, ok - but this then require an icky cast of a WebCore::CCInputHandlerClient* to a WebCore::CCGestureCurveTarget* that leaves me rather uneasy. Is that considered OK?

Also, this means we can&apos;t test the adapters in PlatformGestureCurveTest.cpp (?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573900</commentid>
    <comment_count>19</comment_count>
      <attachid>130838</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-08 10:07:10 -0800</bug_when>
    <thetext>Created attachment 130838
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573902</commentid>
    <comment_count>20</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-08 10:08:08 -0800</bug_when>
    <thetext>Revised as per suggestions.

This splits out the curves, will post WCIH/SAN plumbing in separate patch momentarily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574288</commentid>
    <comment_count>21</comment_count>
      <attachid>130838</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-08 15:16:38 -0800</bug_when>
    <thetext>Comment on attachment 130838
Patch

LGTM, thanks for splitting this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574436</commentid>
    <comment_count>22</comment_count>
      <attachid>130838</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-08 17:46:52 -0800</bug_when>
    <thetext>Comment on attachment 130838
Patch

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

Seems pretty good. I think it&apos;s worth taking another pass to tighten up interface, etc, then we&apos;re good to land.

&gt; Source/WebCore/platform/ActivePlatformGestureAnimation.h:42
&gt; +class ActivePlatformGestureAnimation {
&gt; +public:

WTF_MAKE_NONCOPYABLE please

&gt; Source/WebCore/platform/ActivePlatformGestureAnimation.h:43
&gt; +    static PassOwnPtr&lt;ActivePlatformGestureAnimation&gt; create(double startTime, PassOwnPtr&lt;PlatformGestureCurve&gt;, PlatformGestureCurveTarget*);

can you document the requirements of the target here? looks like the target has to outlive the animation, right?

&gt; Source/WebCore/platform/ActivePlatformGestureAnimation.h:45
&gt; +    virtual bool animate(double time);

why is this virtual?

&gt; Source/WebCore/platform/PlatformGestureCurve.h:38
&gt; +    virtual ~PlatformGestureCurve() { }

why is this d&apos;tor public (as opposed to protected)? it&apos;s important to think carefully about this distinction for all of your interface classes - do you expect that users who see only this interface should be able to take ownership of the object (and delete it) or should owners have access to a pointer of a more specific type?

&gt; Source/WebCore/platform/PlatformGestureCurveTarget.h:34
&gt; +    virtual ~PlatformGestureCurveTarget() { }

same comment as above re: visibility of d&apos;tor

&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.cpp:43
&gt; +    , m_timeScaleFactor(1000 / max(1.f, max(abs(velocity.x()), abs(velocity.y()))))

if this is supposed to take a floating point velocity, did you mean to use fabs()?

&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.cpp:45
&gt; +    ASSERT(abs(velocity.x()) || abs(velocity.y()));

the &quot;abs()&quot; calls here are a bit surprising. they&apos;ll coerce to int. are you trying to ASSERT that velocity is not too close to zero or that it&apos;s not actually zero? i think either way this assertion could be written in a much clearer fashion.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveGestureAnimation.h:43
&gt; +    virtual bool animate(double time);

again - why virtual? if you expect subclasses then the d&apos;tor should be declared virtual

&gt; Source/WebCore/platform/graphics/chromium/cc/CCGestureCurve.h:29
&gt; +#include &lt;wtf/Noncopyable.h&gt;
&gt; +#include &lt;wtf/PassOwnPtr.h&gt;

you don&apos;t appear to need either of these #includes in this header

&gt; Source/WebCore/platform/graphics/chromium/cc/CCGestureCurve.h:37
&gt; +    virtual ~CCGestureCurveTarget() { }

feels like it should be protected, is that right?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCGestureCurve.h:45
&gt; +    virtual ~CCGestureCurve() { }

protected?

&gt; Source/WebKit/chromium/tests/PlatformGestureCurveTest.cpp:2
&gt; + * Copyright (C) 2011 Google Inc. All rights reserved.

2012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574501</commentid>
    <comment_count>23</comment_count>
      <attachid>130953</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-08 19:18:25 -0800</bug_when>
    <thetext>Created attachment 130953
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574502</commentid>
    <comment_count>24</comment_count>
      <attachid>130838</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-08 19:19:57 -0800</bug_when>
    <thetext>Comment on attachment 130838
Patch

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

I also added an explicit destructor for ActivePlatformGestureAnimation.

&gt;&gt; Source/WebCore/platform/ActivePlatformGestureAnimation.h:42
&gt;&gt; +public:
&gt; 
&gt; WTF_MAKE_NONCOPYABLE please

Done.

&gt;&gt; Source/WebCore/platform/ActivePlatformGestureAnimation.h:43
&gt;&gt; +    static PassOwnPtr&lt;ActivePlatformGestureAnimation&gt; create(double startTime, PassOwnPtr&lt;PlatformGestureCurve&gt;, PlatformGestureCurveTarget*);
&gt; 
&gt; can you document the requirements of the target here? looks like the target has to outlive the animation, right?

Done.

&gt;&gt; Source/WebCore/platform/ActivePlatformGestureAnimation.h:45
&gt;&gt; +    virtual bool animate(double time);
&gt; 
&gt; why is this virtual?

Good point, doesn&apos;t need to be.

Fixed.

&gt;&gt; Source/WebCore/platform/PlatformGestureCurve.h:38
&gt;&gt; +    virtual ~PlatformGestureCurve() { }
&gt; 
&gt; why is this d&apos;tor public (as opposed to protected)? it&apos;s important to think carefully about this distinction for all of your interface classes - do you expect that users who see only this interface should be able to take ownership of the object (and delete it) or should owners have access to a pointer of a more specific type?

Right. PlatformGestureCurveTarget derived classes will (1) always be represented as pointers to the base class, and (2) this pointer is managed by OwnPtr. So, unless I&apos;m mistaken, doesn&apos;t the destructor need to be public in this case?

If I&apos;m wrong let me know and I&apos;ll change it.

&gt;&gt; Source/WebCore/platform/PlatformGestureCurveTarget.h:34
&gt;&gt; +    virtual ~PlatformGestureCurveTarget() { }
&gt; 
&gt; same comment as above re: visibility of d&apos;tor

This case is a bit different. Here PlatformGestureCurveTarget is one interface of (potentially) many a class could implement (e.g. ScrollAnimatorNone), so we should declare the d&apos;tor protected so as not to allow someone who owns a PlatformGestureCurveTarget pointer to delete the derived object.

Let me know if my reasoning here is faulty.

&gt;&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.cpp:43
&gt;&gt; +    , m_timeScaleFactor(1000 / max(1.f, max(abs(velocity.x()), abs(velocity.y()))))
&gt; 
&gt; if this is supposed to take a floating point velocity, did you mean to use fabs()?

fabs() might be better ... in most cases it&apos;s not too critical if we truncate the velocities to integers, as they will generally be large, and the timeScalefactor need not be overly precise.

That being said, no reason not to use fabs() either, so we&apos;ll go with that.

&gt;&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.cpp:45
&gt;&gt; +    ASSERT(abs(velocity.x()) || abs(velocity.y()));
&gt; 
&gt; the &quot;abs()&quot; calls here are a bit surprising. they&apos;ll coerce to int. are you trying to ASSERT that velocity is not too close to zero or that it&apos;s not actually zero? i think either way this assertion could be written in a much clearer fashion.

Fixed. (Don&apos;t recall now why I was using abs ...)

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveGestureAnimation.h:43
&gt;&gt; +    virtual bool animate(double time);
&gt; 
&gt; again - why virtual? if you expect subclasses then the d&apos;tor should be declared virtual

Nope, no need to be virtual - fixed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCGestureCurve.h:29
&gt;&gt; +#include &lt;wtf/PassOwnPtr.h&gt;
&gt; 
&gt; you don&apos;t appear to need either of these #includes in this header

Right, removed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCGestureCurve.h:37
&gt;&gt; +    virtual ~CCGestureCurveTarget() { }
&gt; 
&gt; feels like it should be protected, is that right?

yes, makes sense ... this way we cannot delete via a base-class pointer, right?

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCGestureCurve.h:45
&gt;&gt; +    virtual ~CCGestureCurve() { }
&gt; 
&gt; protected?

No, same reasoning as PlatformGestureCurve above. (Unless I&apos;m wrong.)

&gt;&gt; Source/WebKit/chromium/tests/PlatformGestureCurveTest.cpp:2
&gt;&gt; + * Copyright (C) 2011 Google Inc. All rights reserved.
&gt; 
&gt; 2012

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574522</commentid>
    <comment_count>25</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-08 19:53:07 -0800</bug_when>
    <thetext>Apparently I was wrong about the CCGestureCurveTarget&apos;s d&apos;tor visibility, as it won&apos;t compile when it&apos;s made protected since we need it to construct GestureCurveTarget in WebCompositorInputHandlerImpl. (Not sure why I missed this earlier, expect I got my multiple patch parts out of order ...). Will revise patch shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574534</commentid>
    <comment_count>26</comment_count>
      <attachid>130959</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-08 20:16:02 -0800</bug_when>
    <thetext>Created attachment 130959
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574536</commentid>
    <comment_count>27</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-08 20:17:15 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; Created an attachment (id=130959) [details]
&gt; Patch

Also fixes non-existent entry in WebCore.gypi from previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574546</commentid>
    <comment_count>28</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-08 20:29:52 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; Apparently I was wrong about the CCGestureCurveTarget&apos;s d&apos;tor visibility, as it won&apos;t compile when it&apos;s made protected since we need it to construct GestureCurveTarget in WebCompositorInputHandlerImpl. (Not sure why I missed this earlier, expect I got my multiple patch parts out of order ...). Will revise patch shortly.

Argh! After all this, I managed to revert the change making the d&apos;tor public before submitting the patch. It&apos;s getting late, and my internet connection is poor, so I&apos;ll fix this in the follow-on patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575248</commentid>
    <comment_count>29</comment_count>
      <attachid>130959</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-09 14:41:25 -0800</bug_when>
    <thetext>Comment on attachment 130959
Patch

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575301</commentid>
    <comment_count>30</comment_count>
      <attachid>130959</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-09 15:35:10 -0800</bug_when>
    <thetext>Comment on attachment 130959
Patch

Clearing flags on attachment: 130959

Committed r110344: &lt;http://trac.webkit.org/changeset/110344&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575302</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-09 15:35:17 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129315</attachid>
            <date>2012-02-28 13:19:34 -0800</date>
            <delta_ts>2012-03-01 07:52:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79827-20120228161933.patch</filename>
            <type>text/plain</type>
            <size>78225</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTIyMGQwOTAzMDc0NjQy
YWM5MWEwMWYxYTE5YWNlNmE2ZWUzOTQwNS4uYzFlMzg4OWYxMjRlMmQ3ZjA5ODc5M2U1YmRjYzFi
NzM1NDg5YTQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxMi0wMi0yOCAgVy4g
SmFtZXMgTWFjTGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9t
aXVtXSBJbXBsZW1lbnQgc2Nyb2xsIHBoeXNpY3MgYXJjaGl0ZWN0dXJlIGZvciBpbXBsL21haW4g
dGhyZWFkIFtub3QgZm9yIHJldmlldyB5ZXRdCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03OTgyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgIFRoaXMg
cGF0Y2ggYWRkcyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSBhcyBhIHdheSBvZiB1c2luZyBkaWZmZXJl
bnQgc2Nyb2xsIHBoeXNpY3MgaW4gYQorICAgICAgICBzaW5nbGUgZnJhbWV3b3JrIHRoYXQgd2ls
bCB3b3JrIG9uIGJvdGggbWFpbiB0aHJlYWQgYW5kIGltcGwgdGhyZWFkLgorCisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9QbGF0Zm9ybUV2ZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1HZXN0
dXJlQWN0aXZlQW5pbWF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZUFjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZUFjdGl2ZUFuaW1hdGlvbjo6UGxhdGZvcm1H
ZXN0dXJlQWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVy
ZUFjdGl2ZUFuaW1hdGlvbjo6YW5pbWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1H
ZXN0dXJlQWN0aXZlQW5pbWF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChQbGF0Zm9ybUdlc3R1cmVBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAqIHBsYXRmb3Jt
L1BsYXRmb3JtR2VzdHVyZUN1cnZlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1H
ZXN0dXJlQ3VydmVUYXJnZXQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9y
bVNjcm9sbEdlc3R1cmVDdXJ2ZUZsaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU2Nyb2xsR2VzdHVyZUN1cnZlRmxpbmc6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVNjcm9sbEdlc3R1cmVDdXJ2ZUZsaW5nOjpQ
bGF0Zm9ybVNjcm9sbEdlc3R1cmVDdXJ2ZUZsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtU2Nyb2xsR2VzdHVyZUN1cnZlRmxpbmc6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9Q
bGF0Zm9ybVNjcm9sbEdlc3R1cmVDdXJ2ZUZsaW5nLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbEdlc3R1cmVDdXJ2ZUZsaW5nKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9QbGF0Zm9ybVNjcm9sbEdlc3R1cmVDdXJ2ZUdlbmVyaWMuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxHZXN0
dXJlQ3VydmVHZW5lcmljOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3Jv
bGxHZXN0dXJlQ3VydmVHZW5lcmljOjpQbGF0Zm9ybVNjcm9sbEdlc3R1cmVDdXJ2ZUdlbmVyaWMp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxHZXN0dXJlQ3VydmVHZW5lcmljOjph
cHBseSk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1TY3JvbGxHZXN0dXJlQ3VydmVHZW5l
cmljLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQbGF0Zm9ybVNjcm9s
bEdlc3R1cmVDdXJ2ZUdlbmVyaWMpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3I6OmhhbmRsZUdlc3R1cmVFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaDoKKyAgICAgICAgKFNjcm9sbEFuaW1hdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvck5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvck5vbmU6OmhhbmRsZUdlc3R1cmVFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck5vbmU6OnNldFNjcm9sbEluY3JlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvck5vbmU6OmFuaW1hdGlvblRpbWVyRmlyZWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChTY3JvbGxBbmltYXRvck5vbmUpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZp
ZXcuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
OjpoYW5kbGVHZXN0dXJlRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuaDoK
KyAgICAgICAgKFNjcm9sbFZpZXcpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFy
ZWE6OmhhbmRsZUdlc3R1cmVFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFy
ZWEuaDoKKyAgICAgICAgKFNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0
aW9uOjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3Rp
dmVHZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVH
ZXN0dXJlQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJlQ3VydmUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDR2VzdHVyZUN1cnZlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChDQ0dlc3R1cmVDdXJ2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NHZXN0dXJlQ3VydmVUYXJnZXQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKENDR2VzdHVyZUN1cnZlVGFyZ2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChDQ0lucHV0SGFuZGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjbGVhckFjdGl2ZUdlc3R1cmVB
bmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0U2Ny
b2xsSW5jcmVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFu
aW1hdGVHZXN0dXJlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjphY3RpdmVHZXN0dXJlQW5pbWF0aW9uKToKKyAgICAg
ICAgKENDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQ
cm94eTo6aW5pdGlhbGl6ZUltcGxPbkltcGxUaHJlYWQpOgorCiAyMDEyLTAyLTI4ICBZdXJ5IFNl
bWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IHNob3cgcmVzb3VyY2UgZGl2aWRlcnMgb24gbWVtb3J5IGNvdW50ZXIgZ3JhcGhzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IDIzZjc4YjQwMzEzMDA3MTNhODE4ZjkyYjQ3N2JkZjA5NmY2
NzA4NWIuLjY2Njc0ZTc0OWQzZWE1MjBhODI3NGI4Zjc4NzNjNTA0NzgzNzU0MWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTItMDItMjggIFcuIEphbWVz
IE1hY0xlYW4gIDx3am1hY2xlYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IHNjcm9sbCBwaHlzaWNzIGFyY2hpdGVjdHVyZSBmb3IgaW1wbC9tYWluIHRocmVh
ZCBbbm90IGZvciByZXZpZXcgeWV0XQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Nzk4MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgUGxhdGZvcm1HZXN0dXJlQ3VydmUgYXMgYSB3
YXkgb2YgdXNpbmcgZGlmZmVyZW50IHNjcm9sbCBwaHlzaWNzIGluIGEKKyAgICAgICAgc2luZ2xl
IGZyYW1ld29yayB0aGF0IHdpbGwgd29yayBvbiBib3RoIG1haW4gdGhyZWFkIGFuZCBpbXBsIHRo
cmVhZC4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL3BsYXRmb3Jt
L1BsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1
cmVDdXJ2ZUFkYXB0ZXIpOgorICAgICAgICAqIHNyYy9DQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVU
YXJnZXRBZGFwdGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXI6OkNDVG9QbGF0Zm9y
bUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUb1BsYXRm
b3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRlcjo6c2V0U2Nyb2xsSW5jcmVtZW50KToKKyAgICAg
ICAgKiBzcmMvQ0NUb1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRlci5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NUb1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFy
Z2V0QWRhcHRlcik6CisgICAgICAgICogc3JjL1BsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1
cmVDdXJ2ZUFkYXB0ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVD
dXJ2ZUFkYXB0ZXI6OlBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZl
QWRhcHRlcjo6YXBwbHkpOgorICAgICAgICAqIHNyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0lucHV0SGFuZGxlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KToKKyAgICAgICAgKiBzcmMvV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGwpOgorICAgICAgICAqIHNyYy9XZWJJbnB1dEV2ZW50
Q29udmVyc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3JtR2VzdHVyZUV2ZW50QnVp
bGRlcjo6UGxhdGZvcm1HZXN0dXJlRXZlbnRCdWlsZGVyKToKKyAgICAgICAgKiBzcmMvV2ViVmll
d0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aGFuZGxlSW5wdXRFdmVu
dCk6CisgICAgICAgICogdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNw
cDoKKwogMjAxMi0wMi0yOCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gIFJvbGxlZCBERVBTLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IDk0MTFhZWNmMWM1NmQ2NDQ4Njk2MDFmZDJjYTgzYzQwMGZhZGM1NTguLjFkZDg0MThmZWQ4
YzRmMjgxYmM3YTMxMTgwZjQwZTZmNDRmZTU3MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI4MTMs
NiArMjgxMywxNCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxl
ci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9QYXN0ZWJvYXJkLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L1BsYXRmb3JtR2VzdHVyZUFjdGl2ZUFuaW1hdGlvbi5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL1BsYXRmb3JtR2VzdHVyZUFjdGl2ZUFuaW1hdGlvbi5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0
Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9y
bVNjcm9sbEdlc3R1cmVDdXJ2ZUZsaW5nLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vUGxh
dGZvcm1TY3JvbGxHZXN0dXJlQ3VydmVGbGluZy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9Q
bGF0Zm9ybVNjcm9sbEdlc3R1cmVDdXJ2ZUdlbmVyaWMuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9QbGF0Zm9ybVNjcm9sbEdlc3R1cmVDdXJ2ZUdlbmVyaWMuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
UGxhdGZvcm1Ub3VjaEV2ZW50LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtVG91
Y2hQb2ludC5oJywKQEAgLTMyNzYsNiArMzI4NCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24u
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVH
ZXN0dXJlQW5pbWF0aW9uLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZl
bnRzLmNwcCcsCkBAIC0zMjk0LDYgKzMzMDQsOSBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVy
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDR2VzdHVy
ZUN1cnZlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NHZXN0dXJlQ3VydmUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NHZXN0dXJlQ3VydmVUYXJnZXQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggM2MxMGI3NTQwZjZkZDNmZjIzMmQy
YzMyMzc0YTEyMWQ4Y2I3YzgwZi4uMTIzZDQwMTBiNWJjZTc4M2NkZDQxMzUwOTJlNGY2MjE2ZTY3
MjUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMjM1MSw3ICsyMzUx
LDE1IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZv
cm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdl
c3R1cmVEb3VibGVUYXA6CiAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVn
aW46CiAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kOgotICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVGbGluZ1N0YXJ0OgorICAgIGNh
c2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZUZsaW5nQ2FuY2VsOiB7CisgICAgICAgIEZyYW1lVmll
dyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICAgICAgaWYgKCF2aWV3KQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHZpZXctPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0
dXJlRXZlbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1FdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1FdmVudC5oCmluZGV4IDc3ZDQ0N2U0Y2VlZDFjMDFkZWMxNjc4YTBmZDRkYTBlMWVl
MjY0YzUuLjNmYmRiNTc5ZTUxZWFiN2YyN2YxNThjOGQwODM1OWE0MmIwODNjZjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXZlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUV2ZW50LmgKQEAgLTU1LDYgKzU1LDggQEAgcHVibGlj
OgogICAgICAgICBHZXN0dXJlVGFwLAogICAgICAgICBHZXN0dXJlVGFwRG93biwKICAgICAgICAg
R2VzdHVyZURvdWJsZVRhcCwKKyAgICAgICAgR2VzdHVyZUZsaW5nU3RhcnQsCisgICAgICAgIEdl
c3R1cmVGbGluZ0NhbmNlbCwKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgICAgIC8v
IFBsYXRmb3JtVG91Y2hFdmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1HZXN0dXJlQWN0aXZlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1BsYXRmb3JtR2VzdHVyZUFjdGl2ZUFuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTQ0ZGRj
YmQwZTgzZWE4N2E3NzcwZWQ2YjRiMGY2M2ExMzMzYTAyZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUFjdGl2ZUFuaW1hdGlvbi5jcHAK
QEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IlBsYXRmb3JtR2VzdHVyZUFjdGl2ZUFuaW1hdGlvbi5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1H
ZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQWN0aXZl
QW5pbWF0aW9uPiBQbGF0Zm9ybUdlc3R1cmVBY3RpdmVBbmltYXRpb246OmNyZWF0ZShkb3VibGUg
c3RhcnRUaW1lLCBQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBjdXJ2ZSwgUGxhdGZv
cm1HZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFBsYXRmb3JtR2VzdHVyZUFjdGl2ZUFuaW1hdGlvbihzdGFydFRpbWUsIGN1cnZlLCB0YXJnZXQp
KTsKK30KKworUGxhdGZvcm1HZXN0dXJlQWN0aXZlQW5pbWF0aW9uOjpQbGF0Zm9ybUdlc3R1cmVB
Y3RpdmVBbmltYXRpb24oZG91YmxlIHN0YXJ0VGltZSwgUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZT4gY3VydmUsIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0KiB0YXJnZXQpCisgICAg
OiBtX3N0YXJ0VGltZShzdGFydFRpbWUpCisgICAgLCBtX2N1cnZlKGN1cnZlKQorICAgICwgbV90
YXJnZXQodGFyZ2V0KQoreworfQorCitib29sIFBsYXRmb3JtR2VzdHVyZUFjdGl2ZUFuaW1hdGlv
bjo6YW5pbWF0ZShkb3VibGUgdHMpCit7CisgICAgcmV0dXJuIG1fY3VydmUtPmFwcGx5KHRzLCBt
X3RhcmdldCk7Cit9CisKK307IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlQWN0aXZlQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVBY3RpdmVBbmltYXRpb24uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40NzUwZTk1MmY5NWE5ZGJkZGRhMzQ1OTdkZmFjYTg4NzNiOWUxMWFlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlQWN0aXZlQW5pbWF0
aW9uLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZvcm1HZXN0dXJlQWN0
aXZlQW5pbWF0aW9uX2gKKyNkZWZpbmUgUGxhdGZvcm1HZXN0dXJlQWN0aXZlQW5pbWF0aW9uX2gK
KworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtR2VzdHVyZUN1cnZlOworY2xh
c3MgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQ7CisKK2NsYXNzIFBsYXRmb3JtR2VzdHVyZUFj
dGl2ZUFuaW1hdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGxhdGZvcm1H
ZXN0dXJlQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGUoZG91YmxlIHN0YXJ0VGltZSwgUGFzc093blB0
cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4sIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0Kik7CisK
KyAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0ZShkb3VibGUgdHMpOworCitwcml2YXRlOgorICAgIFBs
YXRmb3JtR2VzdHVyZUFjdGl2ZUFuaW1hdGlvbihkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRy
PFBsYXRmb3JtR2VzdHVyZUN1cnZlPiwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqKTsKKwor
ICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKKyAgICBPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+
IG1fY3VydmU7CisgICAgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqIG1fdGFyZ2V0OworfTsK
KworfTsgLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWU1YmRlYmYwNTMxZjI1MTBlZDA1
NGFmMzNhZjc2ODFkOTAyYzI0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZV9oCisjZGVmaW5lIFBsYXRmb3JtR2Vz
dHVyZUN1cnZlX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZVRhcmdldDsKKworY2xhc3MgUGxhdGZvcm1HZXN0dXJlQ3VydmUgeworcHVibGljOgor
ICAgIC8vIFJldHVybnMgZmFsc2UgaWYgY3VydmUgaGFzIGZpbmlzaGVkIGFuZCBjYW4gbm8gbG9u
Z2VyIGJnZSBhcHBsaWVkLgorICAgIHZpcnR1YWwgYm9vbCBhcHBseShkb3VibGUgdHMsIFBsYXRm
b3JtR2VzdHVyZUN1cnZlVGFyZ2V0KikgPSAwOworfTsKKworfTsgLy8gbmFtZXNwYWNlCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJl
Q3VydmVUYXJnZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1
cnZlVGFyZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWNkNzg2ZjNkYzhmNWFlOWMwZDcyZjVmOWUyMjE5Mjhj
MmRkZjNiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldF9oCisjZGVmaW5lIFBsYXRmb3JtR2Vz
dHVyZUN1cnZlVGFyZ2V0X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnRQb2lu
dDsKKworY2xhc3MgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgeworcHVibGljOgorICAgIHZp
cnR1YWwgdm9pZCBzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmKSA9IDA7CisgICAg
Ly8gRklYTUU6IGFkZCBpbnRlcmZhY2VzIGZvciBzZXRTY3JvbGwoKSwgc2V0UGFnZVNjYWxlQW5k
U2Nyb2xsKCksIGV0Yy4KK307CisKK307IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU2Nyb2xsR2VzdHVyZUN1cnZlRmxp
bmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TY3JvbGxHZXN0dXJlQ3Vy
dmVGbGluZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWI1YzJmMTIzNTc1YTU1OGFmOGYzZTU1MjY2NDdiMGFi
YmMzMjJiZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtU2Nyb2xsR2VzdHVyZUN1cnZlRmxpbmcuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsR2Vz
dHVyZUN1cnZlRmxpbmcuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0
LmgiCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBQbGF0Zm9ybVNj
cm9sbEdlc3R1cmVDdXJ2ZUZsaW5nOjpjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgdmVsb2NpdHkp
Cit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQbGF0Zm9ybVNjcm9sbEdlc3R1cmVDdXJ2ZUZs
aW5nKHZlbG9jaXR5KSk7Cit9CisKK1BsYXRmb3JtU2Nyb2xsR2VzdHVyZUN1cnZlRmxpbmc6OlBs
YXRmb3JtU2Nyb2xsR2VzdHVyZUN1cnZlRmxpbmcoY29uc3QgRmxvYXRQb2ludCYgdmVsb2NpdHkp
CisgICAgOiBtX3ZlbG9jaXR5KHZlbG9jaXR5KQoreworfQorCitib29sIFBsYXRmb3JtU2Nyb2xs
R2VzdHVyZUN1cnZlRmxpbmc6OmFwcGx5KGRvdWJsZSB0cywgUGxhdGZvcm1HZXN0dXJlQ3VydmVU
YXJnZXQqIHRhcmdldCkKK3sKKyAgICAvLyBGSVhNRTogdGhpcyBjdXJ2ZSBwcm9maWxlIGlzIHBy
b2JhYmx5IGJldHRlciBzdWl0ZWQgdG8gbW91c2Ugd2hlZWwgc2Nyb2xsaW5nIHRoYW4gZmxpbmcu
CisgICAgZmxvYXQgZmFjdG9yID0gLTIgKiB0cyAqIGV4cCgtdHMgKiB0cyk7CisKKyAgICBGbG9h
dFBvaW50IHZlbG9jaXR5KGZhY3RvciAqIG1fdmVsb2NpdHkueCgpLCBmYWN0b3IgKiBtX3ZlbG9j
aXR5LnkoKSk7CisKKyAgICBpZiAodHMgPCAxIHx8IHN0ZDo6YWJzKHZlbG9jaXR5LngoKSkgPiAx
IHx8IHN0ZDo6YWJzKG1fdmVsb2NpdHkueSgpKSA+IDEpIHsKKyAgICAgICAgbV92ZWxvY2l0eS5z
ZXRYKDAuOCAqIG1fdmVsb2NpdHkueCgpKTsKKyAgICAgICAgbV92ZWxvY2l0eS5zZXRZKDAuOCAq
IG1fdmVsb2NpdHkueSgpKTsKKyAgICAgICAgdGFyZ2V0LT5zZXRTY3JvbGxJbmNyZW1lbnQoSW50
UG9pbnQobV92ZWxvY2l0eS54KCksIG1fdmVsb2NpdHkueSgpKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworfTsgLy8gbmFtZXNwYWNlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcm9sbEdlc3R1cmVD
dXJ2ZUZsaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcm9sbEdlc3R1
cmVDdXJ2ZUZsaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJkNzIyOWEzOTgyMGYwYmZhY2ExNjJjNWZlZTc3
ZTNjOTBhN2MxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtU2Nyb2xsR2VzdHVyZUN1cnZlRmxpbmcuaApAQCAtMCwwICsxLDUxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFBsYXRmb3JtU2Nyb2xsR2VzdHVyZUN1cnZlRmxpbmdfaAorI2RlZmlu
ZSBQbGF0Zm9ybVNjcm9sbEdlc3R1cmVDdXJ2ZUZsaW5nX2gKKworI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgorI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0OworCitjbGFzcyBQbGF0Zm9y
bVNjcm9sbEdlc3R1cmVDdXJ2ZUZsaW5nIDogcHVibGljIFBsYXRmb3JtR2VzdHVyZUN1cnZlIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gY3Jl
YXRlKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5KTsKKworICAgIHZpcnR1YWwgYm9vbCBhcHBs
eShkb3VibGUgdHMsIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0Kik7CisKK3ByaXZhdGU6Cisg
ICAgUGxhdGZvcm1TY3JvbGxHZXN0dXJlQ3VydmVGbGluZyhjb25zdCBGbG9hdFBvaW50JiB2ZWxv
Y2l0eSk7CisKKyAgICBGbG9hdFBvaW50IG1fdmVsb2NpdHk7Cit9OworCit9OyAvLyBuYW1lc3Bh
Y2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bVNjcm9sbEdlc3R1cmVDdXJ2ZUdlbmVyaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1TY3JvbGxHZXN0dXJlQ3VydmVHZW5lcmljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMjAzMjZm
OWE0NmYxNGFkMGJjNTQ1ZGQ0ZGU5MzIzZmEzNjRhN2IyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TY3JvbGxHZXN0dXJlQ3VydmVHZW5lcmljLmNw
cApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEdlc3R1cmVDdXJ2ZUdlbmVyaWMuaCIKKworI2luY2x1
ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gUGxhdGZvcm1TY3JvbGxHZXN0dXJl
Q3VydmVHZW5lcmljOjpjcmVhdGUoZG91YmxlIHN0YXJ0VGltZVMpCit7CisgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBQbGF0Zm9ybVNjcm9sbEdlc3R1cmVDdXJ2ZUdlbmVyaWMoc3RhcnRUaW1lUykp
OworfQorCitQbGF0Zm9ybVNjcm9sbEdlc3R1cmVDdXJ2ZUdlbmVyaWM6OlBsYXRmb3JtU2Nyb2xs
R2VzdHVyZUN1cnZlR2VuZXJpYyhkb3VibGUgc3RhcnRUaW1lUykKKyAgICA6IG1fc3RhcnRUaW1l
UyhzdGFydFRpbWVTKQoreworfQorCitib29sIFBsYXRmb3JtU2Nyb2xsR2VzdHVyZUN1cnZlR2Vu
ZXJpYzo6YXBwbHkoZG91YmxlIHRzLCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0
KQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworfTsgLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcm9sbEdlc3R1cmVDdXJ2ZUdlbmVy
aWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU2Nyb2xsR2VzdHVyZUN1cnZl
R2VuZXJpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0ZWY0ZWQzMDRlMTNiY2I3YjIxZjcwNDk3NmJlYTUyZTU2
NTdiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bVNjcm9sbEdlc3R1cmVDdXJ2ZUdlbmVyaWMuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFBsYXRmb3JtU2Nyb2xsR2VzdHVyZUN1cnZlR2VuZXJpY19oCisjZGVmaW5l
IFBsYXRmb3JtU2Nyb2xsR2VzdHVyZUN1cnZlR2VuZXJpY19oCisKKyNpbmNsdWRlICJQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtR2Vz
dHVyZUN1cnZlVGFyZ2V0OworY2xhc3MgUGxhdGZvcm1TY3JvbGxHZXN0dXJlQ3VydmVHZW5lcmlj
OworCit0eXBlZGVmIFBsYXRmb3JtU2Nyb2xsR2VzdHVyZUN1cnZlR2VuZXJpYyBQbGF0Zm9ybVNj
cm9sbEdlc3R1cmVDdXJ2ZTsKKworY2xhc3MgUGxhdGZvcm1TY3JvbGxHZXN0dXJlQ3VydmVHZW5l
cmljIDogcHVibGljIFBsYXRmb3JtR2VzdHVyZUN1cnZlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gY3JlYXRlKGRvdWJsZSBzdGFydFRpbWVT
KTsKKworICAgIHZpcnR1YWwgYm9vbCBhcHBseShkb3VibGUgdHMsIFBsYXRmb3JtR2VzdHVyZUN1
cnZlVGFyZ2V0Kik7CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1TY3JvbGxHZXN0dXJlQ3VydmVH
ZW5lcmljKGRvdWJsZSBzdGFydFRpbWVTKTsKKworICAgIGRvdWJsZSBtX3N0YXJ0VGltZVM7Cit9
OworCit9OyAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHAKaW5kZXggZDRkZWQzNDgzOTdiYTkyMmRlZmExZTg1ZTM0MmNkMGRj
ZmNhNDBiMC4uZDYyZWE1YTY1MDVmOWNjMGZiNmFjYTg5MDI0NGE4Y2EyMTM2MDM4ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApAQCAtMTIyLDYgKzEyMiwx
MiBAQCBib29sIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3Jt
V2hlZWxFdmVudCYgZSkKICAgICByZXR1cm4gaGFuZGxlZDsKIH0KIAorI2lmIEVOQUJMRShHRVNU
VVJFX0VWRU5UUykKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZUdlc3R1cmVFdmVudChjb25z
dCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQoreworfQorI2VuZGlmCisKIEZs
b2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6OmN1cnJlbnRQb3NpdGlvbigpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIEZsb2F0UG9pbnQobV9jdXJyZW50UG9zWCwgbV9jdXJyZW50UG9zWSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAppbmRleCA4MTRkNjc0ZTM2YWI2YThkNmUw
ZDg3NWJmODdkNDk5NDU4YjQ2Zjg5Li4yZDFlOWEzMWJmYjVhMmU4NDFmNGJjMDc1ZjAyZDk3NjZj
OWFlZmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKQEAgLTY0
LDYgKzY0LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjdGl2ZSgpIHsgfQog
CiAgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50Jik7CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsKKyNlbmRpZgogCiAg
ICAgRmxvYXRQb2ludCBjdXJyZW50UG9zaXRpb24oKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKaW5kZXggMDgzYTE4YTcwMWFmZjE1
NmEyYTZiYTc5ZTg0MDg3NjIxODY5OGQ3Mi4uY2JjYWNhODE5YTQyYmQ0MWZiM2MwYTViOTE5MTAx
YTVkZmNmMjY1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3JOb25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ck5vbmUuY3BwCkBAIC0zNyw3ICszNyw5IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiT3duQXJyYXlQdHIuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUdlc3R1cmVBY3RpdmVBbmltYXRpb24uaCIKICNpbmNsdWRlICJQbGF0Zm9y
bUdlc3R1cmVFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsR2VzdHVyZUN1cnZlRmxp
bmcuaCIKICNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtNDQ0LDYgKzQ0NiwzNiBAQCB2b2lkIFNj
cm9sbEFuaW1hdG9yTm9uZTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIG9mZnNldAogICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZCgpOwogfQogCisjaWYg
RU5BQkxFKEdFU1RVUkVfRVZFTlRTKQordm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OmhhbmRsZUdl
c3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQorewor
ICAgIHN3aXRjaCAoZ2VzdHVyZUV2ZW50LnR5cGUoKSkgeworICAgIGNhc2UgUGxhdGZvcm1HZXN0
dXJlRXZlbnQ6Okdlc3R1cmVGbGluZ1N0YXJ0OgorICAgICAgICBpZiAoISFtX2dlc3R1cmVBbmlt
YXRpb24pCisgICAgICAgICAgICBtX2dlc3R1cmVBbmltYXRpb24uY2xlYXIoKTsKKworICAgICAg
ICBtX2dlc3R1cmVBbmltYXRpb24gPSBQbGF0Zm9ybUdlc3R1cmVBY3RpdmVBbmltYXRpb246OmNy
ZWF0ZShtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUGxhdGZvcm1TY3JvbGxHZXN0dXJlQ3VydmVGbGluZzo6Y3JlYXRlKEZsb2F0
UG9pbnQoZ2VzdHVyZUV2ZW50LmRlbHRhWCgpLCBnZXN0dXJlRXZlbnQuZGVsdGFZKCkpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyk7CisgICAgICAgIGlmICghbV9hbmlt
YXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgYW5pbWF0aW9uVGltZXJGaXJlZCgm
bV9hbmltYXRpb25UaW1lcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1HZXN0
dXJlRXZlbnQ6Okdlc3R1cmVGbGluZ0NhbmNlbDoKKyAgICAgICAgaWYgKCEhbV9nZXN0dXJlQW5p
bWF0aW9uKQorICAgICAgICAgICAgbV9nZXN0dXJlQW5pbWF0aW9uLmNsZWFyKCk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKyNlbmRpZgor
Cit2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6c2V0U2Nyb2xsSW5jcmVtZW50KGNvbnN0IEludFBv
aW50JiBsb2NhdGlvbikKK3sKKyAgICBtX2N1cnJlbnRQb3NYICs9IGxvY2F0aW9uLngoKTsKKyAg
ICBtX2N1cnJlbnRQb3NZICs9IGxvY2F0aW9uLnkoKTsKK30KKwogdm9pZCBTY3JvbGxBbmltYXRv
ck5vbmU6OndpbGxFbmRMaXZlUmVzaXplKCkKIHsKICAgICB1cGRhdGVWaXNpYmxlTGVuZ3Rocygp
OwpAQCAtNDgwLDYgKzUxMiw5IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjphbmltYXRpb25U
aW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yTm9uZT4qIHRpbWVyKQogICAgIGlmIChtX3Zl
cnRpY2FsRGF0YS5tX3N0YXJ0VGltZSAmJiBtX3ZlcnRpY2FsRGF0YS5hbmltYXRlU2Nyb2xsKGN1
cnJlbnRUaW1lICsgZGVsdGFUb05leHRGcmFtZSkpCiAgICAgICAgIGNvbnRpbnVlQW5pbWF0aW9u
ID0gdHJ1ZTsKIAorICAgIGlmICghIW1fZ2VzdHVyZUFuaW1hdGlvbikKKyAgICAgICAgY29udGlu
dWVBbmltYXRpb24gfD0gbV9nZXN0dXJlQW5pbWF0aW9uLT5hbmltYXRlKGN1cnJlbnRUaW1lKTsK
KwogICAgIGlmIChjb250aW51ZUFuaW1hdGlvbikgewogICAgICAgICBkb3VibGUgbmV4dFRpbWVy
SW50ZXJ2YWwgPSBtYXgoa01pbmltdW1UaW1lckludGVydmFsLCBkZWx0YVRvTmV4dEZyYW1lKTsK
ICAgICAgICAgdGltZXItPnN0YXJ0T25lU2hvdChuZXh0VGltZXJJbnRlcnZhbCk7CkBAIC00OTks
NCArNTM0LDQgQEAgdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OnN0b3BBbmltYXRpb25UaW1lcklm
TmVlZGVkKCkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNN
T09USF9TQ1JPTExJTkcpCisjZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmgKaW5kZXggNGQ2OWE3YzRh
NjQ2MzcyNWJlMTBhNmE2NjVjZWI3OWRhMzIxNWI4Yi4uZjNkOWNlMDBmMWVjMzU2MmIzZGNhYmMy
N2FkYjU1MTYxYTA3NzI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3JOb25lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3JOb25lLmgKQEAgLTMzLDE2ICszMywyMCBAQAogCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JP
TExJTkcpCiAKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oIgogI2luY2x1
ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAKIGNsYXNzIFNjcm9sbEFuaW1hdG9yTm9uZVRlc3Q7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgSW50UG9pbnQ7CitjbGFzcyBQbGF0Zm9ybUdlc3R1cmVBY3RpdmVB
bmltYXRpb247CiBzdHJ1Y3QgU2Nyb2xsQW5pbWF0b3JQYXJhbWV0ZXJzOwogCi1jbGFzcyBTY3Jv
bGxBbmltYXRvck5vbmUgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgeworY2xhc3MgU2Nyb2xsQW5p
bWF0b3JOb25lIDogcHVibGljIFNjcm9sbEFuaW1hdG9yLCBwdWJsaWMgUGxhdGZvcm1HZXN0dXJl
Q3VydmVUYXJnZXQgewogcHVibGljOgogICAgIFNjcm9sbEFuaW1hdG9yTm9uZShTY3JvbGxhYmxl
QXJlYSopOwogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yTm9uZSgpOwpAQCAtNTAsNiArNTQs
MTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRp
b24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmKTsKIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7CisjZW5kaWYK
KworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmKTsK
KwogICAgIHZpcnR1YWwgdm9pZCB3aWxsRW5kTGl2ZVJlc2l6ZSgpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKQEAgLTEzNSw2ICsxNDUsOCBA
QCBwcm90ZWN0ZWQ6CiAKICAgICBkb3VibGUgbV9zdGFydFRpbWU7CiAgICAgVGltZXI8U2Nyb2xs
QW5pbWF0b3JOb25lPiBtX2FuaW1hdGlvblRpbWVyOworCisgICAgT3duUHRyPFBsYXRmb3JtR2Vz
dHVyZUFjdGl2ZUFuaW1hdGlvbj4gbV9nZXN0dXJlQW5pbWF0aW9uOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAppbmRleCA0
ZDE0ODA1ZWZmNjIzMmQ0YzYzZDA5NjVjYWI2MzllMmI0ZDcwMjE3Li4yYTk4NWIxY2Q0NzI2ZTBm
MTQ5YTE0NGE3MzgyNTAwNTdlYjQ5N2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxW
aWV3LmNwcApAQCAtODI2LDYgKzgyNiwxNiBAQCBTY3JvbGxiYXIqIFNjcm9sbFZpZXc6OnNjcm9s
bGJhckF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQogICAgIHJldHVybiAwOwog
fQogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQordm9pZCBTY3JvbGxWaWV3OjpoYW5kbGVH
ZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKK3sK
KyAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2Nyb2xs
YWJsZUFyZWE6OmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnQpOworfQorI2VuZGlmCisK
IHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsYmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhck92ZXJs
YXlTdHlsZSBvdmVybGF5U3R5bGUpCiB7CiAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbGJh
ck92ZXJsYXlTdHlsZShvdmVybGF5U3R5bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5oCmluZGV4IDcwNTExZjE2Zjg3YzAyN2ExNjM0YzZiODBiMWE4YWE5NmU3NTk5NGMuLjk2YjIz
NGI1ZDUzNjA1ZjEzNzlhNTg1NmI1NTBkZDQwYjYyNDA5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmgKQEAgLTIzNSw2ICsyMzUsMTAgQEAgcHVibGljOgogICAgIC8vIEZvciBw
bGF0Zm9ybXMgdGhhdCBuZWVkIHRvIGhpdCB0ZXN0IHNjcm9sbGJhcnMgZnJvbSB3aXRoaW4gdGhl
IGVuZ2luZSdzIGV2ZW50IGhhbmRsZXJzIChsaWtlIFdpbjMyKS4KICAgICBTY3JvbGxiYXIqIHNj
cm9sbGJhckF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KTsKIAorI2lmIEVOQUJM
RShHRVNUVVJFX0VWRU5UUykKKyAgICB2b2lkIGhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0
Zm9ybUdlc3R1cmVFdmVudCYpOworI2VuZGlmCisKICAgICBJbnRQb2ludCBjb252ZXJ0Q2hpbGRU
b1NlbGYoY29uc3QgV2lkZ2V0KiBjaGlsZCwgY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAog
ICAgIHsKICAgICAgICAgSW50UG9pbnQgbmV3UG9pbnQgPSBwb2ludDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAppbmRleCA1OGFkMjQyMDU5ZjI3MzBiYWEzZWU5
YjEzM2RkNWQ1M2M5Y2E3YWFlLi5lNjFiYjBhZWJkZDc5YmRhZTFjM2RmYzhjNGFmMDQ0ZjQ3ZDdi
ZmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCkBAIC0x
NTgsNiArMTU4LDEzIEBAIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnQoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogICAgIHJldHVybiBzY3JvbGxBbmlt
YXRvcigpLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwogfQogCisjaWYgRU5BQkxFKEdF
U1RVUkVfRVZFTlRTKQordm9pZCBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlR2VzdHVyZUV2ZW50KGNv
bnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCit7CisgICAgc2Nyb2xsQW5p
bWF0b3IoKS0+aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVudCk7Cit9CisjZW5kaWYKKwog
Ly8gTk9URTogT25seSBjYWxsZWQgZnJvbSBJbnRlcm5hbHMgZm9yIHRlc3RpbmcuCiB2b2lkIFNj
cm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPZmZzZXRGcm9tSW50ZXJuYWxzKGNvbnN0IEludFBvaW50
JiBvZmZzZXQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxh
YmxlQXJlYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAppbmRl
eCA4MjQ0Y2U4MzNkZTY3OWYxZjFkMWUyYzZhZWZkNTM0NjAyOWI2OTQzLi4wYTJhMTY0ODhjZjcz
MmQ5M2RjNzFiODhhYmI0MWFlM2VmZTdhZWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGFibGVBcmVhLmgKQEAgLTU2LDYgKzU2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgSW50UG9pbnQmKSB7IHJldHVybiBm
YWxzZTsgfQogCiAgICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYpOworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICB2b2lkIGhhbmRsZUdlc3R1
cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOworI2VuZGlmCiAKICAgICAvLyBG
dW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIGlmIHlvdSBjYW4gc2Nyb2xsIHBhc3QgdGhlIGVuZCBv
ZiB0aGUgZG9jdW1lbnQuCiAgICAgYm9vbCBjb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2U7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgwYTIzNzljZmY2YWY3OThlMzg2YzAwNzJmOGI2N2QwYTI4M2I2MDEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Fj
dGl2ZUdlc3R1cmVBbmltYXRpb24uY3BwCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDQWN0aXZlR2VzdHVyZUFuaW1h
dGlvbi5oIgorCisjaW5jbHVkZSAiY2MvQ0NHZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlICJjYy9D
Q0dlc3R1cmVDdXJ2ZVRhcmdldC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDQWN0aXZl
R2VzdHVyZUFuaW1hdGlvbjo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKGRvdWJsZSBzdGFydFRp
bWUsIFBhc3NPd25QdHI8Q0NHZXN0dXJlQ3VydmU+IGN1cnZlLCBDQ0dlc3R1cmVDdXJ2ZVRhcmdl
dCogdGFyZ2V0KQorICAgIDogbV9zdGFydFRpbWUoc3RhcnRUaW1lKQorICAgICwgbV9nZXN0dXJl
Q3VydmUoY3VydmUpCisgICAgLCBtX2dlc3R1cmVDdXJ2ZVRhcmdldCh0YXJnZXQpCit7Cit9CisK
K1Bhc3NPd25QdHI8Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPiBDQ0FjdGl2ZUdlc3R1cmVBbmlt
YXRpb246OmNyZWF0ZShkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZl
PiBjdXJ2ZSwgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKK3sKKyAgICByZXR1cm4gYWRv
cHRQdHIobmV3IENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbihzdGFydFRpbWUsIGN1cnZlLCB0YXJn
ZXQpKTsKK30KKworYm9vbCBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb246OmFuaW1hdGUoZG91Ymxl
IHRzKQoreworICAgIHJldHVybiBtX2dlc3R1cmVDdXJ2ZS0+YXBwbHkodHMgLSBtX3N0YXJ0VGlt
ZSwgbV9nZXN0dXJlQ3VydmVUYXJnZXQpOworfQorCit9OyAvLyBuYW1lc3BhY2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZl
R2VzdHVyZUFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTUxMTM4ZjVk
NjljMTNlNzdiOTBhZGU4YjUwYTI0NWY0NTZlYTZiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlR2VzdHVyZUFu
aW1hdGlvbi5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NBY3Rp
dmVHZXN0dXJlQW5pbWF0aW9uX2gKKyNkZWZpbmUgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uX2gK
KworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIENDR2VzdHVyZUN1cnZlOworY2xhc3MgQ0NHZXN0dXJlQ3VydmVUYXJnZXQ7CisKK2NsYXNz
IENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NB
Y3RpdmVHZXN0dXJlQW5pbWF0aW9uKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxD
Q0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+IGNyZWF0ZShkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3du
UHRyPENDR2VzdHVyZUN1cnZlPiwgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKKworICAgIHZpcnR1
YWwgYm9vbCBhbmltYXRlKGRvdWJsZSB0cyk7CisKK3ByaXZhdGU6CisgICAgQ0NBY3RpdmVHZXN0
dXJlQW5pbWF0aW9uKGRvdWJsZSBzdGFydFRpbWUsIFBhc3NPd25QdHI8Q0NHZXN0dXJlQ3VydmU+
LCBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCopOworCisgICAgZG91YmxlIG1fc3RhcnRUaW1lOworICAg
IE93blB0cjxDQ0dlc3R1cmVDdXJ2ZT4gbV9nZXN0dXJlQ3VydmU7CisgICAgQ0NHZXN0dXJlQ3Vy
dmVUYXJnZXQqIG1fZ2VzdHVyZUN1cnZlVGFyZ2V0OworfTsKKworfTsgLy8gbmFtZXNwYWNlCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NHZXN0dXJlQ3VydmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJlQ3VydmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1MjI0MzM2
OTgwZGJlYTc4ZjA0MWIzMDQ4ZDhkNmQwYTZmYWY5NGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dlc3R1cmVDdXJ2ZS5j
cHAKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiY2MvQ0NHZXN0dXJlQ3VydmUuaCIKKworI2luY2x1ZGUgImNjL0NDR2VzdHVy
ZUN1cnZlVGFyZ2V0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworfTsgLy8gbmFtZXNwYWNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0dlc3R1cmVDdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NHZXN0dXJlQ3VydmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTg0NzFiMTRiNTI4Y2I4MTc1
Y2I0YjMwMjgzZjkzN2U2OWRlZDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJlQ3VydmUuaApAQCAtMCwwICsx
LDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDR2VzdHVyZUN1cnZlX2gKKyNkZWZpbmUg
Q0NHZXN0dXJlQ3VydmVfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0dl
c3R1cmVDdXJ2ZVRhcmdldDsKKworY2xhc3MgQ0NHZXN0dXJlQ3VydmUgeworcHVibGljOgorICAg
IHZpcnR1YWwgYm9vbCBhcHBseShkb3VibGUgdHMsIENDR2VzdHVyZUN1cnZlVGFyZ2V0KikgPSAw
OworfTsKKworfTsgLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJlQ3VydmVUYXJnZXQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDR2VzdHVy
ZUN1cnZlVGFyZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzk1YTU0YjFkMWVhMmYyMzAzZDgwMzM1Y2I1M2Fi
ODVmYTkxMDNjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDR2VzdHVyZUN1cnZlVGFyZ2V0LmgKQEAgLTAsMCArMSw0MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0dlc3R1cmVDdXJ2ZVRhcmdldF9oCisjZGVmaW5l
IENDR2VzdHVyZUN1cnZlVGFyZ2V0X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bnRQb2ludDsKKworY2xhc3MgQ0NHZXN0dXJlQ3VydmVUYXJnZXQgeworcHVibGljOgorICAgIHZp
cnR1YWwgdm9pZCBzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQgJikgPSAwOworICAg
IC8vIEZJWE1FOiBhZGQgaW50ZXJmYWNlcyBmb3Igc2V0U2Nyb2xsKCksIHNldFBhZ2VTY2FsZUFu
ZFNjcm9sbCgpLCBldGMuCit9OworCit9OyAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0
SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NJbnB1dEhhbmRsZXIuaAppbmRleCA2YzA1NTk5NGM1OGVjYTQxMTMxOWE5Yzk5ZDE0M2Y5YzE3
ZjNlMmMyLi44ODgyYjg4ZjIxOTNhMWY3MzM3MzhmZjM4NTY1YTExZjM5NDc0OWQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0
SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSW5wdXRIYW5kbGVyLmgKQEAgLTI5LDYgKzI5LDggQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitjbGFzcyBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb247CitjbGFzcyBDQ0dlc3R1cmVD
dXJ2ZVRhcmdldDsKIGNsYXNzIEludFBvaW50OwogY2xhc3MgSW50U2l6ZTsKIApAQCAtNzUsNiAr
NzcsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgc3RhcnRUaW1lTXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSBkdXJhdGlvbk1zKSA9IDA7CiAKKyAgICB2aXJ0dWFsIENDQWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbiogYWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0QWN0aXZlR2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVy
ZUFuaW1hdGlvbj4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBY3RpdmVHZXN0dXJlQW5p
bWF0aW9uKCkgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgQ0NJbnB1dEhhbmRsZXJDbGllbnQoKSB7
IH0KICAgICB2aXJ0dWFsIH5DQ0lucHV0SGFuZGxlckNsaWVudCgpIHsgfQpAQCAtODMsNyArODks
NyBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBDQ0lucHV0SGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ0NJbnB1dEhhbmRsZXIpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PENDSW5wdXRIYW5kbGVyPiBjcmVhdGUoQ0NJbnB1dEhhbmRsZXJDbGllbnQqKTsKKyAgICBzdGF0
aWMgUGFzc093blB0cjxDQ0lucHV0SGFuZGxlcj4gY3JlYXRlKENDSW5wdXRIYW5kbGVyQ2xpZW50
KiwgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKICAgICB2aXJ0dWFsIH5DQ0lucHV0SGFuZGxlcigp
IHsgfQogCiAgICAgdmlydHVhbCBpbnQgaWRlbnRpZmllcigpIGNvbnN0ID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggODBlNDczOGNjMTNhZDRmOWMwOGQ1
ZmQ3NWRiMTNjZmY1ODZkYzk1NS4uZDBlMTVhZWZhZWI3ZWRjY2JhYmJhZWQ5MGRiYjhkNDYyZTBh
YTYxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTMwLDcg
KzMwLDEwIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXll
clJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5jbHVkZSAi
Y2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NEYW1hZ2VUcmFj
a2VyLmgiCisjaW5jbHVkZSAiY2MvQ0NHZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlICJjYy9DQ0dl
c3R1cmVDdXJ2ZVRhcmdldC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5oIgpAQCAtMTAxLDYgKzEwNCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKIHsKICAgICBhbmltYXRlUGFnZVNjYWxl
KGZyYW1lQmVnaW5UaW1lTXMpOwogICAgIGFuaW1hdGVMYXllcnMoZnJhbWVCZWdpblRpbWVNcyk7
CisgICAgYW5pbWF0ZUdlc3R1cmVzKGZyYW1lQmVnaW5UaW1lTXMpOwogfQogCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRh
cmdldFBvc2l0aW9uLCBib29sIGFuY2hvclBvaW50LCBmbG9hdCBwYWdlU2NhbGUsIGRvdWJsZSBz
dGFydFRpbWVNcywgZG91YmxlIGR1cmF0aW9uTXMpCkBAIC0xMjgsNiArMTMyLDI0IEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6
ZSYgdGFyZ2V0UG9zaXRpb24sCiAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhy
ZWFkKCk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0QWN0aXZlR2VzdHVyZUFu
aW1hdGlvbihQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gZ2VzdHVyZUFuaW1h
dGlvbikKK3sKKyAgICBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24gPSBnZXN0dXJlQW5pbWF0aW9u
OworCisgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CisgICAgbV9j
bGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6Y2xlYXJBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkKK3sKKyAgICBtX2FjdGl2
ZUdlc3R1cmVBbmltYXRpb24uY2xlYXIoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQoreworICAgIHNj
cm9sbEJ5KEludFNpemUobG9jYXRpb24ueCgpLCBsb2NhdGlvbi55KCkpKTsKK30KKwogdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjp0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBs
KiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCkKIHsKICAgICAvLyBGb3Igbm93LCB3ZSB1c2UgZGFtYWdlIHRyYWNraW5nIHRvIGNvbXB1dGUg
YSBnbG9iYWwgc2Npc3Nvci4gVG8gZG8gdGhpcywgd2UgbXVzdApAQCAtNjkzLDQgKzcxNSwxNiBA
QCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMoZG91YmxlIGZyYW1lQmVn
aW5UaW1lTXMpCiAgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgp
OwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVHZXN0dXJlcyhkb3VibGUg
ZnJhbWVCZWdpblRpbWVNcykKK3sKKyAgICBpZiAoISFtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24p
IHsKKyAgICAgICAgYm9vbCBpc0NvbnRpbnVpbmcgPSBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24t
PmFuaW1hdGUoZnJhbWVCZWdpblRpbWVNcyAvIDEwMDApOworICAgICAgICBtX2NsaWVudC0+c2V0
TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAgICAgICAgaWYgKCFpc0NvbnRpbnVpbmcpIHsK
KyAgICAgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOworICAg
ICAgICAgICAgbV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmNsZWFyKCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaAppbmRleCBmNzdlMGViODQyMTczZjcxY2ZhNDc3Nzc0ZTk1YjMzNDczOTEyYWYx
Li4wMWYyM2YxM2FiMmM1OTVjMzk4MGE0ZGZmZThkMzI4ZjhiODBiZDI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjZGVmaW5lIENDTGF5
ZXJUcmVlSG9zdEltcGxfaAogCiAjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25FdmVudHMuaCIKKyNp
bmNsdWRlICJjYy9DQ0dlc3R1cmVDdXJ2ZVRhcmdldC5oIgogI2luY2x1ZGUgImNjL0NDSW5wdXRI
YW5kbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgogI2luY2x1ZGUgImNjL0ND
TGF5ZXJUcmVlSG9zdC5oIgpAQCAtMzYsNiArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjsKIGNsYXNzIENDQ29tcGxldGlvbkV2
ZW50OwogY2xhc3MgQ0NQYWdlU2NhbGVBbmltYXRpb247CiBjbGFzcyBDQ0xheWVySW1wbDsKQEAg
LTU0LDcgKzU2LDcgQEAgcHVibGljOgogfTsKIAogLy8gQ0NMYXllclRyZWVIb3N0SW1wbCBvd25z
IHRoZSBDQ0xheWVySW1wbCB0cmVlIGFzIHdlbGwgYXMgYXNzb2NpYXRlZCByZW5kZXJpbmcgc3Rh
dGUKLWNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGwgOiBwdWJsaWMgQ0NJbnB1dEhhbmRsZXJDbGll
bnQgeworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbCA6IHB1YmxpYyBDQ0lucHV0SGFuZGxlckNs
aWVudCwgcHVibGljIENDR2VzdHVyZUN1cnZlVGFyZ2V0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDQ0xheWVyVHJlZUhvc3RJbXBsKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0
cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGUoY29uc3QgQ0NTZXR0aW5ncyYsIENDTGF5ZXJU
cmVlSG9zdEltcGxDbGllbnQqKTsKQEAgLTY5LDYgKzcxLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgcGluY2hHZXN0dXJlVXBkYXRlKGZsb2F0LCBjb25zdCBJbnRQb2ludCYpOwogICAg
IHZpcnR1YWwgdm9pZCBwaW5jaEdlc3R1cmVFbmQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQ
YWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sIGJvb2wgYW5j
aG9yUG9pbnQsIGZsb2F0IHBhZ2VTY2FsZSwgZG91YmxlIHN0YXJ0VGltZU1zLCBkb3VibGUgZHVy
YXRpb25Ncyk7CisgICAgdmlydHVhbCBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24qIGFjdGl2ZUdl
c3R1cmVBbmltYXRpb24oKSB7IHJldHVybiBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24uZ2V0KCk7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlR2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRy
PENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4pOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFjdGl2
ZUdlc3R1cmVBbmltYXRpb24oKTsKKworICAgIC8vIENDR2VzdHVyZUN1cnZlVGFyZ2V0IGltcGxl
bWVudGF0aW9uCisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbEluY3JlbWVudChjb25zdCBJbnRQ
b2ludCYpOwogCiAgICAgLy8gVmlydHVhbCBmb3IgdGVzdGluZy4KICAgICB2aXJ0dWFsIHZvaWQg
YmVnaW5Db21taXQoKTsKQEAgLTEyOCw2ICsxMzYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXll
clRyZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdzJiwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVu
dCopOwogCiAgICAgdm9pZCBhbmltYXRlUGFnZVNjYWxlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1z
KTsKKyAgICB2b2lkIGFuaW1hdGVHZXN0dXJlcyhkb3VibGUgZnJhbWVCZWdpblRpbWVNcyk7CiAK
ICAgICAvLyBWaXJ0dWFsIGZvciB0ZXN0aW5nLgogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5
ZXJzKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKTsKQEAgLTE3MSw2ICsxODAsNyBAQCBwcml2YXRl
OgogICAgIEludFBvaW50IG1fcHJldmlvdXNQaW5jaEFuY2hvcjsKIAogICAgIE93blB0cjxDQ1Bh
Z2VTY2FsZUFuaW1hdGlvbj4gbV9wYWdlU2NhbGVBbmltYXRpb247CisgICAgT3duUHRyPENDQWN0
aXZlR2VzdHVyZUFuaW1hdGlvbj4gbV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uOwogCiAgICAgQ0NM
YXllclNvcnRlciBtX2xheWVyU29ydGVyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmlu
ZGV4IDc1ZWYxMzYyM2RlODc2ZjQ0YTJjYTQ3ZWFkZDgxMjBiMTEwYjIzMjYuLjMyYTBlZmRmNmNh
ZTdiNzg2ZWM3YjJhMmRlNGE1Mjc4YjczYWRjMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHku
Y3BwCkBAIC01ODcsNyArNTg3LDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1w
bE9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKICAgICBtX3NjaGVk
dWxlck9uSW1wbFRocmVhZCA9IENDU2NoZWR1bGVyOjpjcmVhdGUodGhpcywgZnJhbWVSYXRlQ29u
dHJvbGxlci5yZWxlYXNlKCkpOwogICAgIG1fc2NoZWR1bGVyT25JbXBsVGhyZWFkLT5zZXRWaXNp
YmxlKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnZpc2libGUoKSk7CiAKLSAgICBtX2lucHV0SGFuZGxl
ck9uSW1wbFRocmVhZCA9IENDSW5wdXRIYW5kbGVyOjpjcmVhdGUobV9sYXllclRyZWVIb3N0SW1w
bC5nZXQoKSk7CisgICAgbV9pbnB1dEhhbmRsZXJPbkltcGxUaHJlYWQgPSBDQ0lucHV0SGFuZGxl
cjo6Y3JlYXRlKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCksIG1fbGF5ZXJUcmVlSG9zdEltcGwu
Z2V0KCkpOwogICAgIG1fY29tcG9zaXRvcklkZW50aWZpZXIgPSBtX2lucHV0SGFuZGxlck9uSW1w
bFRocmVhZC0+aWRlbnRpZmllcigpOwogCiAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggM2RhMDQ3N2EwMTE0ZGU5ZjhiNzYwNGRmZDFiYjUw
YzhjN2M2NGZhMC4uODgzMTM1NzU3ODdlY2Y5MTg5OWVjODAyMDVkMWJmYjk2YWZkYzljYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMjg1LDYgKzI4NSw3IEBACiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9tYWMvV2ViU2FuZGJveFN1cHBvcnQuaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9tYWMvV2ViU2NyZWVuSW5mb0ZhY3RvcnkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9tYWMvV2ViU3Vic3RyaW5nVXRpbC5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL3Bs
YXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJBcnJheUJ1ZmZlclZpZXcuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJBdWRpb0J1cy5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYkF1ZGlvRGV2aWNlLmgnLApAQCAtMzc2LDYgKzM3
Nyw4IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9CbG9iUmVnaXN0cnlQcm94eS5oJywKICAgICAg
ICAgICAgICAgICAnc3JjL0NDVGhyZWFkSW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
Q0NUaHJlYWRJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvQ0NUb1BsYXRmb3JtR2VzdHVy
ZUN1cnZlVGFyZ2V0QWRhcHRlci5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvQ0NUb1BsYXRm
b3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRlci5oJywKICAgICAgICAgICAgICAgICAnc3JjL0No
cm9tZUNsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0Nocm9tZUNsaWVudElt
cGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9Db2xvckNob29zZXJQcm94eS5jcHAnLApAQCAt
NDU3LDYgKzQ2MCw3IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9QYWdlT3ZlcmxheS5oJywKICAg
ICAgICAgICAgICAgICAnc3JjL1BhZ2VPdmVybGF5TGlzdC5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvUGFnZU92ZXJsYXlMaXN0LmgnLAorICAgICAgICAgICAgICAgICdzcmMvUGxhdGZvcm1H
ZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRlci5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgnLAogICAgICAgICAgICAgICAgICdzcmMv
UGxhdGZvcm1TdXBwb3J0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFw
dGVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9QbGF0Zm9ybUdl
c3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGZiZTIxMWEw
MGY4NTZkN2IwNWQxZTVjOGIwNWI2ZmM1ODU2ZTdhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1cnZlVG9D
Q0dlc3R1cmVDdXJ2ZUFkYXB0ZXIuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXJfaAorI2Rl
ZmluZSBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyX2gKKworI2lu
Y2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCisjaW5jbHVkZSAiY2MvQ0NHZXN0dXJlQ3Vy
dmUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
Y2xhc3MgQ0NHZXN0dXJlQ3VydmVUYXJnZXQ7CisKK2NsYXNzIFBsYXRmb3JtR2VzdHVyZUN1cnZl
VG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIgOiBwdWJsaWMgQ0NHZXN0dXJlQ3VydmUgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiBjcmVhdGUoUGFzc093blB0
cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4pOworCisgICAgdmlydHVhbCBib29sIGFwcGx5KGRvdWJs
ZSB0cywgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKKworcHJpdmF0ZToKKyAgICBQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyKFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0
dXJlQ3VydmU+KTsKKyAgICBPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IG1fY3VydmU7Cit9
OworCit9OyAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9DQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0NDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdl
dEFkYXB0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwZmE3MjE4Nzg4OTRhNzM0YmEwYjk4ZDNlNTJmNDlk
ZGVlN2UzYmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9D
Q1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyLmNwcApAQCAtMCwwICsxLDQ0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDQ1RvUGxh
dGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyLmgiCisKKyNpbmNsdWRlICJjYy9DQ0dlc3R1
cmVDdXJ2ZVRhcmdldC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDVG9QbGF0Zm9ybUdl
c3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXI6OkNDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFk
YXB0ZXIoQ0NHZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKKyAgICA6IG1fdGFyZ2V0KHRhcmdl
dCkKK3sKK30KKwordm9pZCBDQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyOjpz
ZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQoreworICAgIEFTU0VS
VChtX3RhcmdldCk7CisgICAgbV90YXJnZXQtPnNldFNjcm9sbEluY3JlbWVudChsb2NhdGlvbik7
Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9DQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9DQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjA1MzRhMzdmMzQzNTVhMzdmMjZlM2MxYmYzMDEzMWFhMzM5MmMwMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0NDVG9QbGF0Zm9ybUdl
c3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXIuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIENDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXJfaAorI2RlZmlu
ZSBDQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyX2gKKworI2luY2x1ZGUgIlBs
YXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NHZXN0dXJlQ3VydmVUYXJnZXQ7CisK
K2NsYXNzIENDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXIgOiBwdWJsaWMgUGxh
dGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDVG9Q
bGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXIpOworcHVibGljOgorICAgIENDVG9QbGF0
Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXIoQ0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmKTsKKwor
cHJpdmF0ZToKKyAgICBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCogbV90YXJnZXQ7Cit9OworCit9OyAv
LyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVD
dXJ2ZUFkYXB0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0MDU0OTVjM2JhOTY4M2NlYjhkMjIyOTgzMTU3
N2ZlNjFjODQ0ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyLmNwcApAQCAtMCww
ICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJwbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyLmgi
CisKKyNpbmNsdWRlICJDQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyLmgiCisj
aW5jbHVkZSAiY2MvQ0NHZXN0dXJlQ3VydmVUYXJnZXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NH
ZXN0dXJlQ3VydmVBZGFwdGVyOjpjcmVhdGUoUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZT4gcGxhdGZvcm1DdXJ2ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBsYXRmb3JtR2Vz
dHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIocGxhdGZvcm1DdXJ2ZSkpOworfQorCitQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyOjpQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyKFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJl
Q3VydmU+IGN1cnZlKQorICAgIDogbV9jdXJ2ZShjdXJ2ZSkKK3sKK30KKworYm9vbCBQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyOjphcHBseShkb3VibGUgdHMsIEND
R2VzdHVyZUN1cnZlVGFyZ2V0KiB0YXJnZXQpCit7CisgICAgQ0NUb1BsYXRmb3JtR2VzdHVyZUN1
cnZlVGFyZ2V0QWRhcHRlciBhZGFwdGVyKHRhcmdldCk7CisgICAgcmV0dXJuIG1fY3VydmUtPmFw
cGx5KHRzLCAmYWRhcHRlcik7Cit9CisKK307IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGwuY3BwCmluZGV4IDM5NzMwOGI1MjljYzQxNzQ3MTg3YzdmODY3ZDEyMWI5YjIzZmNhZWUuLmMw
NzYxYzM2MDk2ZmFkYTY1OGQwNWZjODg5ZmZiNDRiMzc3OWZmY2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbC5jcHAKQEAgLTI3LDIxICsyNywyOCBAQAogCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGwuaCIKIAorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxHZXN0dXJlQ3VydmVGbGluZy5oIgogI2luY2x1ZGUgIldl
YkNvbXBvc2l0b3JJbXBsLmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNs
aWVudC5oIgogI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIK
LSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlICJj
Yy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0dlc3R1cmVDdXJ2
ZS5oIgorI2luY2x1ZGUgImNjL0NDR2VzdHVyZUN1cnZlVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY2Mv
Q0NQcm94eS5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dl
c3R1cmVDdXJ2ZUFkYXB0ZXIuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1
cHBvcnQuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nUHJpbWl0aXZlcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPENDSW5wdXRIYW5kbGVyPiBDQ0lucHV0SGFuZGxl
cjo6Y3JlYXRlKENDSW5wdXRIYW5kbGVyQ2xpZW50KiBpbnB1dEhhbmRsZXJDbGllbnQpCitQYXNz
T3duUHRyPENDSW5wdXRIYW5kbGVyPiBDQ0lucHV0SGFuZGxlcjo6Y3JlYXRlKENDSW5wdXRIYW5k
bGVyQ2xpZW50KiBpbnB1dEhhbmRsZXJDbGllbnQsIENDR2VzdHVyZUN1cnZlVGFyZ2V0KiBnZXN0
dXJlQ3VydmVUYXJnZXQpCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGw6OmNyZWF0ZShpbnB1dEhhbmRsZXJDbGllbnQpOworICAgIHJldHVybiBXZWJL
aXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVhdGUoaW5wdXRIYW5kbGVyQ2xp
ZW50LCBnZXN0dXJlQ3VydmVUYXJnZXQpOwogfQogCiB9CkBAIC01Nyw5ICs2NCw5IEBAIFdlYkNv
bXBvc2l0b3IqIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXI6OmZyb21JZGVudGlmaWVyKGludCBp
ZGVudGlmaWVyKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb21wb3NpdG9yKj4oV2ViQ29t
cG9zaXRvcklucHV0SGFuZGxlckltcGw6OmZyb21JZGVudGlmaWVyKGlkZW50aWZpZXIpKTsKIH0K
IAotUGFzc093blB0cjxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbD4gV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGw6OmNyZWF0ZShXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudCog
aW5wdXRIYW5kbGVyQ2xpZW50KQorUGFzc093blB0cjxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbD4gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0ZShXZWJDb3JlOjpDQ0lu
cHV0SGFuZGxlckNsaWVudCogaW5wdXRIYW5kbGVyQ2xpZW50LCBXZWJDb3JlOjpDQ0dlc3R1cmVD
dXJ2ZVRhcmdldCogdGFyZ2V0KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGwoaW5wdXRIYW5kbGVyQ2xpZW50KSk7CisgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbChpbnB1dEhhbmRsZXJDbGll
bnQsIHRhcmdldCkpOwogfQogCiBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyKiBXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbDo6ZnJvbUlkZW50aWZpZXIoaW50IGlkZW50aWZpZXIpCkBAIC03
NywxMCArODQsMTEgQEAgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlciogV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGw6OmZyb21JZGVudGlmaWVyKGludCBpZGUKICAgICByZXR1cm4gMDsKIH0K
IAotV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXJJbXBsKENDSW5wdXRIYW5kbGVyQ2xpZW50KiBpbnB1dEhhbmRsZXJDbGllbnQpCitXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwoQ0NJ
bnB1dEhhbmRsZXJDbGllbnQqIGlucHV0SGFuZGxlckNsaWVudCwgQ0NHZXN0dXJlQ3VydmVUYXJn
ZXQqIHRhcmdldCkKICAgICA6IG1fY2xpZW50KDApCiAgICAgLCBtX2lkZW50aWZpZXIoc19uZXh0
QXZhaWxhYmxlSWRlbnRpZmllcisrKQogICAgICwgbV9pbnB1dEhhbmRsZXJDbGllbnQoaW5wdXRI
YW5kbGVyQ2xpZW50KQorICAgICwgbV9nZXN0dXJlQ3VydmVUYXJnZXQodGFyZ2V0KQogI2lmbmRl
ZiBOREVCVUcKICAgICAsIG1fZXhwZWN0U2Nyb2xsVXBkYXRlRW5kKGZhbHNlKQogICAgICwgbV9l
eHBlY3RQaW5jaFVwZGF0ZUVuZChmYWxzZSkKQEAgLTE5Niw3ICsyMDQsMjMgQEAgdm9pZCBXZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1
dEV2ZW50JiBldmVudCkKICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPnBpbmNoR2VzdHVy
ZVVwZGF0ZShnZXN0dXJlRXZlbnQuZGVsdGFYLCBJbnRQb2ludChnZXN0dXJlRXZlbnQueCwgZ2Vz
dHVyZUV2ZW50LnkpKTsKICAgICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsK
ICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2
ZW50OjpHZXN0dXJlRmxpbmdTdGFydCkgeworICAgICAgICBjb25zdCBXZWJHZXN0dXJlRXZlbnQm
IGdlc3R1cmVFdmVudCA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJHZXN0dXJlRXZlbnQqPigmZXZl
bnQpOworICAgICAgICBpZiAobV9pbnB1dEhhbmRsZXJDbGllbnQtPmFjdGl2ZUdlc3R1cmVBbmlt
YXRpb24oKSkKKyAgICAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5jbGVhckFjdGl2ZUdl
c3R1cmVBbmltYXRpb24oKTsKKyAgICAgICAgT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBm
bGluZ0N1cnZlID0gUGxhdGZvcm1TY3JvbGxHZXN0dXJlQ3VydmVGbGluZzo6Y3JlYXRlKEZsb2F0
UG9pbnQoZ2VzdHVyZUV2ZW50LmRlbHRhWCwgZ2VzdHVyZUV2ZW50LmRlbHRhWSkpOworICAgICAg
ICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2V0QWN0aXZlR2VzdHVyZUFuaW1hdGlvbihDQ0FjdGl2
ZUdlc3R1cmVBbmltYXRpb246OmNyZWF0ZShtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxh
dGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRlcjo6Y3JlYXRlKGZsaW5nQ3Vy
dmUucmVsZWFzZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9nZXN0dXJlQ3VydmVUYXJnZXQpKTsKKyAgICAgICAgbV9jbGllbnQtPmRp
ZEhhbmRsZUlucHV0RXZlbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAoZXZl
bnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlRmxpbmdDYW5jZWwpIHsKKyAgICAgICAg
aWYgKG1faW5wdXRIYW5kbGVyQ2xpZW50LT5hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkpCisgICAg
ICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2V0QWN0aXZlR2VzdHVyZUFuaW1hdGlvbihh
ZG9wdFB0cihzdGF0aWNfY2FzdDxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24qPigwKSkpOworICAg
ICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOworICAgICAgICByZXR1cm47CiAg
ICAgfQorCiAgICAgbV9jbGllbnQtPmRpZE5vdEhhbmRsZUlucHV0RXZlbnQodHJ1ZSAvKiBzZW5k
VG9XaWRnZXQgKi8pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuaAppbmRleCBhMmYxMzAyNWQ5ZjE3
YmZkMThjMTQ0ZjkzMTdkODJhNmVhMTA5ZWM1Li4yMzY4ZWQzNmQyZWRkOTE4YjA2YzE2MmY2Zjk1
NDhmZDljZmM5MmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmgKQEAgLTM4LDYgKzM4LDcgQEAgY2xh
c3MgTXV0ZXg7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENDR2VzdHVyZUN1cnZl
VGFyZ2V0OwogY2xhc3MgQ0NJbnB1dEhhbmRsZXJDbGllbnQ7CiBjbGFzcyBDQ1RocmVhZDsKIH0K
QEAgLTUwLDcgKzUxLDcgQEAgY2xhc3MgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudDsK
IGNsYXNzIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsIDogcHVibGljIFdlYkNvbXBvc2l0
b3IsIHB1YmxpYyBXZWJDb3JlOjpDQ0lucHV0SGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwpOwogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzT3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsPiBjcmVhdGUoV2ViQ29y
ZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbD4gY3JlYXRlKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xp
ZW50KiwgV2ViQ29yZTo6Q0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKICAgICBzdGF0aWMgV2ViQ29t
cG9zaXRvcklucHV0SGFuZGxlciogZnJvbUlkZW50aWZpZXIoaW50IGlkZW50aWZpZXIpOwogCiAg
ICAgdmlydHVhbCB+V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwoKTsKQEAgLTY0LDExICs2
NSwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KGRvdWJsZSBmcmFtZUJl
Z2luVGltZU1zKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBXZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbChXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudCopOworICAgIGV4cGxpY2l0
IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xp
ZW50KiwgV2ViQ29yZTo6Q0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKIAogICAgIFdlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJDbGllbnQqIG1fY2xpZW50OwogICAgIGludCBtX2lkZW50aWZpZXI7CiAg
ICAgV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQqIG1faW5wdXRIYW5kbGVyQ2xpZW50Owor
ICAgIFdlYkNvcmU6OkNDR2VzdHVyZUN1cnZlVGFyZ2V0KiBtX2dlc3R1cmVDdXJ2ZVRhcmdldDsK
IAogI2lmbmRlZiBOREVCVUcKICAgICBib29sIG1fZXhwZWN0U2Nyb2xsVXBkYXRlRW5kOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFdmVudENvbnZlcnNp
b24uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFdmVudENvbnZlcnNp
b24uY3BwCmluZGV4IDVjZjBjY2FlY2FhNDM2OGRmOGNjNGNhNTNlMTQyOGVmYzA5ZTgwMmMuLjYz
ZGIyNzg4OGU1MWUzODk1YjVmMzhjMzhjZjk1MGZlNDcxYTJlN2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RXZlbnRDb252ZXJzaW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnB1dEV2ZW50Q29udmVyc2lvbi5jcHAKQEAg
LTE1NSw2ICsxNTUsMTIgQEAgUGxhdGZvcm1HZXN0dXJlRXZlbnRCdWlsZGVyOjpQbGF0Zm9ybUdl
c3R1cmVFdmVudEJ1aWxkZXIoV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IFcKICAgICBjYXNlIFdlYklu
cHV0RXZlbnQ6Okdlc3R1cmVEb3VibGVUYXA6CiAgICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZl
bnQ6Okdlc3R1cmVEb3VibGVUYXA7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViSW5wdXRF
dmVudDo6R2VzdHVyZUZsaW5nU3RhcnQ6CisgICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZlbnQ6
Okdlc3R1cmVGbGluZ1N0YXJ0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYklucHV0RXZl
bnQ6Okdlc3R1cmVGbGluZ0NhbmNlbDoKKyAgICAgICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6
R2VzdHVyZUZsaW5nQ2FuY2VsOworICAgICAgICBicmVhazsKICAgICBjYXNlIFdlYklucHV0RXZl
bnQ6Okdlc3R1cmVQaW5jaEJlZ2luOgogICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVBp
bmNoRW5kOgogICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVBpbmNoVXBkYXRlOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IGYxNTMwMjI5ZTQ4
YjQwMWYzMWEyYzVmNjE0NzVhYWMyNTgxOGEyNWIuLmEwNTE3NjYxMzk0MGJlYmVkMzJmZTkyOWIw
ODViY2Y1MTUzZDNjNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAKQEAgLTE1MzQsOSArMTUzNCwyMiBAQCBib29sIFdlYlZpZXdJbXBsOjpoYW5kbGVJbnB1
dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGlucHV0RXZlbnQpCiAgICAgICAgIG1vdXNlTGVh
dmUoKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQqPigmaW5wdXRFdmVudCkpOwogICAg
ICAgICBicmVhazsKIAotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VXaGVlbDoKLSAgICAg
ICAgaGFuZGxlZCA9IG1vdXNlV2hlZWwoKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlV2hlZWxF
dmVudCo+KCZpbnB1dEV2ZW50KSk7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZVdoZWVs
OiB7CisvLyBXSk0gLSB1Z2x5IGhhY2sgdG8gc2ltdWxhdGUgR2VzdHVyZUZsaW5nU3RhcnQgZXZl
bnRzIGJ5IGhpamFja2luZyBtb3VzZVdoZWVsIGV2ZW50cy4KKy8vICAgICAgICBoYW5kbGVkID0g
bW91c2VXaGVlbCgqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VXaGVlbEV2ZW50Kj4oJmlucHV0
RXZlbnQpKTsKKyAgICAgICAgY29uc3QgV2ViTW91c2VXaGVlbEV2ZW50KiBtd2UgPSBzdGF0aWNf
Y2FzdDxjb25zdCBXZWJNb3VzZVdoZWVsRXZlbnQqPigmaW5wdXRFdmVudCk7CisgICAgICAgIFdl
Ykdlc3R1cmVFdmVudCBnZXN0dXJlRXZ0OworICAgICAgICBnZXN0dXJlRXZ0LnR5cGUgPSBXZWJJ
bnB1dEV2ZW50OjpHZXN0dXJlRmxpbmdTdGFydDsKKyAgICAgICAgZ2VzdHVyZUV2dC54ID0gbXdl
LT54OworICAgICAgICBnZXN0dXJlRXZ0LnkgPSBtd2UtPnk7CisgICAgICAgIGdlc3R1cmVFdnQu
ZGVsdGFYID0gLTIgKiBtd2UtPmRlbHRhWDsKKyAgICAgICAgZ2VzdHVyZUV2dC5kZWx0YVkgPSAt
MiAqIG13ZS0+ZGVsdGFZOworICAgICAgICBnZXN0dXJlRXZ0Lmdsb2JhbFggPSBtd2UtPmdsb2Jh
bFg7CisgICAgICAgIGdlc3R1cmVFdnQuZ2xvYmFsWSA9IG13ZS0+Z2xvYmFsWTsKKyAgICAgICAg
Z2VzdHVyZUV2dC50aW1lU3RhbXBTZWNvbmRzID0gbXdlLT50aW1lU3RhbXBTZWNvbmRzOworICAg
ICAgICBoYW5kbGVkID0gZ2VzdHVyZUV2ZW50KGdlc3R1cmVFdnQpOwogICAgICAgICBicmVhazsK
KyAgICB9CiAKICAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlRG93bjoKICAgICAgICAgbW91
c2VEb3duKCpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Kj4oJmlucHV0RXZlbnQpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcAppbmRleCA0NTkyNTVlMDJhMjgzMzE5
ZGZiNWU5MjlhOGQ4ZjVkOTkzNWE0NDRkLi4yMzk4YTUwNzMwMTg1MjE0NTViMzBjM2FmZDhkYTVi
ZTg2MjA0YWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIldlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJJbnB1dEV2ZW50LmgiCisj
aW5jbHVkZSAiY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NJ
bnB1dEhhbmRsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCiAKQEAg
LTY1LDYgKzY2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9waW5jaE1hZ25pZmljYXRpb24gPSAw
OwogICAgIH0KIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9u
KiBhY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVH
ZXN0dXJlQW5pbWF0aW9uPikgeyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWN0aXZlR2VzdHVy
ZUFuaW1hdGlvbigpIHsgfQorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1Jl
ZHJhdygpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgU2Nyb2xsU3RhdHVzIHNjcm9sbEJlZ2lu
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbElucHV0VHlwZSkgT1ZFUlJJREUKQEAgLTE0Nyw3ICsxNTIsNyBAQCBURVNUKFdlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLCBmcm9tSWRlbnRpZmllcikKIAogICAgIGludCBjb21w
b3NpdG9ySWRlbnRpZmllciA9IC0xOwogICAgIHsKLSAgICAgICAgT3duUHRyPFdlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsPiBpbnB1dEhhbmRsZXIgPSBXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbDo6Y3JlYXRlKDApOworICAgICAgICBPd25QdHI8V2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGw+IGlucHV0SGFuZGxlciA9IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpj
cmVhdGUoMCwgMCk7CiAgICAgICAgIGNvbXBvc2l0b3JJZGVudGlmaWVyID0gaW5wdXRIYW5kbGVy
LT5pZGVudGlmaWVyKCk7CiAgICAgICAgIC8vIFRoZSBjb21wb3NpdG9yIHdlIGp1c3QgY3JlYXRl
ZCBzaG91bGQgYmUgbG9jYXRhYmxlLgogICAgICAgICBFWFBFQ1RfRVEoaW5wdXRIYW5kbGVyLmdl
dCgpLCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyOjpmcm9tSWRlbnRpZmllcihjb21wb3NpdG9y
SWRlbnRpZmllcikpOwpAQCAtMTcxLDcgKzE3Niw3IEBAIFRFU1QoV2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGwsIGdlc3R1cmVTY3JvbGwpCiAjZW5kaWYKIAogICAgIE1vY2tJbnB1dEhhbmRs
ZXJDbGllbnQgbW9ja0lucHV0SGFuZGxlcjsKLSAgICBPd25QdHI8V2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGw+IGlucHV0SGFuZGxlciA9IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBs
OjpjcmVhdGUoJm1vY2tJbnB1dEhhbmRsZXIpOworICAgIE93blB0cjxXZWJDb21wb3NpdG9ySW5w
dXRIYW5kbGVySW1wbD4gaW5wdXRIYW5kbGVyID0gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGw6OmNyZWF0ZSgmbW9ja0lucHV0SGFuZGxlciwgMCk7CiAgICAgTW9ja1dlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXJDbGllbnQgbW9ja0NsaWVudDsKICAgICBpbnB1dEhhbmRsZXItPnNldENsaWVu
dCgmbW9ja0NsaWVudCk7CiAKQEAgLTIzMyw3ICsyMzgsNyBAQCBURVNUKFdlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXJJbXBsLCBnZXN0dXJlUGluY2gpCiAjZW5kaWYKIAogICAgIE1vY2tJbnB1dEhh
bmRsZXJDbGllbnQgbW9ja0lucHV0SGFuZGxlcjsKLSAgICBPd25QdHI8V2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGw+IGlucHV0SGFuZGxlciA9IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJ
bXBsOjpjcmVhdGUoJm1vY2tJbnB1dEhhbmRsZXIpOworICAgIE93blB0cjxXZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVySW1wbD4gaW5wdXRIYW5kbGVyID0gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGw6OmNyZWF0ZSgmbW9ja0lucHV0SGFuZGxlciwgMCk7CiAgICAgTW9ja1dlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJDbGllbnQgbW9ja0NsaWVudDsKICAgICBpbnB1dEhhbmRsZXItPnNldENs
aWVudCgmbW9ja0NsaWVudCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129705</attachid>
            <date>2012-03-01 07:52:11 -0800</date>
            <delta_ts>2012-03-07 14:16:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79827-20120301105210.patch</filename>
            <type>text/plain</type>
            <size>71553</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQ3NzhmOThmNDJhYjI2
ZGRjMzBiZmE2ZGZiNjc2NzdkY2QyMTU0Zi4uNjZlY2E2YTExZTEyNjI4ZDE2NWMzNzI3YWIwNDM2
ZjMxNThlYjEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDEyLTAzLTAxICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEltcGxlbWVudCBzY3JvbGwgcGh5c2ljcyBhcmNoaXRlY3R1cmUgZm9yIGltcGwvbWFpbiB0
aHJlYWQgW25vdCBmb3IgcmV2aWV3IHlldF0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc5ODI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhZGRzIFBsYXRmb3JtR2VzdHVyZUN1cnZlIGFzIGEgd2F5IG9mIHVzaW5nIGRpZmZlcmVu
dCBzY3JvbGwgcGh5c2ljcyBpbiBhCisgICAgICAgIHNpbmdsZSBmcmFtZXdvcmsgdGhhdCB3aWxs
IHdvcmsgb24gYm90aCBtYWluIHRocmVhZCBhbmQgaW1wbCB0aHJlYWRzLgorCisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9BY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5p
bWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlUGxhdGZvcm1HZXN0dXJl
QW5pbWF0aW9uOjpBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9BY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24uaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbik6
CisgICAgICAgICogcGxhdGZvcm0vRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGbGluZ1BsYXRmb3JtR2Vz
dHVyZUN1cnZlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmxpbmdQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZTo6RmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
bGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSk6CisgICAgICAgICogcGxhdGZvcm0vUGxh
dGZvcm1HZXN0dXJlQ3VydmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFBsYXRmb3JtR2VzdHVyZUN1cnZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1
cmVDdXJ2ZVRhcmdldC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUGxh
dGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3I6OmhhbmRsZUdlc3R1cmVFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaDoKKyAgICAgICAgKFNjcm9sbEFuaW1hdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvck5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck5vbmU6OmhhbmRsZUdlc3R1cmVFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvck5vbmU6OmFuaW1hdGlvblRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JOb25lOjpzZXRTY3JvbGxJbmNyZW1lbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChTY3JvbGxBbmltYXRvck5vbmUpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9s
bFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3OjpoYW5kbGVHZXN0dXJlRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcu
aDoKKyAgICAgICAgKFNjcm9sbFZpZXcpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVB
cmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJs
ZUFyZWE6OmhhbmRsZUdlc3R1cmVFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJs
ZUFyZWEuaDoKKyAgICAgICAgKFNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5p
bWF0aW9uOjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NB
Y3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3Rp
dmVHZXN0dXJlQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJlQ3VydmUuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDR2VzdHVyZUN1cnZlVGFyZ2V0KToKKyAg
ICAgICAgKENDR2VzdHVyZUN1cnZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChD
Q0lucHV0SGFuZGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6
OnNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjbGVhckFjdGl2ZUdlc3R1cmVBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0U2Nyb2xsSW5j
cmVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVH
ZXN0dXJlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjphY3RpdmVHZXN0dXJlQW5pbWF0aW9uKToKKyAgICAgICAgKEND
TGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6
aW5pdGlhbGl6ZUltcGxPbkltcGxUaHJlYWQpOgorCiAyMDEyLTAyLTI4ICBKZXIgTm9ibGUgIDxq
ZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIEZ1bGwgc2NyZWVuIHZpZGVvIHZvbHVtZSBz
bGlkZXIgaGFzICJwcm9ncmVzcyBiYXIiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDIw
N2ZlODNlOTEwYTMxYTA0MjYyNzZjMjNhNmQ2YzBkNDgzNjhiMDkuLmVjZDMwNDQxNDExOWRkYTY0
ZjljM2ZjNDkwYWMxZWE1YmYyYzNiNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDUgQEAKKzIwMTItMDMtMDEgIFcuIEphbWVzIE1hY0xlYW4gIDx3am1hY2xlYW5AY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IHNjcm9sbCBwaHlzaWNz
IGFyY2hpdGVjdHVyZSBmb3IgaW1wbC9tYWluIHRocmVhZCBbbm90IGZvciByZXZpZXcgeWV0XQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk4MjcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNo
IGFkZHMgUGxhdGZvcm1HZXN0dXJlQ3VydmUgYXMgYSB3YXkgb2YgdXNpbmcgZGlmZmVyZW50IHNj
cm9sbCBwaHlzaWNzIGluIGEKKyAgICAgICAgc2luZ2xlIGZyYW1ld29yayB0aGF0IHdpbGwgd29y
ayBvbiBib3RoIG1haW4gdGhyZWFkIGFuZCBpbXBsIHRocmVhZHMuCisKKyAgICAgICAgKiBXZWJL
aXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJJbnB1dEV2ZW50Lmg6CisgICAgICAgIChXZWJL
aXQ6OldlYklucHV0RXZlbnQ6OmlzU2Nyb2xsR2VzdHVyZUV2ZW50VHlwZSk6CisgICAgICAgICog
c3JjL0NDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUb1BsYXRmb3JtR2VzdHVyZUN1
cnZlVGFyZ2V0QWRhcHRlcjo6Q0NUb1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVy
OjpzZXRTY3JvbGxJbmNyZW1lbnQpOgorICAgICAgICAqIHNyYy9DQ1RvUGxhdGZvcm1HZXN0dXJl
Q3VydmVUYXJnZXRBZGFwdGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChDQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyKToKKyAgICAgICAgKiBzcmMv
UGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRlcjo6UGxhdGZvcm1HZXN0dXJl
Q3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyOjphcHBseSk6CisgICAgICAgICog
c3JjL1BsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dl
c3R1cmVDdXJ2ZUFkYXB0ZXIpOgorICAgICAgICAqIHNyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0lucHV0SGFuZGxlcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KToKKyAgICAgICAgKiBzcmMvV2ViQ29t
cG9zaXRvcklucHV0SGFuZGxlckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwpOgorICAgICAgICAqIHNyYy9XZWJQb3B1cE1l
bnVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6aGFuZGxlSW5w
dXRFdmVudCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmhhbmRsZUlucHV0RXZlbnQpOgorICAgICAgICAqIHRlc3RzL1dlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHA6CisKIDIwMTItMDItMjggIFNoZXJpZmYg
Qm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIxMDc5MTcgYW5kIHIxMDkxODguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYWUx
ZWFjNzdkZjNhODFkMWZhMTc1ZmMzYmQ2ODM2MjEzOGQ5NzAyZS4uYjhhYjJiZTExZjBhMmFhMzQw
YzNkMjk3MjBmYTkzYTY5N2ZiYWQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjc3Myw2ICsyNzcz
LDggQEAKICAgICAgICAgICAgICdwYWdlL3dpbmNlL0ZyYW1lV2luQ0UuY3BwJywKICAgICAgICAg
ICAgICdwYWdlL3d4L0RyYWdDb250cm9sbGVyV3guY3BwJywKICAgICAgICAgICAgICdwYWdlL3d4
L0V2ZW50SGFuZGxlcld4LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vQWN0aXZlUGxhdGZv
cm1HZXN0dXJlQW5pbWF0aW9uLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vQWN0aXZlUGxh
dGZvcm1HZXN0dXJlQW5pbWF0aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0FyZW5hLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQXJlbmEuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vQXN5bmNGaWxlU3lzdGVtLmNwcCcsCkBAIC0yODAwLDYgKzI4MDIsOCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL0ZpbGVNZXRhZGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9GaWxl
U3RyZWFtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vRmlsZVN5c3RlbS5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL0ZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9GbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL0Zsb2F0Q29udmVyc2lvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9D
bG9ja0dlbmVyaWMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9DbG9ja0dlbmVyaWMuaCcs
CkBAIC0yODE4LDYgKzI4MjIsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL01lbW9yeVByZXNz
dXJlSGFuZGxlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnku
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QYXN0ZWJvYXJkLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3Jt
VG91Y2hFdmVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybVRvdWNoUG9pbnQu
aCcsCkBAIC0zMjgxLDYgKzMyODYsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlR2VzdHVyZUFu
aW1hdGlvbi5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkV2ZW50cy5jcHAn
LApAQCAtMzI5OSw2ICszMzA2LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dlc3R1cmVDdXJ2ZS5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dlc3R1cmVD
dXJ2ZVRhcmdldC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAppbmRleCBmMTBlNGFiZTFlMmUxNWQ0N2UzZTA5YmM4MDYwZGRhZjJhODdh
MDVlLi43ZjQ5YWUxZjYzMjhjNzA4ZjU3YzMzMzk5NWNhNWY0NjkwZDNmMDNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0yMzc3LDYgKzIzNzcsMTUgQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYg
Z2VzdHVyZUV2ZW50KQogICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZURvdWJsZVRhcDoK
ICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbjoKICAgICBjYXNlIFBs
YXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQ6CisgICAgICAgIC8vIEdlc3R1cmVTY3JvbGxF
bmQgd2l0aCBub24temVybyB2ZWxvY2l0eSAoZGVsdGFYL1kpIHNpZ25hbHMgc3RhcnQgb2YgRmxp
bmcuCisgICAgICAgIGlmIChnZXN0dXJlRXZlbnQuZGVsdGFYKCkgfHwgZ2VzdHVyZUV2ZW50LmRl
bHRhWSgpKSB7CisgICAgICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7
CisgICAgICAgICAgICBpZiAoIXZpZXcpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgICAgICB2aWV3LT5oYW5kbGVHZXN0dXJlRXZlbnQoZ2VzdHVyZUV2ZW50KTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmJjYzFlMDdkODg5ZjVmMTJkOTQ5NDY4YTExNGQ1MzQ3NzI1NDUwNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2Vz
dHVyZUFuaW1hdGlvbi5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIkFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5oIgorCisj
aW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZVRhcmdldC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8QWN0
aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uPiBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRp
b246OmNyZWF0ZShkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1
cnZlPiBjdXJ2ZSwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbihzdGFydFRp
bWUsIGN1cnZlLCB0YXJnZXQpKTsKK30KKworQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9u
OjpBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24oZG91YmxlIHN0YXJ0VGltZSwgUGFzc093
blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gY3VydmUsIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFy
Z2V0KiB0YXJnZXQpCisgICAgOiBtX3N0YXJ0VGltZShzdGFydFRpbWUpCisgICAgLCBtX2N1cnZl
KGN1cnZlKQorICAgICwgbV90YXJnZXQodGFyZ2V0KQoreworfQorCitib29sIEFjdGl2ZVBsYXRm
b3JtR2VzdHVyZUFuaW1hdGlvbjo6YW5pbWF0ZShkb3VibGUgdHMpCit7CisgICAgcmV0dXJuIG1f
Y3VydmUtPmFwcGx5KHRzLCBtX3RhcmdldCk7Cit9CisKK307IC8vIG5hbWVzcGFjZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9BY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmlt
YXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41ODRkNGI0N2ZkMDI5OGMxMGRhOTgyNTQ3OTg3MTA4ODk1ZmQ1
YjA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQWN0aXZlUGxh
dGZvcm1HZXN0dXJlQW5pbWF0aW9uLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uX2gKKyNkZWZpbmUgQWN0aXZlUGxhdGZvcm1H
ZXN0dXJlQW5pbWF0aW9uX2gKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3Jt
R2VzdHVyZUN1cnZlOworY2xhc3MgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQ7CisKK2NsYXNz
IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uPiBjcmVhdGUoZG91YmxlIHN0
YXJ0VGltZSwgUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4sIFBsYXRmb3JtR2VzdHVy
ZUN1cnZlVGFyZ2V0Kik7CisKKyAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0ZShkb3VibGUgdHMpOwor
Citwcml2YXRlOgorICAgIEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbihkb3VibGUgc3Rh
cnRUaW1lLCBQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiwgUGxhdGZvcm1HZXN0dXJl
Q3VydmVUYXJnZXQqKTsKKworICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKKyAgICBPd25QdHI8UGxh
dGZvcm1HZXN0dXJlQ3VydmU+IG1fY3VydmU7CisgICAgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJn
ZXQqIG1fdGFyZ2V0OworfTsKKworfTsgLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40YzU3OWQ2MzczOWNlNTVjNGExODI2Yzg4ZDkyMDY1Y2E5OTQzMzQ3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmxpbmdQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZS5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgorCisjaW5j
bHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaCIKKworI2luY2x1ZGUgPG1hdGguaD4K
KyNpbmNsdWRlIDxzdGRpby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8
UGxhdGZvcm1HZXN0dXJlQ3VydmU+IEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShj
b25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZs
aW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUodmVsb2NpdHkpKTsKK30KKworRmxpbmdQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZTo6RmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZShjb25zdCBGbG9hdFBvaW50JiB2
ZWxvY2l0eSkKKyAgICA6IG1fdmVsb2NpdHkodmVsb2NpdHkpCisgICAgLCBtX2xhc3RDZGYoLTEp
IC8vIGV4cCgtKDApXjIpCit7Cit9CisKK2Jvb2wgRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6
YXBwbHkoZG91YmxlIHRzLCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0KQorewor
ICAgIC8vIEZJWE1FOiB0aGlzIGN1cnZlIHByb2ZpbGUgaXMgcHJvYmFibHkgYmV0dGVyIHN1aXRl
ZCB0byBtb3VzZSB3aGVlbCBzY3JvbGxpbmcgdGhhbiBmbGluZy4KKworICAgIC8vIFVzZSBhIFJh
eWxlaWdoIGRpc3RyaWJ1dGlvbiBmb3IgdGhlIGN1cnZlLiBUaGlzIHNpbXVsYXRlcyBhIHZlbG9j
aXR5IHByb2ZpbGUKKyAgICAvLyB0aGF0IHN0YXJ0cyBhdCAwLCBpbmNyZWFzZXMgdG8gYSBtYXhp
bXVtLCB0aGVuIGRlY3JlYXNlcyBhZ2FpbiBzbW9vdGhseS4gQnkKKyAgICAvLyB1c2luZyB0aGUg
Y3VtdWxhdGl2ZSBkaXN0cmlidXRpb24gZnVuY3Rpb24gKENERikgaW5zdGVhZCBvZiB0aGUgcG9p
bnQtbWFzcyBmdW5jdGlvbiwKKyAgICAvLyB3ZSBjYW4gaXNvbGF0ZSB0aW1pbmcgaml0dGVyIGJ5
IHJlbWVtYmVyaW5nIHRoZSBDREYgdmFsdWUgYXQgdGhlIGxhc3QgdGljay4gU2luY2UKKyAgICAv
LyB0aGUgQ0RGIG1heGVzIG91dCBhdCAxLCBzY2FsZSBpdCBieSB0aGUgaW5wdXQgdmVsb2NpdHku
CisgICAgLy8KKyAgICAvLyBDREYgLT4gRih4OyBzaWdtYSkgPSAxIC0gZXhwey14XjIvMlxzaWdt
YV4yfQorICAgIC8vIHJlZjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SYXlsZWlnaF9k
aXN0cmlidXRpb24KKyAgICBzdGF0aWMgZG91YmxlIHR3b1NpZ21hU3F1YXJlZEludmVyc2UgPSAw
LjU7IC8vIHNpZ21hID0gMQorICAgIGZsb2F0IGNkZiA9IC1leHAoLXRzICogdHMgKiB0d29TaWdt
YVNxdWFyZWRJbnZlcnNlKTsKKyAgICBmbG9hdCBkZWx0YSA9IGNkZiAtIG1fbGFzdENkZjsKKyAg
ICBtX2xhc3RDZGYgPSBjZGY7CisKKyAgICBGbG9hdFBvaW50IHZlbG9jaXR5KGRlbHRhICogbV92
ZWxvY2l0eS54KCksIGRlbHRhICogbV92ZWxvY2l0eS55KCkpOworCisgICAgaWYgKHRzIDwgMSB8
fCBzdGQ6OmFicyh2ZWxvY2l0eS54KCkpID4gMSB8fCBzdGQ6OmFicyhtX3ZlbG9jaXR5LnkoKSkg
PiAxKSB7CisgICAgICAgIG1fdmVsb2NpdHkuc2V0WCgwLjggKiBtX3ZlbG9jaXR5LngoKSk7Cisg
ICAgICAgIG1fdmVsb2NpdHkuc2V0WSgwLjggKiBtX3ZlbG9jaXR5LnkoKSk7CisgICAgICAgIHRh
cmdldC0+c2V0U2Nyb2xsSW5jcmVtZW50KEludFBvaW50KG1fdmVsb2NpdHkueCgpLCBtX3ZlbG9j
aXR5LnkoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK307IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmNWViY2RhNjcxZjVj
MjJlZDZjOTg3MDRhMzY5NDgzMTI4ZThkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9GbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgKQEAgLTAsMCArMSw1MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlX2gKKyNk
ZWZpbmUgRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZV9oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldDsKKworY2xhc3MgRmxpbmdQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZSA6IHB1YmxpYyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGNyZWF0ZShjb25z
dCBGbG9hdFBvaW50JiB2ZWxvY2l0eSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoZG91Ymxl
IHRzLCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCopOworCitwcml2YXRlOgorICAgIEZsaW5n
UGxhdGZvcm1HZXN0dXJlQ3VydmUoY29uc3QgRmxvYXRQb2ludCYgdmVsb2NpdHkpOworCisgICAg
RmxvYXRQb2ludCBtX3ZlbG9jaXR5OworICAgIGZsb2F0IG1fbGFzdENkZjsKK307CisKK307IC8v
IG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtR2VzdHVyZUN1cnZlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bUdlc3R1cmVDdXJ2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxNmQ0MDZlODdhZWUxNzNmNjU5NzM3MTNjYmU4
NTk1MjI5YTYwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
bGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgUGxhdGZvcm1HZXN0dXJlQ3VydmVfaAorI2RlZmluZSBQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxhdGZvcm1HZXN0dXJlQ3VydmVU
YXJnZXQ7CisKK2NsYXNzIFBsYXRmb3JtR2VzdHVyZUN1cnZlIHsKK3B1YmxpYzoKKyAgICAvLyBS
ZXR1cm5zIGZhbHNlIGlmIGN1cnZlIGhhcyBmaW5pc2hlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSBh
cHBsaWVkLgorICAgIHZpcnR1YWwgYm9vbCBhcHBseShkb3VibGUgdHMsIFBsYXRmb3JtR2VzdHVy
ZUN1cnZlVGFyZ2V0KikgPSAwOworfTsKKworfTsgLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJn
ZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWNkNzg2ZjNkYzhmNWFlOWMwZDcyZjVmOWUyMjE5MjhjMmRkZjNiNwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVy
ZUN1cnZlVGFyZ2V0LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldF9oCisjZGVmaW5lIFBsYXRmb3JtR2VzdHVyZUN1cnZl
VGFyZ2V0X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnRQb2ludDsKKworY2xh
c3MgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9p
ZCBzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmKSA9IDA7CisgICAgLy8gRklYTUU6
IGFkZCBpbnRlcmZhY2VzIGZvciBzZXRTY3JvbGwoKSwgc2V0UGFnZVNjYWxlQW5kU2Nyb2xsKCks
IGV0Yy4KK307CisKK307IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAppbmRleCAyMzAwMGMzZTRmODdlZDYwZWJkNDY1ZjEw
Y2Y4YzkzMjFkZGM3YmMwLi5mMTZjY2RiYTc4OTYxMTczYTRiMTdlN2I2YTMxOTE5MjMyYmVjMDFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCkBAIC0xMjIs
NiArMTIyLDEyIEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JiBlKQogICAgIHJldHVybiBoYW5kbGVkOwogfQogCisjaWYgRU5B
QkxFKEdFU1RVUkVfRVZFTlRTKQordm9pZCBTY3JvbGxBbmltYXRvcjo6aGFuZGxlR2VzdHVyZUV2
ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JikKK3sKK30KKyNlbmRpZgorCiB2b2lkIFNj
cm9sbEFuaW1hdG9yOjpzZXRDdXJyZW50UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b24pCiB7CiAgICAgbV9jdXJyZW50UG9zWCA9IHBvc2l0aW9uLngoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCmluZGV4IDJiMzg5NDQwM2U1MThlYzhlZWFiNDMyZGM0
NGRlOTlmMjhlNjQ2MGUuLjdlMzE1ZTM5NjE0MTc3NDc2ZTcwZWRlYTU1OTg0OWFkNWEyOWU0NDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaApAQCAtNjQsNiArNjQs
OSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldElzQWN0aXZlKCkgeyB9CiAKICAgICB2
aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsK
KyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUdlc3R1
cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOworI2VuZGlmCiAKICAgICB2b2lk
IHNldEN1cnJlbnRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgRmxvYXRQb2ludCBj
dXJyZW50UG9zaXRpb24oKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvck5vbmUuY3BwCmluZGV4IDA4M2ExOGE3MDFhZmYxNTZhMmE2YmE3OWU4NDA4NzYy
MTg2OThkNzIuLjMyZDExNzhjZWE2ZDllNTNkMDkzOThhODAxMDE2MWFiNTg2ODNlMGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcApAQCAtMzQs
NiArMzQsOCBAQAogCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JOb25lLmgiCiAKKyNpbmNsdWRl
ICJBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiT3duQXJyYXlQdHIuaCIKQEAgLTQ0NCw2ICs0NDYs
MzAgQEAgdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1h
dGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQKICAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQo
KTsKIH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JO
b25lOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1
cmVFdmVudCkKK3sKKyAgICBzd2l0Y2ggKGdlc3R1cmVFdmVudC50eXBlKCkpIHsKKyAgICBjYXNl
IFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kOgorICAgICAgICBpZiAoISFt
X2dlc3R1cmVBbmltYXRpb24pCisgICAgICAgICAgICBtX2dlc3R1cmVBbmltYXRpb24uY2xlYXIo
KTsKKworICAgICAgICBtX2dlc3R1cmVBbmltYXRpb24gPSBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVB
bmltYXRpb246OmNyZWF0ZShtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRl
KEZsb2F0UG9pbnQoZ2VzdHVyZUV2ZW50LmRlbHRhWCgpLCBnZXN0dXJlRXZlbnQuZGVsdGFZKCkp
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyk7CisgICAgICAgIGlmICgh
bV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgbV9hbmltYXRpb25UaW1l
ci5zdGFydE9uZVNob3QoMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1HZXN0
dXJlRXZlbnQ6Okdlc3R1cmVUYXBEb3duOgorICAgICAgICBpZiAoISFtX2dlc3R1cmVBbmltYXRp
b24pCisgICAgICAgICAgICBtX2dlc3R1cmVBbmltYXRpb24uY2xlYXIoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorI2VuZGlmCisKIHZv
aWQgU2Nyb2xsQW5pbWF0b3JOb25lOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCiB7CiAgICAgdXBkYXRl
VmlzaWJsZUxlbmd0aHMoKTsKQEAgLTQ4MCw2ICs1MDYsOSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9y
Tm9uZTo6YW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvck5vbmU+KiB0aW1l
cikKICAgICBpZiAobV92ZXJ0aWNhbERhdGEubV9zdGFydFRpbWUgJiYgbV92ZXJ0aWNhbERhdGEu
YW5pbWF0ZVNjcm9sbChjdXJyZW50VGltZSArIGRlbHRhVG9OZXh0RnJhbWUpKQogICAgICAgICBj
b250aW51ZUFuaW1hdGlvbiA9IHRydWU7CiAKKyAgICBpZiAoISFtX2dlc3R1cmVBbmltYXRpb24p
CisgICAgICAgIGNvbnRpbnVlQW5pbWF0aW9uIHw9IG1fZ2VzdHVyZUFuaW1hdGlvbi0+YW5pbWF0
ZShjdXJyZW50VGltZSk7CisKICAgICBpZiAoY29udGludWVBbmltYXRpb24pIHsKICAgICAgICAg
ZG91YmxlIG5leHRUaW1lckludGVydmFsID0gbWF4KGtNaW5pbXVtVGltZXJJbnRlcnZhbCwgZGVs
dGFUb05leHRGcmFtZSk7CiAgICAgICAgIHRpbWVyLT5zdGFydE9uZVNob3QobmV4dFRpbWVySW50
ZXJ2YWwpOwpAQCAtNDk3LDYgKzUyNiwxMyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6c3Rv
cEFuaW1hdGlvblRpbWVySWZOZWVkZWQoKQogICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3Ao
KTsKIH0KIAorLy8gUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgaW1wbGVtZW50YXRpb24KK3Zv
aWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQm
IGxvY2F0aW9uKQoreworICAgIG1fY3VycmVudFBvc1ggKz0gbG9jYXRpb24ueCgpOworICAgIG1f
Y3VycmVudFBvc1kgKz0gbG9jYXRpb24ueSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmgKaW5kZXggNGQ2OWE3YzRhNjQ2MzcyNWJlMTBh
NmE2NjVjZWI3OWRhMzIxNWI4Yi4uYmZmMDc2YmExYzk3MjhmYTJiNGUzZTJiNTg5YjIyZTljYzgw
YWYwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JO
b25lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmgK
QEAgLTMzLDE2ICszMywyMCBAQAogCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAKKyNp
bmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oIgogI2luY2x1ZGUgIlNjcm9sbEFu
aW1hdG9yLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAK
IGNsYXNzIFNjcm9sbEFuaW1hdG9yTm9uZVRlc3Q7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Y2xhc3MgSW50UG9pbnQ7CitjbGFzcyBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb247CiBz
dHJ1Y3QgU2Nyb2xsQW5pbWF0b3JQYXJhbWV0ZXJzOwogCi1jbGFzcyBTY3JvbGxBbmltYXRvck5v
bmUgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgeworY2xhc3MgU2Nyb2xsQW5pbWF0b3JOb25lIDog
cHVibGljIFNjcm9sbEFuaW1hdG9yLCBwdWJsaWMgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQg
ewogcHVibGljOgogICAgIFNjcm9sbEFuaW1hdG9yTm9uZShTY3JvbGxhYmxlQXJlYSopOwogICAg
IHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yTm9uZSgpOwpAQCAtNTAsNiArNTQsMTAgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdy
YW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKIAor
I2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlR2VzdHVy
ZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7CisjZW5kaWYKKwogICAgIHZpcnR1
YWwgdm9pZCB3aWxsRW5kTGl2ZVJlc2l6ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRWZXJ0
aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkSG9yaXpv
bnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKQEAgLTgzLDYgKzkxLDkgQEAgcHVibGljOgogICAg
ICAgICBkb3VibGUgbV9tYXhpbXVtQ29hc3RUaW1lOwogICAgIH07CiAKKyAgICAvLyBQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZVRhcmdldCBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgdm9pZCBzZXRT
Y3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmKTsKKwogcHJvdGVjdGVkOgogICAgIGZyaWVu
ZCBjbGFzcyA6OlNjcm9sbEFuaW1hdG9yTm9uZVRlc3Q7CiAKQEAgLTEzNSw2ICsxNDYsOCBAQCBw
cm90ZWN0ZWQ6CiAKICAgICBkb3VibGUgbV9zdGFydFRpbWU7CiAgICAgVGltZXI8U2Nyb2xsQW5p
bWF0b3JOb25lPiBtX2FuaW1hdGlvblRpbWVyOworCisgICAgT3duUHRyPEFjdGl2ZVBsYXRmb3Jt
R2VzdHVyZUFuaW1hdGlvbj4gbV9nZXN0dXJlQW5pbWF0aW9uOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAppbmRleCA0ZDE0
ODA1ZWZmNjIzMmQ0YzYzZDA5NjVjYWI2MzllMmI0ZDcwMjE3Li4yYTk4NWIxY2Q0NzI2ZTBmMTQ5
YTE0NGE3MzgyNTAwNTdlYjQ5N2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3
LmNwcApAQCAtODI2LDYgKzgyNiwxNiBAQCBTY3JvbGxiYXIqIFNjcm9sbFZpZXc6OnNjcm9sbGJh
ckF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQogICAgIHJldHVybiAwOwogfQog
CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQordm9pZCBTY3JvbGxWaWV3OjpoYW5kbGVHZXN0
dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKK3sKKyAg
ICBpZiAocGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2Nyb2xsYWJs
ZUFyZWE6OmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnQpOworfQorI2VuZGlmCisKIHZv
aWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsYmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhck92ZXJsYXlT
dHlsZSBvdmVybGF5U3R5bGUpCiB7CiAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbGJhck92
ZXJsYXlTdHlsZShvdmVybGF5U3R5bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5o
CmluZGV4IDcwNTExZjE2Zjg3YzAyN2ExNjM0YzZiODBiMWE4YWE5NmU3NTk5NGMuLjk2YjIzNGI1
ZDUzNjA1ZjEzNzlhNTg1NmI1NTBkZDQwYjYyNDA5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxWaWV3LmgKQEAgLTIzNSw2ICsyMzUsMTAgQEAgcHVibGljOgogICAgIC8vIEZvciBwbGF0
Zm9ybXMgdGhhdCBuZWVkIHRvIGhpdCB0ZXN0IHNjcm9sbGJhcnMgZnJvbSB3aXRoaW4gdGhlIGVu
Z2luZSdzIGV2ZW50IGhhbmRsZXJzIChsaWtlIFdpbjMyKS4KICAgICBTY3JvbGxiYXIqIHNjcm9s
bGJhckF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KTsKIAorI2lmIEVOQUJMRShH
RVNUVVJFX0VWRU5UUykKKyAgICB2b2lkIGhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9y
bUdlc3R1cmVFdmVudCYpOworI2VuZGlmCisKICAgICBJbnRQb2ludCBjb252ZXJ0Q2hpbGRUb1Nl
bGYoY29uc3QgV2lkZ2V0KiBjaGlsZCwgY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogICAg
IHsKICAgICAgICAgSW50UG9pbnQgbmV3UG9pbnQgPSBwb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAppbmRleCBiYmQ2NmU4MzdkOGFmODY3MmEwMWFkODkx
NDI5YzIzMmVhYjJmMWQ0Li5lNGVmOTBkMTY2M2QyYjA2MzJiYmYxMzgyOGJmMmJlNTliMWJjOGNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCkBAIC0xNTks
NiArMTU5LDEzIEBAIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogICAgIHJldHVybiBzY3JvbGxBbmltYXRv
cigpLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwogfQogCisjaWYgRU5BQkxFKEdFU1RV
UkVfRVZFTlRTKQordm9pZCBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0
IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCit7CisgICAgc2Nyb2xsQW5pbWF0
b3IoKS0+aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVudCk7Cit9CisjZW5kaWYKKwogLy8g
Tk9URTogT25seSBjYWxsZWQgZnJvbSBJbnRlcm5hbHMgZm9yIHRlc3RpbmcuCiB2b2lkIFNjcm9s
bGFibGVBcmVhOjpzZXRTY3JvbGxPZmZzZXRGcm9tSW50ZXJuYWxzKGNvbnN0IEludFBvaW50JiBv
ZmZzZXQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxl
QXJlYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAppbmRleCA4
MjQ0Y2U4MzNkZTY3OWYxZjFkMWUyYzZhZWZkNTM0NjAyOWI2OTQzLi4wYTJhMTY0ODhjZjczMmQ5
M2RjNzFiODhhYmI0MWFlM2VmZTdhZWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGFibGVBcmVhLmgKQEAgLTU2LDYgKzU2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBy
ZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgSW50UG9pbnQmKSB7IHJldHVybiBmYWxz
ZTsgfQogCiAgICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVu
dCYpOworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICB2b2lkIGhhbmRsZUdlc3R1cmVF
dmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOworI2VuZGlmCiAKICAgICAvLyBGdW5j
dGlvbnMgZm9yIGNvbnRyb2xsaW5nIGlmIHlvdSBjYW4gc2Nyb2xsIHBhc3QgdGhlIGVuZCBvZiB0
aGUgZG9jdW1lbnQuCiAgICAgYm9vbCBjb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2U7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmYwOTQ1YTgxNTg3NDNjOTY0ODU2M2IyNDdmNTA3OWNlYWI1MmQxYjMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2
ZUdlc3R1cmVBbmltYXRpb24uY3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlv
bi5oIgorCisjaW5jbHVkZSAiY2MvQ0NHZXN0dXJlQ3VydmUuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb246OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlv
bihkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiBjdXJ2ZSwgQ0NH
ZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKKyAgICA6IG1fc3RhcnRUaW1lKHN0YXJ0VGltZSkK
KyAgICAsIG1fZ2VzdHVyZUN1cnZlKGN1cnZlKQorICAgICwgbV9nZXN0dXJlQ3VydmVUYXJnZXQo
dGFyZ2V0KQoreworfQorCitQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gQ0NB
Y3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUoZG91YmxlIHN0YXJ0VGltZSwgUGFzc093blB0
cjxDQ0dlc3R1cmVDdXJ2ZT4gY3VydmUsIENDR2VzdHVyZUN1cnZlVGFyZ2V0KiB0YXJnZXQpCit7
CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24oc3RhcnRU
aW1lLCBjdXJ2ZSwgdGFyZ2V0KSk7Cit9CisKK2Jvb2wgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9u
OjphbmltYXRlKGRvdWJsZSB0cykKK3sKKyAgICByZXR1cm4gbV9nZXN0dXJlQ3VydmUtPmFwcGx5
KHRzIC0gbV9zdGFydFRpbWUsIG1fZ2VzdHVyZUN1cnZlVGFyZ2V0KTsKK30KKworfTsgLy8gbmFt
ZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE1MTEzOGY1ZDY5YzEzZTc3YjkwYWRlOGI1MGEyNDVmNDU2ZWE2YjcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbl9oCisjZGVmaW5lIENDQWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbl9oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBDQ0dlc3R1cmVDdXJ2ZTsKK2NsYXNzIENDR2VzdHVyZUN1cnZl
VGFyZ2V0OworCitjbGFzcyBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24geworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbik7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPiBjcmVhdGUoZG91YmxlIHN0
YXJ0VGltZSwgUGFzc093blB0cjxDQ0dlc3R1cmVDdXJ2ZT4sIENDR2VzdHVyZUN1cnZlVGFyZ2V0
Kik7CisKKyAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0ZShkb3VibGUgdHMpOworCitwcml2YXRlOgor
ICAgIENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbihkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRy
PENDR2VzdHVyZUN1cnZlPiwgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKKworICAgIGRvdWJsZSBt
X3N0YXJ0VGltZTsKKyAgICBPd25QdHI8Q0NHZXN0dXJlQ3VydmU+IG1fZ2VzdHVyZUN1cnZlOwor
ICAgIENDR2VzdHVyZUN1cnZlVGFyZ2V0KiBtX2dlc3R1cmVDdXJ2ZVRhcmdldDsKK307CisKK307
IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDR2VzdHVyZUN1cnZlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dlc3R1cmVDdXJ2ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjUzOWVmMmExZmM4MzZmMzhkNjk3OGU0NTE0ZTYzOTYwY2ZjNWE5ZWUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dl
c3R1cmVDdXJ2ZS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NH
ZXN0dXJlQ3VydmVfaAorI2RlZmluZSBDQ0dlc3R1cmVDdXJ2ZV9oCisKKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEludFBvaW50OworCitjbGFzcyBDQ0dlc3R1cmVDdXJ2ZVRhcmdl
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbEluY3JlbWVudChjb25zdCBJ
bnRQb2ludCAmKSA9IDA7CisgICAgLy8gRklYTUU6IGFkZCBpbnRlcmZhY2VzIGZvciBzZXRTY3Jv
bGwoKSwgc2V0UGFnZVNjYWxlQW5kU2Nyb2xsKCksIGV0Yy4KK307CisKK2NsYXNzIENDR2VzdHVy
ZUN1cnZlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoZG91YmxlIHRzLCBDQ0dl
c3R1cmVDdXJ2ZVRhcmdldCopID0gMDsKK307CisKK307IC8vIG5hbWVzcGFjZQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDSW5wdXRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oCmluZGV4IDZjMDU1OTk0YzU4ZWNhNDExMzE5YTljOTlk
MTQzZjljMTdmM2UyYzIuLjg4ODJiODhmMjE5M2ExZjczMzczOGZmMzg1NjVhMTFmMzk0NzQ5ZDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDSW5wdXRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaApAQCAtMjksNiArMjksOCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjsKK2NsYXNzIEND
R2VzdHVyZUN1cnZlVGFyZ2V0OwogY2xhc3MgSW50UG9pbnQ7CiBjbGFzcyBJbnRTaXplOwogCkBA
IC03NSw2ICs3NywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSBzdGFydFRpbWVNcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlIGR1cmF0aW9uTXMpID0gMDsKIAorICAgIHZpcnR1YWwgQ0NB
Y3RpdmVHZXN0dXJlQW5pbWF0aW9uKiBhY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBY3Rp
dmVHZXN0dXJlQW5pbWF0aW9uPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFjdGl2ZUdl
c3R1cmVBbmltYXRpb24oKSA9IDA7CisKIHByb3RlY3RlZDoKICAgICBDQ0lucHV0SGFuZGxlckNs
aWVudCgpIHsgfQogICAgIHZpcnR1YWwgfkNDSW5wdXRIYW5kbGVyQ2xpZW50KCkgeyB9CkBAIC04
Myw3ICs4OSw3IEBAIHByb3RlY3RlZDoKIGNsYXNzIENDSW5wdXRIYW5kbGVyIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDQ0lucHV0SGFuZGxlcik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8Q0NJbnB1dEhhbmRsZXI+IGNyZWF0ZShDQ0lucHV0SGFuZGxlckNsaWVudCopOwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDSW5wdXRIYW5kbGVyPiBjcmVhdGUoQ0NJbnB1dEhhbmRs
ZXJDbGllbnQqLCBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCopOwogICAgIHZpcnR1YWwgfkNDSW5wdXRI
YW5kbGVyKCkgeyB9CiAKICAgICB2aXJ0dWFsIGludCBpZGVudGlmaWVyKCkgY29uc3QgPSAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCA4MGU0NzM4Y2MxM2Fk
NGY5YzA4ZDVmZDc1ZGIxM2NmZjU4NmRjOTU1Li45ZmNiOTY5NDIxMmQwZTNkNzY0YWExMDAxNjdl
MzU3NjUxZDQyZjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApA
QCAtMzAsNyArMzAsOSBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2lu
Y2x1ZGUgImNjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDRGFt
YWdlVHJhY2tlci5oIgorI2luY2x1ZGUgImNjL0NDR2VzdHVyZUN1cnZlLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAj
aW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCkBAIC0xMDEsNiArMTAzLDcgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1z
KQogewogICAgIGFuaW1hdGVQYWdlU2NhbGUoZnJhbWVCZWdpblRpbWVNcyk7CiAgICAgYW5pbWF0
ZUxheWVycyhmcmFtZUJlZ2luVGltZU1zKTsKKyAgICBhbmltYXRlR2VzdHVyZXMoZnJhbWVCZWdp
blRpbWVNcyk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVB
bmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sIGJvb2wgYW5jaG9yUG9pbnQs
IGZsb2F0IHBhZ2VTY2FsZSwgZG91YmxlIHN0YXJ0VGltZU1zLCBkb3VibGUgZHVyYXRpb25NcykK
QEAgLTEyOCw2ICsxMzEsMjQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzdGFydFBhZ2VT
Y2FsZUFuaW1hdGlvbihjb25zdCBJbnRTaXplJiB0YXJnZXRQb3NpdGlvbiwKICAgICBtX2NsaWVu
dC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKIH0KIAordm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpzZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVHZXN0
dXJlQW5pbWF0aW9uPiBnZXN0dXJlQW5pbWF0aW9uKQoreworICAgIG1fYWN0aXZlR2VzdHVyZUFu
aW1hdGlvbiA9IGdlc3R1cmVBbmltYXRpb247CisKKyAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21t
aXRPbkltcGxUaHJlYWQoKTsKKyAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJl
YWQoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjbGVhckFjdGl2ZUdlc3R1cmVB
bmltYXRpb24oKQoreworICAgIG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5jbGVhcigpOworfQor
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFNjcm9sbEluY3JlbWVudChjb25zdCBJbnRQ
b2ludCYgbG9jYXRpb24pCit7CisgICAgc2Nyb2xsQnkoSW50U2l6ZShsb2NhdGlvbi54KCksIGxv
Y2F0aW9uLnkoKSkpOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdl
Rm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJM
aXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogewogICAgIC8vIEZvciBub3csIHdlIHVzZSBk
YW1hZ2UgdHJhY2tpbmcgdG8gY29tcHV0ZSBhIGdsb2JhbCBzY2lzc29yLiBUbyBkbyB0aGlzLCB3
ZSBtdXN0CkBAIC02OTMsNCArNzE0LDE2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5p
bWF0ZUxheWVycyhkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKICAgICAgICAgbV9jbGllbnQtPnNl
dE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bDo6YW5pbWF0ZUdlc3R1cmVzKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKQoreworICAgIGlmICgh
IW1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbikgeworICAgICAgICBib29sIGlzQ29udGludWluZyA9
IG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbi0+YW5pbWF0ZShmcmFtZUJlZ2luVGltZU1zIC8gMTAw
MCk7CisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOworICAg
ICAgICBpZiAoIWlzQ29udGludWluZykgeworICAgICAgICAgICAgbV9jbGllbnQtPnNldE5lZWRz
Q29tbWl0T25JbXBsVGhyZWFkKCk7CisgICAgICAgICAgICBtX2FjdGl2ZUdlc3R1cmVBbmltYXRp
b24uY2xlYXIoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGY3N2UwZWI4NDIxNzNm
NzFjZmE0Nzc3NzRlOTViMzM0NzM5MTJhZjEuLmE5MjkxYjIxMzYxMjAzOTQwY2FjNTY2YTQ2ZDUz
MzhmYTNiYThhYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTI2
LDYgKzI2LDcgQEAKICNkZWZpbmUgQ0NMYXllclRyZWVIb3N0SW1wbF9oCiAKICNpbmNsdWRlICJj
Yy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgorI2luY2x1ZGUgImNjL0NDR2VzdHVyZUN1cnZlLmgiCiAj
aW5jbHVkZSAiY2MvQ0NJbnB1dEhhbmRsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVy
LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCkBAIC0zNiw2ICszNyw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOwog
Y2xhc3MgQ0NDb21wbGV0aW9uRXZlbnQ7CiBjbGFzcyBDQ1BhZ2VTY2FsZUFuaW1hdGlvbjsKIGNs
YXNzIENDTGF5ZXJJbXBsOwpAQCAtNTQsNyArNTYsNyBAQCBwdWJsaWM6CiB9OwogCiAvLyBDQ0xh
eWVyVHJlZUhvc3RJbXBsIG93bnMgdGhlIENDTGF5ZXJJbXBsIHRyZWUgYXMgd2VsbCBhcyBhc3Nv
Y2lhdGVkIHJlbmRlcmluZyBzdGF0ZQotY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbCA6IHB1Ymxp
YyBDQ0lucHV0SGFuZGxlckNsaWVudCB7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsIDogcHVi
bGljIENDSW5wdXRIYW5kbGVyQ2xpZW50LCBwdWJsaWMgQ0NHZXN0dXJlQ3VydmVUYXJnZXQgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdEltcGwpOwogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZShjb25zdCBD
Q1NldHRpbmdzJiwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOwpAQCAtNjksNiArNzEsMTIg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwaW5jaEdlc3R1cmVVcGRhdGUoZmxvYXQsIGNv
bnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHBpbmNoR2VzdHVyZUVuZCgpOwogICAg
IHZpcnR1YWwgdm9pZCBzdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRTaXplJiB0YXJn
ZXRQb3NpdGlvbiwgYm9vbCBhbmNob3JQb2ludCwgZmxvYXQgcGFnZVNjYWxlLCBkb3VibGUgc3Rh
cnRUaW1lTXMsIGRvdWJsZSBkdXJhdGlvbk1zKTsKKyAgICB2aXJ0dWFsIENDQWN0aXZlR2VzdHVy
ZUFuaW1hdGlvbiogYWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fYWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbi5nZXQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVHZXN0dXJl
QW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPik7CisgICAgdmly
dHVhbCB2b2lkIGNsZWFyQWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpOworCisgICAgLy8gQ0NHZXN0
dXJlQ3VydmVUYXJnZXQgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xs
SW5jcmVtZW50KGNvbnN0IEludFBvaW50Jik7CiAKICAgICAvLyBWaXJ0dWFsIGZvciB0ZXN0aW5n
LgogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOwpAQCAtMTI4LDYgKzEzNiw3IEBAIHBy
b3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmLCBDQ0xh
eWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CiAKICAgICB2b2lkIGFuaW1hdGVQYWdlU2NhbGUoZG91
YmxlIGZyYW1lQmVnaW5UaW1lTXMpOworICAgIHZvaWQgYW5pbWF0ZUdlc3R1cmVzKGRvdWJsZSBm
cmFtZUJlZ2luVGltZU1zKTsKIAogICAgIC8vIFZpcnR1YWwgZm9yIHRlc3RpbmcuCiAgICAgdmly
dHVhbCB2b2lkIGFuaW1hdGVMYXllcnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lTXMpOwpAQCAtMTcx
LDYgKzE4MCw3IEBAIHByaXZhdGU6CiAgICAgSW50UG9pbnQgbV9wcmV2aW91c1BpbmNoQW5jaG9y
OwogCiAgICAgT3duUHRyPENDUGFnZVNjYWxlQW5pbWF0aW9uPiBtX3BhZ2VTY2FsZUFuaW1hdGlv
bjsKKyAgICBPd25QdHI8Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPiBtX2FjdGl2ZUdlc3R1cmVB
bmltYXRpb247CiAKICAgICBDQ0xheWVyU29ydGVyIG1fbGF5ZXJTb3J0ZXI7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRQcm94eS5jcHAKaW5kZXggNzVlZjEzNjIzZGU4NzZmNDRhMmNhNDdlYWRkODEyMGIx
MTBiMjMyNi4uMzJhMGVmZGY2Y2FlN2I3ODZlYzdiMmEyZGU0YTUyNzhiNzNhZGMyMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAgLTU4Nyw3ICs1ODcsNyBAQCB2b2lkIENDVGhyZWFk
UHJveHk6OmluaXRpYWxpemVJbXBsT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21w
bGV0aW9uKQogICAgIG1fc2NoZWR1bGVyT25JbXBsVGhyZWFkID0gQ0NTY2hlZHVsZXI6OmNyZWF0
ZSh0aGlzLCBmcmFtZVJhdGVDb250cm9sbGVyLnJlbGVhc2UoKSk7CiAgICAgbV9zY2hlZHVsZXJP
bkltcGxUaHJlYWQtPnNldFZpc2libGUobV9sYXllclRyZWVIb3N0SW1wbC0+dmlzaWJsZSgpKTsK
IAotICAgIG1faW5wdXRIYW5kbGVyT25JbXBsVGhyZWFkID0gQ0NJbnB1dEhhbmRsZXI6OmNyZWF0
ZShtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKKyAgICBtX2lucHV0SGFuZGxlck9uSW1wbFRo
cmVhZCA9IENDSW5wdXRIYW5kbGVyOjpjcmVhdGUobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSwg
bV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CiAgICAgbV9jb21wb3NpdG9ySWRlbnRpZmllciA9
IG1faW5wdXRIYW5kbGVyT25JbXBsVGhyZWFkLT5pZGVudGlmaWVyKCk7CiAKICAgICBjb21wbGV0
aW9uLT5zaWduYWwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAzZGEwNDc3YTAx
MTRkZTlmOGI3NjA0ZGZkMWJiNTBjOGM3YzY0ZmEwLi41ODM3ZmVjNThkNzU2NzFiMGYzYzhjMzc0
ZjYwNDkxZjk0ZTQxYWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0zNzYsNiAr
Mzc2LDggQEAKICAgICAgICAgICAgICAgICAnc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmgnLAogICAg
ICAgICAgICAgICAgICdzcmMvQ0NUaHJlYWRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9DQ1RocmVhZEltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9DQ1RvUGxhdGZvcm1HZXN0
dXJlQ3VydmVUYXJnZXRBZGFwdGVyLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9DQ1RvUGxh
dGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyLmgnLAogICAgICAgICAgICAgICAgICdzcmMv
Q2hyb21lQ2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvQ2hyb21lQ2xpZW50
SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL0NvbG9yQ2hvb3NlclByb3h5LmNwcCcsCkBA
IC00NTcsNiArNDU5LDggQEAKICAgICAgICAgICAgICAgICAnc3JjL1BhZ2VPdmVybGF5LmgnLAog
ICAgICAgICAgICAgICAgICdzcmMvUGFnZU92ZXJsYXlMaXN0LmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9QYWdlT3ZlcmxheUxpc3QuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9QbGF0Zm9y
bUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyLmNwcCcsCisgICAgICAgICAgICAg
ICAgJ3NyYy9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyLmgnLAog
ICAgICAgICAgICAgICAgICdzcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgnLAogICAgICAg
ICAgICAgICAgICdzcmMvUGxhdGZvcm1TdXBwb3J0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnB1dEV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJJbnB1dEV2ZW50LmgKaW5kZXggZTQyZTQ1MTM0YWUyODY0ZjhhZWQ3
NTVlNmY1OGUzMjc3ZDMzOWIyZS4uYjYzZDM0NmU4MzM5ZTQ4YTgxNWM0MmI5OGZlYWNmYzczZDU1
NTc2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5wdXRF
dmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklucHV0RXZlbnQu
aApAQCAtMTA0LDggKzEwNCw2IEBAIHB1YmxpYzoKICAgICAgICAgR2VzdHVyZVNjcm9sbEJlZ2lu
LAogICAgICAgICBHZXN0dXJlU2Nyb2xsRW5kLAogICAgICAgICBHZXN0dXJlU2Nyb2xsVXBkYXRl
LAotICAgICAgICBHZXN0dXJlRmxpbmdTdGFydCwKLSAgICAgICAgR2VzdHVyZUZsaW5nQ2FuY2Vs
LAogICAgICAgICBHZXN0dXJlVGFwLAogICAgICAgICBHZXN0dXJlVGFwRG93biwKICAgICAgICAg
R2VzdHVyZURvdWJsZVRhcCwKQEAgLTE5NSw4ICsxOTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiB0eXBlID09IEdlc3R1cmVTY3JvbGxCZWdpbgogICAgICAgICAgICAgfHwgdHlwZSA9PSBH
ZXN0dXJlU2Nyb2xsRW5kCiAgICAgICAgICAgICB8fCB0eXBlID09IEdlc3R1cmVTY3JvbGxVcGRh
dGUKLSAgICAgICAgICAgIHx8IHR5cGUgPT0gR2VzdHVyZUZsaW5nU3RhcnQKLSAgICAgICAgICAg
IHx8IHR5cGUgPT0gR2VzdHVyZUZsaW5nQ2FuY2VsCisgICAgICAgICAgICB8fCB0eXBlID09IEdl
c3R1cmVUYXBEb3duIC8vIEluY2x1ZGUgR2VzdHVyZVRhcERvd24sIGFzIGl0IGlzIHVzZWQgdG8g
Y2FuY2VsIGluLWZsaWdodCBzY3JvbGwgYW5pbWF0aW9ucy4KICAgICAgICAgICAgIHx8IHR5cGUg
PT0gR2VzdHVyZVRhcDsgLy8gRklYTUU6IFdoeSBpcyBHZXN0dXJlVGFwIG9uIHRoaXMgbGlzdD8K
ICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ0NUb1Bs
YXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iODBmMDhkMTM0MGRmMGQxN2ZiMWEwODk2YmUzZTM5ODQ3ZmMyZDlkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ0NUb1BsYXRmb3JtR2VzdHVyZUN1
cnZlVGFyZ2V0QWRhcHRlci5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ0NUb1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFy
Z2V0QWRhcHRlci5oIgorCisjaW5jbHVkZSAiY2MvQ0NHZXN0dXJlQ3VydmUuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitDQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyOjpD
Q1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyKENDR2VzdHVyZUN1cnZlVGFyZ2V0
KiB0YXJnZXQpCisgICAgOiBtX3RhcmdldCh0YXJnZXQpCit7Cit9CisKK3ZvaWQgQ0NUb1BsYXRm
b3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRlcjo6c2V0U2Nyb2xsSW5jcmVtZW50KGNvbnN0IElu
dFBvaW50JiBsb2NhdGlvbikKK3sKKyAgICBBU1NFUlQobV90YXJnZXQpOworICAgIG1fdGFyZ2V0
LT5zZXRTY3JvbGxJbmNyZW1lbnQobG9jYXRpb24pOworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ0NUb1BsYXRmb3JtR2VzdHVyZUN1
cnZlVGFyZ2V0QWRhcHRlci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ0NUb1BsYXRm
b3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwNTM0YTM3ZjM0MzU1
YTM3ZjI2ZTNjMWJmMzAxMzFhYTMzOTJjMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9DQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyLmgK
QEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1RvUGxhdGZvcm1HZXN0
dXJlQ3VydmVUYXJnZXRBZGFwdGVyX2gKKyNkZWZpbmUgQ0NUb1BsYXRmb3JtR2VzdHVyZUN1cnZl
VGFyZ2V0QWRhcHRlcl9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5o
IgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIENDR2VzdHVyZUN1cnZlVGFyZ2V0OworCitjbGFzcyBDQ1RvUGxhdGZvcm1HZXN0dXJl
Q3VydmVUYXJnZXRBZGFwdGVyIDogcHVibGljIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0IHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRB
ZGFwdGVyKTsKK3B1YmxpYzoKKyAgICBDQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFw
dGVyKENDR2VzdHVyZUN1cnZlVGFyZ2V0Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xs
SW5jcmVtZW50KGNvbnN0IEludFBvaW50Jik7CisKK3ByaXZhdGU6CisgICAgQ0NHZXN0dXJlQ3Vy
dmVUYXJnZXQqIG1fdGFyZ2V0OworfTsKKworfTsgLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1HZXN0dXJlQ3VydmVU
b0NDR2VzdHVyZUN1cnZlQWRhcHRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Q
bGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mYmZiZmZlOGRmMjUwNThiZjNhMjQxY2IwMDgzNjMxODE3ZmI5NzBlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0ND
R2VzdHVyZUN1cnZlQWRhcHRlci5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0ND
R2VzdHVyZUN1cnZlQWRhcHRlci5oIgorCisjaW5jbHVkZSAiQ0NUb1BsYXRmb3JtR2VzdHVyZUN1
cnZlVGFyZ2V0QWRhcHRlci5oIgorI2luY2x1ZGUgImNjL0NDR2VzdHVyZUN1cnZlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDQ0dlc3R1cmVDdXJ2ZT4gUGxhdGZvcm1H
ZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRlcjo6Y3JlYXRlKFBhc3NPd25QdHI8UGxh
dGZvcm1HZXN0dXJlQ3VydmU+IHBsYXRmb3JtQ3VydmUpCit7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyKHBsYXRmb3Jt
Q3VydmUpKTsKK30KKworUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRl
cjo6UGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRlcihQYXNzT3duUHRy
PFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBjdXJ2ZSkKKyAgICA6IG1fY3VydmUoY3VydmUpCit7Cit9
CisKK2Jvb2wgUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRlcjo6YXBw
bHkoZG91YmxlIHRzLCBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0KQoreworICAgIENDVG9Q
bGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXIgYWRhcHRlcih0YXJnZXQpOworICAgIHJl
dHVybiBtX2N1cnZlLT5hcHBseSh0cywgJmFkYXB0ZXIpOworfQorCit9OyAvLyBuYW1lc3BhY2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtR2VzdHVyZUN1
cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1BsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44ZmJlMjExYTAwZjg1NmQ3YjA1ZDFlNWM4YjA1YjZmYzU4NTZlN2FlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0ND
R2VzdHVyZUN1cnZlQWRhcHRlci5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRlcl9oCisjZGVm
aW5lIFBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXJfaAorCisjaW5j
bHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlICJjYy9DQ0dlc3R1cmVDdXJ2
ZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitj
bGFzcyBDQ0dlc3R1cmVDdXJ2ZVRhcmdldDsKKworY2xhc3MgUGxhdGZvcm1HZXN0dXJlQ3VydmVU
b0NDR2VzdHVyZUN1cnZlQWRhcHRlciA6IHB1YmxpYyBDQ0dlc3R1cmVDdXJ2ZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NHZXN0dXJlQ3VydmU+IGNyZWF0ZShQYXNzT3duUHRy
PFBsYXRmb3JtR2VzdHVyZUN1cnZlPik7CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoZG91Ymxl
IHRzLCBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCopOworCitwcml2YXRlOgorICAgIFBsYXRmb3JtR2Vz
dHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIoUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZT4pOworICAgIE93blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gbV9jdXJ2ZTsKK307
CisKK307IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcAppbmRl
eCAzOTczMDhiNTI5Y2M0MTc0NzE4N2M3Zjg2N2QxMjFiOWIyM2ZjYWVlLi43MTlmMzQ3YTlkYTdi
NWE5NzFjMWMzM2JhMzk3NDI2MGJlNjZhZTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3BwCkBA
IC0yNywyMSArMjcsMjcgQEAKIAogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJ
bXBsLmgiCiAKKyNpbmNsdWRlICJGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvckltcGwu
aCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiV2ViSW5wdXRFdmVudC5oIgogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgInBsYXRm
b3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgorI2luY2x1ZGUgImNjL0NDQWN0aXZlR2VzdHVy
ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDR2VzdHVyZUN1cnZlLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NQcm94eS5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5o
IgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQ
cmltaXRpdmVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NPd25QdHI8Q0NJbnB1dEhhbmRsZXI+IENDSW5wdXRIYW5kbGVyOjpjcmVh
dGUoQ0NJbnB1dEhhbmRsZXJDbGllbnQqIGlucHV0SGFuZGxlckNsaWVudCkKK1Bhc3NPd25QdHI8
Q0NJbnB1dEhhbmRsZXI+IENDSW5wdXRIYW5kbGVyOjpjcmVhdGUoQ0NJbnB1dEhhbmRsZXJDbGll
bnQqIGlucHV0SGFuZGxlckNsaWVudCwgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqIGdlc3R1cmVDdXJ2
ZVRhcmdldCkKIHsKLSAgICByZXR1cm4gV2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbDo6Y3JlYXRlKGlucHV0SGFuZGxlckNsaWVudCk7CisgICAgcmV0dXJuIFdlYktpdDo6V2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0ZShpbnB1dEhhbmRsZXJDbGllbnQsIGdl
c3R1cmVDdXJ2ZVRhcmdldCk7CiB9CiAKIH0KQEAgLTU3LDkgKzYzLDkgQEAgV2ViQ29tcG9zaXRv
ciogV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcjo6ZnJvbUlkZW50aWZpZXIoaW50IGlkZW50aWZp
ZXIpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvbXBvc2l0b3IqPihXZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVySW1wbDo6ZnJvbUlkZW50aWZpZXIoaWRlbnRpZmllcikpOwogfQogCi1QYXNz
T3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsPiBXZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbDo6Y3JlYXRlKFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50KiBpbnB1dEhh
bmRsZXJDbGllbnQpCitQYXNzT3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsPiBX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6Y3JlYXRlKFdlYkNvcmU6OkNDSW5wdXRIYW5k
bGVyQ2xpZW50KiBpbnB1dEhhbmRsZXJDbGllbnQsIFdlYkNvcmU6OkNDR2VzdHVyZUN1cnZlVGFy
Z2V0KiB0YXJnZXQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJDb21wb3NpdG9ySW5w
dXRIYW5kbGVySW1wbChpbnB1dEhhbmRsZXJDbGllbnQpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKGlucHV0SGFuZGxlckNsaWVudCwgdGFy
Z2V0KSk7CiB9CiAKIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXIqIFdlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsOjpmcm9tSWRlbnRpZmllcihpbnQgaWRlbnRpZmllcikKQEAgLTc3LDEwICs4
MywxMSBAQCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyKiBXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbDo6ZnJvbUlkZW50aWZpZXIoaW50IGlkZQogICAgIHJldHVybiAwOwogfQogCi1XZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwo
Q0NJbnB1dEhhbmRsZXJDbGllbnQqIGlucHV0SGFuZGxlckNsaWVudCkKK1dlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXJJbXBsOjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbChDQ0lucHV0SGFu
ZGxlckNsaWVudCogaW5wdXRIYW5kbGVyQ2xpZW50LCBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCogdGFy
Z2V0KQogICAgIDogbV9jbGllbnQoMCkKICAgICAsIG1faWRlbnRpZmllcihzX25leHRBdmFpbGFi
bGVJZGVudGlmaWVyKyspCiAgICAgLCBtX2lucHV0SGFuZGxlckNsaWVudChpbnB1dEhhbmRsZXJD
bGllbnQpCisgICAgLCBtX2dlc3R1cmVDdXJ2ZVRhcmdldCh0YXJnZXQpCiAjaWZuZGVmIE5ERUJV
RwogICAgICwgbV9leHBlY3RTY3JvbGxVcGRhdGVFbmQoZmFsc2UpCiAgICAgLCBtX2V4cGVjdFBp
bmNoVXBkYXRlRW5kKGZhbHNlKQpAQCAtMTY0LDE0ICsxNzEsMjcgQEAgdm9pZCBXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50
JiBldmVudCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAo
ZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kKSB7Ci0gICAgICAg
IEFTU0VSVChtX2V4cGVjdFNjcm9sbFVwZGF0ZUVuZCk7CisvLyAgICAgICAgQVNTRVJUKG1fZXhw
ZWN0U2Nyb2xsVXBkYXRlRW5kKTsgLy8gRklYTUU6IGRldmVsb3BtZW50IG9ubHksIGRvIG5vdCBj
b21taXQgd2l0aCB0aGlzIGxpbmUgaW50YWN0IQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgbV9l
eHBlY3RTY3JvbGxVcGRhdGVFbmQgPSBmYWxzZTsKICNlbmRpZgorICAgICAgICBtX3Njcm9sbFN0
YXJ0ZWQgPSB0cnVlOyAvLyBGSVhNRTogZGV2ZWxvcG1lbnQgb25seSwgZG8gbm90IGNvbW1pdCB3
aXRoIHRoaXMgbGluZSBpbnRhY3QhCiAgICAgICAgIGlmIChtX3Njcm9sbFN0YXJ0ZWQpIHsKICAg
ICAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxFbmQoKTsKLSAgICAgICAgICAg
IG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7CiAgICAgICAgICAgICBtX3Njcm9sbFN0
YXJ0ZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gR2VzdHVyZVNjcm9sbEVuZCB3aXRoIG5v
bi16ZXJvIHZlbG9jaXR5IChkZWx0YVgvWSkgc2lnbmFscyBzdGFydCBvZiBGbGluZy4KKyAgICAg
ICAgICAgIGNvbnN0IFdlYkdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50ID0gKnN0YXRpY19jYXN0
PGNvbnN0IFdlYkdlc3R1cmVFdmVudCo+KCZldmVudCk7CisgICAgICAgICAgICBpZiAoZ2VzdHVy
ZUV2ZW50LmRlbHRhWCB8fCBnZXN0dXJlRXZlbnQuZGVsdGFZKSB7CisgICAgICAgICAgICAgICAg
Y29uc3QgV2ViR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQgPSAqc3RhdGljX2Nhc3Q8Y29uc3Qg
V2ViR2VzdHVyZUV2ZW50Kj4oJmV2ZW50KTsKKyAgICAgICAgICAgICAgICBpZiAobV9pbnB1dEhh
bmRsZXJDbGllbnQtPmFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPmNsZWFyQWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpOwor
ICAgICAgICAgICAgICAgICAgICBPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGZsaW5nQ3Vy
dmUgPSBGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2ludChnZXN0dXJl
RXZlbnQuZGVsdGFYLCBnZXN0dXJlRXZlbnQuZGVsdGFZKSk7CisgICAgICAgICAgICAgICAgICAg
IG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKENDQWN0aXZl
R2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyOjpj
cmVhdGUoZmxpbmdDdXJ2ZS5yZWxlYXNlKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dlc3R1cmVDdXJ2ZVRh
cmdldCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlu
cHV0RXZlbnQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZSBp
ZiAoZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGluY2hCZWdpbikgewpAQCAt
MTk2LDcgKzIxNiwxMyBAQCB2b2lkIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5k
bGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQogICAgICAgICBtX2lucHV0
SGFuZGxlckNsaWVudC0+cGluY2hHZXN0dXJlVXBkYXRlKGdlc3R1cmVFdmVudC5kZWx0YVgsIElu
dFBvaW50KGdlc3R1cmVFdmVudC54LCBnZXN0dXJlRXZlbnQueSkpOwogICAgICAgICBtX2NsaWVu
dC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOwogICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlm
IChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVUYXBEb3duKSB7CisgICAgICAg
IGlmIChtX2lucHV0SGFuZGxlckNsaWVudC0+YWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpKQorICAg
ICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24o
YWRvcHRQdHIoc3RhdGljX2Nhc3Q8Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKj4oMCkpKTsKKyAg
ICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KKwogICAgIG1fY2xpZW50LT5kaWROb3RIYW5kbGVJbnB1dEV2ZW50KHRydWUgLyogc2Vu
ZFRvV2lkZ2V0ICovKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmgKaW5kZXggYTJmMTMwMjVkOWYx
N2JmZDE4YzE0NGY5MzE3ZDgyYTZlYTEwOWVjNS4uMjM2OGVkMzZkMmVkZDkxOGIwNmMxNjJmNmY5
NTQ4ZmQ5Y2ZjOTJlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oCkBAIC0zOCw2ICszOCw3IEBAIGNs
YXNzIE11dGV4OwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDQ0dlc3R1cmVDdXJ2
ZVRhcmdldDsKIGNsYXNzIENDSW5wdXRIYW5kbGVyQ2xpZW50OwogY2xhc3MgQ0NUaHJlYWQ7CiB9
CkBAIC01MCw3ICs1MSw3IEBAIGNsYXNzIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQ7
CiBjbGFzcyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCA6IHB1YmxpYyBXZWJDb21wb3Np
dG9yLCBwdWJsaWMgV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbD4gY3JlYXRlKFdlYkNv
cmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8V2ViQ29t
cG9zaXRvcklucHV0SGFuZGxlckltcGw+IGNyZWF0ZShXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNs
aWVudCosIFdlYkNvcmU6OkNDR2VzdHVyZUN1cnZlVGFyZ2V0Kik7CiAgICAgc3RhdGljIFdlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXIqIGZyb21JZGVudGlmaWVyKGludCBpZGVudGlmaWVyKTsKIAog
ICAgIHZpcnR1YWwgfldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKCk7CkBAIC02NCwxMSAr
NjUsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsRHJhdyhkb3VibGUgZnJhbWVC
ZWdpblRpbWVNcyk7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgV2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGwoV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQqKTsKKyAgICBleHBsaWNp
dCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbChXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNs
aWVudCosIFdlYkNvcmU6OkNDR2VzdHVyZUN1cnZlVGFyZ2V0Kik7CiAKICAgICBXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICBpbnQgbV9pZGVudGlmaWVyOwog
ICAgIFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50KiBtX2lucHV0SGFuZGxlckNsaWVudDsK
KyAgICBXZWJDb3JlOjpDQ0dlc3R1cmVDdXJ2ZVRhcmdldCogbV9nZXN0dXJlQ3VydmVUYXJnZXQ7
CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgYm9vbCBtX2V4cGVjdFNjcm9sbFVwZGF0ZUVuZDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKaW5kZXgg
M2YzMjhmNTViZmNmZGU1MDlmYjlkMGQxOTAxNGNlYjJkMWNmMGMyYi4uMDFjNjZlZjEzOWVkYmI3
NTJkNWVlYTBjNjQ5MDRjYjNmZTNjZmUxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKQEAgLTI2NCw4ICsyNjQsNiBAQCBib29sIFdlYlBv
cHVwTWVudUltcGw6OmhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYgaW5wdXRF
dmVudCkKICAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbjoKICAgICBj
YXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQ6CiAgICAgY2FzZSBXZWJJbnB1dEV2
ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlOgotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVy
ZUZsaW5nU3RhcnQ6Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlRmxpbmdDYW5jZWw6
CiAgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwOgogICAgIGNhc2UgV2ViSW5wdXRF
dmVudDo6R2VzdHVyZVRhcERvd246CiAgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlRG91
YmxlVGFwOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4
IGYxNTMwMjI5ZTQ4YjQwMWYzMWEyYzVmNjE0NzVhYWMyNTgxOGEyNWIuLjhlMjI3MTU5NjM1MDJm
ZjljYjM5NWNmZDIxMGJhNGFkNGUwODgxYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKQEAgLTE1MzQsOSArMTUzNCwyNiBAQCBib29sIFdlYlZpZXdJbXBs
OjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGlucHV0RXZlbnQpCiAgICAg
ICAgIG1vdXNlTGVhdmUoKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQqPigmaW5wdXRF
dmVudCkpOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VX
aGVlbDoKLSAgICAgICAgaGFuZGxlZCA9IG1vdXNlV2hlZWwoKnN0YXRpY19jYXN0PGNvbnN0IFdl
Yk1vdXNlV2hlZWxFdmVudCo+KCZpbnB1dEV2ZW50KSk7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50
OjpNb3VzZVdoZWVsOiB7CisvLyAgICAgICAgaGFuZGxlZCA9IG1vdXNlV2hlZWwoKnN0YXRpY19j
YXN0PGNvbnN0IFdlYk1vdXNlV2hlZWxFdmVudCo+KCZpbnB1dEV2ZW50KSk7CisKKy8vIEZJWE1F
OiB1Z2x5IGRldmVsb3BtZW50IGhhY2sgdG8gc2ltdWxhdGUgR2VzdHVyZVNjcm9sbEVuZCBldmVu
dHMgYnkgaGlqYWNraW5nIG1vdXNlV2hlZWwgZXZlbnRzLgorLy8KKy8vICAgICAgICBEbyBub3Qg
Y29tbWl0IHdpdGggdGhpcyBpbnRhY3QhCisvLworICAgICAgICBjb25zdCBXZWJNb3VzZVdoZWVs
RXZlbnQqIG13ZSA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlV2hlZWxFdmVudCo+KCZpbnB1
dEV2ZW50KTsKKyAgICAgICAgV2ViR2VzdHVyZUV2ZW50IGdlc3R1cmVFdnQ7CisgICAgICAgIGdl
c3R1cmVFdnQudHlwZSA9IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQ7CisgICAgICAg
IGdlc3R1cmVFdnQueCA9IG13ZS0+eDsKKyAgICAgICAgZ2VzdHVyZUV2dC55ID0gbXdlLT55Owor
ICAgICAgICBnZXN0dXJlRXZ0LmRlbHRhWCA9IC0yICogbXdlLT5kZWx0YVg7CisgICAgICAgIGdl
c3R1cmVFdnQuZGVsdGFZID0gLTIgKiBtd2UtPmRlbHRhWTsKKyAgICAgICAgZ2VzdHVyZUV2dC5n
bG9iYWxYID0gbXdlLT5nbG9iYWxYOworICAgICAgICBnZXN0dXJlRXZ0Lmdsb2JhbFkgPSBtd2Ut
Pmdsb2JhbFk7CisgICAgICAgIGdlc3R1cmVFdnQudGltZVN0YW1wU2Vjb25kcyA9IG13ZS0+dGlt
ZVN0YW1wU2Vjb25kczsKKyAgICAgICAgaGFuZGxlZCA9IGdlc3R1cmVFdmVudChnZXN0dXJlRXZ0
KTsKICAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3Vz
ZURvd246CiAgICAgICAgIG1vdXNlRG93bigqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVu
dCo+KCZpbnB1dEV2ZW50KSk7CkBAIC0xNTYwLDggKzE1NzcsNiBAQCBib29sIFdlYlZpZXdJbXBs
OjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGlucHV0RXZlbnQpCiAgICAg
Y2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW46CiAgICAgY2FzZSBXZWJJbnB1
dEV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kOgogICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVy
ZVNjcm9sbFVwZGF0ZToKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ1N0YXJ0
OgotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZUZsaW5nQ2FuY2VsOgogICAgIGNhc2Ug
V2ViSW5wdXRFdmVudDo6R2VzdHVyZVRhcDoKICAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1
cmVUYXBEb3duOgogICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZURvdWJsZVRhcDoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29t
cG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcAppbmRleCA0NTkyNTVlMDJhMjgzMzE5ZGZi
NWU5MjlhOGQ4ZjVkOTkzNWE0NDRkLi4yMzk4YTUwNzMwMTg1MjE0NTViMzBjM2FmZDhkYTViZTg2
MjA0YWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIldlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJJbnB1dEV2ZW50LmgiCisjaW5j
bHVkZSAiY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NJbnB1
dEhhbmRsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCiAKQEAgLTY1
LDYgKzY2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9waW5jaE1hZ25pZmljYXRpb24gPSAwOwog
ICAgIH0KIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKiBh
Y3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVHZXN0
dXJlQW5pbWF0aW9uPikgeyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWN0aXZlR2VzdHVyZUFu
aW1hdGlvbigpIHsgfQorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJh
dygpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgU2Nyb2xsU3RhdHVzIHNjcm9sbEJlZ2luKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbElucHV0VHlwZSkgT1ZFUlJJREUKQEAgLTE0Nyw3ICsxNTIsNyBAQCBURVNUKFdlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsLCBmcm9tSWRlbnRpZmllcikKIAogICAgIGludCBjb21wb3Np
dG9ySWRlbnRpZmllciA9IC0xOwogICAgIHsKLSAgICAgICAgT3duUHRyPFdlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXJJbXBsPiBpbnB1dEhhbmRsZXIgPSBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbDo6Y3JlYXRlKDApOworICAgICAgICBPd25QdHI8V2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGw+IGlucHV0SGFuZGxlciA9IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVh
dGUoMCwgMCk7CiAgICAgICAgIGNvbXBvc2l0b3JJZGVudGlmaWVyID0gaW5wdXRIYW5kbGVyLT5p
ZGVudGlmaWVyKCk7CiAgICAgICAgIC8vIFRoZSBjb21wb3NpdG9yIHdlIGp1c3QgY3JlYXRlZCBz
aG91bGQgYmUgbG9jYXRhYmxlLgogICAgICAgICBFWFBFQ1RfRVEoaW5wdXRIYW5kbGVyLmdldCgp
LCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyOjpmcm9tSWRlbnRpZmllcihjb21wb3NpdG9ySWRl
bnRpZmllcikpOwpAQCAtMTcxLDcgKzE3Niw3IEBAIFRFU1QoV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGwsIGdlc3R1cmVTY3JvbGwpCiAjZW5kaWYKIAogICAgIE1vY2tJbnB1dEhhbmRsZXJD
bGllbnQgbW9ja0lucHV0SGFuZGxlcjsKLSAgICBPd25QdHI8V2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGw+IGlucHV0SGFuZGxlciA9IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpj
cmVhdGUoJm1vY2tJbnB1dEhhbmRsZXIpOworICAgIE93blB0cjxXZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbD4gaW5wdXRIYW5kbGVyID0gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6
OmNyZWF0ZSgmbW9ja0lucHV0SGFuZGxlciwgMCk7CiAgICAgTW9ja1dlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJDbGllbnQgbW9ja0NsaWVudDsKICAgICBpbnB1dEhhbmRsZXItPnNldENsaWVudCgm
bW9ja0NsaWVudCk7CiAKQEAgLTIzMyw3ICsyMzgsNyBAQCBURVNUKFdlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsLCBnZXN0dXJlUGluY2gpCiAjZW5kaWYKIAogICAgIE1vY2tJbnB1dEhhbmRs
ZXJDbGllbnQgbW9ja0lucHV0SGFuZGxlcjsKLSAgICBPd25QdHI8V2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGw+IGlucHV0SGFuZGxlciA9IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBs
OjpjcmVhdGUoJm1vY2tJbnB1dEhhbmRsZXIpOworICAgIE93blB0cjxXZWJDb21wb3NpdG9ySW5w
dXRIYW5kbGVySW1wbD4gaW5wdXRIYW5kbGVyID0gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGw6OmNyZWF0ZSgmbW9ja0lucHV0SGFuZGxlciwgMCk7CiAgICAgTW9ja1dlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXJDbGllbnQgbW9ja0NsaWVudDsKICAgICBpbnB1dEhhbmRsZXItPnNldENsaWVu
dCgmbW9ja0NsaWVudCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130692</attachid>
            <date>2012-03-07 14:16:16 -0800</date>
            <delta_ts>2012-03-08 10:07:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79827-20120307171614.patch</filename>
            <type>text/plain</type>
            <size>81620</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMDY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTdlN2ZiMjZjODk4M2Nk
NGQzYzU0YTY0YmYxODhkNDkzNzMwZGJhOC4uNTVhMzNkODg5NmJjZGVlYzhkMzMyYWJhN2Y4ZTlm
ZmZkOWRiNjk2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDEyLTAzLTA3ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEltcGxlbWVudCBzY3JvbGwgcGh5c2ljcyBhcmNoaXRlY3R1cmUgZm9yIGltcGwvbWFpbiB0
aHJlYWQgW25vdCBmb3IgcmV2aWV3IHlldF0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc5ODI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVW5pdHRlc3RzIGFkZGVkLCBwbHVzIGZvbGxvdy1vbiBwYXRjaCBm
cm9tIHJqa3JvZWdlIHdpbGwgYWRkIGxheW91dCB0ZXN0cy4KKworICAgICAgICBUaGlzIHBhdGNo
IGFkZHMgUGxhdGZvcm1HZXN0dXJlQ3VydmUgYXMgYSB3YXkgb2YgdXNpbmcgZGlmZmVyZW50IHNj
cm9sbCBwaHlzaWNzIGluIGEKKyAgICAgICAgc2luZ2xlIGZyYW1ld29yayB0aGF0IHdpbGwgd29y
ayBvbiBib3RoIG1haW4gdGhyZWFkIGFuZCBpbXBsIHRocmVhZHMuCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0
aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
dGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlv
bjo6YW5pbWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5p
bWF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChBY3RpdmVQbGF0
Zm9ybUdlc3R1cmVBbmltYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtR2VzdHVy
ZUN1cnZlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZSk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJn
ZXQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFBsYXRmb3JtR2VzdHVy
ZUN1cnZlVGFyZ2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JOb25lOjpjYW5jZWxBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JO
b25lOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yTm9uZTo6c2V0U2Nyb2xsSW5jcmVtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxB
bmltYXRvck5vbmUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU2Nyb2xsQW5pbWF0
b3JOb25lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3Vy
dmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VG91
Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
VG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJl
Q3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZl
OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1
cnZlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChUb3VjaEZsaW5nUGxh
dGZvcm1HZXN0dXJlQ3VydmUpOgorICAgICAgICAqIHBsYXRmb3JtL1doZWVsRmxpbmdQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OldoZWVsRmxpbmdQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEZsaW5nUGxhdGZvcm1H
ZXN0dXJlQ3VydmU6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9XaGVlbEZsaW5nUGxhdGZv
cm1HZXN0dXJlQ3VydmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdo
ZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlv
bjo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZl
R2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbjo6YW5pbWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDR2VzdHVyZUN1cnZlLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0dlc3R1cmVDdXJ2ZVRhcmdldCk6CisgICAgICAg
IChDQ0dlc3R1cmVDdXJ2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NJbnB1dEhhbmRsZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NJbnB1
dEhhbmRsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRB
Y3RpdmVHZXN0dXJlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2xlYXJBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFNjcm9sbEluY3JlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlR2VzdHVy
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6YWN0aXZlR2VzdHVyZUFuaW1hdGlvbik6CisgICAgICAgIChDQ0xheWVy
VHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmluaXRp
YWxpemVJbXBsT25JbXBsVGhyZWFkKToKKwogMjAxMi0wMy0wNSAgQWxleGV5IFByb3NrdXJ5YWtv
diAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBNZXJnZSBBc3luY0ZpbGVTdHJlYW0gd2l0aCBG
aWxlU3RyZWFtUHJveHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNDUyNDUxYjU3YmFm
NzAxYTQwMTU4NTQzNWI0ZTQxM2ZjYWY4MjkxNC4uYWIyMWMzOGQzMmIwMGE2NDY2NmY4YzIxYzgx
ZGRjOTUyZTZmZTIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBA
QAorMjAxMi0wMy0wNyAgVy4gSmFtZXMgTWFjTGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgc2Nyb2xsIHBoeXNpY3MgYXJjaGl0ZWN0
dXJlIGZvciBpbXBsL21haW4gdGhyZWFkIFtub3QgZm9yIHJldmlldyB5ZXRdCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTgyNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZSBhcyBhIHdheSBvZiB1c2luZyBkaWZmZXJlbnQgc2Nyb2xsIHBoeXNp
Y3MgaW4gYQorICAgICAgICBzaW5nbGUgZnJhbWV3b3JrIHRoYXQgd2lsbCB3b3JrIG9uIGJvdGgg
bWFpbiB0aHJlYWQgYW5kIGltcGwgdGhyZWFkcy4KKworICAgICAgICAqIFdlYktpdC5neXA6Cisg
ICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogcHVibGljL1dlYklucHV0RXZlbnQuaDoK
KyAgICAgICAgKFdlYktpdDo6V2ViSW5wdXRFdmVudDo6aXNTY3JvbGxHZXN0dXJlRXZlbnRUeXBl
KToKKyAgICAgICAgKiBzcmMvQ0NUb1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRlci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RvUGxh
dGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyOjpDQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVU
YXJnZXRBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2
ZVRhcmdldEFkYXB0ZXI6OnNldFNjcm9sbEluY3JlbWVudCk6CisgICAgICAgICogc3JjL0NDVG9Q
bGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKENDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXIpOgor
ICAgICAgICAqIHNyYy9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyOjpQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXI6OmFwcGx5
KToKKyAgICAgICAgKiBzcmMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRh
cHRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUGxhdGZvcm1HZXN0
dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRlcik6CisgICAgICAgICogc3JjL1dlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSW5wdXRIYW5k
bGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGw6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0RXZlbnQpOgorICAgICAg
ICAqIHNyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCk6CisgICAgICAgICog
dGVzdHMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUZXN0LmNwcDogQWRkZWQuCisgICAgICAgICogdGVz
dHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcDoKKwogMjAxMi0wMy0wNyAg
RWxsaW90IFBvZ2VyICA8ZXBvZ2VyQGdvb2dsZS5jb20+CiAKICAgICAgICAgW0Nocm9taXVtXSBS
ZW1vdmUgdXNlX3NraWEgb3B0aW9uIGZyb20gR1lQCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggY2YyZDZm
YWY1MWZlYTNkNDE2Y2YxY2UzY2I2ZjhkYjM4MmMzMzU1YS4uOWY4OWM2MzBiNTVjYzQzNjBlMWJk
ZTRmYzkyYTNlZDBhMGJhZTVlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjg5Nyw2ICsyODk3LDgg
QEAKICAgICAgICAgICAgICdwYWdlL3dpbmNlL0ZyYW1lV2luQ0UuY3BwJywKICAgICAgICAgICAg
ICdwYWdlL3d4L0RyYWdDb250cm9sbGVyV3guY3BwJywKICAgICAgICAgICAgICdwYWdlL3d4L0V2
ZW50SGFuZGxlcld4LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1H
ZXN0dXJlQW5pbWF0aW9uLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vQWN0aXZlUGxhdGZv
cm1HZXN0dXJlQW5pbWF0aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0FyZW5hLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vQXJlbmEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
QXN5bmNGaWxlU3lzdGVtLmNwcCcsCkBAIC0yOTQyLDYgKzI5NDQsNyBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QYXN0ZWJv
YXJkLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL1BsYXRmb3JtVG91Y2hFdmVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9QbGF0Zm9ybVRvdWNoUG9pbnQuaCcsCkBAIC0yOTczLDggKzI5NzYsMTIgQEAKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9UaHJlYWRUaW1lcnMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9U
aHJlYWRUaW1lcnMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vVGltZXIuY3BwJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vVVVJRC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1VV
SUQuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1
cnZlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVy
ZUN1cnZlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1dpZGdldC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb24uY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlzdC5jcHAnLApAQCAtMzQwNSw2ICszNDEyLDggQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3Rp
dmVBbmltYXRpb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRp
b25DdXJ2ZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQW5pbWF0aW9uQ3VydmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NBbmltYXRpb25FdmVudHMuY3BwJywKQEAgLTM0MjMsNiArMzQzMiw4IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNv
bnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJlQ3VydmUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJlQ3VydmVUYXJnZXQuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3Bs
YXkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1
dEhhbmRsZXIuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9BY3RpdmVQ
bGF0Zm9ybUdlc3R1cmVBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQWN0
aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZjFjYWQwNjI1ZDhl
ZGY0N2Q4Y2IwZWQyNTgzNzBjZTMyOTYzNjRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmNwcApAQCAtMCww
ICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQWN0aXZl
UGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVD
dXJ2ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRp
b24+IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKGRvdWJsZSBzdGFydFRp
bWUsIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGN1cnZlLCBQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZVRhcmdldCogdGFyZ2V0KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQWN0aXZl
UGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKHN0YXJ0VGltZSwgY3VydmUsIHRhcmdldCkpOworfQor
CitBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OkFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFu
aW1hdGlvbihkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZl
PiBjdXJ2ZSwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKKyAgICA6IG1fc3Rh
cnRUaW1lKHN0YXJ0VGltZSkKKyAgICAsIG1fY3VydmUoY3VydmUpCisgICAgLCBtX3RhcmdldCh0
YXJnZXQpCit7Cit9CisKK2Jvb2wgQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjphbmlt
YXRlKGRvdWJsZSB0cykKK3sKKyAgICByZXR1cm4gbV9jdXJ2ZS0+YXBwbHkodHMgLSBtX3N0YXJ0
VGltZSwgbV90YXJnZXQpOworfQorCit9OyAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTg0ZDRiNDdmZDAyOThjMTBkYTk4MjU0Nzk4NzEwODg5NWZkNWIwNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVy
ZUFuaW1hdGlvbi5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFjdGl2ZVBsYXRm
b3JtR2VzdHVyZUFuaW1hdGlvbl9oCisjZGVmaW5lIEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1h
dGlvbl9oCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZTsKK2NsYXNzIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0OworCitjbGFzcyBBY3RpdmVQbGF0
Zm9ybUdlc3R1cmVBbmltYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEFj
dGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbj4gY3JlYXRlKGRvdWJsZSBzdGFydFRpbWUsIFBh
c3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+LCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdl
dCopOworCisgICAgdmlydHVhbCBib29sIGFuaW1hdGUoZG91YmxlIHRzKTsKKworcHJpdmF0ZToK
KyAgICBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24oZG91YmxlIHN0YXJ0VGltZSwgUGFz
c093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4sIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0
Kik7CisKKyAgICBkb3VibGUgbV9zdGFydFRpbWU7CisgICAgT3duUHRyPFBsYXRmb3JtR2VzdHVy
ZUN1cnZlPiBtX2N1cnZlOworICAgIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0KiBtX3Rhcmdl
dDsKK307CisKK307IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1cnZlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxNmQ0MDZlODdhZWUx
NzNmNjU5NzM3MTNjYmU4NTk1MjI5YTYwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZvcm1HZXN0dXJlQ3VydmVfaAorI2RlZmluZSBQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxhdGZv
cm1HZXN0dXJlQ3VydmVUYXJnZXQ7CisKK2NsYXNzIFBsYXRmb3JtR2VzdHVyZUN1cnZlIHsKK3B1
YmxpYzoKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGN1cnZlIGhhcyBmaW5pc2hlZCBhbmQgY2Fu
IG5vIGxvbmdlciBiZSBhcHBsaWVkLgorICAgIHZpcnR1YWwgYm9vbCBhcHBseShkb3VibGUgdHMs
IFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0KikgPSAwOworfTsKKworfTsgLy8gbmFtZXNwYWNl
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1H
ZXN0dXJlQ3VydmVUYXJnZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2Vz
dHVyZUN1cnZlVGFyZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWNkNzg2ZjNkYzhmNWFlOWMwZDcyZjVmOWUy
MjE5MjhjMmRkZjNiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldF9oCisjZGVmaW5lIFBsYXRm
b3JtR2VzdHVyZUN1cnZlVGFyZ2V0X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bnRQb2ludDsKKworY2xhc3MgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgeworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmKSA9IDA7
CisgICAgLy8gRklYTUU6IGFkZCBpbnRlcmZhY2VzIGZvciBzZXRTY3JvbGwoKSwgc2V0UGFnZVNj
YWxlQW5kU2Nyb2xsKCksIGV0Yy4KK307CisKK307IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCmluZGV4IDA4
M2ExOGE3MDFhZmYxNTZhMmE2YmE3OWU4NDA4NzYyMTg2OThkNzIuLjRhYzdmOTcyNTcxZWU3MDIy
NmU5YjA5YzY4NjQwY2JiZTQ0YTMwNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3JOb25lLmNwcApAQCAtMzQsMTIgKzM0LDE0IEBACiAKICNpbmNsdWRlICJT
Y3JvbGxBbmltYXRvck5vbmUuaCIKIAorI2luY2x1ZGUgIkFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFu
aW1hdGlvbi5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgogI2luY2x1ZGUgIk93bkFycmF5UHRyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1HZXN0
dXJlRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlNjcm9s
bGJhclRoZW1lLmgiCisjaW5jbHVkZSAiVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgi
CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC00NDQsNiArNDQ2LDEyIEBAIHZvaWQgU2Nyb2xs
QW5pbWF0b3JOb25lOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQ
b2ludCYgb2Zmc2V0CiAgICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKCk7CiB9CiAKK3ZvaWQgU2Ny
b2xsQW5pbWF0b3JOb25lOjpjYW5jZWxBbmltYXRpb25zKCkKK3sKKyAgICBpZiAoISFtX2dlc3R1
cmVBbmltYXRpb24pCisgICAgICAgIG1fZ2VzdHVyZUFuaW1hdGlvbi5jbGVhcigpOworfQorCiB2
b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6d2lsbEVuZExpdmVSZXNpemUoKQogewogICAgIHVwZGF0
ZVZpc2libGVMZW5ndGhzKCk7CkBAIC00ODAsNiArNDg4LDEzIEBAIHZvaWQgU2Nyb2xsQW5pbWF0
b3JOb25lOjphbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yTm9uZT4qIHRp
bWVyKQogICAgIGlmIChtX3ZlcnRpY2FsRGF0YS5tX3N0YXJ0VGltZSAmJiBtX3ZlcnRpY2FsRGF0
YS5hbmltYXRlU2Nyb2xsKGN1cnJlbnRUaW1lICsgZGVsdGFUb05leHRGcmFtZSkpCiAgICAgICAg
IGNvbnRpbnVlQW5pbWF0aW9uID0gdHJ1ZTsKIAorICAgIGlmICghIW1fZ2VzdHVyZUFuaW1hdGlv
bikgeworICAgICAgICBpZiAobV9nZXN0dXJlQW5pbWF0aW9uLT5hbmltYXRlKGN1cnJlbnRUaW1l
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlQW5pbWF0aW9uID0gdHJ1ZTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9nZXN0dXJlQW5pbWF0aW9uLmNsZWFyKCk7CisgICAgfQorCiAgICAgaWYg
KGNvbnRpbnVlQW5pbWF0aW9uKSB7CiAgICAgICAgIGRvdWJsZSBuZXh0VGltZXJJbnRlcnZhbCA9
IG1heChrTWluaW11bVRpbWVySW50ZXJ2YWwsIGRlbHRhVG9OZXh0RnJhbWUpOwogICAgICAgICB0
aW1lci0+c3RhcnRPbmVTaG90KG5leHRUaW1lckludGVydmFsKTsKQEAgLTQ5Nyw2ICs1MTIsMTMg
QEAgdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OnN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCkK
ICAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7CiB9CiAKKy8vIFBsYXRmb3JtR2VzdHVy
ZUN1cnZlVGFyZ2V0IGltcGxlbWVudGF0aW9uCit2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6c2V0
U2Nyb2xsSW5jcmVtZW50KGNvbnN0IEludFBvaW50JiBsb2NhdGlvbikKK3sKKyAgICBtX2N1cnJl
bnRQb3NYICs9IGxvY2F0aW9uLngoKTsKKyAgICBtX2N1cnJlbnRQb3NZICs9IGxvY2F0aW9uLnko
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNNT09U
SF9TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvck5vbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9u
ZS5oCmluZGV4IDRkNjlhN2M0YTY0NjM3MjViZTEwYTZhNjY1Y2ViNzlkYTMyMTViOGIuLjRjOGNj
Mzg4YzFjMTg0NDFkYjllOTlhZDE2Y2Q5YzYyNjgxZDVhNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCkBAIC0zMywxNiArMzMsMjAgQEAKIAogI2lm
IEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogCisjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3Vy
dmVUYXJnZXQuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBjbGFzcyBTY3JvbGxBbmltYXRvck5vbmVU
ZXN0OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEludFBvaW50OworY2xhc3MgQWN0
aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOwogc3RydWN0IFNjcm9sbEFuaW1hdG9yUGFyYW1l
dGVyczsKIAotY2xhc3MgU2Nyb2xsQW5pbWF0b3JOb25lIDogcHVibGljIFNjcm9sbEFuaW1hdG9y
IHsKK2NsYXNzIFNjcm9sbEFuaW1hdG9yTm9uZSA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciwgcHVi
bGljIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0IHsKIHB1YmxpYzoKICAgICBTY3JvbGxBbmlt
YXRvck5vbmUoU2Nyb2xsYWJsZUFyZWEqKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvck5v
bmUoKTsKQEAgLTUwLDYgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwo
U2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9h
dCBtdWx0aXBsaWVyKTsKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5p
bWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxBbmlt
YXRpb25zKCk7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxFbmRMaXZlUmVzaXplKCk7CiAgICAgdmly
dHVhbCB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopOwogICAgIHZpcnR1
YWwgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopOwpAQCAtODMsNiAr
ODgsOSBAQCBwdWJsaWM6CiAgICAgICAgIGRvdWJsZSBtX21heGltdW1Db2FzdFRpbWU7CiAgICAg
fTsKIAorICAgIC8vIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0IGltcGxlbWVudGF0aW9uCisg
ICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbEluY3JlbWVudChjb25zdCBJbnRQb2ludCYpOworCiBw
cm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIDo6U2Nyb2xsQW5pbWF0b3JOb25lVGVzdDsKIApA
QCAtMTM1LDYgKzE0Myw4IEBAIHByb3RlY3RlZDoKIAogICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsK
ICAgICBUaW1lcjxTY3JvbGxBbmltYXRvck5vbmU+IG1fYW5pbWF0aW9uVGltZXI7CisKKyAgICBP
d25QdHI8QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uPiBtX2dlc3R1cmVBbmltYXRpb247
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hNzhkMDRlMmM2Y2RlNjMxMThkZDE2ZDViYWRmY2I1YjYwMDQ4NTMzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVy
ZUN1cnZlLmNwcApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKwor
I2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgiCisjaW5jbHVkZSA8bWF0aC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK1Bhc3NP
d25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZTo6Y3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5KQoreworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKHZlbG9jaXR5KSk7Cit9CisK
K1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6VG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVy
ZUN1cnZlKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5KQorICAgIDogbV92ZWxvY2l0eSh2ZWxv
Y2l0eSkKKyAgICAsIG1fdGltZVNjYWxlcigxMDAwIC8gbWF4KDEuZiwgbWF4KGFicyh2ZWxvY2l0
eS54KCkpLCBhYnModmVsb2NpdHkueSgpKSkpKQoreworICAgIEFTU0VSVChhYnModmVsb2NpdHku
eCgpKSB8fCBhYnModmVsb2NpdHkueSgpKSk7Cit9CisKK2Jvb2wgVG91Y2hGbGluZ1BsYXRmb3Jt
R2VzdHVyZUN1cnZlOjphcHBseShkb3VibGUgdHMsIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0
KiB0YXJnZXQpCit7CisgICAgLy8gSGVyZSB3ZSBpbXBsZW1lbnQgYSBjdWJpYyBiZXppZXIgY3Vy
dmUgd2l0aCBwYXJhbWV0ZXJzIFsxIDEgMCAwXSB3aGljaCBnaXZlcworICAgIC8vIHYoMCkgPSAx
LCBhKDApID0gMCwgdigxKSA9IDAsIGEoMSkgPSAwLiBUaGUgY3VydmUgaXMgc2NhbGVkIGJ5IHRo
ZSBpbml0aWFsCisgICAgLy8gdmVsb2NpdHksIGFuZCB0aGUgdGltZSBwYXJhbWV0ZXIgaXMgcmUt
c2NhbGVkIHNvIHRoYXQgbGFyZ2VyIGluaXRpYWwgdmVsb2NpdGllcworICAgIC8vIGxlYWQgdG8g
bG9uZ2VyIGluaXRpYWwgYW5pbWF0aW9ucy4gVGhpcyBzaG91bGQgYWxsb3cgdGhlIGFuaW1hdGlv
biB0byBzbW9vdGhseQorICAgIC8vIGNvbnRpbnVlIHRoZSB2ZWxvY2l0eSBhdCB0aGUgZW5kIG9m
IHRoZSBHZXN0dXJlU2Nyb2xsLCBhbmQgc21vb3RobHkgY29tZSB0byBhIHJlc3QKKyAgICAvLyBh
dCB0aGUgZW5kLiBGaW5hbGx5LCB3ZSBoYXZlIGludGVncmF0ZWQgdGhlIGN1cnZlIHNvIHdlIGNh
biBkZWFsIHdpdGggZGlzcGxhY2VtZW50CisgICAgLy8gYXMgYSBmdW5jdGlvbiBvZiB0aW1lLCBh
bmQgbm90IHZlbG9jaXR5LgorICAgIC8vIEZpbmFsbHksIHdlIHBsYWNlIGEgY29uc3RhbnQgdmVs
b2NpdHkgZnJvbSB0cyA9IDAgLi4gMC41LCBhbmQgcnVuIHRoZSBCZXppZXIgY3VydmUKKyAgICAv
LyBmcm9tIHRzID0gMC41IC4uIDEuNSB0byBnaXZlIGEgbG9uZ2VyIHJ1bi1vdXQuCisgICAgdHMg
Kj0gbV90aW1lU2NhbGVyOworCisgICAgZmxvYXQgZGlzcGxhY2VtZW50OworICAgIGlmICh0cyA8
PSAwLjUpCisgICAgICAgIGRpc3BsYWNlbWVudCA9IHRzOworICAgIGVsc2UgaWYgKHRzIDw9IDEu
NSkgeworICAgICAgICBkb3VibGUgdCA9IHRzIC0gMC41OworICAgICAgICBkaXNwbGFjZW1lbnQg
PSB0ICogKDEgKyB0ICogdCAqICgwLjUgKiB0IC0gMSkpICsgMC41OworICAgIH0gZWxzZQorICAg
ICAgICBkaXNwbGFjZW1lbnQgPSAxLjA7CisKKyAgICAvLyBLZWVwIHRyYWNrIG9mIGludGVnZXIg
cG9ydGlvbiBvZiBzY3JvbGwgdGh1cyBmYXIsIGFuZCBwcmVwYXJlIGluY3JlbWVudC4KKyAgICBJ
bnRQb2ludCBzY3JvbGwoZGlzcGxhY2VtZW50ICogbV92ZWxvY2l0eS54KCksIGRpc3BsYWNlbWVu
dCAqIG1fdmVsb2NpdHkueSgpKTsKKyAgICBJbnRQb2ludCBzY3JvbGxJbmNyZW1lbnQoc2Nyb2xs
IC0gbV9jdW11bGF0aXZlU2Nyb2xsKTsKKyAgICBtX2N1bXVsYXRpdmVTY3JvbGwgPSBzY3JvbGw7
CisKKyAgICBpZiAodHMgPCAxLjUgfHwgc2Nyb2xsSW5jcmVtZW50ICE9IEludFBvaW50Ojp6ZXJv
KCkpIHsKKyAgICAgICAgdGFyZ2V0LT5zZXRTY3JvbGxJbmNyZW1lbnQoc2Nyb2xsSW5jcmVtZW50
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit9OyAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Rv
dWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDFlOWQ1OWI2OTVk
ZmI0NzUxNTY0YzkzOGUwZDFiNTFlZDM1OWIzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVy
ZUN1cnZlX2gKKyNkZWZpbmUgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlX2gKKworI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0Owor
CitjbGFzcyBUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUgOiBwdWJsaWMgUGxhdGZvcm1H
ZXN0dXJlQ3VydmUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFBsYXRmb3JtR2Vz
dHVyZUN1cnZlPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgdmVsb2NpdHkpOworCisgICAgdmly
dHVhbCBib29sIGFwcGx5KGRvdWJsZSB0cywgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqKTsK
KworcHJpdmF0ZToKKyAgICAvLyBGSVhNRTogY29uc2lkZXIgaW1ha2luZyB0aGUgdmFsdWUgb2Yg
c2lnbWEgc2V0dGFibGUgaW4gdGhlIGNvbnN0cnVjdG9yLgorICAgIFRvdWNoRmxpbmdQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZShjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSk7CisKKyAgICBGbG9hdFBv
aW50IG1fdmVsb2NpdHk7CisgICAgZmxvYXQgbV90aW1lU2NhbGVyOworICAgIEludFBvaW50IG1f
Y3VtdWxhdGl2ZVNjcm9sbDsKK307CisKK307IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1doZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVD
dXJ2ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaGVlbEZsaW5nUGxhdGZvcm1HZXN0
dXJlQ3VydmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3YmEwYzgyYmQxMDM5M2M1MDg5ZGY5ODZhOTFkNDY4
NDZkMDA2MTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaGVl
bEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldoZWVsRmxpbmdQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZS5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQu
aCIKKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0
cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpj
cmVhdGUoY29uc3QgRmxvYXRQb2ludCYgdmVsb2NpdHkpCit7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUodmVsb2NpdHkpKTsKK30KKworV2hl
ZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3Vy
dmUoY29uc3QgRmxvYXRQb2ludCYgdmVsb2NpdHkpCisgICAgOiBtX3ZlbG9jaXR5KHZlbG9jaXR5
KQoreworICAgIEFTU0VSVChzdGQ6OmFicyh2ZWxvY2l0eS54KCkgfHwgc3RkOjphYnModmVsb2Np
dHkueSgpKSkpOworfQorCitib29sIFdoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6YXBw
bHkoZG91YmxlIHRzLCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0KQoreworICAg
IC8vIEZJWE1FOiB0aGlzIGN1cnZlIHByb2ZpbGUgaXMgcHJvYmFibHkgYmV0dGVyIHN1aXRlZCB0
byBtb3VzZSB3aGVlbCBzY3JvbGxpbmcgdGhhbiBmbGluZy4KKworICAgIC8vIFVzZSBhIFJheWxl
aWdoIGRpc3RyaWJ1dGlvbiBmb3IgdGhlIGN1cnZlLiBUaGlzIHNpbXVsYXRlcyBhIHZlbG9jaXR5
IHByb2ZpbGUKKyAgICAvLyB0aGF0IHN0YXJ0cyBhdCAwLCBpbmNyZWFzZXMgdG8gYSBtYXhpbXVt
LCB0aGVuIGRlY3JlYXNlcyBhZ2FpbiBzbW9vdGhseS4gQnkKKyAgICAvLyB1c2luZyB0aGUgY3Vt
dWxhdGl2ZSBkaXN0cmlidXRpb24gZnVuY3Rpb24gKENERikgaW5zdGVhZCBvZiB0aGUgcG9pbnQt
bWFzcyBmdW5jdGlvbiwKKyAgICAvLyB3ZSBjYW4gaXNvbGF0ZSB0aW1pbmcgaml0dGVyIGJ5IHJl
bWVtYmVyaW5nIHRoZSBDREYgdmFsdWUgYXQgdGhlIGxhc3QgdGljay4gU2luY2UKKyAgICAvLyB0
aGUgQ0RGIG1heGVzIG91dCBhdCAxLCBzY2FsZSBpdCBieSB0aGUgaW5wdXQgdmVsb2NpdHkuCisg
ICAgLy8KKyAgICAvLyBDREYgLT4gRih4OyBzaWdtYSkgPSAxIC0gZXhwey14XjIvMlxzaWdtYV4y
fQorICAgIC8vIHJlZjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SYXlsZWlnaF9kaXN0
cmlidXRpb24KKyAgICBzdGF0aWMgZG91YmxlIHR3b1NpZ21hU3F1YXJlZEludmVyc2UgPSAxNjsg
Ly8gc2lnbWEgPSAwLjI1CisgICAgZmxvYXQgY2RmID0gMSAtIGV4cCgtdHMgKiB0cyAqIHR3b1Np
Z21hU3F1YXJlZEludmVyc2UpOworICAgIEludFBvaW50IHNjcm9sbChjZGYgKiBtX3ZlbG9jaXR5
LngoKSwgY2RmICogbV92ZWxvY2l0eS55KCkpOworICAgIEludFBvaW50IHNjcm9sbEluY3JlbWVu
dChzY3JvbGwgLSBtX2N1bXVsYXRpdmVTY3JvbGwpOworICAgIG1fY3VtdWxhdGl2ZVNjcm9sbCA9
IHNjcm9sbDsKKworICAgIGlmIChjZGYgPCAwLjUgfHwgc2Nyb2xsSW5jcmVtZW50ICE9IEludFBv
aW50Ojp6ZXJvKCkpIHsKKyAgICAgICAgdGFyZ2V0LT5zZXRTY3JvbGxJbmNyZW1lbnQoc2Nyb2xs
SW5jcmVtZW50KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit9OyAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1doZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWRj
MDY2ZWJjODIwODUzYjJhMDRjMzU2NTdmMjM3OTkwNmFjYTQ0NwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1doZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5o
CkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2hlZWxGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlX2gKKyNkZWZpbmUgV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZl
X2gKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVD
dXJ2ZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtR2VzdHVyZUN1cnZl
VGFyZ2V0OworCitjbGFzcyBXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUgOiBwdWJsaWMg
UGxhdGZvcm1HZXN0dXJlQ3VydmUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFBs
YXRmb3JtR2VzdHVyZUN1cnZlPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgdmVsb2NpdHkpOwor
CisgICAgdmlydHVhbCBib29sIGFwcGx5KGRvdWJsZSB0cywgUGxhdGZvcm1HZXN0dXJlQ3VydmVU
YXJnZXQqKTsKKworcHJpdmF0ZToKKyAgICAvLyBGSVhNRTogY29uc2lkZXIgbWFraW5nIHRoZSB2
YWx1ZSBvZiBzaWdtYSBzZXR0YWJsZSBpbiB0aGUgY29uc3RydWN0b3IuCisgICAgV2hlZWxGbGlu
Z1BsYXRmb3JtR2VzdHVyZUN1cnZlKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5KTsKKworICAg
IEZsb2F0UG9pbnQgbV92ZWxvY2l0eTsKKyAgICBJbnRQb2ludCBtX2N1bXVsYXRpdmVTY3JvbGw7
Cit9OworCit9OyAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NB
Y3RpdmVHZXN0dXJlQW5pbWF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMDk0NWE4MTU4NzQzYzk2NDg1
NjNiMjQ3ZjUwNzljZWFiNTJkMWIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmNw
cApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaCIKKworI2luY2x1ZGUgImNj
L0NDR2VzdHVyZUN1cnZlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NBY3RpdmVHZXN0
dXJlQW5pbWF0aW9uOjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24oZG91YmxlIHN0YXJ0VGltZSwg
UGFzc093blB0cjxDQ0dlc3R1cmVDdXJ2ZT4gY3VydmUsIENDR2VzdHVyZUN1cnZlVGFyZ2V0KiB0
YXJnZXQpCisgICAgOiBtX3N0YXJ0VGltZShzdGFydFRpbWUpCisgICAgLCBtX2dlc3R1cmVDdXJ2
ZShjdXJ2ZSkKKyAgICAsIG1fZ2VzdHVyZUN1cnZlVGFyZ2V0KHRhcmdldCkKK3sKK30KKworUGFz
c093blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+IENDQWN0aXZlR2VzdHVyZUFuaW1hdGlv
bjo6Y3JlYXRlKGRvdWJsZSBzdGFydFRpbWUsIFBhc3NPd25QdHI8Q0NHZXN0dXJlQ3VydmU+IGN1
cnZlLCBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0KQoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKHN0YXJ0VGltZSwgY3VydmUsIHRhcmdldCkp
OworfQorCitib29sIENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6YW5pbWF0ZShkb3VibGUgdHMp
Cit7CisgICAgcmV0dXJuIG1fZ2VzdHVyZUN1cnZlLT5hcHBseSh0cyAtIG1fc3RhcnRUaW1lLCBt
X2dlc3R1cmVDdXJ2ZVRhcmdldCk7Cit9CisKK307IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0
dXJlQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTExMzhmNWQ2OWMx
M2U3N2I5MGFkZThiNTBhMjQ1ZjQ1NmVhNmI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0
aW9uLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0FjdGl2ZUdl
c3R1cmVBbmltYXRpb25faAorI2RlZmluZSBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb25faAorCisj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q0NHZXN0dXJlQ3VydmU7CitjbGFzcyBDQ0dlc3R1cmVDdXJ2ZVRhcmdldDsKKworY2xhc3MgQ0NB
Y3RpdmVHZXN0dXJlQW5pbWF0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0FjdGl2
ZUdlc3R1cmVBbmltYXRpb24pOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQWN0
aXZlR2VzdHVyZUFuaW1hdGlvbj4gY3JlYXRlKGRvdWJsZSBzdGFydFRpbWUsIFBhc3NPd25QdHI8
Q0NHZXN0dXJlQ3VydmU+LCBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCopOworCisgICAgdmlydHVhbCBi
b29sIGFuaW1hdGUoZG91YmxlIHRzKTsKKworcHJpdmF0ZToKKyAgICBDQ0FjdGl2ZUdlc3R1cmVB
bmltYXRpb24oZG91YmxlIHN0YXJ0VGltZSwgUGFzc093blB0cjxDQ0dlc3R1cmVDdXJ2ZT4sIEND
R2VzdHVyZUN1cnZlVGFyZ2V0Kik7CisKKyAgICBkb3VibGUgbV9zdGFydFRpbWU7CisgICAgT3du
UHRyPENDR2VzdHVyZUN1cnZlPiBtX2dlc3R1cmVDdXJ2ZTsKKyAgICBDQ0dlc3R1cmVDdXJ2ZVRh
cmdldCogbV9nZXN0dXJlQ3VydmVUYXJnZXQ7Cit9OworCit9OyAvLyBuYW1lc3BhY2UKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0dlc3R1cmVDdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NHZXN0dXJlQ3VydmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MzllZjJhMWZjODM2ZjM4
ZDY5NzhlNDUxNGU2Mzk2MGNmYzVhOWVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJlQ3VydmUuaApAQCAtMCww
ICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDR2VzdHVyZUN1cnZlX2gKKyNkZWZp
bmUgQ0NHZXN0dXJlQ3VydmVfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bnRQb2ludDsKKworY2xhc3MgQ0NHZXN0dXJlQ3VydmVUYXJnZXQgeworcHVibGljOgorICAgIHZp
cnR1YWwgdm9pZCBzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQgJikgPSAwOworICAg
IC8vIEZJWE1FOiBhZGQgaW50ZXJmYWNlcyBmb3Igc2V0U2Nyb2xsKCksIHNldFBhZ2VTY2FsZUFu
ZFNjcm9sbCgpLCBldGMuCit9OworCitjbGFzcyBDQ0dlc3R1cmVDdXJ2ZSB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCBib29sIGFwcGx5KGRvdWJsZSB0cywgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqKSA9
IDA7Cit9OworCit9OyAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRs
ZXIuaAppbmRleCA2YzA1NTk5NGM1OGVjYTQxMTMxOWE5Yzk5ZDE0M2Y5YzE3ZjNlMmMyLi44ODgy
Yjg4ZjIxOTNhMWY3MzM3MzhmZjM4NTY1YTExZjM5NDc0OWQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRI
YW5kbGVyLmgKQEAgLTI5LDYgKzI5LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb247CitjbGFzcyBDQ0dlc3R1cmVDdXJ2ZVRhcmdldDsK
IGNsYXNzIEludFBvaW50OwogY2xhc3MgSW50U2l6ZTsKIApAQCAtNzUsNiArNzcsMTAgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3Rh
cnRUaW1lTXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSBkdXJhdGlvbk1zKSA9IDA7CiAKKyAgICB2aXJ0dWFsIENDQWN0aXZlR2VzdHVyZUFuaW1hdGlv
biogYWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0
aXZlR2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4p
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkgPSAw
OworCiBwcm90ZWN0ZWQ6CiAgICAgQ0NJbnB1dEhhbmRsZXJDbGllbnQoKSB7IH0KICAgICB2aXJ0
dWFsIH5DQ0lucHV0SGFuZGxlckNsaWVudCgpIHsgfQpAQCAtODMsNyArODksNyBAQCBwcm90ZWN0
ZWQ6CiBjbGFzcyBDQ0lucHV0SGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NJ
bnB1dEhhbmRsZXIpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDSW5wdXRIYW5k
bGVyPiBjcmVhdGUoQ0NJbnB1dEhhbmRsZXJDbGllbnQqKTsKKyAgICBzdGF0aWMgUGFzc093blB0
cjxDQ0lucHV0SGFuZGxlcj4gY3JlYXRlKENDSW5wdXRIYW5kbGVyQ2xpZW50KiwgQ0NHZXN0dXJl
Q3VydmVUYXJnZXQqKTsKICAgICB2aXJ0dWFsIH5DQ0lucHV0SGFuZGxlcigpIHsgfQogCiAgICAg
dmlydHVhbCBpbnQgaWRlbnRpZmllcigpIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAKaW5kZXggNzY2ZmExNjJkNzdmYzFlNTc3YmUxNzg4M2E5OWQ0NzNi
ZDQ4OGI3NC4uZmU4OGJlMzk0OGE2NWFiNjRmNWExNGRhODE3YjY5MGQyODRmZGE3NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTMwLDcgKzMwLDkgQEAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUdl
c3R1cmVBbmltYXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKKyNpbmNs
dWRlICJjYy9DQ0dlc3R1cmVDdXJ2ZS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5o
IgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdENvbW1vbi5oIgpAQCAtMTAxLDYgKzEwMyw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKIHsKICAgICBhbmltYXRlUGFn
ZVNjYWxlKGZyYW1lQmVnaW5UaW1lTXMpOwogICAgIGFuaW1hdGVMYXllcnMoZnJhbWVCZWdpblRp
bWVNcyk7CisgICAgYW5pbWF0ZUdlc3R1cmVzKGZyYW1lQmVnaW5UaW1lTXMpOwogfQogCiB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNp
emUmIHRhcmdldFBvc2l0aW9uLCBib29sIGFuY2hvclBvaW50LCBmbG9hdCBwYWdlU2NhbGUsIGRv
dWJsZSBzdGFydFRpbWVNcywgZG91YmxlIGR1cmF0aW9uTXMpCkBAIC0xMjgsNiArMTMxLDI0IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3Qg
SW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sCiAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25J
bXBsVGhyZWFkKCk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0QWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gZ2VzdHVy
ZUFuaW1hdGlvbikKK3sKKyAgICBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24gPSBnZXN0dXJlQW5p
bWF0aW9uOworCisgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7Cisg
ICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7Cit9CisKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6Y2xlYXJBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkKK3sKKyAgICBt
X2FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY2xlYXIoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQorewor
ICAgIHNjcm9sbEJ5KEludFNpemUobG9jYXRpb24ueCgpLCBsb2NhdGlvbi55KCkpKTsKK30KKwog
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5
ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCkKIHsKICAgICAvLyBGb3Igbm93LCB3ZSB1c2UgZGFtYWdlIHRyYWNraW5nIHRvIGNv
bXB1dGUgYSBnbG9iYWwgc2Npc3Nvci4gVG8gZG8gdGhpcywgd2UgbXVzdApAQCAtNzI3LDQgKzc0
OCwxNiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNlbmREaWRMb3NlQ29udGV4dFJlY3Vy
c2l2ZShDQ0xheWVySW1wbCogY3VycmVudCkKICAgICAgICAgc2VuZERpZExvc2VDb250ZXh0UmVj
dXJzaXZlKGN1cnJlbnQtPmNoaWxkcmVuKClbaV0uZ2V0KCkpOwogfQogCit2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmFuaW1hdGVHZXN0dXJlcyhkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKK3sK
KyAgICBpZiAoISFtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24pIHsKKyAgICAgICAgYm9vbCBpc0Nv
bnRpbnVpbmcgPSBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24tPmFuaW1hdGUoZnJhbWVCZWdpblRp
bWVNcyAvIDEwMDApOworICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJl
YWQoKTsKKyAgICAgICAgaWYgKCFpc0NvbnRpbnVpbmcpIHsKKyAgICAgICAgICAgIG1fY2xpZW50
LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOworICAgICAgICAgICAgbV9hY3RpdmVHZXN0
dXJlQW5pbWF0aW9uLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCBhMGIz
NWYyZGM5ODhlZDg5YmJhNTljOGJhMjg0YjA0ZWRhNDAzZDAzLi4wY2VhODkwMzU4NDA3Nzg0ZGYy
YzBjNzdmMzZkNjA3ZTA5ODg4N2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgorI2luY2x1ZGUgImNjL0NDR2Vz
dHVyZUN1cnZlLmgiCiAjaW5jbHVkZSAiY2MvQ0NJbnB1dEhhbmRsZXIuaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCkBAIC0z
Nyw2ICszOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NBY3RpdmVHZXN0
dXJlQW5pbWF0aW9uOwogY2xhc3MgQ0NDb21wbGV0aW9uRXZlbnQ7CiBjbGFzcyBDQ1BhZ2VTY2Fs
ZUFuaW1hdGlvbjsKIGNsYXNzIENDTGF5ZXJJbXBsOwpAQCAtNTUsNyArNTcsNyBAQCBwdWJsaWM6
CiB9OwogCiAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsIG93bnMgdGhlIENDTGF5ZXJJbXBsIHRyZWUg
YXMgd2VsbCBhcyBhc3NvY2lhdGVkIHJlbmRlcmluZyBzdGF0ZQotY2xhc3MgQ0NMYXllclRyZWVI
b3N0SW1wbCA6IHB1YmxpYyBDQ0lucHV0SGFuZGxlckNsaWVudCwgTGF5ZXJSZW5kZXJlckNocm9t
aXVtQ2xpZW50IHsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGwgOiBwdWJsaWMgQ0NJbnB1dEhh
bmRsZXJDbGllbnQsIHB1YmxpYyBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCwgTGF5ZXJSZW5kZXJlckNo
cm9taXVtQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhvc3RJ
bXBsKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBs
PiBjcmVhdGUoY29uc3QgQ0NTZXR0aW5ncyYsIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqKTsK
QEAgLTcwLDYgKzcyLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGluY2hHZXN0dXJl
VXBkYXRlKGZsb2F0LCBjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBwaW5jaEdl
c3R1cmVFbmQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29u
c3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sIGJvb2wgYW5jaG9yUG9pbnQsIGZsb2F0IHBhZ2VT
Y2FsZSwgZG91YmxlIHN0YXJ0VGltZU1zLCBkb3VibGUgZHVyYXRpb25Ncyk7CisgICAgdmlydHVh
bCBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24qIGFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSB7IHJl
dHVybiBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24uZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0QWN0aXZlR2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1h
dGlvbj4pOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKTsK
KworICAgIC8vIENDR2VzdHVyZUN1cnZlVGFyZ2V0IGltcGxlbWVudGF0aW9uCisgICAgdmlydHVh
bCB2b2lkIHNldFNjcm9sbEluY3JlbWVudChjb25zdCBJbnRQb2ludCYpOwogCiAgICAgLy8gVmly
dHVhbCBmb3IgdGVzdGluZy4KICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKQEAgLTEz
Myw2ICsxNDEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBD
Q1NldHRpbmdzJiwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOwogCiAgICAgdm9pZCBhbmlt
YXRlUGFnZVNjYWxlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKTsKKyAgICB2b2lkIGFuaW1hdGVH
ZXN0dXJlcyhkb3VibGUgZnJhbWVCZWdpblRpbWVNcyk7CiAKICAgICAvLyBWaXJ0dWFsIGZvciB0
ZXN0aW5nLgogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJzKGRvdWJsZSBmcmFtZUJlZ2lu
VGltZU1zKTsKQEAgLTE3Nyw2ICsxODYsNyBAQCBwcml2YXRlOgogICAgIEludFBvaW50IG1fcHJl
dmlvdXNQaW5jaEFuY2hvcjsKIAogICAgIE93blB0cjxDQ1BhZ2VTY2FsZUFuaW1hdGlvbj4gbV9w
YWdlU2NhbGVBbmltYXRpb247CisgICAgT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4g
bV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uOwogCiAgICAgQ0NMYXllclNvcnRlciBtX2xheWVyU29y
dGVyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDNkNjU5NmQwNGUxNjQ3NDY5
ZGIxYThkMWQ3MGEyOTYyN2E5YjcyZDEuLjk0YTM4ZjJjODYxMjRiYzU1ODI0MDAzNjFmODJjZTgy
YzRhZTBkZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC02NzMsNyArNjczLDcg
QEAgdm9pZCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9uSW1wbFRocmVhZChDQ0NvbXBs
ZXRpb25FdmVudCogY29tcGxldGlvbikKICAgICBtX3NjaGVkdWxlck9uSW1wbFRocmVhZCA9IEND
U2NoZWR1bGVyOjpjcmVhdGUodGhpcywgZnJhbWVSYXRlQ29udHJvbGxlci5yZWxlYXNlKCkpOwog
ICAgIG1fc2NoZWR1bGVyT25JbXBsVGhyZWFkLT5zZXRWaXNpYmxlKG1fbGF5ZXJUcmVlSG9zdElt
cGwtPnZpc2libGUoKSk7CiAKLSAgICBtX2lucHV0SGFuZGxlck9uSW1wbFRocmVhZCA9IENDSW5w
dXRIYW5kbGVyOjpjcmVhdGUobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgbV9pbnB1
dEhhbmRsZXJPbkltcGxUaHJlYWQgPSBDQ0lucHV0SGFuZGxlcjo6Y3JlYXRlKG1fbGF5ZXJUcmVl
SG9zdEltcGwuZ2V0KCksIG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOwogICAgIG1fY29tcG9z
aXRvcklkZW50aWZpZXIgPSBtX2lucHV0SGFuZGxlck9uSW1wbFRocmVhZC0+aWRlbnRpZmllcigp
OwogCiAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
aW5kZXggMWUxYTQxNjY1ZTc5ZGQyY2E1ZDM4YWRlZDY5NTg1MTllMTU3NDE0My4uY2QxMTBjNmFk
YmRjMmViZTI3MDI0MzJhMzMwYjNmYmI4MjQyMjc2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cApAQCAtMzc3LDYgKzM3Nyw4IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9CbG9iUmVnaXN0
cnlQcm94eS5oJywKICAgICAgICAgICAgICAgICAnc3JjL0NDVGhyZWFkSW1wbC5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvQ0NUaHJlYWRJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMv
Q0NUb1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRlci5jcHAnLAorICAgICAgICAgICAg
ICAgICdzcmMvQ0NUb1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRlci5oJywKICAgICAg
ICAgICAgICAgICAnc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL0Nocm9tZUNsaWVudEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9Db2xvckNob29z
ZXJQcm94eS5jcHAnLApAQCAtNDU4LDYgKzQ2MCw4IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9Q
YWdlT3ZlcmxheS5oJywKICAgICAgICAgICAgICAgICAnc3JjL1BhZ2VPdmVybGF5TGlzdC5jcHAn
LAogICAgICAgICAgICAgICAgICdzcmMvUGFnZU92ZXJsYXlMaXN0LmgnLAorICAgICAgICAgICAg
ICAgICdzcmMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRlci5jcHAn
LAorICAgICAgICAgICAgICAgICdzcmMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1
cnZlQWRhcHRlci5oJywKICAgICAgICAgICAgICAgICAnc3JjL1BsYXRmb3JtTWVzc2FnZVBvcnRD
aGFubmVsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hh
bm5lbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZjY1Y2Q1ZDY1ZWRhZjk1NjhhM2EwZGE2Mzg3
YzNiODE0M2VmNzkyYy4uMjg1YTdhNGI1MDc0ZGVjM2NlZmYyZThkZTYxZjViNmFjZmFkYjMyMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC0xMDksNiArMTA5LDcgQEAKICAgICAg
ICAgICAgICd0ZXN0cy9MYXllclRleHR1cmVVcGRhdGVyVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0xvY2FsaXplZE51bWJlcklDVVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9Q
YWludEFnZ3JlZ2F0b3JUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvUGxhdGZvcm1HZXN0
dXJlQ3VydmVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUGxhdGZvcm1Db250ZXh0U2tp
YVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9QT0RBcmVuYVRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9QT0RJbnRlcnZhbFRyZWVUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnB1dEV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJbnB1dEV2ZW50LmgKaW5kZXggZTQyZTQ1MTM0YWUyODY0Zjhh
ZWQ3NTVlNmY1OGUzMjc3ZDMzOWIyZS4uMzNjYjYyODYxMmZmNDRjYzdlNmJhMjRkMDI0NjdlOGMy
YTE1NTMwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5w
dXRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklucHV0RXZl
bnQuaApAQCAtMTk3LDYgKzE5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHx8IHR5cGUgPT0g
R2VzdHVyZVNjcm9sbFVwZGF0ZQogICAgICAgICAgICAgfHwgdHlwZSA9PSBHZXN0dXJlRmxpbmdT
dGFydAogICAgICAgICAgICAgfHwgdHlwZSA9PSBHZXN0dXJlRmxpbmdDYW5jZWwKKyAgICAgICAg
ICAgIHx8IHR5cGUgPT0gR2VzdHVyZVRhcERvd24gLy8gSW5jbHVkZSBHZXN0dXJlVGFwRG93biwg
YXMgaXQgaXMgdXNlZCB0byBjYW5jZWwgaW4tZmxpZ2h0IHNjcm9sbCBhbmltYXRpb25zLgogICAg
ICAgICAgICAgfHwgdHlwZSA9PSBHZXN0dXJlVGFwOyAvLyBGSVhNRTogV2h5IGlzIEdlc3R1cmVU
YXAgb24gdGhpcyBsaXN0PwogICAgIH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9DQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0NDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFk
YXB0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4MGYwOGQxMzQwZGYwZDE3ZmIxYTA4OTZiZTNlMzk4NDdm
YzJkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DQ1Rv
UGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyLmNwcApAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDQ1RvUGxhdGZv
cm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyLmgiCisKKyNpbmNsdWRlICJjYy9DQ0dlc3R1cmVD
dXJ2ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2
ZVRhcmdldEFkYXB0ZXI6OkNDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXIoQ0NH
ZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKKyAgICA6IG1fdGFyZ2V0KHRhcmdldCkKK3sKK30K
Kwordm9pZCBDQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyOjpzZXRTY3JvbGxJ
bmNyZW1lbnQoY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQoreworICAgIEFTU0VSVChtX3Rhcmdl
dCk7CisgICAgbV90YXJnZXQtPnNldFNjcm9sbEluY3JlbWVudChsb2NhdGlvbik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DQ1Rv
UGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjA1MzRhMzdmMzQzNTVhMzdmMjZlM2MxYmYzMDEzMWFhMzM5MmMwMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0NDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2
ZVRhcmdldEFkYXB0ZXIuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IENDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXJfaAorI2RlZmluZSBDQ1RvUGxh
dGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtR2Vz
dHVyZUN1cnZlVGFyZ2V0LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NHZXN0dXJlQ3VydmVUYXJnZXQ7CisKK2NsYXNzIEND
VG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXIgOiBwdWJsaWMgUGxhdGZvcm1HZXN0
dXJlQ3VydmVUYXJnZXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDVG9QbGF0Zm9ybUdl
c3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXIpOworcHVibGljOgorICAgIENDVG9QbGF0Zm9ybUdlc3R1
cmVDdXJ2ZVRhcmdldEFkYXB0ZXIoQ0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKKworICAgIHZpcnR1
YWwgdm9pZCBzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmKTsKKworcHJpdmF0ZToK
KyAgICBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCogbV90YXJnZXQ7Cit9OworCit9OyAvLyBuYW1lc3Bh
Y2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0
Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmZiZmJmZmU4ZGYyNTA1OGJmM2EyNDFjYjAwODM2MzE4MTdmYjk3
MGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9y
bUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyLmNwcApAQCAtMCwwICsxLDUwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyLmgiCisKKyNpbmNsdWRlICJDQ1Rv
UGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NHZXN0
dXJlQ3VydmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPENDR2VzdHVy
ZUN1cnZlPiBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyOjpjcmVh
dGUoUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gcGxhdGZvcm1DdXJ2ZSkKK3sKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2
ZUFkYXB0ZXIocGxhdGZvcm1DdXJ2ZSkpOworfQorCitQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NH
ZXN0dXJlQ3VydmVBZGFwdGVyOjpQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVB
ZGFwdGVyKFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGN1cnZlKQorICAgIDogbV9j
dXJ2ZShjdXJ2ZSkKK3sKK30KKworYm9vbCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJl
Q3VydmVBZGFwdGVyOjphcHBseShkb3VibGUgdHMsIENDR2VzdHVyZUN1cnZlVGFyZ2V0KiB0YXJn
ZXQpCit7CisgICAgQ0NUb1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRlciBhZGFwdGVy
KHRhcmdldCk7CisgICAgcmV0dXJuIG1fY3VydmUtPmFwcGx5KHRzLCAmYWRhcHRlcik7Cit9CisK
K307IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
UGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRlci5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRh
cHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjhmYmUyMTFhMDBmODU2ZDdiMDVkMWU1YzhiMDViNmZjNTg1NmU3
YWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9y
bUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyLmgKQEAgLTAsMCArMSw1MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3Vy
dmVBZGFwdGVyX2gKKyNkZWZpbmUgUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZl
QWRhcHRlcl9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgorI2luY2x1ZGUg
ImNjL0NDR2VzdHVyZUN1cnZlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK2NsYXNzIENDR2VzdHVyZUN1cnZlVGFyZ2V0OworCitjbGFzcyBQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyIDogcHVibGljIENDR2VzdHVy
ZUN1cnZlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0dlc3R1cmVDdXJ2ZT4g
Y3JlYXRlKFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+KTsKKworICAgIHZpcnR1YWwg
Ym9vbCBhcHBseShkb3VibGUgdHMsIENDR2VzdHVyZUN1cnZlVGFyZ2V0Kik7CisKK3ByaXZhdGU6
CisgICAgUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRlcihQYXNzT3du
UHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPik7CisgICAgT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1
cnZlPiBtX2N1cnZlOworfTsKKworfTsgLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGwuY3BwCmluZGV4IDM5NzMwOGI1MjljYzQxNzQ3MTg3YzdmODY3ZDEyMWI5YjIzZmNh
ZWUuLjU0ZGY4NTYxNjc3YjE4YmE0NWNlZGRkYTA5NmRjNzdmNjM3OTRhNGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbC5jcHAKQEAgLTI3LDIxICsyNywyNyBAQAogCiAjaW5jbHVkZSAiV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGwuaCIKIAorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZl
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRl
ci5oIgorI2luY2x1ZGUgIlRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgogI2luY2x1
ZGUgIldlYkNvbXBvc2l0b3JJbXBsLmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckNsaWVudC5oIgogI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIKICNpbmNsdWRlICJXZWJL
aXQuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNs
dWRlICJjYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0dlc3R1
cmVDdXJ2ZS5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9X
ZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPENDSW5wdXRIYW5kbGVy
PiBDQ0lucHV0SGFuZGxlcjo6Y3JlYXRlKENDSW5wdXRIYW5kbGVyQ2xpZW50KiBpbnB1dEhhbmRs
ZXJDbGllbnQpCitQYXNzT3duUHRyPENDSW5wdXRIYW5kbGVyPiBDQ0lucHV0SGFuZGxlcjo6Y3Jl
YXRlKENDSW5wdXRIYW5kbGVyQ2xpZW50KiBpbnB1dEhhbmRsZXJDbGllbnQsIENDR2VzdHVyZUN1
cnZlVGFyZ2V0KiBnZXN0dXJlQ3VydmVUYXJnZXQpCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6V2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0ZShpbnB1dEhhbmRsZXJDbGllbnQpOwor
ICAgIHJldHVybiBXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVhdGUo
aW5wdXRIYW5kbGVyQ2xpZW50LCBnZXN0dXJlQ3VydmVUYXJnZXQpOwogfQogCiB9CkBAIC01Nyw5
ICs2Myw5IEBAIFdlYkNvbXBvc2l0b3IqIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXI6OmZyb21J
ZGVudGlmaWVyKGludCBpZGVudGlmaWVyKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb21w
b3NpdG9yKj4oV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmZyb21JZGVudGlmaWVyKGlk
ZW50aWZpZXIpKTsKIH0KIAotUGFzc093blB0cjxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1w
bD4gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0ZShXZWJDb3JlOjpDQ0lucHV0
SGFuZGxlckNsaWVudCogaW5wdXRIYW5kbGVyQ2xpZW50KQorUGFzc093blB0cjxXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbD4gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0
ZShXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudCogaW5wdXRIYW5kbGVyQ2xpZW50LCBXZWJD
b3JlOjpDQ0dlc3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0KQogewotICAgIHJldHVybiBhZG9wdFB0
cihuZXcgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwoaW5wdXRIYW5kbGVyQ2xpZW50KSk7
CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbChp
bnB1dEhhbmRsZXJDbGllbnQsIHRhcmdldCkpOwogfQogCiBXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVyKiBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6ZnJvbUlkZW50aWZpZXIoaW50IGlk
ZW50aWZpZXIpCkBAIC03NywxMCArODMsMTEgQEAgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlciog
V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmZyb21JZGVudGlmaWVyKGludCBpZGUKICAg
ICByZXR1cm4gMDsKIH0KIAotV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OldlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsKENDSW5wdXRIYW5kbGVyQ2xpZW50KiBpbnB1dEhhbmRsZXJD
bGllbnQpCitXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6V2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGwoQ0NJbnB1dEhhbmRsZXJDbGllbnQqIGlucHV0SGFuZGxlckNsaWVudCwgQ0NH
ZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKICAgICA6IG1fY2xpZW50KDApCiAgICAgLCBtX2lk
ZW50aWZpZXIoc19uZXh0QXZhaWxhYmxlSWRlbnRpZmllcisrKQogICAgICwgbV9pbnB1dEhhbmRs
ZXJDbGllbnQoaW5wdXRIYW5kbGVyQ2xpZW50KQorICAgICwgbV9nZXN0dXJlQ3VydmVUYXJnZXQo
dGFyZ2V0KQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fZXhwZWN0U2Nyb2xsVXBkYXRlRW5kKGZh
bHNlKQogICAgICwgbV9leHBlY3RQaW5jaFVwZGF0ZUVuZChmYWxzZSkKQEAgLTEyNiw2ICsxMzMs
NyBAQCB2b2lkIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50
KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQogICAgICAgICBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsU3RhdHVzIHNjcm9sbFN0YXR1cyA9IG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3Jv
bGxCZWdpbihJbnRQb2ludCh3aGVlbEV2ZW50LngsIHdoZWVsRXZlbnQueSksIENDSW5wdXRIYW5k
bGVyQ2xpZW50OjpXaGVlbCk7CiAgICAgICAgIHN3aXRjaCAoc2Nyb2xsU3RhdHVzKSB7CiAgICAg
ICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQ6CisgICAgICAgICAg
ICAvLyBGSVhNRTogdXNlIFdoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSBoZXJlIHRvIGdl
dCBzbW9vdGggd2hlZWwgc2Nyb2xsaW5nPwogICAgICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGll
bnQtPnNjcm9sbEJ5KEludFNpemUoLXdoZWVsRXZlbnQuZGVsdGFYLCAtd2hlZWxFdmVudC5kZWx0
YVkpKTsKICAgICAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxFbmQoKTsKICAg
ICAgICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7CkBAIC0xNzAsOSArMTc4
LDMyIEBAIHZvaWQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0RXZl
bnQoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCiAjZW5kaWYKICAgICAgICAgaWYgKG1fc2Ny
b2xsU3RhcnRlZCkgewogICAgICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjcm9sbEVu
ZCgpOwotICAgICAgICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKICAgICAg
ICAgICAgIG1fc2Nyb2xsU3RhcnRlZCA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICAvLyBHZXN0dXJlU2Nyb2xsRW5kIHdpdGggbm9uLXplcm8gdmVsb2NpdHkgKGRl
bHRhWC9ZKSBzaWduYWxzIHN0YXJ0IG9mIEZsaW5nLgorICAgICAgICAgICAgY29uc3QgV2ViR2Vz
dHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViR2VzdHVyZUV2
ZW50Kj4oJmV2ZW50KTsKKyAgICAgICAgICAgIGlmIChnZXN0dXJlRXZlbnQuZGVsdGFYIHx8IGdl
c3R1cmVFdmVudC5kZWx0YVkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBXZWJHZXN0dXJlRXZl
bnQmIGdlc3R1cmVFdmVudCA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJHZXN0dXJlRXZlbnQqPigm
ZXZlbnQpOworICAgICAgICAgICAgICAgIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0
dXMgc2Nyb2xsU3RhdHVzID0gbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjcm9sbEJlZ2luKEludFBv
aW50KGdlc3R1cmVFdmVudC54LCBnZXN0dXJlRXZlbnQueSksIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpHZXN0dXJlKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHNjcm9sbFN0YXR1cykgeworICAg
ICAgICAgICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQ6IHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1faW5wdXRIYW5kbGVyQ2xpZW50LT5hY3RpdmVHZXN0
dXJlQW5pbWF0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2lucHV0SGFuZGxlckNs
aWVudC0+Y2xlYXJBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBmbGluZ0N1cnZlID0gVG91Y2hGbGluZ1Bs
YXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2ludChnZXN0dXJlRXZlbnQuZGVsdGFY
LCBnZXN0dXJlRXZlbnQuZGVsdGFZKSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5wdXRIYW5k
bGVyQ2xpZW50LT5zZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKENDQWN0aXZlR2VzdHVyZUFuaW1h
dGlvbjo6Y3JlYXRlKG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyOjpjcmVhdGUoZmxpbmdD
dXJ2ZS5yZWxlYXNlKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dlc3R1cmVDdXJ2ZVRhcmdldCkpOworICAg
ICAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElnbm9yZWQ6CisgICAgICAgICAgICAg
ICAgICAgIG1fY2xpZW50LT5kaWROb3RIYW5kbGVJbnB1dEV2ZW50KGZhbHNlIC8qIHNlbmRUb1dp
ZGdldCAqLyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBj
YXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ6CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGluY2hC
ZWdpbikgewogICAgICAgICBBU1NFUlQoIW1fZXhwZWN0UGluY2hVcGRhdGVFbmQpOwpAQCAtMTk2
LDcgKzIyNywxMyBAQCB2b2lkIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVJ
bnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQogICAgICAgICBtX2lucHV0SGFu
ZGxlckNsaWVudC0+cGluY2hHZXN0dXJlVXBkYXRlKGdlc3R1cmVFdmVudC5kZWx0YVgsIEludFBv
aW50KGdlc3R1cmVFdmVudC54LCBnZXN0dXJlRXZlbnQueSkpOwogICAgICAgICBtX2NsaWVudC0+
ZGlkSGFuZGxlSW5wdXRFdmVudCgpOwogICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChl
dmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVUYXBEb3duKSB7CisgICAgICAgIGlm
IChtX2lucHV0SGFuZGxlckNsaWVudC0+YWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpKQorICAgICAg
ICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPmNsZWFyQWN0aXZlR2VzdHVyZUFuaW1hdGlvbigp
OworICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOworICAgICAgICByZXR1
cm47CiAgICAgfQorCiAgICAgbV9jbGllbnQtPmRpZE5vdEhhbmRsZUlucHV0RXZlbnQodHJ1ZSAv
KiBzZW5kVG9XaWRnZXQgKi8pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuaAppbmRleCBhMmYxMzAy
NWQ5ZjE3YmZkMThjMTQ0ZjkzMTdkODJhNmVhMTA5ZWM1Li4yMzY4ZWQzNmQyZWRkOTE4YjA2YzE2
MmY2Zjk1NDhmZDljZmM5MmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmgKQEAgLTM4LDYgKzM4LDcg
QEAgY2xhc3MgTXV0ZXg7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENDR2VzdHVy
ZUN1cnZlVGFyZ2V0OwogY2xhc3MgQ0NJbnB1dEhhbmRsZXJDbGllbnQ7CiBjbGFzcyBDQ1RocmVh
ZDsKIH0KQEAgLTUwLDcgKzUxLDcgQEAgY2xhc3MgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNs
aWVudDsKIGNsYXNzIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsIDogcHVibGljIFdlYkNv
bXBvc2l0b3IsIHB1YmxpYyBXZWJDb3JlOjpDQ0lucHV0SGFuZGxlciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwpOwogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsPiBjcmVhdGUo
V2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbD4gY3JlYXRlKFdlYkNvcmU6OkNDSW5wdXRIYW5k
bGVyQ2xpZW50KiwgV2ViQ29yZTo6Q0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKICAgICBzdGF0aWMg
V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlciogZnJvbUlkZW50aWZpZXIoaW50IGlkZW50aWZpZXIp
OwogCiAgICAgdmlydHVhbCB+V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwoKTsKQEAgLTY0
LDExICs2NSwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KGRvdWJsZSBm
cmFtZUJlZ2luVGltZU1zKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBXZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVySW1wbChXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudCopOworICAgIGV4
cGxpY2l0IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKFdlYkNvcmU6OkNDSW5wdXRIYW5k
bGVyQ2xpZW50KiwgV2ViQ29yZTo6Q0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKIAogICAgIFdlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQqIG1fY2xpZW50OwogICAgIGludCBtX2lkZW50aWZp
ZXI7CiAgICAgV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQqIG1faW5wdXRIYW5kbGVyQ2xp
ZW50OworICAgIFdlYkNvcmU6OkNDR2VzdHVyZUN1cnZlVGFyZ2V0KiBtX2dlc3R1cmVDdXJ2ZVRh
cmdldDsKIAogI2lmbmRlZiBOREVCVUcKICAgICBib29sIG1fZXhwZWN0U2Nyb2xsVXBkYXRlRW5k
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUdlc3R1
cmVDdXJ2ZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUdl
c3R1cmVDdXJ2ZVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5NGI1YzBkNzEwMTIxYThjNzhiMDdlMjFl
MDNiYWY1ODczMzYzNTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1BsYXRmb3JtR2VzdHVyZUN1cnZlVGVzdC5jcHAKQEAgLTAsMCArMSwxNTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZS5oIgorCisjaW5jbHVkZSAiQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyLmgiCisjaW5jbHVkZSAiVG91Y2hGbGlu
Z1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCisjaW5jbHVkZSAiV2hlZWxGbGluZ1BsYXRmb3JtR2Vz
dHVyZUN1cnZlLmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgiCisj
aW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVz
cGFjZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFzcyBNb2NrUGxhdGZvcm1H
ZXN0dXJlQ3VydmVUYXJnZXQgOiBwdWJsaWMgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgewor
cHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9p
bnQmIGRlbHRhKQorICAgIHsKKyAgICAgICAgbV9jdW11bGF0aXZlRGVsdGEgPSBtX2N1bXVsYXRp
dmVEZWx0YSArIGRlbHRhOworICAgIH0KKworICAgIEludFBvaW50IGN1bXVsYXRpdmVEZWx0YSgp
IGNvbnN0IHsgcmV0dXJuICBtX2N1bXVsYXRpdmVEZWx0YTsgfQorICAgIHZvaWQgcmVzZXRDdW11
bGF0aXZlRGVsdGEoKSB7IG1fY3VtdWxhdGl2ZURlbHRhID0gSW50UG9pbnQoKTsgfQorCitwcml2
YXRlOgorICAgIEludFBvaW50IG1fY3VtdWxhdGl2ZURlbHRhOworfTsKKworVEVTVChQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZSwgZmxpbmdDdXJ2ZSkKK3sKKyAgICBNb2NrUGxhdGZvcm1HZXN0dXJlQ3Vy
dmVUYXJnZXQgdGFyZ2V0OworICAgIE93blB0cjxBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRp
b24+IGFuaW1hdGlvbiA9IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKDAs
IFdoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlKEZsb2F0UG9pbnQoMTAwLCAw
KSksICZ0YXJnZXQpOworCisgICAgLy8gTm90ZTogdGhlIGV4cGVjdGF0aW9ucyBiZWxvdyBhcmUg
ZGVwZW5kZW50IG9uIHRoZSB2YWx1ZSBvZiBzaWdtYSBoYXJkLWNvZGVkIGluIHRoZSBSYXlsZWln
aAorICAgIC8vICAgICAgIGN1cnZlLiBJZiBzaWdtYSBjaGFuZ2VzLCB0aGVzZSB0ZXN0IGV4cGVj
dGF0aW9ucyB3aWxsIGFsc28gY2hhbmdlLgorICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5p
bWF0ZSgwKSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDAuMjUpKTsKKyAg
ICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMC40NSkpOyAvLyBVc2Ugbm9uLXVuaWZv
cm0gdGljayBzcGFjaW5nLgorICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZSgwLjc1
KSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDEwMDApKTsKKyAgICBFWFBF
Q1RfRkFMU0UoYW5pbWF0aW9uLT5hbmltYXRlKDEwMDEpKTsKKyAgICAvLyBTaW5jZSB0aGUgUmF5
bGVpZ2ggQ0RGIG1heGVzIG91dCBhdCAxLCB3ZSBleHBlY3QgdGhlIGN1bXVsYXRpdmUgc2Nyb2xs
IGluY3JlbWVudHMgdG8KKyAgICAvLyBtYXRjaCB0aGUgaW5wdXQgdmVsb2NpdHkgcGFyYW1ldGVy
LgorICAgIC8vIFNpbmNlIHdlIGNhbiBiZSBvZmYgYnkgKy8tMC41IG9uIGVhY2ggY29udmVyc2lv
biB0byBpbnQgZm9yIHNldFNjcm9sbEluY3JlbWVudCwKKyAgICAvLyBwaWNrIHRoZSAnbmVhcm5l
c3MnIHRvIGJlIHdpdGhpbiB0aGUgbnVtYmVyIG9mIHRpbWVzIGFuaW1hdGUgcmV0dXJucyB0cnVl
LgorICAgIEVYUEVDVF9ORUFSKHRhcmdldC5jdW11bGF0aXZlRGVsdGEoKS54KCksIDEwMCwgMSk7
CisgICAgRVhQRUNUX0VRKHRhcmdldC5jdW11bGF0aXZlRGVsdGEoKS55KCksIDApOworCisgICAg
ZG91YmxlIGJhc2VUaW1lID0gNDIuNDI7CisgICAgYW5pbWF0aW9uID0gQWN0aXZlUGxhdGZvcm1H
ZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUoYmFzZVRpbWUsIFdoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZTo6Y3JlYXRlKEZsb2F0UG9pbnQoMTAwLCAwKSksICZ0YXJnZXQpOworICAgIHRhcmdl
dC5yZXNldEN1bXVsYXRpdmVEZWx0YSgpOworCisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5h
bmltYXRlKGJhc2VUaW1lICsgMC4zNSkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5p
bWF0ZShiYXNlVGltZSArIDEuMzUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbWF0aW9uLT5hbmlt
YXRlKGJhc2VUaW1lICsgMTAwMCkpOworICAgIEVYUEVDVF9ORUFSKHRhcmdldC5jdW11bGF0aXZl
RGVsdGEoKS54KCksIDEwMCwgMSk7CisKKyAgICBhbmltYXRpb24gPSBBY3RpdmVQbGF0Zm9ybUdl
c3R1cmVBbmltYXRpb246OmNyZWF0ZSgwLCBXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6
OmNyZWF0ZShGbG9hdFBvaW50KDUwLCAxNTApKSwgJnRhcmdldCk7CisgICAgdGFyZ2V0LnJlc2V0
Q3VtdWxhdGl2ZURlbHRhKCk7CisKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUo
MCkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZSgwLjI1KSk7CisgICAgRVhQ
RUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDAuNDUpKTsKKyAgICBFWFBFQ1RfVFJVRShhbmlt
YXRpb24tPmFuaW1hdGUoMC43NSkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0
ZSgxMDAwKSk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW1hdGlvbi0+YW5pbWF0ZSgxMDAxKSk7Cisg
ICAgRVhQRUNUX05FQVIodGFyZ2V0LmN1bXVsYXRpdmVEZWx0YSgpLngoKSwgNTAsIDEpOworICAg
IEVYUEVDVF9ORUFSKHRhcmdldC5jdW11bGF0aXZlRGVsdGEoKS55KCksIDE1MCwgMSk7Cit9CisK
K1RFU1QoUGxhdGZvcm1HZXN0dXJlQ3VydmUsIGZsaW5nQ3VydmVUb3VjaCkKK3sKKyAgICBNb2Nr
UGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgdGFyZ2V0OworICAgIE93blB0cjxBY3RpdmVQbGF0
Zm9ybUdlc3R1cmVBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFu
aW1hdGlvbjo6Y3JlYXRlKDAsIFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRl
KEZsb2F0UG9pbnQoMTAwMCwgMCkpLCAmdGFyZ2V0KTsKKworICAgIC8vIE5vdGU6IHRoZSBleHBl
Y3RhdGlvbnMgYmVsb3cgYXJlIGRlcGVuZGVudCBvbiB0aGUgdmFsdWUgb2Ygc2lnbWEgaGFyZC1j
b2RlZCBpbiB0aGUgUmF5bGVpZ2gKKyAgICAvLyAgICAgICBjdXJ2ZS4gSWYgc2lnbWEgY2hhbmdl
cywgdGhlc2UgdGVzdCBleHBlY3RhdGlvbnMgd2lsbCBhbHNvIGNoYW5nZS4KKyAgICBFWFBFQ1Rf
VFJVRShhbmltYXRpb24tPmFuaW1hdGUoMCkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+
YW5pbWF0ZSgwLjI1KSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDAuNDUp
KTsgLy8gVXNlIG5vbi11bmlmb3JtIHRpY2sgc3BhY2luZy4KKyAgICBFWFBFQ1RfVFJVRShhbmlt
YXRpb24tPmFuaW1hdGUoMC43NSkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0
ZSgwLjkpKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMTAwMCkpOworICAg
IEVYUEVDVF9GQUxTRShhbmltYXRpb24tPmFuaW1hdGUoMTAwMSkpOworICAgIC8vIFNpbmNlIHdl
IGNhbiBiZSBvZmYgYnkgKy8tMC41IG9uIGVhY2ggY29udmVyc2lvbiB0byBpbnQgZm9yIHNldFNj
cm9sbEluY3JlbWVudCwKKyAgICAvLyBwaWNrIHRoZSAnbmVhcm5lc3MnIHRvIGJlIHdpdGhpbiB0
aGUgNSAqIG51bWJlciBvZiB0aW1lcyBhbmltYXRlIHJldHVybnMgdHJ1ZS4KKyAgICBFWFBFQ1Rf
TkVBUih0YXJnZXQuY3VtdWxhdGl2ZURlbHRhKCkueCgpLCAxMDAwLCAxKTsKKyAgICBFWFBFQ1Rf
RVEodGFyZ2V0LmN1bXVsYXRpdmVEZWx0YSgpLnkoKSwgMCk7Cit9CisKKy8vIFRoZSBmb2xsb3dp
bmcgdGVzdHMgdmVyaWZ5IG9wZXJhdGlvbiBvZiB0aGUgUGxhdGZvcm1HZXN0dXJlQ3VydmUgaW4g
dGhlIENDIGZyYW1ld29yay4KKy8vIFNwZWNpZmljYWxseSwgaXQgdmVyaWZpZXMgdGhhdCB0aGUg
YWRhcHRlcnMgYXJlIHByb2R1Y2luZyB0aGUgc2FtZSBjdXJ2ZSBvdXRwdXQuCisKK2NsYXNzIE1v
Y2tDQ0dlc3R1cmVDdXJ2ZVRhcmdldCA6IHB1YmxpYyBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbEluY3JlbWVudChjb25zdCBJbnRQb2lu
dCYgZGVsdGEpCisgICAgeworICAgICAgICBtX2N1bXVsYXRpdmVEZWx0YSA9IG1fY3VtdWxhdGl2
ZURlbHRhICsgZGVsdGE7CisgICAgfQorCisgICAgSW50UG9pbnQgY3VtdWxhdGl2ZURlbHRhKCkg
Y29uc3QgeyByZXR1cm4gIG1fY3VtdWxhdGl2ZURlbHRhOyB9CisgICAgdm9pZCByZXNldEN1bXVs
YXRpdmVEZWx0YSgpIHsgbV9jdW11bGF0aXZlRGVsdGEgPSBJbnRQb2ludCgpOyB9CisKK3ByaXZh
dGU6CisgICAgSW50UG9pbnQgbV9jdW11bGF0aXZlRGVsdGE7Cit9OworCitURVNUKFBsYXRmb3Jt
R2VzdHVyZUN1cnZlLCBjY0ZsaW5nQ3VydmUpCit7CisgICAgTW9ja0NDR2VzdHVyZUN1cnZlVGFy
Z2V0IHRhcmdldDsKKyAgICBPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGZsaW5nQ3VydmUg
PSBXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShGbG9hdFBvaW50KDEwMCwg
MCkpOworICAgIE93blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+IGFuaW1hdGlvbiA9IEND
QWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKDAsIFBsYXRmb3JtR2VzdHVyZUN1cnZlVG9D
Q0dlc3R1cmVDdXJ2ZUFkYXB0ZXI6OmNyZWF0ZShmbGluZ0N1cnZlLnJlbGVhc2UoKSksICZ0YXJn
ZXQpOworCisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDApKTsKKyAgICBFWFBF
Q1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMC4yNSkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1h
dGlvbi0+YW5pbWF0ZSgwLjQ1KSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRl
KDAuNzUpKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMTAwMCkpOworICAg
IEVYUEVDVF9GQUxTRShhbmltYXRpb24tPmFuaW1hdGUoMTAwMSkpOworICAgIC8vIFNpbmNlIHdl
IGNhbiBiZSBvZmYgYnkgKy8tMC41IG9uIGVhY2ggY29udmVyc2lvbiB0byBpbnQgZm9yIHNldFNj
cm9sbEluY3JlbWVudCwKKyAgICAvLyBwaWNrIHRoZSAnbmVhcm5lc3MnIHRvIGJlIHdpdGhpbiB0
aGUgbnVtYmVyIG9mIHRpbWVzIGFuaW1hdGUgcmV0dXJucyB0cnVlLgorICAgIEVYUEVDVF9ORUFS
KHRhcmdldC5jdW11bGF0aXZlRGVsdGEoKS54KCksIDEwMCwgMSk7CisgICAgRVhQRUNUX0VRKHRh
cmdldC5jdW11bGF0aXZlRGVsdGEoKS55KCksIDApOworfQorCit9OyAvLyBuYW1lc3BhY2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29t
cG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcAppbmRleCA0NTkyNTVlMDJhMjgzMzE5ZGZi
NWU5MjlhOGQ4ZjVkOTkzNWE0NDRkLi5iNWJhNTJiYWUyYjhmNmViZTkyYmI0MzViMWVhYjcxOTU3
ZGM4NGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIldlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJJbnB1dEV2ZW50LmgiCisjaW5j
bHVkZSAiY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NJbnB1
dEhhbmRsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCiAKQEAgLTQx
LDcgKzQyLDcgQEAgdXNpbmcgV2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDsK
IAogbmFtZXNwYWNlIHsKIAotY2xhc3MgTW9ja0lucHV0SGFuZGxlckNsaWVudCA6IHB1YmxpYyBX
ZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudCB7CitjbGFzcyBNb2NrSW5wdXRIYW5kbGVyQ2xp
ZW50IDogcHVibGljIFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50LCBwdWJsaWMgV2ViQ29y
ZTo6Q0NHZXN0dXJlQ3VydmVUYXJnZXQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1vY2tJ
bnB1dEhhbmRsZXJDbGllbnQpOwogcHVibGljOgogICAgIE1vY2tJbnB1dEhhbmRsZXJDbGllbnQo
KQpAQCAtNDksNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9waW5jaFN0YXJ0ZWQoZmFs
c2UpCiAgICAgICAgICwgbV9waW5jaEVuZGVkKGZhbHNlKQogICAgICAgICAsIG1fcGluY2hNYWdu
aWZpY2F0aW9uKDApCisgICAgICAgICwgbV9zY3JvbGxCeUNhbGxlZChmYWxzZSkKICAgICB7CiAg
ICAgfQogICAgIHZpcnR1YWwgfk1vY2tJbnB1dEhhbmRsZXJDbGllbnQoKSB7IH0KQEAgLTU4LDIw
ICs2MCwyNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwaW5jaFN0YXJ0ZWQoKSBjb25zdCB7IHJldHVy
biBtX3BpbmNoU3RhcnRlZDsgfQogICAgIGJvb2wgcGluY2hFbmRlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGluY2hFbmRlZDsgfQogICAgIGZsb2F0IHBpbmNoTWFnaW5pZmNhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcGluY2hNYWduaWZpY2F0aW9uOyB9CisgICAgYm9vbCBzY3JvbGxCeUNhbGxlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsQnlDYWxsZWQ7IH0KKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHApIHsgc2Nyb2xsQnko
V2ViQ29yZTo6SW50U2l6ZShwLngoKSwgcC55KCkpKTsgfQogCiAgICAgdm9pZCByZXNldFBpbmNo
KCkKICAgICB7Ci0gICAgICAgIG1fcGluY2hTdGFydGVkID0gbV9waW5jaEVuZGVkID0gZmFsc2U7
CisgICAgICAgIG1fcGluY2hTdGFydGVkID0gbV9waW5jaEVuZGVkID0gbV9zY3JvbGxCeUNhbGxl
ZCA9IGZhbHNlOwogICAgICAgICBtX3BpbmNoTWFnbmlmaWNhdGlvbiA9IDA7CiAgICAgfQogCisg
ICAgdmlydHVhbCBXZWJDb3JlOjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24qIGFjdGl2ZUdlc3R1
cmVBbmltYXRpb24oKSB7IHJldHVybiBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24uZ2V0KCk7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlR2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRyPFdl
YkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gYW5pbWF0aW9uKSB7IG1fYWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbiA9IGFuaW1hdGlvbjsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGVhckFjdGl2
ZUdlc3R1cmVBbmltYXRpb24oKSB7IG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5jbGVhcigpOyB9
CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCkgT1ZFUlJJREUg
eyB9CiAgICAgdmlydHVhbCBTY3JvbGxTdGF0dXMgc2Nyb2xsQmVnaW4oY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmLCBXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSW5wdXRUeXBl
KSBPVkVSUklERQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc2Nyb2xsU3RhdHVzOwogICAgIH0K
LSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIE9WRVJS
SURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JikgT1ZFUlJJREUgeyBtX3Njcm9sbEJ5Q2FsbGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9p
ZCBzY3JvbGxFbmQoKSBPVkVSUklERSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwaW5jaEdlc3R1
cmVCZWdpbigpIE9WRVJSSURFCkBAIC05Niw2ICsxMDUsOSBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9waW5jaFN0YXJ0ZWQ7CiAgICAgYm9vbCBtX3BpbmNoRW5kZWQ7CiAgICAgZmxvYXQgbV9waW5j
aE1hZ25pZmljYXRpb247CisgICAgYm9vbCBtX3Njcm9sbEJ5Q2FsbGVkOworCisgICAgT3duUHRy
PFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gbV9hY3RpdmVHZXN0dXJlQW5pbWF0
aW9uOwogfTsKIAogY2xhc3MgTW9ja1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQgOiBw
dWJsaWMgV2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50IHsKQEAgLTE0Nyw3
ICsxNTksNyBAQCBURVNUKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLCBmcm9tSWRlbnRp
ZmllcikKIAogICAgIGludCBjb21wb3NpdG9ySWRlbnRpZmllciA9IC0xOwogICAgIHsKLSAgICAg
ICAgT3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsPiBpbnB1dEhhbmRsZXIgPSBX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6Y3JlYXRlKDApOworICAgICAgICBPd25QdHI8
V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw+IGlucHV0SGFuZGxlciA9IFdlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVhdGUoMCwgMCk7CiAgICAgICAgIGNvbXBvc2l0b3JJZGVu
dGlmaWVyID0gaW5wdXRIYW5kbGVyLT5pZGVudGlmaWVyKCk7CiAgICAgICAgIC8vIFRoZSBjb21w
b3NpdG9yIHdlIGp1c3QgY3JlYXRlZCBzaG91bGQgYmUgbG9jYXRhYmxlLgogICAgICAgICBFWFBF
Q1RfRVEoaW5wdXRIYW5kbGVyLmdldCgpLCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyOjpmcm9t
SWRlbnRpZmllcihjb21wb3NpdG9ySWRlbnRpZmllcikpOwpAQCAtMTcxLDcgKzE4Myw3IEBAIFRF
U1QoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwsIGdlc3R1cmVTY3JvbGwpCiAjZW5kaWYK
IAogICAgIE1vY2tJbnB1dEhhbmRsZXJDbGllbnQgbW9ja0lucHV0SGFuZGxlcjsKLSAgICBPd25Q
dHI8V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw+IGlucHV0SGFuZGxlciA9IFdlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVhdGUoJm1vY2tJbnB1dEhhbmRsZXIpOworICAgIE93
blB0cjxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbD4gaW5wdXRIYW5kbGVyID0gV2ViQ29t
cG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0ZSgmbW9ja0lucHV0SGFuZGxlciwgMCk7CiAg
ICAgTW9ja1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQgbW9ja0NsaWVudDsKICAgICBp
bnB1dEhhbmRsZXItPnNldENsaWVudCgmbW9ja0NsaWVudCk7CiAKQEAgLTIzMyw3ICsyNDUsNyBA
QCBURVNUKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLCBnZXN0dXJlUGluY2gpCiAjZW5k
aWYKIAogICAgIE1vY2tJbnB1dEhhbmRsZXJDbGllbnQgbW9ja0lucHV0SGFuZGxlcjsKLSAgICBP
d25QdHI8V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw+IGlucHV0SGFuZGxlciA9IFdlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVhdGUoJm1vY2tJbnB1dEhhbmRsZXIpOworICAg
IE93blB0cjxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbD4gaW5wdXRIYW5kbGVyID0gV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0ZSgmbW9ja0lucHV0SGFuZGxlciwgMCk7
CiAgICAgTW9ja1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQgbW9ja0NsaWVudDsKICAg
ICBpbnB1dEhhbmRsZXItPnNldENsaWVudCgmbW9ja0NsaWVudCk7CiAKQEAgLTI4MCw0ICsyOTIs
NDYgQEAgVEVTVChXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCwgZ2VzdHVyZVBpbmNoKQog
ICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKIH0KIAorVEVTVChXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbCwgZ2VzdHVyZUZsaW5nKQoreworICAgIFdlYktpdDo6V2Vi
Q29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gV2ViQ29t
cG9zaXRvcklucHV0SGFuZGxlciBBUElzIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBjb21w
b3NpdG9yIHRocmVhZC4KKyAgICBXZWJDb3JlOjpEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgYWx3
YXlzSW1wbFRocmVhZDsKKyNlbmRpZgorCisgICAgTW9ja0lucHV0SGFuZGxlckNsaWVudCBtb2Nr
SW5wdXRIYW5kbGVyOworICAgIE93blB0cjxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbD4g
aW5wdXRIYW5kbGVyID0gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0ZSgmbW9j
a0lucHV0SGFuZGxlciwgJm1vY2tJbnB1dEhhbmRsZXIpOworICAgIE1vY2tXZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVyQ2xpZW50IG1vY2tDbGllbnQ7CisgICAgaW5wdXRIYW5kbGVyLT5zZXRDbGll
bnQoJm1vY2tDbGllbnQpOworCisgICAgV2ViS2l0OjpXZWJHZXN0dXJlRXZlbnQgZ2VzdHVyZTsK
KworICAgIC8vIE5lZWQgc2Nyb2xsQmVnaW4gYmVmb3JlIHNlbmRpbmcgYSBzY3JvbGxFbmQgZXZl
bnQuCisgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Ny
b2xsQmVnaW47CisgICAgaW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwor
ICAgIEVYUEVDVF9UUlVFKG1vY2tDbGllbnQuaGFuZGxlZCgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
bW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7CisgICAgbW9ja0NsaWVudC5yZXNldCgpOworCisg
ICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5k
OworICAgIGdlc3R1cmUuZGVsdGFYID0gMjsKKyAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0
RXZlbnQoZ2VzdHVyZSk7CisgICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5oYW5kbGVkKCkpOwor
ICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKKyAgICBBU1NFUlRf
VFJVRShtb2NrSW5wdXRIYW5kbGVyLmFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKG1vY2tJbnB1dEhhbmRsZXIuc2Nyb2xsQnlDYWxsZWQoKSk7CisgICAgbW9ja0lu
cHV0SGFuZGxlci5hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCktPmFuaW1hdGUoMC4wMDEpOworICAg
IEVYUEVDVF9UUlVFKG1vY2tJbnB1dEhhbmRsZXIuc2Nyb2xsQnlDYWxsZWQoKSk7CisgICAgbW9j
a0NsaWVudC5yZXNldCgpOworCisgICAgLy8gVmVyaWZ5IHRoYXQgYSBHZXN0dXJlVGFwRG93biBk
dXJpbmcgYW4gYW5pbWF0aW9uIGNhbmNlbHMgaXQuCisgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0
OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwRG93bjsKKyAgICBpbnB1dEhhbmRsZXItPmhhbmRs
ZUlucHV0RXZlbnQoZ2VzdHVyZSk7CisgICAgRVhQRUNUX0ZBTFNFKG1vY2tJbnB1dEhhbmRsZXIu
YWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpKTsKKworICAgIGlucHV0SGFuZGxlci0+c2V0Q2xpZW50
KDApOworICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKK30KKwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130838</attachid>
            <date>2012-03-08 10:07:10 -0800</date>
            <delta_ts>2012-03-08 19:19:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79827-20120308130709.patch</filename>
            <type>text/plain</type>
            <size>43698</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWVmNmVhZjc3M2Y5NWRm
NTRiY2NjOGUxOTAyMmE1YjlhYjI4MDBkNC4uYzYwYjRjYjY3NDQ2YTYxYWYyZDdlYmM4ZTVhZDQz
OWFmYWY0MGU1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDEyLTAzLTA4ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEltcGxlbWVudCBzY3JvbGwgcGh5c2ljcyBhcmNoaXRlY3R1cmUgZm9yIGltcGwvbWFpbiB0
aHJlYWQgW25vdCBmb3IgcmV2aWV3IHlldF0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc5ODI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVW5pdHRlc3RzIGFkZGVkLCBwbHVzIGZvbGxvdy1vbiBwYXRjaCBm
cm9tIHJqa3JvZWdlIHdpbGwgYWRkIGxheW91dCB0ZXN0cy4KKworICAgICAgICBQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZSBpcyBhIGZyYW1ld29yayB0byBzZXBhcmF0ZSB0aGUgcGh5c2ljYWwgc2ltdWxh
dGlvbiBmcm9tIGZvciBnZXN0dXJlCisgICAgICAgIGFuaW1hdGlvbiBmcm9tIGNvbnRyb2wgY29u
Y2VybnMuIFRoaXMgYWxsb3dzIHRoZSBwaHlzaWNzIHRvIGJlIHJldXNlZCBpbiBhbHRlcm5hdGUg
cGxhY2VzLgorICAgICAgICBBdCBwcmVzZW50LCB0aGUgZnJhbWV3b3JrIHdpbGwgYmUgYXBwbGll
ZCBpbiBTY3JvbGxBbmltYXRvck5vbmUgYW5kIHRoZSBDaHJvbWUgQ29tcG9zaXRvci4KKworICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9BY3RpdmVQbGF0Zm9ybUdl
c3R1cmVBbmltYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjpBY3RpdmVQbGF0Zm9y
bUdlc3R1cmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlUGxhdGZvcm1HZXN0
dXJlQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9BY3RpdmVQbGF0Zm9y
bUdlc3R1cmVBbmltYXRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vUGxh
dGZvcm1HZXN0dXJlQ3VydmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFBsYXRmb3JtR2VzdHVyZUN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVy
ZUN1cnZlOjp+UGxhdGZvcm1HZXN0dXJlQ3VydmUpOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRm
b3JtR2VzdHVyZUN1cnZlVGFyZ2V0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldDo6flBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hGbGluZ1Bs
YXRmb3JtR2VzdHVyZUN1cnZlOjpUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUpOgorICAg
ICAgICAoV2ViQ29yZTo6VG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjp+VG91Y2hGbGlu
Z1BsYXRmb3JtR2VzdHVyZUN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRmxpbmdQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZTo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL1RvdWNoRmxpbmdQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9X
aGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZl
OjpXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6V2hl
ZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjp+V2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1
cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OldoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6
YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL1doZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2hlZWxGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpDQ0FjdGl2ZUdlc3R1
cmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9u
Ojp+Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZl
R2VzdHVyZUFuaW1hdGlvbjo6YW5pbWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDR2VzdHVyZUN1cnZlLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0dlc3R1cmVDdXJ2ZVRhcmdldCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0dlc3R1cmVDdXJ2ZVRhcmdldDo6fkNDR2VzdHVyZUN1cnZlVGFyZ2V0
KToKKyAgICAgICAgKENDR2VzdHVyZUN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDR2VzdHVy
ZUN1cnZlOjp+Q0NHZXN0dXJlQ3VydmUpOgorCiAyMDEyLTAzLTA4ICBJbHlhIFRpa2hvbm92c2t5
ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIHNpbmdsZSBsaW5l
IGZpeC4gVGhlIGZ1bmN0aW9uIGhhZCB0byByZXR1cm4gYSBoYXNoIGJ1dCBpdCByZXR1cm5lZCBq
dXN0IGFkZHJlc3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDc2MDczYWYyZmU1YTBk
MmNiZTllMTdmYTk1MDRjZWFkY2FmYTZhOGUuLmY2NTE5YmI5NzRmNWUyNmMwYjczOGEzYTE2MmRk
ZDRjZWFiNTMwNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTItMDMtMDggIFcuIEphbWVzIE1hY0xlYW4gIDx3am1hY2xlYW5AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IHNjcm9sbCBwaHlzaWNzIGFyY2hpdGVjdHVy
ZSBmb3IgaW1wbC9tYWluIHRocmVhZCBbbm90IGZvciByZXZpZXcgeWV0XQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk4MjcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAg
ICAqIHRlc3RzL1BsYXRmb3JtR2VzdHVyZUN1cnZlVGVzdC5jcHA6IEFkZGVkLgorCiAyMDEyLTAz
LTA3ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1vdmUg
bWVhbmluZ2xlc3MgY29kZSBpbiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnByZWZlcnJl
ZENvbnRlbnRXaWR0aCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMDZiOWY2MTI2YjNkOTBlYWZjMGZj
Njc3YTZhYzk5NmJmN2FkMDc3YS4uMTIyZmNjYTgwMDRjZmRiZDk1OWZmYWYyMWRmNTA1M2VlODRj
ZDEyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjkwNCw2ICsyOTA0LDggQEAKICAgICAgICAgICAg
ICdwYWdlL3dpbmNlL0ZyYW1lV2luQ0UuY3BwJywKICAgICAgICAgICAgICdwYWdlL3d4L0RyYWdD
b250cm9sbGVyV3guY3BwJywKICAgICAgICAgICAgICdwYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9u
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0
aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0FyZW5hLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vQXJlbmEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVt
LmNwcCcsCkBAIC0yOTQ5LDYgKzI5NTEsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL01lbW9y
eVByZXNzdXJlSGFuZGxlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL01JTUVUeXBlUmVn
aXN0cnkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QYXN0ZWJvYXJkLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Bs
YXRmb3JtVG91Y2hFdmVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybVRvdWNo
UG9pbnQuaCcsCkBAIC0yOTgwLDggKzI5ODMsMTIgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9U
aHJlYWRUaW1lcnMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9UaHJlYWRUaW1lcnMuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vVGltZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vVVVJRC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1VVSUQuaCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL1dpZGdldC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Fu
aW1hdGlvbi9BbmltYXRpb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9hbmltYXRpb24v
QW5pbWF0aW9uTGlzdC5jcHAnLApAQCAtMzQxMiw2ICszNDE5LDggQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFu
aW1hdGlvbi5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3Vy
dmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmlt
YXRpb25FdmVudHMuY3BwJywKQEAgLTM0MzAsNiArMzQzOSw4IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNv
bnRyb2xsZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NHZXN0dXJlQ3VydmUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NHZXN0dXJlQ3VydmVUYXJnZXQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9BY3RpdmVQbGF0Zm9ybUdlc3R1cmVB
bmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0
dXJlQW5pbWF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWFjNWM5YzM2ZTcyODQ3OTA4Y2U3ZDc5MDE1
M2EyM2FlOTE0NzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQWN0aXZlUGxhdGZvcm1HZXN0dXJl
QW5pbWF0aW9uLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGFzc093blB0cjxBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24+IEFjdGl2ZVBsYXRm
b3JtR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKGRvdWJsZSBzdGFydFRpbWUsIFBhc3NPd25QdHI8
UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGN1cnZlLCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCog
dGFyZ2V0KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQWN0aXZlUGxhdGZvcm1HZXN0dXJl
QW5pbWF0aW9uKHN0YXJ0VGltZSwgY3VydmUsIHRhcmdldCkpOworfQorCitBY3RpdmVQbGF0Zm9y
bUdlc3R1cmVBbmltYXRpb246OkFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbihkb3VibGUg
c3RhcnRUaW1lLCBQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBjdXJ2ZSwgUGxhdGZv
cm1HZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKKyAgICA6IG1fc3RhcnRUaW1lKHN0YXJ0VGlt
ZSkKKyAgICAsIG1fY3VydmUoY3VydmUpCisgICAgLCBtX3RhcmdldCh0YXJnZXQpCit7Cit9CisK
K2Jvb2wgQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjphbmltYXRlKGRvdWJsZSB0aW1l
KQoreworICAgIC8vIEFsbCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZXMgYXNzdW1lIHplcm8tYmFzZWQg
dGltZSwgc28gd2Ugc3VidHJhY3QKKyAgICAvLyB0aGUgYW5pbWF0aW9uIHN0YXJ0IHRpbWUgYmVm
b3JlIHBhc3NpbmcgdG8gdGhlIGN1cnZlLgorICAgIHJldHVybiBtX2N1cnZlLT5hcHBseSh0aW1l
IC0gbV9zdGFydFRpbWUsIG1fdGFyZ2V0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJl
QW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9BY3RpdmVQbGF0Zm9ybUdlc3R1
cmVBbmltYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MTU3M2I4NTZhMDdmYjIzNmQzNDZhYWYyZjFjMTE2
YWVhOWEzMzBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQWN0
aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uX2gKKyNkZWZpbmUgQWN0aXZlUGxh
dGZvcm1HZXN0dXJlQW5pbWF0aW9uX2gKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBs
YXRmb3JtR2VzdHVyZUN1cnZlOworY2xhc3MgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQ7CisK
Ky8vIEltcGxlbWVudHMgYSBnZXN0dXJlIGFuaW1hdGlvbiAoZmxpbmcgc2Nyb2xsLCBldGMuKSB1
c2luZyBhIGN1cnZlIHdpdGggYSBnZW5lcmljIGludGVyZmFjZQorLy8gdG8gZGVmaW5lIHRoZSBh
bmltYXRpb24gcGFyYW1ldGVycyBhcyBhIGZ1bmN0aW9uIG9mIHRpbWUsIGFuZCBhcHBsaWVzIHRo
ZSBhbmltYXRpb24KKy8vIHRvIGEgdGFyZ2V0LCBhZ2FpbiB2aWEgYSBnZW5lcmljIGludGVyZmFj
ZS4gSXQgaXMgYXNzdW1lZCB0aGF0IGFuaW1hdGUoKSBpcyBjYWxsZWQKKy8vIG9uIGEgbW9yZS1v
ci1sZXNzIHJlZ3VsYXIgYmFzaXMgYnkgdGhlIG93bmVyLgorY2xhc3MgQWN0aXZlUGxhdGZvcm1H
ZXN0dXJlQW5pbWF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxBY3RpdmVQ
bGF0Zm9ybUdlc3R1cmVBbmltYXRpb24+IGNyZWF0ZShkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3du
UHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqKTsK
KworICAgIHZpcnR1YWwgYm9vbCBhbmltYXRlKGRvdWJsZSB0aW1lKTsKKworcHJpdmF0ZToKKyAg
ICBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24oZG91YmxlIHN0YXJ0VGltZSwgUGFzc093
blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4sIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0Kik7
CisKKyAgICBkb3VibGUgbV9zdGFydFRpbWU7CisgICAgT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1
cnZlPiBtX2N1cnZlOworICAgIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0KiBtX3RhcmdldDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlQ3VydmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MjIxOTkxNDc4
ZWE5YzE4OTNmOTZiM2ZmMGVlZDdlZjY0Yzc3YzQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlQ3VydmUuaApAQCAtMCwwICsxLDQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsYXRmb3JtR2VzdHVyZUN1cnZlX2gKKyNkZWZpbmUg
UGxhdGZvcm1HZXN0dXJlQ3VydmVfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBs
YXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0OworCisvLyBBYnN0cmFjdCBpbnRlcmZhY2UgZm9yIGN1
cnZlcyB1c2VkIGJ5IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi4gQQorLy8gUGxhdGZv
cm1HZXN0dXJlQ3VydmUgZGVmaW5lcyB0aGUgYW5pbWF0aW9uIHBhcmFtZXRlcnMgYXMgYSBmdW5j
dGlvbiBvZiB0aW1lCisvLyAoemVyby1iYXNlZCksIGFuZCBhcHBsaWVzIHRoZSBwYXJhbWV0ZXJz
IGRpcmVjdGx5IHRvIHRoZSB0YXJnZXQgb2YgdGhlCisvLyBhbmltYXRpb24uCitjbGFzcyBQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UGxhdGZvcm1HZXN0dXJl
Q3VydmUoKSB7IH0KKworICAgIC8vIFJldHVybnMgZmFsc2UgaWYgY3VydmUgaGFzIGZpbmlzaGVk
IGFuZCBjYW4gbm8gbG9uZ2VyIGJlIGFwcGxpZWQuCisgICAgdmlydHVhbCBib29sIGFwcGx5KGRv
dWJsZSB0aW1lLCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCopID0gMDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODA4NTQ4ZWRj
ZDUzMGEzNDZiMTkwNjc5ZDJiNmFiYTkzZDY0YjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaApAQCAtMCwwICsx
LDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0
X2gKKyNkZWZpbmUgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRfaAorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEludFBvaW50OworCitjbGFzcyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRh
cmdldCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQo
KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9p
bnQmKSA9IDA7CisgICAgLy8gRklYTUU6IGFkZCBpbnRlcmZhY2VzIGZvciBzZXRTY3JvbGwoKSwg
c2V0UGFnZVNjYWxlQW5kU2Nyb2xsKCksIGV0Yy4KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaEZs
aW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVG91
Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZWY4N2M5Mzc2ZGUz
OTc3NzcwNmJlYzEzM2NkYzA2ZTVjYTliNjlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcApAQCAtMCww
ICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKworI2luY2x1ZGUgIlBsYXRmb3Jt
R2VzdHVyZUN1cnZlVGFyZ2V0LmgiCisjaW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK1Bhc3NPd25QdHI8UGxhdGZvcm1HZXN0
dXJlQ3VydmU+IFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlKGNvbnN0IEZs
b2F0UG9pbnQmIHZlbG9jaXR5KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgVG91Y2hGbGlu
Z1BsYXRmb3JtR2VzdHVyZUN1cnZlKHZlbG9jaXR5KSk7Cit9CisKK1RvdWNoRmxpbmdQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZTo6VG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKGNvbnN0IEZsb2F0
UG9pbnQmIHZlbG9jaXR5KQorICAgIDogbV92ZWxvY2l0eSh2ZWxvY2l0eSkKKyAgICAsIG1fdGlt
ZVNjYWxlRmFjdG9yKDEwMDAgLyBtYXgoMS5mLCBtYXgoYWJzKHZlbG9jaXR5LngoKSksIGFicyh2
ZWxvY2l0eS55KCkpKSkpCit7CisgICAgQVNTRVJUKGFicyh2ZWxvY2l0eS54KCkpIHx8IGFicyh2
ZWxvY2l0eS55KCkpKTsKK30KKworVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjp+VG91
Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKCkKK3sKK30KKworYm9vbCBUb3VjaEZsaW5nUGxh
dGZvcm1HZXN0dXJlQ3VydmU6OmFwcGx5KGRvdWJsZSB0aW1lLCBQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZVRhcmdldCogdGFyZ2V0KQoreworICAgIC8vIEhlcmUgd2UgaW1wbGVtZW50IGEgY3ViaWMgYmV6
aWVyIGN1cnZlIHdpdGggcGFyYW1ldGVycyBbMSAxIDAgMF0gd2hpY2ggZ2l2ZXMKKyAgICAvLyB2
KDApID0gMSwgYSgwKSA9IDAsIHYoMSkgPSAwLCBhKDEpID0gMC4gVGhlIGN1cnZlIGlzIHNjYWxl
ZCBieSB0aGUgaW5pdGlhbAorICAgIC8vIHZlbG9jaXR5LCBhbmQgdGhlIHRpbWUgcGFyYW1ldGVy
IGlzIHJlLXNjYWxlZCBzbyB0aGF0IGxhcmdlciBpbml0aWFsIHZlbG9jaXRpZXMKKyAgICAvLyBs
ZWFkIHRvIGxvbmdlciBpbml0aWFsIGFuaW1hdGlvbnMuIFRoaXMgc2hvdWxkIGFsbG93IHRoZSBh
bmltYXRpb24gdG8gc21vb3RobHkKKyAgICAvLyBjb250aW51ZSB0aGUgdmVsb2NpdHkgYXQgdGhl
IGVuZCBvZiB0aGUgR2VzdHVyZVNjcm9sbCwgYW5kIHNtb290aGx5IGNvbWUgdG8gYSByZXN0Cisg
ICAgLy8gYXQgdGhlIGVuZC4gRmluYWxseSwgd2UgaGF2ZSBpbnRlZ3JhdGVkIHRoZSBjdXJ2ZSBz
byB3ZSBjYW4gZGVhbCB3aXRoIGRpc3BsYWNlbWVudAorICAgIC8vIGFzIGEgZnVuY3Rpb24gb2Yg
dGltZSwgYW5kIG5vdCB2ZWxvY2l0eS4KKyAgICAvLyBGaW5hbGx5LCB3ZSBwbGFjZSBhIGNvbnN0
YW50IHZlbG9jaXR5IGZyb20gdHMgPSAwIC4uIDAuNSwgYW5kIHJ1biB0aGUgQmV6aWVyIGN1cnZl
CisgICAgLy8gZnJvbSB0cyA9IDAuNSAuLiAxLjUgdG8gZ2l2ZSBhIGxvbmdlciBydW4tb3V0Lgor
ICAgIHRpbWUgKj0gbV90aW1lU2NhbGVGYWN0b3I7CisKKyAgICBmbG9hdCBkaXNwbGFjZW1lbnQ7
CisgICAgaWYgKHRpbWUgPD0gMC41KQorICAgICAgICBkaXNwbGFjZW1lbnQgPSB0aW1lOworICAg
IGVsc2UgaWYgKHRpbWUgPD0gMS41KSB7CisgICAgICAgIGRvdWJsZSB0ID0gdGltZSAtIDAuNTsK
KyAgICAgICAgZGlzcGxhY2VtZW50ID0gdCAqICgxICsgdCAqIHQgKiAoMC41ICogdCAtIDEpKSAr
IDAuNTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGlzcGxhY2VtZW50ID0gMS4wOworCisgICAgLy8g
S2VlcCB0cmFjayBvZiBpbnRlZ2VyIHBvcnRpb24gb2Ygc2Nyb2xsIHRodXMgZmFyLCBhbmQgcHJl
cGFyZSBpbmNyZW1lbnQuCisgICAgSW50UG9pbnQgc2Nyb2xsKGRpc3BsYWNlbWVudCAqIG1fdmVs
b2NpdHkueCgpLCBkaXNwbGFjZW1lbnQgKiBtX3ZlbG9jaXR5LnkoKSk7CisgICAgSW50UG9pbnQg
c2Nyb2xsSW5jcmVtZW50KHNjcm9sbCAtIG1fY3VtdWxhdGl2ZVNjcm9sbCk7CisgICAgbV9jdW11
bGF0aXZlU2Nyb2xsID0gc2Nyb2xsOworCisgICAgaWYgKHRpbWUgPCAxLjUgfHwgc2Nyb2xsSW5j
cmVtZW50ICE9IEludFBvaW50Ojp6ZXJvKCkpIHsKKyAgICAgICAgdGFyZ2V0LT5zZXRTY3JvbGxJ
bmNyZW1lbnQoc2Nyb2xsSW5jcmVtZW50KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3Vy
dmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVD
dXJ2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmZkNTJiYzRlYzc0YzBiNTJiNzU4NDViNDY2OWY2NTZmMDdkMjUw
ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaEZsaW5n
UGxhdGZvcm1HZXN0dXJlQ3VydmUuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZV9oCisjZGVmaW5lIFRvdWNoRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZV9oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldDsKKworLy8gSW1wbGVtZW50YXRpb24gb2YgUGxh
dGZvcm1HZXN0dXJlQ3VydmUgc3VpdGFibGUgZm9yIHRvdWNoIHBhZC9zY3JlZW4tYmFzZWQKKy8v
IGZsaW5nIHNjcm9sbC4gU3RhcnRzIHdpdGggYSBmbGF0IHZlbG9jaXR5IHByb2ZpbGUgYmFzZWQg
b24gJ3ZlbG9jaXR5Jywgd2hpY2gKKy8vIHRhaWxzIG9mZiB0byB6ZXJvLiBUaW1lIGlzIHNjYWxl
ZCB0byB0aGF0IGR1cmF0aW9uIG9mIHRoZSBmbGluZyBpcyBwcm9wb3J0aW9uYWwKKy8vIHRoZSBp
bml0aWFsIHZlbG9jaXR5LgorY2xhc3MgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlIDog
cHVibGljIFBsYXRmb3JtR2VzdHVyZUN1cnZlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9j
aXR5KTsKKyAgICB2aXJ0dWFsIH5Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUoKTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBhcHBseShkb3VibGUgdGltZSwgUGxhdGZvcm1HZXN0dXJlQ3VydmVU
YXJnZXQqKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBUb3VjaEZsaW5nUGxhdGZvcm1HZXN0
dXJlQ3VydmUoY29uc3QgRmxvYXRQb2ludCYgdmVsb2NpdHkpOworCisgICAgRmxvYXRQb2ludCBt
X3ZlbG9jaXR5OworICAgIGZsb2F0IG1fdGltZVNjYWxlRmFjdG9yOworICAgIEludFBvaW50IG1f
Y3VtdWxhdGl2ZVNjcm9sbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaGVlbEZsaW5nUGxhdGZvcm1H
ZXN0dXJlQ3VydmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2hlZWxGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYWI1N2NkNWY4NmRkYzMxZWI2MThkYjcz
OWY3MzEwNzhmNjhjMWM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcApAQCAtMCwwICsxLDc0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXaGVlbEZsaW5n
UGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZl
VGFyZ2V0LmgiCisjaW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
c3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IFdoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVD
dXJ2ZTo6Y3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5KQoreworICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKHZlbG9jaXR5KSk7Cit9
CisKK1doZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6V2hlZWxGbGluZ1BsYXRmb3JtR2Vz
dHVyZUN1cnZlKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5KQorICAgIDogbV92ZWxvY2l0eSh2
ZWxvY2l0eSkKK3sKKyAgICBBU1NFUlQodmVsb2NpdHkgIT0gRmxvYXRQb2ludDo6emVybygpKTsK
K30KKworV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjp+V2hlZWxGbGluZ1BsYXRmb3Jt
R2VzdHVyZUN1cnZlKCkKK3sKK30KKworYm9vbCBXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3Vy
dmU6OmFwcGx5KGRvdWJsZSB0aW1lLCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0
KQoreworICAgIC8vIFVzZSBhIFJheWxlaWdoIGRpc3RyaWJ1dGlvbiBmb3IgdGhlIGN1cnZlLiBU
aGlzIHNpbXVsYXRlcyBhIHZlbG9jaXR5IHByb2ZpbGUKKyAgICAvLyB0aGF0IHN0YXJ0cyBhdCAw
LCBpbmNyZWFzZXMgdG8gYSBtYXhpbXVtLCB0aGVuIGRlY3JlYXNlcyBhZ2FpbiBzbW9vdGhseS4g
QnkKKyAgICAvLyB1c2luZyB0aGUgY3VtdWxhdGl2ZSBkaXN0cmlidXRpb24gZnVuY3Rpb24gKENE
RikgaW5zdGVhZCBvZiB0aGUgcG9pbnQtbWFzcyBmdW5jdGlvbiwKKyAgICAvLyB3ZSBjYW4gaXNv
bGF0ZSB0aW1pbmcgaml0dGVyIGJ5IHJlbWVtYmVyaW5nIHRoZSBDREYgdmFsdWUgYXQgdGhlIGxh
c3QgdGljay4gU2luY2UKKyAgICAvLyB0aGUgQ0RGIG1heGVzIG91dCBhdCAxLCBzY2FsZSBpdCBi
eSB0aGUgaW5wdXQgdmVsb2NpdHkuCisgICAgLy8KKyAgICAvLyBDREYgLT4gRih4OyBzaWdtYSkg
PSAxIC0gZXhwey14XjIvMlxzaWdtYV4yfQorICAgIC8vIHJlZjogaHR0cDovL2VuLndpa2lwZWRp
YS5vcmcvd2lraS9SYXlsZWlnaF9kaXN0cmlidXRpb24KKyAgICAvLyBGSVhNRTogY29uc2lkZXIg
bWFraW5nIHRoZSB2YWx1ZSBvZiBzaWdtYSBzZXR0YWJsZSBpbiB0aGUgY29uc3RydWN0b3IuCisg
ICAgc3RhdGljIGRvdWJsZSB0d29TaWdtYVNxdWFyZWRJbnZlcnNlID0gMTY7IC8vIHNpZ21hID0g
MC4yNQorICAgIGZsb2F0IGNkZiA9IDEgLSBleHAoLXRpbWUgKiB0aW1lICogdHdvU2lnbWFTcXVh
cmVkSW52ZXJzZSk7CisgICAgSW50UG9pbnQgc2Nyb2xsKGNkZiAqIG1fdmVsb2NpdHkueCgpLCBj
ZGYgKiBtX3ZlbG9jaXR5LnkoKSk7CisgICAgSW50UG9pbnQgc2Nyb2xsSW5jcmVtZW50KHNjcm9s
bCAtIG1fY3VtdWxhdGl2ZVNjcm9sbCk7CisgICAgbV9jdW11bGF0aXZlU2Nyb2xsID0gc2Nyb2xs
OworCisgICAgaWYgKGNkZiA8IDAuNSB8fCBzY3JvbGxJbmNyZW1lbnQgIT0gSW50UG9pbnQ6Onpl
cm8oKSkgeworICAgICAgICB0YXJnZXQtPnNldFNjcm9sbEluY3JlbWVudChzY3JvbGxJbmNyZW1l
bnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1doZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjcy
MTQ2MTY1MzMzZjIzYzhjOWJiZjZjMDFkZGJmMDY3YWVlMWFjMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1doZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5o
CkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2hlZWxGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlX2gKKyNkZWZpbmUgV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZl
X2gKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVD
dXJ2ZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtR2VzdHVyZUN1cnZl
VGFyZ2V0OworCisvLyBJbXBsZW1lbnRhdGlvbiBvZiBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSBzdWl0
YWJsZSBmb3IgbW91c2Ugd2hlZWwtYmFzZWQgZmxpbmcKKy8vIHNjcm9sbC4gQSBSYXlsZWlnaCBk
aXN0cmlidHV0aW9uIGN1cnZlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSB2ZWxvY2l0eSBwcm9maWxl
LAorLy8gc28gdmVsb2NpdHkgc3RhcnRzIGF0IHplcm8sIGFjY2VsZXJhdGVzIHRvIGEgbWF4aW11
bSBwcm9wb3J0aW9uYWwgdG8gJ3ZlbG9jaXR5JywKKy8vIHRoZW4gZ2VudGx5IHRhaWxzIG9mZiB0
byB6ZXJvIGFnYWluLgorY2xhc3MgV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlIDogcHVi
bGljIFBsYXRmb3JtR2VzdHVyZUN1cnZlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0
cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5
KTsKKyAgICB2aXJ0dWFsIH5XaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUoKTsKKworICAg
IHZpcnR1YWwgYm9vbCBhcHBseShkb3VibGUgdGltZSwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJn
ZXQqKTsKKworcHJpdmF0ZToKKyAgICBXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUoY29u
c3QgRmxvYXRQb2ludCYgdmVsb2NpdHkpOworCisgICAgRmxvYXRQb2ludCBtX3ZlbG9jaXR5Owor
ICAgIEludFBvaW50IG1fY3VtdWxhdGl2ZVNjcm9sbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0
aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41NTZlNDZiNGVmNDAwOTNmMTEyYTFhNjM0MDY3MjE0MWNkMjQw
ZDRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDU1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0Fj
dGl2ZUdlc3R1cmVBbmltYXRpb24uaCIKKworI2luY2x1ZGUgImNjL0NDR2VzdHVyZUN1cnZlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmlt
YXRpb24+IENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKGRvdWJsZSBzdGFydFRpbWUs
IFBhc3NPd25QdHI8Q0NHZXN0dXJlQ3VydmU+IGN1cnZlLCBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCog
dGFyZ2V0KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0
aW9uKHN0YXJ0VGltZSwgY3VydmUsIHRhcmdldCkpOworfQorCitDQ0FjdGl2ZUdlc3R1cmVBbmlt
YXRpb246OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbihkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3du
UHRyPENDR2VzdHVyZUN1cnZlPiBjdXJ2ZSwgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkK
KyAgICA6IG1fc3RhcnRUaW1lKHN0YXJ0VGltZSkKKyAgICAsIG1fZ2VzdHVyZUN1cnZlKGN1cnZl
KQorICAgICwgbV9nZXN0dXJlQ3VydmVUYXJnZXQodGFyZ2V0KQoreworfQorCitDQ0FjdGl2ZUdl
c3R1cmVBbmltYXRpb246On5DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24oKQoreworfQorCitib29s
IENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6YW5pbWF0ZShkb3VibGUgdGltZSkKK3sKKyAgICAv
LyBDQ0dlc3R1cmVDdXJ2ZXMgdXNlZCB6ZXJvLWJhc2VkIHRpbWUsIHNvIHN1YnRyYWN0IHN0YXJ0
LXRpbWUuCisgICAgcmV0dXJuIG1fZ2VzdHVyZUN1cnZlLT5hcHBseSh0aW1lIC0gbV9zdGFydFRp
bWUsIG1fZ2VzdHVyZUN1cnZlVGFyZ2V0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
NTVmZjVlYzI4OTEzMjI2YmYzNTg2MDYxOWFjNzc2NTVhODc1NzdlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVH
ZXN0dXJlQW5pbWF0aW9uLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb25faAorI2RlZmluZSBDQ0FjdGl2ZUdlc3R1cmVBbmlt
YXRpb25faAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ0NHZXN0dXJlQ3VydmU7CitjbGFzcyBDQ0dlc3R1cmVDdXJ2ZVRhcmdldDsK
KworY2xhc3MgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24pOworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gY3JlYXRlKGRvdWJsZSBzdGFydFRpbWUs
IFBhc3NPd25QdHI8Q0NHZXN0dXJlQ3VydmU+LCBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCopOworICAg
IH5DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24oKTsKKworICAgIHZpcnR1YWwgYm9vbCBhbmltYXRl
KGRvdWJsZSB0aW1lKTsKKworcHJpdmF0ZToKKyAgICBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24o
ZG91YmxlIHN0YXJ0VGltZSwgUGFzc093blB0cjxDQ0dlc3R1cmVDdXJ2ZT4sIENDR2VzdHVyZUN1
cnZlVGFyZ2V0Kik7CisKKyAgICBkb3VibGUgbV9zdGFydFRpbWU7CisgICAgT3duUHRyPENDR2Vz
dHVyZUN1cnZlPiBtX2dlc3R1cmVDdXJ2ZTsKKyAgICBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCogbV9n
ZXN0dXJlQ3VydmVUYXJnZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NHZXN0dXJlQ3VydmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDR2VzdHVyZUN1cnZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzdkYjhkNzZkZWEwZDE2OWY0
YzNiYTljYWQyODExMGI5N2VkMGFhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDR2VzdHVyZUN1cnZlLmgKQEAgLTAsMCAr
MSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0dlc3R1cmVDdXJ2ZV9oCisjZGVmaW5l
IENDR2VzdHVyZUN1cnZlX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW50
UG9pbnQ7CisKK2NsYXNzIENDR2VzdHVyZUN1cnZlVGFyZ2V0IHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5DQ0dlc3R1cmVDdXJ2ZVRhcmdldCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFNj
cm9sbEluY3JlbWVudChjb25zdCBJbnRQb2ludCYpID0gMDsKKyAgICAvLyBGSVhNRTogYWRkIGlu
dGVyZmFjZXMgZm9yIHNldFNjcm9sbCgpLCBzZXRQYWdlU2NhbGVBbmRTY3JvbGwoKSwgZXRjLgor
fTsKKworY2xhc3MgQ0NHZXN0dXJlQ3VydmUgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNDR2Vz
dHVyZUN1cnZlKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoZG91YmxlIHRpbWUsIEND
R2VzdHVyZUN1cnZlVGFyZ2V0KikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGY2NWNkNWQ2NWVkYWY5
NTY4YTNhMGRhNjM4N2MzYjgxNDNlZjc5MmMuLjI4NWE3YTRiNTA3NGRlYzNjZWZmMmU4ZGU2MWY1
YjZhY2ZhZGIzMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtMTA5LDYgKzEw
OSw3IEBACiAgICAgICAgICAgICAndGVzdHMvTGF5ZXJUZXh0dXJlVXBkYXRlclRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9Mb2NhbGl6ZWROdW1iZXJJQ1VUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvUGFpbnRBZ2dyZWdhdG9yVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3Rz
L1BsYXRmb3JtR2VzdHVyZUN1cnZlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1BsYXRm
b3JtQ29udGV4dFNraWFUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUE9EQXJlbmFUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUE9ESW50ZXJ2YWxUcmVlVGVzdC5jcHAnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUdlc3R1cmVDdXJ2
ZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUdlc3R1cmVD
dXJ2ZVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5ZjcwMmVhNWY1ODU4ZWE4OTJhNDk5ZDIyMDE3ZTYz
ZTViMDAwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1BsYXRmb3JtR2VzdHVyZUN1cnZlVGVzdC5jcHAKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgor
CisjaW5jbHVkZSAiQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaCIKKyNpbmNsdWRlICJUb3VjaEZsaW5nUGxhdGZv
cm1HZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlICJXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3Vy
dmUuaCIKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaCIKKyNpbmNsdWRl
ICJjYy9DQ0dlc3R1cmVDdXJ2ZS5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworY2xhc3MgTW9ja1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0IDogcHVibGljIFBsYXRm
b3JtR2VzdHVyZUN1cnZlVGFyZ2V0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Ny
b2xsSW5jcmVtZW50KGNvbnN0IEludFBvaW50JiBkZWx0YSkKKyAgICB7CisgICAgICAgIG1fY3Vt
dWxhdGl2ZURlbHRhID0gbV9jdW11bGF0aXZlRGVsdGEgKyBkZWx0YTsKKyAgICB9CisKKyAgICBJ
bnRQb2ludCBjdW11bGF0aXZlRGVsdGEoKSBjb25zdCB7IHJldHVybiAgbV9jdW11bGF0aXZlRGVs
dGE7IH0KKyAgICB2b2lkIHJlc2V0Q3VtdWxhdGl2ZURlbHRhKCkgeyBtX2N1bXVsYXRpdmVEZWx0
YSA9IEludFBvaW50KCk7IH0KKworcHJpdmF0ZToKKyAgICBJbnRQb2ludCBtX2N1bXVsYXRpdmVE
ZWx0YTsKK307CisKK1RFU1QoUGxhdGZvcm1HZXN0dXJlQ3VydmUsIGZsaW5nQ3VydmUpCit7Cisg
ICAgTW9ja1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0IHRhcmdldDsKKyAgICBPd25QdHI8QWN0
aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uPiBhbmltYXRpb24gPSBBY3RpdmVQbGF0Zm9ybUdl
c3R1cmVBbmltYXRpb246OmNyZWF0ZSgwLCBXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6
OmNyZWF0ZShGbG9hdFBvaW50KDEwMCwgMCkpLCAmdGFyZ2V0KTsKKworICAgIC8vIE5vdGU6IHRo
ZSBleHBlY3RhdGlvbnMgYmVsb3cgYXJlIGRlcGVuZGVudCBvbiB0aGUgdmFsdWUgb2Ygc2lnbWEg
aGFyZC1jb2RlZCBpbiB0aGUgUmF5bGVpZ2gKKyAgICAvLyAgICAgICBjdXJ2ZS4gSWYgc2lnbWEg
Y2hhbmdlcywgdGhlc2UgdGVzdCBleHBlY3RhdGlvbnMgd2lsbCBhbHNvIGNoYW5nZS4KKyAgICBF
WFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMCkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1h
dGlvbi0+YW5pbWF0ZSgwLjI1KSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRl
KDAuNDUpKTsgLy8gVXNlIG5vbi11bmlmb3JtIHRpY2sgc3BhY2luZy4KKyAgICBFWFBFQ1RfVFJV
RShhbmltYXRpb24tPmFuaW1hdGUoMC43NSkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+
YW5pbWF0ZSgxMDAwKSk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW1hdGlvbi0+YW5pbWF0ZSgxMDAx
KSk7CisgICAgLy8gU2luY2UgdGhlIFJheWxlaWdoIENERiBtYXhlcyBvdXQgYXQgMSwgd2UgZXhw
ZWN0IHRoZSBjdW11bGF0aXZlIHNjcm9sbCBpbmNyZW1lbnRzIHRvCisgICAgLy8gbWF0Y2ggdGhl
IGlucHV0IHZlbG9jaXR5IHBhcmFtZXRlci4KKyAgICAvLyBTaW5jZSB3ZSBjYW4gYmUgb2ZmIGJ5
ICsvLTAuNSBvbiBlYWNoIGNvbnZlcnNpb24gdG8gaW50IGZvciBzZXRTY3JvbGxJbmNyZW1lbnQs
CisgICAgLy8gcGljayB0aGUgJ25lYXJuZXNzJyB0byBiZSB3aXRoaW4gdGhlIG51bWJlciBvZiB0
aW1lcyBhbmltYXRlIHJldHVybnMgdHJ1ZS4KKyAgICBFWFBFQ1RfTkVBUih0YXJnZXQuY3VtdWxh
dGl2ZURlbHRhKCkueCgpLCAxMDAsIDEpOworICAgIEVYUEVDVF9FUSh0YXJnZXQuY3VtdWxhdGl2
ZURlbHRhKCkueSgpLCAwKTsKKworICAgIGRvdWJsZSBiYXNlVGltZSA9IDQyLjQyOworICAgIGFu
aW1hdGlvbiA9IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKGJhc2VUaW1l
LCBXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShGbG9hdFBvaW50KDEwMCwg
MCkpLCAmdGFyZ2V0KTsKKyAgICB0YXJnZXQucmVzZXRDdW11bGF0aXZlRGVsdGEoKTsKKworICAg
IEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZShiYXNlVGltZSArIDAuMzUpKTsKKyAgICBF
WFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoYmFzZVRpbWUgKyAxLjM1KSk7CisgICAgRVhQ
RUNUX0ZBTFNFKGFuaW1hdGlvbi0+YW5pbWF0ZShiYXNlVGltZSArIDEwMDApKTsKKyAgICBFWFBF
Q1RfTkVBUih0YXJnZXQuY3VtdWxhdGl2ZURlbHRhKCkueCgpLCAxMDAsIDEpOworCisgICAgYW5p
bWF0aW9uID0gQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUoMCwgV2hlZWxG
bGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2ludCg1MCwgMTUwKSksICZ0
YXJnZXQpOworICAgIHRhcmdldC5yZXNldEN1bXVsYXRpdmVEZWx0YSgpOworCisgICAgRVhQRUNU
X1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDApKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24t
PmFuaW1hdGUoMC4yNSkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZSgwLjQ1
KSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDAuNzUpKTsKKyAgICBFWFBF
Q1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMTAwMCkpOworICAgIEVYUEVDVF9GQUxTRShhbmlt
YXRpb24tPmFuaW1hdGUoMTAwMSkpOworICAgIEVYUEVDVF9ORUFSKHRhcmdldC5jdW11bGF0aXZl
RGVsdGEoKS54KCksIDUwLCAxKTsKKyAgICBFWFBFQ1RfTkVBUih0YXJnZXQuY3VtdWxhdGl2ZURl
bHRhKCkueSgpLCAxNTAsIDEpOworfQorCitURVNUKFBsYXRmb3JtR2VzdHVyZUN1cnZlLCBmbGlu
Z0N1cnZlVG91Y2gpCit7CisgICAgTW9ja1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0IHRhcmdl
dDsKKyAgICBPd25QdHI8QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uPiBhbmltYXRpb24g
PSBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OmNyZWF0ZSgwLCBUb3VjaEZsaW5nUGxh
dGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShGbG9hdFBvaW50KDEwMDAsIDApKSwgJnRhcmdldCk7
CisKKyAgICAvLyBOb3RlOiB0aGUgZXhwZWN0YXRpb25zIGJlbG93IGFyZSBkZXBlbmRlbnQgb24g
dGhlIHZhbHVlIG9mIHNpZ21hIGhhcmQtY29kZWQgaW4gdGhlIFJheWxlaWdoCisgICAgLy8gICAg
ICAgY3VydmUuIElmIHNpZ21hIGNoYW5nZXMsIHRoZXNlIHRlc3QgZXhwZWN0YXRpb25zIHdpbGwg
YWxzbyBjaGFuZ2UuCisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDApKTsKKyAg
ICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMC4yNSkpOworICAgIEVYUEVDVF9UUlVF
KGFuaW1hdGlvbi0+YW5pbWF0ZSgwLjQ1KSk7IC8vIFVzZSBub24tdW5pZm9ybSB0aWNrIHNwYWNp
bmcuCisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDAuNzUpKTsKKyAgICBFWFBF
Q1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMC45KSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0
aW9uLT5hbmltYXRlKDEwMDApKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbWF0aW9uLT5hbmltYXRl
KDEwMDEpKTsKKyAgICAvLyBTaW5jZSB3ZSBjYW4gYmUgb2ZmIGJ5ICsvLTAuNSBvbiBlYWNoIGNv
bnZlcnNpb24gdG8gaW50IGZvciBzZXRTY3JvbGxJbmNyZW1lbnQsCisgICAgLy8gcGljayB0aGUg
J25lYXJuZXNzJyB0byBiZSB3aXRoaW4gdGhlIDUgKiBudW1iZXIgb2YgdGltZXMgYW5pbWF0ZSBy
ZXR1cm5zIHRydWUuCisgICAgRVhQRUNUX05FQVIodGFyZ2V0LmN1bXVsYXRpdmVEZWx0YSgpLngo
KSwgMTAwMCwgMSk7CisgICAgRVhQRUNUX0VRKHRhcmdldC5jdW11bGF0aXZlRGVsdGEoKS55KCks
IDApOworfQorCit9IC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130953</attachid>
            <date>2012-03-08 19:18:25 -0800</date>
            <delta_ts>2012-03-08 20:15:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79827-20120308221823.patch</filename>
            <type>text/plain</type>
            <size>43966</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWVmNmVhZjc3M2Y5NWRm
NTRiY2NjOGUxOTAyMmE1YjlhYjI4MDBkNC4uOGJhYzU0Yzg1MWMxYjFlOWVhY2M2MmRkYmQ0ZTAz
ZThlZDk1NDM2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEyLTAzLTA4ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEltcGxlbWVudCBzY3JvbGwgcGh5c2ljcyBhcmNoaXRlY3R1cmUgZm9yIGltcGwvbWFpbiB0
aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5
ODI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5p
dHRlc3RzIGFkZGVkLCBwbHVzIGZvbGxvdy1vbiBwYXRjaCBmcm9tIHJqa3JvZWdlIHdpbGwgYWRk
IGxheW91dCB0ZXN0cy4KKworICAgICAgICBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSBpcyBhIGZyYW1l
d29yayB0byBzZXBhcmF0ZSB0aGUgcGh5c2ljYWwgc2ltdWxhdGlvbiBmcm9tIGZvciBnZXN0dXJl
CisgICAgICAgIGFuaW1hdGlvbiBmcm9tIGNvbnRyb2wgY29uY2VybnMuIFRoaXMgYWxsb3dzIHRo
ZSBwaHlzaWNzIHRvIGJlIHJldXNlZCBpbiBhbHRlcm5hdGUgcGxhY2VzLgorICAgICAgICBBdCBw
cmVzZW50LCB0aGUgZnJhbWV3b3JrIHdpbGwgYmUgYXBwbGllZCBpbiBTY3JvbGxBbmltYXRvck5v
bmUgYW5kIHRoZSBDaHJvbWUgQ29tcG9zaXRvci4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9BY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24uY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlUGxhdGZv
cm1HZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlUGxh
dGZvcm1HZXN0dXJlQW5pbWF0aW9uOjp+QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6QWN0aXZl
UGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZVBsYXRm
b3JtR2VzdHVyZUFuaW1hdGlvbjo6YW5pbWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vQWN0aXZl
UGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL1BsYXRmb3JtR2VzdHVyZUN1cnZlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZTo6flBsYXRmb3JtR2VzdHVyZUN1cnZlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQ6On5QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdl
dCk6CisgICAgICAgICogcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNo
RmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6VG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6flRv
dWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEZs
aW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9Ub3Vj
aEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSk6CisgICAgICAgICogcGxh
dGZvcm0vV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OldoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVD
dXJ2ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZTo6V2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKToKKyAgICAgICAgKFdlYkNv
cmU6OldoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6fldoZWVsRmxpbmdQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJl
Q3VydmU6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9XaGVlbEZsaW5nUGxhdGZvcm1HZXN0
dXJlQ3VydmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdoZWVsRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6Q0NBY3Rp
dmVHZXN0dXJlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFu
aW1hdGlvbjo6fkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0FjdGl2ZUdlc3R1cmVBbmltYXRpb246OmFuaW1hdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dlc3R1cmVDdXJ2ZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NHZXN0dXJlQ3VydmVUYXJnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NHZXN0dXJlQ3VydmVUYXJnZXQ6On5DQ0dlc3R1cmVDdXJ2
ZVRhcmdldCk6CisgICAgICAgIChDQ0dlc3R1cmVDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0dlc3R1cmVDdXJ2ZTo6fkNDR2VzdHVyZUN1cnZlKToKKwogMjAxMi0wMy0wOCAgSWx5YSBUaWto
b25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBzaW5n
bGUgbGluZSBmaXguIFRoZSBmdW5jdGlvbiBoYWQgdG8gcmV0dXJuIGEgaGFzaCBidXQgaXQgcmV0
dXJuZWQganVzdCBhZGRyZXNzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3NjA3M2Fm
MmZlNWEwZDJjYmU5ZTE3ZmE5NTA0Y2VhZGNhZmE2YThlLi4zNmYwZTkzYTU2ODNhZjE2NjdkNDQ4
ZjdhNmE1MTVkNWIxNzhlOGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEzIEBACisyMDEyLTAzLTA4ICBXLiBKYW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBzY3JvbGwgcGh5c2ljcyBhcmNo
aXRlY3R1cmUgZm9yIGltcGwvbWFpbiB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc5ODI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9QbGF0
Zm9ybUdlc3R1cmVDdXJ2ZVRlc3QuY3BwOiBBZGRlZC4KKwogMjAxMi0wMy0wNyAgS2VudCBUYW11
cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIG1lYW5pbmdsZXNzIGNv
ZGUgaW4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwcmVmZXJyZWRDb250ZW50V2lkdGgo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IDA2YjlmNjEyNmIzZDkwZWFmYzBmYzY3N2E2YWM5OTZiZjdh
ZDA3N2EuLjEyMmZjY2E4MDA0Y2ZkYmQ5NTlmZmFmMjFkZjUwNTNlZTg0Y2QxMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTI5MDQsNiArMjkwNCw4IEBACiAgICAgICAgICAgICAncGFnZS93aW5jZS9G
cmFtZVdpbkNFLmNwcCcsCiAgICAgICAgICAgICAncGFnZS93eC9EcmFnQ29udHJvbGxlcld4LmNw
cCcsCiAgICAgICAgICAgICAncGFnZS93eC9FdmVudEhhbmRsZXJXeC5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9BcmVuYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0FyZW5h
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAnLApAQCAtMjk0
OSw2ICsyOTUxLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRs
ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vUGFzdGVib2FyZC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9y
bVN0cmF0ZWdpZXMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybVRvdWNoRXZl
bnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZvcm1Ub3VjaFBvaW50LmgnLApAQCAt
Mjk4MCw4ICsyOTgzLDEyIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vVGhyZWFkVGltZXJzLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vVGhyZWFkVGltZXJzLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL1RpbWVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vVG91Y2hGbGluZ1Bs
YXRmb3JtR2VzdHVyZUN1cnZlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vVG91Y2hGbGlu
Z1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1VVSUQuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9VVUlELmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L1doZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL1doZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9XaWRnZXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0
aW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbkxpc3Qu
Y3BwJywKQEAgLTM0MTIsNiArMzQxOSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJl
QW5pbWF0aW9uLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmNw
cCcsCkBAIC0zNDMwLDYgKzM0MzksOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDR2VzdHVyZUN1cnZl
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDR2VzdHVy
ZUN1cnZlVGFyZ2V0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uN2Y2ZTdjMmM5NjQwNGNkNTY5NmY5YjE3YjY0MzBlOWI0M2MzZjE1MQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3Jt
R2VzdHVyZUFuaW1hdGlvbi5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIkFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5oIgor
CisjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZVRhcmdldC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8
QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uPiBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmlt
YXRpb246OmNyZWF0ZShkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVy
ZUN1cnZlPiBjdXJ2ZSwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbihzdGFy
dFRpbWUsIGN1cnZlLCB0YXJnZXQpKTsKK30KKworQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0
aW9uOjp+QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKCkKK3sKK30KKworQWN0aXZlUGxh
dGZvcm1HZXN0dXJlQW5pbWF0aW9uOjpBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24oZG91
YmxlIHN0YXJ0VGltZSwgUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gY3VydmUsIFBs
YXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0KiB0YXJnZXQpCisgICAgOiBtX3N0YXJ0VGltZShzdGFy
dFRpbWUpCisgICAgLCBtX2N1cnZlKGN1cnZlKQorICAgICwgbV90YXJnZXQodGFyZ2V0KQorewor
fQorCitib29sIEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6YW5pbWF0ZShkb3VibGUg
dGltZSkKK3sKKyAgICAvLyBBbGwgUGxhdGZvcm1HZXN0dXJlQ3VydmVzIGFzc3VtZSB6ZXJvLWJh
c2VkIHRpbWUsIHNvIHdlIHN1YnRyYWN0CisgICAgLy8gdGhlIGFuaW1hdGlvbiBzdGFydCB0aW1l
IGJlZm9yZSBwYXNzaW5nIHRvIHRoZSBjdXJ2ZS4KKyAgICByZXR1cm4gbV9jdXJ2ZS0+YXBwbHko
dGltZSAtIG1fc3RhcnRUaW1lLCBtX3RhcmdldCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2Vz
dHVyZUFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1H
ZXN0dXJlQW5pbWF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWFlNDBkZTdiYjA1MjhkOWUyNDVhNzRiNTll
ZGU0YTRmODgyYjhmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbl9oCisjZGVmaW5lIEFjdGl2
ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbl9oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTsKK2Ns
YXNzIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0OworCisvLyBJbXBsZW1lbnRzIGEgZ2VzdHVy
ZSBhbmltYXRpb24gKGZsaW5nIHNjcm9sbCwgZXRjLikgdXNpbmcgYSBjdXJ2ZSB3aXRoIGEgZ2Vu
ZXJpYyBpbnRlcmZhY2UKKy8vIHRvIGRlZmluZSB0aGUgYW5pbWF0aW9uIHBhcmFtZXRlcnMgYXMg
YSBmdW5jdGlvbiBvZiB0aW1lLCBhbmQgYXBwbGllcyB0aGUgYW5pbWF0aW9uCisvLyB0byBhIHRh
cmdldCwgYWdhaW4gdmlhIGEgZ2VuZXJpYyBpbnRlcmZhY2UuIEl0IGlzIGFzc3VtZWQgdGhhdCBh
bmltYXRlKCkgaXMgY2FsbGVkCisvLyBvbiBhIG1vcmUtb3ItbGVzcyByZWd1bGFyIGJhc2lzIGJ5
IHRoZSBvd25lci4KK2NsYXNzIEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbiB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKTsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRp
b24+IGNyZWF0ZShkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1
cnZlPiwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqKTsKKyAgICB+QWN0aXZlUGxhdGZvcm1H
ZXN0dXJlQW5pbWF0aW9uKCk7CisKKyAgICBib29sIGFuaW1hdGUoZG91YmxlIHRpbWUpOworCitw
cml2YXRlOgorICAgIC8vIEFzc3VtZXMgYSB2YWxpZCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdl
dCB0aGF0IG91dGxpdmVzIHRoZSBhbmltYXRpb24uCisgICAgQWN0aXZlUGxhdGZvcm1HZXN0dXJl
QW5pbWF0aW9uKGRvdWJsZSBzdGFydFRpbWUsIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3Vy
dmU+LCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCopOworCisgICAgZG91YmxlIG1fc3RhcnRU
aW1lOworICAgIE93blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gbV9jdXJ2ZTsKKyAgICBQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCogbV90YXJnZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxh
dGZvcm1HZXN0dXJlQ3VydmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2Vz
dHVyZUN1cnZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTIyMTk5MTQ3OGVhOWMxODkzZjk2YjNmZjBlZWQ3ZWY2
NGM3N2M0MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtR2VzdHVyZUN1cnZlLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZV9oCisjZGVmaW5lIFBsYXRmb3JtR2VzdHVyZUN1cnZlX2gK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdl
dDsKKworLy8gQWJzdHJhY3QgaW50ZXJmYWNlIGZvciBjdXJ2ZXMgdXNlZCBieSBBY3RpdmVQbGF0
Zm9ybUdlc3R1cmVBbmltYXRpb24uIEEKKy8vIFBsYXRmb3JtR2VzdHVyZUN1cnZlIGRlZmluZXMg
dGhlIGFuaW1hdGlvbiBwYXJhbWV0ZXJzIGFzIGEgZnVuY3Rpb24gb2YgdGltZQorLy8gKHplcm8t
YmFzZWQpLCBhbmQgYXBwbGllcyB0aGUgcGFyYW1ldGVycyBkaXJlY3RseSB0byB0aGUgdGFyZ2V0
IG9mIHRoZQorLy8gYW5pbWF0aW9uLgorY2xhc3MgUGxhdGZvcm1HZXN0dXJlQ3VydmUgeworcHVi
bGljOgorICAgIHZpcnR1YWwgflBsYXRmb3JtR2VzdHVyZUN1cnZlKCkgeyB9CisKKyAgICAvLyBS
ZXR1cm5zIGZhbHNlIGlmIGN1cnZlIGhhcyBmaW5pc2hlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSBh
cHBsaWVkLgorICAgIHZpcnR1YWwgYm9vbCBhcHBseShkb3VibGUgdGltZSwgUGxhdGZvcm1HZXN0
dXJlQ3VydmVUYXJnZXQqKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJl
Q3VydmVUYXJnZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1
cnZlVGFyZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZiMGFlYmNkZGViNjU0OWUzYjRjMTAwZDc3MGZhYmE5
ODIxMzRiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldF9oCisjZGVmaW5lIFBsYXRmb3JtR2Vz
dHVyZUN1cnZlVGFyZ2V0X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnRQb2lu
dDsKKworY2xhc3MgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgeworcHVibGljOgorICAgIHZp
cnR1YWwgdm9pZCBzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmKSA9IDA7CisgICAg
Ly8gRklYTUU6IGFkZCBpbnRlcmZhY2VzIGZvciBzZXRTY3JvbGwoKSwgc2V0UGFnZVNjYWxlQW5k
U2Nyb2xsKCksIGV0Yy4KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgflBsYXRmb3JtR2VzdHVy
ZUN1cnZlVGFyZ2V0KCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRmb3Jt
R2VzdHVyZUN1cnZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxpbmdQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDc2MDk5NTgzOTM4MmRhODUxOTlhMTZh
ZGI0MjgwODNhYjZlNzMxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAKQEAgLTAsMCArMSw4NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVG91Y2hGbGlu
Z1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZVRhcmdldC5oIgorI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2Ugc3RkOworCitQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBU
b3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiB2
ZWxvY2l0eSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRvdWNoRmxpbmdQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZSh2ZWxvY2l0eSkpOworfQorCitUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3Vy
dmU6OlRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZShjb25zdCBGbG9hdFBvaW50JiB2ZWxv
Y2l0eSkKKyAgICA6IG1fdmVsb2NpdHkodmVsb2NpdHkpCisgICAgLCBtX3RpbWVTY2FsZUZhY3Rv
cigxMDAwIC8gbWF4KDEuZiwgbWF4KGZhYnModmVsb2NpdHkueCgpKSwgZmFicyh2ZWxvY2l0eS55
KCkpKSkpCit7CisgICAgQVNTRVJUKHZlbG9jaXR5ICE9IEZsb2F0UG9pbnQ6Onplcm8oKSk7Cit9
CisKK1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6flRvdWNoRmxpbmdQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZSgpCit7Cit9CisKK2Jvb2wgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZl
OjphcHBseShkb3VibGUgdGltZSwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkK
K3sKKyAgICAvLyBIZXJlIHdlIGltcGxlbWVudCBhIGN1YmljIGJlemllciBjdXJ2ZSB3aXRoIHBh
cmFtZXRlcnMgWzEgMSAwIDBdIHdoaWNoIGdpdmVzCisgICAgLy8gdigwKSA9IDEsIGEoMCkgPSAw
LCB2KDEpID0gMCwgYSgxKSA9IDAuIFRoZSBjdXJ2ZSBpcyBzY2FsZWQgYnkgdGhlIGluaXRpYWwK
KyAgICAvLyB2ZWxvY2l0eSwgYW5kIHRoZSB0aW1lIHBhcmFtZXRlciBpcyByZS1zY2FsZWQgc28g
dGhhdCBsYXJnZXIgaW5pdGlhbCB2ZWxvY2l0aWVzCisgICAgLy8gbGVhZCB0byBsb25nZXIgaW5p
dGlhbCBhbmltYXRpb25zLiBUaGlzIHNob3VsZCBhbGxvdyB0aGUgYW5pbWF0aW9uIHRvIHNtb290
aGx5CisgICAgLy8gY29udGludWUgdGhlIHZlbG9jaXR5IGF0IHRoZSBlbmQgb2YgdGhlIEdlc3R1
cmVTY3JvbGwsIGFuZCBzbW9vdGhseSBjb21lIHRvIGEgcmVzdAorICAgIC8vIGF0IHRoZSBlbmQu
IEZpbmFsbHksIHdlIGhhdmUgaW50ZWdyYXRlZCB0aGUgY3VydmUgc28gd2UgY2FuIGRlYWwgd2l0
aCBkaXNwbGFjZW1lbnQKKyAgICAvLyBhcyBhIGZ1bmN0aW9uIG9mIHRpbWUsIGFuZCBub3QgdmVs
b2NpdHkuCisgICAgLy8gRmluYWxseSwgd2UgcGxhY2UgYSBjb25zdGFudCB2ZWxvY2l0eSBmcm9t
IHRzID0gMCAuLiAwLjUsIGFuZCBydW4gdGhlIEJlemllciBjdXJ2ZQorICAgIC8vIGZyb20gdHMg
PSAwLjUgLi4gMS41IHRvIGdpdmUgYSBsb25nZXIgcnVuLW91dC4KKyAgICB0aW1lICo9IG1fdGlt
ZVNjYWxlRmFjdG9yOworCisgICAgZmxvYXQgZGlzcGxhY2VtZW50OworICAgIGlmICh0aW1lIDw9
IDAuNSkKKyAgICAgICAgZGlzcGxhY2VtZW50ID0gdGltZTsKKyAgICBlbHNlIGlmICh0aW1lIDw9
IDEuNSkgeworICAgICAgICBkb3VibGUgdCA9IHRpbWUgLSAwLjU7CisgICAgICAgIGRpc3BsYWNl
bWVudCA9IHQgKiAoMSArIHQgKiB0ICogKDAuNSAqIHQgLSAxKSkgKyAwLjU7CisgICAgfSBlbHNl
CisgICAgICAgIGRpc3BsYWNlbWVudCA9IDEuMDsKKworICAgIC8vIEtlZXAgdHJhY2sgb2YgaW50
ZWdlciBwb3J0aW9uIG9mIHNjcm9sbCB0aHVzIGZhciwgYW5kIHByZXBhcmUgaW5jcmVtZW50Lgor
ICAgIEludFBvaW50IHNjcm9sbChkaXNwbGFjZW1lbnQgKiBtX3ZlbG9jaXR5LngoKSwgZGlzcGxh
Y2VtZW50ICogbV92ZWxvY2l0eS55KCkpOworICAgIEludFBvaW50IHNjcm9sbEluY3JlbWVudChz
Y3JvbGwgLSBtX2N1bXVsYXRpdmVTY3JvbGwpOworICAgIG1fY3VtdWxhdGl2ZVNjcm9sbCA9IHNj
cm9sbDsKKworICAgIGlmICh0aW1lIDwgMS41IHx8IHNjcm9sbEluY3JlbWVudCAhPSBJbnRQb2lu
dDo6emVybygpKSB7CisgICAgICAgIHRhcmdldC0+c2V0U2Nyb2xsSW5jcmVtZW50KHNjcm9sbElu
Y3JlbWVudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mZDUyYmM0ZWM3NGMwYjUyYjc1ODQ1YjQ2NjlmNjU2ZjA3ZDI1MGVlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1
cnZlLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUb3VjaEZsaW5n
UGxhdGZvcm1HZXN0dXJlQ3VydmVfaAorI2RlZmluZSBUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJl
Q3VydmVfaAorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtR2Vz
dHVyZUN1cnZlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxhdGZvcm1HZXN0dXJl
Q3VydmVUYXJnZXQ7CisKKy8vIEltcGxlbWVudGF0aW9uIG9mIFBsYXRmb3JtR2VzdHVyZUN1cnZl
IHN1aXRhYmxlIGZvciB0b3VjaCBwYWQvc2NyZWVuLWJhc2VkCisvLyBmbGluZyBzY3JvbGwuIFN0
YXJ0cyB3aXRoIGEgZmxhdCB2ZWxvY2l0eSBwcm9maWxlIGJhc2VkIG9uICd2ZWxvY2l0eScsIHdo
aWNoCisvLyB0YWlscyBvZmYgdG8gemVyby4gVGltZSBpcyBzY2FsZWQgdG8gdGhhdCBkdXJhdGlv
biBvZiB0aGUgZmxpbmcgaXMgcHJvcG9ydGlvbmFsCisvLyB0aGUgaW5pdGlhbCB2ZWxvY2l0eS4K
K2NsYXNzIFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSA6IHB1YmxpYyBQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0
dXJlQ3VydmU+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSk7CisgICAgdmlydHVh
bCB+VG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wg
YXBwbHkoZG91YmxlIHRpbWUsIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0Kik7CisKK3ByaXZh
dGU6CisgICAgZXhwbGljaXQgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKGNvbnN0IEZs
b2F0UG9pbnQmIHZlbG9jaXR5KTsKKworICAgIEZsb2F0UG9pbnQgbV92ZWxvY2l0eTsKKyAgICBm
bG9hdCBtX3RpbWVTY2FsZUZhY3RvcjsKKyAgICBJbnRQb2ludCBtX2N1bXVsYXRpdmVTY3JvbGw7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1doZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZmFiNTdjZDVmODZkZGMzMWViNjE4ZGI3MzlmNzMxMDc4ZjY4YzFjNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1doZWVsRmxpbmdQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1
cnZlLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oIgorI2luY2x1
ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPFBsYXRmb3Jt
R2VzdHVyZUN1cnZlPiBXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShjb25z
dCBGbG9hdFBvaW50JiB2ZWxvY2l0eSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdoZWVs
RmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSh2ZWxvY2l0eSkpOworfQorCitXaGVlbEZsaW5nUGxh
dGZvcm1HZXN0dXJlQ3VydmU6OldoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZShjb25zdCBG
bG9hdFBvaW50JiB2ZWxvY2l0eSkKKyAgICA6IG1fdmVsb2NpdHkodmVsb2NpdHkpCit7CisgICAg
QVNTRVJUKHZlbG9jaXR5ICE9IEZsb2F0UG9pbnQ6Onplcm8oKSk7Cit9CisKK1doZWVsRmxpbmdQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6fldoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSgpCit7
Cit9CisKK2Jvb2wgV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjphcHBseShkb3VibGUg
dGltZSwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKK3sKKyAgICAvLyBVc2Ug
YSBSYXlsZWlnaCBkaXN0cmlidXRpb24gZm9yIHRoZSBjdXJ2ZS4gVGhpcyBzaW11bGF0ZXMgYSB2
ZWxvY2l0eSBwcm9maWxlCisgICAgLy8gdGhhdCBzdGFydHMgYXQgMCwgaW5jcmVhc2VzIHRvIGEg
bWF4aW11bSwgdGhlbiBkZWNyZWFzZXMgYWdhaW4gc21vb3RobHkuIEJ5CisgICAgLy8gdXNpbmcg
dGhlIGN1bXVsYXRpdmUgZGlzdHJpYnV0aW9uIGZ1bmN0aW9uIChDREYpIGluc3RlYWQgb2YgdGhl
IHBvaW50LW1hc3MgZnVuY3Rpb24sCisgICAgLy8gd2UgY2FuIGlzb2xhdGUgdGltaW5nIGppdHRl
ciBieSByZW1lbWJlcmluZyB0aGUgQ0RGIHZhbHVlIGF0IHRoZSBsYXN0IHRpY2suIFNpbmNlCisg
ICAgLy8gdGhlIENERiBtYXhlcyBvdXQgYXQgMSwgc2NhbGUgaXQgYnkgdGhlIGlucHV0IHZlbG9j
aXR5LgorICAgIC8vCisgICAgLy8gQ0RGIC0+IEYoeDsgc2lnbWEpID0gMSAtIGV4cHsteF4yLzJc
c2lnbWFeMn0KKyAgICAvLyByZWY6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmF5bGVp
Z2hfZGlzdHJpYnV0aW9uCisgICAgLy8gRklYTUU6IGNvbnNpZGVyIG1ha2luZyB0aGUgdmFsdWUg
b2Ygc2lnbWEgc2V0dGFibGUgaW4gdGhlIGNvbnN0cnVjdG9yLgorICAgIHN0YXRpYyBkb3VibGUg
dHdvU2lnbWFTcXVhcmVkSW52ZXJzZSA9IDE2OyAvLyBzaWdtYSA9IDAuMjUKKyAgICBmbG9hdCBj
ZGYgPSAxIC0gZXhwKC10aW1lICogdGltZSAqIHR3b1NpZ21hU3F1YXJlZEludmVyc2UpOworICAg
IEludFBvaW50IHNjcm9sbChjZGYgKiBtX3ZlbG9jaXR5LngoKSwgY2RmICogbV92ZWxvY2l0eS55
KCkpOworICAgIEludFBvaW50IHNjcm9sbEluY3JlbWVudChzY3JvbGwgLSBtX2N1bXVsYXRpdmVT
Y3JvbGwpOworICAgIG1fY3VtdWxhdGl2ZVNjcm9sbCA9IHNjcm9sbDsKKworICAgIGlmIChjZGYg
PCAwLjUgfHwgc2Nyb2xsSW5jcmVtZW50ICE9IEludFBvaW50Ojp6ZXJvKCkpIHsKKyAgICAgICAg
dGFyZ2V0LT5zZXRTY3JvbGxJbmNyZW1lbnQoc2Nyb2xsSW5jcmVtZW50KTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaGVlbEZsaW5n
UGxhdGZvcm1HZXN0dXJlQ3VydmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1doZWVsRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3MjE0NjE2NTMzM2YyM2M4Yzli
YmY2YzAxZGRiZjA2N2FlZTFhYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9XaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaApAQCAtMCwwICsxLDU3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZV9o
CisjZGVmaW5lIFdoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZV9oCisKKyNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldDsKKworLy8gSW1w
bGVtZW50YXRpb24gb2YgUGxhdGZvcm1HZXN0dXJlQ3VydmUgc3VpdGFibGUgZm9yIG1vdXNlIHdo
ZWVsLWJhc2VkIGZsaW5nCisvLyBzY3JvbGwuIEEgUmF5bGVpZ2ggZGlzdHJpYnR1dGlvbiBjdXJ2
ZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgdmVsb2NpdHkgcHJvZmlsZSwKKy8vIHNvIHZlbG9jaXR5
IHN0YXJ0cyBhdCB6ZXJvLCBhY2NlbGVyYXRlcyB0byBhIG1heGltdW0gcHJvcG9ydGlvbmFsIHRv
ICd2ZWxvY2l0eScsCisvLyB0aGVuIGdlbnRseSB0YWlscyBvZmYgdG8gemVybyBhZ2Fpbi4KK2Ns
YXNzIFdoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSA6IHB1YmxpYyBQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJl
Q3VydmU+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSk7CisgICAgdmlydHVhbCB+
V2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBw
bHkoZG91YmxlIHRpbWUsIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0Kik7CisKK3ByaXZhdGU6
CisgICAgV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKGNvbnN0IEZsb2F0UG9pbnQmIHZl
bG9jaXR5KTsKKworICAgIEZsb2F0UG9pbnQgbV92ZWxvY2l0eTsKKyAgICBJbnRQb2ludCBtX2N1
bXVsYXRpdmVTY3JvbGw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTU2ZTQ2YjRlZjQwMDkzZjExMmExYTYzNDA2NzIxNDFjZDI0MGQ0YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0
aXZlR2VzdHVyZUFuaW1hdGlvbi5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0
aW9uLmgiCisKKyNpbmNsdWRlICJjYy9DQ0dlc3R1cmVDdXJ2ZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1Bhc3NPd25QdHI8Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPiBDQ0FjdGl2ZUdl
c3R1cmVBbmltYXRpb246OmNyZWF0ZShkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPENDR2Vz
dHVyZUN1cnZlPiBjdXJ2ZSwgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbihzdGFydFRpbWUsIGN1
cnZlLCB0YXJnZXQpKTsKK30KKworQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpDQ0FjdGl2ZUdl
c3R1cmVBbmltYXRpb24oZG91YmxlIHN0YXJ0VGltZSwgUGFzc093blB0cjxDQ0dlc3R1cmVDdXJ2
ZT4gY3VydmUsIENDR2VzdHVyZUN1cnZlVGFyZ2V0KiB0YXJnZXQpCisgICAgOiBtX3N0YXJ0VGlt
ZShzdGFydFRpbWUpCisgICAgLCBtX2dlc3R1cmVDdXJ2ZShjdXJ2ZSkKKyAgICAsIG1fZ2VzdHVy
ZUN1cnZlVGFyZ2V0KHRhcmdldCkKK3sKK30KKworQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjp+
Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkKK3sKK30KKworYm9vbCBDQ0FjdGl2ZUdlc3R1cmVB
bmltYXRpb246OmFuaW1hdGUoZG91YmxlIHRpbWUpCit7CisgICAgLy8gQ0NHZXN0dXJlQ3VydmVz
IHVzZWQgemVyby1iYXNlZCB0aW1lLCBzbyBzdWJ0cmFjdCBzdGFydC10aW1lLgorICAgIHJldHVy
biBtX2dlc3R1cmVDdXJ2ZS0+YXBwbHkodGltZSAtIG1fc3RhcnRUaW1lLCBtX2dlc3R1cmVDdXJ2
ZVRhcmdldCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlR2VzdHVyZUFu
aW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzcxYjIyNWRmZDNiZTJkYTk5
NjkxNjA0ZWQ0MzU3MzcyMWM0NTNkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5o
CkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NBY3RpdmVHZXN0dXJl
QW5pbWF0aW9uX2gKKyNkZWZpbmUgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uX2gKKworI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDR2Vz
dHVyZUN1cnZlOworY2xhc3MgQ0NHZXN0dXJlQ3VydmVUYXJnZXQ7CisKK2NsYXNzIENDQWN0aXZl
R2VzdHVyZUFuaW1hdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NBY3RpdmVHZXN0
dXJlQW5pbWF0aW9uKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0FjdGl2ZUdl
c3R1cmVBbmltYXRpb24+IGNyZWF0ZShkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPENDR2Vz
dHVyZUN1cnZlPiwgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKKyAgICB+Q0NBY3RpdmVHZXN0dXJl
QW5pbWF0aW9uKCk7CisKKyAgICBib29sIGFuaW1hdGUoZG91YmxlIHRpbWUpOworCitwcml2YXRl
OgorICAgIENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbihkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3du
UHRyPENDR2VzdHVyZUN1cnZlPiwgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKKworICAgIGRvdWJs
ZSBtX3N0YXJ0VGltZTsKKyAgICBPd25QdHI8Q0NHZXN0dXJlQ3VydmU+IG1fZ2VzdHVyZUN1cnZl
OworICAgIENDR2VzdHVyZUN1cnZlVGFyZ2V0KiBtX2dlc3R1cmVDdXJ2ZVRhcmdldDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dlc3R1cmVDdXJ2ZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJlQ3VydmUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zZWY5MzViNmE0NTJlY2ZlMDFjNTZlYzUyYzdmYzIzOTc5NmRmOWUzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NHZXN0dXJlQ3VydmUuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIENDR2VzdHVyZUN1cnZlX2gKKyNkZWZpbmUgQ0NHZXN0dXJlQ3VydmVfaAorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEludFBvaW50OworCitjbGFzcyBDQ0dlc3R1cmVDdXJ2
ZVRhcmdldCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbEluY3JlbWVudChj
b25zdCBJbnRQb2ludCYpID0gMDsKKyAgICAvLyBGSVhNRTogYWRkIGludGVyZmFjZXMgZm9yIHNl
dFNjcm9sbCgpLCBzZXRQYWdlU2NhbGVBbmRTY3JvbGwoKSwgZXRjLgorCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB+Q0NHZXN0dXJlQ3VydmVUYXJnZXQoKSB7IH0KK307CisKK2NsYXNzIENDR2Vz
dHVyZUN1cnZlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ0dlc3R1cmVDdXJ2ZSgpIHsgfQor
CisgICAgdmlydHVhbCBib29sIGFwcGx5KGRvdWJsZSB0aW1lLCBDQ0dlc3R1cmVDdXJ2ZVRhcmdl
dCopID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBmNjVjZDVkNjVlZGFmOTU2OGEzYTBkYTYzODdjM2I4
MTQzZWY3OTJjLi4yODVhN2E0YjUwNzRkZWMzY2VmZjJlOGRlNjFmNWI2YWNmYWRiMzIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTEwOSw2ICsxMDksNyBAQAogICAgICAgICAg
ICAgJ3Rlc3RzL0xheWVyVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvTG9jYWxpemVkTnVtYmVySUNVVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1BhaW50
QWdncmVnYXRvclRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9QbGF0Zm9ybUdlc3R1cmVD
dXJ2ZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1BPREFyZW5hVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL1BPREludGVydmFsVHJlZVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUZXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43NGNhNTc2Njc0YTkwNDMwYmEyNzI2OTA3MzQ4YmRlZmQyMmI2ZWVjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUdlc3R1cmVD
dXJ2ZVRlc3QuY3BwCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKworI2luY2x1ZGUgIkFjdGl2
ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUN1
cnZlVGFyZ2V0LmgiCisjaW5jbHVkZSAiVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgi
CisjaW5jbHVkZSAiV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCisjaW5jbHVkZSAi
Y2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NHZXN0dXJlQ3Vy
dmUuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KworbmFtZXNwYWNlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIE1vY2tQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCA6IHB1YmxpYyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRh
cmdldCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbEluY3JlbWVudChjb25z
dCBJbnRQb2ludCYgZGVsdGEpCisgICAgeworICAgICAgICBtX2N1bXVsYXRpdmVEZWx0YSA9IG1f
Y3VtdWxhdGl2ZURlbHRhICsgZGVsdGE7CisgICAgfQorCisgICAgSW50UG9pbnQgY3VtdWxhdGl2
ZURlbHRhKCkgY29uc3QgeyByZXR1cm4gIG1fY3VtdWxhdGl2ZURlbHRhOyB9CisgICAgdm9pZCBy
ZXNldEN1bXVsYXRpdmVEZWx0YSgpIHsgbV9jdW11bGF0aXZlRGVsdGEgPSBJbnRQb2ludCgpOyB9
CisKK3ByaXZhdGU6CisgICAgSW50UG9pbnQgbV9jdW11bGF0aXZlRGVsdGE7Cit9OworCitURVNU
KFBsYXRmb3JtR2VzdHVyZUN1cnZlLCBmbGluZ0N1cnZlKQoreworICAgIE1vY2tQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZVRhcmdldCB0YXJnZXQ7CisgICAgT3duUHRyPEFjdGl2ZVBsYXRmb3JtR2VzdHVy
ZUFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjpj
cmVhdGUoMCwgV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2lu
dCgxMDAsIDApKSwgJnRhcmdldCk7CisKKyAgICAvLyBOb3RlOiB0aGUgZXhwZWN0YXRpb25zIGJl
bG93IGFyZSBkZXBlbmRlbnQgb24gdGhlIHZhbHVlIG9mIHNpZ21hIGhhcmQtY29kZWQgaW4gdGhl
IFJheWxlaWdoCisgICAgLy8gICAgICAgY3VydmUuIElmIHNpZ21hIGNoYW5nZXMsIHRoZXNlIHRl
c3QgZXhwZWN0YXRpb25zIHdpbGwgYWxzbyBjaGFuZ2UuCisgICAgRVhQRUNUX1RSVUUoYW5pbWF0
aW9uLT5hbmltYXRlKDApKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMC4y
NSkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZSgwLjQ1KSk7IC8vIFVzZSBu
b24tdW5pZm9ybSB0aWNrIHNwYWNpbmcuCisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmlt
YXRlKDAuNzUpKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMTAwMCkpOwor
ICAgIEVYUEVDVF9GQUxTRShhbmltYXRpb24tPmFuaW1hdGUoMTAwMSkpOworICAgIC8vIFNpbmNl
IHRoZSBSYXlsZWlnaCBDREYgbWF4ZXMgb3V0IGF0IDEsIHdlIGV4cGVjdCB0aGUgY3VtdWxhdGl2
ZSBzY3JvbGwgaW5jcmVtZW50cyB0bworICAgIC8vIG1hdGNoIHRoZSBpbnB1dCB2ZWxvY2l0eSBw
YXJhbWV0ZXIuCisgICAgLy8gU2luY2Ugd2UgY2FuIGJlIG9mZiBieSArLy0wLjUgb24gZWFjaCBj
b252ZXJzaW9uIHRvIGludCBmb3Igc2V0U2Nyb2xsSW5jcmVtZW50LAorICAgIC8vIHBpY2sgdGhl
ICduZWFybmVzcycgdG8gYmUgd2l0aGluIHRoZSBudW1iZXIgb2YgdGltZXMgYW5pbWF0ZSByZXR1
cm5zIHRydWUuCisgICAgRVhQRUNUX05FQVIodGFyZ2V0LmN1bXVsYXRpdmVEZWx0YSgpLngoKSwg
MTAwLCAxKTsKKyAgICBFWFBFQ1RfRVEodGFyZ2V0LmN1bXVsYXRpdmVEZWx0YSgpLnkoKSwgMCk7
CisKKyAgICBkb3VibGUgYmFzZVRpbWUgPSA0Mi40MjsKKyAgICBhbmltYXRpb24gPSBBY3RpdmVQ
bGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OmNyZWF0ZShiYXNlVGltZSwgV2hlZWxGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2ludCgxMDAsIDApKSwgJnRhcmdldCk7Cisg
ICAgdGFyZ2V0LnJlc2V0Q3VtdWxhdGl2ZURlbHRhKCk7CisKKyAgICBFWFBFQ1RfVFJVRShhbmlt
YXRpb24tPmFuaW1hdGUoYmFzZVRpbWUgKyAwLjM1KSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0
aW9uLT5hbmltYXRlKGJhc2VUaW1lICsgMS4zNSkpOworICAgIEVYUEVDVF9GQUxTRShhbmltYXRp
b24tPmFuaW1hdGUoYmFzZVRpbWUgKyAxMDAwKSk7CisgICAgRVhQRUNUX05FQVIodGFyZ2V0LmN1
bXVsYXRpdmVEZWx0YSgpLngoKSwgMTAwLCAxKTsKKworICAgIGFuaW1hdGlvbiA9IEFjdGl2ZVBs
YXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKDAsIFdoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZTo6Y3JlYXRlKEZsb2F0UG9pbnQoNTAsIDE1MCkpLCAmdGFyZ2V0KTsKKyAgICB0YXJn
ZXQucmVzZXRDdW11bGF0aXZlRGVsdGEoKTsKKworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+
YW5pbWF0ZSgwKSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDAuMjUpKTsK
KyAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMC40NSkpOworICAgIEVYUEVDVF9U
UlVFKGFuaW1hdGlvbi0+YW5pbWF0ZSgwLjc1KSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9u
LT5hbmltYXRlKDEwMDApKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbWF0aW9uLT5hbmltYXRlKDEw
MDEpKTsKKyAgICBFWFBFQ1RfTkVBUih0YXJnZXQuY3VtdWxhdGl2ZURlbHRhKCkueCgpLCA1MCwg
MSk7CisgICAgRVhQRUNUX05FQVIodGFyZ2V0LmN1bXVsYXRpdmVEZWx0YSgpLnkoKSwgMTUwLCAx
KTsKK30KKworVEVTVChQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSwgZmxpbmdDdXJ2ZVRvdWNoKQorewor
ICAgIE1vY2tQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCB0YXJnZXQ7CisgICAgT3duUHRyPEFj
dGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQWN0aXZlUGxhdGZvcm1H
ZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUoMCwgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZl
OjpjcmVhdGUoRmxvYXRQb2ludCgxMDAwLCAwKSksICZ0YXJnZXQpOworCisgICAgLy8gTm90ZTog
dGhlIGV4cGVjdGF0aW9ucyBiZWxvdyBhcmUgZGVwZW5kZW50IG9uIHRoZSB2YWx1ZSBvZiBzaWdt
YSBoYXJkLWNvZGVkIGluIHRoZSBSYXlsZWlnaAorICAgIC8vICAgICAgIGN1cnZlLiBJZiBzaWdt
YSBjaGFuZ2VzLCB0aGVzZSB0ZXN0IGV4cGVjdGF0aW9ucyB3aWxsIGFsc28gY2hhbmdlLgorICAg
IEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZSgwKSk7CisgICAgRVhQRUNUX1RSVUUoYW5p
bWF0aW9uLT5hbmltYXRlKDAuMjUpKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1h
dGUoMC40NSkpOyAvLyBVc2Ugbm9uLXVuaWZvcm0gdGljayBzcGFjaW5nLgorICAgIEVYUEVDVF9U
UlVFKGFuaW1hdGlvbi0+YW5pbWF0ZSgwLjc1KSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9u
LT5hbmltYXRlKDAuOSkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZSgxMDAw
KSk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW1hdGlvbi0+YW5pbWF0ZSgxMDAxKSk7CisgICAgLy8g
U2luY2Ugd2UgY2FuIGJlIG9mZiBieSArLy0wLjUgb24gZWFjaCBjb252ZXJzaW9uIHRvIGludCBm
b3Igc2V0U2Nyb2xsSW5jcmVtZW50LAorICAgIC8vIHBpY2sgdGhlICduZWFybmVzcycgdG8gYmUg
d2l0aGluIHRoZSA1ICogbnVtYmVyIG9mIHRpbWVzIGFuaW1hdGUgcmV0dXJucyB0cnVlLgorICAg
IEVYUEVDVF9ORUFSKHRhcmdldC5jdW11bGF0aXZlRGVsdGEoKS54KCksIDEwMDAsIDEpOworICAg
IEVYUEVDVF9FUSh0YXJnZXQuY3VtdWxhdGl2ZURlbHRhKCkueSgpLCAwKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgYW5vbnltb3VzCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130959</attachid>
            <date>2012-03-08 20:16:02 -0800</date>
            <delta_ts>2012-03-09 15:35:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79827-20120308231601.patch</filename>
            <type>text/plain</type>
            <size>43897</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWVmNmVhZjc3M2Y5NWRm
NTRiY2NjOGUxOTAyMmE1YjlhYjI4MDBkNC4uOGJhYzU0Yzg1MWMxYjFlOWVhY2M2MmRkYmQ0ZTAz
ZThlZDk1NDM2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEyLTAzLTA4ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEltcGxlbWVudCBzY3JvbGwgcGh5c2ljcyBhcmNoaXRlY3R1cmUgZm9yIGltcGwvbWFpbiB0
aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5
ODI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5p
dHRlc3RzIGFkZGVkLCBwbHVzIGZvbGxvdy1vbiBwYXRjaCBmcm9tIHJqa3JvZWdlIHdpbGwgYWRk
IGxheW91dCB0ZXN0cy4KKworICAgICAgICBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSBpcyBhIGZyYW1l
d29yayB0byBzZXBhcmF0ZSB0aGUgcGh5c2ljYWwgc2ltdWxhdGlvbiBmcm9tIGZvciBnZXN0dXJl
CisgICAgICAgIGFuaW1hdGlvbiBmcm9tIGNvbnRyb2wgY29uY2VybnMuIFRoaXMgYWxsb3dzIHRo
ZSBwaHlzaWNzIHRvIGJlIHJldXNlZCBpbiBhbHRlcm5hdGUgcGxhY2VzLgorICAgICAgICBBdCBw
cmVzZW50LCB0aGUgZnJhbWV3b3JrIHdpbGwgYmUgYXBwbGllZCBpbiBTY3JvbGxBbmltYXRvck5v
bmUgYW5kIHRoZSBDaHJvbWUgQ29tcG9zaXRvci4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9BY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24uY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlUGxhdGZv
cm1HZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlUGxh
dGZvcm1HZXN0dXJlQW5pbWF0aW9uOjp+QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6QWN0aXZl
UGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZVBsYXRm
b3JtR2VzdHVyZUFuaW1hdGlvbjo6YW5pbWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vQWN0aXZl
UGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL1BsYXRmb3JtR2VzdHVyZUN1cnZlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZTo6flBsYXRmb3JtR2VzdHVyZUN1cnZlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQ6On5QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdl
dCk6CisgICAgICAgICogcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNo
RmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6VG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6flRv
dWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEZs
aW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9Ub3Vj
aEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSk6CisgICAgICAgICogcGxh
dGZvcm0vV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OldoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVD
dXJ2ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZTo6V2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKToKKyAgICAgICAgKFdlYkNv
cmU6OldoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6fldoZWVsRmxpbmdQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJl
Q3VydmU6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9XaGVlbEZsaW5nUGxhdGZvcm1HZXN0
dXJlQ3VydmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdoZWVsRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6Q0NBY3Rp
dmVHZXN0dXJlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFu
aW1hdGlvbjo6fkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0FjdGl2ZUdlc3R1cmVBbmltYXRpb246OmFuaW1hdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dlc3R1cmVDdXJ2ZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NHZXN0dXJlQ3VydmVUYXJnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NHZXN0dXJlQ3VydmVUYXJnZXQ6On5DQ0dlc3R1cmVDdXJ2
ZVRhcmdldCk6CisgICAgICAgIChDQ0dlc3R1cmVDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0dlc3R1cmVDdXJ2ZTo6fkNDR2VzdHVyZUN1cnZlKToKKwogMjAxMi0wMy0wOCAgSWx5YSBUaWto
b25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBzaW5n
bGUgbGluZSBmaXguIFRoZSBmdW5jdGlvbiBoYWQgdG8gcmV0dXJuIGEgaGFzaCBidXQgaXQgcmV0
dXJuZWQganVzdCBhZGRyZXNzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3NjA3M2Fm
MmZlNWEwZDJjYmU5ZTE3ZmE5NTA0Y2VhZGNhZmE2YThlLi4zNmYwZTkzYTU2ODNhZjE2NjdkNDQ4
ZjdhNmE1MTVkNWIxNzhlOGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEzIEBACisyMDEyLTAzLTA4ICBXLiBKYW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBzY3JvbGwgcGh5c2ljcyBhcmNo
aXRlY3R1cmUgZm9yIGltcGwvbWFpbiB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc5ODI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9QbGF0
Zm9ybUdlc3R1cmVDdXJ2ZVRlc3QuY3BwOiBBZGRlZC4KKwogMjAxMi0wMy0wNyAgS2VudCBUYW11
cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIG1lYW5pbmdsZXNzIGNv
ZGUgaW4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwcmVmZXJyZWRDb250ZW50V2lkdGgo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IDA2YjlmNjEyNmIzZDkwZWFmYzBmYzY3N2E2YWM5OTZiZjdh
ZDA3N2EuLjA5OTIxMDY1ZGVkYTIzZjM0YWYzMDIzYjIxMTE5YzQ0NTBkNzIzYzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTI5MDQsNiArMjkwNCw4IEBACiAgICAgICAgICAgICAncGFnZS93aW5jZS9G
cmFtZVdpbkNFLmNwcCcsCiAgICAgICAgICAgICAncGFnZS93eC9EcmFnQ29udHJvbGxlcld4LmNw
cCcsCiAgICAgICAgICAgICAncGFnZS93eC9FdmVudEhhbmRsZXJXeC5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9BcmVuYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0FyZW5h
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAnLApAQCAtMjk0
OSw2ICsyOTUxLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRs
ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vUGFzdGVib2FyZC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9y
bVN0cmF0ZWdpZXMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybVRvdWNoRXZl
bnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZvcm1Ub3VjaFBvaW50LmgnLApAQCAt
Mjk4MCw4ICsyOTgzLDEyIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vVGhyZWFkVGltZXJzLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vVGhyZWFkVGltZXJzLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL1RpbWVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vVG91Y2hGbGluZ1Bs
YXRmb3JtR2VzdHVyZUN1cnZlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vVG91Y2hGbGlu
Z1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1VVSUQuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9VVUlELmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L1doZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL1doZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9XaWRnZXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0
aW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbkxpc3Qu
Y3BwJywKQEAgLTM0MTIsNiArMzQxOSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJl
QW5pbWF0aW9uLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmNw
cCcsCkBAIC0zNDMwLDYgKzM0MzksNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDR2VzdHVyZUN1cnZl
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNV
cERpc3BsYXkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0hlYWRzVXBEaXNwbGF5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uN2Y2ZTdjMmM5NjQwNGNkNTY5NmY5YjE3YjY0MzBlOWI0M2MzZjE1MQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1h
dGlvbi5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIkFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5oIgorCisjaW5jbHVkZSAi
UGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRh
cmdldC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8QWN0aXZlUGxhdGZv
cm1HZXN0dXJlQW5pbWF0aW9uPiBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OmNyZWF0
ZShkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBjdXJ2
ZSwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKK3sKKyAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbihzdGFydFRpbWUsIGN1cnZl
LCB0YXJnZXQpKTsKK30KKworQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjp+QWN0aXZl
UGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKCkKK3sKK30KKworQWN0aXZlUGxhdGZvcm1HZXN0dXJl
QW5pbWF0aW9uOjpBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24oZG91YmxlIHN0YXJ0VGlt
ZSwgUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gY3VydmUsIFBsYXRmb3JtR2VzdHVy
ZUN1cnZlVGFyZ2V0KiB0YXJnZXQpCisgICAgOiBtX3N0YXJ0VGltZShzdGFydFRpbWUpCisgICAg
LCBtX2N1cnZlKGN1cnZlKQorICAgICwgbV90YXJnZXQodGFyZ2V0KQoreworfQorCitib29sIEFj
dGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6YW5pbWF0ZShkb3VibGUgdGltZSkKK3sKKyAg
ICAvLyBBbGwgUGxhdGZvcm1HZXN0dXJlQ3VydmVzIGFzc3VtZSB6ZXJvLWJhc2VkIHRpbWUsIHNv
IHdlIHN1YnRyYWN0CisgICAgLy8gdGhlIGFuaW1hdGlvbiBzdGFydCB0aW1lIGJlZm9yZSBwYXNz
aW5nIHRvIHRoZSBjdXJ2ZS4KKyAgICByZXR1cm4gbV9jdXJ2ZS0+YXBwbHkodGltZSAtIG1fc3Rh
cnRUaW1lLCBtX3RhcmdldCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0
aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYWFlNDBkZTdiYjA1MjhkOWUyNDVhNzRiNTllZGU0YTRmODgyYjhm
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRm
b3JtR2VzdHVyZUFuaW1hdGlvbi5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFj
dGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbl9oCisjZGVmaW5lIEFjdGl2ZVBsYXRmb3JtR2Vz
dHVyZUFuaW1hdGlvbl9oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTsKK2NsYXNzIFBsYXRmb3Jt
R2VzdHVyZUN1cnZlVGFyZ2V0OworCisvLyBJbXBsZW1lbnRzIGEgZ2VzdHVyZSBhbmltYXRpb24g
KGZsaW5nIHNjcm9sbCwgZXRjLikgdXNpbmcgYSBjdXJ2ZSB3aXRoIGEgZ2VuZXJpYyBpbnRlcmZh
Y2UKKy8vIHRvIGRlZmluZSB0aGUgYW5pbWF0aW9uIHBhcmFtZXRlcnMgYXMgYSBmdW5jdGlvbiBv
ZiB0aW1lLCBhbmQgYXBwbGllcyB0aGUgYW5pbWF0aW9uCisvLyB0byBhIHRhcmdldCwgYWdhaW4g
dmlhIGEgZ2VuZXJpYyBpbnRlcmZhY2UuIEl0IGlzIGFzc3VtZWQgdGhhdCBhbmltYXRlKCkgaXMg
Y2FsbGVkCisvLyBvbiBhIG1vcmUtb3ItbGVzcyByZWd1bGFyIGJhc2lzIGJ5IHRoZSBvd25lci4K
K2NsYXNzIEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbiB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKTsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc093blB0cjxBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24+IGNyZWF0ZShk
b3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiwgUGxhdGZv
cm1HZXN0dXJlQ3VydmVUYXJnZXQqKTsKKyAgICB+QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0
aW9uKCk7CisKKyAgICBib29sIGFuaW1hdGUoZG91YmxlIHRpbWUpOworCitwcml2YXRlOgorICAg
IC8vIEFzc3VtZXMgYSB2YWxpZCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCB0aGF0IG91dGxp
dmVzIHRoZSBhbmltYXRpb24uCisgICAgQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKGRv
dWJsZSBzdGFydFRpbWUsIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+LCBQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZVRhcmdldCopOworCisgICAgZG91YmxlIG1fc3RhcnRUaW1lOworICAgIE93
blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gbV9jdXJ2ZTsKKyAgICBQbGF0Zm9ybUdlc3R1cmVD
dXJ2ZVRhcmdldCogbV90YXJnZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJl
Q3VydmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTIyMTk5MTQ3OGVhOWMxODkzZjk2YjNmZjBlZWQ3ZWY2NGM3N2M0MgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1
cnZlLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZV9oCisjZGVmaW5lIFBsYXRmb3JtR2VzdHVyZUN1cnZlX2gKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldDsKKworLy8gQWJz
dHJhY3QgaW50ZXJmYWNlIGZvciBjdXJ2ZXMgdXNlZCBieSBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVB
bmltYXRpb24uIEEKKy8vIFBsYXRmb3JtR2VzdHVyZUN1cnZlIGRlZmluZXMgdGhlIGFuaW1hdGlv
biBwYXJhbWV0ZXJzIGFzIGEgZnVuY3Rpb24gb2YgdGltZQorLy8gKHplcm8tYmFzZWQpLCBhbmQg
YXBwbGllcyB0aGUgcGFyYW1ldGVycyBkaXJlY3RseSB0byB0aGUgdGFyZ2V0IG9mIHRoZQorLy8g
YW5pbWF0aW9uLgorY2xhc3MgUGxhdGZvcm1HZXN0dXJlQ3VydmUgeworcHVibGljOgorICAgIHZp
cnR1YWwgflBsYXRmb3JtR2VzdHVyZUN1cnZlKCkgeyB9CisKKyAgICAvLyBSZXR1cm5zIGZhbHNl
IGlmIGN1cnZlIGhhcyBmaW5pc2hlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSBhcHBsaWVkLgorICAg
IHZpcnR1YWwgYm9vbCBhcHBseShkb3VibGUgdGltZSwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJn
ZXQqKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYmZiMGFlYmNkZGViNjU0OWUzYjRjMTAwZDc3MGZhYmE5ODIxMzRiYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1
cnZlVGFyZ2V0LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldF9oCisjZGVmaW5lIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFy
Z2V0X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnRQb2ludDsKKworY2xhc3Mg
UGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBz
ZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmKSA9IDA7CisgICAgLy8gRklYTUU6IGFk
ZCBpbnRlcmZhY2VzIGZvciBzZXRTY3JvbGwoKSwgc2V0UGFnZVNjYWxlQW5kU2Nyb2xsKCksIGV0
Yy4KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgflBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0
KCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVD
dXJ2ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDc2MDk5NTgzOTM4MmRhODUxOTlhMTZhZGI0MjgwODNhYjZl
NzMxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVG91Y2hGbGluZ1BsYXRmb3JtR2Vz
dHVyZUN1cnZlLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oIgor
I2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3Bh
Y2Ugc3RkOworCitQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBUb3VjaEZsaW5nUGxh
dGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSkKK3sK
KyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSh2
ZWxvY2l0eSkpOworfQorCitUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OlRvdWNoRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZShjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSkKKyAgICA6
IG1fdmVsb2NpdHkodmVsb2NpdHkpCisgICAgLCBtX3RpbWVTY2FsZUZhY3RvcigxMDAwIC8gbWF4
KDEuZiwgbWF4KGZhYnModmVsb2NpdHkueCgpKSwgZmFicyh2ZWxvY2l0eS55KCkpKSkpCit7Cisg
ICAgQVNTRVJUKHZlbG9jaXR5ICE9IEZsb2F0UG9pbnQ6Onplcm8oKSk7Cit9CisKK1RvdWNoRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6flRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSgp
Cit7Cit9CisKK2Jvb2wgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjphcHBseShkb3Vi
bGUgdGltZSwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKK3sKKyAgICAvLyBI
ZXJlIHdlIGltcGxlbWVudCBhIGN1YmljIGJlemllciBjdXJ2ZSB3aXRoIHBhcmFtZXRlcnMgWzEg
MSAwIDBdIHdoaWNoIGdpdmVzCisgICAgLy8gdigwKSA9IDEsIGEoMCkgPSAwLCB2KDEpID0gMCwg
YSgxKSA9IDAuIFRoZSBjdXJ2ZSBpcyBzY2FsZWQgYnkgdGhlIGluaXRpYWwKKyAgICAvLyB2ZWxv
Y2l0eSwgYW5kIHRoZSB0aW1lIHBhcmFtZXRlciBpcyByZS1zY2FsZWQgc28gdGhhdCBsYXJnZXIg
aW5pdGlhbCB2ZWxvY2l0aWVzCisgICAgLy8gbGVhZCB0byBsb25nZXIgaW5pdGlhbCBhbmltYXRp
b25zLiBUaGlzIHNob3VsZCBhbGxvdyB0aGUgYW5pbWF0aW9uIHRvIHNtb290aGx5CisgICAgLy8g
Y29udGludWUgdGhlIHZlbG9jaXR5IGF0IHRoZSBlbmQgb2YgdGhlIEdlc3R1cmVTY3JvbGwsIGFu
ZCBzbW9vdGhseSBjb21lIHRvIGEgcmVzdAorICAgIC8vIGF0IHRoZSBlbmQuIEZpbmFsbHksIHdl
IGhhdmUgaW50ZWdyYXRlZCB0aGUgY3VydmUgc28gd2UgY2FuIGRlYWwgd2l0aCBkaXNwbGFjZW1l
bnQKKyAgICAvLyBhcyBhIGZ1bmN0aW9uIG9mIHRpbWUsIGFuZCBub3QgdmVsb2NpdHkuCisgICAg
Ly8gRmluYWxseSwgd2UgcGxhY2UgYSBjb25zdGFudCB2ZWxvY2l0eSBmcm9tIHRzID0gMCAuLiAw
LjUsIGFuZCBydW4gdGhlIEJlemllciBjdXJ2ZQorICAgIC8vIGZyb20gdHMgPSAwLjUgLi4gMS41
IHRvIGdpdmUgYSBsb25nZXIgcnVuLW91dC4KKyAgICB0aW1lICo9IG1fdGltZVNjYWxlRmFjdG9y
OworCisgICAgZmxvYXQgZGlzcGxhY2VtZW50OworICAgIGlmICh0aW1lIDw9IDAuNSkKKyAgICAg
ICAgZGlzcGxhY2VtZW50ID0gdGltZTsKKyAgICBlbHNlIGlmICh0aW1lIDw9IDEuNSkgeworICAg
ICAgICBkb3VibGUgdCA9IHRpbWUgLSAwLjU7CisgICAgICAgIGRpc3BsYWNlbWVudCA9IHQgKiAo
MSArIHQgKiB0ICogKDAuNSAqIHQgLSAxKSkgKyAwLjU7CisgICAgfSBlbHNlCisgICAgICAgIGRp
c3BsYWNlbWVudCA9IDEuMDsKKworICAgIC8vIEtlZXAgdHJhY2sgb2YgaW50ZWdlciBwb3J0aW9u
IG9mIHNjcm9sbCB0aHVzIGZhciwgYW5kIHByZXBhcmUgaW5jcmVtZW50LgorICAgIEludFBvaW50
IHNjcm9sbChkaXNwbGFjZW1lbnQgKiBtX3ZlbG9jaXR5LngoKSwgZGlzcGxhY2VtZW50ICogbV92
ZWxvY2l0eS55KCkpOworICAgIEludFBvaW50IHNjcm9sbEluY3JlbWVudChzY3JvbGwgLSBtX2N1
bXVsYXRpdmVTY3JvbGwpOworICAgIG1fY3VtdWxhdGl2ZVNjcm9sbCA9IHNjcm9sbDsKKworICAg
IGlmICh0aW1lIDwgMS41IHx8IHNjcm9sbEluY3JlbWVudCAhPSBJbnRQb2ludDo6emVybygpKSB7
CisgICAgICAgIHRhcmdldC0+c2V0U2Nyb2xsSW5jcmVtZW50KHNjcm9sbEluY3JlbWVudCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDUyYmM0ZWM3
NGMwYjUyYjc1ODQ1YjQ2NjlmNjU2ZjA3ZDI1MGVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUb3VjaEZsaW5nUGxhdGZvcm1HZXN0
dXJlQ3VydmVfaAorI2RlZmluZSBUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmVfaAorCisj
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlLmgi
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQ7
CisKKy8vIEltcGxlbWVudGF0aW9uIG9mIFBsYXRmb3JtR2VzdHVyZUN1cnZlIHN1aXRhYmxlIGZv
ciB0b3VjaCBwYWQvc2NyZWVuLWJhc2VkCisvLyBmbGluZyBzY3JvbGwuIFN0YXJ0cyB3aXRoIGEg
ZmxhdCB2ZWxvY2l0eSBwcm9maWxlIGJhc2VkIG9uICd2ZWxvY2l0eScsIHdoaWNoCisvLyB0YWls
cyBvZmYgdG8gemVyby4gVGltZSBpcyBzY2FsZWQgdG8gdGhhdCBkdXJhdGlvbiBvZiB0aGUgZmxp
bmcgaXMgcHJvcG9ydGlvbmFsCisvLyB0aGUgaW5pdGlhbCB2ZWxvY2l0eS4KK2NsYXNzIFRvdWNo
RmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSA6IHB1YmxpYyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGNy
ZWF0ZShjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSk7CisgICAgdmlydHVhbCB+VG91Y2hGbGlu
Z1BsYXRmb3JtR2VzdHVyZUN1cnZlKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoZG91Ymxl
IHRpbWUsIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0Kik7CisKK3ByaXZhdGU6CisgICAgZXhw
bGljaXQgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKGNvbnN0IEZsb2F0UG9pbnQmIHZl
bG9jaXR5KTsKKworICAgIEZsb2F0UG9pbnQgbV92ZWxvY2l0eTsKKyAgICBmbG9hdCBtX3RpbWVT
Y2FsZUZhY3RvcjsKKyAgICBJbnRQb2ludCBtX2N1bXVsYXRpdmVTY3JvbGw7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1doZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZmFiNTdjZDVmODZkZGMzMWViNjE4ZGI3MzlmNzMxMDc4ZjY4YzFjNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1doZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVD
dXJ2ZS5jcHAKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCisKKyNp
bmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oIgorI2luY2x1ZGUgPG1hdGguaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZl
PiBXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShjb25zdCBGbG9hdFBvaW50
JiB2ZWxvY2l0eSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdoZWVsRmxpbmdQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZSh2ZWxvY2l0eSkpOworfQorCitXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJl
Q3VydmU6OldoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZShjb25zdCBGbG9hdFBvaW50JiB2
ZWxvY2l0eSkKKyAgICA6IG1fdmVsb2NpdHkodmVsb2NpdHkpCit7CisgICAgQVNTRVJUKHZlbG9j
aXR5ICE9IEZsb2F0UG9pbnQ6Onplcm8oKSk7Cit9CisKK1doZWVsRmxpbmdQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZTo6fldoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSgpCit7Cit9CisKK2Jvb2wg
V2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjphcHBseShkb3VibGUgdGltZSwgUGxhdGZv
cm1HZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKK3sKKyAgICAvLyBVc2UgYSBSYXlsZWlnaCBk
aXN0cmlidXRpb24gZm9yIHRoZSBjdXJ2ZS4gVGhpcyBzaW11bGF0ZXMgYSB2ZWxvY2l0eSBwcm9m
aWxlCisgICAgLy8gdGhhdCBzdGFydHMgYXQgMCwgaW5jcmVhc2VzIHRvIGEgbWF4aW11bSwgdGhl
biBkZWNyZWFzZXMgYWdhaW4gc21vb3RobHkuIEJ5CisgICAgLy8gdXNpbmcgdGhlIGN1bXVsYXRp
dmUgZGlzdHJpYnV0aW9uIGZ1bmN0aW9uIChDREYpIGluc3RlYWQgb2YgdGhlIHBvaW50LW1hc3Mg
ZnVuY3Rpb24sCisgICAgLy8gd2UgY2FuIGlzb2xhdGUgdGltaW5nIGppdHRlciBieSByZW1lbWJl
cmluZyB0aGUgQ0RGIHZhbHVlIGF0IHRoZSBsYXN0IHRpY2suIFNpbmNlCisgICAgLy8gdGhlIENE
RiBtYXhlcyBvdXQgYXQgMSwgc2NhbGUgaXQgYnkgdGhlIGlucHV0IHZlbG9jaXR5LgorICAgIC8v
CisgICAgLy8gQ0RGIC0+IEYoeDsgc2lnbWEpID0gMSAtIGV4cHsteF4yLzJcc2lnbWFeMn0KKyAg
ICAvLyByZWY6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmF5bGVpZ2hfZGlzdHJpYnV0
aW9uCisgICAgLy8gRklYTUU6IGNvbnNpZGVyIG1ha2luZyB0aGUgdmFsdWUgb2Ygc2lnbWEgc2V0
dGFibGUgaW4gdGhlIGNvbnN0cnVjdG9yLgorICAgIHN0YXRpYyBkb3VibGUgdHdvU2lnbWFTcXVh
cmVkSW52ZXJzZSA9IDE2OyAvLyBzaWdtYSA9IDAuMjUKKyAgICBmbG9hdCBjZGYgPSAxIC0gZXhw
KC10aW1lICogdGltZSAqIHR3b1NpZ21hU3F1YXJlZEludmVyc2UpOworICAgIEludFBvaW50IHNj
cm9sbChjZGYgKiBtX3ZlbG9jaXR5LngoKSwgY2RmICogbV92ZWxvY2l0eS55KCkpOworICAgIElu
dFBvaW50IHNjcm9sbEluY3JlbWVudChzY3JvbGwgLSBtX2N1bXVsYXRpdmVTY3JvbGwpOworICAg
IG1fY3VtdWxhdGl2ZVNjcm9sbCA9IHNjcm9sbDsKKworICAgIGlmIChjZGYgPCAwLjUgfHwgc2Ny
b2xsSW5jcmVtZW50ICE9IEludFBvaW50Ojp6ZXJvKCkpIHsKKyAgICAgICAgdGFyZ2V0LT5zZXRT
Y3JvbGxJbmNyZW1lbnQoc2Nyb2xsSW5jcmVtZW50KTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaGVlbEZsaW5nUGxhdGZvcm1HZXN0
dXJlQ3VydmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1doZWVsRmxpbmdQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3MjE0NjE2NTMzM2YyM2M4YzliYmY2YzAxZGRiZjA2
N2FlZTFhYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaGVl
bEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZV9oCisjZGVmaW5lIFdo
ZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZV9oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldDsKKworLy8gSW1wbGVtZW50YXRpb24g
b2YgUGxhdGZvcm1HZXN0dXJlQ3VydmUgc3VpdGFibGUgZm9yIG1vdXNlIHdoZWVsLWJhc2VkIGZs
aW5nCisvLyBzY3JvbGwuIEEgUmF5bGVpZ2ggZGlzdHJpYnR1dGlvbiBjdXJ2ZSBpcyB1c2VkIHRv
IGRlZmluZSB0aGUgdmVsb2NpdHkgcHJvZmlsZSwKKy8vIHNvIHZlbG9jaXR5IHN0YXJ0cyBhdCB6
ZXJvLCBhY2NlbGVyYXRlcyB0byBhIG1heGltdW0gcHJvcG9ydGlvbmFsIHRvICd2ZWxvY2l0eScs
CisvLyB0aGVuIGdlbnRseSB0YWlscyBvZmYgdG8gemVybyBhZ2Fpbi4KK2NsYXNzIFdoZWVsRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSA6IHB1YmxpYyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGNyZWF0
ZShjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSk7CisgICAgdmlydHVhbCB+V2hlZWxGbGluZ1Bs
YXRmb3JtR2VzdHVyZUN1cnZlKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoZG91YmxlIHRp
bWUsIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0Kik7CisKK3ByaXZhdGU6CisgICAgV2hlZWxG
bGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5KTsKKwor
ICAgIEZsb2F0UG9pbnQgbV92ZWxvY2l0eTsKKyAgICBJbnRQb2ludCBtX2N1bXVsYXRpdmVTY3Jv
bGw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0
dXJlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTU2ZTQ2YjRl
ZjQwMDkzZjExMmExYTYzNDA2NzIxNDFjZDI0MGQ0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlR2VzdHVyZUFu
aW1hdGlvbi5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgiCisKKyNp
bmNsdWRlICJjYy9DQ0dlc3R1cmVDdXJ2ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
c3NPd25QdHI8Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPiBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRp
b246OmNyZWF0ZShkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiBj
dXJ2ZSwgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKK3sKKyAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbihzdGFydFRpbWUsIGN1cnZlLCB0YXJnZXQp
KTsKK30KKworQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRp
b24oZG91YmxlIHN0YXJ0VGltZSwgUGFzc093blB0cjxDQ0dlc3R1cmVDdXJ2ZT4gY3VydmUsIEND
R2VzdHVyZUN1cnZlVGFyZ2V0KiB0YXJnZXQpCisgICAgOiBtX3N0YXJ0VGltZShzdGFydFRpbWUp
CisgICAgLCBtX2dlc3R1cmVDdXJ2ZShjdXJ2ZSkKKyAgICAsIG1fZ2VzdHVyZUN1cnZlVGFyZ2V0
KHRhcmdldCkKK3sKK30KKworQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjp+Q0NBY3RpdmVHZXN0
dXJlQW5pbWF0aW9uKCkKK3sKK30KKworYm9vbCBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb246OmFu
aW1hdGUoZG91YmxlIHRpbWUpCit7CisgICAgLy8gQ0NHZXN0dXJlQ3VydmVzIHVzZWQgemVyby1i
YXNlZCB0aW1lLCBzbyBzdWJ0cmFjdCBzdGFydC10aW1lLgorICAgIHJldHVybiBtX2dlc3R1cmVD
dXJ2ZS0+YXBwbHkodGltZSAtIG1fc3RhcnRUaW1lLCBtX2dlc3R1cmVDdXJ2ZVRhcmdldCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0
dXJlQW5pbWF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzcxYjIyNWRmZDNiZTJkYTk5NjkxNjA0ZWQ0MzU3
MzcyMWM0NTNkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oCkBAIC0wLDAgKzEs
NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uX2gK
KyNkZWZpbmUgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDR2VzdHVyZUN1cnZlOwor
Y2xhc3MgQ0NHZXN0dXJlQ3VydmVUYXJnZXQ7CisKK2NsYXNzIENDQWN0aXZlR2VzdHVyZUFuaW1h
dGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9u
KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRp
b24+IGNyZWF0ZShkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiwg
Q0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKKyAgICB+Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCk7
CisKKyAgICBib29sIGFuaW1hdGUoZG91YmxlIHRpbWUpOworCitwcml2YXRlOgorICAgIENDQWN0
aXZlR2VzdHVyZUFuaW1hdGlvbihkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPENDR2VzdHVy
ZUN1cnZlPiwgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKKworICAgIGRvdWJsZSBtX3N0YXJ0VGlt
ZTsKKyAgICBPd25QdHI8Q0NHZXN0dXJlQ3VydmU+IG1fZ2VzdHVyZUN1cnZlOworICAgIENDR2Vz
dHVyZUN1cnZlVGFyZ2V0KiBtX2dlc3R1cmVDdXJ2ZVRhcmdldDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dlc3R1cmVDdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJlQ3VydmUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zZWY5MzViNmE0NTJlY2ZlMDFjNTZlYzUyYzdmYzIzOTc5NmRmOWUzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0
dXJlQ3VydmUuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDR2Vz
dHVyZUN1cnZlX2gKKyNkZWZpbmUgQ0NHZXN0dXJlQ3VydmVfaAorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEludFBvaW50OworCitjbGFzcyBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbEluY3JlbWVudChjb25zdCBJbnRQb2lu
dCYpID0gMDsKKyAgICAvLyBGSVhNRTogYWRkIGludGVyZmFjZXMgZm9yIHNldFNjcm9sbCgpLCBz
ZXRQYWdlU2NhbGVBbmRTY3JvbGwoKSwgZXRjLgorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+
Q0NHZXN0dXJlQ3VydmVUYXJnZXQoKSB7IH0KK307CisKK2NsYXNzIENDR2VzdHVyZUN1cnZlIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ0dlc3R1cmVDdXJ2ZSgpIHsgfQorCisgICAgdmlydHVh
bCBib29sIGFwcGx5KGRvdWJsZSB0aW1lLCBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCopID0gMDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQppbmRleCBmNjVjZDVkNjVlZGFmOTU2OGEzYTBkYTYzODdjM2I4MTQzZWY3OTJjLi4y
ODVhN2E0YjUwNzRkZWMzY2VmZjJlOGRlNjFmNWI2YWNmYWRiMzIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKQEAgLTEwOSw2ICsxMDksNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0xh
eWVyVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTG9jYWxpemVk
TnVtYmVySUNVVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1BhaW50QWdncmVnYXRvclRl
c3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1BPREFyZW5hVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1BP
REludGVydmFsVHJlZVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NGNh
NTc2Njc0YTkwNDMwYmEyNzI2OTA3MzQ4YmRlZmQyMmI2ZWVjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRlc3QuY3Bw
CkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKworI2luY2x1ZGUgIkFjdGl2ZVBsYXRmb3JtR2Vz
dHVyZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0Lmgi
CisjaW5jbHVkZSAiVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCisjaW5jbHVkZSAi
V2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVH
ZXN0dXJlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NHZXN0dXJlQ3VydmUuaCIKKyNpbmNs
dWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNl
IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIE1vY2tQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZVRhcmdldCA6IHB1YmxpYyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbEluY3JlbWVudChjb25zdCBJbnRQb2ludCYg
ZGVsdGEpCisgICAgeworICAgICAgICBtX2N1bXVsYXRpdmVEZWx0YSA9IG1fY3VtdWxhdGl2ZURl
bHRhICsgZGVsdGE7CisgICAgfQorCisgICAgSW50UG9pbnQgY3VtdWxhdGl2ZURlbHRhKCkgY29u
c3QgeyByZXR1cm4gIG1fY3VtdWxhdGl2ZURlbHRhOyB9CisgICAgdm9pZCByZXNldEN1bXVsYXRp
dmVEZWx0YSgpIHsgbV9jdW11bGF0aXZlRGVsdGEgPSBJbnRQb2ludCgpOyB9CisKK3ByaXZhdGU6
CisgICAgSW50UG9pbnQgbV9jdW11bGF0aXZlRGVsdGE7Cit9OworCitURVNUKFBsYXRmb3JtR2Vz
dHVyZUN1cnZlLCBmbGluZ0N1cnZlKQoreworICAgIE1vY2tQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRh
cmdldCB0YXJnZXQ7CisgICAgT3duUHRyPEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbj4g
YW5pbWF0aW9uID0gQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUoMCwgV2hl
ZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2ludCgxMDAsIDApKSwg
JnRhcmdldCk7CisKKyAgICAvLyBOb3RlOiB0aGUgZXhwZWN0YXRpb25zIGJlbG93IGFyZSBkZXBl
bmRlbnQgb24gdGhlIHZhbHVlIG9mIHNpZ21hIGhhcmQtY29kZWQgaW4gdGhlIFJheWxlaWdoCisg
ICAgLy8gICAgICAgY3VydmUuIElmIHNpZ21hIGNoYW5nZXMsIHRoZXNlIHRlc3QgZXhwZWN0YXRp
b25zIHdpbGwgYWxzbyBjaGFuZ2UuCisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRl
KDApKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMC4yNSkpOworICAgIEVY
UEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZSgwLjQ1KSk7IC8vIFVzZSBub24tdW5pZm9ybSB0
aWNrIHNwYWNpbmcuCisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDAuNzUpKTsK
KyAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMTAwMCkpOworICAgIEVYUEVDVF9G
QUxTRShhbmltYXRpb24tPmFuaW1hdGUoMTAwMSkpOworICAgIC8vIFNpbmNlIHRoZSBSYXlsZWln
aCBDREYgbWF4ZXMgb3V0IGF0IDEsIHdlIGV4cGVjdCB0aGUgY3VtdWxhdGl2ZSBzY3JvbGwgaW5j
cmVtZW50cyB0bworICAgIC8vIG1hdGNoIHRoZSBpbnB1dCB2ZWxvY2l0eSBwYXJhbWV0ZXIuCisg
ICAgLy8gU2luY2Ugd2UgY2FuIGJlIG9mZiBieSArLy0wLjUgb24gZWFjaCBjb252ZXJzaW9uIHRv
IGludCBmb3Igc2V0U2Nyb2xsSW5jcmVtZW50LAorICAgIC8vIHBpY2sgdGhlICduZWFybmVzcycg
dG8gYmUgd2l0aGluIHRoZSBudW1iZXIgb2YgdGltZXMgYW5pbWF0ZSByZXR1cm5zIHRydWUuCisg
ICAgRVhQRUNUX05FQVIodGFyZ2V0LmN1bXVsYXRpdmVEZWx0YSgpLngoKSwgMTAwLCAxKTsKKyAg
ICBFWFBFQ1RfRVEodGFyZ2V0LmN1bXVsYXRpdmVEZWx0YSgpLnkoKSwgMCk7CisKKyAgICBkb3Vi
bGUgYmFzZVRpbWUgPSA0Mi40MjsKKyAgICBhbmltYXRpb24gPSBBY3RpdmVQbGF0Zm9ybUdlc3R1
cmVBbmltYXRpb246OmNyZWF0ZShiYXNlVGltZSwgV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1
cnZlOjpjcmVhdGUoRmxvYXRQb2ludCgxMDAsIDApKSwgJnRhcmdldCk7CisgICAgdGFyZ2V0LnJl
c2V0Q3VtdWxhdGl2ZURlbHRhKCk7CisKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1h
dGUoYmFzZVRpbWUgKyAwLjM1KSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRl
KGJhc2VUaW1lICsgMS4zNSkpOworICAgIEVYUEVDVF9GQUxTRShhbmltYXRpb24tPmFuaW1hdGUo
YmFzZVRpbWUgKyAxMDAwKSk7CisgICAgRVhQRUNUX05FQVIodGFyZ2V0LmN1bXVsYXRpdmVEZWx0
YSgpLngoKSwgMTAwLCAxKTsKKworICAgIGFuaW1hdGlvbiA9IEFjdGl2ZVBsYXRmb3JtR2VzdHVy
ZUFuaW1hdGlvbjo6Y3JlYXRlKDAsIFdoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3Jl
YXRlKEZsb2F0UG9pbnQoNTAsIDE1MCkpLCAmdGFyZ2V0KTsKKyAgICB0YXJnZXQucmVzZXRDdW11
bGF0aXZlRGVsdGEoKTsKKworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZSgwKSk7
CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDAuMjUpKTsKKyAgICBFWFBFQ1Rf
VFJVRShhbmltYXRpb24tPmFuaW1hdGUoMC40NSkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlv
bi0+YW5pbWF0ZSgwLjc1KSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDEw
MDApKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbWF0aW9uLT5hbmltYXRlKDEwMDEpKTsKKyAgICBF
WFBFQ1RfTkVBUih0YXJnZXQuY3VtdWxhdGl2ZURlbHRhKCkueCgpLCA1MCwgMSk7CisgICAgRVhQ
RUNUX05FQVIodGFyZ2V0LmN1bXVsYXRpdmVEZWx0YSgpLnkoKSwgMTUwLCAxKTsKK30KKworVEVT
VChQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSwgZmxpbmdDdXJ2ZVRvdWNoKQoreworICAgIE1vY2tQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCB0YXJnZXQ7CisgICAgT3duUHRyPEFjdGl2ZVBsYXRmb3Jt
R2VzdHVyZUFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0
aW9uOjpjcmVhdGUoMCwgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxv
YXRQb2ludCgxMDAwLCAwKSksICZ0YXJnZXQpOworCisgICAgLy8gTm90ZTogdGhlIGV4cGVjdGF0
aW9ucyBiZWxvdyBhcmUgZGVwZW5kZW50IG9uIHRoZSB2YWx1ZSBvZiBzaWdtYSBoYXJkLWNvZGVk
IGluIHRoZSBSYXlsZWlnaAorICAgIC8vICAgICAgIGN1cnZlLiBJZiBzaWdtYSBjaGFuZ2VzLCB0
aGVzZSB0ZXN0IGV4cGVjdGF0aW9ucyB3aWxsIGFsc28gY2hhbmdlLgorICAgIEVYUEVDVF9UUlVF
KGFuaW1hdGlvbi0+YW5pbWF0ZSgwKSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmlt
YXRlKDAuMjUpKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMC40NSkpOyAv
LyBVc2Ugbm9uLXVuaWZvcm0gdGljayBzcGFjaW5nLgorICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlv
bi0+YW5pbWF0ZSgwLjc1KSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDAu
OSkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZSgxMDAwKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKGFuaW1hdGlvbi0+YW5pbWF0ZSgxMDAxKSk7CisgICAgLy8gU2luY2Ugd2UgY2Fu
IGJlIG9mZiBieSArLy0wLjUgb24gZWFjaCBjb252ZXJzaW9uIHRvIGludCBmb3Igc2V0U2Nyb2xs
SW5jcmVtZW50LAorICAgIC8vIHBpY2sgdGhlICduZWFybmVzcycgdG8gYmUgd2l0aGluIHRoZSA1
ICogbnVtYmVyIG9mIHRpbWVzIGFuaW1hdGUgcmV0dXJucyB0cnVlLgorICAgIEVYUEVDVF9ORUFS
KHRhcmdldC5jdW11bGF0aXZlRGVsdGEoKS54KCksIDEwMDAsIDEpOworICAgIEVYUEVDVF9FUSh0
YXJnZXQuY3VtdWxhdGl2ZURlbHRhKCkueSgpLCAwKTsKK30KKworfSAvLyBuYW1lc3BhY2UgYW5v
bnltb3VzCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>